From 7df2b0c42c4ca47be8b7aa5a5a8b0ec8704aba20 Mon Sep 17 00:00:00 2001 From: Antonio Miguel Date: Thu, 17 Oct 2019 13:59:54 -0300 Subject: [PATCH 01/18] controller usuario --- .../controller/UsuarioController.java | 53 +++++++++++++++++++ .../securitydemo/service/UsuarioService.java | 4 ++ .../src/main/resources/application-dev.yaml | 2 +- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java new file mode 100644 index 0000000..fed27cd --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java @@ -0,0 +1,53 @@ +package br.com.ifpb.pweb2.securitydemo.controller; + +import br.com.ifpb.pweb2.securitydemo.domain.Usuario; +import br.com.ifpb.pweb2.securitydemo.service.UsuarioException; +import br.com.ifpb.pweb2.securitydemo.service.UsuarioService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +@RestController +@RequestMapping(path = "/usuarios") +public class UsuarioController { + + private UsuarioService usuarioService; + + public UsuarioController(UsuarioService usuarioService) { + this.usuarioService = usuarioService; + } + + @GetMapping + public ResponseEntity> listar(){ + List usuarios = this.usuarioService.listarUsuarios(); + return ResponseEntity.ok(usuarios); + } + + @GetMapping("/{id") + public ResponseEntity getUsuario(@PathVariable("id") Long id){ + Usuario usuario = this.usuarioService.recuperarPorId(id).get(); + return ResponseEntity.ok(usuario); + } + + @PostMapping + public ResponseEntity salvar(@RequestBody @Valid Usuario usuario){ + try { + usuario = usuarioService.salvarUsuario(usuario); + } catch(UsuarioException e) { + return ResponseEntity.badRequest().header("erro", e.getMessage()).build(); + } + return ResponseEntity.ok(usuario); + } + + @PutMapping + public void atualizar(@RequestBody Usuario usuario){ + this.usuarioService.atualizarUsuario(usuario); + } + + @DeleteMapping("/{id}") + public void deletar(@PathVariable("id") Long id){ + this.usuarioService.removerUsuario(id); + } +} diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java index 0fcc0df..1fb603b 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java @@ -43,6 +43,10 @@ public void salvarLog() { log.info("Usuário salvo"); } + public Optional recuperarPorId(Long id){ + return this.usuarioRepository.findById(id); + } + public void removerUsuario(Long id) { this.usuarioRepository.deleteById(id); } diff --git a/exemplos/02-seguranca/src/main/resources/application-dev.yaml b/exemplos/02-seguranca/src/main/resources/application-dev.yaml index 05c263f..d951b4b 100644 --- a/exemplos/02-seguranca/src/main/resources/application-dev.yaml +++ b/exemplos/02-seguranca/src/main/resources/application-dev.yaml @@ -2,7 +2,7 @@ spring: datasource: url: jdbc:postgresql://localhost:5432/pweb2 username: postgres - password: secret + password: postgres driver-class-name: org.postgresql.Driver jpa: hibernate: From 77fa210a1e2b3a6cdd97a59b62825b069cab7aa5 Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 10:30:59 -0300 Subject: [PATCH 02/18] Criando da branch developer --- exemplos/02-seguranca/pom.xml | 119 +++++++++--------- .../src/main/resources/application.yaml | 2 +- 2 files changed, 61 insertions(+), 60 deletions(-) diff --git a/exemplos/02-seguranca/pom.xml b/exemplos/02-seguranca/pom.xml index 7c0b5df..363d8e8 100644 --- a/exemplos/02-seguranca/pom.xml +++ b/exemplos/02-seguranca/pom.xml @@ -1,70 +1,71 @@ - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.1.9.RELEASE - - - br.com.ifpb.pweb2 - security-demo - 0.0.1-SNAPSHOT - security-demo - Demo project for Spring Security + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.9.RELEASE + + + br.com.ifpb.pweb2 + security-demo + 0.0.1-SNAPSHOT + security-demo + Demo project for Spring Security - - 1.8 - + + 1.8 + - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-web - + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-web + - - org.springframework.boot - spring-boot-starter-security - + + org.springframework.boot + spring-boot-starter-security + - - org.projectlombok - lombok - 1.18.10 - + + org.projectlombok + lombok + 1.18.10 + - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.security - spring-security-test - test - + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.security + spring-security-test + test + - - org.postgresql - postgresql - 42.2.8 - + + org.postgresql + postgresql + runtime + - + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/exemplos/02-seguranca/src/main/resources/application.yaml b/exemplos/02-seguranca/src/main/resources/application.yaml index c5af4b7..6521a4e 100644 --- a/exemplos/02-seguranca/src/main/resources/application.yaml +++ b/exemplos/02-seguranca/src/main/resources/application.yaml @@ -10,4 +10,4 @@ app: login: diego senha: 123 papel: ADMIN - tipoAutenticacao: BANCO \ No newline at end of file + tipoAutenticacao: MEMORIA \ No newline at end of file From 6ec2bed7c7e4a9ddf44c0feffff08e7205adcb2b Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 11:17:38 -0300 Subject: [PATCH 03/18] =?UTF-8?q?Cria=C3=A7=C3=A3o=20da=20classe=20Usuario?= =?UTF-8?q?Controller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pweb2/securitydemo/controller/UsuarioController.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java new file mode 100644 index 0000000..6ca3166 --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java @@ -0,0 +1,5 @@ +package br.com.ifpb.pweb2.securitydemo.controller; + +public class UsuarioController { + +} From 29b319310d5eebb95a865430570f2a66b3e0572b Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 11:18:47 -0300 Subject: [PATCH 04/18] =?UTF-8?q?Inclus=C3=A3o=20do=20@JsonIgnore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ifpb/pweb2/securitydemo/domain/Usuario.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java index ad72737..4cc4bd1 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java @@ -6,6 +6,8 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import com.fasterxml.jackson.annotation.JsonIgnore; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -35,7 +37,7 @@ public class Usuario implements UserDetails { @NotNull private String nome; - @Min(18) + @Min(10) @Max(100) private Integer idade; @@ -53,36 +55,43 @@ public class Usuario implements UserDetails { private LocalDateTime dataCadastro; @Override + @JsonIgnore public Collection getAuthorities() { return Collections.singleton(new SimpleGrantedAuthority("ROLE_ADMIN")); } @Override + @JsonIgnore public String getPassword() { return senha; } @Override + @JsonIgnore public String getUsername() { return login; } @Override + @JsonIgnore public boolean isAccountNonExpired() { return true; } @Override + @JsonIgnore public boolean isAccountNonLocked() { return true; } @Override + @JsonIgnore public boolean isCredentialsNonExpired() { return true; } @Override + @JsonIgnore public boolean isEnabled() { return true; } From 4cd8adbec08979ffe629908887d620c44ce803c8 Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 11:19:49 -0300 Subject: [PATCH 05/18] =?UTF-8?q?Corriginto=20bug=20quando=20editar=20usua?= =?UTF-8?q?rio.=20O=20usu=C3=A1rio=20n=C3=A3o=20estava=20criptografando=20?= =?UTF-8?q?a=20senha=20quando=20era=20editado.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java index 995b171..f715f76 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java @@ -62,6 +62,7 @@ public Optional recuperarPorNomeEIdade(String nome, Integer idade) { } public Usuario atualizarUsuario(Usuario usuario) { + usuario.setSenha(passwordEncoder.encode(usuario.getPassword())); return this.usuarioRepository.save(usuario); } From 8724bbfed65a0dadbe3982a15c3408f70088e0ab Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 11:20:21 -0300 Subject: [PATCH 06/18] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20da=20classe=20U?= =?UTF-8?q?suarioController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UsuarioController.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java index 6ca3166..12d124a 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java @@ -1,5 +1,48 @@ package br.com.ifpb.pweb2.securitydemo.controller; +import java.util.List; + +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import br.com.ifpb.pweb2.securitydemo.domain.Usuario; +import br.com.ifpb.pweb2.securitydemo.service.UsuarioException; +import br.com.ifpb.pweb2.securitydemo.service.UsuarioService; + +@RestController +@RequestMapping(path = "/api") public class UsuarioController { + + private UsuarioService usuarioService; + + + public UsuarioController(UsuarioService usuarioService) { + this.usuarioService = usuarioService; + } + + @GetMapping("/usuarios") + public List listarUsuarios(){ + return usuarioService.listarUsuarios(); + } + + @PostMapping("/usuario") + public Usuario adicionarUsuario(@RequestBody Usuario usuario) throws UsuarioException { + return usuarioService.salvarUsuario(usuario); + } + + @PutMapping("/usuario") + public Usuario editarUsuario(@RequestBody Usuario usuario) { + return usuarioService.atualizarUsuario(usuario); + } + + @DeleteMapping("/usuario") + public void excluirUsuario(@RequestBody Usuario usuario) { + usuarioService.removerUsuario(usuario.getId()); + } } From cea2cc560f629ef1c1b341b1d9635d791020dd28 Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 11:35:51 -0300 Subject: [PATCH 07/18] Refatorando o Usuario Controller --- .../controller/UsuarioController.java | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java index 12d124a..6711f2a 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java @@ -2,8 +2,12 @@ import java.util.List; +import javax.validation.Valid; + +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; 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.PutMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -11,11 +15,10 @@ import org.springframework.web.bind.annotation.RestController; import br.com.ifpb.pweb2.securitydemo.domain.Usuario; -import br.com.ifpb.pweb2.securitydemo.service.UsuarioException; import br.com.ifpb.pweb2.securitydemo.service.UsuarioService; @RestController -@RequestMapping(path = "/api") +@RequestMapping(path = "/usuarios") public class UsuarioController { private UsuarioService usuarioService; @@ -24,25 +27,35 @@ public class UsuarioController { public UsuarioController(UsuarioService usuarioService) { this.usuarioService = usuarioService; } + + @GetMapping("/{login}") + public Usuario recuperarPorLogin(@PathVariable("login") String login) { + return usuarioService.recuperarPorLogin(login).orElseThrow(RuntimeException::new); + } - @GetMapping("/usuarios") + @GetMapping public List listarUsuarios(){ return usuarioService.listarUsuarios(); } - @PostMapping("/usuario") - public Usuario adicionarUsuario(@RequestBody Usuario usuario) throws UsuarioException { - return usuarioService.salvarUsuario(usuario); + @PostMapping + public ResponseEntity adicionarUsuario(@RequestBody @Valid Usuario usuario){ + try { + usuario = usuarioService.salvarUsuario(usuario); + } catch (Exception e) { + return ResponseEntity.badRequest().header("erro",e.getMessage()).build(); + } + return ResponseEntity.ok(usuario); } - @PutMapping("/usuario") - public Usuario editarUsuario(@RequestBody Usuario usuario) { + @PutMapping + public Usuario editarUsuario(@RequestBody @Valid Usuario usuario) { return usuarioService.atualizarUsuario(usuario); } - @DeleteMapping("/usuario") - public void excluirUsuario(@RequestBody Usuario usuario) { - usuarioService.removerUsuario(usuario.getId()); + @DeleteMapping("/{id}") + public void excluirUsuario(@PathVariable("id") Long id) { + usuarioService.removerUsuario(id); } } From 415090904597ec300cf5957f6bb20064e5a54297 Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 16:21:40 -0300 Subject: [PATCH 08/18] =?UTF-8?q?Cria=C3=A7=C3=A3o=20do=20SecurityConfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../securitydemo/config/SecurityConfig.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java new file mode 100644 index 0000000..4303cb2 --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java @@ -0,0 +1,19 @@ +package br.com.ifpb.pweb2.securitydemo.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import lombok.Data; + +@Configuration +@ConfigurationProperties(prefix = "security") +@Data +public class SecurityConfig { + private String authLoginUrl; + private String tokenType; + private String secret; + private String issuer; + private String audience; + private Long expiration; + +} From f3b08a7d76fa7ea10ab673771dd86e47792c47c8 Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 16:24:33 -0300 Subject: [PATCH 09/18] =?UTF-8?q?Cria=C3=A7=C3=A3o=20do=20SecurityConstant?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/SecurityConstants.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConstants.java diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConstants.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConstants.java new file mode 100644 index 0000000..46b54d9 --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConstants.java @@ -0,0 +1,21 @@ +package br.com.ifpb.pweb2.securitydemo.config; + +public class SecurityConstants { + public static final String AUTH_LOGIN_URL = "/api/authenticate"; + + // Signing key for HS512 algorithm + // Use http://www.allkeysgenerator.com/ para gerar uma chave + public static final String JWT_SECRET = "884B504E-224E-48DE-9664-7A3057BAEC23"; + + // JWT token defaults + public static final String TOKEN_HEADER = "Authorization"; + public static final String TOKEN_PREFIX = "Bearer "; + public static final String TOKEN_TYPE = "JWT"; + public static final String TOKEN_ISSUER = "secure-api"; + public static final String TOKEN_AUDIENCE = "secure-app"; + + private SecurityConstants() { + } + + +} From 5ae8e8928517dc9b0558b3a1dc23e3a4178424d9 Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 16:53:50 -0300 Subject: [PATCH 10/18] Refatorando o pom.xml --- exemplos/02-seguranca/pom.xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/exemplos/02-seguranca/pom.xml b/exemplos/02-seguranca/pom.xml index 363d8e8..dc124e2 100644 --- a/exemplos/02-seguranca/pom.xml +++ b/exemplos/02-seguranca/pom.xml @@ -56,6 +56,25 @@ postgresql runtime + + + + io.jsonwebtoken + jjwt-api + 0.10.5 + + + io.jsonwebtoken + jjwt-impl + 0.10.5 + runtime + + + io.jsonwebtoken + jjwt-jackson + 0.10.5 + runtime + From 069be784f825075f3c5988c6fef652ce9cd71ce8 Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 16:54:21 -0300 Subject: [PATCH 11/18] Refatorando o yaml --- .../02-seguranca/src/main/resources/application.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/exemplos/02-seguranca/src/main/resources/application.yaml b/exemplos/02-seguranca/src/main/resources/application.yaml index 6521a4e..40d7437 100644 --- a/exemplos/02-seguranca/src/main/resources/application.yaml +++ b/exemplos/02-seguranca/src/main/resources/application.yaml @@ -10,4 +10,13 @@ app: login: diego senha: 123 papel: ADMIN - tipoAutenticacao: MEMORIA \ No newline at end of file + tipoAutenticacao: BANCO + +security: + authLoginUrl: /login + tokenType: JWT + issuer: ifpb + audience: pweb2 + expiration: 3600000 + secret: n2r5u8x/A%D*G-KaPdSgVkYp3s6v9y$B&E(H+MbQeThWmZq4t7w!z%C*F-J@NcRf + ## Use: https://www.allkeysgenerator.com/ para gerar o segredo \ No newline at end of file From 1feb7fb62b5e6d576db890be18bf135a00ca1d82 Mon Sep 17 00:00:00 2001 From: isleimar Date: Sat, 19 Oct 2019 16:55:31 -0300 Subject: [PATCH 12/18] =?UTF-8?q?Implementando=20a=20autentica=C3=A7=C3=A3?= =?UTF-8?q?o=20JWT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ApplicationConfig.java | 5 +- .../securitydemo/config/SecurityConfig.java | 18 ++-- .../config/WebSecurityConfig.java | 44 +++++++-- .../config/jwt/JwtAuthenticationFilter.java | 68 ++++++++++++++ .../config/jwt/JwtAuthorizationFilter.java | 90 +++++++++++++++++++ 5 files changed, 206 insertions(+), 19 deletions(-) create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthorizationFilter.java diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java index bc36b99..8b05da2 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java @@ -1,11 +1,10 @@ package br.com.ifpb.pweb2.securitydemo.config; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; +import lombok.Data; + @Configuration @ConfigurationProperties(prefix = "app") @Data diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java index 4303cb2..cc2e96e 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java @@ -1,19 +1,17 @@ package br.com.ifpb.pweb2.securitydemo.config; +import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; -import lombok.Data; - @Configuration -@ConfigurationProperties(prefix = "security") +@ConfigurationProperties(prefix="security") @Data public class SecurityConfig { - private String authLoginUrl; - private String tokenType; - private String secret; - private String issuer; - private String audience; - private Long expiration; - + private String authLoginUrl; + private String tokenType; + private String secret; + private String issuer; + private String audience; + private Long expiration; } diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java index 43671e8..541c782 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java @@ -1,33 +1,65 @@ package br.com.ifpb.pweb2.securitydemo.config; +import br.com.ifpb.pweb2.securitydemo.config.jwt.JwtAuthenticationFilter; +import br.com.ifpb.pweb2.securitydemo.config.jwt.JwtAuthorizationFilter; +import org.springframework.context.annotation.Bean; import org.springframework.core.annotation.Order; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; 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 org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; @EnableWebSecurity @EnableGlobalMethodSecurity(jsr250Enabled = true, securedEnabled = true, prePostEnabled = true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { - public WebSecurityConfig() { + private final SecurityConfig securityConfig; + + private final UserDetailsService userDetailsService; + + private final PasswordEncoder passwordEncoder; + + + public WebSecurityConfig(SecurityConfig securityConfig, UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) { + this.securityConfig = securityConfig; + this.userDetailsService = userDetailsService; + this.passwordEncoder = passwordEncoder; } @Override protected void configure(HttpSecurity http) throws Exception { - http + http.cors().and() .authorizeRequests() - .antMatchers("/api/**").authenticated() .antMatchers("/publico").permitAll() - .antMatchers("/usuarios").hasRole("ADMIN") + .anyRequest().authenticated() .and() + .addFilter(new JwtAuthenticationFilter(authenticationManager(), securityConfig)) + .addFilter(new JwtAuthorizationFilter(authenticationManager(), securityConfig)) .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and() - .httpBasic() .and() .csrf().disable(); } + + @Override + public void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); + } + + @Bean + public CorsConfigurationSource corsConfigurationSource() { + final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues()); + return source; + } + } diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java new file mode 100644 index 0000000..b597361 --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java @@ -0,0 +1,68 @@ +package br.com.ifpb.pweb2.securitydemo.config.jwt; + +import br.com.ifpb.pweb2.securitydemo.config.SecurityConfig; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.security.Keys; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.stereotype.Component; + +import javax.servlet.FilterChain; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { + + private final AuthenticationManager authenticationManager; + + private final SecurityConfig securityConfig; + + public JwtAuthenticationFilter(AuthenticationManager authenticationManager, SecurityConfig securityConfig) { + this.authenticationManager = authenticationManager; + this.securityConfig = securityConfig; + setFilterProcessesUrl(this.securityConfig.getAuthLoginUrl()); + } + + @Override + public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) { + String username = request.getParameter("usuario"); + String password = request.getParameter("senha"); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + + return authenticationManager.authenticate(authenticationToken); + } + + @Override + protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, + FilterChain filterChain, Authentication authentication) { + UserDetails user = ((UserDetails) authentication.getPrincipal()); + + List roles = user.getAuthorities() + .stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.toList()); + + String signingKey = securityConfig.getSecret(); + + String token = Jwts.builder() + .signWith(Keys.hmacShaKeyFor(signingKey.getBytes()), SignatureAlgorithm.HS512) + .setHeaderParam("type", securityConfig.getTokenType()) + .setIssuer(securityConfig.getIssuer()) //emissor + .setAudience(securityConfig.getAudience()) //destinatario + .setSubject(user.getUsername()) + .setExpiration(new Date(System.currentTimeMillis() + securityConfig.getExpiration())) + .claim("roles", roles) + .compact(); + + response.addHeader("Authorization", "Bearer " + token); + } + +} diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthorizationFilter.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthorizationFilter.java new file mode 100644 index 0000000..558c7c3 --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthorizationFilter.java @@ -0,0 +1,90 @@ +package br.com.ifpb.pweb2.securitydemo.config.jwt; + +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; + +import br.com.ifpb.pweb2.securitydemo.config.SecurityConfig; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.Jws; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.MalformedJwtException; +import io.jsonwebtoken.SignatureException; +import io.jsonwebtoken.UnsupportedJwtException; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class JwtAuthorizationFilter extends BasicAuthenticationFilter { + + private final SecurityConfig securityConfig; + + public JwtAuthorizationFilter(AuthenticationManager authenticationManager, SecurityConfig securityConfig) { + super(authenticationManager); + this.securityConfig = securityConfig; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, + FilterChain filterChain) throws IOException, ServletException { + UsernamePasswordAuthenticationToken authentication = getAuthentication(request); + if (authentication == null) { + filterChain.doFilter(request, response); + return; + } + + SecurityContextHolder.getContext().setAuthentication(authentication); + filterChain.doFilter(request, response); + } + + private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) { + String token = request.getHeader("Authorization"); + if (token != null && !token.isEmpty() && token.startsWith("Bearer")) { + try { + String signingKey = securityConfig.getSecret(); + + Jws parsedToken = Jwts.parser() + .setSigningKey(signingKey.getBytes()) + .parseClaimsJws(token.replace("Bearer ", "")); + + String username = parsedToken + .getBody() + .getSubject(); + + List authorities = ((List) parsedToken.getBody() + .get("roles")).stream() + .map(authority -> new SimpleGrantedAuthority((String) authority)) + .collect(Collectors.toList()); + + if (username != null && !username.isEmpty()){ + return new UsernamePasswordAuthenticationToken(username, null, authorities); + } + + } catch (ExpiredJwtException exception) { + log.warn("Request to parse expired JWT : {} failed : {}", token, exception.getMessage()); + } catch (UnsupportedJwtException exception) { + log.warn("Request to parse unsupported JWT : {} failed : {}", token, exception.getMessage()); + } catch (MalformedJwtException exception) { + log.warn("Request to parse invalid JWT : {} failed : {}", token, exception.getMessage()); + } catch (SignatureException exception) { + log.warn("Request to parse JWT with invalid signature : {} failed : {}", token, exception.getMessage()); + } catch (IllegalArgumentException exception) { + log.warn("Request to parse empty or null JWT : {} failed : {}", token, exception.getMessage()); + } + } + + return null; + } + +} From bd15e270f0fbf94bbf6585d955b91b18039b6dbe Mon Sep 17 00:00:00 2001 From: Antonio Miguel Date: Tue, 22 Oct 2019 15:04:44 -0300 Subject: [PATCH 13/18] ajustando aplication yml --- .../securitydemo/config/jwt/JwtAuthenticationFilter.java | 2 +- .../java/br/com/ifpb/pweb2/securitydemo/BcryptEncoder.java | 2 +- exemplos/02-seguranca/src/test/resources/application.yaml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java index b597361..d4ee7d9 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java @@ -4,13 +4,13 @@ import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.security.Keys; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.stereotype.Component; import javax.servlet.FilterChain; import javax.servlet.http.HttpServletRequest; diff --git a/exemplos/02-seguranca/src/test/java/br/com/ifpb/pweb2/securitydemo/BcryptEncoder.java b/exemplos/02-seguranca/src/test/java/br/com/ifpb/pweb2/securitydemo/BcryptEncoder.java index 66019e5..274afa5 100644 --- a/exemplos/02-seguranca/src/test/java/br/com/ifpb/pweb2/securitydemo/BcryptEncoder.java +++ b/exemplos/02-seguranca/src/test/java/br/com/ifpb/pweb2/securitydemo/BcryptEncoder.java @@ -18,7 +18,7 @@ public class BcryptEncoder { @Test public void gerarSenha() { - String senha = "1234"; + String senha = "123"; String hash = this.passwordEncoder.encode(senha); log.info("SENHA = "); log.info(hash); diff --git a/exemplos/02-seguranca/src/test/resources/application.yaml b/exemplos/02-seguranca/src/test/resources/application.yaml index 9d4b173..f48d02b 100644 --- a/exemplos/02-seguranca/src/test/resources/application.yaml +++ b/exemplos/02-seguranca/src/test/resources/application.yaml @@ -7,9 +7,9 @@ app: spring: datasource: - url: jdbc:postgresql://localhost:5432/pweb2-teste + url: jdbc:postgresql://localhost:5432/pweb2 username: postgres - password: secret + password: postgres driver-class-name: org.postgresql.Driver jpa: hibernate: From 12125c7b78f0d3262556aef839c54380d6b54298 Mon Sep 17 00:00:00 2001 From: Antonio Miguel Date: Thu, 24 Oct 2019 14:14:13 -0300 Subject: [PATCH 14/18] corrigindo erro ao gerar senha encriptada --- .../config/jwt/JwtAuthenticationFilter.java | 3 +-- .../ifpb/pweb2/securitydemo/domain/dtos/LoginDto.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/dtos/LoginDto.java diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java index d4ee7d9..5f46c83 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java @@ -26,9 +26,8 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte private final SecurityConfig securityConfig; public JwtAuthenticationFilter(AuthenticationManager authenticationManager, SecurityConfig securityConfig) { - this.authenticationManager = authenticationManager; + this.authenticationManager=authenticationManager; this.securityConfig = securityConfig; - setFilterProcessesUrl(this.securityConfig.getAuthLoginUrl()); } @Override diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/dtos/LoginDto.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/dtos/LoginDto.java new file mode 100644 index 0000000..ec5c898 --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/dtos/LoginDto.java @@ -0,0 +1,10 @@ +package br.com.ifpb.pweb2.securitydemo.domain.dtos; + +import lombok.Data; + +@Data +public class LoginDto { + + private String login; + private String senha; +} From 12600e1736c1892240cf5ea04118acb572ef90cc Mon Sep 17 00:00:00 2001 From: Antonio Miguel Date: Thu, 24 Oct 2019 16:25:09 -0300 Subject: [PATCH 15/18] login padrao caso nao tenha usuarios no banco' --- .../config/WebSecurityConfig.java | 24 +++++++++++++++---- .../config/jwt/JwtAuthenticationFilter.java | 2 ++ .../securitydemo/service/UsuarioService.java | 4 ++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java index 541c782..b440adf 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java @@ -2,9 +2,9 @@ import br.com.ifpb.pweb2.securitydemo.config.jwt.JwtAuthenticationFilter; import br.com.ifpb.pweb2.securitydemo.config.jwt.JwtAuthorizationFilter; +import br.com.ifpb.pweb2.securitydemo.service.UsuarioService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; -import org.springframework.core.annotation.Order; -import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -23,13 +23,20 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { private final SecurityConfig securityConfig; + + private UsuarioService usuarioService; + + @Autowired + private ApplicationConfig applicationConfig; + private final UserDetailsService userDetailsService; private final PasswordEncoder passwordEncoder; - public WebSecurityConfig(SecurityConfig securityConfig, UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) { + public WebSecurityConfig(SecurityConfig securityConfig, UsuarioService usuarioService, UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) { this.securityConfig = securityConfig; + this.usuarioService = usuarioService; this.userDetailsService = userDetailsService; this.passwordEncoder = passwordEncoder; } @@ -52,7 +59,16 @@ protected void configure(HttpSecurity http) throws Exception { @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { - auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); + if(!usuarioService.IsVazio()){ + auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); + }else{ + auth.inMemoryAuthentication() + .passwordEncoder(passwordEncoder) + .withUser(applicationConfig.getAutenticacaoPadrao().getLogin()) + .password(passwordEncoder.encode(applicationConfig.getAutenticacaoPadrao().getSenha())) + .authorities("ROLE_"+applicationConfig.getAutenticacaoPadrao().getPapel()); + } + } @Bean diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java index 5f46c83..eca2e35 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java @@ -10,6 +10,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import javax.servlet.FilterChain; @@ -28,6 +29,7 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte public JwtAuthenticationFilter(AuthenticationManager authenticationManager, SecurityConfig securityConfig) { this.authenticationManager=authenticationManager; this.securityConfig = securityConfig; + setFilterProcessesUrl(this.securityConfig.getAuthLoginUrl()); } @Override diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java index f715f76..6a56ec3 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java @@ -66,4 +66,8 @@ public Usuario atualizarUsuario(Usuario usuario) { return this.usuarioRepository.save(usuario); } + public boolean IsVazio(){ + return usuarioRepository.findAll().isEmpty(); + } + } From 54d3cd39bd5c090adbbc2e4f9b1d2e5bcbea676f Mon Sep 17 00:00:00 2001 From: Antonio Miguel Date: Thu, 24 Oct 2019 19:23:48 -0300 Subject: [PATCH 16/18] corrigindo metodo de usuario padrao --- .../securitydemo/config/WebSecurityConfig.java | 18 +----------------- .../pweb2/securitydemo/domain/Usuario.java | 5 +++++ .../service/auth/UserDetailsServiceImpl.java | 14 +++++++++++++- .../src/test/resources/application.yaml | 2 +- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java index b440adf..5f97172 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java @@ -23,20 +23,13 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { private final SecurityConfig securityConfig; - - private UsuarioService usuarioService; - - @Autowired - private ApplicationConfig applicationConfig; - private final UserDetailsService userDetailsService; private final PasswordEncoder passwordEncoder; - public WebSecurityConfig(SecurityConfig securityConfig, UsuarioService usuarioService, UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) { + public WebSecurityConfig(SecurityConfig securityConfig, UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) { this.securityConfig = securityConfig; - this.usuarioService = usuarioService; this.userDetailsService = userDetailsService; this.passwordEncoder = passwordEncoder; } @@ -59,16 +52,7 @@ protected void configure(HttpSecurity http) throws Exception { @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { - if(!usuarioService.IsVazio()){ auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); - }else{ - auth.inMemoryAuthentication() - .passwordEncoder(passwordEncoder) - .withUser(applicationConfig.getAutenticacaoPadrao().getLogin()) - .password(passwordEncoder.encode(applicationConfig.getAutenticacaoPadrao().getSenha())) - .authorities("ROLE_"+applicationConfig.getAutenticacaoPadrao().getPapel()); - } - } @Bean diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java index 4cc4bd1..c6d56c0 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java @@ -54,6 +54,11 @@ public class Usuario implements UserDetails { private LocalDateTime dataCadastro; + public Usuario(String login, String senha) { + this.login=login; + this.senha=senha; + } + @Override @JsonIgnore public Collection getAuthorities() { diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/auth/UserDetailsServiceImpl.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/auth/UserDetailsServiceImpl.java index 00a1db8..45a61e3 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/auth/UserDetailsServiceImpl.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/auth/UserDetailsServiceImpl.java @@ -1,9 +1,12 @@ package br.com.ifpb.pweb2.securitydemo.service.auth; +import br.com.ifpb.pweb2.securitydemo.config.ApplicationConfig; +import br.com.ifpb.pweb2.securitydemo.domain.Usuario; import br.com.ifpb.pweb2.securitydemo.repository.UsuarioRepository; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @Service("userDetailsService") @@ -11,12 +14,21 @@ public class UserDetailsServiceImpl implements UserDetailsService { private final UsuarioRepository usuarioRepository; - public UserDetailsServiceImpl(UsuarioRepository usuarioRepository) { + private ApplicationConfig applicationConfig; + + private PasswordEncoder passwordEncoder; + + public UserDetailsServiceImpl(UsuarioRepository usuarioRepository, ApplicationConfig applicationConfig, PasswordEncoder passwordEncoder) { this.usuarioRepository = usuarioRepository; + this.applicationConfig = applicationConfig; + this.passwordEncoder = passwordEncoder; } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + if(username.equals(applicationConfig.getAutenticacaoPadrao().getLogin())){ + return new Usuario(this.applicationConfig.getAutenticacaoPadrao().getLogin(), passwordEncoder.encode(this.applicationConfig.getAutenticacaoPadrao().getSenha())); + } return usuarioRepository.findByLogin(username).orElseThrow( () -> new UsernameNotFoundException(username)); } } diff --git a/exemplos/02-seguranca/src/test/resources/application.yaml b/exemplos/02-seguranca/src/test/resources/application.yaml index f48d02b..cd755dc 100644 --- a/exemplos/02-seguranca/src/test/resources/application.yaml +++ b/exemplos/02-seguranca/src/test/resources/application.yaml @@ -13,5 +13,5 @@ spring: driver-class-name: org.postgresql.Driver jpa: hibernate: - ddl-auto: create-drop + ddl-auto: update database: postgresql \ No newline at end of file From 68412923366ffd7a21beadfe4f6efc4d0c90a88b Mon Sep 17 00:00:00 2001 From: caiquevitoriano Date: Thu, 24 Oct 2019 20:44:31 -0300 Subject: [PATCH 17/18] =?UTF-8?q?quest=C3=B5es=20atividade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...om autentica\303\247\303\243o via Token.pdf" | Bin 0 -> 65343 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" diff --git "a/Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" "b/Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..27cfdb7149b5db6375fd0197a8614dcaa4cdfe4b GIT binary patch literal 65343 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 s2(m#RPIxd#Z*T_K|9V`4|J-059QExTUG0rcV3` Date: Thu, 24 Oct 2019 20:55:48 -0300 Subject: [PATCH 18/18] preparando merge --- ...om autentica\303\247\303\243o via Token.pdf" | Bin ...om autentica\303\247\303\243o via Token.pdf" | Bin 0 -> 65343 bytes 2 files changed, 0 insertions(+), 0 deletions(-) rename "Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" => "Quest\303\265es - Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" (100%) create mode 100644 "exemplos/02-seguranca/Quest\303\265es - Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" diff --git "a/Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" "b/Quest\303\265es - Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" similarity index 100% rename from "Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" rename to "Quest\303\265es - Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" diff --git "a/exemplos/02-seguranca/Quest\303\265es - Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" "b/exemplos/02-seguranca/Quest\303\265es - Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..27cfdb7149b5db6375fd0197a8614dcaa4cdfe4b GIT binary patch literal 65343 zcmc$_bx>qamo17l?$9(&;Vy-{ySq2;?(WdIyE~1$yEg9b(73znYA+1<_$fL`9g*vQ<_$<_e?Wc>0CK(F?N1Q5XZ_4&d#sHUM%M zF&eWlGV1HIe__wg#-Y#3&dgwB9Spzx{zuv(ZcbuKPG8#pS4oTs0A&Aa{iRkh zHUQ&43xVRlR4)2;wSQTNG6R4d|6w7@0$}{-QeVcRtN=#fzq9NB#((DBf3%Z#ur*XN zcKR9={nr}vwJI39IekqN>o42||D6i`JC*nv>pv4p$;rXl(CI%0?fBIZ{eRH%4^{t( zlYhMaUo8G#Ir%pmOzdAP(tnnJPddW6EdOo}8E9OHbKe;B_wb0jyF)qO+x6PmRCmjo?I$&}P(TK7(b%Ee##a!H zn!p_AMC{H#!cNHAmMkiUe|JNSb+c#pX*jUR_cY`B2^tRbagPykjgMaMp z<$eFqwS}V+*>=m<8<sBy+>~Ne*Vg5>$}K&-@V@T`TB=srr zb=$1VhTFgShJ?ayL@RyDZJQe6JLF}>ExZ9XHjp5JWhN48F(#}C+JwkUBsEuBa&h8s zXIJ{tevnX34Ww}K+-;G10X>6iw+`LbJ*AKn^pA4aXr_88&CNt843z<+@m*kpafQO` ze2%bz4~NpZz}agFLMlyq;If}O!$6^NUlX4MWd8k+fq29iwsF6Af1F@QeA`r+3$)k$ zZe@rP=&(gwOiPaO<^FyF>6%-AOZbRUvV=@`UR}3pq>dXphy*a-?k;cNG6@EMSTe|N z3iMlA-0i~Bs>WDX?~x1ma02scWG=DX`VE{N>qyr=WAs`c5uThLWUe2>g%z_=DRL+I zp&Ek*soLRjZqFr8Xd zSXK{)Oh%!aGn02Ym&i{!kp`m6^#u^E9_WB(jRmgc(&sg*4;e<7g>OscykZSNM{v9D3fEE z>M`zfbrQcXbwen4i@s+$OeO@@%?5bU1tW78=+}!@bGpw$r-w93xFe;i((GM(KUA$w z*^aFOGK?NxaG%NeyS%w8rnpf@hTN*ZZ<|{i`eeyfulVZEk?a;Tz&-n$=-uLEsww2S z9sJBl$l^P6H||pLxd#S=d9p@B70BcGBHx5h9fToz?aaU^9M`wBRd``juQg%!6NRu+ z-5kYeS?I1c#C9TtYMf`esCID*yY~t2rG{W4Ix5eIo&}Tppo`)Z}^4(I&*A#_;j#7%M(dq-B>=wWcRw!kj zQ3fFmRxQ(7Y^;DW9<;EVN5Ryg7G0722RRDy zXXA_6gJT_IbjNj9zY&>%NI<-0%x@(81^HK&f3$DapyL1~KWdyKd`SAHLrGxLT71G2 zS2#5!o#bcM)3C6nt!K1wG(zc+u0aJcDe}}|MA)~wi<%M2(7lOFXC$;!Z~5zrrxtZo z6x1aHiz4-Lg`3R>BD`Au>#a$L`n*kTYak=AvbgMZy{dfJx>0`zelFVZN;!mun6_p6 zavX7P+^tAUoYM@rlQd>1KqWDRZGhxqbIp-@>mc4`_E3jtIWY2iL7sGTq)o!t z9PE+s;4JMdLB6+F#p2pAc8i^^?#dVGE*!;qR&MK)r031Mf*&Bus2w3l&Z1(;QS(sQ zE_Qd=NDHiar-j#acW6Omrmv$*5hL3UErLX-N?u~9Xuy=hhi-b33wK5jxvxmUlrpg6 z+}3{8E08?gI5eoQlkwDku%ma zd7HS4TE=s;=-Cp&L~?pqSCT`|#612xPftJCNeQocDp|f(44ioWRt6zUaFj(_Tjdt> zQmX$M>)XA0l)0=~*~VBp_ilI+&P*7l7VC&L#N*_n-J+X70CyzBGl^Z~TbemzWzTP` z3GyubRF_(+wHfbMGDf6|F=NSba+Td#j-VK%tY|4zO4Hl$Bn`7Wh~e}^v#@ANj*c^p z!mJ@wE!w;4tk|)j)O#NCj%kT=<$E+rLxO?iGfu~t6js6|xtzc6!@j2iv@z&y7t{0& zMt_jya8^2oL^jjOVY&ZKad2lbeUCANzoetnsD34ZCjQA|?x-|rreZM@k7?CeeqDhp zF^Qv`KsMOM-?Ww8l$i0xQhJ!Nw~RbbmePrMxZ5M*ah8O_!J2ll7*;Djx?0Rr+Y_{g zqg){cP2NptnU~#ko+tPb&BLVh(}OgUBgOm&mMUh3fa)RE#Gv zEm%;I{AVnA?c*_qisvvA9{0oqX$O5;Uk0}g~v3{LU%N}ap$V$_$GU#UU$+L@3uU5M2TfwwA#^WRUTvZb~r=~ zKabZb4Hd>{d8;A*=C?t!Fs=WEd)mo3v6W(wRXdu$)z7KSW%*4^){^}g=%Uyg%^)2< zu_+*BGF;1m?YyTx-@YSmBZ4xNwV&_2Ha0;Sc2Ox=yW$YYQ%GX8qPZIoa3D_`lxmuT zC`6AdV+X|H8PJrGG$Kc$p-fUP_$#sGLJsr%>=GYrah=?Fu7R3TRB*CoTpE&($HXTN zRj105!Z8BtLMlnuW}7B?=(Ng6zwIms@R7{+3&=firFGm@JK}j}|L8DYA)ZKrrl!1# z=h7}mE_T1WQ!fYEw_;Bq(<~5F-8MzpPPYSOg%+u{Z+AD@>75U5FIw-~rIHI&y_1lh zUa(Kdjw8WQ4J~qpVT!$O)pt42@Y}w{83wA^M@WGbP)kKeHMO!Clq?Yw0ERruAB4e1 z=9)5?L?8K^VJl3RahuiU>>`q}@}`%L(Njuptu10+RdKw_b@x|Srn-Z?QmWu_>9dx^ zS4&54Fm;hU&N(;HJ|970Bq-A}w@+$l?6mKYn_*@8R5OCev!a5o8e7jk*6S2>9nTg& z7-G;UV=$EPQ?%ypq}4bZe+T`7n4>y~T-vyjh|%Qn($`c|x}}A3c`_G(JdDBElSJg9 zEoCX^jqi_PvX7}T`IO#cXm5->&khSAS=S6sNxGZiR^KU!>y$GU6h!mBEYn4d?C8@s zN!jkB`wcV6b}E}ODcrQE1!OqPo^%)#{*Cf0yw=W$Y0YNn9c9EO=l(leBSO_F~?a&QWtK6K$@HTm7^=cWHGMe-k(^lTjF+LjMEBqguuFY zl@SU*d9N7HfIHEHUXr=krA!J=?3%xvQo1cYZP+Ks`6s$(a}EHbh}Pnfe&9@?{JY7w zkzJ%16BCZi118InaYNf+)PV@>jYcj6q=#U0bcw^Q>-Y$n%5W-C&MO{kiXk!wV>UIo z#e2&v2djs`f|dT@3jy)C)~pg!>VaiklPndiH3}i>s($P$CHlnjQ zooS-j_e9~LYzgI7qCJAzr61Z?xDii%>4_CB#9ZHdBNtHPrFr zSD|_evC=Zm(k~x#Vfb$jPuDcFXH=BT?Ifa#Mr)OM=%-nDbaj{+I5ZY`n$b};JT|Nr zS`oBM{yW(urV$7Ct9}X{K-$3-rpE_*=Wlm;Y+m#(-O2b!tRQti1bGjgk z_wtSYTJ}IEdU2@z>aq$UZX+$sC`Gp1@sSojQq=6TSE`o|ZlLP>{(zo=4(+$_I9bD( zw7unHv9VeXv(?>1soIb$gNmi5V!AzbOgcZzjB5E`6C8)CX5Ndc+E$ps((rhX9)G3{ zCi{k2qex7nuhJ)cwCd!4HZ~eebl~;+_{J>Q*HBmm&G5eGvi+16B=ym*GM-4}V5;1B z^(B|M;G(QhXu@DfIksvtA%>Tt%oekWD9NfAj=Dwxphlb*3%AZo4I} zbVZEz*_+t>hMJ3Unf0_<4%_j5-S5az(Kg=DEYF~8CGeqa zhT%0UxnSCH3!B=w#Lkl}kgzh+*+pU)u(D!Y>|*!)O}%nNDEi(dMpAY&X z2DU80>7PCm{nPJ3@x44VxR0x;rA+10of`F5$Bv8KTlLoXeT;0xb!hm4zTZc|^?fxz zP2sTH>@z&D#Kx>Nj~;C?Fm9$~yPTjZBiUh~!+#%evo8(wxKYR9O6iDNUm^=-o%crI zp2$>>gw--|jqELZjpb`%0$C5u(g{-x1s=6KFe7Z%e^oFSBDyLw)p1i_xbMG6YnQ`4dRS$%i!3khws^WS1R|3m`* z2lv>(uLu{AiSd62K-d`>nE%Ty_qivG6Z*p91+S2bE7>dzp+AJ6Gm*YHm_La$Q7%~c zD8R4}S3Ff1GE9235DW;>M^ZB0uhQc$8zBhddp!!!{;sUt11g`XAm4iQZT7uOsW>5H zFXd3{^7FHC(<5U3#Uh7O#n~dq`{CoE>H-l+1e?b}LSa1+$bm+X%A3m@XUV2;o<;n7 zPisUA&oWH$#$F{S4o!@Q{XRyY9+?GSY~UdZo6UPKj4tMmY?Oisb^<#qCBf7C42sF_ zoHuvh%n9NWCOz=McsqFp=|B$0xxyUr!deEM*K|Dyg(C$+*A08OTW0U+HIQSDES(M| z=(f?mlZE%Nx1%0u{eetj=vH{0<2tV+EJIX>M=)_6ddZ2jh)XW=t`T$9#mueUR}qiA zv>QByD4psV<<$AvLVHC_zc6q z3CsVM<%)f$IaWd%UBTvg;Vc~zsTiRn6?RXKS!FW+deD?v^dsU%9Y1R4)ePS^BYr?g zS&dg>V}-G7h^Z7brhs&ZH+)Crsnto00a!jyDgU37YbF(o@$ z#=MJN`jInzM!kS#uuF6;QaatjDc8CV8Z%^fgt>oNV$F@}Jl>FUF81hBc5VEWJ;cWl zQ3fbz{S0v0qT0&MzCmVTn=Kg*&1;M1bi%nXC*CTsb5DG^erb?imx%%d3S&5rL57#H|0%Y}e=mcyw zW~zw01J*%3#KTh*Y|GVUVx?INJOA1MktT^w?jHl12^H3T`WdIqAk9#rJLqm%p(l`Z z5vOeg#oa3(%}$tm^n5b@jC=ZCG-% zAO$~U;%_O`x@2)kihobLrk+U<8-Z7_IHg3GL+Xmy_EsSbd^_?2=_-9`&#SDG$$Q<` zqhe)M@?F*|X$?0Sj$;0~`IpanQ|1xV$HHK5mUyyge!caVUHY<&0-lq4+zRt(rl{q(bL!M3 zx^2^dvj#ugD9aE214Sl|)la-=u{5!gJa_y@?qhnTUG~ft`m}>lpN}crk?DOT4^bcf zsBPQ7(a4+z!PC6A-kLU<1xW(&I*uJkTjGV;J4$VGl_A=pjYz-EC`(Gc;dLDtBHiI8 zs0h}~1dztsb1kv_bE;#&$n>Mcz_dcE208{fjN_L5y1yRXXc&afp9uFHCpt0Wj=sMNq?gr~9WtX{)Gw{)IP*?R#^&p1<1K{J zKV+?gVR0#x4+cViG{mTmCS8@n#2Oyk50g)r%nNi~eD>jcg78>A>9t4HbpGJ%(XH`W z+xx~{0OeN7Q>kJPXr49Gi(D76{(ISsEpwe2eN|08zojj(QsY{+5~GPdGOz7Yq%$ip zhi9uueye}74T6-8V-8c5MRcl=eT_GeYtS5WSTv#q&+D0gZ8v z`!k>8S&Dq!-iOIgy-ahmzbu>eB#sSb6liGkZK(mhADLhqSWmyemNI=iNm=t8V@7Vc zVd5_)tK^-=FJr{3F}T6Jd<5$03+LkzBg(ZlOBUFB0laHS6ZRgL)5|er?!%2>rx5i~ zhsU|hoeT}Bya71(-1obeY!MR(Rg`I?3Y;4=rITkRj$an2#f=R*g3=Mhn9>!x9KawL zgPU?9IGN1mg1AnCc&y@vbAW*R`|xY!LQShw6dGLJbM9i?)G=z(H%)6lonqL>4MuFe z3B{rfhK}`kq*E`>toOM2@-AZ7eJEo8se0Aj{q0Mh@{zTD^0gd)mL;nb@2MIxaG>vb zeWp<5TsMAwsQ5A-I2sBe^WT z@40OGtU$&0dvj56V#;LvsH+D(36CyVe2uKEU*<_ zi7pWC-+S%b6!-AU#chd(@2_WG@LVb>WlgoGaI~IKd(iEh0u$FMvk!#xq)Gb%uyso~ zr&qpIDm+CN*!#p58>6RGDr?FqWrOl8zj&bbKs;q4-lC$iK2&QCtp{O0*+k)d6M?87 zt)ty-9gq!6u!f0C-lJ6ur#wa79!+KEiMDGVCEC?DTC?n^KV_D{7@45>cz zHkBy4s|~D*hB&z(8)zPHZ`$&-^AQyr!|U27kQPW!$lC`6HjI{7OIB=$37hT+-nVi- zEuWWgce_b!Z!cSC+>N1S~F+b2?*~tg^Kb;F2KV4UldGW5uzyD~uELX=9iz`Dc?duLl zYn)gsd8Asd0`34)f8PIuT?XL2Ev0my=wha7)p<=m*5YM^(!ahdJPWnL+j(&CsqL8m znYyLkDSBJk$7QMyuq7y;EZDzH30E357O{eSnquFxRM>E>`M8~z@&IwJ6>~Si5X^Ug zdk-w+*!&pRN8FrWApeoscO}~3uTz+Egup30bcE9;&WkZgqz=9qTU5JgMS=6jq;{nu zmDUg^E##+x5B`wWwN+OP!GYM*;Tv0T5V8P~Hc7ak0!eaMR3EYAAC&9tCw?y)oMDr? z`ZL0iF&KxoO!}oU>pJ0!xXTf_J&tF&KrFff6YhvhWIpyE=$jT@`S0(B8mi#qZNCu; zvw)z2vdKe*-ip2A`Sd@AT#A`c89v{5WgRWnB^c)<;!&%xAqd?{Ae+NdC&s)eqA89d+`o^1Pca_@Hh4U1la`ddaIv#g7RH`b&dMW;Co$5~g@92C2r@q#B9BiPy)xix*Z z=nAghpL>SqO_&liy4XIw@~O?X-Nq>m>hPl88f>1Ue*5-8biPM_opMdq6sWU{udGb! z7P3B}o2R(i?|P&5Z0Yr5YeMQ7zbggtYN-|#>Y0~eUEd=kdRpNHsJ8Z&n$;60&O1?dTI>$!8|)d}M%Xbpt3E2zz*UDISBfDBb49}@*47zHlt zu?kxuL;Z+gsr zjR!G8lZ&~+6rUB!+Jvk6wA=M!?v)dVf+A1)Y z-3-E7R)cR<^!`EK->gQGc;zgosbh!d1y@9m>oo&i1p6=qSNMIANr^d{M4u$cYW!`QYxQsd+<7HB8TS=yF_Dw<=xOA(~P(TA^cl7GyNc@Vsq*)GEa z!Sfq<30;~&3jLgx*9L4(%b$|>AQAPz?bJZ39d1F+b9TYGqswz>{e<&DCNR4|Ca|QK zj0N@BxuP6ljujDiK-iFo?0&fj9 zY6;$GstK9!hlu=gb zI=2FjBv4GN729eO!krs*@v9*1s$Jax@;$07rouMaYp_j-LQW`rJqv_h zP>0R~$gq}_H7CTlP>s?j@DJKvV?}#NH|>D#!W|eE`hfZsJD^3Y+*) zmFKoeCRBTxt?3R@lmyhqTKU==3_o?_4Z@^uA{&SUVwFq)nL3~NckmoDn(}2IZNn)K;;kE98@aAM1ua9R86gYwks}wFWRJ>_bLt*Dgr^eAIGu79H`f$+fa(n z3A&C%$%Db85s-7pHF^H`Oxm1s*eKXw9o7IJgaP_Mf`Q#Gw?DL)T=@3LNS}vpCU3YP z?*7C}L%Uelq2K-8!iUxrJ4Sifqs2ZVK2s)V1W4HL=6HX`gbw6=B{q{_>}>0}Hg(*aneWz#ryNO^58)R4-wxaLR(C zeF|AnJ#;9~f(((Vl*NYkG2ORhsAy!-3e1D7VYMvLHn5)2yF!EG7zmgGK9$}F1dn63d3?OrlqV4AQLKiNPdYsl%QM!yt4dq-bpy%ayr!1+29 z@~4L}sfpGvRsE%P!SVEgRaHb>SDHy)SqQ0s=O>C{KIM)rHw&icwq zDSo}6*l?Pmg{3tfC4Rj`*-)w2QP%!3=3(AhpP+Z*(Ze_;O(gXI{AkRh8qelLiHF$G zC|(W!;f9s0-0OIzuxsXtxD$C>p1w=5vYh;AXJu7aNdkG9k3LGGK$Q>`18|Uh3M3X4!hiuOfbMp0X+t zJK~ZvkB@mpXk^crE_=KK1^)FXiuD}!K&Vs7+v|aO zY;@omtQcL&H)d42Oc-c%HHWOq$hR9buI0J-G?o*L;j6lGS6sNMZ(P@~aqDc9yZl(F z^5L$+DRcQ_;VOOpX0b$w|3gl`-2|g5!w(NEIX(9yC(yOtyky3qlnbH9bA#bT466h0 zT!@=qwUJ!pIamQ*S0>p`37RUE!bmOUZyrTG>jIdeaO!JmuzUEK-24^WTetOE_{5_c zj-^AtHCz+lGJ%(yo>t&_on4sNpS8NC%wN_y>!vM{GzHt;4R}vEE92W4YZK?6856Kp zlx)ra$}dd#6bVhxViOL*8QlY5i|o?(5S&GXg`2K}+PIyx&t*Ibj4u156GAvm-QDV2 zQ1Q2T*LVTA@OJ2n#&=O;>hm5>eA*<`Wwi(9NNGGyyPd zV@5VJB^7vl)3cBDwn%V1Q@^H$+%(euwzmDTOPttKsusC2Hx_z|1>+U=_7ZUh#(AU$ z1_qSIu(6XUBjBIi4Et4~o{TvBwEja34n>A2UDTrF;G9se0i*LXAfbMpe3#DDGw^(~ z;Xs};uBcvE{Mu%vjU4GZv6A~ufZH6`PuBG~BxDV#d`HI{U}7aeU#>9H@<{P+k-pqCbKWS{Nq)=^rrU1 zW^Ikl)ZyaiWA*52`yaL4QktcFP*-33mhKl#KS=$_9}I^cPSs1_bqPj~TiY0j)tVhLrs@oOqUiN`-AGLh;mkN!nfq93v)Abn4c!$ob z=~UnI!7UBTF}1uo46H*=czB0?| zs%NjgYKzwWz1glto%GQ*Iy#0k7U#AnTzNC09H1X3+bsPSC5IVwNaf=y3x^O7*AN7c z5Ny=Is8PBE%s4tm&8E<3MznbKt=ZXTttiV44{hp|)Z&AHC=3edTiEg@x_ncGv}$Kwvr z9lKg*y(YaTxQ!r@L?Jkl{f|*9`K7jtc%F-jh?n0Fy}(z7ikJC{U$YsGU#7ppe zS;YrAB#_-0`T)MxF_<=SP1%7=&RT>OXqS%Z7OjHj*wn8s!%GYlfLUBj^|&k7q18?A zbC{T|WfJ=yboTtv$R%aGW-dbSN^qbhpFAFOAm?M`qygu1)pv5rR}yoO_EM#g+1o)B z3lt=>{CMstlP=;`TZa0}4&B`N>bRZPo zn)t%#7PPDX1cBj+Hnep>!6*;^I*dZ(b@ljYn z&0B*0ZgC%I?H{I^23w)o9yKvT8AR)TrUgbDF zpwio;o57Yg=4s=xcf4*ZYHlvvtJqs@zY0w*>8I9p-h=f$-Y(TRY2?MtDE8m)yn0;c zIWJBA;6jI&s5)V{0fO*9DM-wV8}1|imZvlOoi)UQG{UAQ6KX(3nq zCNJz!IRM>wR%x;F%s>QW;t8N-_h{HZS3RxDBFJ*S%AJ{UZET@Ad{`4w6Ro7#JB>Ks zk^xfjcRj&(9V;fO2pj#%ey~tgIF~z~l=WrZ_;t-c@y>BvyglAa^e*M`kA&7iy;8>>&J5YmM* zWzt7Kulg1L=U&Fc3(L&kRl*6l=Pny7uF_BL?taUlcB;W@ah#-|?xr$KGkbxZHA(52 zLNaGY>!uH=zk081#F+ExYV+`H5VUGN@}{gPT<(sx>|2shnrTdD!LcS3(;-T$TaHlN zB^%hf3NTN^KVKF6=A%E%QA~kKe8S^OBR0R9s zpY*xauIX0!7)$KiGxyq})_6I+?F>%!kM9%KFms|Z2o`uNgdB&!MHH-wxr$J~0)ReD zbXO!N@C(u}Yw8jTDpJky=)rw>ONckliq1$?op7p-(@u-M)jq_iq8VV_I);07kDO{D z+v3fnn)d!p{kKl=H-tEGkXkTy()8&AQkqwiPn&B`mfxu%oN2%sAfB=dLu zo5DQaBy)cTzSIokdwXcLx+6uU#iv+CWis$~Up|eX-HJwHagfnBzmy)x%+1bDr(qvS zt7JKm%jAYJXW{1qnZreucs1t1JlKXzdNI&yqVnw%Lkg;xvqj~V8f?U-*oSq#yUH}h z+yHJF7SYcf?TzWzd2olJ=2sL-7zY&)t4cf$w$6PX-V=Zq5Zp4yv*_uCO4MzQg7vB@ z7vhzyb+cpyjusKk{wB-|o9R2_!g>&s2Y=1Ls&IbQ?_Oo19AVj>@?h~i>L9#4^ zo++Il7QfTKWY1Xrw=D+$93}W4Y%%ycP6PZeTMB;0kJ$t=Ad5VHz|zl&1QC*%lLRFm z5Y`?E6}^KPAe9yw(CpGYy{2PH7HKlh&a89MC*YPV8Ov;sWL&Bs_%{z)APM@)JRfz!0$-)DjpGTf8tNvg zqrF3krT$KjPcE?5sG=Js)*9(R$fzKjxG&B~x{6{Q%NirzDjZ+99{;j)(J)3PIkm^7cQ1__HJ`va*x9 zvXPh_D2l=kWGI{r7$$4fZg?~}9Xmydg1vyT5w37z;cHgghJaqv)|=1e`z^22O=oeF z(pafdvFyS*1T@HzJ}7jo>${BMiS07b?mK@UirT$b%)GP7^nL)t)_puC2-YD@5 zx48-}TTQ$B98hsr5Uu{GxhewioChoL63pmpa$9Ui%T58?-nxOX{Z6H!b>@$AiNA&* zQmWu2NL4w&t`C^kEEte1A&>(c|HrJZ*M3PJ4USdioBF{b&=2>wv3Mg{SDhKRtLClM z)d_DF!`ccAfqAf}M9*JP0t8HN4_a=at+q7pZ(`%yluvIklG`50{sCAHdGP$$q35vt zMVN53(fZWPaJE7`88E8CzcS%jc5oQNy}*|YHqnI%2(jXq>lwhtrUsv+3m@lp#JQ3Q z!rX8b{4hhIiK+y&@%kBrv2Jkrt^RO|-g+p%kV+?S`BT@>@>hsN3UC9WgIH1@bCux@ z-8q{Y!A`FXp9rOWg;!x84czb!magik_TPy0K@ME|uHJWs#f5cX7=MEXuK_or&$otN zBbh_br;M10$$^=_oF9kY{)meK@bFKol@NSK+~;d=fOPx%iBsIt-9LcnwYc^OqanA4 zggH>V)WC`%AM-eDWP5nP_p!ujYCsS()Y>H)4qM6YpnWC*+Jo--93NDQ`O2>z-fR0T z{*FL)CxI=xKcf*0XrsTtoIjpYqe8Rq@Q$J!U~cWhbVYpr@=tIF?5;*2udpBG`wy$0 znU=PIFY0p>DC8TEAvb~khAFm3bm_64)pUcO^LG)*^aptdT~`DNm-ksv|6B;YRzIXJ zibYF77<~QPp=!9o+GQYL1&5L#4|$5rY;D;qLopA6SjW&)DWb*zE)|hj0bxL$wtBrlG!LA|xP7sI62v!%F<4?733=Giko+IKFAZt09z?H zq=X;E(qAzd1a_3t@0hrdTBW@m`_wnk3yIpk3u6Rk`-g0<^+3~6NDCjp?Ohy7Cs*vp z@p@6)ya3nTz2c~I@Y>HpBE=t7?L48Kp)rO}xYyrKc9osqcQ$*@>)ZHpqeLqrPb~NL z+~2uDaAG&-@^Vs+%oj;tD0RzHQWU$I?Ov-cXj^1!38=XSr_PC+?bk&exP~6PqHj`W z;hvUq&z~YJLbm)BYMryfhK2SF@LmmEjH;(`Iif7@w2t40by}J0)ZD1+)I2EaB(hQ6 zl~z$!{B|d~yNjEIt+90F@H{C~(6)YXJtzR7(F`7}IyEuY)E;NzzM|3Qh*jMq3>c^H zXj^K}oan6EZ9?t_-mZ1DcEqn>s)k!KeNASZIFNxYGDd8Mm~%6~Z@oHeG$#l~KM>jK zrQvM_UKrF#uxye)hTVxSOU!jeZ{5<_Vey4K$Bd=^O4xHL-?r}T=KdtMy>1<1xm=|2 z6Eot+`v6<4-?AI0WglcyeyJ&w%WS5+!6C?5N5jqc+ub!r&J^>4=m5G`s2I=WkD5i5 z^;5v<6yN!u*!sCajM)aYV&hdT6&85EV68K*qBd5Z+ck`%_Wzu30$c8THPfJzB# z?Ww7J=0phxZP_7s$DBq4>gj;B3|#)z*Orn}eilA<=<*4=B=kRpj<#(%k@Je-{6HU% z&G!GU2zRofzYd4E+u_`~Vf9Ca+D{26qqB)NyIOYZ>3Zv1U+ zh_M5y>@(yXR#)HmGKADjYLt1aA1yxRl_e9fz^%hS|Ladg5` zgqKBH!Mak+b}J!j=kRP@Y;mQoT5r$?H`W}J~HD`n%U7)MS*({MVaNThW z$bh8$Eam%z*#qpAGDZrv+C}2s`p3Achn zZ%#+gMYsL0e{}vh49%G0BVI@yyT3=TL_|3Gh%0YR4YkrfpTskESBGsaK~^RCsvLgi z_*ov(4&a0?eRkVKXkpn9kFU#i#C(WCdoPe*MLx4uK$z)**HO-iXTq$on;Qo&4 zu|q!ILY9@z2ts!)a4a#lE{Xb!gnS9WRwr7=zNP+&d5N=cy@g&*kGy~A)t%SuSf!Qt zxo$AfkNLp_)_Ar~El$Ay!jz0esEaV`p6WtAD;TLpNX76$H|R-75$p+&1=QqN9}PC_ z6MYthX0-C%$W7*bUe5a3e>~;P9^rw^m+_K6JkBx=e5SgLANuB|WV3J{eDcji*AMVb zr{Yc@dPeL9)K7Ku>^jM3PU#x5M?J;SMl}@3QI`8KztojYO}r0bs=S}~m+?s$xQ0{h zcQHNcwqB0Es}+7NrnLA2ALBvgPaHXqa4Nc?gc3iIbMeA~@W*BT=Iz&9>OKgt8}JE@jbduZ)zQ|* zcn!!0Hg>3YTzAYz0Hl)mr6J79=|meOGARcV5rxjP3A1yvtjBV*`o~L&?MgoP=^Zee z=(c5SN9Sh~w-|1oZc-hc9s8T+o6no%of(}|FT%PVQx{VA-@LQD`@NT*7oVC6XO$@z z5-nt8#GQ*h6q%Ijm0pXYCGakbed@P<_<`kW?7p$8{UiUv~hGKepi!Yh`X ze5EH*bJlSv2S@O)JS2U@ki3AFtQvA3i9(Y7NG^#dE?(vch#%uz!XqutJaw$vSs!+6 z&eC$Z$ab{0UTS<49HHHgkGQ&>PY;di5_yDcjWfKHYax;@iF=IG8b)UvAFu6vnHTZcb?beY(3S)6U_J6JYlP~ z>|(lB*aYTBZwcDPj?uYb+lfa33O*JkaY}%K+BI1wy?4hp=-BuC$5z{Y-4znb@`_ zwr$&XGO@K|+qNgx#Lf;U*|BY$dFwmh<*8HE_3K*e;<@O)=%*L{?Q6`K2mXE5k@j;r zLfyHcuyL&*a5X`eJA@wO$9=Jrw)8QXQ_UC+cMU-w+8uUg#NdY*^Or~qDWQMyn!F2U zQmMvs;KK>-GhE|USPLvL)byH+A5M4o>KZ*Kd~8?S3*8{%$cSDKx!RbZ2NJZ4$o(xa zynR>k8p#hF{jWYZOvGRBj_;pvPlM3cL_G;zK48BiN||vf2QWHdTRmyn``I&)9+<%` z2JJG!c>Ur1;MxDZMTW&U_c3p2rOBnqGfNUz$Iq_m-k}Wp(}zWSh9y-d@b~3i ze)WiNQwEA;zgX^3S(E<^-Y4M^+orfmdYXW4h$u-$07y6e<@OUt8j85a^@AWDQhvtx z1j|n(o}jtq+N=)v5lB@&fqM(jBO5@`mt^M>-;(5kMw#nG3@$@m3TCcWf|gntZc`b* zuOz^sL>5;}X;X$}Q+l%`!Mg}yL)A&1z*~{rRgq1(K%OP1S`p!M0(V+mSpq*%9-#7b z(drkJHScsmCVPy)7j@ z2KhC{a|{pox3KiE)ll$3z7CBYOeA<>*nF6LctcpK(B#2{!JXrsW5xTcd-jjayu!Y@ z=6lUod;!S~h};5fgpO_$f~Dkhnzkr=3*EIvJ38NRfyulfeRF*H#)}$M&qG2xs*MqY zet!$DjgYr{!M6O~aRU>EbMr^ZM>yZq-cbWf#|AFo_eU(>?2oA4q0cF#Ced^KMH~Q9YARa0G%Veh2@&}HSMhNtRcm@;nIZWHozMUEGna)|I*x5@XFlLg$)TS z6iH?+JET&o>v_OyesXLC022WJF>h3uM2TP%Ym-CFJW_cp-Rkj8Gj zUws#q&=hBZ;vKaQ=h>R59plD0-kNELst~CgW*2NA_Oq@vYyn7|ML2=rn8E^@4U$r( zNuqiYKh~MDc?8cZ4?w>IE4HnZ7c$8WOM)uHdZotS zX-o8sc>8+17$2X=_dSX#f4#+fa#1%QHP8R@#lG+&PM*)>(x=e-DX;hKvF}-Bax&2G zV0qOb5Ht<$*!xlL`RR9!((|_cMojQ|%_J%K`h47|DEM*Sbmax~>^bK%cqC+ci%<6- zoBRzj-??eJdKS7P#1yBwa2J=JB^ud^>B7R=_ner#$XTS}qhlizz>&Huf9=Uj*)I`m zpFC-xTHC9|YNna7nmcR3(?-ku3F~%xR$p-!9_&tvb^mmhJ_Pz?$zVPV4(&?BPNrpK zM893B9O=PMS8Lc0m6f5L2mE;f44*Ru0df?!e+M`o=eqQ@XU5{G#OWnq5D-E6_iMOXapZR_q-{O}?(An!0a1bP0Y6g4}s>jk*;QgayJykODtE z_KwAuzPaCDH0B16M&`nGejNCVG6wQo2}{A;6S6U?ag=m9dKb-VCNI*6z3N>N2>Gr!W-Rz;m)7VrggPQu%dJYxp*}D*ncG2|~6u4M_W?LD602m}~cN7$yhI zOl=ZZb(Kg--Hp;r#IVHbZhoK-e{Y#BGe@bjtBd>&I~PKQIA3j;@R=KquB|_pQgj_} zKIw?{k8dKSQJ+~X2htn%4R*&ll<9l!`Z>vq*4;of%=1TXReB?4100+{K}E#M5$_6@ zWA6#HZL+{XwaCOLAEw8W^#s$?8DdcPP}5nrDa-p3%067&5N;;M!egbb#pS>vPoNY+ zK}^TFCHsZ@XR?r94l8Ba56CGYaAX$&o_d>%9aJQ9%ZR3?j_7fJCxym@-X*Wq90e|} zMTbwHW^CAK`_ ztoB@zYhLe6LROEcz&%AM`@mfvWwXHVt6?HilP@kHsQ4vy=si_bLf!X`u{vg=&E;9V z(JJ8S&bv{G`nO_hqLe9V7Ij5uMapU((-hfqI12pV`V!iQj>KOwm6Rxs;^TU&Os_Tb zFMeNua_tqp{v`sQkxsQ+KHZx1LLwmcn6CjwUxjD5IoM-5r1inI@?_cx?kY>+bdta%x+o@{jS~vGbOON|Qw=ma>EEap zn6s>@HosDBuZjtb{Q8v4Fb<`#0u(eT5%}Oi_FaRFgaWOeCYEy9PX{8ag^`2o#&?(N zA6O(1R{d1UAh_Uk!+(FwN6S0QR!tRt?OcbL65#R{mI3OS@*S9w%mx{70oQ+n>}g9# zdWo!A7aEU$;x7l#%2T?2g4xw$#H7Q)CPo3xkFAf$7_c`JE3mS+aIozyJxnDu0x}hj z$+(w)P!7O^NpS>kW?bD|Vq%4# zX3otq>12~;%#;=s8t|wxr5$bV61Gub&;hAI#%YpaoC+I9J+Ng%!ax?-{ueEW8urd0 zg>XR4Gnq5~X$oi+ry0YOjo|!J`WBYSj3eB5*PKN#^KR`MM(<9Yo0SulQ}|oi_UAlL zk!w(_hamJ@7&)nUs#p_kkWwZz2tqCx8it4;+4*Gd>BLyD@1A6o$DdDPCu&|u(z+y! z$YxL@#p0Eyyw+U$p037@{R4v2Byyqm9&=nYJi(gn3i2cJGF+uZl35Vx#GwRI>WTez z`<{LAkdl1uDFQ#vLs08g#?-@s{x9q>Sp2Y7zs)QY{G8B2Iw@@RGyDR33DY8$l=v%} z3e^G@FMI+GQCG4@Se}&U@Nu;p@v8MJ*cRkg5+}##4Pz*txk4LZl8^yGHwYp5Qc?H^Z^j+vR;;6LDyvFY{WXMbF)ED?nUYssf` zHWevp^TkIc#0-M@aaI)a`mI!x_Lsl-UD9x<$y|jGz(l)GiB3t<|J?kJkl#+~Ao>2C zMN>XAEF-Q1a#~WrWr^%RR1-XmD<}Mi`hQ04tb|iM?|y~oe^BK)O)N(G4+;l=KWhK^ zQj6husuKT$T0HH3g~)$U`Cktb4^{uyv!L4sAMwXPG);8e1x6dGl0G8w0HujQBu$idlGKbRls>{l zG`|!sq-gzr7RPBDYu{e@KPY?asy$@I{p}&$har`O;Sr(z596pJ@ri%_0mUU$Egov$ z>gRt@;=xNS{{A0?53H0hJvoD2-=Ab&3>6W3L)89hC6vNTmB}0pA=BnUORDi=w^iRG zH%OPZ59QMKB1WtEz(c42ZyuSKqfd%==c7luU6qM)v; zOPf=AH}oiPQ}&U^Z0u`fW|a&qNLXjz1IQhcbtq05WJ@HL18eA;_lUY?W+zQ9ON3)I5PFgmQu(q$Bk zLKx-wTtc@r2U+yC>w;_F5wzJC5oFBiO;UR%DG!bnB^hR}rQuAmR>#z$RvGBPIdF}r zm{h^jhZ8c*hiJ4*$|(JaRMB!)fM*&{&LHZ;po(+;xD$OAa+dlg4>FH`wk8LZmznoH zk0q}#Z~a>tmrvcpIcO^sPenc-cu+YA_XeT{i_4<}pSHoK<9FqcrrJ_H-x@oB-zt8< zIyeWR{d%`L%T@ZV9b{1lB8$$75}yDlPE;S*?r*y&0-4JH(6}_&EoyOC$mfg}%v-bL zNe{8Bf#d1AmZ(o0GR4^eGSQ=Ms8ok6{^Y-Zpb;@r&nw}4EA%P^Xds=*(~2^ziXLb= z9#1g`vdtH6FueLEC$^%|Mm!<8&(_(ck%@|m15-&mPqR)hLN`@IDoMLaGW)MjEzowQ zJ*jT*E*Y2PLpv@Fv{k_s-lj`u{#884I*Y#uc`uFR0s8`Tu%VJgZRsM^Bible zLvOuF0D7vpT_O1ao~q~^j|@BVAnwY_?dj9X$}6S3nbS$zhBfC_92-{xtPnSahKw>U zFK?C>s$OrFoMNj^k|t9gVk#{K%g_QH#tOEo1DxH1HsYIqpSgUfG6(x6xx^|7<|K@} zgtO1ELxfOO`fi{yEt_Q1r+J}Orjs-lBJRR(gBl!=tCJK_5f|nX$b=S&dE)b1O0$(A z=-prxoxybSnA&u*pB4BuHv7B{EUBD4_pZN&591BoxrywWyUnKJ6@?%5>D@S*j^AR3 zI2$z(N?K$Ai8g0BPlUH1D8&!-iRH>=gf2zE7OU=K?yJIcWZ`=NO>6-V{s+6kPS6`9WJ*h8maLjc> zAve(47x@sLI_VeHm$h%{?ZnXCU*-uO^$ZIjjAPA#oVWj85wia9(ooP=z?~g*A8p=y zu2rU=FUQ9h6<$nE9T50&B#Kj-zm~L)YRo4Tx$m>}G8=Tdq zUwyGbU_CHpcMg#`k_{@f1H_@Jxp|!etV5PaR0Gs9miHBA^4o|#uU}yJ$L4kMT$k@y zdrN6J`e&J%vs}6*Xz~saAltxoPgI9xByJ}!_K;XIHMU%^IwZftc zWIt=HXLL*d(gw2eK?DtGb5PrzV>wGwLDrCvJ+kL41oaR*g~h2-$kB6Vo|`%Kqy(xm%!$ zG46D{AI=LxuoAdpfAd zfQDC$mUOC@7(ZsGz%62x7QdNMKIH)HLMlRuB8zB==DukMl*dpux54M)V4ZRHi0xo$ zlH`xT;o=8)G0DfI^bxAT5r)zX z$tH$ngQ;(jD`RGg??Rsn+2Y%MPMw=kk7+DsI!ab;0#gmrOCm^wOp89qVSHn zeU!Yk)=2&OVSMopE+W4DvBKhq>|SbjgN}-PI7*^r&6FcU21rWLAS@s5pd@_b(ljt>np3A>Cd`P82q#eC7FYG!^9j<-KMRPflUppwg>%WV?tGi1+lND0h z06gb>MA?|~Xz(1V9?rf#a=xKx6!+7#L*F2$?JOmy(afT^Px_rm(V4AB!IUbL_*GX) zB~1?Rd)a#}&f>m{Cs(Lj88=Nu#X^dkfI&&%%{eo~tcMvGp+XvahcAiwevVFtaM5{S5OWQHqN=z zV-Lq7@Giw}C?3~W3KQZgOdj|-!G^n`9nc(ATsjMmgUM^f=aW*(l^h_v6vMa|D^p`mHztL6_ z@n~M?ff@snW;}I6bpJ}ezm}=^k#zp@?U8>6B%JM*{Ht@<*`&QhF~rzO>MCf#9vrHe zH!R>hbAnhM>b@p?7x^cE%y0H8>*TxqV z%uy>|y&UY%3uRc`LT1y)Tc}S>Mb=nn_}2y}g263>_ES?TN#CjxO1SfyD#a6zMbr@> zlPC6@SFg}H5n*I6JyfLpxocAEj&D2^C-0q*9fssDFY0dJuwijxb@5zHya?Yhn&0zPVSU0N&g;%V3n|bFlJ z=RKis4W#GD-?&j`9KO|YfAfR_14)0(h3-kgg8zyAy!#cd5W)xw3~dV(n^~Xii2Z+zZz&Z|AwRz0nQ(os z3drdvrd!mapp(KN=O*ao`b(3BnK2)eNUWqIxd$@s1yvUeSjYXk%#3_tQ%u%2!xI?2 z1!HE>`k}u=*&7s=%I^j`9hft`^AY$DidOvijcjpT&%J2fbqVDYaw*)E=@6CNipTc1 zez_;V#3aAvU7C2U@TL2?p)j+~zDeP7NLK(D@Luvlo|2X&JGDko8FxkD#!w;>w3TI) zTsh~d<(*IhD{JWEoIz8i+e@Vmsj#Ir=*MXE+c zmHhprx(FcNkwzPhG+AeFA}MC)TchBNV4a|Yd=}eu>LJ#-FeiY)*+FVEv4zyzc45UV z4ihjvvAxeY!9~R+XOR1D+(en#$Jf4r2A5n3G?L*gPNYsx4ju&6uhu?_Sd}GkD4Q_f zILf>TgzJHGP-i%-VKCVwtX-HfdjKz32w8SS^l7fXlnI~u7pb5#XXTh^aK|6Y1$7!=%pA&<~0vE^d4v<)UG0i zrRc~>0c5pX-JbQNi?+75Q6sCQpCb*cdoA1doSslL6%VUY-&g^F2e3_cjqI|?|NMQpv~eR+(Go&};Kn0= z%!>0kOFFAaJ+?Y_$%_2ZLIg9JN{}mW)OB~nQ3eAR&aE7`6{;0JA}?XWPPL20%t{y* z|NM~bPN13}Utoiu$y-dZ+Rw}hPukUTBZ1q2RI)#Hne-%CS(&U>z?x>JHZCe#$m^b5 zIO*;oMDYPTEXpKg{rT6HK_YQ#mY$gq({F47)MtXVpb0v}Whg#A?S(mKNPo z%hB59k2m?bhz)c{AM=@kPOcuItAXp)t6tR4xXp`fZg=C4eIar`3b`(ypAQ{f3Z9NV z7Q1n>26>qsSC{ES<-Z48S#ddhle~U?J$&CRHIqK~pVlrFRI2`u&&STEC-vEi3qpg=_~2!d!{v263bSh{@7^s``N>F!Z{ zh+=SL#PZXLaaDAA3$v*CxOaAaTWtldn7ET#SfU3u*c!LXxrX6kE0~EEzaKW)HE-+fq{^K~~Zj^C;XdJyB0; zG+D%CV^%^YITR`zhdF<`3@E8kn-;M->sGlHv^_{5)Grg$DLNTW1u?N2=#E4@Yum+Cb7Xdys`~+*kY^oHrX2Ar?sMZM&EqJe&W3tY>1oE z>lpZT&uQ2`1z*5kO}haV_>lZwUYq&S#&-0Xo7_JB4e#dJ=5-LOQ<6ueeWgEHP4f0! z0Eu70m-ZY~3vM`qX&J+!pl(jBKDo`l7jQSylbh8#4F%-@p)m!45;+Rl1{tRQ#GG|$ z>T3f;lOyT?!7w9|dKxP=K|QiNWt_!LF{6W{$+Ip7l^rQ9?SxenG^M0c%fmZxZ@MY< zjM^Y0v*|5OPD9!&Oi2kOJDLEye5T7nJ3@^4eSJJ)*i;Z{&}mwUQQCq5mdOD8&e>Ap z%5)9iDAdXkkA=x(Q^79E!3E~Kdq??;O)z5R&M5r4fAY*9$cHly@p1}W*8Q!Jfy!g# zA#~T~?hweT(+NP84{&K*Bha2Z)|hzoayYkbNF*t0tLSzKW(w!1X}N%~w||0z+{cuw7(lJ&2*IY49^@mugQpLsYzBJXe*7vqtV89qFM*o3u+og zgE;4=z*NW-Qyf!|I*v-FZWxo(b<(=9y@>&AbAGJd1SUL@Q>RG4c|w#cB^I=<-7=8tl*s6{+kA<`Htgf@P=>B2C`f z%{1{Ee#L60mLgi(?H+oHYQ}0oTVV~+wEbz`RPkp16GSKzRxbo^sDb_m4%cnEqX+kb zPLJ2j^ONJeT|beNlVsrGp(T{&7M~Nc%%3)4>8NKoz}I~LGPaI(CjR0)1y(&AyWz1DRsrYsC20^v=kdNE>U&% zhA-!tU_X+ea=$DD&F@$%BV3v&{*az(gq=%ps=d5=#5zO`Q%mA)%3}YETNq|FZkV~p z$jLV7($q3TOop_lv_}{gFT*2nd>MOZjg(p033#`Ps?*e*@ogN@;i>WAqu#Prg9dAt zD*>`~Fl6QVcX7UXrOb>A#wY7m+w^t)QdK63n&?#`iZHpK9DUwX!$3xhCA4a}T_YVa zW8n0u9pS~K%zLawv+QR#ZJe1vHT0WbrL*mr&sJb`Qe0Rj{;i1ZrM>h#p%Of8Y`H0_ z%mDhf=kBQ2bGl7eN4xp4+BI?)=$Ew?DT+iKmCyGS|Jj+_l{_~9r2Cgoc<#QA*iSC; zO`pP5SreLH?>rjknO*H;-7RmAU97*#($T{i&vjb-Jh+ROCw-T_o)fxdIGgebBEFp< zF)un_A&;8yc=|OQApHR@Ii0WFvZaSvR~>?`#|426dF8rwwH-S1ihs$4jtDT5YmjC1 z?Mlg10(FHk7G;;@E}Q{&O9vCC*m)TGVoH-)omGRjIU{tl(;aWm91#FeR6Y~-Sz(28v!7E` zy-ir+AUhwIZ=geDZ|$nehwdxJb()GRpZ&b9iC~+Shj^MFf0lamg?{4Dgo_Hg_Vj6{ zzxQo=ocJIk{(aS2T~(%zM78Sv##md?^)=ytp_B zpiD=X47OcD>hBxA(|pLcDC-kHg^X1ichqJAG2>1%(+V%B8LpOXQ^WBXRVKY6{n$Cf zQwMz#623ZJ&-Z2WIp;0HTgZbN_+z&QV@Ke(@8GwyZ@yv8qs$W|PYqbWn4Cd|J%+N8 zy&sDzt5|0iZw_aS-JA-!A;TgHo;vnn&X5v$doncaqvtKo$i`kOxuseRK1vPL)LKYz z8X&oIVSBTT1NZUJax~(7Jn#Nvd;-b6&8Vi?Ll@2T5hMuZJ}!JjwkK+v1WQRmxRUu+ z4njh>Ti0Jx zAZc16l&p@El#cO8Qt+Y3Q@V*3Z0z4Q`r=l#xk8~-QuUXO%t#CJXtgQduhW; zGW_v0UEC*LP!)tiE-ic~R!@KHMRzBh(#h9fsMg|8NhiA{*Px%H=OhD4*75S|ZS8(( z@B_8{Amk;-1|&^P2ao==CHRo~F}{zD@!uj8bu0M>n9y07%Y#Ce_m^SMcHzoz# z%T$VRahu0Dr?*UggkQ=JMRbvcH{UWzm;z{Mgr(&e<&^g5!^%R_(U2%%V5>MwQmWWz zf>P?#5X!i1)%ElV;#_rJkQydawWR*_f-7d7$Gw(SW-4dpqL5>`An@{ z%xlnn(F!c;=IU))`{4SKbCFhwb}E;PXWnkt*B&{_`!vnBg$j!OaQH zX5rMQa-P+&@>Tpj3$z)#R5d+DLtVYw`KRi2pLRX({!r9SE09jAqEcHRn~P8hUrk6(T-=5*0^veUwEQ`P6aE(FpqT5%9fkT{UMF7&&1CF*) zRQ_uizsgT|h_L%Y|4=;DxLQhPR#$R`W$j6zm#m^`P_LzgFqK>Sc`EKft^)2lVVCc} z(*-~Fl|F<;VCGV4oCVKm$g|A(W2f@8uj3vATs zD5uW;;i#$15xGM8&`7OfVlE>Mohq>#U+2Vpm!88@6=MlJUV();G^Dj)HQiOu1rK4f z;9>INBM5~<(CXizyp;|D_H_>sG==Zv6!FDISFBSml5dpsBW9vEQ5_W72kS&wdAiv- z>CelJq%6%ZTQ-g;_hEYudu?1j+91&^l3T{+=wL*0&Dg#;U22IK_}G6>@?E~t$NW5r zY3n|9=&+m^zVTEq@l=$$0d_yv`#uA6tC7$JoQ2xUF8=uYQl_8(ri$NwxF<^xcvTxB zqXxWPBWQ)RZ6L+Tv_*MIvEjT z%8?;~Wt6m5>p3?)P!m&(&_ z3Y-cbnAmmf5v}_tuYmF?vAOuUJR0yItI@h6+igd*-0F8y^hoS9SJ8KB-{=#avYWP5 zaBw6MQ>QksVSNH-FSSu5Q1YQn=hNc8{<01whXN@Ll?2teEvO zrfT$M0WMP(9e?!-M6I4);4{uK)>DWJyy;n-w>`e*8XoaL#d6@|`UN@bkHCKG>L0d8Kw>{+Kk*KjsD5zr4>(g? ztSmPHI=Te8`E2E$7&-fBy2tSdr%qjuwzvIqC)}c=f(H4*@;eXoqO-Vkdi|escA)$h z%vw_5^gLYkdBU2Eu=YybE+DM4FDbUN*W2BR&)kMWd4urG%iBb{bX=RsFBbwv6`D97 zo5_&?(AJbvu0XiY`o`gh1t0HTi6dhTnr!nJZI!f~(g_ZYCK=@j1qz~mc3$OjO!6}9 z%wfZ+;|Dx#s$(~w6*)(hO_RE^H8OPXo}|+dv+vh$5>B`>jtM;ddc2HxnI{S@(DNH3 z$Ant{^l3jwvN{hni)o`JDKnJud;hfr2lq9Z(>U+$dZ>9JcJjSDJRfxr3)owZPwxt~ z7)lCi;{~*V5W{&vLrd9+6v?(FS`-VACQ^2&$WcNP^=yYRh#4e%-yqzG!bpOUw!pF9 zptoYIb#oU3l`IbmFrnbz^M|ek>%C01?AP3d`oSkD1E-Is9`E0zx#$ zrwPhxC-o9LS?;8*n|mf2RM)Lx%!&TkO~-~zZBEfndC}Z8%h9MhQ(>l=_yuLr{1K$= zPJV$}tw{Di6&y2b9s%TKq+rOc?t-yqhG@jFR@vr;$qgOM$1U94xB~U{(6wODE@aq=mG}+*78m#RdEm5DxBM8^35U?0=pR>mEE-z!<-W0{N z>!@|TT^^Bu!{T?}dT_RGdweX(mwvDNn^VquWT==|o!+ma7xC!a;NP8N=Db1K`Oi)K zvvO7x-pUlrOj@U&sspbv*1y1~?ml<1+1%NDWf{2@^zu*esB2Houfd;Z_rjtC>Gktg z+>Ygl`xxyw*g$J_l`o^J;>m&`;wOEx40Y1NP797*$Axf=r~K5oLj}FhfQ#1wqO9BV z=Sy{X{2?N&&4%LH;jnhsGky$#iwABMvb;$mwO4=H-}CQiU$S7nApvwM)v|8Z)^Xlu z?^3>Tcfwr?I_2JTb2S2T3DILM5r{jHJ5oD%)7c!3i$c=%Rt8*=%^b3&VR!>YHig>* z;%25zwOSsl6f0Bwz%e!vpyX(@2uwGpm`(~kze@i%j&qWUfA8!DR z{swRP95+2829kyCf(vb8f12ao)aCNJPiIxCt}ZNLis@hlfX4d547G89x5sG=i1=-G zyC8j{-$??IAP$hUP47aduV0^+4Fg7W+{jH>)PYE#>DTk^upxRYS!vRdqL$^pAv#A# zz~-s4%pn!+NZo3-yfae%sD45@m8^wc4viIOwIr>-0R3OCpA)6?&I-g{O%PNIem$lg z%IRgM5eEj75Y~fXRJ8Xv&Xg}1H*@20LPBaEf~N;!v|a(X4kAPL-PM|iqcm+hY{uug zF?D^$unP9e9oOZ%kJp*kl9*)ciZI>TdEO<~cc6DQcf@#q`uHudiR(xeGls&jQ4w9~ zg>O0z^zDdJ3roIIO_T%5{}fe^>p0_M>z$W6Bq<#i>}7bX1x(*ZEE<05{lErWq;eu1 zJ~L0&cG;U}8Oe&WJpQMPt|HK*-oel%pqzd=1ql-JpSW%=AA?|)&MC=85t?9`;2_0? z{7DZutrDM|+SDWq>m#lR`xIA<-{$efMb)7c(h~{2uIwI@*XnYb%6J>(Qh7@qO0y%k z23i*coh0Duqe^CHa;6i)6txl zp)b9(8UYoYfdhe4NtCTud?LkMZx<}p4Yz>9_O9hYr_6n}-JxY+e&uDwennKnflZtUj9%Kp7CDWNQAWT(u;9?gw}) zr1vbhh>=}GOMOdUW`FrKjW+eQ3io~0K_OLjaUn!JyzX~hrT&NhqM0<6PK#hU z%T{7m)@k~pN~!`IV*C0b`DP9epRM%ZV9f)pZIegIH z{lGkzdDlV(co9btIKbbQZMBATQ)BsTa7`m=dPn^ZG2M`LwW@upu^2t!mdl8(NI4)e zdJDx&Qn70BMiu|#@~6)JucBpLS$W*&e%xo{^u{$KHjF!?;-DS2z;=B@gvP$Ldf_v| zUgg6ppT&?9>(e+^!yaq{>bs}y&FpD1hqI+KM_RZwwAYCIUW@H9L;rVSiD&G|<5O$z z?Gh62&a&701mf1@&GSMsR)9+{ET^n_eG)RmhUe@pW3P|z`DaRK2`o4*_STaD%(D>E zd)hXgU@+erpG+C{wN%X{`$Hr?il!+*ANDWCIqctt(T&I<8T(-xEAw1Cr`ssbpyB~k z7Z`Ub9fDx+gwHtGQ2b{~slPjfS*63c_v?E4jDJsj+3TzVcoKIpf|1T5Lsd2;HaN4D zEOm`^?fK03%+Uud+Pv+(IW1f}9qo^u{AoqSJIZ{kn9S{y(k?mXvqKhJDGnD;rw61T z_$0ONJA7aww+NO15Pc(Mf0hQqMww0+KIClW@vF1+9&Z`8Xi8VhGdlm>E?eRm>7t4Px^ z>?mmq*z06$BXvP!%a^C_*$;$5{2isAse5IgKT8e-En0CL<>Dgpl#*rz`X9$Sz@$I3 zw$9rQlOQc%6LJb&Jkt*r5WP{!1AQ=^y~EQUvy;U2@Fin=9nN&tQ9Rn>uXwy3ofm?~ zxCzRMdfSw_6$IYZrBT@aJ*>bQDD_^ri_HH{U@cNbMACan6n2K21ko!|%yxW}B3B!% zd$v+4690+V`yG3ohJp;JTLG@@2%awZP5V{kxX=(mN8mWapnO?Hh8)2*=7phoPwo%( z628D`x2}a7_ojt@r2{jOPnLCFk!6e4tPIeIvO$0yS$`NZdSVVU5*rclQ!iXo*-%f< zxG5K0ab-_I`AlW!v)XxC^zgE=HKT&*+r<63PQVS8f3l+A4N^cYaRODrzwEvAYqkJ^ zO3n+z9(?i7^}aRWYF@Ias*)T80(B`bBSq6s?L5-HiDO=GE*=S_$@17D2@kgN6jDrK zPkA8~(a)b2lU*beY28UgE|9n+^^5tbGk?~tP(xI%NK|U1+`no) z(g^Gdj|2fz1@{Sp*i%ze-L!!f7lD}gBNpq6|y(3g=U&vUJCvQ^C-68H>R2dX?C@QZA=q{QW` zfyNo|rz>(}(S>t|AZDFEK4#jliN`vrU(&a(pj>uC%M?4(<;ZUo4JX#F4mxoGn%)}l z!m}5U4LQ@z+mHinz2rE)Q#RweRj)~GzV-~v{Cg$ZH$p?xh;zh)R3Y`-PPm*!@@k5u zirk$%V4_w_8vga?60I$qQIIi*XSUL#PK_uhw^ytg7uqcoCmXnfMVhYT)!I}?v0Apk zkRP7>=sm8bjrX4uKr)cc2{U6OP%wTrIR|jUQV-i+aJ))H&8VIGTg#D?B=+=D4IENm zy8VYVR`)Afoj6# z1{5jy2;-0pYl_@21sSlLEU0XaOo;wnM|OL*)+{k}>oR|j`?o-y?zT1VI#xfAUJrt? z^kL^-eCTm!)dLG(`>}R%ijg`HIb|#13tCn*HQsFA7NIv|cBZx?VFk5+&?98Yplgzs z6)ic0jf}2(1tzT`zf&bG(NB!3;Pr^ANGPJjtn06@7fX-TnJ^Lai}UuQ_opwRFP`S^ z+eZpC!g@-{5##TZw+pE(i6Z%qoWCJe6s&3Xh(#j(le+=%AXuKyO)nRIikU|WbWlCz zn27|ct3d)!Ad?{2jA$}nG9g)%r-VZsIkaQ|D}W%#+~t;6hFd+gz`cI6Cp5pE;zlT@ zAXJF5OL#CTpTgtO;8OnaHX`krAK2Dx+tPkO;^WkjY4$Uz2;r3={9I`Au@9LweBe`P zvTw2^1s;Ivk6q=zTCwR2Q=8Ptp>?s3x@8TJj9D)pHcsRa?Bsgc${ViD8?N^iJeBsi zPw@db-uEmfhb9p@T^hU8)vxeqaX;sOHmsR0kd2N*tpK#O^db~`kL9R-747Gnq2_c`F40@l#3#B%a~9sp_QfWmDM=W z6Uuqc#rfa$0>JG>G7B`{$NQc+--Xequf16$;VZ<=YoX47XF9V=} zXR{xH0bkhp_=*1ViWE~XZ@!E51pfqx4P@H2HF;+U@ZL2#YESNk&k>*<3}o^;-9<}A zUMAW?^wIS#yYP_CiMHZ)2z@+U0-w6kUJpEVwlA!J7H*H{h21$TEIu0y%}2<+LOGQ1 zOw+xdQNK%mQ5wAN3w%iI;}D-8SI2_xA7<@4G_e`=&d>a$|Uyhk0K6P}5a4!#)pWNF5e1SvHj^h)i-YrsD$9=9%;a*Po$4DaSVN zgdm9|YrlNwjyPRBgyfL2-H?~ zCeMY_9#h};#rJ7l;pnDkl!FpS_+^%ZQ8|MAj#g3PKAb$M?vD9^l|A~?ZK!MivV+HP#H03S<=ePTU0&Agq(iCZp4 z`GGmO!PAF#_HI*iSKT;MKg#?6HDWr#OddE!ap)4Rk#Mf$0`r|^{7668cQv9XVq#e+ zXVD$T0>g7Z89*t|davoBo`4)|++qUxzHF0EQq$NMLm1B_fp(l?0b=yu$fMn?zBuKf zQ^)TfWd4WTrUkPIDBGgTqA@X#F8xpN{RZ?tkNU z0q?+E+b$BI^n(e(c(56Rsozu^19lcxvEv#hQzqKl>i~ST`a1|qSqi5yNC^HIBM$$o zykuaFl_t$-v~1^dp8b35^kDM}7k&KDP9lzxTZ%;auc7cG@xL^`5J{aGf_uIZ{nm=G zjkj|$R)D2y8;0&ht3X&OIbn!Qgh1MtjH)}PV)&N|piDO3{qkSTL6R0jjyCEQMPtZ- zjp~x>Vm>9cg&7x3_7ctVl!g;5mL~!lH8N2E;;=H!)PJr!L7lkX*IY0qb4ugc)HX>4 zz}zwR)+L_*u+@}1OQNsk!)urJ7)NEU@@#>M8 zlccdix9Ssqu`GAZ+U^v-YRBBY_dWXOW`lW(jtJDPSGO!-uA!H3E554`kodbg>3`eu zuG*%y(aQfW-ZQ??WI}YDW(>`Pm|%Ska|0Ip2=^(kTTZ7BG$RPIn}n zuBAq`uYY0GqnxWO=hga#jePL@{ZuBQp}p+G*@&q@)u)TI3z-7Ne~CKa8D2 zkSI;GZX2g<_i5X(A`D(;C*m!qtdY?PzV8uPtGptS zr>$1-;H&tMN+XE5kF4WeuUURWJIxU-$-#PAa^?tC7P=C@-d>A6JYz0VLM3L-D*NrT9l1kWsMZ>VuvIU!?mU+6UJ)ZtWv&W2CRF3Sh*}jNpeiWa z+I!)93v1kBkFS!|fp#!uf_l}U<~MCp%K0-$YpM4QOLBRPe#Oc;;s4BR>=e0&>r+@I zC~Q+Dy75vXC8pi0(fZ>upFa~$F!PSu>Wwng-N(VBJ>g;U>Dmt0jIkgNE1|pwMq=S$ zdXLOhWY(Is8X<@1;vy;JzT3y8J#9*{koRpzdjUw$TkaW3fGT#MC&+ggtjvLu_4^7B z-Xu^bV)iun$)@u6FipUr`OVV&p(8^m^=$+_+|B*}CDb^KEAj8X`7>>1GV%GWQAtD! zt5-u$R41TNQUP@Y$kT>yhFJqU0rUV43mNJQx8)W2t^bjGX01;U*sr480eBJ6{hJ4@ zII8!rZwMe6Lt z>7R9gI&H7PyV0MGHHXAAQWCwLr-vL?o&cGnVES;L_2V`LA>LT!Lm9m)mylzS(8Gv3 z>>Zqil%q>X@tV04(_krILRxPM<>qwV2cpv-!Ly9? z9_==KwLE>;vcT;m=le@h%2rN+r>&lF5-o=lH{s}jpEHwSJ`Sr?1a7qU7JRg}(6FF5 z(E#<}u-E8iREnVxaEREzbpz7Epa{EwV!)24dczCw|$kdB{hCYBm<2(-j_ z?8Fh(B>iHHY*htrsCNYQQ;@XC+CRfQ!Q7xzitHZL)A?eGV*VN+W<{N*s@yOSzJIVS zz(+98g5?sJ3MpKor8)>hhAg_yu%6q=^^jsPPLhgmG@iQ+TS8dKUG-Uk8rm&N!mMr7 z*M!(c3j8~x%9w_igsH+;tI!qfA|uev9KN1)Mh=s`TLB>cID}mOe<&pt9r$oKSUBv} zWT0^|(J`wQzC6V?f+$mR3!$a_<%aQeS_sr3IhUMe0VBisML zqiQE?Sp@RI2j6%{bV<<${H*(dm&xDe^DaIEPI43rXs0Y`9bR=z*O5E%?-@>~Wo7+s zDV1%)K;7$36K81*^O4KSb8p8G-M&%@I_tC7l@>LTL#z9s!kCy+zOcm*r|x&W*K%6ikeaFTF&9Oo*?4v~Js5D< z(45KHKPVReGs#mPuPEAJL!73fJvzqa=@75{dvDahYN>{!(RKo&Gp*zY zn+vH#_r_Cd1PN4J3nVNR4=2Hg56(__2%Q&|_umr*F9{!+lR7Ut3*lrWVNeXjo(QZ6 zp$lXjo(ZunS1eTq7C;+ZAJL|)DI2f@yTy54K!w{B(n`EeF|s7yTI6SL{n?K9QZ`;e z?~>ao%r)j55}5yyeZLUF z&ig%?$!_Y|Y~;zZCe6}8jtNeb_lH1Tf{dUm70-XR5GpS`0+B|!y%d}!A`F~D5*!_# z7D1ktEC7TGFE_v-JeNQfV(p8^(FMu>;$-`Sy2sat*2O)?)MR?mG~4~y{Wueb4}cFC z1&^-*0Vz}(M|;T-#P3Ma@AZh#MCze3`*RQ4kHrO`Y;7x1RJN1#YG?<5VHhARZw~3Y zqvP$h&BE`S7l?^D`Y*H9;oc`DW!$wf=nS@V7>0HLJsJ@tr^J$|^v{8bBV9nF z18-;U+wKK8A1}SWwkE+RkREcRq+VXk9+`O5(xt~AUscqV!iDublX@bTH44rFuZ9zNO)j`X*CVFK{_E`oRLmX zH}y(Gh8odgMg6#Wn8ZQSvrdQa_XgAaW%(azT;qlOL^qruiXU5+?B)EU-)Yiew zsozZ7xc=rd1k}T?pwMu`4pRpD$p(Mf*o4JWv;Ci_!lPNG-GDXf%i?M6sfg81uEIc8 zMQjVR5Vq)Lx#nTRf)BCPgto)220z5~X_|ZDN(ecI%v38)dA4Z>9m>#iBK1k11qI4Q zi3sP0=sd^6^!h)B-tVeHAFE#;dKoo@olLwAIA!PU-CI#@ zta%x6P$*&}goyCorwFN|*8l;Z8kE^!{=meE4`)pKEG&o~2AO)iAK}WkM6rY(qp28W zrm_Pbdkl@ko-dLW_E?1RJ5va%cp2Z|(nPqEB5&tGPc!^nkMEnBCNHoc9BkChEH}opNE>O?@$7dKJeRjJC*QAZolSu- z?!s8YR1wZrS@b#rsA|XK_rKV)4^f z##W$G)GsGuLfYTb_Zb%WjNfo(j7G^0zZsvjpiW={R!TNRzT_+As=~q`F36Sk>!&O+mJK0iS(ky zi50Trs(4M8`{YZ<=Ym0AphQ3klQQkNZ5b1 zyj~Wz|0XiZI$LsmY}HCuV?!~AXPyXG?6pK4xJRC(1iv%RoR82Js>nvP;Bfur2jpX?GoVD=d&q(~>uy31nKl*KkIeV8 zYUSSn9aaGro0#bmW>9d!Zs2k}kDO-7sY^*?1Rb9Vj_dp|9;#B@;e*hO+IEdc3bcbd z<)Q#U#;s&02QD`7QXm4zhhwD~XbcT0VMZ8{o;UpH=vqi|LWigTgy-GVLd++G786&m5v4LhFIxUqZ-v%% zau&A$Zup=txUUJ=OxR)i*Psc*?-xO?!2-0wZOZgL2jA!g+Hq0|u-nvlVZG7ertkXj z%RMK+PZh)+zzx+hL9$Q57ZIt`^#(e4(0GZpKw>0mc86Z;JL*wk{xUoq?dS-Z^l^7J zzJRk4AL){?LrT<`sgCSX;m!oWM|6XmiDh{qyWBax;14YI;3<3We@THX$iU z*P|^P_A+%nTwa2{bv4mnR;LHLkFq$VHE0ueT$kj0Irt8cdy(^Yxb4u*_{$43c?Gk; z*MypKeOxeEWA1|s^qtV!#_hm!U@xzzMyUDZmVh+`$9il~XFCWR1@?_w8olC!UX>p( zg`91=z5JYfk}~vH>Vp`A9WXD|V73=E^EIKV0Ib8V{2*X$SY;=z?7a7F#LX)STOpr9 zxm4AMaV7(JL(rK$Oj5G_9JUdLoa|O;Q6I8jZ?brzd1;daWC1I&b^1JU8b45(?J*u~ z(N{1(s$UUXIlYL9d29|q3URPP9CE3!jO=vVe-4OYK8a4h##e!2$Iqf4 z(49KTQMWxWbPq0r zfBg94$hpX0AdLQYkkdT%b0hI9*44c(}&q6c{neau3e^A=uVniY7BJPyGy?2uC2MB7(O zPVXe0%rM`bth0^3r1w-m{K)n;Iilae?qB`XZ0u`Jc~4e5>8)R@sT)^z z`^?=t{{XZ`AUZpHHhOKT46;H0M7hBa=;C<;pJ7b?aR18)edK%e`I3v8;kz7og+tHr zBOAVzC`2t(4|5BGn5a44eID(3&HI@-)BV8xp%%_C{`0&rHPab4-M$w3T4O%o^$q6H zP%}sO^AoP)YGQ{JeGlkeTr+zOrG4}9$%$LyzwZ@N1BMA-CYqrzab;#R;qal}jBBX$ zyko?Px&cDRDrdv#_>sIZz3C&|4tPc&p7g=!_wm-Li)TyDpmiSrpsX9EFQyGGwUm(4 zcW)?X1_KwrW(1-x%n}FBE=sLXV#66y^ zH&c7ED)Wr-5#>#Kjj)5N# zChqI@h!aUVmbicCneLJ9?!ax$1(NNOEt4&ty_PMVjmAYw965G3wtSdm>WWql&~*lUt(1FN1?qKTJrBvkxn4%8W_*{!aFoi!_2kgn}WA`HrBgN%i>F^ZQu>DZjo(`ZO%>ZjrNZGj%l~;uZ}jiC$MLdx8JwL_Y>qU;7cGw z@=@V|L*t~(Qe9PUrMlW%yQE#mnb;X_nYzrglg7c?&0GJAcF!{2G9H{aFXV~gWI6Hb z5WFoS(-V{Zr3@fCGb1!plZI;qJkrp66}~y4%0#w4`VvKDipLmjFzz+oO{x?5K&u`( zY5Y6EF(rW_VcD}W+bwqLfPdPU;KYIJjea^>aGE zD)xv06E=u(;P0Lj^mM?7KB$x*y&YI%$MaB=;!2FR=gazCdaf#F{7lGX>Do`Pz^v?x(|h zn!V{YXUEG$Wy8db6??<`6M8`ZPi0WN9lA&#ryclq zsOug#8_-Vw)-51bu;DFaR7lP)!YevYP^_FvPay8DK0278K9`ixSr^#y01;W}7#&D) zzf)=mgEy^~UmDr3_6hhFZ~U#I7SLosP!7;>*Yg$OId16?LLi(E9U%|4I-c2x+C6~_ z&`zXuBD(JOc9^JoTDbb|B@gY<)PFEK4HVDC#}InnZJa$}egb zWly{IXG;$14LD(gJ>rh!i+KDLU65lgC8$B#Ob(hLZd_O#`Q{))|sxG1E z(D~lAK4&qGbrjHm&}9`Ce;-fgo`hWtF)WfOf#@F99rN3-;ughAdUH@PK^)RO^fM5P zAatzbkb5!h28mXjm}j3bD&VV=@OinM_ zAwipv&v4f{+C62PRCSzh!p<1(Aq7MnhePyYBHdWOH#AvZ5@eEmyo3^evXbypA;gj# z_0k+$c?qaRAqj@;R3Ukj9OW3vRB7~jSs;fwkn@~Sy3p35V9LBvxY@+9~sNMkSmmhmg?Tfny{<;?aG@{9B<>zlu3 zp2I_04hn-mvIDA*-`ZfNVd@g3Ik;=Ix!(Gc_?h9FVnaRbN-w#UQMFFniuJbvJB{0l z_IlxC_2Tlzinl`FwiftO+9j@QXxrqb*0)yhlFl=wYb2)jWli2C%Db1x2)8bF&E6%z zJD_9H^wQBKA*&MF0gWsHYFJ7T#H&Hm_z@^OO)8 z9u(3Qa!7zTkM~ogyNLM`e-+F!4^{Q}p*8}!A96l>5-)bw=Z>rmt$d71LDI+I$Om3@C z6~W#$*aH5ok)@* zo5o@N9_4Ae?fL`Ufa7K6GL+dfmBs4Y*Dnl5t5ff^c8@}dtNwIq7+d3GFttvaB`Md)FpCW9y?o5vkb%LEH5?{yZBqo~7L3(xcI3dSm&a^YihY&I;SL`}p6L+k{J}G3RzYw(VL>i`9r`^8xk7-M_2X zowb<0=c~ZrD;r9)4U!(`3RL$t_NfeGR_g?m(Md7chYy7=@-ZA&g?!4sv)YYHRL9OS zv)PfeMvNwjvN$0UIUsf6?P=rexE`v(&+TgMjN4XMbQ0(enmnq*zQSqNV+i;0L#u2| zM^O5cE!HDw5l2u=N5sGq0LXMB_lVBy*?1WpS?0fsCFlba9PW}_c^d4Sg0MA7102w# zq=ta9@!nFTvSCT?5dvAJQR-Ss%McYCdGfB0E?7l22_T${7|<4U$o1}|H+ao1La=h0 z@)_93NgS6-qi0u2$PR9tcQ`?Rbmwa0^R~SsA~}eONK=@`Amd{QI|l@Jui)pw4yk74 zZAgfmp~(+TxD4OS^ukR=Ri^ffmO#;UP-kNvW3X6S*@&Pi_pH%@S8Yn-uD%_gc?;Cq z$_(%NFK$S{BO@;jxw+ci?gV7bymR({Up-igLoE9nm(@6~?N6^hDi|5O_~2MYPt%ga z#=or=hQt0I3 zqL8>rhB!N1(GBc(zg#)};f}$)VH#W4rxW?xK`4U@W#+sBCc?a(DCppVbH3dY-w^aN zx&Z@1aQJtxFB{p@UaIQNSjke2E1%h9Ko+7;Aupbd&`_{E#yAqj+Kq!27tz~{kmei4 z*)y%>c?452WJrN1XODH4pN2F#Kja0oKaUSDDQ!$xXb#~7`D0Zkro}9Qxgg!6D-i~V zXq4wPx)WPvo&<9(Cv%e2P23qi#E?j7u7nNarS~>S0^9^lLZC5fr_8+7@Ne&p64RzR zmCmuScy&S-kEGa{?Pm$A+Ck)SBLu=lPa8LdM~^43?F&y}1h;VHghA)k_D_h~qtC^# z=YN!1!@4-WUrH_BsH;2~7^}%~yn%Jt+ieaJ)YGU%Fk+E{41V@BzM%TbX_HV^=BF-d zd5qS6kD`O9}8Dy_eS1y{B9RdPB`0lVJOFo(b znE{9awm`zeU6Od%TG&^Zl1`k%QAo7P0(#fozh? zIqK9hNqUvL4pW1Nq}M#O-XSViu8*iIAr3T#3}zQ5|E7=tr}iXZUC|* z1Y~hm*>|S%2MDMcEcl-(1=m6mykrhT8BgZu*+@Mg*01nok(=4|Ec@Y1=PTP1-9DE= zpCG=T{+pCX$yDi?eaP8^CiptoI$V2Xdj$NshF9*uorOoH<9DEXgy68eFz4UNM}mWV z0o8zdMAVSJjSmEaOUUjm@yYJj%Iqu4@{Y`&JUU*kizZjyJ3f#4^SMy%J`Vvk2dVWM zO_dens(i=qRTt~tJpS3d*kCQd6$Iz6tBb9>kL?RQjV2S65)nh^@Xte%^H&R3iv`Cg zqH+Y9$n0eZMYzG2;bRnnpTo>69HFR7v+!t~-|5@hme?t|@qKQ*zL{$=ey8!4 zEDnt$!RMCRsg`mO^n}?4qcY^P;7gBw5q=+@R!ZcY-xhlz^xSlt5Lzz-o%!6RzV zDOQSc%BW3P*{wySGbQ#SU6`tshv>7v&g~%_PYu=mw6+<5*I9O7elwr#@t_uY8|v{w z33(mjwI%0nrrCnq31f8*yYW0RuLAwf|T56)3~6%(c?yNy%nvq;xkqgEvm zW>{OxuAwY!X_}Zb#7&GZ7$aLAYrT9qcp@Vp7zs!nOGKQy6x(MqHZ{>_+HRDdE_~KL z%TT+O&J1DQgAUmH(-m&;NTPC2qLMpeiElub4{HCrsl`$`K{&ewy3g;@qsfGzg(pR{ zgv1oXKMN>w8v2~b_}Y_4Y6JWFT(Sls3I6&SDPgUpsUVJS`H1QYJx}FrCa(E^ z-W23ZxKAYr$;r0~8wq=mpN`H1I%J56w<^Z?*m2!PXHwyak4@Qg7$CT~aNUx`=e%S^ z9^PuXjwO%&Jd`QzCO*6=QLy6@a_z*Fl?i9L6c&%WTj8WqoTOPiXyu&L!acltIpA1= zVEuc*YF4@B%5!l*O@V44YCEJFgrH%MjAT2a0{)pyz@E6bGyE5N^zYBTDUK>r?6s93 z&X)Ql(yJ|R0mmO8Bh!rpgupgjxnpXKU@|D`H2Ptja`fxFOLTceNBB?U0nw;Er`1xq za95?0S#Vp@nV9ClpZ#Y&pN^`Q1z2>g#U8hj-Q7}|Wa~id$j$+d&YC3{Ywpce z6`h-&(n{7Es@RsLq9xr;n;~1*J?p0Z|AsS!OZ*0q`miV3jhsLzA`_=^d!of6S&cEo z7%_Hb$k>(9o^^(mFPT2=0qwK-EaXbQXo=vhrt~_i`Hbye`hLrPYXe$`v2UrhL%&Wv zvCD+tn20SHxKsv@GskM=uuH^uMg*=@I!hKKmj{g0R}PO`4ft2HjA99(6P)q$1rCJ} zr)#Kyf0?nDSRMOEKuy5AS8U1>EO#tNkx(uQe z!GfMeIK0I9c1}LUDQ-jgOMcs6OK2G}TW=W=Uop!fzAI+F{_cTwZ{t~=Tol}b0h0z~ zq?EOu=mFS7ZaLyh0Pr5NE&$j=AU57T^*&I^UR^xYCr`7yu9`W<2 zD;?%B6s~^RTW%n-8C;h>A{C*lQ1O5s+rY5^Wh?Nt|Jbh{4@(_K9cAs$%mB_FZoJ2= zACk!Ki`XIQ-NGojSpYFkXp>z?rNUJJUbBKfdyYT(ZK2$_n32;V#WUXD>meSxQ$SHM z7#O{)f?Z7m(uSZIwF$>~xkJ2T2Y&J>e^Px~bN=>OBYV3-(L->xy67~u3yspCt=FpG ztAEFQ6k1^xVH$tn`drMI63A^*W`R~8nbtT)jJ71eH#bwnPwZ`f!$HaI+(e4Y%|8+uXc8Ky4?jFECWmOQhH!MPw-YuzoeVQjXlj9M|DHgr+ zjQSS)fwvNffQQ!r2N4LTgYayUQw!hG?oXKU{{XBX9?u10DJ+ZY7?bWh*6Z7u3? zy=r@(d|%K9r-iJ6RSl^i&>!iHlq{#daR^wvo`Bg>6Lh37wU1#ImkYZj8vzRRsyo zMR*Jl9z|{kFX|`LPq)jd)c}XM`R{ifLN&twm6!4cEYP_)4aH;uR#ir(^ z%0*jN6h04Brt$taI@Kj&JAx-dVF+@_W@u!b!6yQ;V|VES*Ez1CA1hC66=cGk#xZx~ zo@e|)4xRilm#oYQN?iz-NSR4Flf0?OT3og@sQSzB(YifGC(k+;*o#Ci{H+WP&cO%$MQq%^xF*Ep4zT3Kn(k&ARcB;Q; zR*MvY@+DWpOI>JBe4cq=#jElT*L-d0ei-}WpVj=_eR2WA`xre)O{*Vr#7`wlbQ)2F zrOp7W9edq$Wc7cSMMMU;7wJeC06qG6+;s5!>4fo?dxL)OSt0}6zIXgp0KlQX z|FDi?*8NSk)g3&;#Mh1yxTEqb-{lCByC)IK!~WdCr-9&$wMI7qLe~{Yxq#&RBnFWD z>(|7)?+UOn0uX})F#Q3D*bLD63`k^PEH zg3|$!BZ9!^0|L4oMEX00j~>D0t(IHcI`RmT$R8AG=@vVv|IffCi^pvZ`>gT-aVpI} z%q%P|whX+(t9Jw{MY+TR3{^m!k=MtyhNYFtK!yPGar+J<^ayXL6|Tu`$44%o2qdQn zNQl>@(s%|UsE;@q^0eCaln!HAJ2p|2GV|903VIc<2g3s9scFz`+;*F)MYwv1ihN$9 z*{bP7?1t0vUK3I@CW-d$#SXdyYGW%hns(3y05yE@aaBO~7aJN0$(AkXZmp6_^NlP0tIZgkhXeZdAvEVd%;p-f-xp$YHM6x9YE{AH_{ZGYh3x|n?=Mw9LpXvc_k z@YTa)Q9sQS1ajMOXZLBFmw21@81Em}r^&0e>~EH)jdWX)u!U4^+FaKVGvk*4E;$ct z5D@W^j{kTvF0XOUdbYThTVzXMTx8P7s7NnOqMTS1GF3>_mi+RTk(A5b6ctQNL_k{+ z6XPVW3yBEHu6)XRW@?;Gh)LYTz)qT&W?gEzYU(R>&g4DYRQ@T$D*Cwi=XK-pZluNn zlaOFWAdm;oYZ*GkER7e1>mHP*5S=tytknx=@7xHtO`9*phzwMe`A&2w-r#Wi4rQU( zQo-;_*kmlcKVN74JX^gIrLhg}*vn;n$I`;|P+e26F3FJuYjM&{BE58D z(Rh(pdZxV?A&q-RY$nos@`Xkh4{6?~#uX~msNyOrHi?yqlp!bM1Pf49%_3kg332vu zn)P+AV#da}IdwT3w~uiwHxJ^FQL}16+=|mB>Fja$Wuu@TrkG4%1paY|UZoF0tI2?! ztpI~vl-%EbpK_XAnszevhO6}Ab+Lwhmhc;KL4cH?FmUA5-1$eku-QpwJx?XEz?i>y z5jj6tNY=z@j4`?V_nvEC!oDM{0&Zm=a*+XFZw)?Z+YXe*-|Sv*U&6|UkW-!@Qf{Pg zC>f;{QBrce1bH!qr4!T7ko+)eiusziw+QoNo#MWVPU_z&4*vidheo# zg2g^GNdr-r#F1)6vX68bX|~&b;9b|j#J)P$ouKQ2O@{zmH~FtP3DRWzYdm-j?vj3O?gPup=R57#wQ&Qys#%hoCy zidWA-;hv$bzhdE`hG?G9S3w~pzg#(b5k+tU1dceOBsa$X+~abRIf*3&Q@%*J0Euih zs^s{5u??oNIA8YM{Y124L`0z7R9`wMD$gi0sBdtA#NW$IT0M{s&J)T&_BlP7Zi1nB z*$ToES5CTAB$#`p8Z2mw&bJ6QMuO}S+MAdWJp-oHFn%bw@9u#F+ze1e&xJr;2|E^W zG*SbvcWnP_?-LERO-C<&Uf=h z@%L7?+O@ZR;G(e_Cy&fOKkQfSs}7D@H7eth@^!h$gQ)3L^Yq*XlKH5N(lWo+9?Li; zCCr)mC}nPvN{TmfFS5=suG*WmdCv41C|;`TXvXMu?z<*C?=MLpbq>#4tw>l;4J>t< zZz7+`93ezSyCu0F4qoR~P4&{@q0PyRU51V+9dbo01E|-H2#{u$Z_YtZtF6zXeE{1! z--K5`yPj4hH3}YBS;!2%3_GkC&6xrB4fl=(Vo*FqE6REW`(*E?pVpkW%Cv7T%kG|x zu8fLN?Zc~U+)^qQ*ji`@7zwP??gdBFakV>}3AZ2M@1yFY@5Es5+Wql zlF~B!G}(xM)=aZKFS2gCukaO|PPOOVH@Kg6tkPPq zx^Hmas6J7|*_cgkwF|PzVW=j3cdIcNULR&gN4so;a(=v2UnlD?=S#$Wh~;@PzKNpJ z25w54oOAJ*1liXqH$b}rIO0j@0YO53*u<5kORgVl1W zC79*gTVw;p*Oj;;SPgx_;9wDja44J*DPZN|(c&VS%!bjFOBqk~ot58(>${#!z zg{CITYb)Cq`&C(FgmN33L-UYP^@shoKX9vf-$s z--`b|+sqEFPAv}UK)Yf@O1rMZSSDFMD(U5m5rbT_SwyQ;%nzMCY5ZOw4E}`pVHeft zm4Lgzm1rc!FYMw$Sy1&_LoWSGgRhO0Fise{K;0mbxUPfU)=yo3{cDdmG1$jpTCmV~Sh;BhL<=S7Y~rU6 zOS3a5Ng_$ybkky}ic5_fEI<)$1r!}^*aO>UPdvA(B5A(iy*zSeemkDJ<*o_dkyc!t z+!JJ*3zp^j7A&`G-~Ri3w?eGkPg!apnc^YhT;>_`Lmjq3h?W}J6zF6oj2Jkf%%NN? zcrrOTYix3Sp`oEc+&FgmPraOS3abP&Lw(t*&W3+Dak(Uu_M9pMTXVscQ%92blr8-` z?&m&VbDL@hPi|jP~iS(0n z&|YI@OOMsL_|)J&fjbAb$2-?(UsDfn6!xU<59voMhYL?{L_5a~B}OIJDKQd@)F={4 z7TXvrj_ep|t>mE9Ny|DkrM$k`H93yKO;0Cw`3-kA>-4lQ`t<;+=u2j?vqERk+aM)o+oZ;8%pw) z6xuT!EEms(w3PGXo#k||_-ls3m(gnt7uA}L>!H6|evG46V89wDqyfL})fKWRnqk8E zYNxPmWgF2VT@`_r^`1qV7D&2!)OOqYT?6XnR7)rql2wA42T4dyhL105H}=b|ybC@y zADef|pRvuj*t(?I&Z3*Jv8h!vEUZXSPyBbV-nMr(cMpR*tIC1Pdf|qM!GF*s^49kw z7FHEw&BOSSgc=G32ACG?0zM9pFFDaSkz2~xlv69wiY!3X0Pi}5uycYBzcfxLAc19 zhi@#=cNbLYdhu$id!=2GzbD-m+9c{HDpoAAFCLt#>1VQObE>Q6ZB%X*tygUqEon4C zHR>wj(-@cfB=|Jz%p%cLZl#YsoBx#(nQ-FH6y{V0@#q3&#ZQzhsO?A{E+TzjY)$%e zDO^snD{>XuUY0SD;Gx9786ofpkwJQho%E7*uhA(L{$*qh2Vae6QKD6y)!(LMx$h(2 zocDif<4VvfEuA)9GO^%1A5J|rrZ zecpZSQ$6QY$R@$uuXS8*?@NUf`_pgF^WFKDe+4$;t{zZnx$N09HV~C zA6CXTMvwSQ|3j`Ja3K$7ikri8eb8oH(crr5sgurg@J0JIS%^_2kI~Bq%{29x z=CmUvjDN{Q;Z)ukZ-l(&$1#fG(HZVy>V=BlRSDjvB!`)OrMk9T-FjSCrC|C zbH$!8u%w?Y`2Gb9`S&K@`&p?j<|Kl^Or72Xy)E`3KlF*eC4uT6JY%9yMHsEE;*I&J z(?SY9n|w8%bleIX@Hl4<##^E-CO?Q$RsCc>&o$$`-d3WG@ohLN4@S51NzMUoEtwIZKq#XrnnSvZV&b z(rlegODdiJ`Q7Fus2Fr3jQl`P9E|j$`+<|khIq5eLeGgVEVfysACeX+oVLWxPnlbF zv6sO{tpbaBBYOo8VJf)kfK4Im>k2maD0Z@4s8@c+Qykl9OqjFEN@5b53eXgaKTQ=j?-9(e0}Kw-O`bpsP0u7`C5A%hZD02mUkGGD^-!M(^>W-yFtspYDVnev&6PW zFE5=FPU)Fa&J-A3k1Ly`JlH*+{ueSq@i>T-0Aq}3v+4QQNmsLo$pnhI_|&4ijE2s) z^nb@2%vn>wC`0M==@sWYRQA$c>gHFSSM%3mnrTful5-4g#v=MErqU;e`BC3vUyQ>P zB1EyHWE171?_5^`_p;lO<{}x&^-2ra%4gMX!Igc`I8146-{pQ7Y@k~0IMB^#+B9A5 zWJ5*Dn$&IGT1_)Hye5R8nzJe<6}9vmOx$<;5uDCF-=*JCJo%PO=L<|U?Fzv-=Yf3U`Kw0+;~)NFn3R#MaM@H$G?HN?`I9_Fg#5f|=8G6zv< zE81Ic-iVsoATjWkuKjFh*!F}s^uY7A;%!`TKKr2z37FO$y{SR{9{W`o0{x^Zl~2W+ zDq=K=G~gl5b_fNl7c9Rk^=uot|nuJoPRX;Pj@UR@ksAHgH{xA@w zO?^ZB;Z6o)_e4d1Y;-!qUV5bG<@S?;yald3#TliRQ{UV#WDBO1nJ0nILIiQ&E0yzqjLfkFP zk4Qp_n%s+E)R%)`&|+1cWT{p%3h1HM5Z$n{q+UNr5%S!4rL6WJ)9RwvcuCSo%V-lg zTZFK(vhr_^P4t3lQul?OcV!FxT5x^To2hSI502!0u$f9#3onADh>QZgKq?9>e?hLV z(pW^kVE1cY3^GN&2XTe_9ay7kx5vP?V)Dd8w+mrE)h9Vu;5VhN;;kXatB;s&L-f)}m( zA94oqe)1<|4uh^m6~*Gyd~z*fnVNjQN8A=^wQ?7=_o$56N#PChPtv!XhLlAU8F-XL z0?-ykRIcrjqL@jr03!NBxJ3h5`4ZcMl(?PG+fJmS1yiocCuyQV1fuxtMf?@oiNvM{ z6HhKrrA%_~0N=8HYnV1HJBk2^LP;rC1COd-Cpg%m?zIPZ5!@1x4af zL6rn0X$d9Fn?lkkeU+4pnZb!NG12=&aqbzENRkOoV>(fl;jPb(pQdREfE z(P0YR7^0M1*J3_@63rf{Si%q4P}WHiQ7c@CVAI9e!t0NL&+ri~2MrBb38~b`Sd=a7H9}xzW{D_bhB1$aM zYrYG=#oWIVH47Y-_R^q0bIRnDJLLCbui(cjL(}5&j1oSZ;hne7IC8=~FwHBca*WxA zCrY~O)1HF|`zUZtsy&x|AZepb3mUP^7Q{?V?6C?L_Jh7AsRB1 zZyCQ-N#Q}DLvr{Xdw3tB!`sj*vf7y=^v0i8kTAM_x5>?kmhy&zN?aYyd#ve-w)owQ zmC6~(3)IEKHR*con=TO|vtXav%bYO|ixC{Eo z8X+yxi?fEBD_gm2zkT3VRv%7+rH|!SU6=w3TbxtQv5<{bU2>emgQ0SQMbZ< z18p-7ehIkC#~WIp4zU2JA938K71Jg{tLXSn47RyX{Wds@b>riq%zFltJ-=E0AZ zD_-n3+LvLttIolHmYkWVkS5$vJWIN8taWeW)UT|jY3H_~T3Q*>e@zSk(NQ~*`)W4xeL7%7z{TLf#wLHiUSr|>;mC`Re0IlhKq#Tl>9GaT>hjMN5WmiYdD ziv7RF-U7C6pbggyv`GUEGz~K|o-i{ra~e)gn3)@9=A1AyGcz+YGc#`Q?$zD>_g`tR zC2KtLC(HiEen*;j=5dpNP9jI=**tp6SLlUEyvIJbI$t7Pv#G(G%GJV^P|4ZfM_a60 zVQ2(bVs)TmG43jzqS^s}i7+C?HmPI!N42ejOoE7CVkP8e3#{l$7z+F2CAW9U&&qnbfbZae z0y_e8jW3vVW+|83gY-drii9B=&DjcOm-|8Vd}LK3c}@3{=H~p5{1$dRwpYINJ}P`Q zAYe1Q_JD2V5Vj^Ec{kA-k!=U2`DBnk3{$5rQ3kJc65U?FZ)a#`BLMoV2VC|oy_0>CcS0Cx&m%LZvUS*>4Fp`j|w zfa~0bhmGikG8@Qv)SaEpa-f1(mZ`wAr1hD?PT6J0{q44)EuMFn+cFE+a$B?)V=(l0 zo@P-YNanfCBK$7nwwCKsj5980 zJ+6VQ!ROBdowfFu#e!-}$&aD-ufSNiUW9WWz^%qLc#?svd0wl|0;SWR(c%P+(t}dB zlJvbMV_YOhs`NQ)i$$KZzcSL-(Xt*TC`LadKjb{55S;JQj2n+*iZgzpzLOobbPRU? z?Dr-I^^0VlKPo3t82<0CPWDfO2+*@)xewW9a^;g~(p-b`Os1Yv>^Nl>vTzEqB5&P&&$KA>ahZVfAX|_77#&r zF<(JkXI9vZW+`6-J^v0~55k^f>3PH`w#^RCTPO(yQw^ZXR?92> z&Fn4&n~#(^QbdXzSSzlgT$oZ`EMKn7(9L7gL6l#tfTJWH*5Qb=EHQ@bB8DFRP6Y4n zbkvMid@vQ!jK&`<=q;#<_2b!crjFcO@sFkPei7vD9Tw1bQ-Q%#aIxKu%jF^rF`wK@ z-PDW?NQ_&PKtc95nYO~GUMwj-+L*2~t?u?}U2h9g*84I5jp(6Y>+XJiewZQk4&sJH z1=D6B&b15*y&X9ivPBiNL6(les%S{um?i7B;(*fUHX=dJwZtVf84}Mi(`BXn8 zUHEQBgJgT3m-|*wCa8TCLg)UsVP{&ENhYIS;Gs%ZoSvD}{#&NFM1(< z(x=(C1c1s@DSBL>qu+J4L9BhvDW-a!`@eAqOXV(vDk|q<#2&5Fsh#Fmv1d&k=;Q?r zAkuzZd=kI&{l{}XUbblHI- zj_`!+-HT}#7s&NMmwQxKGm;3h#w*^cMDuUW&N}5enYe|2&z&xnR?XZxD`=Pec~q_bc-wU6X407-fd zrUS;db5|-q=uS%u1KaLz1eB(=W!|7!0t>T45m+wR6qHy_sWEhVB z;rbqDVLKX-X%`HlGFRMjXlTnNug3*de0Ak{d}`n{Cb!ONvFSh#7?U|C`}Nqs1El2^ z_icynm#X&7yYCsqpW-$AZq*(Xm3mJx9aGu6OZ?a^U}?kOe|d3Icr+ajpKMgzE>Kq7 z?#V~EXxv6p&alx-+S)-)Ba5Q5@Y1?hFG_kxVWbPMgX|tASequOj)8zz5gFHAKY9qt z%kCwW9heKH^a-pKbi9vTLLL_VcHY>6rK(I`(?xjB&P)6?u7vx&yNoF6E5nQ<_F9T! zfXbYZB#?-M44bdrm9MxL%siO{-x%k|W|SX%TIDF~e!Qm>+ia?{sU-;}KncHegW z?TqbE?UHxqKa~ zvJmPO)RV0b%K1=Pai2V8ucpaO{3vSJ5lQElu!eK&dRc=Jo?&8JiIZiMp+$K5CA!$f zc+zRNAFSf9sOe<$5d*C(Cqgts-n|Qcdi3@6OQDhM6ZDz9Tvna)Z3Q}0(&W{-|J^p5VnY&x;rBiWuU z@vth=cg+4Zm30O%-Qe?$QSD>wy&ZIPlC)m15O-(A))zLPiTD~L!Zk(dg8_;E7Sdw66rm^%GN0%?DVzmG&6lmn<{ zNX6AL42m*iRCZ4#g&)p-0bY;(mS~T~T@ePFdQ|wed(g%tyu51cJYPfqyvCYf`fI0m zR^7`XCmLTqvx0RVBv8Cu!ZdRBHBPuS!Fyn-%`=DfePnA>*?ynqXH(y1etLg}nHmo= zGhGC+K*2~hQtBX-)qUV7P*Vp}Z@AQ4Wjg0OG+#<)PO9OtzULq-q{$ktX}rtk6n@*h z9*0W{?<22hw2gPWs?VhyB+Hnk$^dfDZk~7D9}#jKE^{C z2kACv+W2-irNVmIhP675=)vHtTsoY*@2hI&%B!rUz*Y;j^|_9H^dP96DAD;<*0iGn z%tE}syfUQ{ZJCQ)S9_jiY}%C_o>5&_8r}tuwcsnJ7KzkdU85eo(a~BX^wr*JO$2V; z-HFlnRz)ymKX1raS9w|t+uiwfpGsCw#?57!TgGp<%8zNTyBO$)cd9)P^!*>@+SF47 zalXcoYQ7Y#Lex><>dtOM{(R|G=uFt)NT61g%H{`ba{@cBQ za9vNOuZHKI)zw%sQ|YBoAKq6g6F^kZS6k6h|LnR}RwuzHbJOlg`0iogmB(w`^UUrP z4-em)Sflj4@r>T7tGfVvlK1(^K+D$nN8g;(ZkyCs>DTWO#7Z1@Ec7($ulsxK-QL^A zB2!_Pm#89BE$*X%-rKCAqwXqhFM<1HVmZCvOO-kg_oOu*A69ZxT{)HS19Qm(uTFa> z-?hW|9`1L?U6Q`ePe^B4WWVHITUIci8*M+fq(RVL4}->qM`j;`>C$@J4_eZCM(*(^ zQk|kv&MfxzWwCiWkvKeSyLSJpask{oQzI5@!{S(77@n#8pK-`DcNMPm4m8mzx@Hyh zcIR6ruT%r}hQs$P(_?IsgoIS`6h&B50|Qbpk6t01bBoOHjq86%S9x95aiK)VN#fjj<^?{Ay4mi*TU!HM@$I~ z!|wzbmk1qGUr!FeWc`~*X&@J#|40(714DN}%i$dWFCiYoZ7w|ktCfR0kOWaBr9U7+ zRvt?fvhCH2_0yTgLCi9|*199mpBP?!@z#4(^ElpfbQyZj5VOYmmf}wpY@;YwKmKje zU6+wX9Bq9EQ~8zw-@%pPBCgxn>YYjX*h=N1;i8q7D1@g&D#wIrj*^2aJa6V@cU3}$ zd8tZ3T*O(NgQ#H=xf~2`XmTmdHyWSa3M_oeixx{(4GiD-`j!QyI71v`WG#w z1%G7hIv4su;ROy6T(}F;@~WBGzDcF4irW`NjJesp&QXow#^CnT{h?*X&Y*sjyhj9L z%q*ev%x6okpEC5+m5D;Z`#4a%-hC?Jsiys2htnyw`QiDI)=I=u245{z(!HBVtU4R8 zTO)QCV!c~f_p3^Gh3u$$+gA4)LL;dNMb#w(fO54|+7~_eav~gtMpDCVj-$pu>l&4V z)s>ttm#>-b<^`99y?N!SV%BUsVH7toV_a1dHr;JMXEPpR>R5K^Qs)(v8zsEQ-@*W~ z9@z6jbm2({)X~%z#Dns^fco1C2a`%`8I{PxjhGv`g^geM?j8%}1sZOMa-n*)Z`uJF zZ#@q)7fF>~+pRB;)Pru9Z@l^!a%WgyRe-Gp<74ui$GeJDCD}8^Nk~fGKW>!PwH;pE zpzcTCSS{m-Y7N^);;IT_gzlxjlN+RePLS|DN_pJ75ck&6gHAcljs(y34~_K!3y_+J zfx`G*+fXsBuCKX96<4&*foNx=41LB#G}j%|K7pyD@VL%^lFTQpoY!WiZ&$e$)C0Uz z3$;dLs@JLuv`n#yZX1XGyCvQGIYup-&Xn%xh1e#ROe_jt-P=RSk>#qIQDN_5bC&DN9$eU=w@kiFC_| z4;rc|tr{SquwWNE(tlyuwC%d?)VPr=;-j8rirf^K^I=uE!Eu=&e?AiekUC1*@%HeV zC>SzWP0LBtIsJ?QSZNliY_{4}%&)t_HBI2|ETj@${aV!9p-P`+JACCk05%p$umodI z!na#bCS=&n;xF8=cdZ`FzVAD~xahFlKAVxfGY9FSDg;FHM15Eulyc!^TCHw<(_y~U z#k5tKQ(_sGJ7}AczA@&05#m#mdq!YIyU2QIh7qba-xgjfg>eqQ^&0#Z-ewJnO@1WB)^mcl-1YJJ+l5dSo z!sO!Fx`#6!E&2WKN+x{_ixK5xvLr>jG?#bBI zHZJD_Qx#rx03* zp;4%o{JK4M{Yq; zCJtuuG|c8v$wBd8X=eN6G_Z3Z^Q^cbmKlcK32OpP35YmFcnBqQ8TK~^8E$AON5|q` z;q@bg_B-p{G0OSiF|Ti9<6|RWbN7AMlU|Ur zR9Zt1arWK3Sd2$kYD-8h6N29Y zO5TulemrwEk~cjVW_2R9>Y?I5O4%<^Zs2ifN|W{#$izITu3Pqt22-pY_Slw3d z9d9%0moWT?6A9j>ER*d&W|Hx@X{Np^NTzpoW2DjCDhLbM%J$*L^1 z)Shi!Tz_C?=3}pTv8*ihjoM@6jVF2KkzH=*?8Wv$3({xXSX6xGz+rX}9FOZ~nTipY z7i#)ct+V!4#7kk;Jqbh=#oydTCwJ>{sk!)TjmCxY*r#1y}no;`9$=#g7es>ta^PfZ3xCf^}qMKfb7FZKSd6N3&d#3QjM zZ}sQm?4s?AI%;vqF?Q;n{^;6lyu0$_181iP6a4Ht51)YNr--@xZvc_19< z5ugu}bv#BFp3CXF-n91e=;vW04}37V4v*Qi%FyRo`S~I6OhBYSY`@od6orD?#IvQ+*tTJa3ve<^QPj*PO50AfS6VRBts{UQ&4%-aM zCk5@UsQZgqW+p2S$j>oVL_uFvjFwB*7)dt=G2b6<)>?*f7LYJStJ#NNgtnvz+(}kK z{ldI7opXDKSqJ5yjZ_&~=K&wTIc|ueS3{SqdO!!C55bl8>+&_>&r+eaOGCajIo7NdyEn?^lGOC393BCdu9#!4-Ym~Y z^^(n*(?yVV|J2p@PtI$p6T##HdyR`n-$rPTa-L6wGmKA63*5~DT=CDW22jeV$##qB zbG7r?%~0qjeG{P@%egC9uwR#78-DfI{ypKi`mYY3`y9)Rj&!P>gtVzm@yy9AzF0@K zBFS}`l9$WUdFH2a6bWZJAft`M#Nn9I%O$i@-9}U4Z3DTI-u|6Z+cIDzS!XDo{!XZ* zG^3z|s{f6_(Qq?(yKe^8ojX)RnsxgHJom|4*wK<{Bc?sQk=&-B(1?8T6YbuEUNJNPhgS$r&v^EP!5-9-`ml@a$qGpGc%)nfo!b)=g7+{&q&ps zIeGJ=*{u`}x!Yf7L??@fk<{wDEN8dcpHAjRw0+bXFV`olS^FoeV7n_k3E6u>Tuknh z60&dN?u$P`QU^2k)ifpAQvx~xV*x1r;_`mFeJ z>TS7#X>uVx=y&4Xp%;Q9))z`|Zq!5qyY#|iqdRd;D6CqLj==DR%!Tr`HZa;hYJQ2~ zZEZSWz`1K=lcN>YHMT-+Hb~d^ow)tS`@fgLU`UDU#uE#%z*z!sZE9bsc*Vt5YzyJ& zy02u6L>#C74Tl|gC%)=x+aOrT=hWoCQB5ik?Bi1OdAk2eYPA(cSjXcOxwrOleP_M? zBzv6xooi9-M&|H}_zhR zvXjt>2-{xs#2)5*vVy{=gYrIah(j4T=c6H1EuojmM&N@>Nh^|Rz9~T&y^A3lNxAZo zcEcM;G~nDErn(N^ISEzPWgqh*X&WnljHEd)8~hf?C{=yXx(MZxI7@9BGWc@-oN_}s z_G#36SR4B@v)vM#ST!a1B2Efo!@rnO0@5gacOOm z$KI9=ZL93N1Aj}EDZIKCGcU=V%I0!7q|$Au+($6lZ{)Y`3^+Q%DKc2U`>ide`^fW( zu#XMC#J>exN9F%ANAQk(w1O!iuc@?MZWW!KI}78>*;nJ2-F~6kp3?^)K8^f>9yf6% zw$)cN8awd_u_L9=qu=Wkg?MAE7+pAlU%E1b+k{!O=Rz8K*k8~z5BPSh)}1{4aL(|W z<4cv$0c}ohph^2MmZDC$f#^l{htRSjfF3Jd^vm}s@?3v)JF5GWU}9*McKAifI`=Dv zIZF~Zwp9mF;WuXy_J@A^C^1M?qM$tjQ$!Y%C6=GXM_k3m7*9iBQ$|a- zB(^H7!)cs6fJ~c($5!3BYPGBwkE679y#7Tw`kTD_v5W;ruxlcdE8Po5*qe%btZlD% z(PqrI3H)WE)>yV_u*;|27waXZde}3>*30Z6uxN-}Ur1k5FnX}g@2>o}QX0n}HRFzS{afijy?F;^&GWR z#&WfC@p=~QGr_I&BQxfSWihI?s+=KPV%|@Nz7#A6^V5bLe9+rJ87)9~aC=+$QAI%8 z$rf#gX`kdjd`^#!8DlDOWIkyeU8jXRO|%SFoCLv4d=JcnBvZ%H?+apIdc2@%C3Fwm zCFgfu$N222IbC-@#nl$gx!zphv5%>26i z$?~Dz%`>a|=q^|Occ{5RE4$YC@45jZ1yZ1h_BuTtT{?%u={UgjgE?^Pwz?*{Q-Z#? z*Q5d$tuiPOpA(H$=GKEbdJV7wSO9F*jXU@iZPpFe4a}XIKRLQLhC`^c>--MK6r_No zCadRPF8Hw#6y5ks{s&2hJDrN_IVjr8<9fYEBp@*WH2@C!M#|83a{Ihzwg&{3?tZ@& z;thCUgS)7IKO9%vYd&m$-7U*e+jKifQcJ>Vz1Yq?4spJ)Jk9`b)`r_X?H0yAZ!|w= zaC`9`!hU~L3>PUZ|~3)~p(?02rCuj4tV zU$HuOc7|??-x%oZ?HuhKoI0X@`Tj2G%=TVoYE#>HPW#CEX7lLrh~Sa@;rFwa_?*Hc zx??J;X3sK&bcKPdM=_&$5c6n#V1qmO=$4x|bm`Vpx0|OuM((iahKM(CV+hZ9%K)tn z244fhJO_Uyc!Tl?;TeCdwW;-3CO)@W=FL4V zm65?_E7xmsmND!bcyMZ9DN|F?bKLn(JyoSy^A0$oEh|@7=XH53cW4Jlg%`Vi0re#e0;5x1}f8sSr= zb04a6g^R7LakaIqB6(N^W1}TC_K9@*lAsf^nyUBi?uobX;yf?Ep{s|pH;AyZb zY>ekz7Gpn_DJ_eMvwxk9AZxk3ja6ntH=MBrn<>0ml80)n8axgm`<2((wOQDuyuAr3 zE@9{>62QFI9gF-K3K3aPBlZ5E@MB@#54y}psqBNMIB#E}v{HN8q{g|$o}lBlgx0=* zuOklG<|%1JaiM|h%N=4s)hAe8J?gy7r|uf@tarC=jms0#g&|!lF@)GermUuT<49a1(WzmUUV&{| z*Mf_}$&IbS8!}y1vjn+6yELfWy z&9aICz&ae9g82*fW3%*SIWmVGj3D7G8dD+n(5c>i|G{k0SR>T%KoObT1q;`;_T!w> zLRHN4@rKf?Rg`m%Z=vCDvDc#bFDUK0>ve|OiPj8ry{(rlK#@JmI*2#qM3?f zSJMpNww1L`DD!Y%Jtyl3OT|5NG6k(8YVu+0sALsZWhf zUY5?O^8{VyxGeoad3k-Dd91BQNfDTtdKt}h;dK4%W>)PiAS^jS)q07l$Rg1cn8>4P zTthYz)K#ub%sBeyw5tCINPExYR(F%p zRP*)g9bN4nK#pXk>rW=5xH_X5{xX{Ma9Y@d%;kxuIe)59VEg z+XkKPS=+MpoF!j3x*&S_>59Rl75qLBeO+2tvm^bK`aBH%_M!uV9QwF-Y6W$ihg9)? zFWUZ{;jd&1E89cK{y!_%K42;DU)JrQF4+uwb9X1dbUAy4N>Mr*o%?fPvFe%qb#KO8Lokjf6YZ#% z;^)FJ3yj?7dK0d8-iTW|ZU(rGi>+*f8zHod@lCV2`(_?OR=mhm-isTb)4vPSUKIx% zS)j(J;k5hGjc=W7M#8xFFaAn&rOyqIv(Cg{@@t>zkjzvQgsM_NKuET5LRc0 z(?*UuiV)yME32qJK0c~CaxtbkhoE-ax*P=4u!;12{-wvW5Dk+7A(th1&#yw|P59YX zAzIrkFVCuPsn?Yj*zG~p)aaI5l$WecYm=+$w6|1Rdu;@v#e%ke@kc0n6kP(0+L>@; z&Dafu_qc?cm88|dP>Vx}#;Q4;LvVNgCOiasL{LD;5?nYN?1|QMku4k({ooT~g40px zJ7$f6n1QPC-3<8VJRBj<+qSxU*j}!!Btgxeoig1aPIb-|eI%UMzrxRpw5!fHn zz7;W$XCg*~fMUyr!;~*KD{zoF#bAIkpcyMGFB)q}G?NF7;w~nS#%$70j<)^_7ON&j zG9nD=rgT0f#}$Lh0J+c9IrnJLSj17}L0&tE*x0FSD>?!s9SIl_+4%sHJ& z97BPIFg9d3SQdqMT!&TeJ}6JEe;25!qDN)5vl$aY!s$;I1QSGPzEr5SMTmrPinT&m z#}zj?lVqHQ#U6)bX^iTHNuZCGC8qQFIVcAFH0mi6r7XEp&+?C1j6UF-pLJq-sV9eTLX@tu=EuZQ)1}1pVFDfjD}>b5V4O~xDf2)16F}3a_%nGiod9FKTzZ1KwXpP z06{O@ApD3>d34s_5sAw&Ax}G$K@s1wo9FtA1BL5gutQ~S|4fNI`79oX=$k}D+cZeL z;=+&_^zxBY4dA6EXiKiUfC%J0zac{kktm zgB$@FU{P#v9?wxG=G5Xc{8~_U1h|5SvBXmVMd7M{>sywyj&x2ZB>22E`uIwna$)F8G-4B_4i~Pl_jZETA+jBXDVH z!fie3Y0^Hu6O1YBKb!SeMd+l5fQtD0>uWFmQaU1!6G6h^l40z{Js3>;6-}=TNA-hI zTy(DMStvLsC4%P9Y6_8g73hI)Xt}WE<+%i%5ROV8EIbI5FGkze+nWJp_!;OzbbczC ztvxN6^K{(MH#mVJCA1L>xYhdnoygjp?9$V1*X>9QngJMjhGn&A4%{g9@T_VCL?6Uv zHvJpWpA%tNzLPOwOuh{)REXflc61F!j`RLRdG~&DCdPP)0j>Y~MfuMkz@P+h8E@^O zSL;%mlhL_INka-Lm!ezt%Rh>0+9$O<4`r`E%&tqy#j0D8W}%p35!Ay< zIDe3HY1t-f_KtF$v`p2Ml$DE@pqa`2aq6$C4kIjPkC6VRXu+=$lLU_%F7IwwN-h|6 z;P?-l7H&)8cpzh_I*(c!zFVy!lKA{sYV)0mtu^Yfm`b(yM{Cd5kOW)F|r8_RgMDwUbD+aE5 z@RhrW6*w*a7TSUr?Lz)*^BY*^YPNm1EC&i#cv zPfR1V!(v|f3aTvoM%G4+-NSmtvz3j}K!7Z-P^#{+q9(j8mMr=YphNk{<*6NKHSt_t z_s62eb8z{~c7e#2?CC*YY2o zQdb>{n4hk^5?@L=Xb>FYXzz)6%+ z(Lx8N734M6x+76l(Z@s`Mh{(L*`k6sA4@iG`SBBPpmGbQo`wc^$%mwqbw5*0{u69l zK;G&3NTp)JU?*R`)6jet)s!pWiVdngIqUX}@SWZ5r}$Z2(S|K>8=s}Z+-r~8%G6^2 z?>%KEey31Ab#e5_NB`W109VfV>%i%Xd?udb;b7x*<^r3_wlv7?1cfDuV=F()eWrQtfT+IW@GHatZeYZvjwPr$&;IInA#J6KpMpj(@N-#4*>VU&Yj?!7=z1 z1|J<^hr9SXuL*J|zv03{IR&ySnGZD!IC+EW&>Y-Jwq4gtNIs&Z>rQ!dHV-**aT!hN z=wbZD$tX5CL4{@!8XrwS?PSAO;J|n<=#3S5>{XMF;6I4rCcibAdX!WmioCe@U$^*%I~SUjN||ryj21BeQ0}ZbmA~n3r^d%aT4@oo8$i3aLy;0 z$GjKl`ky%X9>QjldS8V#Jv&&DBCO1LKD~~Wj6DknC@QaPaf2WD{|B)tTH(O%@dN~82lB3oC@@W_u z*cl1vMa?Z8jqU%Hmimsy!p4R+M*kvZ|5-Z!*@<*Y&$1 zElCWpBk>J=+`qEI?wkM}Z5506m$y@`G?USCX2`SPUeD9G_?Zef1se3D9H>pCCEi`@ z%H$KZ1-rQ|=Bp<53KN%y2Weq@KnE?_qJ!FlyPsaBj&XFyXFMXLi-F5xv%kSx;+e%vW2VMTx1>bcCUtU(1=j`I=f-L)}&N;2QJ9||tJWE7O zc_|5KG(hGA){K~ z=fJM^jRmJHerV(X2HJS21#S#ea^ASTzjeV^N{tw8IF z1qfPPWKM;5%P&2YS}lH6hD8?*B|l;JbLxCv^_@|GNGrax{?N=k*Lap`?q7{Yde>guuH@?c3hq{S_>mW&Y;Begm3ETPRt>TRm;5T z5kbwJszDO#KR)}7MKb>2N&&H`4>-(L4z;CEKlm-1Ce%W(SRvxLnZ2WjuLw`}z?GJC zNyB+*_%hTkVkZMVAu(O=;VU7z35mlR%*~wIA6}c{-{;ayA(=*yu%F77l)On@WtwR0 z2hX-cz6O`@5R@xf^$Rr%GG9=XYH#GQyfKK@L&7K`!JbXo;RZgcMcha zD{QDpn;Skh9$xEBxcbS_cdd$j_L}mM$~9(kyCYH7W}4$t0(wZ;Tq{@>iAk&~!5zY9 z>&Kq9+cN{_Q#h^h)OL z#{Z7#C4>pIxD6ONjF^mBn3(kS*;xS0>}(wRtnADTCi?mu07DKA2HyYw2%Z0sMMDEH s2(m#RPIxd#Z*T_K|9V`4|J-059QExTUG0rcV3`