From d593fce014cca23046276c887d1a4e98a39346f2 Mon Sep 17 00:00:00 2001 From: Table Date: Sat, 29 Nov 2025 03:27:19 +0800 Subject: [PATCH] init repo --- .air.toml | 45 +++ .dockerignore | 65 ++++ .gitignore | 83 +++++ Dockerfile | 57 ++++ Makefile | 237 ++++++++++++++ PROJECT_SUMMARY.md | 236 ++++++++++++++ PROJECT_SUMMARY.pdf | Bin 0 -> 243591 bytes README.md | 410 +++++++++++++++++++++++++ README.pdf | Bin 0 -> 265958 bytes cmd/main.go | 102 ++++++ config/dev.yaml | 41 +++ config/prod.yaml | 41 +++ config/stage.yaml | 41 +++ docker/docker-compose.dev.yml | 48 +++ go.mod | 78 +++++ go.sum | 242 +++++++++++++++ internal/handler/router.go | 133 ++++++++ internal/handler/user_handler.go | 381 +++++++++++++++++++++++ internal/middleware/auth.go | 125 ++++++++ internal/middleware/cors.go | 31 ++ internal/middleware/logger.go | 49 +++ internal/middleware/rate_limit.go | 207 +++++++++++++ internal/model/user.go | 94 ++++++ internal/repository/user_repository.go | 105 +++++++ internal/service/user_service.go | 235 ++++++++++++++ localhost.session.sql | 2 + pkg/auth/jwt.go | 131 ++++++++ pkg/cache/redis.go | 187 +++++++++++ pkg/config/config.go | 135 ++++++++ pkg/database/database.go | 98 ++++++ sql/init.sql | 62 ++++ test/config_test.go | 156 ++++++++++ test/middleware_test.go | 171 +++++++++++ test/user_test.go | 90 ++++++ 34 files changed, 4118 insertions(+) create mode 100644 .air.toml create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 PROJECT_SUMMARY.md create mode 100644 PROJECT_SUMMARY.pdf create mode 100644 README.md create mode 100644 README.pdf create mode 100644 cmd/main.go create mode 100644 config/dev.yaml create mode 100644 config/prod.yaml create mode 100644 config/stage.yaml create mode 100644 docker/docker-compose.dev.yml create mode 100644 go.mod create mode 100644 go.sum create mode 100644 internal/handler/router.go create mode 100644 internal/handler/user_handler.go create mode 100644 internal/middleware/auth.go create mode 100644 internal/middleware/cors.go create mode 100644 internal/middleware/logger.go create mode 100644 internal/middleware/rate_limit.go create mode 100644 internal/model/user.go create mode 100644 internal/repository/user_repository.go create mode 100644 internal/service/user_service.go create mode 100644 localhost.session.sql create mode 100644 pkg/auth/jwt.go create mode 100644 pkg/cache/redis.go create mode 100644 pkg/config/config.go create mode 100644 pkg/database/database.go create mode 100644 sql/init.sql create mode 100644 test/config_test.go create mode 100644 test/middleware_test.go create mode 100644 test/user_test.go diff --git a/.air.toml b/.air.toml new file mode 100644 index 0000000..55d3c51 --- /dev/null +++ b/.air.toml @@ -0,0 +1,45 @@ +# Air 配置文件 - 用于热重载开发 +root = "." +testdata_dir = "testdata" +tmp_dir = "tmp" + +[build] + args_bin = ["-env=dev"] + bin = "./tmp/main" + cmd = "go build -o ./tmp/main ./cmd/main.go" + delay = 1000 + exclude_dir = ["assets", "tmp", "vendor", "testdata", "build", "doc", "docker"] + exclude_file = [] + exclude_regex = ["_test.go"] + exclude_unchanged = false + follow_symlink = false + full_bin = "" + include_dir = [] + include_ext = ["go", "tpl", "tmpl", "html", "yaml", "yml"] + include_file = [] + kill_delay = "0s" + log = "build-errors.log" + poll = false + poll_interval = 0 + rerun = false + rerun_delay = 500 + send_interrupt = false + stop_on_root = false + +[color] + app = "" + build = "yellow" + main = "magenta" + runner = "green" + watcher = "cyan" + +[log] + main_only = false + time = false + +[misc] + clean_on_exit = false + +[screen] + clear_on_rebuild = false + keep_scroll = true diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..db2cdf0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,65 @@ +# Git +.git +.gitignore + +# Documentation +README.md +doc/ + +# Build artifacts +build/ +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool +*.out +coverage.html + +# Dependency directories +vendor/ + +# Go workspace file +go.work + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log + +# Docker +Dockerfile* +docker-compose*.yml +.dockerignore + +# Development files +.env +.env.local +.env.development +.env.test +.env.production + +# Temporary files +tmp/ +temp/ + +# Node modules (if any) +node_modules/ + +# Test files +test/ +*_test.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e337e78 --- /dev/null +++ b/.gitignore @@ -0,0 +1,83 @@ +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +vendor/ + +# Go workspace file +go.work + +# Build directory +build/ +dist/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Logs +*.log +logs/ + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage/ +*.lcov + +# nyc test coverage +.nyc_output + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Temporary folders +tmp/ +temp/ + +# Documentation build +doc/dev/ +doc/stage/ +doc/prod/ + +# Docker volumes +docker/data/ + +# Air (live reload) temporary files +tmp/ + +# Test cache +.testcache/ + +# Go module cache +go.sum.backup diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..585c14a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,57 @@ +# 多阶段构建 +FROM golang:1.21-alpine AS builder + +# 设置工作目录 +WORKDIR /app + +# 安装必要的包 +RUN apk add --no-cache git ca-certificates tzdata + +# 复制 go mod 文件 +COPY go.mod go.sum ./ + +# 下载依赖 +RUN go mod download + +# 复制源代码 +COPY . . + +# 构建应用 +RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o main cmd/main.go + +# 最终镜像 +FROM alpine:latest + +# 安装必要的包 +RUN apk --no-cache add ca-certificates tzdata + +# 设置时区 +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +RUN echo 'Asia/Shanghai' >/etc/timezone + +# 创建非root用户 +RUN addgroup -g 1001 -S appgroup && \ + adduser -u 1001 -S appuser -G appgroup + +# 设置工作目录 +WORKDIR /app + +# 从构建阶段复制二进制文件 +COPY --from=builder /app/main . +COPY --from=builder /app/config ./config + +# 更改文件所有者 +RUN chown -R appuser:appgroup /app + +# 切换到非root用户 +USER appuser + +# 暴露端口 +EXPOSE 8080 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1 + +# 启动应用 +CMD ["./main"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6586b3a --- /dev/null +++ b/Makefile @@ -0,0 +1,237 @@ +# Makefile for Yinli API + +# 变量定义 +APP_NAME := yinli-api +VERSION := 1.0.0 +BUILD_DIR := build +DOCKER_DIR := docker +DOC_DIR := doc + +# Go 相关变量 +GO := go +GOFMT := gofmt +GOVET := go vet + +# Docker 相关变量 +DOCKER := docker +DOCKER_COMPOSE := docker-compose + +# 默认目标 +.PHONY: help +help: ## 显示帮助信息 + @echo "可用的命令:" + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' + +# 开发环境 +.PHONY: dev +dev: ## 启动开发环境 + @echo "启动开发环境..." + $(GO) run cmd/main.go -env=dev + +.PHONY: stage +stage: ## 启动预发布环境 + @echo "启动预发布环境..." + $(GO) run cmd/main.go -env=stage + +.PHONY: prod +prod: ## 启动生产环境 + @echo "启动生产环境..." + $(GO) run cmd/main.go -env=prod + +# 构建相关 +.PHONY: build +build: ## 构建应用程序 + @echo "构建应用程序..." + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -ldflags="-w -s" -o $(BUILD_DIR)/$(APP_NAME) cmd/main.go + +.PHONY: build-windows +build-windows: ## 构建Windows版本 + @echo "构建Windows版本..." + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 GOOS=windows GOARCH=amd64 $(GO) build -ldflags="-w -s" -o $(BUILD_DIR)/$(APP_NAME).exe cmd/main.go + +.PHONY: build-mac +build-mac: ## 构建macOS版本 + @echo "构建macOS版本..." + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 $(GO) build -ldflags="-w -s" -o $(BUILD_DIR)/$(APP_NAME)-mac cmd/main.go + +.PHONY: build-all +build-all: build build-windows build-mac ## 构建所有平台版本 + +# 依赖管理 +.PHONY: deps +deps: ## 下载依赖 + @echo "下载依赖..." + $(GO) mod download + +.PHONY: deps-update +deps-update: ## 更新依赖 + @echo "更新依赖..." + $(GO) mod tidy + $(GO) get -u ./... + +# 代码质量 +.PHONY: fmt +fmt: ## 格式化代码 + @echo "格式化代码..." + $(GOFMT) -s -w . + +.PHONY: vet +vet: ## 代码静态检查 + @echo "代码静态检查..." + $(GOVET) ./... + +.PHONY: check +check: fmt vet ## 执行所有代码检查 + +# 测试相关 +.PHONY: test +test: ## 运行测试 + @echo "运行测试..." + $(GO) test -v ./... + +.PHONY: test-coverage +test-coverage: ## 运行测试并生成覆盖率报告 + @echo "运行测试并生成覆盖率报告..." + @mkdir -p $(BUILD_DIR) + $(GO) test -v -coverprofile=$(BUILD_DIR)/coverage.out ./... + $(GO) tool cover -html=$(BUILD_DIR)/coverage.out -o $(BUILD_DIR)/coverage.html + @echo "覆盖率报告已生成: $(BUILD_DIR)/coverage.html" + +.PHONY: test-race +test-race: ## 运行竞态检测测试 + @echo "运行竞态检测测试..." + $(GO) test -race -v ./... + +.PHONY: benchmark +benchmark: ## 运行基准测试 + @echo "运行基准测试..." + $(GO) test -bench=. -benchmem ./... + +# 文档生成 +.PHONY: docs +docs: ## 生成API文档 + @echo "生成API文档..." + @mkdir -p $(DOC_DIR)/dev $(DOC_DIR)/stage $(DOC_DIR)/prod + @echo "请先安装 swag: go install github.com/swaggo/swag/cmd/swag@latest" + @echo "然后运行: swag init -g cmd/main.go -o doc/dev --parseDependency --parseInternal" + +.PHONY: docs-serve +docs-serve: docs ## 启动文档服务器 + @echo "启动文档服务器..." + @cd $(DOC_DIR) && python3 -m http.server 8081 + +# Docker 相关 +.PHONY: docker-build +docker-build: ## 构建Docker镜像 + @echo "构建Docker镜像..." + $(DOCKER) build -t $(APP_NAME):$(VERSION) -t $(APP_NAME):latest . + +.PHONY: docker-compose-dev +docker-compose-dev: ## 生成开发环境Docker Compose文件 + @echo "生成开发环境Docker Compose文件..." + @mkdir -p $(DOCKER_DIR) + @echo "version: '3.8'" > $(DOCKER_DIR)/docker-compose.dev.yml + @echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo "services:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " yinli-api:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " build:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " context: .." >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " dockerfile: Dockerfile" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " ports:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - \"8080:8080\"" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " environment:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - APP_ENV=dev" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " depends_on:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - mysql" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - redis" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - ../config:/app/config:ro" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " networks:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - yinli-network" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " mysql:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " image: mysql:8.0" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " environment:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " MYSQL_ROOT_PASSWORD: sasasasa" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " MYSQL_DATABASE: yinli" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " ports:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - \"3306:3306\"" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - mysql_data:/var/lib/mysql" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - ../sql:/docker-entrypoint-initdb.d:ro" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " networks:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - yinli-network" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " redis:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " image: redis:7-alpine" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " ports:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - \"6379:6379\"" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - redis_data:/data" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " networks:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " - yinli-network" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo "volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " mysql_data:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " redis_data:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo "networks:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " yinli-network:" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo " driver: bridge" >> $(DOCKER_DIR)/docker-compose.dev.yml + @echo "开发环境Docker Compose文件已生成: $(DOCKER_DIR)/docker-compose.dev.yml" + +.PHONY: docker-up-dev +docker-up-dev: docker-compose-dev ## 启动开发环境Docker容器 + @echo "启动开发环境Docker容器..." + cd $(DOCKER_DIR) && $(DOCKER_COMPOSE) -f docker-compose.dev.yml up -d + +.PHONY: docker-down +docker-down: ## 停止并移除Docker容器 + @echo "停止并移除Docker容器..." + cd $(DOCKER_DIR) && $(DOCKER_COMPOSE) down + +.PHONY: docker-logs +docker-logs: ## 查看Docker容器日志 + @echo "查看Docker容器日志..." + cd $(DOCKER_DIR) && $(DOCKER_COMPOSE) logs -f + +# 清理 +.PHONY: clean +clean: ## 清理构建文件 + @echo "清理构建文件..." + rm -rf $(BUILD_DIR) + rm -rf $(DOC_DIR) + $(GO) clean + +.PHONY: clean-docker +clean-docker: ## 清理Docker资源 + @echo "清理Docker资源..." + $(DOCKER) system prune -f + $(DOCKER) volume prune -f + +# 安装工具 +.PHONY: install-tools +install-tools: ## 安装开发工具 + @echo "安装开发工具..." + $(GO) install github.com/swaggo/swag/cmd/swag@latest + $(GO) install github.com/golangci/golangci-lint/cmd/golangci-lint@latest + +# 全流程 +.PHONY: all +all: clean deps check test build docs ## 执行完整的构建流程 + +.PHONY: ci +ci: deps check test-coverage ## CI流程 + +# 版本管理 +.PHONY: version +version: ## 显示版本信息 + @echo "应用名称: $(APP_NAME)" + @echo "版本: $(VERSION)" + @echo "Go版本: $(shell $(GO) version)" + +# 默认目标 +.DEFAULT_GOAL := help \ No newline at end of file diff --git a/PROJECT_SUMMARY.md b/PROJECT_SUMMARY.md new file mode 100644 index 0000000..2d60f11 --- /dev/null +++ b/PROJECT_SUMMARY.md @@ -0,0 +1,236 @@ +# Yinli API 项目总结 + +## 🎉 + +以下是项目的详细总结: + +## ✅ 已完成的功能 + +### 1. 项目基础架构 +- ✅ 基于 Gin 框架的 RESTful API 服务 +- ✅ 清晰的项目目录结构(cmd、internal、pkg 分层) +- ✅ Go 模块依赖管理 + +### 2. 配置管理系统 +- ✅ 使用 Viper 库进行配置管理 +- ✅ 支持三种环境配置:dev(开发)、stage(预发布)、prod(生产) +- ✅ 配置文件保存在 `config/` 目录 + +### 3. 数据库集成 +- ✅ MySQL 数据库连接和管理 +- ✅ GORM ORM 库集成 +- ✅ 用户模型和数据访问层 +- ✅ 数据库初始化脚本(`sql/init.sql`) + +### 4. 缓存系统 +- ✅ Redis 缓存集成 +- ✅ 完整的 Redis 操作封装 +- ✅ 用于频率限制和会话管理 + +### 5. 安全特性 +- ✅ JWT 认证系统 +- ✅ CORS 跨域支持 +- ✅ 基于 Redis 的 API 频率限制 +- ✅ bcrypt 密码加密 +- ✅ 多层中间件安全防护 + +### 6. 用户认证接口 +- ✅ 用户注册接口 (`POST /api/auth/register`) +- ✅ 用户登录接口 (`POST /api/auth/login`) +- ✅ 用户资料管理接口 +- ✅ 管理员权限接口 + +### 7. 构建和部署 +- ✅ 完整的 Makefile 构建脚本 +- ✅ 支持多环境启动命令(`make dev`、`make stage`、`make prod`) +- ✅ Docker 容器化支持 +- ✅ 自动生成 Docker Compose 文件 + +### 8. 测试框架 +- ✅ 使用 Testify 测试框架 +- ✅ 配置系统测试 +- ✅ 中间件测试 +- ✅ 接口测试框架(需要数据库连接时可启用) + +### 9. API 文档 +- ✅ Swagger 文档集成准备 +- ✅ 支持按环境分离文档生成 +- ✅ 文档保存在 `doc/` 目录 + +### 10. 详细文档 +- ✅ 完整的 README.md 说明文档 +- ✅ 技术架构说明 +- ✅ 开发调试指南 +- ✅ 部署说明 + +## 🚀 快速启动指南 + +### 1. 基本启动 +```bash +# 进入项目目录 +cd /home/table/Workspace/go/src/yinli-api + +# 查看所有可用命令 +make help + +# 下载依赖 +make deps + +# 启动开发环境 +make dev +``` + +### 2. Docker 启动 +```bash +# 生成 Docker Compose 文件 +make docker-compose-dev + +# 启动 Docker 容器 +make docker-up-dev +``` + +### 3. 运行测试 +```bash +# 运行所有测试 +make test + +# 生成测试覆盖率报告 +make test-coverage +``` + +## 📁 项目结构概览 + +``` +yinli-api/ +├── cmd/main.go # 应用程序入口 +├── config/ # 配置文件目录 +│ ├── dev.yaml # 开发环境配置 +│ ├── stage.yaml # 预发布环境配置 +│ └── prod.yaml # 生产环境配置 +├── internal/ # 内部应用代码 +│ ├── handler/ # HTTP 处理器 +│ ├── middleware/ # 中间件 +│ ├── model/ # 数据模型 +│ ├── repository/ # 数据访问层 +│ └── service/ # 业务逻辑层 +├── pkg/ # 可复用包 +│ ├── auth/ # JWT 认证 +│ ├── cache/ # Redis 缓存 +│ ├── config/ # 配置管理 +│ └── database/ # 数据库连接 +├── docker/ # Docker 相关文件 +├── sql/ # 数据库脚本 +├── test/ # 测试文件 +├── Dockerfile # Docker 镜像构建 +├── Makefile # 构建脚本 +└── README.md # 项目说明 +``` + +## 🔧 主要技术栈 + +- **Web 框架**: Gin v1.11.0 +- **数据库**: MySQL 8.0 + GORM +- **缓存**: Redis 7 +- **认证**: JWT (golang-jwt/jwt/v5) +- **配置**: Viper v1.21.0 +- **测试**: Testify v1.11.1 +- **文档**: Swagger (gin-swagger) +- **容器**: Docker + Docker Compose + +## 🛠️ 可用的 Make 命令 + +```bash +make help # 显示所有可用命令 +make dev # 启动开发环境 +make stage # 启动预发布环境 +make prod # 启动生产环境 +make build # 构建应用程序 +make test # 运行测试 +make docker-up-dev # 启动 Docker 开发环境 +make clean # 清理构建文件 +``` + +## 📡 API 接口列表 + +### 认证接口 +- `POST /api/auth/register` - 用户注册 +- `POST /api/auth/login` - 用户登录 + +### 用户接口(需要 JWT 认证) +- `GET /api/user/profile` - 获取用户资料 +- `PUT /api/user/profile` - 更新用户资料 +- `PUT /api/user/password` - 修改密码 + +### 管理员接口(需要管理员权限) +- `GET /api/admin/users` - 获取用户列表 +- `DELETE /api/admin/users/{id}` - 删除用户 +- `PUT /api/admin/users/{id}/status` - 更新用户状态 + +### 系统接口 +- `GET /health` - 健康检查 +- `GET /swagger/*` - API 文档 + +## 🔒 安全特性 + +1. **JWT 认证**: 基于 JSON Web Token 的用户认证 +2. **CORS 保护**: 可配置的跨域资源共享 +3. **频率限制**: 基于 Redis 的 API 调用频率限制 +4. **密码加密**: 使用 bcrypt 加密用户密码 +5. **中间件保护**: 多层安全中间件防护 + +## 🌍 环境配置 + +项目支持三种环境配置,每种环境都有独立的配置文件: + +- **dev**: 开发环境,详细日志,宽松的安全设置 +- **stage**: 预发布环境,生产级配置,用于测试 +- **prod**: 生产环境,最严格的安全设置 + +## 📊 测试覆盖 + +项目包含以下测试: +- 配置系统测试 +- JWT 认证中间件测试 +- CORS 中间件测试 +- 请求 ID 中间件测试 +- 基础 API 接口测试 + +## 🚀 部署建议 + +### 开发环境 +```bash +make dev +``` + +### 生产环境 +```bash +# 使用 Docker 部署 +make docker-compose-prod +make docker-up-prod +``` + +## 📝 下一步建议 + +1. **数据库设置**: 确保 MySQL 数据库运行并执行 `sql/init.sql` +2. **Redis 设置**: 确保 Redis 服务运行 +3. **环境变量**: 在生产环境中设置敏感配置的环境变量 +4. **SSL 证书**: 在生产环境中配置 HTTPS +5. **监控日志**: 添加应用监控和日志收集 +6. **API 文档**: 运行 `make install-tools` 安装 Swagger 工具并生成文档 + +## 🎯 项目特色 + +- **完整的企业级架构**: 分层清晰,易于维护 +- **高度可配置**: 支持多环境配置 +- **安全性强**: 多重安全防护机制 +- **易于部署**: Docker 容器化支持 +- **测试完备**: 完整的测试框架 +- **文档齐全**: 详细的开发和部署文档 + +## 🔗 相关链接 + +- [Gin 框架文档](https://gin-gonic.com/) +- [GORM 文档](https://gorm.io/) +- [Viper 配置库](https://github.com/spf13/viper) +- [JWT Go 库](https://github.com/golang-jwt/jwt) +- [Redis Go 客户端](https://github.com/go-redis/redis) diff --git a/PROJECT_SUMMARY.pdf b/PROJECT_SUMMARY.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d71ce8b79bd8ebb5d0ab62fb17413a7765c57118 GIT binary patch literal 243591 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

JPh|SCucQbAA*pUYR%sCf8L3?uvcOfLI559bBb! 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

5eJd-~Sc8%7#9W*C%@HRHL;~Wr z+}Tc*(h1L@QIol2YVLFjycv)w#nlOha6aLr_WuGgHM*O23&?cf(&St*2-DL#We#{% ziy(iPIs5iYhj(LR{rrF8pU3q~J#$;;q0GmTZ*mzISlk6!h+d|us|>wvEhbOZnC;7d zUAmWe6Ik=t`G9%eWK1^lAgkH6>5Vgk4fHs?DKlyYU{7u9`^@fp1YO^E0gb)jd#q(l z`s-*m=S6n%RI$n5v)rZ``VV?!mG?A#PO$)!mVHg!>zpqkdjTV z0{4}cfhuO%KxL2+N9VXaXUcL1{QXI#6ge)+1{R~ut>vgW&VP3Tb_Rw3RLwgWZS%sg zpe!QwRAtA_FDq|docFhWEcqirnar|kvfKB(k~iET5Pw;@<*=|YHVP~j4bQbxpsUUe zu;9IXj4D-pOy+m*uhVXI;9$L8QC!6ks~yHmjaF?SZMTNO3c16pCyu_v&w;Pkot>ha zkwJ~8d_r>5J1R}tJnYVtx$o|qVla+sbZXs?Ui|Obt z2?h@S_xkZTNb|Z`^!r~`kHL_i82qE2LIpIYv1MFOVIY3pdtw(A)=R4p8bbVY%tY8}xMV}a; z7>njTxGQArQM(Fz=;P=A0pE)UGJ~0BW&tqf%fNHL$aJ4|4!mA2ygr7yqu0!{v+-xW zm#rhc3&qVko8-;V=ZL-hG`EtdqH}xZ_nndHhWtIH+IpwQxW(kLm0#{OnD!e|R4s}9 zqy%v5$v6qXn!$IZV?MX=S2bZpRs8h=r=A3OcB5yZ+|lt6ZnDOK1xU~3?QrR}sDva3 zw&|aUeQ$0s(%`x%%`crR1)h@m$qo#`VbnrHgH2zwsN9e z_AM0X$QJ>Saz4nx0%&JYZ~wQIe`yLCo6?qcGa$G$xd*-a$C^dOuMYTU&i^&O z5)WqlZmr2ZnWv2ZV&0{0Y2OVUS-YV|m)zXYVEu;9SR2Z7xPM|sUk%BoObNuhnXupQ zt<@_1LSnHAe?+)-8Rs;_RPK3d{v~g}fpl_;Em)PX~j7Hio>!v>c=7<5ys6FKsoXu(Th`@G&02 zhIFitEbUqOk0+O#TGu{^T4w_{a4=^JN6d)9qA$ZN5>6huux;Fl!HJc-_a10*ULu^? zofa%cX<{#W{d27-lsXncWu@q3t5uEAV0gvH2D&1z%ozzV;fLR_2-m{~$Sf`S`vFO@ zE}gP2`g{#p(I8yDU9y~UM!1l?V!2~md_j3TpW1M5 zyfBKRu@R-U%cUGnyy-M>nY(M> z%HKbm2KAg$;~z&?U(N#|n0KbOFdR5WLY)Q8En4yd`SxDO+SIi z#8nQ)*>v(Mv!2hK|5yCyxB~0>j?8Cz>uK&|-wYC~SHt|ntf$EZ4p&#Dp)W?gYwz7x z*RzH?I(;jBL4`qArKYhl_j5zB!O-XKUjA}eGA$S__};MI64o10fpDz`0ZP|`IuHp~ zOiR(g{IoX8ok2KK@!E;+$eN#PqbH^pq$$~CZ2YXB7gFU}Af?{o&CqP{O21&Hv@N!c z#Hkqp^b;PzTs;c^A!*^!o4w?01GuF7&TG@5iFBzL8qxF|?3}6SGwhWS7X!%=PVDxz zo(&#>lN`3&q3+Eq-+k_I8rHxZTJJz_xC*=ov+>reD(yj^a{`v?h%)`x zA_Nk~qR#%>!awKWj+D)>RC%O~7MH(kqE)JT zZfRdRa!@+HGcc7XV^iCRE5Qf7?ffV3XYlPAmHCmiYUc|MySl7ovtMY?jVTa)IugCC z$r@tY%!}7K#Ko+}ymAxYU46tZve0$C{Y$BaZ=|p{#tlzf&7deueF}39DRcHU{IdjD zD|57U_o>$lY(a)D}o13XeN_McI;L&FNq8alflgJd! zxqRi0FiW#QkU;c z)DgZSKJ(hGh_C{8KH9AZi0aZ3vaBH{LXBT6|S_ z8OPSVF&rJunUl5Qg-BWi0B{weA(Fe`DXfwmz?Sz@id;gKnWFA;XU|cev89qLDnG0ey%f`ND6c_M%YwdTShg2 z@uZ>5h!AF(V>FtdvYr^fsW!xUWlQ;Vu3~0ET&{r|)+KlOY~X2N`(_GtN_%w$iV!~$ zn92@VKea+fB~z2Z6eiICc@$gPNsqR&z<9L}UxeM(_xQ1jO?=ps@Ug&mZy9IinSjCL zmG1!~erjKVTFz5*1t8kQ%oAerIp4_w*9{gL$_b7Z#WtrQ$JM=ux;5P10j7*)nH_QVrshscx`1|f0%;ONtpT%)zJo8xQ zjS$VdbqwBaBl%z+se%SKpZYhM_nKPB1$ccuz zsD3i`Bo&<<=A2dMUvHW^O5RJBDz&6B3Hbb*Oe#kyWu+s$5Z85a>PElJauQjiSG-;XE%z3aMnG@$mNn*#8<|8`WIBHI1XFJQPTg6P@3$}U`ZS!l@L#B%P zsWhheQMlg(E+rlX#?mu^H80y9>7Q_89-)y-%-G$w zF;RUJ?lZBx>-NwN+UXXz2XWdfb|>!1s?Or=+HW89+kwsU$>4nuhZA)F+D? zBF9gVtdTtE_I_xIV21|WKCqPR^-2t|Bwg7aSHMJ_U87u9O)pfI4K~LrC{F+zbOwBk zcKYGr-3RXu^Kx|W<%)unweF?4Zozs!h`aUc+&Pv5doD2sc8feP9DfR6+t>>~nA#s? z!5+pI=1k*$?Juqii=`2gB^Y=1{oCADh_sTK!t?)BrVybPIHSl2rxKn`j%Z*{J$_my=XN6WuaUn`YA@rFi4I}5{3A({Y_b@&VKacs<(-5z0b`oYKV2YdoV zBqwJi_|$m`+bN-Ts8t^OTKKu+&Uqh}B-4$ZcY{SQIXZ(%&ghohV@;_`@M)WyHu~o z>P9JC%Au{gv|V66A*DiSjD#!9Ih-f6szDVCjtkyaBBzN!P-3Nio5}HErKsT;7AsIV#SUfI6aTj4q z!>?`T{Vg-ntii)i>@#|-YzXMB2X`rm9&_z^X}Xjgoby_f1F&6o z!ROQt8)vxhoS%a*56)1R{G65%`sc>O;Bsw$Zg31aM`;Zwufo6 zl%aReYq-06EAVoFvP702`TyGc{@^&S`@XjT1Q16;009yrMT%O&qy&h^3G3ztO+5Z*1)0A!GYh#HNA! z58qFJr(o!@z55SlKT(=X4<8=vJ92REq5ka$4de6u+fO%QT_gMU4(%9B4DFh|J@8=Y z$-)=Y7Y2G>8|Z(axBJY|A!A@*__6K%^r+Rxjh*y2i%uE+vHKtG-}B}l8C?VPr(*7Z zY;b7k+}_dc z{r!^uFht6Fq(JNgwVp zCO-8@)*0JBa{rFLzR|fP>drk!F8|tRhjt#^d-x&uBZCWv9~nPLPZ}M1VC<2r?>~EG zWY^F9_=O|J!9%5|ru(~2jhxwcbNBG@wt@Qw`g(>Bf4y&8WnN6qx17*>LZ-?{&+A&jo4-g>?Je0NFgl$9=jTQ{w@D7~EPKG8gR z{Pabq@5VchJiPyQcj<#KY?PcAKh)TFXXORAQhx5k^lGAb?lctB;Q z-{`w_aQ~y@H~Ll|KYRRCcWK{8EAOee6>npo_tP&rmFD{>P8i0g#CN;qyN1LtPR0}+ zC(rF7FaTow>DYs#dqxk94BvX-LtO_BbPes2%^t=poV#2b`b3e#mhU@@tnf@D`*Kt3glZ?$Z_?;7b$kfzV`ybHpKxABtD^ms zf{}#IhVYy8_6pjoN}j}TMbYtYw6kahv|Ea&^Qs+Dd=gKm(Bf#Of=&3|p~lhmDYTc+ zKB(Y6hjvFD&nkUW+mLjzO#Zrpe?{@|jD%&x6x{s^C-MIsg|n#Oyo~mSnp0IYya&zh zk+w#*xQO;QdZcZRajwY~{;RUtLd09*s|-eNFiyeI?V=Xz*#{ z1_I0wymuDK>oY>!_XQN_Ux#ZSNBfZwG5p@KONfEXLfl^xV(^cJ*m+)vVa(lyYonKh z*b^7x!Tk_*S%`;UfqH*Sh%xlPek@fO8IT=YI(*0?k>B&x6iud6@tA zphg_O7wuW_V1cf}OHk{18DdJ`hPW}N{NIIe!E+tFH;Qmij9o(ww+?(8==-s62=O9d zzYoVReH3PZG4BVS4*=eWfd3W1|C^A*-)bOiJO@_ zd&21dC1LD1B#eRI62>5|4L>c6T{s^t3FCo}3S%!!Y~Kfk@zATnc=!!r9Q+Gmydy4* zLq8J6qtn8e_@pr6KPil3=sU4Z7$@=j3}Bq!C5#KdEsRU2h4BRNUA`fV$!`cFRTReT z9bsIZ6-H){Fc!Zij2v*~aqZe=m@eQwh5n~^2;;pqVLXTHMbNSGXTm6*7l!k^y#-j5 zU)MLP2na}*fCG|(=PJ@lGq*!J1Xlx z?B*WIn($1qm3buMu5)Rbfp{MA!1hTd?e>pE;eArE-uC1AJC!T1h4)ErhkR zCrvo>RGmCk>6!1^xv-cxY7KmP=!H#Ov3_F&8^6t`q2y3@fC?-x%TaT7Pnv*`MIr0 zpmQk(x2hAy={c6O9!OLAHWJh<8(9Qt#!BCS!>?Ov4)ElbVgx@+Tps<*sY=pA#u)t4 z`}1vxYmlXW{U%tf(;9cnc3_xS-2QXw@|X!OaXI&iW+zcwY3>{BNJ`)+_b3i=>>N`H zCV^zV7nT%M@)X~pAx`8IUc0xlWJHl+HwKWX!5-O{bi?*Yq53zX%HeC@U|8Pob6w?9 zH47}T`RpQ_x-65f=^Hk1re@{#eM@asGx{Wv&D_|qG2vyHGA#GrgVR08DB^M7(E!Dp zIq*@F)ikZoAa^Q<`x_GhxjIun&ucVvbyo}q^U2N~TTh>m1l@02h z&e_DdI|t30wOsHlK5)kuJIp>>j}wyOsgty?=tJ?*eiH7HN1#4VVVHi_m_b>dL=8wqu?8QiE^OQ5H{ z#Y$;*+oOcVIpJM={i*<=!R?pY@rl6uNwX`cy1>C}@AuaI z%>?H>qASb%8aW(jSL?0N(W{r8LAk79qbH6b6Sg2*QS;Gz70iBIE2g4Rxn!%HWudkn zi-FGu*TUj(rCcx9!>YHZ4ylFPSSrje38)rP&iE30mvPHri)!6ikwuG}<=GFzgSuhc z?oRQDCE#u6>e;#N6w(9i92Vl8XBeq${4})@JyE6Q<*Zt}bq{Kq=Ly~<`h`Z7ioD4% zg?Z*zI!t~tRX=EH)Nr4P&wotW^;+fzXP-4Ldz!lCu_xZb`l0NPslM`_QIVCN{##Es zsHkr|Bddty?TN*I$m;!aOH~kt{rY%-bPwELy&CDCXLy4yWEgkI`Q6iuH9dTdgd@{n ztFIawCpss>9W$$h(vvinfkQ4L|2bP}Q%cT1f(?F$=t zGjGR31AFz?VFU#+Ifj8NGWGrJAG9u02*(|&{Cgj>K@xS31$xZWvKxgQO$s9CoeNs} zF0o*6%j>M@S%}saJf1anyEE4M($8b|Ap93?gGG6L1KRq`kTIgO{nwb~YhMN0Sb9`bMf89P; zsQ}`vW#CN6hQu(GJtHP9(nqsT@%UAPHG2m3oI`?1Iz%O*ru)(OF-PTh%tM(qTX9bP zGbw+uKGj6VBBsVbi17h#R@up<=DYAwoq+d9+ac2*7;n`!DSH+)%dTUD2RtfhHnFKa z*MiB&XLO9RpU^Xr^ewJ&^yqGlZ|fV+drFP)pg%SY0rz^!j#IDg8FUWGeldNLc*m5` zZgcRKbHdHedr`**8MBNANp)JKC+~T}>f#po`e=j#osa59d4G<~ob}3tkHu9CQ=5(O zwS1p$cw$$fp-}LyE#|H3_jGlVCeEJV**s$=!@zG{*dC6;4ye~uw;~I_e}rm`(o2; zLbje0#joncDD^6_$opluU8Nc0#kyyL^}Yu`a_4_&b<$8tiIZUyuUjUTcd3_MUR`I; zB9d`d0}T&<(dvOmyDaZr`w;gyGqcnb5x<#chf3>;u;M1LEi5qODwSVLIv-6O-@mW- z6fW*iD-qVfSE{X%$i< zbGN98mb%>@R>hQ|z^c^A3R44JvZ$g^-{e&i_*wa)ut8Z;ev2dfM+!~*?=OpWZ+Oc) z-ZCkgpwldOW=TP_k@cT9XPXrjE!hxgY;Jdsame zQNp4>`=IqjOsZp2#B5W){+4q*qSB%3;7!(&QMe$mWpA@h{QG1e!EKqA~> z&~U#_5BFPiJm-b83Cn6zUIK>cDbnXjV*SCru+~?cBoCHup1M`!(t3T~oa~>P3e^mP zq)RJ&AUH~nz>}X)rHL)s%fUIexu6T`n3Au;o!6Lov`*(GtfuT%wP|FodYYSQxYV0~ zRxK3?9SW~<;E@Wu$F;jA= z-9~dF6$mVYDCygVVT#~%2S&7NK~%@$@KOE(X9@G^7X(o zMT#Ubk_pl@?Oy$&;AX|WW#AA^t&P$TB|Eq#^%EB~7k!PfN1GH1&>WUI4@MUE&Xtqa zjl-Bag5fv*RpBQ455zn&PThRs3TZWtqUJd43uoaqUl~(GXtGbm_52WXQHDI2K9p&T zxRZL}Q>0n`X8mJP%PZlxMv|{t3-V4h)ap=dt3H%9tMXldu$)cbn;_{s)Oh z68w6u()`rRqfL2m!-!iAuV{M3VUa zrlje8Pf3g~gEdy->Z?3a#tN*#E#7g4(>1h-&2sjmpoyK-2@&t4eiGHGcABOlmz)p2 zE&7CsGr776ZYCEoN@MztC*OuZ9){-f?})74HZ8q8)@~S;VgAaU2I8WI(|D;o4Al+eNLf+KpsT*y2G3o4VR)n33CP+1>IS6o-cN@fURw3NHjQv zPfhbShIqc#^K_g0%0IV*%UByFpq~xqGFJ4%ZFX#QfjW$gutf9S~ye9T0Bwh zlh&T9YhfQ`Cp<6aYRhxWqjVbS_+S?LPX>u6jLyX~Sp&APe>i?qjka|wi`*3CvZjW~ z;rEk_`Y@Z9Q3Jp8kbX1Q+npnIM)ZVB`U`%b@6H$6ydjsceT^j_E~+v=sC3kOY%B@O zo6a4(Mzvqx^RMhaJV*NkkuKh~DUHZqN>_a{PJ^}6hfQk={PtDCu_t;x%4TNsjbU5J zfyJApgJw?+LX($ee)C`D^!LW5M7%~}kA5~z+6tdk*NR*pi*+b!LqHVu(alb`^-3&$Vc?Tq+_8Pev2JWr!W0RT*4*tb@Y_# z(+w;8_}RLE(9*9`IbLFQuCY5vD{0^A#rcX_N(wZsME7JkTNY>Nf}UF2la}~520b+= z^M?9Lp@(>HM&PeTn@T>3F8JK#^Gak+Z8Ljb`ZXK+?h|CUJmAgumIrN1AvSh2ZK9fM zn3>D>@0@4=4}!E6TV9wsFRt?5+(^6-E_9dUaMdHZ!|=Nq`#ADljQWdj#y-%UrcT+_4t?K0xO3L)DGF8F2U>}_FG2VRFo(J_+$^pLqfhrsdK%whkNQ|mJk)B? zy!bSq;NxWp{&Y~+J6T&|*X;hpNkZ)L8^te)$@iL-DGfbk?V$-<+v(OJ9@jg5P^)CS zn)#cX;(BjQt;{NxX#~*l8+38;?JG^%UVKO@Fg%#nMtr?#u7USuRPSYqP0+;I(B#yL zh};}}Vm4C$0pz8+GB(fhiSSa$@G4(mZI9x^H*tk=uSS~kGTR4CGm=b1be3cCzNcIH z>ba&$n>iy*Z#yZ}_HeEx!yhh$#BY$0qAlf^%j|A0kiM7NmJ5FglDYq$lKKbmgF_9T zsb>tKvIhDZP}Z}Qaq^RB%rDOZ5DT2V>3jHM9qCrZ<$Qxsj*yl-B8kDZGE+?B{OS~9 zUv<9<9K5Q_kIS5hm#8JsCg}udtrra@xywuvkhn?`A*4?{?IhkDrnHUQo*uhLH6FLA zdTYeAB{woZYCCV$@x5qX&JVd9Nh5(tiR_ zByy`-L9C2l?(IZtrJH*{G}mbmFwDe^H@o>LFF}rdv%!;noj>g?ZHlc_QlWLXaiJ1n0w;8sb`B;SB9zGFDx7KDp^>?;rfZ<)#y)n*(R(%sR}rMG2*6 zZ+GTfBg6Ilxjc@y>z8;;wZiYeXIqlv=(BRP`Fig0?uBFDN%;w991CeMXsZS5OEt&) zm(_BV<8~15ZtmuC*8!R0nK3#(S-o2=2@32D`3SZ6*s(8UUh(Ts^>$3;y6mX+b9~hm zq?LA*E+}Soh-J;*#3rG9Q}OG#wO+wo~s<*3?a*b^f=0|>nM3YEa$72^B^{ht>7U&c){0#wZTQ2m?u%T z9>1kipT!C8H^m7_=eS_?RuU$c9#?n}-s~O5_v-T|ZUU;T2$cGz=;i9S(=R7?QNW|~ zd$ZbnuZOKSA-%H3V%+Rc#<}M7t+H8cSja<=yiG!BnY_1??rk03;!5btH>q6aYCS5# zePnvnzW6~iGDFBYKOM~HunL^Z?R;WU-Dsnf0OHf{^n1H8VaMu_Dde0UHC<}Msmq;) zzsR>k&?($3XT5ZPrWU)IZ+r4%K=o>t<1Ba6UYHJNt;Mw9Lh)ev?YYzNajRvU4*py8 zaSv@dg$;A}IR)?3g;n-zbrg-DdcG)lcG-xU9kgVcF9Y44zHqH}61{jVN!hGCr^=`P9yO-I69-rI>9FT>`o{yRT;>%LwaX1>TTjsBdZc*cnXqNKo;j6j^J`d_%~VXYq4X5HKtFER#}-xY$HE4=om$IM zE=mdf2P_Kv6FxH1a|*{kZFS+$VxmhHdsnMp%N`AmoMR^)Fhw=loj47b&Rj2{8=+g% z&ZGuMf6312><#9b<-%=ZDS2^A9r-tQhP zp7)auoPL&KxMI5(b<=#D#GBdLesWWV#h2JP5#3|LN_rV9Sa}%=`xMbpO1eaR@6u<@ z9;H=q$HtTc%V$sy)CrvlBUyqpOD>C`vKkjFbXKyjHLu3oyBeTdyBd%`&`&VbD&JQ~ zTGKgkqcG}WDd3KSz7TIGhA!be6I)*=&P3r|N#Pv#%byHAvHm%6bZ_sOC_=}uwZ^kX z%I*q?j^<;g=I#ks1ldVJdgN@J@qW!Vw?%m7HrgyS-7fUzdCF$ zY0WG-e{7v|fTE{(^tlVe?}5v7O5kbigM`h#Fy&D=BEO$2#HomUyxX!wJ62kk9P$46 z4v7)8qA(d1kcUAd0MUXmHmztWIXb`T;=WEQ$S!Sv%j*#r?bk0j{+c?=A&xD3_=E4h1UkLh($5_%F5Dj zk|Jb^1>))HDXJb^mNyRCv=tO{tQ)!IW9zq*myi&Cdtdx*kNtC4-K_9!f6d!Cd+sH3 zGvFTo0q$yUE{YyaCsk}^_hgVrwhK>LAW1zfDojSwfvCe!2)ktcxk}ljywgm3+eNBr z$5`%lG_{`8?HD=={b9ijVfhXwTuGP)B$%RUf66gLAq^oaR3zY(GWa2Gs1!fd2AX+& zN5ydYJ>%smb7yQgYxFtqs1XAX2KntwI-~v>y&7AO1mYv3;o!S54mgdk$R8ekc1!kdxUmL{!6>PIimL0j?zK^Ju{S_S zBTd+p{C(mf^9a!UQf$2ZXXNSrp00yjrVOp)#+Td)!>UBxZX3m@=`YL+jarX!jM>Z) zUp;OvzRZa)iNu-QsJcn!7v0epo)x#zskxdxQe!Y>%&wr_D;J20^9^Yk=*o5XCp<}g zP0V6J>OIuHTNI!Rf20vpMz%W$E*H@lg5LMzp9sKgc)NdoWHIO-&bw0FUP=b5-WR5L z>a5;lo7}|t+AVu+nnoNXV8ff{;TKyxU-y7XD&tXwiGKBa`X1N8D*2e6xEMv#AU-vU zfS(+SWnApFRi>H^dcp+R6f*DK$|wqG6&rYY&N%5NQw@ptKV})^!E9n=`o&-R0td5k zhMR7(cd_g4AJGi2@x1W95SAne@2FIP~T%$;8+b zfASm@#iYHi3O2peGb+UFNMfDwS&scF4fT&~0*S1`M>0Jo+ne}qxr!qLv0W20uhcXm zvs7v|pU=XDj=B6u3A_ z`I}X20!AtBQ9{`Pz%gyyIxQ06l73bG>3Ur3@zWKm@Vz{_SE*K&Cgo^ZKhj&~zD?o7 z0i3sLS)(@_s*W>)XG4(<)u0U;_Y$@pCe1wURo)oY)RjVQ6^0}aPMXb93+IGA4EEUm z4Hbp*Hko=uo$O@WJvfrSuS0VzOVlEY?2h@X)k0qevFVf4IzbXgF2{VGh%yC7ag*efY~K_k~gVBZAu}Qa*y{JA}z4W1%Hc%u5MtK zY^73(`WbtTu(`z4CySbX6L52TRe8hdvT*tMMioH_OOpbB%D@97V5gpG?TX8G+DG5Z zbZf9GsH;?+2g*SwtwFt-Sn5J-_zCP)yjOxscw3Ji7g2wtV&y#PEGm>(K!%q0KQm|_ z;7p#5o3-POdndb~R8SBr-w>bjQZYrFlGmFrV|+e!d^5q0-JIJ1^2#D^Hbo;H+gu&W zh>2NU^}`NdcR6n2`D46RO7+<@H*q4BIKjd7RYrPN)-AP7gX2dSrUhyd-Y4gF?55nr z+k4i;vHh&pkA+PQhYL=22Jk!5^mN{)C=L&74$cNO>}UvBVsI$)-j17nES$i1yZYAj z*f@hycPwl~*uqeG%kp;O@%64{wv+~ILq*GiH4FAZ6*WQ1>LL(?pmoPvCAGcF&BDgP zIyE#I({DhEuIf61D*u}X6Te-~jgc*N-B8XrWu=0xG0Efs$;6$<*f=@{va+8i#z3Ep zxy^6ib}4!mf5%9&bJlIY826YWku@n+9281UzZsWuUrSNPv9r+I)%d>gX6xZX&C}<| zINn$4+G^@&pZVEH1Fwm{fxc858{E)kcXhS6$B)GuH=Aa`ozR?^iE-l0m!_vsP|ciL z6l9l}#c5`wv_-b*<{}QeQC7}+T}Ym?Ha>+(yt;@rsa5XgAX)M{zCuJk6Fk52EslWvlr85UQ=|QUQUK z_L23^wNRhfb&{zJd5$lXZ^I%hX+ru8#`g*;F&v^xw^TS8{1!T zjwUvEcrZbFF#Q!L1m=ed{41INPqL^ekA}CCIXw^B(ZLOmN8R1T?bpYvL_WMO3=18bF;bvbS3-$5Au)BkmjzYF4j(NjxO{tq2D@DGk0}#ce#=p z0*3rf(s0ytum&_`P7i}!r2r8BHKtd!uEz9V8oV03|7!O4&?p((1H-E1=;nxUv~zSp z**n@;A`>{xS88)T`>q_CmC~V zORK9&LO|1Y#+I)1{J;D7yJ`G8)GO@&Kve)v&v3H>B;@@qA==u`&D;gBJUe4IbENr| ztU%3w?AI&(!RVmPGcfVBWuHvOo=?UQn>UU0QnOXd*%A|9uA5lY_|qUFZ!WdSE<7Iz zjD3-Uo076V_7*Cqm-;waw#Leuhk`2oRToYkEumTrG?zZ8`Tk{BFTbpTbJGxI5Bij> zh&}aj~S{H8l0qZHw(!tQ6e@d$JeBhu^P5zP_~ii?jb$?UlNDVc>t6 z3k1yfmqCF3zZwKSC@(}4tRe$hW?$z8_-Q^tFrO-Tgzp*#mARFbLyo1Ll@%`82-bZl ze=S&DW@ux~lkW>u!>MlzZyn>B*Z>jUUvXabeuYy2_HQux{{mCsKM7Oq56p3*TYrUl z)%*W|`EOI_zfAfcKmLC(>Hm+~)cON+jtKv+F#pU4|4o~J@w{I%G%yAKXJD%Sfw@9N z@Hd#hdjDUw3Avi?t`dQ{?2k5q3H#Sd@t=XI`3L4U5#e89UiJPzVE)C0ApcPpQvU<< zfQaa?F#qO4kiWPPP>sqTnBR#={tEMNE(H0D z3-SIF#r#KXv*ypdDUL}*`Zt)rdjDT-llLz!#QPt0A?P1QLkg!vB7epC$BF(M&c8Sj?|;;Zpnn!3g-asQzvBGkMgI-wU%ZI-Kj}qK z=%1BH@dlCDUvd6%qkqQ<{bLOOHpN4)Y~k-K5#B!=5*=j|8*|ft-;>DN8(W(H6OPkE z_yq8H{s~MWSAnUNwVSJoxeLP4-pSG7Dy#+4enr0OPR6D{B#boour@W9b}{z;_bBtz zJe;5dOpGa64SC**OJIuU9{_n#GGWO*IG&_cje{=v?qGX-V`sj2f&Pm&=YZ%rziH8G z+;{58&=~4mKav=WF?lM;INBEE{9#vhU5F>oBp>wu;qT|V*ZYT&fonsmu7ZP6rM)rY zebvumo|L14?D|xzCi(-v9CIALHLIEGc^@-yv?0h7dyK7BOZr#m`=#5fNdf}nyBee` z77xPvm&pv+&;1`B1$`b_2Qzaob2EB?Lm;G#T>)0$m(f0;2j*K*^shew6r7(=N)Rpu zfkFh(Z~=fvNCDB)KU5Ho;zJ7v!O(m{|4=xbmk;)v7lKL&LXj|t6j}fb2R4O3D_{g# z2!Q}2VQ_vV7{x0kg_c6Y&@dD~3W)?7LGz@H$K{Ge=mOB2qMjSdL9Dd%1Ar7QszR=^aBWAuG-whBa?~ z==NWTcfj{`pYqII9KP#L%Ush*U8SPyFj#APLo9t=OahWguNM_m@Fd){sg)}DL#yhw zH6cP(MOjNBDcwl%?&Lc;n{1VCi#XkOp^3Sja};#(rq^J2Mm0#n^jsu6C)$^Amu+AA zx`;5PX}$KQ5v}hOb7oY>^EQ$5$_nk(`V*=bvmz8BB9s=_eI_s3i@$gIyupbgyn7=w zxMQBMZ}g(a5_%F+O{*)-4=Q~}8=D)kxA`(xNeRDC)k^7$cCUzDAQK%XOxo5-CaQbC zd?4G!&6hAEx5QQEmX5Lnp3{P%?u+I}Vlk8zGpeDvchnz-aFyob^e|fQ-x^)L3GY_* zW72yLrHv8LeUhx|(#bWXjP}cYMCkI#q^9#I=a1cuU|K({n|NP)v4mYR|?ZSVTVbP#^| zDlvB`Oslfp+qHWj|D7``t`$BMQTpI{>xyp#;p@20Q4OpVFjZ74Js)hpC)IIL_? zfWq~$eJ6Z~`K4eR{g$Di4UVh9Wz}_TAIS@qwABHVj~*Acin2r6D+`y7-zkgUJILI??R9xIKB9XdcbM*hLNu$ zy`~h#`g%}F4bWD7;3v+>SE!sYF(IHKKcnCd3gW_*9tHDp$?a|1*NYEUAI(^F;_G$@ zgf46CgnA=8OUGim^I~#sKQH2H^*^(|=uwV;(BtuL14%azr~W=-TrlUQ!VkRam1NasB~4H8yhkf=yUn=CAT;xLaJL z5Xng}XqB5yfynr4D}E>wsPMY;vm1Q$Lr(PAoz#SHHyswNr)5Ay`zNj5(U2B~%iEEx z1HgAGh_N*twa_ky-zDfdm_`(tKX-^P!#lrQkI-Q2F^X#3_;Q1mr0lwG$s`?t5Xsh- zo)=>izY&rVN{{3m<`A#y?APwJ#_tz2M??URvZEbN5_-xoofFVZRZ#H?@+~B97nk&t z8iS^ewq%kJEvLBsOqP-yMbf28Gbxmeo1$Js*u@8jV@gTSI9+PPs$%~pT+!lCtuq!g zTy{uY7bdASe(-m6ZJp@;lOQdh#(AgMSt^fFd7PkLMQ|R2Hen=;{BD*_lLre zXed+)0hU7XqY+5Bpdbn<1mhRvMGC<91d&LjkdzbzB`5{?9aa51l|o!q5t2fJ(J(%+ z6c8H;z>&N#gdiNK1-}ZQU=Se)z$1V*fp&hU|84;#h~`J5AZR!cKM6t*{AeLwA-DjV zj}IXQgjoPK05dNXNP+SJ!50d~3x^|+XhEr~mZ1Vt{Ad9_0VybwmtPPeCH>5C1KTAo>cA5brO_4^X6#5I|9Y6i6Yo&=pQJ49JCn z1yFzn1YtlK7z73bC?FX?`CveKfCt)vLE%>=`GJTK5dC)%dExv3HUS_Pg1RaLMWF%v082pyAOKpw0Wb;$5dxaz|HY$$)}UxGQ~(b21*8DI0J*@p1B1bf7Jx!vC=`?r z&@x~xyuWgx0!TD3pcFJ(5KspMX!AfpB0Q}!lz=Qw;0m}0N>2M)|tCj^3Xc!dORUrP9feQk=0tld3 zprnwXAkf!uxd1T$Z2z<)c-6a*pa767BzPr}pdb{Wze@5734xJlAO(;S=w0wid4gax zKNJQ7^amA!16BeN5I_Uo4H!AF#SxG~NFbS4<-<7e_VuJofB3o%HGFM3 z@SVmS{lP0XtUij}*K+{-+VWNLc-HdiPZmh+xh=*yD}cbn01A4ai( zl~~&j?T1f!J5wFaI=@QTVIrZy#PF!?P&V3)I5(?t3*5>dAykidaRhzd7wX8}lUj4? zYG}FK{ytlCCXHJegAtnW;HUU#*q`2&|>2rHD48v?n%Q(_L*vi98f z(vE-Y+9(#qMKUxJx*k6dS42ASoR@P`cZGFJM*(h4C0oW8n&t2@v-YH%S7Br&_>npO}p?>mCg6#dl&#xhppCfTtBZK0!BF3q2X}__m{yv^{ zXlY??Zn?F-Zf0p|{^LTT-`r~kczXZFbz8QO<%3h-w! zt4t^d2g4^%o?O373W?2^(%M5aO@(zVe@2G9a)MJ)7xwn^uyJxOw9r1ee+^eM5z2I) zkQ2e8(ZzzG(#>MKCPl(gL4J+d_I^j>*hIx(0~cpkREEf7V(k0j9-r6?=4wkq>1R{! zw11G+N@f#fxLwpf)9mw=4u|R8HS(@57MA?{d=?g#E}Xs)$;*e&`gBZ1!$THH3NyBQ z{lSu|YI<5)T84!0;z==Y9K8x@=t?6DnJ#0+RZ0?JjLje=>x;Q*oR#zTEygW2On=EL zzH#*q;hV{XA&+A6w98 zvLnh@578nINMd4Qj+7pvwH%%pGu0Io)DaRZDk?H(OKM2>cG((m>;^H@{iw0z*&y2s zrNHfyW@Adnj7)#qp2O(&@x%1UgaQ^R4kj&XT_!BBqgu=~0YV7Dn~z?ZX}Z0?V8jL@ zeEh|$oJm;8`CdVRC1Y-VUNF7?W@6%0BIPq9`uLl#=b>(wc0MA;RqmnBJNky6`H+Dy zkH&5sUeMm}lMOQqlW$vLW1G`dqbw|t)YIh`w59F)w)l{nix6_t;fWxv{KK`CYs>zU z%S5<4)-4m{dCX@{=r=cVbJ(wiX}qabudS1$cb`c5bk?9t-NJkxCg7j^DNpo;)f&^N z9s27z-`Kcskt&J!ww$3)wCNmN<$*U3r_lV>>6Ch8J$nYA#~Qq^A?S!f^6l1xq8wdHt!=5<(CZ}31X zGQpN;k0kTEc~fIkQ$&Blu0XZ$m)l)lhv#xlRvE#gqaVf=TD!^TV!P%sL|m22gG^87 zY9FER8gQ?ebd_njbqSm7`U$`1zF(2B<|GrTs zS}_;p#RVE6#X$@c+mn=_I$q3wdyc=R`}9%NMZ<4Q$8sT`{oN9su@MudZCyDn1gUGd6O&U~ny368WAcm_7c(0P zd~+g%J(zZDPPBKa#ErXWgn9EqG;#v@w%^MJ-7c#eLLXMhKhi`!G#C6?huyZlZQzs4 zxN{5IAE6a?gI27d#N5nGW7y-4Y}OhhT!QL}>B%=(G^td9j>gXs2qq?0skBC1NgEcT{l&GJd82@R!!`kLw&A>J96+0ZE8i|%11 zobx51MblXT;K@t>){dh=*$G&+rj zX4t7G|HMXnHOHdOdA9z|PhN3u47d#IA_i{g)M(lLDx*^vjV6;%-loj8#wo4mQ5;*` z4}{CRMy7o-k?z%Aa zxCfe^f2^OQ9?lefOS@J|l94TmPl#@_adWHNqgqg90tpr6U?cKF$4h;zWdREV5@ z+Kucb4h&?Y{p1T?ysr3eM)vhvyH~54iiGjZv!B+G@X)1GI1oW{j} zhA>foydxTmfnZiN(HR6~5K7+-ks&m1$XeTP{;`hS$HCq@jgrN!LcN`^6ez2UfwmLQ zbki3D$G1?wn0H;SKaiIVZ)ydd^Yu3Lh2aV?UUP0-ja7SWP5tBtX_5!l^t=p)6V4&@ zz4ydTn}Rd1=(VB6n?&cnMSbeG)^T=ewdsiosoP=g+5x3$xiX*QuYnY&1myPel|SwZ z(N!3NMfXo$a(5^y_S;$){Hl!boWQ>>9w!(_A%^6 zaDwk$Y8q>{H+6jBkCRurMjvwa*iAyDpXYoGD10`UW+%e$%ocr{yU5DOp1HfkNm^Qe zfLKAs)@W(_TRmxrFkL&uZnNG$ngerGNP*?v&A3fU6h;aNwlLLrFe_`M0#eg=5~Y0k z?k%i8DdK~(e$Y0^#?#5f`V(8AT6X$mDzpf5ChSl_G3)ti>m=iwAdsm=)RJas8-pyT zlyT4WJ!cPlYY7Z|mDVuT=ZJYq@q+Wy;|s?(C#B&ALBX*R?R}E*s47DI)gA2VRP&53-64zspckE_D(a6NtHt`8S(q1s7kAcbY9(!jH}=p)KeAl zZ<4_V4Hh?Iq+-~LQC1b_ozda<6F|M-^d512Oq{w+>_E}lz>&O>V^y}AfcpHrcxZ1? z=DIU|V1e6F!$RV+b@Q4hwadJH9qyQU{&5w@jkdi`;^gLt41t9rE<7l$to` zW6sZa;%M-EEJ?ZW1Je=X?19QRBM`4CJF0^2glxUwkCq?KF({`Sot^XjG;k}zi#*(p z0pA8a>r}y@xfVT_^N`!=-A@n$(KX&4GMJ}@i_3Wt$1Y8J;gDVrg8XhokUoyOO1rK9al-Bl$ZG_8m1A!Vi?+?a2vy z2b1t!v~Q_0TMp0Jb1+hV$o&YS4fI6a32_!Rl5}7vc9-#Dre}~VY*19=+F~uYqLKqu ztAV0Fs;Uj^%~i(5{5XNYY-?L-<13#+n+3v{?Ewj4gdnIc3O97_ zj%Gmoi9nRlDSw}K5_9kvxgLiLsQY%0*WeAzkY`_mr5WWvVyN!j*9P9H<}i^N6o6<2 zCiQei)hW?ZXM)c*xjhhN$R2fV+mtd6Ugm)_=q7frSI*>#a_;>I`}U3P|y= z?yF~0l?k?Hecz9_rZRTJvbBAI7sDbN-^0+;;rsK*b@u@|yTY#wm2-}33}Hyz+NYp; zqNQh1_3DiHTpg?5OkeLEFRi8+u|<-$J1@W3;(7QXPc+l7ofuuwa~^oNaaW8ID&xf_ z=^bK8pn4C#GdA~WD{~|`BoOha=BZ{)2;1!iS=qj~v9Y9NWaiH=i1Z4px089*pUuhC z)@l+l;HqL%?yub(L*?g1qjf$om>3&hm)a9lPhOPeCSX*hD=^M~HGcc$3vjy2wjwp5eoE0Q4?Exa`=rDa{(8F_wLf%pbJ~I*3+^6yW;42fh z1S&B${aX*%<3=nP{+PIfCLsQ+NL9AWVbaIfoSkMW><7ths+M^-kM6(0kVH=9U2F(u=No6)# z6r}^EJ6hg{uu|91>Fn*oj+`kpUfFw)jSCBWI}*+*`Y!e)jF-+EIwaCH6DkHPNP@DM3{yQ7t<1 zeGkpEU(I&J?>6KIRO^L3G-g-?K@!-{own_p` zrA$u8zAeQ_oIy&BS~@aBIUaOu^*mVlMg^`-MX)B)t~B$EH@8^xPMO3|Qo} z)7vPzF?eHe=4&)T-}q-SN2DDadXBRz!|x!MH}ee!o0L0}?|{UZok!gQlY*A{`1LX* zR#YMSC`YFgZxq+(mTj?C$G1kBCm#cFxD`U4U_OYtEV1YgHJ%P-_Ni1T5n>X`uq}*k zoZ${uUM)C?8x_yVZAo^y?ybS|Bm*hIfp0qu{ems}Eog@U@3oWyuH3=tyxs){8t2j0 zv(}=1kvNOheQ9LHC!*P{ zbSXP~oAd=~7Ws|@4YPo2j$hX+f+eXS9bwlKGjQJ0n~gx1($Uj~fN8yoYDptyMa+FNQ1 zWj7KIMa}enV94crMaa=Polve4_an?Vp1f_3C9q+=wOh&hE}%{J;q}M(o1jn}j=Kqd z;*_`3#pCKR><$bHa(ZZ5NbjL1#&j5CnV3mW#d(0L$zu&sPh4??eLsu_LjLF44#Le7_EDbM^>p zFlNpPYb+-<+JoX6tdnj}3U(hx17FrTj|OvA8hl_bJb$>mM{?eZXAXa;8A9uI z_Dw-*YHYi{g{oe#o_sEg{PHxYMEk@lgL4))3azUvmHVVaIph@vX`jV+$^ad?+|-*- zLtCZ%HhU7PCDsNVzHT1K(bZ+#lxb||^##p7woC}ybHV#uu!9L_SoX7tc#Xs=u{^f=ZG#|CePDE`Udf$v8OUiy`rssHAla7Xc@@^UYQ#d8v z?PfQNFE3gZQ*1G@zwi=CZ}=E>+41(DK6WzC;qx|Xgo>>e&(x5o^djk!xvf=6_UT?I zT+pZ1rT2^w`KS8T5r9+c3Og3IAR@$Nem*q{NmFm*{l6S%O>1+1xl?wN2>+lA{C_d` z9Z*p;>$YSNkPH%r3`%AqGeeR|1POv9k*?n*gjgG zRnMv1+Xp@SaO1(kXZ(zzl&goKUt~wp)j&@8(+GzE?AB18z^M3o%<>nWgsf)UUc28`dJUFwHYNr>N0kx;h&q8`c~an!}+>moZ1F1z}oF< zHt`^BVsawy#@Ps8%iJ;L8NWrOiTt?QXw(wBN|V4u`174wHPM8nH(te_mpS-Sm}<*9 zyyrb!f;FO_)OFgV_{az);ESp;aMujd;q3Ct>=JeI+2a>VK7$>CO_M9#C^ zflla>OPj#1c6mzS`&%{UN}TJ(^p_NY1IFLFBY!Q`nfCP^2E&j3b4R#`bqXZ!)Fl&g zpm(;fk3?j+o^%^&`F48u`9)(LONjm507X{(ZI?pffjx)VPjQO!dd1>*v!leyDjh@u z%R3W)OoSJEB(Xj<%*y_DG=e$iMfX^JxmqE|YxG$5?opa6PVo*YQQ2*u(mF^=ZC-I% zhZ3O2%teZZrz5yR3j>=b)Rq`oT}^kHzuf-8HpzAUXiJ0jeFm;~QTm)oKU!eUOZ#E9 zB(e9ov0rDUgTA$jnS|*c(+V}4d4EBZoi*Tx_Jry8@-wr<414aa8q~>qQSQTJ0p@## zZoU2@nbL=*S~m|ZTn&-Ef940Jo5S9RNWu1Jtl|p!fBP=+n1Oi}>{}(A73C>MjodAQP|4RSdOPv6P0m@ z|7EXVrAV-(3qWxXQYZq4RR^zSf1mzq5C6HBItpw91ofXe|GfoubvzRKyXSw^M8f}Z zF28aP`lIl(HPD}*r2w9VLILVa1nIBd0>l(-AEb!C@(Dld{HpoKS%5kRd;Mw|Agn*z z0j>S&oBFSuUwi#7{YU-3>ipW5fFb>(oqzW8ukk0~;RHCEgav~JC!!H>I3AoS30xht z0vZm$K|tjLHF0PtQk{UuLa_kO1kf6u2!KBXfYTIUPy!Bseke2^34;;QBoMIz>L9^| zA_4doio+mLP|z@F9}f6|NH`qiAVF1(0ul)&5lJ}E09pZ*B0&KR4!DCz1vm~1&^9;{ zbFecG938-^01^fWw>lOS0|XAC4hPsL3e;3rz@o4O3=D~YA&Dq7z%YNEI{}M^1IQ4H zAOS%1=X@X$Fo2B+t^yLOj#p3sFe)C4At6Eg1R`h<45$J??TL5=0LcElM(TLP!4)T> zPzZq21JDrE#J~{%mj#0XK;WOiBIrN(=V16iKLG#>3SdYuhruYJ6#&SNzyKyC_y>*# z%m4%mj)&oJ0DcE;fSLdXM-mkPY!5rY!@=AJ3`!J=gaZ44V}a2HZKB{LG!_R&7Vs+p z2nzB6ru(~x1U$ez!P%g|zBq-0J{LT3j8X+>|t#gt*a&u1@g~ zNDEzwkN}iNjm3y)&?g+q7%wM=VWc9zz%n?->bF1opw80A)Tfr@dv$Y{Z!Bk>dE<@J z-P-pHyAL-M8Tqxek1u}_+&yksNd4W2N6*y$yufjz7^}2g>9M6+msV({mnUM2DO_Yf zW5Ot{HN4~S9rnmzj{$i}-K+LY3mAJWtK!;@BXu|lfK=NvMdUoKmUkM$p&F09zv|S~ z-yYy68f&5Y&6U~>o*8Q((b0BZ@m`Y-y7ts>dHf)6bRHvo8LvK|DTue_w#j%K`BJ*1 zG zAdk?LHvYZ}pIMxy)$bf6b#KkF%+el#jGbWeO1x!c@HJ2+b|wbnDMf4b6@QMub?g)s zbK0F4BTI%Ehi4_KmRAMbYoaqkn4E6l{h@KTRNlwyUSc0Q%Fz)*Yr58``Nh+$Pp3%* zXHq^g_S$2dUG#Y#Jb3J8YX=M>6~s5=@cOJfzq`e|35^-k+kw6Poe6eST@=AhFVwd( zudH*A=~^u=(`qI}1%?ylims-;jgb?R?ks!SgnhWYPNCt{FrRtU#o&Qf$biJfu!h8a z3GFpjwnt}mk5upL+Aj}YiQAL@!TQ;;)8O=cdg^nv+S6s&ZzjGvW|y8Ds}7CSrR+0J zc9xs&%lMqHlIGMPT2()JQXld%}Ttt6WuC&)u0roz1n`M*D$olJ#$9Ie0 z#&JM?TqCU6%)Qpt3UUh4<-Yf%or`^n1JcNF$98Z(+Q((u;D!KlrX30e(V) zGg7{#YtH`jHzXhFL0HGu@KP3MrIfJNiOW{W)mVFbXS8q1Tb};Zau?s7z;NRQoaEE> z5Xu|gSfkRsFoX6VEQuHn?jfc6nzz?NnW$+l6&GpnJT?i1u(wWSv|0Pmn{q1^pOgA- zeT?ZCE;I_td6svI&JmjECDoc*`C!yLf>>PX_JUST;P9!-NE*A!6<+#OZ=c?ygRT>4 zcXcBmRn6Y|Ym03Ylo2x@uDukm5_%!_=L$yz8d4NLKU8cA9F%qwA>Rt+i!kO|y?poJ;i+>44rozNz1kQ~I4Y-`2tX zPhV#NM>P+Ee#q zYD_6Zxt}5w+r5TPy7au?IbZN@)~d8Y^7-AUGn?Ukb+$7zGwffuI~w|TU2dB29z$)b zf4zNicy+})OL=`S^o3UUW}=sl3h!k`T~Dy~wD{BRty3Cc*?Se*PYkm4es_uwb$n%4 zRl6gg5`gs0eKV8E7jx%W_j=#pl_KM398;&NKa5|E!9qJ3Te-9GLRD1-Usn-xcDVa( zr0OpC`t$es3$I@f3b7+vn4c2W?N zD=#Q{NvSRn7j4jjQ~Qbu!W<{5Y~gJWtF+@ip6sl}pOf)wo5yrw5=L%*yJVASnaVLI zJjTDP*y}U_FM@Y;PLD#ix~T;3Y;Cm(!HTr2IU3{B-{7gw^=xK%>6}z$brlw>dN#~I zaBt%YSM9xE`bY1~Ir6#7)Q^PY{DF9y5TwlB&4T$1?<8{Rk(05{XH$>a%G!?!B#ICW zv06umB{XCH>)ZlspFV=R=t~_J<2Rp(0> zuWG25j4cy|NQiH?dpCpEcSR-bQ_8Et!_pTT+ef|(yfj!%Du}x&+KVOX2vagSia31W2CEa zn7{epLa(@4I(xL(LA7kp?jFXS4c(9N4k0A%*tcg3l@@nK=J^-ZdPEH67SqFD zh>%LLLu9zjX6`|uWSDEbBoiLrUQZp(&GlIPS}Ow$Z;__-AfyF0bhMtF`$DT|J0F=? zH#zTDQFEk8;Jmaovty`4WiU3v(twfc>GkssS&-a7mg^1bnHLU|`7w5v@&vxQMDAWA zU!{3dI>Yvd?2OrEsZgs>9X-_?EBgpOyTM9jA*u++Cr219tpyP@0^kw( z5^*h_rvn}I+<tR&oc=VA@ zleMNCmU^}jh`e~x_=X_2oXx6i>g@*`ycg#(H(nGZrX(XhXun`*{KOPjA zyDxk4D}z{)Yg+UBsDPbad5oOs`DvO(hI>_RaSj8lM3X9?)<8?+Lp~?{DoO(88~HlW zEIuWhL!%=j3v+RwO6l5E)mORS1}z&ggeM)>iN8Y2ILHz&!*=M^jwj%_TWwoE}YB|$u)5i9aaI!uw* zKg@@`;XiHK{ZS!hQjCw6es@>sZtS&-PwqC=Og9Bv%GKxl%&~K`NNXKSqIn=YP`S#t z))tRllQS;#sq8BcRZNhN7NfgyqbE#=C#hY_>*4lF+NsKqR$~tD1`^)9eY^DG%JS&} z=m#S6oFNSZ~gpa+@RqFDJU#G+r-=G@h>!FF!G7BA8-)m`r+Dkd3S%Omfyt&yD@ zQK%T}UV1J5NUorCRyFHbtV5Eix2?+X@N)f1+6fo*)^dh2JayDM+M8f%wmj%Ic(HO_ z8OiAxXga6Fs;k<1C`bI%IkQ=ryC=C6HmU7bjv3{1$oEvnS;Gy?=0b%XWj%(Up7TBV zfzwEPHc6J1Nl2nt-a7t*jb_wp>S$Akr_nAwgu}?QJclPB(aT{y48D_I$RpNojqpSH z?@4{ow1slhnPJ*!SYf!PQb~w8FHIhbe)H?DjV+o%dFb zc7kGhXM-0T&xAr=9yXug61%UIeBo^(ftO2;v`s!YTbq><^v>^x{AbG=W&NMp1%CyJ z{Ugrqr(@(G!UO?0u>ZtkP=6Do3w##;OYoSix{IwK!~_+hK1n8tq`1zQr@*h#N9SbW zOckF;&B*eBLLfMm!Bn6r{5B@$>a;G{H-3bF|u7k#kXRhoE0&Hui36jc}o{k;5WnM9AsQlo-?c8 zKBLKg5oeXOV$OBEn&M0P@h-_?ktGu$ly=w?0e^m)cC;GT^c76fhJ$Et& zB^;6CLnj@h3VXS_U0=4AJ9t}miFHIpe`nF*9aA(ZQu>r-Cdj03U2ts5S` zm&~p(n<{geaa{eA#$rbg5avUwP^@*R7?m;Z-ZTO%zL0tMUMxl7oR~R>f;9P@ObeLhSeK8bBgrkfl%g`sMY43oq{kGvtuk% zn`$Q#6LV};cs1QlhANbQ;gi~7m%Bf!&D?v$a4(tr1q1tOqcdgdX~h9yCnTTIzC%1L zF4@Pw@tVLRf~K2TqU%MDs+g%Z`3H>hU;mi<@YY12D2uaNJUK6fXS%HDYGOjE^;BM& zFuX7HtD)ytNAUsLo6c?KgqOis8Li0F3Oinp3!Uyq&ucu3Qz1WL)bp@^;W#Q}iVEaPfsR^e*b(1(A>h@}%7mFX%G%wYK-rLEANLPT*)FhwR`O28TbCLf1 z%^v)`(SHWlB7R4o{DHQj{^KFe|K39iWR(7ju2olnAGo7%a10!Hl;9wA_WvqH0jfT5 z`TS8I4_ZK~li=8Ywt!Mc0Us6!%LQ#>LDT~95P=Yq1HTm!97~<3PEuDVAxXe91ql6M z8#r7+ia;YkO$EYF{}BkS0AT=Fz^+$E!I1<|Qym9Vbts4mfP**`G)x_^|B3%SC8z_H zD6m*E8jdFr5J(sb0V81!*!gG-l!R5s!|`wsK@6gT;ZPz7G69}Ag#)h|RDpoQf^8Cr zmmnda2;e?M12-TPgGPYp1-Jqh)c;lIj}&$gU!zV?2Z6{~5H11w^D8z6ob^Hc0*Lz{ z0DmPBO;i9*Fc6mVYs^7Z2ti$eq(A~)RRFOkz}JUTfF2Yh5hxT0tRNuOF;FCM2!i&2 zTM@){z=;Up(^SAhfe(?0Q9xl(z`KdUVnNssaK1qg+>Hlc903oaGcX_+01t)|4T3>{ z|Cj^No^&m7)+JSb=~7eFjccG!%^l9ziUK)qrjSdzxMjW5BT$8_^*)(S&qOD$PyuJ!9HMKxKdlhiNe{8 ziJTJlaBu&3`B?JJrMs&0oy}Lw#^uj-ciX-hd4n2Lv9tV6gO^!X=X550_?>-* zu)e`=%D8u-H(v}Z72eFsWM#={*<$zdBZH}kx8oSQ2crz|TjMMWFBjp+DNzo!t(k&+ zI@;TLr|Ayoh*Yy=*iebRZVVE3I3Jak6EuXT>7PxMxHI-LTrfP+W@vMA4?@yBN>eNp z0Chllph^Uy+ifF%gaP(2Wj^;kdkN;N-Ir{|3~$p$C)Ja_q0Y)!S35}PwWYGsElH^uYYo2_?T@j9<9W|EuH zvL9^?@GS`sN^Yk1R9et8^%h>r_B4OWWko-=9ghuuB>S0XMhh?5<{kRROuK9+$!Vs13=u4C`!JNa>*EM!6WO#TNAicBN z_|)&zJ~9@5KYl`s*KR~qY2M0wWY%U%!NrgBhOXGD7F*9@`T^fC4OqZ_!jo#>`*K>6 zQO5R=l87R5_1NN)qtdtOAPxrNYC`toHY6kc826C$5u^ zHgj&JgoH>$ujnM4oQ?&eh>KVPeZ7Ot`Q;j@`3J($`!I=3|DsEt5l8 zG##H=JigzI7L;?ujltX-`+-u2iqzYaL#H<#-!nHL;`9~E5Nn=rP0Zc_V2J~~Ie>JnA%qy6D*TPZhcjyGaQ z@SEvO?~!doHXKH|4i}wK(UX+SY8xNst#W^~(%P@UsIfz%6qi9vcMJV7c+xUQ!J!b3 z5V+3wx^q(e5J<|2%sUn{qz7h<=T_-zM7wNR5})ZZawSmqZkDu3n%?a@MOj7rRh!?x zl?7{}cNrpxgCd8X=WUxj)u)bpApA%p)nk?zQ?+$InR@o?Ot|jGCsZ!p&C zlj?YQoqFclrOj6!=Zj~%rZ^?<-hW@YGEJC=+CfZJVz#;vJI5qD$W&9`2{bTRywCz*MLod{PXd1A%ifpPHhX82-+TLwF*)29$|rRHTD|@F*men5>{G* z>7`aW@(ge`QX>=Y=W7=ZYxtDkl6_KtM-tXIqUs++Ue-(F^3FP|exULDIGNNVrES!z z5C8C|{7lMqi_mx2p`Kv9sHDQxjKE#mQ^;P&Oc}PvkHgQMOq~mLP8psv|MZSi?~IX{ zj%=s3@nfbF+N?#-?f2PauU>n@{FS0$3-Z`^nQ`Wxp}u01g9Ac6%h)TAiK<>Rzuv@H z2$jvLoqqY_a{g2PPBjfaGn*KP8^w7P6$r2Q)R4A@2mD)dizsu3I;+VyuS-OPoDyrJ zHXoS|`-WxJtmofGTR?4U=3peJ&N|tC;XDVwvIpF(Y=O+^%kB(@R>N$Ec|OC>-rH=T zf@RZddwX1Wow~wCDNgh7jHi;m`lF-N-$qH?;zkCpWG`Z++lP<}A#g+rG4_SYI+r!Z z9LC_nm*mgisjNR$<;l3%Sr z>Ad$?e!Vq!6XczY<2? zPr?mV@dJ+gH4)tD5cQFUwD&E9hzYFj&QO(d7)MRtE_0;2SR|!Zo3iF7v%@y^3$Vba zp)n&TxYXFRtZ8E<30p&+tskzQjy|3$dMz=Z-ABcL>eKln6zZmrTk{g#2Mq&G#Ry1N zGe}C_lbm#rM!X9l{m2}A8S6e|=qu8$d;YxMH*!7+X`>nC$h7nvXK&UQ-NKfQi)M!s zIi)s7OK*I1 zFoh)Q(+`m|hUF_>&D>O+Jo3ui_9=pck>WO{EjPZTgGtfM7r_w=OSc_ZvcT!+!@J&G z&bYZw#{C`3C__k4w@s_;kCI!WGdmx`Y<537xKYv_&R!iD&AY1nEcNCXPO_b5XNa(3 zKfjRJsLHc=IU#F%y$M@^T03v*_dtg6^H$;0y++!BmLMI8_2q@G!VhGEsG3Bo??M-- zavjYxM?R}Wwbm8PB%kv-{>otru=5 zmP-hoO>j10=u{ZAG(F+Y@58=0HE|uXXOPO@@$yT?+)&A!Al)64QPxg=*8;uW-PSIX zQSCl=i;bgEX3&NEliW))FMQ5CsNq|$s$0rMlshKFfo z%?j%@ZdUC(I8S%0K(-B6HtX)*bYlTC`_vxOB8}yad`*DtGGZpL+4ky3g?a@BQ!-(` zGHoH|I+aXLKl8i>{esMlz1)rX@wjrkjaEf-bKQc|b;i{7ZFBQVOv`*gb%bQNrmEemE#4jlYH27-z7M_$qbqq4~CN+6T=#;ob z4urk*)Gv3|x3yl?dsmx1B){qAr zbr08mOibNzIBUVAmvrd)*taWBE}cuVhNL_X!RPBsaL|Y2^Odha-ksTL{9^aGbS`j|L8Jty80FR;I|YX+1^g+4$3W-1|8N-iwWzcxciRXCE$quh`!%g71iLBi}KYE z`>BxiJ}Ezl%7Vizw|N&oOXsP2QGGuu(Utpqdo!+*Oh;pqk+y-?r_7!x(pe;Skdk2i zVd+X#8jDxQpEjFG`cf^Cgt%YbvV7^8FqL?Qf<4T`N7`RjzSINqg?a-~RES<@y zyCQRzSxr^*+=^H-em?$SnXuy_+QN)f0j)Br)Rf^?^Vi%o1UL)AttQ>AF2Y=>R;9R= zX!s*3N20#2K)yN%FDjWpX+k+e8Yu^hz2vy>v#lz!HK)9~or4zBkb<+*WQHE8% zZ${hV;-4yhyoqs1z!l%bSUodIvVF)jV%ui{NlX|y1Zhf_lTq3(A1hzNto!K`XUbtT z4T8QgZUa+FdXda=PrkYHf8IX)q2Q!tpiGCyvv9_F6aGpF#|h6SYX^*Ex>#d@YM?_J zW#)_-Un*q`;Q?XTqr^`lk6^8%I+aRzM-B=7q{NX)NTYPpTE?&_rc_Xt5_qu74;qqI z{k+?SR+)-s{GasY8}UC@Y!2$BP*JptGE9O&Xf}z5L5Q zv-ox8wCYGz8Ed|2bZW-?@K|*MB@<|lIhI#NI;lX_pu>63p5r=^Toe#i8!@>?!H*gr>6$3Y1A_*v& zpfE&|0`Rnf3<3er@BovJKmvS2f&%<6h9=M!#Dbl{Ec_aNPCiE{i(vfDS z5H&`U0VgYwob+wq(#LruI;1oQHokC*>)6n9Z9X&~e*8jR7spx&TzqawqgYRgso&9k zvMHF7mI<=I?(qF}%%a;D$H>d^Io&{hAfc2 zoZ(sHZVj-O+$c!-1`gbDg#XA5i}-oPXbS|^HTmUX(32^qr*&|qh99-g9b=BiA6Fjf zeGgOmjIVgV+Oyj?VzA==J~s_6c+iobJ?du~PK_14pO89mGWXu6#EP=?e-y^=dvuOC zS;kG;f&4muC4rdMF{fT4tbL4#ZyMli^SAR2-5wJf9$qEPL%Oz^xi|XK?}ZY={V~X>>jZOA zU)wSIFN*z*zVS9~-56{y4noN<%%3h4zrY=@;x4!wJ=!Ptk%Pj$Q{ne`C2^&c^o=45*J<`Z6#BB520MCInQIJG4)Ea zX;HFhmvqP8<1@GTQhCoqgW3AR;v|X%e`$n%JR#hAN%L9y$8Y1s0=jX*9!3|Q_rY>f z6)8_8h`WW5#h&iE4UvaIf><Oh7FC@QIA08LmOfHtUu7gq4WVt^_Zh6H3%fzT3w z3{ZeW4)7U(Z~UzJXNpC`Ksz`9jDS~C41jz{a0LKfsAJJ+6c)e|Sb#YI*)Bjh2XttF ziy$#r@S2MSf~fnLs773_T;ef~(2@US~2ZCTg_v+W(A7DlZb)c~Y&<}-Q&xW50TX;a;KM?D}6BGys z?B|1L2~gJ}U_|*X8fq~}@9(nN8 z!5~n$0~`m8ISCFRt^*pl!U0(u=w<;E0*o6#dJqTCHlPhg0=#Vi;gCpB6hM-&0DK|g z!Q%-Ok^s9K7#VQHfwCA-_4+lE!1zD{unUF*dRyv9z~Tlb$IrM1Jdn@=bo+zRR)>QY zK+g#2%&-YupsY1O%7n81PqFJpdJj=*MOiH4hOao0C@xQaTo$cuQ^y0t(U%!{_^*L&xi`Qtf??@I$)| z?~LynyN3-+ayYq6XP&us`nZ27Bo5MX(OI%9E=-noqK^ub$rzvZmf6xo`8|e-K~uZy zZNfSFjt&d+o}-%5MOHUGT^29^kiep4uwe@ERCpQFG)S(y#Ty|;tm>T0`+547*n*(T z$vLe~mZ##%r-y`nt36WTgn?xTOLa)jS=Nd=xR8)oPjz?sl*5tB0ix3vn3$67v{NA= zVw95gKH_&@X5M+;M53;rPAy@enK-unc{_^8^3d^&m$p|jUnFFMmg1R?_9wm*cc?T| zPh^_vNP5TX8E{-K6{@ws+>W<2HpvV$FS2oA6TMy2%HI|q+OhxYw0fGY$0}Y#Qak4M zOPKD$i4K2W8o{NNG2sw;5AtuLvho!7X>m8i5Z?^Ur43)mnU@$b$CA>ym)_uf73*jg zuRr?2@QjA4#MeM0YVm5wv)UZ5un|ZTgpb8Q&pT1IVn$oTBwMcSD$|rSYq$u7zg4Nx ze8eQ~`@+y8KB_|I5bve4uSZ@RvnG}0aPN6BG9BK)2?=qW4bT*sjv`Gja&kcmY-d_q zFOx^zV&_g$6~!Js)PH-Y2L@AB#VRwNpbEpgS^7PzxrrN1$uY zHyNss1p7YA&5wX?U#RN1aNY~6@hE2cNp-8RAoeI@>uELuJz)S{y?mUy zCr^x9{+kga1}9rEz~yR`WK12D{Hox7_l2q|gg%3i*yW4d6R)A}OyuA4s-?)H#9Uw4 zRMLNUWc#8@;i+{z1VRy4ia7Fo|JCLyD$1Uq4XzD9?=M@G~E#u9vZ; zx%A;%N9079(nWQY<#`SlirWtN`>PvpXz88a)~|Rjns0BDx!IHZAWa44Y$IbKmHn(9 z=&M=x7uh@dNR{+4-a!~_(U*}`@g^JMGYTd08bTheI!Z$>(5F8x6Qi*2Q&3t-hhb`V+jZsc z6Xs}TXy8;6t)vM=JG{k*a^~oof3InL4DLiH{g3(qjd;nF)ES3Fd{0Q)14Zd8?m7kc zv+s7(x6~}fO;OT5wZEz%%P{NHzQI5{A5@-pmTas3ecI=6$}g&BUAHPuZ#M}#&rha) zoPYODO1_y=2y5)oD0EHIm7iv~fmv14pljU83=w&L?UMQ9w~b*2nhp$3JUpvS-E#Nr zB}2Vo)#sTu>@6?Zd5=s5eY$T^S?MWU?Hg})RWbVFp8wIJLii?eu$TO7!c>Olc!#Q{ z8)~r0`VE-`J8HRxaZ4oK@0rkxCS+0r^LXW0egNif3RaWZl<8EM$1x7Fj_T`QB%K?% z$!MSNTA4qUrfr^D3tH!-ocyq@N_b9&kqG_N_@>fNkQ-t=VOkd6I@$m&~ z7D$Qd>UbnlbJ$aed44&FVlpF-@l@8A=IZFf9gD)u8(W?6un$9MCi2UM{I_}&u=TI9 zTX#8>4#)a_4YZbpgk(~6sop}4&lJ?{N?x~J&b$5vJFWu%NaZklsL+2$#)40Se&n;3 zu|W@|>sH*hm4JiOrKss3E{#N?h`p<&!J*&3YEY~yd(F*too+wP#aCFT8!M-upU~># zUO3gjB_7JOoy>V`IVyB9Xg;^8c9Cj88fhV|VOHrIWTeMtvR~4C!|#jg9Q}iwR>Rj( zwk-|zpXu#8VNsZm$*!TFBzcxMTtoza|mBQb#^^8uaOIljG3%pl%Y)*>=Q!cvMgjdc;JV>JOoD=j6 zhtKG1i{sUFVr=Xk%crB#PZW(*r(mR0cslf&Dx4^vhVZDpG)!Q`oJ+}*%S735Mm#zf zI%)O>d*a@%t7)O#Bu`ujb)->c^^O}PHJp$50J0-0xRl{BQT(0z1fzLAWBaD%v5*h9 z!Aw$))FSiCtkkoghWX2U9F0-0WyA#uJyB&!=+HkW6thsS^8Q|MNnGg3Pm~(n+AwdO zJI5nLMBll#6;!Yf+NZLh=EDK8y+^bZR|;WwW1 zr-kv;EBn8}J(UGZT81)41W^e#^Iwdge4(?Wf|rWP7MWpir}ESHq)M0c3QIB4iBC)) za+wS!*G}7pZEef@`cinPikX{mXhd25pcgYggQkvKA9DKaCb5bcb1eUyP-Vo-f&20B zt5)n$J=X3JqGWazz3++76s>29ZdftS$y$W=@{GH8SLzphno_3glr9_PriK@mr&p<8 z6KB?fcoi1b6`wmfumm~e`fbnWBCnQ*3iaeGyI3Q(OF+cWJ9he;@eMK8AC=l2EWGWo ztvO^OGLs`*Q0w^Xk(J-x?IqT9!AQ9ud}P$l1Tu)LhYN z@9v-68Sr60UP)YG!SVf*tL9S13fFBP4u{}&1DJG%bzhsG=Fr&PQFN?)pYRBf-;Xdj zV`zP+$4`|&2iYL%Lf8-Nes9FnWt#gB34WvRC6`dU)%CDhIPj>N)hvxupK>U{or=;H zv+VaybD+j5!(REYw6cjLTRbVJb4utCi~L-qv;LA13w7u1{^Cm(iaDQ2&sm*v`O`v$ zLho0q#s%eL+HSD4X+@qWzV2{-o%Dn5eqz~e@7NJVWNMZcVyeEvNH<=@NR)`mz~e&*Iny3syUJI33rN+zt=ER#%E0Yc&mt(0p$Q56crC zcqYgu-bY|*uHKUmInNqF52IV;c`nE4JF1%!n`bxvO-`v`xyBicE(={+!(k)6CQ)DPuvc4xVf9a$^hr-L? zk;vq`W*dD`y5_gm6GYZekOgQKzxpf*xxZ1Y9MP}7kKB5`c=@--%e(*kPLzV9KOI(go2dxKcv8r{+Ch|@VH=p+ z3fvgKoEdOI03mgGRASMn}-SIFGj}Nq)2?$^~|9KP)aB=`M5{Q2PWyE8F z3mX{4D6j|or(1#m939{b92CG209scd;z22hNdHw6h>D}Y(ShCmvkyR;8pOb(K}rPe z{N-Z7;DLNOaCifk0*DF6;qgQe&kYWY1f2rw=V07dlYUcXWj1~_Ga0|_`ifDHG+7xWvrY|wy^iw8097!cO} zYXneW3kT%nK@JF_0ImdJE`!0s{WX%m#`9_$+gR2$m!Kx_IYN{cA3j zu?!+Y;nGppLKV9A_qDv-lHMC?Q*0~icNB-!S6vXYYf;`btpz<8xeIyqYT7`;$&zJ$Vl$!6zi zdNH;i#B_D5YjVyNT5RF0^>&A@?un?Xiw+gVh%GVMa z)g1>H56_=dH~2R7x}4oA+2ZAR*-BCt&gR-BsptJ`Z-_lwZzY@j;Ut}<{NQSFzEGRy zv`3cWx%TWjQ`YCZ^LZ;dGShCjF~%qq_ojypCsvIXSaUNE%&Qeuz}TeQIh^&lG)~O- zbd%0q4p4|qzklzPN2-W;QHXcl7kkC3iip8vtL}H`R{txyk{)(i<`0C%)@>YQPjOw8 z?@KL8OM8DocaF~IE*=-q3NN0#PT8~hP|{P3&Xw*X^;0{_B-<{WSABDCpG2y`vnF~r zuc{f|Wybv4+73xc`zC!KKy1Vuip6&l8t>&`{a-)Q-kk(#9&v)nO7Gd6$;OO**44m7?ShS_7mefoi^YCstdC>3hS=K|| z@Cb1E5@do+Bd=A=RJ{t9(g5&Ra_z#bfotD!yuvWo_d2UhG!OEvYZXs)m0J23Xj;tSv$|a zJnLU2JZDWtSwh2|gLj7r zno`Bayqw@Q_eUnQj%JX+&+Swmhh8(DYl<<6_L9_IGQ5VtNJQb|XFCt6nQ+_g>_{ZG zNUCu)8Jtm4o7K1>wi#S4GBaqJc$v0?*HcXNI3)JYr%&MLIt&s}D61z{c!VGXv>Ivc!#)Z-Vj59ijZ!}+&q2OB9vyz$9rk+(uJ zgy1XhVqn@T;iTk`*FIb#+6*^s$S4avp)W3N+%1NPJv?LGT6SLS8aUSUO1Q-BdEbie@Ql*cOoP;se(_+zf~z}NXph~i3t?Opm)R}Y zqAHkvT%QnHVGiHYxh%%Z*!XOrJ#b}N*GkJF+xIz5^OVj`({hV_j3vVMWkq*V)REr4 zSr%?81`!pu&75>MxwRx}n{?tJ2%( z&je;l+m|%9&NuO?E5qCur9JJY*E9R!nABYz`T+>tDc4lrJj)Na*z1HIYX?e4b~vi3 ze6TQ_(nQ=4u*RC<@?eHG&VyX<#X<Prwc?(w z%dqp12&FeN&(4jAozIT(WHc7#;fz=LN`YCt%KwU5<(s0@WyZ^n?WHxc$dNfg^#aJ+ zCi;v(#Ospr)Yr9l9+yue^B^_5_eLoluwk?*w)<%_A~0;o%lyiBm#}yAS!TS@o0VqH z+?xK`G&b3>l&GwY$F?x7Qqfy_y0TGh8vQR|FpHh+4d0Qqw*@#Q8@PRtAuiE0HNObPZGZd-iGcf1#a>w% zTV4z$t4#N?iAS$}-jt1rPHdcul? zb>e4ic8yal7OHREtSp<(Tvr-O`L?*lI691pf+_g1Q`S>>heX(n#_`x?S?>zpq030I_VVlIrha~G==%u>g#;C(>Ra38CH|d$+C!+o_3AnL!B>t=AJVbm zx-kpQ+zK6|$3O8OXRL$bCCtia?jH$p=S>VWL!Ex`xQPkx6F=%o%%7T#qQ)r}Z0||L z5-~LU5~q>W-)9Y|9f=-&CoRJXA1I@y4X6*Dl{G5RgSIt=Ipj#IzPTXj5hdc7@bXGZ zZ=MV6nyVg*eRS(tXqcq3hjmNqkuT431oa+ma=F>$MfqIu%7)cDA>BkCOuydyAZqB; z=sy(cqM$dn#@r*gC+62UqzrN07P(#b%d|~M) zzno?c$80@<9p75bTO5BA$O5qx&?}ssp~SIJUGmA0$hzWx$L&P(xe(3gLFJwaC#N38 zeLc}*D`hrgvWVPNlw9Ccw1%;_f^7E$B-8P* zzF_9`H>JDMtRkfXd-ORPsrN1IWrw@f*0r93n;IDmy8eIc&+GZ*Dnl>KWl(*NY#{ukLQpE5%jUBOj z;1gQ=V_(pZT`EzCSNrkPi{mHxyTq7}9Se>Rx@>3wJ~#Mv(M~=Ht%mc9nH)rdTV^=& zx#8)H7>{DxU~kqFb>gS;-w3rVkA>j7Gix%r_4_yMD?ZG@+9Y`M$S7kDUp%G^4Ui&Hc-2sabCJ;{eP%?&#)+#c5PI0&S}U) zlprtz1I&6OHNIdFL%Bh(vz1-JBUk)?KKVoIXMh)Rs3 z?G;J_-xW!6pLAPA!J1CwUQa`rWTuPBnilEB{|Q#Y6246U(GNeKDL9K}@moWO;T8q^?IHm|g zkoHjiS<8=ZpY`-2KYjbm)b>%|8{5o58ke&#Z+OWU?X8kYdX}8nY9^H_10=`-idZ8M z2^CPegBQ3F$9USwsxt38gbf03-IQcW#|qZMfo(9EZKT?bC!S{hJ|9I{6$Aq&72$irj>*uj*{M{q&JxrH%sy#ddmPp@p zxp^^-c_(im*WyB@`nVJ7N$L~VPzmn17;z^&Lraf4KR;K(U^5*VrFfFCO|-V?SH-&G zY(&N$`sq-t`M59oN9M{F^6B^R0N$G_cak1Iktq1#&OZ?>Wl{8n_u!oESQ`J{0;LbJ zY#*(6zoaHd8hS_9B|&5z>SF4Wa1y4JfhDt6LoRXrTypU{gu!9=lUZ1}*KzL2UGuP& zu1WXOEraPR^b_sk_ZWr4wC?4%T1~Q}j~zJ;g?XdZzXjq(hc$C!VBrjJ$)gDb)A&O^ zZt2%x@1#Fr8*$sj6>5xSZn}p16X#IZv$e^EJS_t+;B)f>emnF--q^htdWx&8Q!lf4 z|80-`Hy#!BACQ0l2ABmbcK^4?Xbb_q3wZ=DnhUmq%M*MdZ$1`ex6#3+h56h>5A$iZ zUdT159A)45xqpR0G*jJ8i!;Ax{-1?P%g(ny3>wcS`hTl4B)jR2t0*o_JG4i!{1o!j{cTBOhjp{Pw zq{_}%D$)7Z%i!4P=c5&i`I(bY$+ z)@7An{c9lP#Q43wCMye0hgJ|N)p&%XAv{}w8Yh{4I1{3$v_MC%Fa^R?k-!dUfl$ zRu`XjAm$cRyQ%5S=knI?3i3CJKHoxHqlC?wFVPBMC9)T&w~fp%URvqoFElufAi_q` zA6PcYB~h6nryR*JgEb74Y(qBQy+S<{u^#JWkg((}aiGlBrqHl|R|Ky}2zuM4q363FO_VYMyfuiMMNhN28jkZuqtQo|tfN}- z{o%nZ_hq9uKW5WJ(iJ*x)K|}k@3}NWarxZd@677gtPV#loxIpiQ_E|xue<3A-ea*?yu*fTjfS%HRzOrC-oA^$uu6nR<@>~y$4LXcLtD&D`+7YvWUf{3ZSL-6K(2}4HM z#D(Hrd$zXCNvzWtp*dyK2`%p$yCug>%wCAy_}arVN%7duQHHp{^;^RBt)4v|Hzl|f zp@}vzC(@GKxh|y}ylwrV7|L5D#2*yoBu4Vx z{ba{w&vRdrYIVvbd%%1?YJyVO+M@OZJFeX$w>Lj8qi-?9rh75irpEwX;JG?AC}n@O z&yu={hkjfvVTh|vA5TG;x_M)c!S&WVTb?_V?-x&b)M^dqL+kBs+@xK8`_6kz6C(X( zo1R=qKljJ?pLbI3T`FwygZ;Zs@K@J%flh@37nuKyTSflOGK%>BI{x{89Jc~G!GAw) z75TNK@?S@?|K0xon)A;+0NV%@EH1F3@?hX921Im40MZVi4*^CKh6K<|fa?d674iTR z307tR@bY3I1GrEHD;DAaUJCGwNO7Q+@q0gTt^1#rHh}+BAPo$bCq%&N2UuDGU`}D+ zT@?(5|5*_EbG&)+3-uqzn~!F#>R`k{6iTmFE~RhdWoxW|mtA(fM&wLIDj+cX%Hy)* ziRxQ~TI|QOf!ymtB7trAnOEq_y-%pfA8iY2*>3JW4WAliQ{|b*n;5N{_YsP;TZ# z1d{W#H+fv7ml&%kp***9PkxP+!>)=KH&b|pX@UvMcZ-JWN&OQa zCDb7;fnPT-=`rhk^cwP~E5cbr66_?4uJh!Ketb5|2{RsJp%tzgeLo^BbH#3&$uDc1 z$kh8%N`w8aaJCWg{HV2(Ie+!Wb4!nnGsmYfDGNoe1)T zr_05|BAjbT{D^!z(yCy0&X7mNG%9@MeR5-A`sF1RqWw(T-TP0rB5N6588BG#FdcJE zOY&)lipJzmplL)`G5bsxRXYVpEz45`%SpPSsSRJ=7NsiW;3FemhX^_J3wKcXvhKde zd^yynq$VIi6kE20URL4tNSeK8Wjf$op0W=?f6?o^(W^buBC4axG@E8`-NF5ah|~5H z(TYLif|CmgR;8s#2Qg8Wl6UWHt!+)dYU#~o~h zNT`YL^mlAjiW2eZ+7mOkC$3TDl*(c@Qa6VvxK`jT9DeIB4QvnRao(iFF@8|<+sS&- zQ9?M!Blx76&SoYl<#0i_O;ja@hdvR5&-M#Z;BISim4QbYlM%$AUS)jDqk)}^g_nDr zFp@T6rm_>!QC6{}8aAP_KGuaKb?ju;PEhG~4`K43eQz&8B$}r`#F$Xulk8w^@ljQa zWb9#mgZ)zfGk8s}eJn11%3BO1fgz&0{n;orl*)21<3lKEkin1QXLs$bpz9lB(9j}1 zX)fCKIF8ZvtVbzhOpnQy`5`^hJM#NOlMf>AsE~(+v)mPnY+#uPJ+v$>7BF@_mXzV^ z%^%INqzQPNUA?O#6lB(V{H!c5h!VYzbZM^(Vh{NP4U z?_d-r_NPvDN*$vErK0PUIpjayZVD3>^g1$&|MZP)#e1tDz7JAAaxp`9h-IcL8GlTK&+RdtnI9)XrR>z*UOs)6`E0!O+a<#*_QL1U3SX02&$-Y73rYB-QYiVdi8|hl>)JWZlfms1IS|7!-b68S6G`{!_HWp=7P08f-ET9aNfQ;$a?Cuy1XBO)cNT`_N+x_^49@mkaeU?U=wB2tdK|ANkdFinacSo(MZb8vB zzDG!KPtwpD<-pAXgPE^xAsFj|^S4py$LfVT61NtK6-czXBtN@rq#zSgseW!SC~W5` zA3x^eeQaFQml=QE5JT)SSBX8q!f zE<4CVXr$!Lfk(9I^z*P2WqqpF4XIB7;odS!lCMR;0J-i_N=W~L%Ih3wlEk=#RJT^6 zcd*zOvP+K^O0G*$1|Ar%%0f$rAO72)`oC>aa8c1es7~U4!^i$Gzl#5_D~tVi1ph~! z$>jhi#@iX5#3H4egzI73NX(Fj8KX+TgwhEi>JO&;v1cs~w-`u@yr1p&oz=%K!&SgA zg-dei{&DS~=6PGQer0Xy>0Lic4Zr6^BqU5qdfh2jMj4bbXe}gtd^e98;nSB_L%SK$ z9+hO^)xv~cWGTuaZ@vmyRcD7jT%WU%>upGJr^1?Tdl*}eP{mq>%-f{j%E7c_oTp+E z$guXJvLd^Uh$8fy8)tf`)}>HaLE;&})iuu5Wtm(%9KA<&x7&*R`>Pp-A@?UpV7bq@ z)aOY(fAoNrEj3kie8oO)?mMf{kh!q;;W$&)p^PVGpOsoBgJPz&Ny^Qz!O%;ooM$WF ziC%pL&V`y-+s!9GWM(L8>m`v#5?ncL;zR|;p=5G!hsLrzwV$$|NBZ!2G;%i(ivGOf zax*DKRcM`rG}?>NGdw9le8@N=dEoTNH<_XppV+rMILUk=cZ8y}yvwe$Lx+m)GW6fS zN#m$FK0PRhCom&Y3MQt>J9|W*^|z) zb1>jxl2kI`BN`@&@eu{?(6O^?c$3;R38B$@w9SEjT>YZt!v`VXt3R-v1Gh+bk;DU$6_@`0Wm3RMT@84~m|V9ujSA z>#TSYf&HjP?~uYL=n~Z4p}+_y#|Xuh7=OCfb@ebLVGdt;OT}cAW9>pORGDs(Fl|`xe>N9{ zx`pe@TyP7AaNT|aTW;N(65Bd?FROeq)=s+QBSmejW=#go2b?6$Ce2z=in{&zH;}RS zieBzw7PIx4iDam+B0CO>u9;%#ooZI9J!KF>u5>ON96SasDaR zy}@+4f7=!OjSWSL{7KOLyMy?%C-`4SjQ-DqezAWI`u{{S{l5)gz@Gj>Q2m97y1+aE zL=eC&p?@2$(MpPFKm-#9NT|QCS@L2Rv@IaQfChRFfSdy~^DYMce+|<`05uD#BnBu> zKxFR^Owym>KQT-Qu?w8j?^J+`5|;-Gd0^--`o}>3SI_*P2Kt{o3gpPcX*fzs@JrDu+mo&+{i;feQz3qFilJ(XYSKMo?C~cOMw85H5!er1@RN|QLa%$sa}SCe zHYl$*(6FVlaE68NDz56ub6%}rgsSkTa#cy4$He`5~-ODj3Cc4?jVKwmY8gm3ybhFi(Ot z0UiDXCd}RBla7(Xi|noFM)Ca}JL~JQbE&M8X((Osz2ATjmf)DK z_O6_C1s{D2FO?+OINdoUWK}&^A{I*;^;PcU;V<4#ll)xcRBo-?7v;dPQhCthfFHA= z1hpnJUO3(A#y;o}HR3m=S;>8fYuhI8IYw4EW^Rc&Fi;w+3_lH{~lbz2iWPhnl6_+#%x{V0t+Ix>1p{|GrQLdtT|W(>2BI znEq{I8}=7dhKj*aYsB`-FLiMUQd~Osjc30}&&E66>vqp}lx*iGFV(mBk#iABVn#ac zXsm6c!;I*V&lVmJ&W7SYt8%}&uq&q0F8a2Vrm1r!sE1I|i4tRCOG6!(yuxUn9!(aa ze$Zp#d?{Itg^P0ej?E)SODrk^_d-+%)R@xBUO1?~22EpO6^FP|Jy?TbOX*QF8QNci zArO}$?uQkHi+?E$+m7B*GKDnf#hGP-4c1{$F7+AK1Tn~I=E{Aj|*$)>?xdIc|E z=t}R};m$I}Sd;&)4)-?#;{4=t8Bb|jsIO%d%^wQMSGH~AZ|3f+oR269$2RruW@#>n z)!8+WRi~uY`W&>~U3@Y9EPRe>HS4{+jnE-WsBC;w=PX{CS=#&0Od3Qm8Ho-02kj>_ zo#pA&m9AJ7;>M;0c*(il*UL`}UhY8Th%9_>EiK6rV-b(q+dAW{!*WEQ=~9HCi1Fgc zw3S0c{2FG+p|^6eJ8K9RZe@I&eDAMio_J!vPasxT@HOl1icnLi^ylcLP}jiOxHGZj zc9gM#YkTV_(WysfmPN{Yke=r)W})Z+95VmJl1KaMBjkG>yU#Wq1?Q<;%+&U8%f36u zc&A#n`fq=Q{srL`{*xLl{x?kE&!3@RYi$3UYo`D0fb?bj3XEFG5R)IK8v-0iV)5tp zJiI|ugCXfwgTrIc!B~bJK}DZH3qHGP?3D&qCL*a>2d*WCycn>!5-jB_dtXubOQox` znjhQRx0Mx6qH{g`AHJvdDkjB?{w`e3U}=%>9W zEab&aW^l8AKRt0aSzCLfp)w|deEHq88-x_-abC(oCed``4}2!n<4iwJoi-isUN(;= zqV5Y!D(A90iI$@n?VRdfrzKvxLl6-v%Rt#1DeFL;7UpUH)4miTb(ezyE9v?5JMs8_ zB5`^))?Q_Ws4vIppA@kb_g*%?4CI@ayV)$ss>WHc*xmwjnx^IV4_E1D*KXM6 zC5U*cX*70Z&ApR)Idr*vN~bM9KRgp>@fRv`=duz=lrtQ&nQFD<(9V+9$JB&8&R z#+^)1VXu%4^0!2H1_|UKZ9`uP5_DO(L+H|ON@W~!=ijotPqZ1%iN7L1x`HX!Pw1Br z8~-IkiNeiYsuUT5R)WdjPumj0L|=;_w~^1W#BTi&${|}?^2RwW&~4Q>N(_p8W6|$y z;ftrjPW-`=i==nN$3QJ~iMcQuwkig@?@GZzSCyn523JpS6|pxD>D2v%|3DFPcrSFY zGnvqOC)9L)k{{!Mk2q2+B-t4&)ONPRVi=B5VHVbzP)=ea7(r267Q{R% z6bTqe*op4&N9?zTF)jMSVG1e!h{UdlhBf~g=npuO_oiTr@R`%eJIFvryvos!a*X%5^#Srr1oQdqnAtuW?KQUv}?Ey~9Y22&wI2gF#RP z-8*!;lM;1nFPNQCR?&P`3CnD`LRmu)$H(n$M)o}$dT(9$onGcY^frkH6& zos-tCtai6@FyP&^>1zqY*CB3@Q{@ulUV=?PybApGl32_ym+e4?U2*cxbApvAx#9zZ_;Pz4-a z_^&dR00iVObswOY0BZ7IkM+Aipnw4cpwNIlaG`MipZ~xVKwKE;{-6P!A5aW{gnnL;=$T z)B@ZEK>t92xf9TU2P6^{&;o&9yucC(48#?H`T>wj0#`;vTnsFe2#bM}0mp)Y7eMYP z09|x6Ok5ra$BT&p$ATitqCmU?XoZ8B7a*{RgOYz;6R?B=2cjGo(=c%$b^yu%i!`DL zG?-EWp$>$&D3JI7*9QS4@Q@e85x_A46E1{2aPkOr(M6G-l>RAlN7a`9N?9fJ#4*$N-9hKzakD0zC~BXsSS~1W0!%f!YBS7r4UUTR>a{ z2+1p;5r3BXcNjd_K&J%A`CnXA(8kbcG$0lM4GrKp6Dx) zQNR8JWhd**ShtU+PiR*N7w1JYj~>6Mz1)~t-8i?F90CHbiHePBQKrB&B(8PfQPnb} zy!OVRvxJ~4hE^V}&yiBpIPhW8uif+GYtxMR{L`a>uXLt&avqQ797@~Wx>HqrR%U)I z%*!n%C@90m1{W0DRAS@gy3Ad4=}B=h^i?Z(k zDp*(j&<*>7jE`0$=WR4F$tn)&#-3i$5>bnuqT_y59smpSqG8JV!m#ev(XYU(Hey9> zT;Ic89KrFpM`7#jk5(M{t93d!acS~VwK9$g_rk0nthS!Di(gXNq7~tqX2-eXaO7Q1 z^TLE4r6g&h)aY~Yl_6rknF}HolSVDR?8^bZgGbsG=;5UI@+aA)ZeJ08U6?)c=$Y}x zLI}08yIQ|RQo+P=i)carPmV4g0e)F(cE}Z`=9J?}K?|*tn1h3Z?nW^|g1+QuoxY48 zizqG9SZQXPt}yLZ5a13BjC&MWYoIJ&6_iik#~)Pjw$e?vjH_GGK*75y?$Oo9*5j_1 z_|GSEJa8+S!XfbgZu*v?pJhTh{)W*c1##kO19>FN6G(c=1C*Ohm7$TrduUmg0geu_ zPW{%~6d{YWbOwVr!&<3Z{&7~sIy}P+uWibh9ABv6)L+pLAMU7%H^* zh-00g?~0nU>Y2KI-^Xa%;!7-9yy5ZpKdmabmk+N|_@tpPsnjzZvqNGxSP)0-ezoQ! zFCX8GU?5-N$C)w%?H=UCqmAtc0s8`TL^ zatyoWt(33$jT01-Di`KIBl*>d~>(??KeC1JTKdty22{{{sKFN@_5Y4RDUPKa|b7!v9VPd;FnFMr^ zFUtW|&+AT!A_ja}ikvreLYb`%^v zoP8vLJ5L=k(6^!~urWQVVylhDEI$c6<`DMuJzQQ^$1M6(Bg>J1mc;Yo!+YaT`qB%= z;Mv1T`g6kdZ8O6ZA-T#=8b%ek6Wj5#%%XBy!FH}ovvlDoD^7BbLI?B3NqY%BErJ<* zQSo<;h0f#%-jCxGj}&?!>Yg7%M!FyPHu7s=z$+NLMW75=t=gHP-4JH)kF;;*hd%Us zg(hIY%LeW+Yh_o}`+H5SLm`DO&tD8hp2lcQZbQgRn%60zbFcm4CItDZIc_}P>Lou} z)M;8`f_U-KqfJUpOtI-VsL?MItRLW(u)6)Qf_4(ia<3U=5MZC zwSC6o-Ln^-OsM}zM)?|Y zH4jh8Q4fWm=&ona^yuayesq4KCF$YK%USgFQ8)@tOtWN7q+u}p-kRqm1>CxV>2o&o z2~ak;{um*|-kDcmjr+DMgDgK@G;a4x%m~4NwPIs8B+llI@O(e!tdi`)Gl^oCqS7S> zBOe4L>x-X#oU@ejkVM>)1A`5;;nkrj0+U$4aG@1H{A<>?@Y_|X;bSYMwi84iB6*k! zhZ5FKhmN`Tr4`|ht|D=a5!0h`s?C-BPKuDMjORBrYTuS)#JM-q-QG{k6T^Z@`DkGe zClP;9PQ*~CQXgLs;NT?1aJHn+oDUZ6vf*C8J|e)ff~!tLI`G_Q8db&NNSqL+bA67nkHP-A zg|E?x&d$yfStBd&w^E!G@|f+^8^Im-hJ#BSP}Cw-HO61 zw$8`T?$k}lvEdF3vL`P2SQFnPMx=hX`)1&^c#Y=DbUpP;GMg|dB+6mBVS`N82rgxw zJW;$qJH$gyCyBy0JHJ8> z+Z%C=8P4in!ar;1_~!DRIE%gUcRpmhSj5{j$z8jVKS_3TB#71X+~g7$GAyK&7BISp z-E1fchw}*)9u@7JsD)4j5Px_)VSp5#FT7u-y?5He7w2#k9xO>}3_HIEvBdtk^fJ|A z&JX4wh=)d|Ri1hxn5JptE~7=5g6*;z33{!1Tq&*?+m@eGZZpezKz@G1u*PnG>JYr7 zdN_;HtvuxsI7I6-U>62iUCDDBUUH*8-DVohfn;0r6YcSKA{BX5^(~N#hQ7M1TGKKa zQP(Wz7wV8{lTH?x*#r4%O2mQrU3HHO_?fU#*p>U)mQYV@7JJeqke7S7K~7q>(?cG9 zf6@&(Cl*H$Zu>o`vZ0_x94KLhYP(L|&X`h|z~Z)d&c7ifW9F-9UEg6TM|u}IM=1VO z#0jgR3C4;K8x?$g2!RTHaf1@;>BW}WvV^g9G(ZAQGuuqExK|RQ1c=WjH?${u)-gRS zBXKjPJJf}VZ45pQbI5@nPL1=eqeNU=ZqLRfD5YSZpaAd@P zr*&DSqx)vd6ZaMvF>Mke{fwWIq@4+3#8PHpx|V|wCMn-Br{Eiv)hRhBBCn0m`&!+< zHgcC2c20I|o=WCo@o(qve=|Y=!~73uo%r9d<3G)tzaU-zSC}_D-ODck#=(>TUEBm9 z3jr27!Pmy(i1y$rFR*f@SLii%KVPKz!fVlaKh4!tPi)t1H6Qv?8Dv_4}pMS%u}qIX5?yt=Wy zyR-hq8Lat}513N5?4?dZ*vny`p#(5pJQXt?8_}l*GHo>S+|vTQ!l&0$rXstj2R#fb z@aY6i4sa7Hh_0o|QZu3q25DbcV`jxIJ8|F*Ng}kubuFDXzcb2_(l)(&PFYIHUq+>6 z!$1M>ocDwn*r5$v<~aBuRtVM#kLl8AEh6dQ#aJ#2Q+yPiV_ET;49E zIX9$n9`Y?^%B#wJyqd#w2KV`$gm6oeaDb z9-G0}BN$a7?vIJ)1r?OTV)^hMKcRL>7#79VKsN!_pKX*zW73BCUgLE-JcnX1`Jz^x7w9-IDWHi>kP>ng z^f(raSJWM|@vYa&RXR2GqWUnPY^kM79u+;Ap*_|WA7OHo7AMNAMRyD>85?S^d_H*p zX+w?gCl<9APlVR_+j$$2n@^d+pCT5A?hEDO#&^>nXkM9hEHm!OfNp90s;#qQ-iM^_s zN%K-%H;snTIvbCutZrV}p~i{TPK&jL)$7eTl4hJ)mo4|I5@qwz^tL*9wyOzPIo)RF z7}$XdR_n5I;v_4%yy^Lp*!pV1WY7Mv1#?9dx+=X>jxLfrl_%e1?zx_lU6n^UmVI(U z4>1mTXDOXhDHn2=b2bRy6>6Y=)QAzW4v}0R-t-81x_9%zy+HE8H$70DBZ+yM%*#)3 zl8wp}DVIWjWK${20xa^DU8fu@(f8tlI5`2H*4B_oIea-c9RZKh1|0c9Hz3HuoboovFa@ zKY3{x-`m_=NJibMuSN?ymui&|OJvn8hxL%hKb@R@j=(f-rBv`@XoBA8`?xu${NQrI z5Ar(p@T2&VHT}7tmP|SE5-Fpa_Z1Qzo*MF6GbDQpdo%QR3h_qaqA|y7jP86YGoqajwOZ8v zVTdMy)A*uINx35~wL;dGCpHe6PkF{rOEvS&=;Y8qp{kpgmEQBp(Y4R8ET{^$!g;V$_!y?Ba{) zir6HPj3q2v>x&TTLM{`I#zwr?1mbuOx80Z5(VduF#5Z}hU~yeTOIl=99yxf*15_-0 zILky%C*iWf$hylOIjOj}4&)z{)dn&pIA*3E9TR%~B5OpdzEt8 z-nIvcQC=mdev(qU`+a@UX`t})L!UUDyL`iz#aRPuYZEpek8um_UqM+iA3^$tA?1?& z$NaKmpQxFtXt4HWdg0=IeAnhqgp2kfV{PI*FeC1GMq4|Orb~Mta2G*F-lUaju;Zh4M_1pfs^!z-KcqE^nv^)Z{}gSe$^JoEZlP^ngaxbAL4GQHsCSjTiJ5w!p2ahXev#dki+C_U$nB9}Mu?65K1C6Kyb!Tb zzu@j1r=2M#BygKL$?PQRmFifbcBuDHSF7*uaotBb!-d+{KFn6WuKiwNsU=_?FviK! zTzlne?+cI4kQrZzdByr|setLSw_Qgi*8LGC7@Qej0-4%_Jq7~09lw9)H?lZuCe5HS)82XM}mR&{LC!;A>$P z%~9x80@2&)LJ_FzNrqvy?Y-3&`UM7UpyDq^|ZogsMgRdq3{WFg|_*k|#Pko+J;5v=DXA1=kse|?_p*}`DA zk|ftfLpvLEN*s($Yj~?KZ#&g(@&!rZ-X1}HzZ4nqR)sdM&2&Zd<)vB1DfZZj-V$1} z6#GG{nZ;^o-`8>OiK?3nrZ}D=^@4GqM#vyGDRj8A4VIijl@PBEJaWbA$Mwk-LY3~(Vt_=Xs}mbzNz{2$l5R4mlqxQn9sg@y99e-S_5aR5{e%xuKc7>6TIhBK(#ud4b4Sw2^Uw{)xcsx0#!XTDS4~B0^d>ZGq+RuNKMN{Y zOYn`ci=>9=i-ut*8p#RpSfjAqsMuA4uD8mj(moX5N_k=eIiQ*^(mAd;hef`LduuV& zBo?SBcTg5X6Rsz&5_sIj!ICMXMHQ!WLrle63t%1xqrz{~5UqDRMq5RcaD zh*gZUVU0i93k%^)=NL#0dFpw?cZ@SAdrFg9c-y;(hKxZ{RpfroEdPVM>$@gjq{d_L z;z?F}e7B1ulG9X3me3qBp^wU9K1Pqddu>wuMVn2kb7f8Sht~f5%OZ;+q<8TUC4wi) z*No_d5w!nykr@gwF%m=-rvj4QeCP5)kEadouzTwrdx2n@sYR}()v;1b6;zkUWVKK+IsbZS0d?spHAEp778$xw8 zV|f^;JtbC|^0vsDykLHc&#M8a&sb=f5C$$nolJf|dI-y6_MVYegnE2?LPw6s6}a8r z)^#h^z)<<;nLV@1iKF18#hcUJqSrgR?)oQB{Ug;#vmUMD)^FgaFx_Y7<6mgFI(_}I zMAfGpNz@FxR>PZs!H0rDA;(xIjf5nBNK$7BL z`4LKR5dWt<;OGFv|0xflfClk@$^$MJK>VNb0Lc&vhy7EY2oeS2|CA>J1LXl{>AyJT z-YyQnF@`AE@vA_vRQWHY2kZ|#wt=RVqph_U6pZtgMbyCYg#R`fffzX5UxZB^U_k;= zkSg+5Z7!nVUwzFUL+6-$y<8bUL-<=v<$%VuOj~qTRT@HsfG%umzpj^>kw;ebv0WnZAkUj$L z*+Du2@Nj_-6sR}?2^AL=fdZfHzdun(a7^&MU(HtxG+NZJ+x6!WF2bTPkPj&i1^58) z3Btm{P!VwFFT$Ws2;pCE1USM)7Yv&LLoITOD6|ww2PgSEfhp=c-cDZUj!5^ z-BfKI?CiZjdje5qCrdleUk(1Eit_TVzEEQUQ7{7+KwR_+z}3q|$ASFo6o4ZuTk!lN zFK+Y2-0oi;&#ygy)&9Dzi=CG}$n|%h;o#(D>j55DCrd9|MO*Lyf=BdsCOA|WU^#?A zNuFLFwwBI>zS-ON2z=8fCiYr)g}=)@v`HBdPGt**u~7-z(BrRiu~`yylC$6Hu+PAt z#3wgY!mbUv+QEk}Xm85<#L?Rz24nod_!|1jvx!EdPs)`<;a4l2c~b@gU*G%i@Je3g zy_}zcZM%M%Zo7AP?l<0j{o*ULiaY@uZe7BjqNC~5+_yK?bP70r@#K!TO>2kGnA`T5 zgJhwK4^YoN7rF+h7P9cLuzAcStF0&IiYLw6G*zvr*f_pC8*w1b{qR*J=rU&qlajMm zvc(%rq$Qt?!VIn8%l$60l-qf81Z$qmvBr<0_g`inGzFuC#>XuiaP& zn3F$_vKo>@3khRmu7%hfwVO+x(;o_)-v5;78^I~xmWs6Y`$-m+JaKe?=4Gi+qDJic z(fQ-!%j4Z1nmabThWl`QWR-bkx^4ico6l~*Y!}2Csbx}2y^ZfAf!4(xgSM0O4XoNzu zp2N%Z{ivG8@Xs$uwi+>VS-HNBi}&l+#f1fzov5sFUG5Lqkfd36xZF3eQZs2(cWKpO zErOh1(_c1{ejVe(&+ntAMd@?b5|k4a+k+;$ZE#*Z{EoMQ$ELiru+X0DuY-fU0=+S@ zJ)XSE;ZfvT;+A5dmss#xk-#s7iIW*ScYZJ6e3s+QwSr1%qPzM>_n-Q-o;*BJSyEae zW~EITVD}(W{enKg!ga=R+5Yym-t?Qvzg|DcepKMeHa~XSouB$nT*`qe!#*HBnJ%*r zox*1E1e`3-+`OndBI+RwW z+1Tk6aCExV8x3<8qO0FJzT?wgL|yeL6W<({RKaVJnfG|4F^({hzU{O zmW&V0%iC-aDz#GkJzo8!Q_A zh)3%jgNKijhX=pyRE>B-N{t~7dDT0E->6_qa%1;BM1caB*7SPiXJc}Fyr5AAsmYaS z&hKs(H*azkOflhpwoS{=CkvdT5@f{*;A7X3zMJIFjb)(im_x2pmPT6d25Cg71LVsn|?UL+8t9L3*F%h+PkE`l0-F)9$UP^W9 z^=-7-hDC35Pha!Fvpj(e(TO3(%-Cxz&3tFm6_+1ZrCz$}SDw|}T-LHvR#jZJzO&#h zVD|jg?6db48(S4l9`%nk^UwEg-7Ipv#$)B+SXhYeFLBlLo}l=CG|iL4=VM&&bY-w5 zhw?!mL(FmMS@SL1+~D5Og%z1kb=eqm#1_dWJA4SCc?%j7ifaTeH#%0gaHsGpuiF{o zez(TGzSH%%E3%Gn7NF5Fopq^kw->yg&~oqlx{*2WWT+BRvwtcU@3$3qaNp)g`G8k< zyDOuxmbPzVs!ni{l67Gf#}HL+_k;2APW7m%e)S0Rk;u7-Cu0IrB_6}*14RT^Ow%?E zNlWYv=<8P;MTf!P_~JRgP06hi7z_x;zCUXgx7t_giHRtzdXqG3g>$H!Kg!9v!%$OD zeOFVf;W1|?W&RV2tf*sbCti`w038BEZ+f5U^hA;U&A>WpJaU(pQqE(2%Qy!n9)aZ} zvD9t7*R!lj>&x7PUPyT)^5#boY`gb(Mc4*amlt%BOyb@7 z&7WI43uIZ`dDB>FwXxTQP)1>=-aKwjZu6MXI%*hd0I6LwN8QU4BxZ&5h z1a0Y-j8c=+g16lTdrwUU=eJHVp4>kyP}r06R14UBFRoY?P+PispqN`8=>8^eeW3Oh zX11I0WsV!2Khv6U-vtM7y&(MD&+uM-LlbG#_Ws}mIpW)1jODt7ClETTqG9QzC zM-J*C(j&i+27ifAaKVo-5Quzc5RD^Ft122!|J9vg@`JZ3yAAVg8Uq~u=XY*&Z6RtU zt{S~Wy?D(olr}<}f{!NO7)(lbMmVvjp>GPZXFIHJTZrOoGT0P3F5MJVlpp~|H>KCwg|3jn< z>y`Z_S6NP5TaH7A!cmph9>;u){-#ss@tgMJUp8ttEN8k(Q39sa^W=Ie$2B(W?;cxS z(?BWewtoE5?T>vWtq3pAV2E}-|A)27#|B)d$2L9bqW)zP0x55)>7I4X1jz?D-woKl z{CqrRqjo!qxtM?B!)E)&$hfog&(GiJuAK3{P?{1viORX2A=RQbmiaCvfza{Uo>hOv z|KaW(gJk>CZSSgGwr%aQZQHi(s$I5i+qSXGwq3hy+rIVhxBGOTKK(|V`}Ia-&NWv= zM#h}a%r9%?^BbdBL`Pam34UBSE4>TfcXkEN5vo>>&UH?d8V|AL>-7xNO9cx8R53HT zA-SQpZTPgw9g*r;ffYcC#VQ=Ew?sUF0f^CNSx$7_HT7-6B@0+-T=Gaz?q9 zdwpiRIPn$hBWhslxPKIqd%Y|Bsa48-N5$;ooLky*w8Gb}+=!%n#L8fqC!_bxE&2(| zyx#m(&?@X>q0a!(Xs+%298Lsdb7 z%3VP)Z{+2pa02e^6_fly!COf70%)Cacgkm@v<>Lq(&UQtUDzJ44xV&04%;YUF@1N1 z_+;WStB01}+*C{o6gaeD0t`WOOdTHb7qOpWSx4IHs@4vfro4R5q$ZaQCGqF(^Ws~I z8s5>F%G{&D=Vy!>{sE#Yk<<*0>bI1xn)ce)RWbP8?M?l0>OI5 zuD$`GdHihYPi>_FQ2DYlq(C?*(9*B-x}FhF@FVGtHal!x?Cs5U;~Xvz8SmNh1MAhj zz^zr$LpauR7O*i2Zn_--foDa&1v>?bqLMY%6RyDhV(WM=;>mp(5Bz=SQ^$Pqbqt0w zKNd;|whv>eeR@Re-Ud69f`VH%+u|@qv>#z0Cz(WmdPrB-Y+OMFL-vDvt~w)WD@yS` z7tHgWNwQTotuFGbGZi+OJf>dKpig6ill|2jv-DNkzaY{MsP{I=-R5S*1_$`YH=?evVo_n#U`a zvIm{MBqE!pJD8e6z1n|ua!5rM-AOtRlt?T$4#_J$T8>kIkO)X!YNz*=hgF}-12>P zDv5O_`55iVcKyDu(%QQBxNMYl8gj-X1Mj!~dgDm^xwr#KdPkZ?SLU0Tc5h{qVu4RO zjafLBivMO>PxT3(uJi!^koXA~O1o10V4*@<0+atx4k`?!HJUUGc!1ZPbwOaA7d$T&&BVG2!g3g@La--|06&S>GLvz89{8u?@r$IRf0 zZ?8GZF~1ZqlZ36rkcDgJbyIXZVO%~~q^?-M1s{gudK$l&UB%XId#2ysH{j!il-T=O zAeO{5P)wA;l})J2V70q&o|Tulu;AG+nXD(HhsDvo6>Kt6kOnj6(GI}c!i+A+A-lQ` zA`TneOw>cCLfPII7du5D@9EeV)trqeI zoD^f7af-#$q>ahyGDr7%_c+oP*5Lho05m-xXInGkM#pyNakWvWtMU09waB^@Gtyq} zHIb;95&rQo&d)$y8`BLix-t?fC?sv0U=^=k0H`TUrBZR=7pq*vzY%J!ZRAM@l4i5Z zE^|R$zp9tw-+9n|&D89q#X5^vr>x7%%SH6tl-Q?*?dS7;hOP*$$d~sSM|sIT?J(Z8 zHCO<9#S^0mLT6#BQo?F{w^2fI$M{bUE6isi@{HSCi(sqxP(kQO9IO=#Oiq^J)VMo7 zGNM&Bd()B9XnIu@utTxkr z!u+O6``MM~3&xt&P5Cyn$JXR<0wfh)X4}gIR@KY#G99`uEAJ>;)6@4``wQmZew8!@7!e<^2ApK&7~M+5&{n)x@=pVHAjIRrTmrajT&1 z$u3+O`i~jx4lY+1_jS));4+)%vY<7GcN+k>s`@B)`8h6ow0kG-V+pi?DWu}tw=|a# zoV?MUg-w3hrD16uGzb27Go__V2Kda_U5Ul+1)~#CpgOsr64YFSsJ&&Zb7hU~PxCzPJG7p|PW-ixBynx%A~0(DBsv@%$v_6WF$gEx|o>exq}#Fz(rm=26=+D&hCv z{7I@T!wHNLg?)Xdns7HWz#e;SFm4+gq{fqj>i8~fmG_4E_NLi9w)$k@?c9?tKN zWBK{ng5)&a!1}l^+`C_;6x}5;$2>$H>{~38j9^gh8NsfLDR&{3WEYm8AeH zJGBmvRRmKq_cO9JtQL`)f|!2CcX4>eJz`$*!XW3hrF{9x%=sXC2t=Z@u=yx{Qd_1} zW>)tguj-;8w;+{(B9w>{m{<);I;?>X14NqWz(62_eaWIzB0dP689Y+Moz81h{a=9q zgnJDwxHMHI--bspj?<|hj0Io?ruk_3r0IOGqI|D=$S2=H>PWbKxE2Uu&X(XZUFlT> zp=t8LKL{zz0Oa+f>e`*KCcZeaH^x>x8{&J+KzHt8%h}5@!RC~ zyV_C?<-u5y1Hlt-ztNJ!YJ+_@2A3x3oi z#r?G8$NKUg*;O11qzLI}mOGK#N#vZ?jDA<|nZ0;Eeae=FnOgMZXbuyA2f;5E&)WQk{bJrDx4(;g(*L+Fg zdm;a~i0w~8Op%PKu<}wXitn<|*UYCys<_3B_}|hWMHzgzql>VqlkLPWVs3ldezbO# znjPXj*=gC{%T8?wo>aZd7#p7dI2ZbrQCRe24H7!%19hm%0djeYzIsP-Iy>ibx$X$; zt?ArN>DMX4&#?Sg#3jX`hwFENxqRP&Pb|^Z6RU!h(KV3PsjE}_%N=6-qoC5rLP&I3 zt^L~lR`MX4mU%0WxGc?hF{HFR`k_p?JIq0Fl43b|OQqFH7A)+0Fb8H3N(DLF*v`cA zMDC~~vviYT2S-Gvm8g$LsCYwlOAv-w>9x6%s`uIG>*&+*C)mqY=S};@`Jbg zP*>yj<8Vj!0;&8~)AaM6@OnSr!Q5`p?2{;sk#GT?^92E01;#Nfdvj!#Iq_7!sE24V zl^IfZO49o<;`@QMkwZsvGUbwpvWbwlQpG3w9QWskr8k=xnr~ z$3?QN<=X+J1P;|T0p;XoG=Vk}aL!}Km*_qgmu)Iz^6;MiFbI^Nxj;~PeRq5EdMIkW zs{pG|7`oW*1|S6~R`5iWA_WZ|?p)_V5&VbBP z&$7x2^Af&sBVar9?#@=nc;x4JehTcT z9pxj?bRH$P-UTe{MCk1EoU&h!sHBe#s1}d?xFLxpC=`>Z(*&;Q-4;hZN6nvQQ;SV( zW;OzfqTxh!DMEh&dj}k+4}Fe15^ShS-X)CTB%igA@Bi*=;;*exQKuHyy9|%0OwL=y z_g#kLetJjX$cE)~y|%Lf>;xme9egJ#x$JOITy8hLY&Gl$Jqkm@4_PJkv43Y9+i8m1 zJbtTj9q=d329VG6*{#ds#8V2iM-GgW2#!B0noTkpll*CMSjsOYv1~R6Xdgu* z4Oe>RRxUZGAy0M7B2WjdZm2ytn?ZJ9kPNwJOrF7CmZ^LkI5`oiB=br#8!xkJ!9nso zL*5$#TNKb-((`L#IaSFwukK5*xO4yy-Odg(4NjmSYS|DvbJ$~*fY%vrPwXgRd%q^L zJg8uJ+HEMR=F#OMPgeJ7hn zw5V{<5#6D-m^8yLqn`jOR*Q#!7(tFkkW)uN2pY%9+5LXY0IrkTx$cWCF3pIwk0)h> zX^jhsm=YE+F0WiLp`HDzqxl||&1Nyv?YAt;R5YcS>%k1LG)z+aSlPWBIwt&a;&&S} zfx%r3m0{7$rfw9qQl|=*`VoGa;nL=C8ishV>HK`i;!!o$+2ZjT2!I1NsmfOS$SU4V z(|ly@TJ;>CjzF8F8Y|P*(4JppaUROraA54Wjw*;LI`XiRa4kA~isf;B7h139-O;f71r2GOsC{9sjt2d|(N z>xYLAgIITep%tbG$An$&C-7i10&Ynj9*K+5#=YxMDM*q7-d=k0gSvUCyh)9%i`0-| z|8Se2(3_B7a;c+4&!_gtuX@K5z7$Z}r^{>rjK*uQyKF7gtST7?c9h@F(b=-iWp;-q zh`dEIP|_gU7p&T5F#sLR%|?ZAOiM2h+0l_Nz)t{ELo_A57<_$H&~-v zR{=#2-2xN-F^Qg~7fF>{h7@~zRO>}1>&9gX80I=+Ma5SDCPRsSKd9YG`_rf6GwQ`= zXD_=U#C?ia_Nws=Seju2kbYdtPR#{HmZAz7wf~hour!0tJ#UZX$pTF~NkEl&21TT8 zfiK1K#3H(Fz2^dX0?`i6%P@`=pvu2c&099)-yr` zKHdyfLex%0i@E5OQf{mUR!IeI3bok#!Lin4K`IXw`h$v2^9+Raxdi&QP^qL|E_9XJ zKU`bj80RVYegv_TXHf*lvpltpi1=r^-$TNLNx@_*kx@hI|2AzB z(!OpXaiidZp^Q!qy`EVR$H}rB%n(Kn$m=?7CKZ<95nWFG$v!s*XNX%zkd9}JoZ0AD zz3ZxS!&KX>_zL9X`|ONZwi$reA`K!Xggkal*zM~ zl2&^O`D@liTJp(Vd5w<+cNb%Tp?Rlku$maAo7in{??V1A&Vs)4Id~e^&esJ=-Vo|FV2PO@65IG#MXNAei|GlInb~YT z2z41*I0Q6tSzRuHOsKoT(!!y*B&A0H4>H_~hFRX%JNliez9r=6WbSWSt@JXW1aDp+ zn|WlSmvJx0Ee(8)g?7mDnUPcr23_WZdsjkVB8=UwUYqe(o>v1we3E_(J$1wPXUGauoCxe4%AhS?npt0v|=N34(Bhi<%Py7TBI@fB1yeZKo;S zJ!CMa?pgZ7?%CsbNav2UYI-~K=<_HFYMDQbS9CM>7>wZTD#-+egV@t#;D6Fe$|e`; zt&&i^jDNiZ#&31Z0`IOjJ#LnCce~9iPGc85Hppw#X0)GF@NT-?&HK2TUyT|vEWWqn z3t)-=oc>&?1kG1=mBPtml~yP#1xV&d%%n?D0wmw%EcMG1o19*=!YqnaCty!O!W&M)Q%`=7B z()_7_*8R zlUe5u?!;~}yFme+$8&^vF!`L%A5C%JoHvB9svd>1y;c6Q&I=Q4G|CD5RP2RxS{b^>=%(+`dOwM76|h2#f4wJ6cfEel_Sb@Sb-#X= zbo+=d$DF$BWHeTU*_?T%Y48>k;xxUrb9Z-K6`O8;yeN|Df-Y@HgJ)58!4RaTNhNd$ zEplX}PKa1T*)m;IcfJHnK7kheqK%jixW%a!PNoSS9b5Ba%YpIS(gQ>CByd@8T}LoB z-qdav%44FnJzwcqw@0Ia%(d$*C^&(J0UELMV+!BvslmLcYKU@YY=>S$*i}T*q~b6D z%v4GlIYPx*BzHYQ?r>~NG{UG65jszeRG$dNRiue(c-;zo@F5o{>39`Teo4HAb6%t{ zd!rHIb>XG+pE{VHWqYk9az^UQ0mHHYfU@{K%BOlto_Vx%e5@e>Q@0XfKs?ly6&E(k zSb|h0=y*Iqkw1S%o_&oN3lGuVug?eMuj(BvNkhpR>hF29RGXC+>#6k9{zlXCn`C6HEZgPHkogl53!pTVSLXjpCJX8_2d59s1f)u zhbRS<60)MK&q6{tPZngwMSO+%2pRq!!%ak)+iDv6_Of>rltVrDgm2dY9od~M2l7#I zY;ajDYym$sS|~-&(f>)xLF3#6r^##n*0fMbYpbx~WDKctWi}kAYGt;qH`p{Y4qYOZ zF3}E#hue1MBsPl!!e2*iw5OfB4d$hO_~wP`{B){JP8s0UL55)F1P*v??3&q4!S_WU zefBt^=4Pb}SVS|?)VFg+TBePU2PiJt_oNhAO9&V*^+NgM57+9Uq4hpZ4<@M`oSZpJ4`7RN! z_X<2pOiBVXxogwvXaCY36f8M{c2_Fxul!V5xf8MS+w!@w%b4q1GH(Y*sV?>(05y@R z1;cyldk?Orz#U&LtRmJe+>a_MtBXXW6BYN#v~3OUhHo%W`_kl6l9XjIQpc(3inG6~ z9(O9m&NkS4wQ4q$wN~j&=5|ldJ2n)tSA#C~h5H$i6v8P@qcZ-m8-vr0EPJH4E8h#g zyEHHbo8~D9_(wJDK!}tmW+=I{5nqCr@dt`P)L`?ux=(If-oW_(0wE`}^#}HBDmC4D ziU9Kj@$RNYz0QRT$20VWc=rD@X3+T^QJR>g+o~z5i}#^PTp#gk)@Yj_YcCAl_%oHJJO z@Hl#J6nlHFD5WS&Y?ZGeqro!8hi${NYJqi(uq_W?5K~jGWFWN=4Wi#Y+u6`kHQmf2M_c3^A~iLO9GV6@Hz!eD$}30FL|(~|Eif^@Da^TC@1`I=@Xeci2fKtG zEWR_Ki5_hVz>I;}LAb+UPiuZ(Zr^xyB|7H>)sfO6aeG9mlY2w;SCQg-Jh^wbkmpTA zan~8iK|8@SGr|y}$2qx3K533;KR$TJg=~9%4cAAp%*^#6<5O1|5_9H@lM(XM<#iuH zFD_hSQfn>B9XE^6QKE+@fDr1c>8J+F2kl3 zohG_4YVCX7v)W*wb$Hni+;1ecR&%UPJ!(ES>?juKH9^O4W=y zwco8*CQ)C~Or{s2@ilZ$hxSghQvvWx8cO+T?jW~|O|vPHPbKmDHfte-a5mYS`xI(;J4H z+mA$^Hrfx|9Zt5wB>O)bdQHD{Ua5Gt?$)uMEqVt74oj<1!v8$i*zi@mb&yJgzKqwP zYCR{hV}AKXt&}KX%Q!m__2x{HYT}cGSB#W+`mRgI#LDn=J`v?5Z#&`hpb2Qei~^gZ z6%NK~;7|5-8NiAocM&g#!Nn2z`(Yz21H41C_qpMB3L-wIj3PAQozlh=QNa9`QLEyT zEbnOxpJ5&?s5D{DcZc8L3P{#>0k|i)Ao1sTuLI?eD$R;v+<_>)Ri5TA=9gBeT z%tEvYK2pUI1d6NLvR+n? z9s+&K5`)^{X$JZPS-mrzTK{$iMkPpL))F-&)jVN812w~67lCe`zt8@Dd1af@$Q?A_ zD(d;kAY8WmP#_%R>K;wEGE=h|SbM|_stGSUtqI)>WOe5`u^s6Bfn$|@2Q721niFZr z$PDeQpEDu!O%9(W%);UJy_zz*0tbi^RGx%16mPu;dp`uDfARuW9vnS%x`d>E~b*rBu(o&-zisQaZSF;JY`+CjB6{HFbRatl@dcpwrrm z+5{wwQ`wwmZ-5_l%N2nlv0;^TF!N{ZILh9YBvQN2B3ZD8ZZ8w-bWKegCJma6z~#?s zt8iqC;mR|6{9!I z(;yh&7GubP&IJ8>1id1ilA}Ge(|ut5)fvt>8PG-|#hXGu+BD>HbU+qb}i zr6J&Are;}wwS-E6c%Ie6Dx{H8OQ)}r_0Ohr(6rk`{{p3!2qp)*6Xl*3Zt3E0DTYaC zSW0)hvPql{q~Jm8P%HjJx*R`CD!pVU*aQp41%i-6{us3k-L$(`erGPx)lRP^1M^Hn zdaJIel6N@n1Wu%ZVm) zX!g*}reAPI2uE^^1voED)hn;H^{Sfsk3nO&ClNh%AnUXBQ_vAR&kyw=u0uVkK!sWJ zF{1j1#vGt4X_Dse!7r%~)~0&~owT+azrfU6(67K^M5;$08+kYAJ6?BtyR_$z!VDND zj32$}HH~dLxJq(@b2s8i8j(%T?rIs9sG(EX!%H-9Q;dBy3CCw@#5~E@NO0`24c^>y zX+Dm$F0OWrDc(HN{Wvy;!;&InpuQy8hdKaH;-6+ zqJ&Zg%5=vX9T76LH-+nuF0N+3G+{ztTEq+En{Hg@kpoT!CsiiLQ|m)H-EZ{G(=u7 zi3p-JjyEbXK-(Q~1*!bTyEQGI^JfrvFYeRDQ{KaX`$=#0`m72#t2Mz(C{lVS+W%ZmH&>OPkhp zBcapF=7K^wI#;S!##XK9zPiDMDrJ0EBJIe-O(bdPa^&-vE~^7>BaKONaoQ?dsA4I? zOy&e#{iXBU^m)r|8ej5iOuIj+J($u3M)eXCRP&DV2?pp2%V7QYuOqvIshzQ`{;x(( zu=NbDC)mje*?}=UfwHfxflNSFxbsVWK29M@fi^mYQq-T2h6Hf1spbfgIiMdZwQRT- ztFC66eKNyrl(atV6)u>cyhSu0*n~D5m%dBlC9Un|=FsRUK#&H$yrBDozU%0Ep@0I= z+lBy1T?TTr;{{aRBe&gk?=@7s!?)Aw-pL0g>YrfAU)cw?b?-3AIYuv*R6aomq-x%o z2g7Qg4CA^6FY?LVJ-;v-I;nh;4>Z-f(hjt#wgzqylhGPHfyS2`-cgflj9)O5TWUL! z4-(XD`qsbl?ULnwCHZbyB?aSDx(-T=pgIdI z)uGpeL?CKIp>EU@8?W91i=KA8#7&ei)xFRPu~YLTvErjp5z#nj`(~#(#o@rnGEo1bo9=De1X*1|wm6 z1PwP;y65Rs!j{9C&k71B4~slH_-zk(>Z!|3`P${1obwrZC*Cb90ow%x^6q|B_8w=2 zcvjYUpL@SnSh$^|yYESR8K}~xzXinMx=z8nG#aBx%*cfocn{$C=eJ;>IgjflEksza zwWeDjNq@@Yz;+srzb)m=L>KP*sTAy#b0nY{|T?As$JO_{XagL-nx=U&No-0dodJy<4K8M{Gw{r;lI z)<#Gq1EQ>#XLEINWtwyI0U2$;y33$hwv5~MXVeQVCRN*-?fgGoJfY;4>-}CYeH}Rq zqhgnA;XQM#pO-I5Ta3*Pxi=NlES_7VJ2@hfd(^m+}@6?W-s1MUNJW5Wg#OYIJx8>t|PxpcX77 z$P&cGAxx!K0s5T2Q?iKiLlXkZ%OucDO3&NP!Z7KI^vOBGBe+7E%1n&gm))I&z<~G! z-V~mXlyM55)fZ>@69`k^)OPNrR)1u6{}*P3x4zA&FDetl&`AtfV}a5!t%|*MgM-^vwY073r^29|@4r}M~xVVsqaD8^Nw_kkVLeW{ zWGxycTHUWW)$9s9RL7J0gOpFbeiGNQt=1>%kK$+`Q0fP2ZPWr-0u?NKkul%-l#@=? z2(6kb%9?1iQ~brL=t9>#J8Ved@7CGzRoT?513JZ>n(%2G^sC%GvD9P%Opr2wcsvE% zLM<^+u^+^^h)LCuPr(H{5j)*MUzj{-pIn|So*eHX*H`_vL0jNC(A}usB%XwxT%J_# zzn+V(XRo1lfOa}}O#3zaGWxZ5q<3I;9(FYQEc-3{sCWKc7uJ%$=lsgQLVA4^^z8bA z($Fw|_>aKuUzFHi&(Z6mWng4=A{|=P>6NmfX(4NASBEO7{74>Z#zUj9A zLOSXHh3NdA|AXgbV`BMFblzVe=QoS0WUFjr{ui(I4YU0Xa{X_}+g~60A1nONz}`Ps z^mk&9?JxH3pTOQhzXyaj_%)hy}vQJ z|84PqZRhWc|1Vze@4WFh@W1GT;}Ng(q{G(W zVvCw6OH~c1@!p@bD}Dyy5~ELYnXA0cbv5oI9lO9b_X7uz4zq;>Q47QrkSeQecSyI7 zwP#5wX>8kMA<0m~@GmkSx2HPnqQFkm+&>rIN8!|$Ai(CN$T+qPJVzlZ_zN(@uwn1# zt0HYp1m-e2TV*}-REg?;BH~#JmDbbvjIV6lMGp~TVahKG&+>V7vOtc0+&Smtou}xF zC&yP#4U(Ha%}4zK^;oEbYG4|jKZ0D_%f7zhryqzKI|HNQw%+-VKheJm^H;GL7?}PA zdHk!W|6am>0M7rjg#Sby+34w*{K=BQtLk6X#Ao{I^|;MQHOo`-`&-Age-kmjqFCu0gKb0}@9kL8S<)H8E9f_^8uR5MxnV~$W+eiZ}bHj-cr$e?45 zUv!*l=B9nfp8&}=B{O*-5)C_?Tb=R7oRg>=??Fr)PcB_|Syx`T%bLA@eeEk{AruY7``p4ePW(9#o9B-t&#t@7}x@&9$u4L?^mQvd!B940H`?wOgN~E zOReDz^8C;fb!JNt7O)(A9A3d2_V#Jc?XsfoV?N*N?c$~_5z2fc>|<)l$M4cY^d5is z@hG`sDqM%}_2@BOrT?`I*ydeAOnI6h+XLSdhrpvlAz6f`OIcFe9sXhb4$)gpb=!0sb)pv_vR`;aKXJO3 zNh^eg4M_huM28JhM-N{B*BjRxf#KTxnZy;v8^#-?IS;4{I+tG!=nLlJUO^yZL&^fa z!%?jv7!fUA$b)2ba~9a=-cAUq?>s|8lPo{2k2M)dHDHuah%v+=B#osm5!?)EG}Hv* zuFOwwnJ4ypH6G(~+}KL$IZ2kg7bV$HP<> zE{t3xwbmKwoKS!f+*=0~ZiHDhoktMmivw~$(_LK}{yf#NDYKe{mE;=Xo?Ztjyx60a zqOJOseNa`KQ#P(F00~F`x$Q_+GhKvv^Gp`7;j;hyu6DBCiIX<)k%RqYX}WcT<=VV~ zU4}K7xOObm^3PbLk3C>(fnA);y`R!(xVW&u?koM)&_FWj{FY15Yd;2-aAE61f^YF9 z*VRrS%mf(fqF^V1TLP>+OgPDIAzqO`L(OorLGk`v9KhObuO0QU_y7;K)3SKm-oR|*-8uUe2z+5AWeDf;dSQn<{Knlx zL!fll*j?e|Zs8>$)&RHYUT2Ck=g!^aj16?|SMqJla{+9waDlAg@z&AhVcm7<%2nOu z!7Pbw(M6=A3uATj+><-A!}0{#I~x~qI2*UuTd*{>J(9MQN8?~>*EooEjSJ-pRGbnW z6^YyKW#zcPa=)5(!^}=w{$$(zg;s3KQ=Kk?>oaK-GX*QMOU2@BWudn%VD~(CTUnpv z^?qUXnD+w3tC7Ki2Z(gf`;yIW^vbAJVimzE68%KDe%;$37X6$6XmMf8vim`{uZu(cC=X zLR{^Et88j$tAFo3#ZJr$U~gLF*gE`1Lruva5_N6x%0{}+X1U3f^B~xLFn?@4ytg3T z(^z-urd;7&^C7E#aJSr`ipEI8>5CM?$E~S)?d;-Z;0*Xs)oG2QYPxfl(ltfrjLwd70SuiF%Xi9LCrS}g?DhKmzz-nD}m!Jk24{w*7nYtwLNaH`*U7h@A1r94jGW2M2Ee5M|~x5K|h9R zojA3f^Eyiy?V>wD9R(n}wOh?EKU40fn{&Q+u<5^$bPaT0*7jXq?q-i(zdk~)I=`at zobHDG@XmkkNewQ&-#l&kHQrs|bv?12dw%q&TlPI*Fwt(W=E)v!y8!Ppq?O>q)CA-d zrd>z&h7f^OwblbprG2&$Sc33u&6uLCgR=NZv+3(G-a{z^X~v2&+CjMniGnu!Zzy$R ztn^ylVyr+AD9-lKjH|BYgE|X#yGRVLG`_%i00Vk{%I1so8VF!QLOOGvYTHp)=Sx&FWzFR#j5uB6dXQY*Y7sb1AP4;+)=S9d1CI9xjmzW zXo>r1(_!6-L43rwc{p)!Gx6%Og}=nd<=v4PnD*$FZH?IfBHHN>bo#WpY=5c<^k~(& z(hT$nJ4%7TBY2100a#VR_e?xy*zu0P1Krs(>WADx3gz@f1J4n$da!|yw)6gC@3W8g z$|3Yjy2T>k3aC51KBLbhN^{paq_e^K#KK+^&Ij9O7?Ja*NW5Wb0#ui~iNxxATLfs{ z0mZfHE0A{WfEdPdh4*Q9RfYYc?@*`h!Q?5CFA3a&){rCaBnPtBT*~to6RG4w-mcdw zPj;E)JcnUbxN{EW$EuBJ#jnW|!J_0;GCqhD-{DQnOV9sC-^t;tk{@1xxf}&F#hZ8&y zdM~BL0C+zgq<~`a!ENwBa6ZsERYipe8yhw|68~OEj`@x>@!j_R2x0IqQL+_zPuN~` zgI4mSq)aU%Aff=l*|@yAUQ@`0yC3Luxg2tJG{{W6!MY%;tmYC3Yg81gd`i6~xWVYR z$p~A*v*ej&_#_Rq-So&6H?TmWHph^p-s|Fma2?a_8gQ~2-Oius>2&0)$tW# z*}0_|Gb)q_%_%xvknOodI7h8^qtT7CG zAHl@6x}@ye0m40RqL$k8JQR=DjIm2QE($JI6ruXvGN`4XFFO(3-Zd9%?Mt})m$BRsK4@kmN$}rzZb5F5H$v^m; zYbrc$y0GpLnMlGdTp-yQe^f1iyu4qUNFcvXG%-E@ZoWE~YjI9QamX>vgR-hC$1X~^ zuuKUp9HB}D)7Yr9E9bQR1l0@fGVg_3<(fNj*f5?coVZ1(>j)Z;*fs50(nG~8x^i{n zw`+%xVG1JoA%g;CD#)lBwdTHRxMwALTh5_%YhAzn28agANy)FJiW-3<;Z3z}4wtZ@ zQ`D=CJJ{+y!i^u!cfYq@uVd0iUmSVwI~Jb0u(MUr{7l6VJ zNwr99p}AgIv$(aoq2FDE~E2Q>_|0 zHv(1@a>{5hrFwm7ee=Zt%IIO?cIEbZ|GIvF5*9HmL-M`z2Xp#Ghc*ww3*L>#OR7nY zGg5wSj}PRkBN3L4b-LSF8#778aYLUOU9U2wWUjgG%G&kZUGh-Cv5vP|OW|owLg}C9`C394&#D40(19^<(k=>h;#*bFp1}MT4 z%l7-B*;lL57SAFqE3AGIjM_-k(8|(O{+uQ#Nl&s@`u06$|1ChCBUpDVu1;01Y;*m- zcrd;k=kv?L#Kweq)H*v`UAwidzONW9WtCVnT}vnHcLxjW?}_B4`rYC{3@P#7(oA9l;bh7_@xTWMyP)jBnIbc;Sw?E| zD*aOY4H_8U&ze8Fh^?%xnK$8X+rUYd{&1A#iWCtS{VL^mXD3Oz4?JXWw@)IGg0C+; zP%6UL*J!T)t&}XPwW^GD2r^vQ$MI(i|Mprr+yM73Vn1H%&_8O-a=*27Y~NJdv(=oA zx&Zb*NL5!xxzH2T5(i~Iu)a{~)&iDjrWRUQpSo~gTEQ&wJO)lLQND`Vb8|5zsijtC z%xt4Lb-IWgK&_l1i49a}$J@%d!h^~b#69OTN1d)fbXBcH`i8h%P54Zy%naCRS>Zkr zRl(~w#$dkeL4>dDkz}F=QNb8Y94$d+ae>?hgEYhXwO@#hg)=As+ZiDKyuNf^OadwIH`w6oXG~C<@ z5x;7l*V)ufQ`(t4Efg&_cQnz>4O%23H-rYKO$I%7Q;a4pzPC;1_pm*fck}3J!YAU+ zWaVRk!Peh0?LW0YswJz@>6YPnWZP-t77081RH8_E4N~|Sbb=v~aZ=Il3{ZSPnyGd+ zHDl+t-?fkM*uEBi@4a)-9UW!aa^SJ~z&+~<3;l}N%04{d8JIpMgbfYS%AOo|wL*>R zW}iPArM> zJWWs)c(NL3vbWkB;vCQGN3q-_S0_eW`~rsnz!wbQfzRB3)D!;UWcKZ6_0O2TZ~w0U z(i8sg6fY4b5Uxk;Sl4iGiWxTjq+Z}_(U$KLp)J;w=*5=+FAi|TIBQja@RGy{Be zqICI;;`5dEL37dQTX66?BvyJ2Iw4(jZ3cO6bj zPjx7vSRXVP{yu-bBHg!Ww%JyC1#j6JkIN@~dJ-_fp1KsB8%r&7ZaaxvP{Cod_SMk> zvG#CFM?BiQRlEWJfc^8C!19MYK1~=|Tq!&yArm6Ef%JfHAcWer*ggZi03m;}0KOlp zc%CrcS(`F`xTf%{<_rAKe2HJs$&TP6*P?xpdtwQOZt>6c0$Oos@bfow_?Hldb@7n2 z9s|L43jpSHyx>GbZzHv|X%6RmlW|n;~vPtjJ(t zMA+2pIcXU8MD>wsl#@$?4hD2*&*GR zPGH10nE=79{7{8SrW{@42mKX(AW+3&ix}EacLVS}d0^u2rl^LaLsHbw$k;Ysfg!+# z&Ik+D)K_fL5e|&JuP78{a$IoVTfLe+)x}W|6tFVgWC#=9a&nL+1z~jFA*k6 z{vl&#S!DVd(*48`h(>6%25yfY_Zf>zP)VrIuSBM75v5YXiVh@YBB>Y4%tpL`ifVI( zG|Q^+ONjkVc=$V>0c$&4_PcXcM%=03YnsQRhHXXnv0{W!DI#4SOCuy(7|#I4c@F|! zCyXTz=NRQ4^%bGQ4jA_ElO~WPg_Ug0YlR??6MdHQ2MY*Hrl3bNA zpu734{tNc2WWzpu`ThT}_m;7B1kr+~neCXb?UVW{#PenVDi{wqs_#W@cul znAtH-W_D-hY34~g+J7sp)N1KSrINaCZAeo>tV-;a;j`6-@z`uc3?k8U=uMbY zqKE~2l-+M16L)y_c`;aEXT7BINvuO6bfRQTNH|> zED&Q})SHlpGlsSzJi%=xc$Ihu?MqpBXTxut@&3-SyAXT?Fb3wGIuN74+T#XN?M51Q z^H`Pqs9Wb-jKTxyPc;#^gQ6Oeo@{BF`v?|)4hsBEotQ&dgQ%)Nw$t1dUjH1)$12wQ zCQKyxrnT`Ud7$~_x54Z5oRRz1yYe-~Z1*ut?=U%%nP0%Bx5o1DUeiy@c9Q1X}H$EMZ+8Hii<1c zG+g3`!T!Qo%$wUd<$49n$=_3$OFQ*;!SW59?&I=-F>%87jh!yKo`sJ10{@6$ESO*h zt{DBU8JMIvNC6|mf^p`;1JZp6vL=7k`YeBNNS6;@!)bK9|H)NDI{p&fhXeOo`XKW# z!0nhZK$(M4Ymlz(s(c4OOSP0NYeKwsGZ>~)H6W=TuY|kmi771{|I&i=TCUQ*DMB_4 z4O)WtEUmV&wCiZDH`>;{&er*J{&QtnRbx7nyU6CXX+CLxEIA4R@s8>$li6=`mBq8j zS>njl+|26-Fb+q+#^N=hFL*u)9b^A(MC{oaD8Bw1yK$_1#gg4BRha|FwMa7J31Q2#VSMENO}(p54s?ej64Kt(oXvYq@{U`lhZ^qCP2KR->q7G7K!)u2pK zcG9(GoXVfU1q2zPovZ`;R3AV^u23^+7)%VR0~c{P+qilf*FA z0vqjL3aOVW3k}6y^FNz_R`G(HPvP>cmGthol{rgTW)uST5I>qDi`LiG|I#xWWV4O{ zT3_hCyR;7jt|xJioVg3?9L4#u4D)`hU!<)2{rjUh8A9Y7Q5|Kew78#%kenYPWbN~< zL2E+RhWl{llGIst@lvFK@|i%8(bN=4eL^{ua!P#-adJ9g?#0lRy`n#G_i9MvB`_@q zrcU(UpWF19r7DZ?Y36+b2bea~e2is1&D03?qB1$m%n?X)sbW1~#XvuDp^?TrTbAH7iGM?cJvY{guw4U@tLE z$^L1uNmD*8Y+c-*Z{I6Dg^`?FRm83wX$X)Rvk(qRK?ImDJG2>v?G+0DDAXD#LAR0M z!(AjTBmPtBL`)1cKS|Uf9m~uycTeG2J=tL!V{Dbey5rzpD3+gEEaa0 zFVD=@NA9XnEZG!lZ`!dh6S5)EK;mXI<+^`iV8Q#zI0&zZ6iZrUk?d10MC-WBC6lu& znj3^Z&uMJU({n({J%S}qS5U;@J$9HSa`B0ZeMbVjc??eS-G_O_>|{WCpvba~D*d@? z!{o)5yw4?&u+n%~^*1g$7c)TXRXw*9(`js{S(a?4r6>k2n|Q@3 zWG46Va%YleyZHzLu5GN!D5kPky z>{Vc)mKixtX#V+hvO?ZuN#=b+vtfwXHqCPrlf9aw;m3<#HbISnNKX-S6`J&utQxXN z1OHy%O)yShIG5w0)wyi4BOybZq{0}SLT;y}fZvo&ey)bPIKrdvQv^G-Ank^Wnxasf zKpO1>VzPDJRjV6_Nve#L*jCqGQP-DV#=wNwM(kY;&ml`xaEJ@Ru0j&XX{4MebN`w6 zf`p#ex35O7kL(N{Zir*kfYh4GYh)S5tr~QZJ|&QdN#p9~uE6Ms-)KPZ3c8?$l%>11 z)T`T~DH;*!n1eb(qGW=X!Iz8QEYKLSA#bb#JOqMV83^!(WUTQ@Q2^K|a3p9_)nG;l_0iZi70ed}+ zGPMqe7pkB^`6qcZxVHXLh>qG3`hB7lbLZMqL1SY&-YPUE3p*xHrw>M=UF4is(R7(y z2*h5Rg)gaAXv*B5dF5pfJZ%c9fQ~5v{wC_uG@2tMLxMK;uqJ3f4Ph0jc@0UH(46wo zc2sPYc?<0%JiE7;ITKpLUX#C%s0aA{tk$Cq0J1aoR*kt zd^si?p^=Q^=}sG(R2MWNY~c95V(9`X6&)$XL6m^m<_iPL{%-Wd*evYrpM=Arnke;s zHuqCK+?p#GlN135MlPhhYC;;L+K4?)(OW0bGlx>65t6n^Yut-cjBNK7K~6Zuxt8Ep z-}EIYry6K0iqW$P5GEPyCv3^Wmn#w0Y@FnJJZrL|LOcWeJoAa?33eJFD!NqviAZP} z=^eQ)n7;>>Xmhpm(2c4qf?idaV+r+X*CV3IxH?nTeXUk2t>~<>QC3xaOredJsccn8 z7hu*l*0XH|cUgk78aFQ!~@K9Xc@tdMJ+OI%`}Y%Hc5Jv652Y`FI^$pc!*h zs9SqU2i%2)^IstY)Z)EJ{QZ>!B+f6d`=VU+sfT{;A^5L6+J&9#0a6a6vcAC%WQ%sX`OdK3sJXBP?il%?E!X|?WRaJd&X|6oQY}~iS$4>OS%_l4Oy^EUb z%{iwIkkA-57;rXlXdGm0rI;1b%ooU`RG>!94iWaDs$A8?vl<7<=L@B@__R`a1>or4 z6ICo%%aAUCFoDJd`{_ibb!s2>orjBz**AiB%!dUloT7beuf?Q7MuUJm$PA{+^%P3m zq7Hzd_EE~VF*O8T+L^3dVaOJ);u0Z$fr2hBzE-u+DW7^dKp>dv`-B^Jlc%&^E69L< ziYLB3{LA%=I#;Pfk!Vr!wTUiYVJAWU9T@%tBAeL7-46_<&c)ayoDq=#B%DBx1lxqj z&Ad*e2Q}FiF~vMhlvvsVn?T>$1D2kf`!ymS@9XsZfb3aBl%@V8xs~9)liua$ zB27sc?wtG3nkFI5YjObGa&<`DxsG@3hns><76ZZID#DE$ea76JcTNFqn%wpo2y-ae zPGdM0yyPJV99V)mJ`R!oWWm_Z;?{DgnDC!0DN;@5*O((KauHyMhlu@g!fq{&h`3o4 z@G-6U;$s}F;MxO$bT~YT3?dD%IVLwhZwhIoq&vS{zoyy4Ps;SZ!MycECY%OyoGHOu zDs@UrXd4gV;Rx9%=FC~u-^CC2$8_v z{KO1ldx?-Z$3gX>rKT=b(4}g*oDP35rsBAa9Q)z7K^5K<9n&Okw{e!776((BTzVE1 zq~IyVA$E6pSBR5@TVPIS<^Ex`RdM?w!sVEeUz4fAC%C_5cL5Hr(HcA*pX+lZV(xGh zdOE33HSwWb76aQ?z0uAE$bA+N_fj!=_ZE=VVF~%peHmWH4#8(#(z(imAPGTIfxpHM zv)uL$rGdpBbJmI()81LPUaY=3LQ@23N+nxH&~NEbIa`d~x#7jN zk4UP?Vys03r6P`U)mNeDxrB;^GZvs%18`g>GmFux;7oLM#1?+=jLa~ji9kw@YNBL{ z9`T3l-nhSB?j!qFWjI=_EV#g6n8a>5x#evAM)5?pv+dx=RwB(G zU8mb=0rubPXSf~57RRC~haa-)JjM@){<8G*7;t*kIJ`dj3)DjfQ+w~-IZuVJ4+Cnr z6?dFY2@O3?#T3RGNx?!3A$sI{S|*C?E62K+t!$PXX;Udr+2|uom2bq)=Ffk&Bxk8E zH|k3kAoE<7SQ<({*sKiFHzBf^F3A#*>*M;pB`#(0I+%!$R0jFZ@O3?}mFc6d zVDfoxK=sO4x~B>*d%bPx8MF$Yw**qH6}TFe6KRY2O3{TFVPY4G*VW>$Vbw%0&a<(ol*rR|!fA7s-1+BHIyK<0Q9BRDC!h%>o<=}Ydt{*uz(YSsN@LU2wqn0#B>$q_aH~qujT&$4 zm@=pxHzvl#Ze4`+F(c5Rp*=&Gll{*c4|*-qd(zBgjDCwWBvGLX+Ar-^57)tW03Nn| zR`NVrqMG1mj~c-X^7S;uTJACfyYawdEQU7a)6QK4S9A<(b{p22i|wYkcEd*b?73Rb z%Q^oau+TLmJ%Lt0)gEl1fna@^QZRcINPhETjwFPhljw;*o~q)w86g&Uq?Y0 zyFu2tK`hBNi6QZ@P?Cwem7BzJ3$W1AA&0BLu*NIGl7L@!dn=LqG!W8gM^b?_hZ%^weQO-~vuQpXT;ICw2w?9KNc!0TXqX63 zK=KkQr7G3zSwwN_T!2Bh*C>m{jJ$`{8T@X|h%Z)zB|bBg-oPdJ`mnQYZ^htOI;g}| z{loP&m_69d?-#eThnS(i!u}0a>2KP}=sZQv{W*ZN^vNJs9$N^^pEtl3N4qtjA1fcX zw~&~2wymtd8Y_qE7nFWG`cKaoAIdoiLJ;rXEyA82VWS#`wPKiS20~MEp}a-Ptn0IQ zN4{{G5%C&SD^5yj9V3%eaSYEM#h78Z^W07sUxK))@80(aPf-M^;JvtQnusXSOwbOD@ugi$VD|(4Puj+Y*Zi@6ACwueZ(NdQB)r zs(?JmYb5r2G;sVhB7rQeR@4O6eEq0CpE_2_veSxj9`J`!{PQ<`z6{KkX&cqN8bCS2 zR->Cf=f|BnQ*p5j+?IO&k+4&ik#2SaB+AdrmRV?byQ@2X8v>x~EnChvpXIT$j(r$0$)_7zi|RnBAEdiOdvu)BAIwb}&$!G8R6M5=es zhY)*as9>z;t0<(nV3q6W+}&O9#E~lv!%$SUWK1Y1+^!eM=%xcvnL0_|ak? z$3%li6}zq0QF0w zm%r0;p&*tSCnotIfbC~;52=@kCZh9blwAo~X^8nDN<6<%EoZq>1PParra(qqikv$4nip zwMJ#A91~8}uHjvixO*;JBN;m;-Nm!2Z#eIV=jCTG*LVAx&X0Aip^S)$o@Tw^P|g*B z=#};NDTfOY)(v)F8AWmSzR{yZv^qp0Mn@Dsb7j zlnymGXz=@1Y4gO4jf)@$iT}=KQ8MWnJLio)bTq559!m-DnS_~4wegmAhBL1B+T0@E zD?08D+$ zao8L^GdAollksqqX-`9_XC@QZ5X-(r5wO$wPV%)Dliq*CY|c?~VI(*h~ii zejC=VE4Vh2Ag!xG=u<-nYFyR_KM$Ratf%@zWBNDw$M$n$7}o-m3&}nddF@bb@3kt% zrUrcds#CPN8U0b=?bD1M*V}t-JYSW>W4NUFC7*Us+6U2rLjC!x!R;y(8DJaudy_kN()Ein8RGQBG!1FOmQ;&9GI+)or zqzT%?O1MfIiNW%+?a5b(MmQo5wefU#M_Rk9%?pZ@=QZi#&XALrsE)5#tN%`C?0++I zy&7onwoXJ9;_h3m>*)*Ww~;5ZK1kn%PM)JauX%%zQAuxobI7xkD)huOhvzQo1J#*|m*6l}@tIv}V#e_}g}b%eW8XeLbGO(adL62Rq_-%^$;a5NA+Sz84~_-twRF?%M|Nwz5}0S z8!L#ToUPG1^5$+gJ00vCWZAAKGl&>IkEkqSZ%KT=@};H0mS;U{|5vL;501o{0rPB3 zmo;P^3RAnBiOoO-kneNHC!9G6%ywl8pis=J^|VB9I80_U9XXb3eaLjl%2gZz^g($W zAH*e9%t!qGr-d0r%z}->GxV%)JXbgR`>wNAOvYOM`^`HPWqtV^865xKaN`dm72;jk zE(e`Ue2#u6bx0`ignapl7P!OT2D{ zszD{c>oy+AE*`s~tJgy<8s6O5_~76#9mg_3B%Mc-EZ98=#FpB$Ce;M6HT?lPnL@R5M)!^@H~cqdY){S!uVgP%W9{IU4fo#j2Lg%J3Gvmfy`Ac>&kECl1=>8W3J|x~ z=AmhxhtW>eIvFpnF(~E584aBo#2BF%J__f;CgA z7Nu=p4e&8tg$(UT{kNL>MfoDu1b7n*m@V)XzZL3D6lbMPwlbimU1Kpj>(5_&J>#BA zPBt;O)8@Jej1>QdJWfwwgD79iK&!{M9SFHVX-@fs4A*3bfH*T&*J%v9T79*dkqf@0 zG9PGFPqeAnF*!0w*L@Y&z9+DjwtQh@OYZ`vv26GCE=cUpr{mjA@=|2v`Nh|Lx z4+IF_kJs2ctNGH@^whE*`xOMd#b|4F3G-$y_GLFhE0-sRSOg@q?n_#S-UJq@Fmff= zkaE&kz$73;l=hY}T6E6VwRcmYwo17&P2@sZDWzH4Lii*xFYcH2r6#R!H(6n>=|c(g z-{lw{e&5!>94!f^GUU&*1pm*xAw)gbtUN5j9=lL%F;T>Z)80`3)D~j(3dIT}m~QQ| zh4W@S=oZb%LJ?G1%0_NfXq++cEU?%0u&xGfas9P~70z76?lr@PQ%tKOrRt@_s>M(U zMxePXpNA*Z_L|ud#k9u1k@!2qKzdF zAOAbniu|5uuk-y|cmA1K_kwOx$}f_Y_%mZ(!sPk~;0{u^b`VEynKd;I)@rIT#Y}^8 zM_SKE?ZVHT7Uk7jUQlY|rp4#O400@?H5Ma6Zf-)*l&1GW!Vir0BFVCq=uwaG6LCq=xv11ymT{|@?~}& zoZg2;pr3l2qGCgn%lC`WkeYlOYKzo+9(7!#DWA*M^eL)3)iMfqI%3jMHB(&vxk{5p z*IJ0f7Fz?Zg*sV#?z1Ieq z4-NI-MZPag|JIeza`G?lqwT`5yK^vLLa3L&)pt0zUKs|NwseV|7VmphlF+vx(XMMU z4x|01V4x%Dw)z)?$d7;0ptB4ktyos_ym9!~55L`^v8tc#UknUG2 zQYule7t+fxxllh6iC0Me@A!~mnKnEn_#TEM$Aw!XR_d4B>|5?<4}Ty z;Dpqt$xxFKsy%!lqwPyd(d108q#p5a?`n+kfqZ5mU$kVnWUej=tdh9j3HUW>I)+Xa zOJ1bozI0DNNIn;ES1$!Q5H@U|!;QRaz6e0?1plGF2)C-c9E5)?#RDP&N)k{}k8w8P(hvNpz=v+B4i zZl(KPQlCq+5fd_>HE=2gy;k*SPvo+ zRz5KuVnz!}usf|C5o#Ql8(6r|0F+SdRYQ|zVLhW9xKIFzX?U9eNx&tXI63K}JGn@r zFStKgS9Ai@S;-8V6UZeZ$c^XQK(aI#*!sdX-`@=_9xKQ_S!T2;SV7bTTndtO$FQSu z{~-6oPRKfb1OYIX zc4WWQEX=%rOkIqzHBv21=F0w?#OTRXdxN$b{mYz*k5NM- zgR_G#711t+;3=}^W3N*e*eJ@CC+gD?ml7`WrNFuWK;zbtL^X*2S;W(}A}h)cVh7#t zX(Q7#TB0Zy0;DZ~;;4e(o97i5t{1sgYnt72X_^Lqw!6V2hdCwhovfUZOA6Ou1z@l5 zTa9w3EwjPyOClf26AXU(`I|2|&^@G=)j;GT?je*{UX$TU-aC54+8@Ygqsvpx7t}dL;G>CK5caJti6UL?8B<4AL|&zN z5S+cn-@0?z7xdYKO8%UUO7c@A%+Z&0|0=J>25+5LGHo&DII57+g=|K|wcf{Ir_Nmu zD7G#ptB)8)jZXB!vpm<_rfpBb659knR@*bPXo z+gVxIlFz9jJAbD;URq(JinFi&V=#wLrM4njl!b?<{YP6HFPxHsL9>q7k#QysZY)_F zo1J6QuF~SSPKxT1@&yWjvaY8`lp_?<=vlG&&DyFR<VMuiYuAAw&+V|NKUvipeX?o`VjYkJ5@OaeCf0~C)Mu1ZDjEm2 zU2BEAuJ_nuV`BkAfrfb1p$Jpp9-S_?>EXL2VAu~q5<9#Z|&%U9Z_O`*Hc-?o<(6g@Y;XVXl$MKc{ zu;bvE8||#?Gc}~e*t5Tn1Tb)N%#2pi_30Zr(e)V~+G%^C1NiUlt1t@e?VB(P?C*;* z$~!p*MSpAKnjU)7?HU>C)Wtv8Ct%z@-e+LkKHQ(t?dls+V$?s`hXd3)-qHeU9URl6 zMRmI-hlCmR_xHg7Z|$oi;{UXpPW5Tg{JIy%#sC0;Zj?vHRcDzJKy2};+^W_q9xiq(xb!MJQAXt zb@@O;AG(_(L*2Sfj*i~|RqdKXLtDDP4~?M#?vC}@(Y$SKIngD$o5MrsjM$F#3DMBH zlP86t(LWh8+bnjC2?5USH%=_!(K>DACxvm*Yr2b0N(18T05x4zC#61dZa`yO`q&T> z<9J*8v^WibLRa?47y&S(D|=iR5iP=q&^CHvObWng!5O(n9ESS!P_@Aep7*5P z+OW#O>oCANOC6{NKO}3V9Jb(5cRRALA{?-O319INyMybdfkT;wRl&}}p@x@X*r;rdEg{d#CTEfDW|hfIQP9R!grgvzuA0pPPm~+NIlogF(!U=R^1eUp zlbsUJdAv8w=fm}l^Uz3va9R#WEju|uFFQ3s>*5Ua*wsR={SB&?xr~e*z2DiQ?X6C+ zQ^tDK_bXr)N$v@*^-3By8?n{?^7LTz5_2%FM=8<4$}ohN^c9jsx-Ba)PYFP?F0C$*qW=`>o zYH@SS9?5uTyV_t z53hi^kC=bS3Z^1KX6=FUYBCqLS^gMxR_&ovJ0KlywV?~3h!>Z^yeVdmAjZzTDP_(! z<`=W}qy<`0Xbd)U=1h625@OL$pj?cd+2Uw<;2a;&8P^kc%E$$=$P4Hi^OLpGOm(0< zQwgg`8i*A$jyq+{mOO_9G>a)^%^WUIQIe97WSLb3s^DO;W=>k57m)%(V-RqTSTjd0 zAc}5dhFS0?ERc%$fJL}RKk$aA!<9IS=z$qAd@(<8VolkC<{W?nILKxx(-x8v4ivM7 zz+jvb7QE5XEi_%QlyT}%aY|Nco;dTvKX6encp&N;vV`AbAGkw5qKq)7 z%8AIRil~7oK;>`>Wa=a(10Wi~F@C;4%tcH;ZYWCw3xXMDKXrOysuF6E5D**q6G#aJ zkBNyvA}Dnf@&fVzwSjm*Dm%2y6$E5rPq{2hs=e1;&BU0p*5$mwuNHgbPXwSO`!FU;@j76o7n3 zzR>^~faO65fcqf5z}*-LDIH3I;6bnf2LaFE*WlaG_>f(Y9^Y@UcjZ8N;Pzl~5c;tA z;9W2tST_iu`&FYh!hfv=xZphC9l+{{>b}jwd!W?;>R{`>*CEb=TX3oaU%`06dBOZ4 zY+$<#=_58_-uVpacDX@~0p?&jVE#}xFnq|XP^)kr2sh-0kh}0gWp(Q+)-GZ-oNQtO zC>}^R)P@ARXrO_BaIkL>%MgTMo8Q_LcCbB}cE5o+bJ-yoU^B9XF(6_j+2FSLWZ~du zVrHVz+97S>(t3zoCbrWJ1wZu8sFB7H2_@?t@GNbKANXVjoe6ZU1Nb9#`9l|cDwhOQ z`E0$Uc!!@;=f8x<%}Ks!aFA=ep7k*k*{1<46~&^PO*EucF4^|DbA;cPw#3LJm8CyR z^om?F9(~Vgs*JTzw@v@`#|d}OI7oI5nTN_*(*bB-H!|r#GCx{!g63`e>3uX>x03i=458eajgYtrO z!wE6~_Xqbuc!9cM*(C#o2P6kz1bhP<0l$XahU`M*g7JX8;n-yWWd#UAZiC@NccE}W zcp%@n2I;_SNVD4_>!b&v38e|A2^LT$zX@Rh!v>BAb`RzZ zt`EWoF$8!C5g2mhV=F?I!>EGOf@1|Zf#^Z9AS5ANL!Nw0MTm5SbO>q~Sr|-k1aRm8 zACMRb3Zx0b5n?1pOn|=u`vFDsqyBCi(^Gv11GMpHY|G|5G%^{vSkRod2(}O9?tPIZHcpQThK0-Z?qD zh*}sq5&uWe825jmE?JoW*}4Az+yBSk!G8jra{uqHIPU+=75Co;{ol0T|73grbKvxU zY^wjRisSxAjQ$Val;yvoy#LRtxPLym|4bCe@eelrH^YD3h}^_n-0c4gZ2G@x;{Mx{ z{I8Va|Dh%>Wg=>W88htJ4}qyHnxsP}43%01rr|WS)E7)Et)jp&CRyw7vg*s-96@i; zM}0c6*O`3!>g?r=OQF^8*|xh_rTx)0^Ip3qZG}D6kDh5^Q)=miX6v)(He=fH%#Go% zOYiphU#=CI)}80h>&uyQ+wSLYME7R&L>*fz>}jr<2Cw0H3T01zUV6WFj&zT8m^uau zW=dLO1xAi!_|p7Fnnq0Qz7$&DOeX#UZV!4=^l$a-ew-yuxJFj|cJ!m!(vJ}B_4gBS zF`NGSC~JwS?+IPUrq%UMSAHnipj*?dc&am--P~v3dTBj;psQif_#qd=AV=L0V<@MN zYco0*%-_!A0H$Hk2kB|(Gngj6{|fhOItXJ;RLRt7*9*Lgy3h4sROb@w`7i zEb~XQlHn_$&m`X;{zmD69!nr9w>ihb#7jLI4~s7+N%z@Q6yM1zRnzi=W(>JUO9XDpTF<~i40ZD0o$oCwli(Bfekv?DQ$ z^YWJXJPz8?h;(KNnHdLO`|q{cBMFT3M%Lg%#-@(Q@ihOB57CYgGk74V7;5PV4HdLoYoKuBBt)A zfWV%->@0QXMEHlo+EPcMj{v`ee*WU=c z`x3@l>YnpJa?XzXM1&ghxU=Sa%zZMwO-GNJ;LG^N+m!&iQb66!l>GTdN|_|fAN6O+ zCC}&;Qk~f}oNTT`vr8b+MzVx8cCA$RzU$ZWU)xJW9v;APXNR{J;PH`(5Qopo;^mZr zOh#fPPK(3u;w}=4j!L6Cm&a~u{a~efr_M3?<}02^X_Z(uKYY*tVyK+>;Z^0+W;|~_ zKpk^iY`dR`YLM4lUOw`CtzPmp&llYvnF-6w(A>y=2K5j8hEdiy8`k*7k=)A^dta>} z4ho*+)n%Y{smygBTAK`6lCngqsfc)?zGm!`EIvj(S`vk{rH{*+yvPZiBrw!Ju7skv zszE@Kg(4|aEyY7wjqlXEy80g7buQvqT+(2+wXOFC6l#ryi8?jG8Cit6mtSFwTYuf+ z@TB){%SV9&;R9Y((dyLc!1=G{$>pmqODfeqlb{aguS}~pAM@c%r@Qwq;v<&DMtP&VuU&3CXd1z{YJUnI8%Zcv%pr3dFp_+y{ z=54Ru+syl`8DymP?7SKL9(()_r7n-Y$x_Op_{$ji& zRyYMgO==x^<3g@Q%g@dT%KoQlh1~<4SV9N&p<1$}SQM}*DJeu|(L^c*4OzSC#w~Qz zenMC#Z~zSrzEm4(imoemIUjhte^kW-L7wj!k(Y2ZVM&lWfIUPKbE`HX|4f`}d~hmJ z>Ecg*ElddgU6k`5R~lX>`6#rf@ipNW#n)r_g!tmurDuUIA7szVxpiMr`bWdaKSg?n zd1Y~HY2)DfiuQ}<8b6uoPQ?CJ8`sb=^V*d$RxS=+e>Vf{k+dQdRZ9<^UQ}^UoWDn+ zpv@Dqj~J@-gG;;rvjZ}^;0?`g5%re@JNdZO!1&flvPGef+HIM$Bh>Jguj;SVV=-p= zQG?Ry^w-U?6m&7K8nM8!U+HmTOD%Ew5@sUtb~0gbTJ`I}gFsrD*bGLcLWU9H*|7C>RWBNtRWsYyEjP_slU*{A-%8m}g}*h^mO z-5fwei!h&9cR+G(5>$Urrj+tg9_-g-Q;Scny>cu3R2bGyV8Z zA@urgX$?~%7!&Nz%34C0JBH%9ECv9R})8&k=j_F(VQ zX#;+=d-Uvd!QWsM>TH~vMtZFMWLfq)?qwpXXgVEHi$%jvD3EFqH5mKC`FI-g3Vo1Q zKOSF;fh^Pl9tv?{Qvs>JMGKd(<5|3>vV6gMgB4)BkRgWx7U(vSF0?4a?gOI5MpfMd zfbXL6je-k>v|tcx6dhRca^b7uK}#|z)5dIW4}5=iT67CDA^_B+$)!*AdRfEd;vx-L z5vYaw-Hso`%E{){TORFFrk7WFqamjw91_BFG?~)xx2x`RjVWxXyQj+`uoz?*D!lPL z$kh=8XN#h&bSrwLAZ~B<=+ni>{^QDO)YglxDN&J92sYg7Oq}yp;i({H%BWIFmxEGd zz}&Bm(q&mMOeTKUEP9p9u`nAtTw!$$lUGZG9}DTlm=+2p(>>0L9JtUjka*%ctGu%k znBSyM#G2d%({U01b=GYtkh|I3>8FCHf?Hv=&2%KRRFJCwMF>zqvs24DiM60isb#5* z>zQ((Y!X@8g-sH1+(~ocUx&aBY#BL+Z#d4tyQ!7XI5p=I@2)M@Qg;0L>+3yWL%LT5 zyXwoq<}U3Q@!Vtv-o}#goQHM3M@HqlXY-RImh9`T#oud;iXJq%Urh&3*;}V&e&R4r zkbtK3#Ar_je@Cgel;7{yp2_|aYS~xi>+UJOZ7a25pnd5GspCSDJnatoJqn3eY<(d!Bpe{;lewn;glwabK(@GAS{}8e_UQDOD7H3?ciM zjJ)~38DN!4eRRygQPfSbS*PJ1f3%GIm}_Z~Sm|rYEK=-~=#xMQP9RbVkZOmU9Q=LM^H!6YN4%ytwEdXYZZSu9oRQ}eq??;1BZwb z`+jw$(cJL*9wQ1mz$>b3v8qCV;%ls{tKi4ch7=1F9=NV;khVv|v`n%=w|csZY0ewuUu@tPBfVL3DRi8TMhaPcXz6p&rQ|;= zX6)A}jKB$#k|OjithSybSor(IJN|TQ^v>#2I15AliWQz5N1vf~Kgt5sXf2YuMCBcu z!dDiLPg~80;=}GRv`}KuSag?COGCC*L5Z7Y>qAbls~9c$jFPGm$=}YsLeEQc>tP#& z_gF+2vgH(n-WX2zAqr0zApN3(ewTvLhdIEW{pQ;@MX4d#)Pp7an+A=HW(-kfN~(>x z-Xv!0*m}@TD>7&NdswMrxF2&&Xcw<)hoeBHO~Z6Q7E4W}KtO zGi)v;%L!n$Are`xB@)xqI#?cRrU1X;)C}V(xCfSWl%|+~T9eMJQje!+4=y3LIvUiSPHXm65uw;Q^BRW;7Ou=E56#CM&A{2ykL%2K&?i!cq~<4 z18Ol|z>KQ02K^`z%e4pWaJ(TclYk`=f)tN!8ppJCq%$fU34A81x+2rj!M>Aann+I# zj#^EYR|y6D8sHdHS1cvIw0BGA0$ZdC>F-~@tRcFkeO`!xoSv?cLCZAF?om*ra(CN; ze$B>2mi4d9%QB|ynml?}MG6Q3uS`x5(h$+$;nRSfa%8MI+*c7j);~ zyte*ZJN;@{^T-4Mw70*fzY3sv3(yoN^08|ffIdY);LCj%e-AGd`WXM0STJn6e_i^I z2e@T}oohl#5KN+iRZO%_B(u@cm7|l3Mm(Tjuo|=@;6HtI?V4U1U$u72ZGKAhtrMI3 zmvow@)ix~t1$M)%u0YERn-fx|Je7NMxNSp;V!SP(WAHQ zKL2C)x9CBt7qQ}!+0Wwd0{+m2z3>f+DnC?qiY&NyseJb(33Wk9hOk`@Yftgd+`i*! z6~A`A>W;R8sz^D`DQaR$`g}29s4DV(H4xd1LZHrQcT7?vp)U`#2f}^3{sbCV-MPFY zw=Pk5*X6)=dVlWPKU%~?31B%UFLElB9K6NxeP0DV-R$h*N#=O2?+M0ja9cJPPU~-f zdJ+Rb_p~Xpq3^r;6Ho2sY;D0H%f&;bW_Jo)j zP06D8&q<#GIvzax)F%;2b}c@~2hV(A^T)Nqcfj6dJp{ZGjASrqIdn8Ud=bn=Ym)K5 z2h3PdK~WKmV=_Wbuxo)pOu-&I%z_*G88R*Wn4p)hU7d`CRRtkq|J^bFuxQ@x)E9h)K3u-je2C2$aLoMbTq0G zC1m)C2$z*G35h3c0G!i4`v_p>6G7&Ngqs-GIxwNC{EO_Bccjl|z_Iay-IH(HdL zE8OG6S&D&^RFBI<)IQKM<8zYGDsqg!SVVt5dgIppOdTKG1a3@=3iddhMQvUZBUo<( zEJ5wY)yr@CD`WDY86{Z#YwRY{=g2pf}ZEJ*M0zN8h$m1npS;>YZ zC8S_f7qBN3z=8fHAQ#$4Oiaw?!W;g0ZuGdv05KbnO!wy24Xoe=W5a-`wO)D7My4^Z zdxhysN@U!J;I2@g2Z%4Voj5!}LBCj06?d*VFNX~u&Z4E_o`JDlg^`hd3YbDOFz6$) z8nIABIz|CCi1hZMqhb<`ssK1t73%?l>%Mn%*Jwv?8`d<^J=L?1la(S?&CDLe-^QDS zsBo(AB^JMR9y!wvjv5KO{=yNZND4kg#tBjdLY6=Rf4OYF$8mb-Vv#3xNSuSzW$N;v zgS#GDCCiPJ)&;y&(l=k&l4Q{VirM3Sf&a_R$q1--wXShq3m6ykt$1?^K&7@S8z*3> zWlFr-o|T8e@o}V{niI6i_LJNA~W_5;V56|v?akgxpflHSnaB$)l8bS4c(&0mrKBY3=icsIY$Wz#ALW>6-SN7?4i-YEb> z>h#naip`9{(g9vsPk|kNp-d^6#t{HQQKfc6t12s2d^Mxiscli!pgKI_LR8j+Cg=c$ z)y>dP=K^Z)A;9BaBKi%gDrNwI(o}%D7-^=RD%}3wd*ay&w{procX#=P0FfY`8(NkK>o^A72>D!bfO&2s|4P@?udl;~fX?S~t^d8m;JC^WuQps84ev zs2vpq)l`@XQP4uN-MSU-Up+1htVj~NUu^sg(CpaR$M9D`PwT=Z!j%wHqSYugtCIUvTk>wE1plJRM9^XuLQQ%c4|adH5J=4?-N5N z-YB3_IwB)lpYni4jRfN0VgIlbq!r8cEgqx+ulAuqF5+EyIub>O2WJV<@*cf08jbme zW#zG3J;2Tok^Um6AgXSO%`@*JF(rPNPoESz zD*2NYjY$>zixA-%1`$M6Gm?e2uJ)q6=%0N8e*+H-^Mwv!8_S+mB3g%+*=qR9^5^}C zR{~w7JU};}3QV~o9GN%EA*XN6C4+BQ;!+)Nqb|`3Ms=d56N4Jk=k@h!c;<6X3_^Uu z6?C{?j8_6eZkc+!B2!B?RYFJT#KNDEGV|Xl8>EVwrlB&zvdk3G#qU+41AHu?6jMyi zK8ml!+l2vPiEyTH4$w5kiGjbG+(_}(bM6P3Y3j~`z;&lks`@znm1mzi+$kuO>c$;2 z_hUJ5u?`MmHgYrqH6c--je5mla1XU@7#jq=Uw*nWC=X30vZ!RJH1i-r;+B~Q#qEWT zngAgB>RczlVXvXLcdvizN@hD2c6hX4kQkqX^P#|Y&@CT2nsqgS{Q$EUGcpVWJ zuf8>BoM26Dj`WGb8gvldTjj@>!qM&_7QtG1<{9aL5>&y(0-Wz@iN?0`kg+vs{p#f& zjRM>@gDTN)+A=kakdi!SYVG+ZA^HtyqYiu>lI2VskcL@!-=Y0?E2Oz@E&|?NqTj1` zi}N3^A?0lzQs<#5QTl^wCkgn5vg!*+ zW2xEmc3OC(eA)K4U->i_hXI+`ZqX-pdkzVMm zko>*snHdj_MKu5`L@WF`V@DJ)E~d}K3Vcs6);J&tRG2^eIQ|h{RkRmdglQB-^(e*L z4ZBQ|673i@gUtP78H}=`8)Cq&_wPM{Hu01V9~wMQmDw@8Fcd6liUp{g?U~bhb@QgK z$w`xbFx%JN#Q`Ed`QyN@l5Prz^4%$T-CI_*2R%68QGkG;^x&Ng;Miv>+W2?RJo8NX zu!j#l?CHv3zk2%VGeo58W&&bNyBJmO|qt;eZlb9h^$b>4<=63>UeH_vc>>> zQpRf38XCpug`vr8i=y2*7mpvTo|W&{0dHTlwzK(bj)1(Usx1*Lx7vWD3@y_9;FB{i z9>kG~-bdKhlt2hjAodc1Z}Eb^ZKC$?4$ly5R!JbPst81XzH+TURqc|Y>rLw=G?WiV6zUcv=e*v^ zdH?6rA`$p}GBA?MRz=aPc6X@Q(wVw}C*Sd(&%zJr(joA(zJiYv)(9Jgy~6FnJGHe{ zwQ1oDpBAo-Zn_zcOFkx19^@vNbyZo^qjJ2a$n};yhnjR%KOvXV{lJM$H_}6|X+)+G z5AYCRXno&&*X{%5VE6g58gA=c76fno=+rz*BF8)IbQ(rI&fZ!3&PBVy-YK~VfRq5! zm59y<3y2Z=SxKu(u~?pI)l7RE_-z=geU@efh&+?v4ERa^>g@a%XS45ii_b5R$Mpt| z!AEBlr7o_4=6!vP%ThemV2OWK0`(QD)JDqCdIJFDBTJ+U+MPX;E$uVXAB zMV8g~0x^Yz0DDE7-%AvBGh`}KuW4u^m@4Ke5gjdC)oJ3O>Y*OR8l17Km%FdJwT_1Y z>v(avuLjJ@LISYtzv5GbqlD9iN0AQ&kPTY=NW|t?lg}!aN=Uj(e!p{eQ}>azwN&#- z&Y=dXR9w|0?DHQG#brXppu%D_M^K@)6q_jL+Dodu$CdKp3`J zJ0hTT0`guUF_?c~YB`#Me;a{4jOazK^PikcW3MVjH9q85RO&ayVo*a?C9DSQ^gYF( z$hu5>``C(UaH!2Sy`wG7>0@hsgQ>#fXcc>jU6pzm^cc@-k2#^O!e`^QtSWRgt0W1c zb#O32dKCT1ajS4D5{`m%PAyB*f(Z}dW$DH0ah~QxJk4^mskq+^#yl7|B^z_#Ghpy| zLFgm8XhgF7xub5CeQq@$^=L7eBH7IwHE=mrHiqP4FvT=lzi>uxcQhs=Q$rrRzJ0;A za7DZSq+%65w)%zD;FqKT_q>BAgb`sSU|}I!iH8JwyDEq{S7Fm~=D>-fWXlM-oR2MQ za;sP<7iNLa>_R7zTPmux9jA~}%&kk>^8*0=$UQmWqxqm;L_JIZBcwi~lNgcZ0ZFHF zG|;g|#CM?|dyqL#LHdcyKYQ|I@6LOfmc5}~RZ#2r+UD;n=v5J2I-Uns)IkNExQ8Iw z7uQ+VpA_SvCeZfjGrqcGqe8HX8h`Hv?(-XjWyA^9ho^AbGvp!gkS1Qf6ytwxgog}D z2Ha1rt9A04DaG*7RiYZSMD)OcJAWF?pe4g?@rYp}WZk}`@ZO$D4^aYY=<-eI%2geH z;#aBSQLRCtmL_7dM7Y3}V(6fYg08lP53zyw(msT7lB-lyE+ zma_vDIjalktR4?h5@ku!7$NmhU>%Tn9ABN!ngRF@9;BE7OTme3U8*tB62QO?Ml#va zwWBkYZ>8|jLla9jg%81Ih0`|Yd(oOL|FWf8hqpzT6do&cMb%6>n28Tqa%L^n;|Of| z*Nt1G)FGt}heJGmSL`caWFD|AhuTnA&EzxPgQi&*a;N;)>;?^{?%uw!{f``03Dkj4 zsJ27_2di=RxK*^v4O0eC&Q*sHPR(mq*-PP*PW00KC2Oo zn7#SJ@0=pbCwHw4+Df@v>x)&C^TpQWj?=xAD(7Bv$@Z$g9_a@oM3@sxh!3nyG|FR+ zOP$IAC7NgzNvVdB0@_0ySSoES!kJk2>%3dOjwvF ztP>6hR|(%_Q3_X`OqCI`JRT|1gZ5PAzvMpJd9LuTHh(Pry^$j)I$A|Ez*wQwq3EcZ zS9Np`LsVl#N!zTv7F?acQSBXLOqN&o=Fu{+oBH12d8$k)_&`lv3%)1QSPtx*sgU;m zV>ceR(xXw$Fm09Sw{D#r^qMEH-F2A`JaOjU9Vj=a!nvh326a~97PPYH-PolfH4uDf2ofFt0;|$zDbX` zx$x6{cb>^2$OC=%qfhOsM3CKK;E8e=xar9aiNw8gW>5?BB$7tQbE|1y#~j-OIkoybD49pA>=ig~lS0>^(lqUg_XC2G8ve)xFM zku47T?EJhezr$5&f3+rHs1cg1>o2;togJ!D>8p9A{Qu1tgYi(#+`7E=T}PwOV3Ghy zQd*hyP{4ZNfQc@4*#zz4D9XI%8edctGJy5Ijz0vFbw9{e<)O1DIfyC^IkhU& zaL4%PPDAl_pFf+o$Kkn}A1WSeEfOf*R_4W6bV}6}b&*{!iy&i01nmShqub28YqbF* z>+-K%Ie?eS*{sI;VX(d}{e2qds_X$fr5n1KMnAq?CX)k&+xd)xOjwO6X^w-e>8Yrv zH9tj(M-kD_U8X+}&9*Xq+nW7}_-5g~`!3qI->1mthEooF<>ihE6@$lUVBBB_qabs# z-&8d#sqwgOrgg527@Dd&efe}U#Z-1YC6S@Q>f3T1#+f*)zZIz%kN1O7NJ@k=_;#v8 zlc~|y1+>l<>r=K1oq*~ED-@hliMm^~_Yy(Y9ni zhVGcIDq1wr=z*KhBtlwHb28j_Y>%nLDiTf_tX9)awa4sZ+bZsu*~=YYJ?4b5lIym6 zHCIe>2izGAh9qD}?QVBjQqg|09@jMHSfjRkMkVg%+0*}9rhXq^SlpRpU=;-N(S=W6%^KgvR)4~yzN5LI={D_;~J+3>Xk-?^Yj@8ywk6OY4 zC*4^qZW3*thsL9ZLQ#GPe@cR5lFA2#?G%6t#JQ+C{ z_o^6;Ope@g@4bcz_QnD{O!N&~zOen=37Oc@#bZ8D{^OlNtFK+we59qzr^VEB4BbmL zQ&kP!r=M|=qt^F(%$VM^eqlUEq@?^R#8nt*30%49yG&SP_#q`VGfqq*W!7pfZ>p zGg|{dT%dl$0dg(XIKyeqo1Gob_IQ60h^!v2eoUR+S=~OZx;1_1R>O31x>U2XaP~3$ z4Ll$$7giUu-Ts=|YsZZEd7Ba{R`D>vk`kq|bhsfq%J{)Tp)rJ9z2aiX(KRc%g6dnr znerhzE5r+bwpgxX>dxeYE>-lizamsXpAXwe;PgaQcNE^JZvJuaq>@lVmv8!G;r;`P zE@LuyIfy@ZQroN$wu|4tfA+KZJNN`a7anr;(x-DxSf9qN}={b2@whHo_;8EG(wGU^ zR}9aqiZA+=tvyCaK{R42z@&-uf6I|-54X)1%EPrlqeMLz1N{2;D(P<XNBjPUFMp!ixz=t$U_qCbGbETyWwPALQW%i zjn&98cR2rnD@tnrK#rV+4)M&i0p^P33V9YfVMZ`+oM&TJ~XZfAgy!185_+hbOfUbr7URjoa(M+dawp z%{R9<*$Ndo-P<208~8_MiRRPibngS~Y1?40lS}rk1xgn2iCMs=8&e zYE=cEiziS&c|zBzqw9u;rgTMD$9k7-+IYcroiQKAnyx>>`qG28&tQG&$ZCp3SuJ7f z?5FV$L3a!bW5P#4dsL?>xaC)-f2#+!sz8A$^4UyiPLGhw0#q;SN}xM#`n^RjEs#9< zbd_XG894D*cnMm0hnuAk`z0M1ZnhcZ32F^J=%DyQEsFvvu`{&-W?R z*m&9%D7~Y#Wmo*cOFw*prg?OD=c|?Lnek{iLTN)(0nc6{*odk>;#sBe`Kn)D#C>V- zvERYd!j!O8*e*OL2vSWK%ps!4i(wu-X8#=J!EjW%d@THHfr$%OU||L*l&$26OBSOT z(Q-uF&)JN!oOjoFWQRqHtqA>JJ?2_##ELvBAu3W?TM4FJ_w_SbJlhbFCKvt#r97mL z5VKtc6Bx6ahjyF~6w>^btzva=e(O$s#SlVUdJMBo>;K&weZxo1{Be9(2d{k9uxLi3 z;GfGN#r-Bi=BAJjHKlTD(VRqlK(}R+K7EvriLK@;5IXqqSjQ5JRpW}=iVZuZ((wqz z6nN>w?L8@0zprVme%~9wiMtDrk_Li0R3aj!?<4C@iL%)ist%GmwrodULhls*_w?mM zy&-cVcSGX7H79;NlaLjac4P~m%SN+0MOHn0Us3mgK9g z-#vrSS05<+4h2c!ZnR_OVHO|q5+$1G(~zF+TBzcv%|^RO#EANkIx_B|OB}GinsXOi zRS3%l8NW^rqW7yYAGe-aU(quyALrG@jqaoFtsFJBxF(ja88_~kzVtGmN{wx2UXK!M z8dBeVS^V`qGdGlyH-_$4zbB8M(0d0TyA`^G~kg?eZEHiQOZq+qD46K1qnJWV9`halp zDm{{mdGjvjmH(fZ_csosd=mUFi^U>ZY#%b^%iTG_jC0^#4>t9a zAhgoC%oa`@8aZ*eB;TrofnL-mKJV0(q@&R|>rRc@K0O%s@X_dBRgV&_`RRr%i=s58 zgMnboVtvfH`5lx^>#;?!;dMH;GM)U{5Ar)7nl!Bz(@eww{UzJ#?7?JChv$NP$!wR1 zQW2nup6>Um)lWQXjf6Y~vnP_`&jv%u#lxZa=;z!iQ7|kZRI5V)H3^D^78}};l~n0} zRi$c#mnzPE{&Ccjs0yA7)8$lXn0*NU3~v^e2rB^*>=s@^Ito^24OB4|*Z0$etE^s` zc9Th$CB`KoJ*M32FdcH2>F`or{ldK^LB)$h>4}Rdi_Vp2Rh-(j@5=##%`fg+)|hBxGj|4> za|BtfH0Cb z@g+Ey@YvxJ@h*+cMUnNRmmpjU5rdCQ#bTTB!h22P(Jmfb%i|DH5tUp*YvUc+zPf-Z z(xTu6ZM3&qJCq5;vL0nbwE!3SqHX!T z)Ac9w$wLjXa=Ky8Wp3?~vBv~?!?Y8XikUneOFBgoRn0`5qQp7^+q#J9!};~8yZQzV zdk}o(p4o%=C*Ug|FHBc_WtX>{s~7Q@(9p&>7*X`HaK7=nO+`<2P_{& z9WI^w+t@@yZg}k_S7|z6StT3@o09hSDdA9C&$VAS0PH@xcSTo!c0mjJ1ea3!?22UJ zpxxe@*NupHGq&=%Y%9}soz2mZ#dIB~$ezEkuVc7)6!2<7?0o?w} zU&L2S&39fMx%%|(t@i2lwU_(!?z*cXfnIv`)tMN}ze*$=VEw!b)BZSsta$W{vDL#K zO(R47qq{!zxnEQQ|D`T}1)E?*zIWbM^unt`@%i`6K99eR*A#m;xKXT(ZZ{W7klhwL@^x?T1)e7&GOBDWaS z1tH6^e0NXD%W;kA^gEpIu5_EDiQ8SlCLc2Ag4OZ+;e~^&?f{#O@nPWjdA*B(;}4Xh z8ar;*C{@osd3F0A_+m9oQlMldWnL7Xg&LD3Vwvb%ca1ad=tBEy1f*~PUBF(L=k`+i z83%6mJGBNA`!8i#2Gz>GJuyfc&w*MNFCNyg-uzFXhai>y5B3p!@Q}dw|`=CSYnAp z-EUa3M6VicUn_zZ0}8;;4vl!E2=%lW?BSQnM(7pJ#Xm0Y2K4Z`i*B4&saH90%5Aq4 zpQ{Jap{9)i5>lwdP~;HNaM2!kJ<1hpHV!Wh;i55MlZPa_=k#N~F9GmmfmT#ljwMe< zRhvwWD(HI^%2h6lzQp*O#hbr|r-cz=zwkOdf9Kif979^<)(;#Y#+)54Uv7?(6)ran zPL`bFohqKJca<4`P~WS<2Bip>DAzUgupZHYmKN}TnoSLqwGuE)G{B84kbuK=CDG8T z5*mn(vryHxW?Ky@CUElIgajIiEU6=G*cCu~Rth(;az!&GilyigBb-bcV5HI>fPRW; zwYMYfw8CX&2~}A8GV*B1tEVSHyU0shv)Yg&tQ$CoiH}WPJJFJ4?wc$tk$7EHykODM zldR=*+vS(H`T=9HmQzC1uEu6=;sH^npSXYfNMkktz*Y|wW5_DTYACnlb8qe~T<25g z_b@kWq$?E-L;?s08snN3GBFKX9x#}h<;RXFaHkR*ia`U(l{-b`-&Ga+-wh42AWHur zuvdM0YCkX*J^i}#HdZ~J6L^p31P3FY)6!BOh!{RVunQVfb}5F{H~R|yG1$Vb#d#Mu z3kS<{k=^}Lb9NTm`GtJmi3xhB>@)OMo3sw)o4>o=n5kduaDB7rcL?)cP``6~^iMYS z^{!kyC4pb5_)WhmY9Ah3IfbdyETv4Hyzw#iXor{+7Gc4;Ln)?gpoYJfvLE+!BYAfK7DGl1OW3=WYqz?6g4LeCo*JURlxQ-mYV( z98~$PJ4W?xHDcaciBVlriBWy=QWV`^c$5E7Zelp&12)s~UA#lsC_I6h(R|b)2)#Ah z0Jg*buL>bk3`6GTWU-pVt9<0zsrfkfH7wSHa0m|_ArgC-o>|)|{wQ(w0(7L7!)&>~ z;r+6xlwUM7H|9Hr4Ui%^7z%;MJ<*(v*4rqj z8O>uWPY)twZ0=vys46dV0O+a0^Jtj8Zma69KeV^9G;a?AG{e+a^YYzZP+!xRojLV4 z)z>NMbl8j-hLuai0;sONR;1dULt~EY#Q5#%XB>L+%-i$(VimbrGeLeZ+s{bKr^Ev2|q$Ly2%DZEx_ z6GnxTgpUfh2@eV{95NlH7@#e(9=K}7m}oUuRn(Gvyr>!yDz&!e((WV^?`a^8p|SIJ zkS;8Rgjt0XH%$kwM4i3zHQ5=J@GqOFnd>P{*A$}_KT`2Cb)&Wsf+X|`A{p7k^We5> zWXEZ^dRZD`51pz?zllV1t?ffx_NdS^|28&hYF(R%*C$J}st69pMD!J+`v7JP6(-s2 zj}tXf*Ho1l=T|0y=&FjfM~Lbrx&F=sE7yFt}gLa+w4R5IefA(E!-)5LinWcr0{j&H#NC}!`FY+ zDDv8Y%}46f#&ZND<}~edd0NFTu|u0u_;=Ddj`4WbVuAyWvuw?)2AIce*->CTb3ivjZRqD!g)&{; z+EU%J_?}dYxBXlAooQFkQPLe^Df*nJe7>R>U#qY^??j#m%1o?hh0uYB&n)(?Sk1BM zv#hMTF77vr6+SJA_(qm{IPmoigL^l@XAx>yv9A7BP{>UBOxB1ybXhSza}@CI*YGLA zBH>tJoA7He6c%{>hno8u=bgt19741>?kTY)t`_9*$t5&L6Vf5zppxJ(j|Hp^Csc<8 z@`*J*z*&V4wfo!+ONU&wbQC>AFwoE4CLT4od3f5v1%)p-T(2>8*dGsoLiB1X_E`QC zTieHab>P9J?SU9uydV$-jSJGDc|$B)*2-d0Ch)f4{(u#64SWi^(NtWL z8*Lekp%$Ijxu~Cwjof?@M*dWBLUzIeJ*BE(c_zn}cX_aCQYB$VI~tPF==^3j-x_2` z4#YB6;omp}eF1z2IT9Da4790OkL5Lm>S;SVz(i@PElx|K6iGKcc4Vx5mjegxa)#=^ z$#iQnZkeEIf!kV=^@aa5?R4CuC`wOKYlK5+Sf`kvk7JyUhU1`@72DQzmXhW#A2W(G zi9?MIA$aTv%L_WaBx1{~+{{k(4R)zAB|##SbTiAjwPwRsX(ntUs+d8GfD5Q#O%L@p zw*Xyr5R!n0$g;n+uf2M=lMF%y;~0x5po(U))vKynHl2HxiC}#yXqQB=E8S3>fB6Xh zNpbC>F~AnpS+FdWSq*lUI83k(TiPjyU7>_rlXQsu6q(rXE?249b)~WV?yQ#hY*-6L zeV7ulT}RA4JM(Kg^`%h#nx|Yvh}}*kb8*T7Td#gPp{s1vD8;dvwa1P4FgCB*G>>`D zM6=ntFN5PLKL67;kKenF&n7kV$#jMG zg~r)8@msiC*dd%+j)$_^rNa&=`CIM~x6aX_16SPph^@I0%6I3=|96$N`wvs!p7GC} zlXvqC`Y`7NxRulkx4d}!H{mt2kDpsH#x3f>QT+y2 z`N#>AY>36Db_J8AI@w}j)0)PrC_3wMJd&%}$hRvtl22>ASIKI$J;HkqcksFc{nHcd zC;1@zDLh$qRuHOg&dnMBolVG!mmc4)B;jZ!YAT>^tavf5d+h9w@E7s%z$rqQ;}RFW z{QTIy?k-nUFm{*&%s8ZJL=E{&ByfQ2 zO;?rbXC8J_^FhC6EMj-k_1Crg%R}NsS?$ea-6K0(wSs?fL8AY3 zH|R;i;@QvREAgmsjIcsjEvywb%$<|y_Pdr27!xk5{9bi>Y>o00Ta_(6*b?;{U;Sq$P)ITFyh zyaMv>se0*q7I$5I87sLw;mqs5QLUTeAz$I7SDV+NQ(k`g<>afS_)&iLdHgEgQOs!e z3q!)^;LXD|_b%qD2&snOtr4qkA`3xkk;BWGrg!QaY)c3W`wba5t96n|T8; zGs0VnKFac$s)gR>OWtRGexT#3j!Uxt_7Z>W>ofe`r_gfN6@C&$_CZ9l2B42&mYz$R zq3q{fjl%DLli&R&a@9%BoX1}@I%iMt>%E|SL`5@Q_3v*Lhul?PpFfK`gWtx(s~Hel z)RK)5vUClI5ug+aH>SDR%2{)6au+G}x4k|4IXsL9inCt3*{TKEBTjgA8Kn?Th2&D) zx0rg1R2I-{t(oP#d(plAAIp@xcJKNB! zucH@UFY z%EFBv#h;$PMWs|;HP~tInWSIsf~i&)MsK&c8w^ z3jajd>tjwvQfg^t;53(=H@Ipy=q0-SsZE8^L_yf4Xw3j(t()4TU13*C!LfC=%TU^PI4a?sC2L!@>cC&ab4K z(eFAs`6v7H3JJOy1S`__RiCl$WQls|wux0vA|mg&CIek;D6|%fCc$ne)FQG4zqEgV zCw7OcO0aNAzWrxwwVzEp>y&*9FBiszRe*560g{)oE3IS|5*@*v1gu0a^b;Z zI<+A}u{ZGV+twr{IjZVPafW|@$_?l^N<6Zq6FDG%eYF?smL$u>)4#brVWVA#^jdd; z5BxPeEJTE5!Zubxf)1NaJkmg;DyrkAOZHSk<8Fg+XctzlNqog6d^6wX!W(UFQ9bR@ zS>J_EJBQyR87W;U&i(f$+6EVl0^6vQY3lXx;h4y+!y{e&EQCG2`%DijSzJCmm`y~(Y!L5@5Jmu@KM(l z>#IH@{JbWc@qy+9eULD9>WJ=Y?S6KS+J?hfa4s!U(ekvWORH?j!;U4#^XE($&$-rb zV_~mD&fjz1??<_yH5znr#ec7NEAOk^>~wS)4QNF)plUv=X^jeOu&k@qnsP2Wee4oH zLfVfn|qdIC+@auL~DceBQ3=V4;_0ocWtynq!OS zx-T7e=ea7Rc(J#OA&Q0h`rO1WuR@g*F59)X>JNXxplsoRMAWuDrQR<9+E{MVb8 zFrJ9el&tHl-(CyqO{oknUsr=uOe(*@U-mQ}}Jb#(p6ww1JQQ8Sv8ofMjPrTuCc-H}y8sYKpDMcJ95hr(J1vWVvJ4nr)UF zpw%=Zq-p?Ltv8-`wN;kxt8{+#@~oB8c5*n?IHKzY9WXX$s%DN15YA}C&nBzt3ogC( z0zcA_@e^j@Hega*J4wGxrc@cHB|aku0pSej;3Cz9BAp)9tG0b46Y7u}T2|d3kR{{K z>3fafyaE$sBEosJ{0gLO@Fi6pP7lY^j&@qfF^T(h^Ut=Iqj1=+~xhR zz0x#3G;=Xh#!oR3)~{Ft@XrF&r5ttg#7c?iAgkj&;L623G~OCdva0CbiHMEm<|tcl zr)jFY-rivKc~eJtTBZ##k4%UftEUVPEI5fFi}6%xJ*H(xvo)nwCQ1xA zdMxWykO8`7+lF-N(O1uWp|Nd4Vr~Df?TYSGZbm5%D&~9U#EpwOxxp5>a)+n4eM8?i zg{{fP78V&?vM!HRjVwXd^!PESvPpGVQE_{pB!^57QOJVtT7Z)MnoNfOPX+%8fDiVa zJ=_P63I)|308y4H0pYBx*N&TS#zt9NXn)Ed0%fMK_D@L=6k*})^Z1QwZTO;c_WU8? z(IcZ6*|8DD((z=m%d`CA(Tu+mwaU9@ZuM5D2ZYN@?$!8{HNydFBCok}?wq}f+t{2- zQ_nnIQ&#@a0}s6Uzyq({d+*HYT)?0d=!)E@6u!fuk)>d7u|%V3if9y0M}`};o~b-s z4vev9gO|Df`sc!KbVKEpEPM>zfEOHQxy-s)rSkltO5u6(a`rPb=)`rml;T{v<)pjA z={TDW?gf8S#2Qg`)s^xt2gD>|Vc9I)!~bo^=u@koUGdcTxIl|*e0&417j6^o67Cbe zBYaQzf$-znbyq%cw5Jr9bdOA{EjcR%4?Y0=s2FP=2b4zZGIp{4QSQ8zqw(lr7QP;E zPu5;PKfSbt0FxvGV93=ZWwQ+LbhE>Aqf2}`ip&WZ_LXtPzUvJz?pIzV799>>)Tgf< z`C(xnx~g!OWumL%e;*H{eRC8+c=;&5m(RUyNhJq|6q>du8<`JSx3`^VihRyfv*y9W zhZa~4_2y;OOS+du;|wSGEDv4SUij-tKU0+D;=S(E8>6Aw#+23A;#0jrL^aYiE zru}m)QEIGa%kZ6|&;ug6@+0WLM;>BpiXz%-Vif~(hs4D*_f?lBEk!bu{34`h@)D$=47{pFpSBIoWz z-+9p8B2``pHC|i@RqfE2$yL}gsK#mQUpOuneW?^jX`FokY~#jq9OYw2ilh9Ez)7v| z?gpTaTaF!1C+)z&IR;yoP7vRB>!8~>)utReak9WQhNBzZq47e5>h-Dzi{Ndj@%er8 z2X!K8$Bd2kuTh=wifbSpE+w=MR--kT^S^N99QeJ-H$d%d_Q}wTw~>wQBv%z3R$Iu?oRORIuKOxPV{RygLXSmBm%q-2Hd5a>dhYPn zD%xI8onBdJX*XMF$p@cYncOdi`m&l*&&FXPP1hytA>KZW!tRuTbrn2fYaL;1klvMN>A9#w1}HiUNyG~k(j9ZQ+v8E z??h`?v!C6AtY55Y_6htJK2GQrMp<14>gsOFG=(^B_H(t8Wp{$L-vu1ODOL|UR-ILL z*Ekq8-gS4Wn5&%~BHqZlsfJcQZ-A=WK6F>@BHkpl{1=3+EE}-EoSfd%I`dH1He%@+6`S^gT@bLe8; zKKAZ``KCf?PhyoGLMa8-1$?gPCpz$$AplxeCvTg%`+NuO%tJ+J-hECS< zi>-Bk{Z(Ut$dRyGn$@H)MdHeDY`J!X1W9_+*w_!hQtSCQn&_U&xF?S+{{B%skIgb4 z&qj4$=(yjw$#!tKjgf8q(kj_5b;!nK;^#oK5un*3;rhy?#(&`9qQe)h)b?y2A*xkV z-RQsSA9=de6%Xp=Ntxw9?E|jL6Lceg)(sc%vv&96=6~$@&b&V-Iz^v%b!)E>e=&Cv zCey-9{CPW!jE%YfVvts1V zJxsHyGLEGf`*TyGh#qiBH`dRNqSN-@xftwen(Ffm=CXrJB8%=oc0pU`pE7Za^nj?P|;znP04XF{Jz$?>* ziD1nl5}K$OKLdh1YE;_zyjP#>*81_?*VO%AR{}4tUp{g1sJH4qvTTs?jNwwEm>|w9 zjMv7TtTh6s+xnuzJzTvEDw60zj;BqybZk3T1j~w@7!7{oNLPa5xZs+xqJx4 zyxE|CoS}Pwe=k&6-_Aiu&-bhmDTW7&SDQC3TC~mpa0vErH)Kzx_Q$?2AQA9fqXZYo$T_EQIoRbj%S4OPybA^%oYB;|yJ)po+`t~3%n)o3>KsA4D&Jx=t|<+dR{KScm9lxhiAp8k82hNLAD9uCz-1@LFsfgj;Lgfo+G=-S#h6@Cq? z{>^unS(JK~74=Z?U|yjFbx<=5I0#t7=&6DlTWP=yX%B-8qnK(s*G(R9zaJ}Bc+Hmd zcKn|0<)$Irf-h~5f2S0{1D|q?yVBnR%Lsc77acgMTMz zpfSzOe`HGGSX8m@ysYAdG<0{ETRObpr6t;>V8~u%s;`V;=+wJ5R65{1`VOR!`MB22 zha9PZ1VKU!abv&->X2mV6nUKfsi2fH6Bnj5#G-6a^VX1y2Zq1gm+D$Q$dGIQh5(m^ zdS%NuJj<${dw*u>3RYRapo{QDP(X9J8kdPOOmIq0`r`Nz0w}e~*8dhwo0a$KYAbQQ zeLJGK0J9Q5?u%F((uj`0E>O{OPwxs`YN^WO9`27WTGb>TwV1N0I!?7!PNufnx6+aM zci-PqZYrd10FeFQ41{|2$tP|8b8qD{qW-xPmdm>#BQ;=y5*Y|M0o4M05ZNR4Ypq^$ zSTm+Ejh##*nFrNsataV`#qB<}U7g?d2Q2npd@Yg&==Zq2`{4|u7;A!JJOPvL4#Q(V zxBcgo_#YQYHc`?9EF!3Kch)AuVI0Di2MT%gEWh#9kjt56UhOz=!s@CG+hetUvxKke z&gwYZvo^$bL?B=gQqf2>i(dr=6sJ+if)WKHe-r7XiJ%i|UdVvv#m~KYLE=bhf#QZh zCF))0;tF{*5|aj{>o_Yr$t_Y2d30wREaY6%vs`s2<-F5rEz)f?PF*$j*mYv37F|y) zWG|lHHoUgJ-$TZ=;rTdB3+hey^m%#pwzugO>_0`SVqlSc~=m1+Q|cSA`>^wh9! zsYdLJZ9mc7Uz*~KRS-xLWPGReNoqeV<{TTpeRn%XEKAruE4Hw$hP5OVI}ex~yYAb+ zh`^IHtJR~>8S#(aZWJOtJpr40RWw)po5&DR-w6q@-~543`349Dmkb@1(moTqOWh8OBm#POPV3Bd;d+;!aZ|kYAGeRyu5O`X+^diH zU^FwDsC&=z`wL^B0gFYdQ1Q=bW;Ggb?)^fg>g&En@^(vuL0aDOgI#NY+pmN#yfcIT zbC5N|FQHQoS&9;=nfd2BZ@2_BW~TzUY9fm3zp?MzQy-)np9%?jI$M zgMD3#wPS03t=&&SrA_vYl~j1AwvpOh)8(xmHseVjmX&en89sbpudREiy*dd3SWs?( zduLmpPx8&rJZ=wF`|p)hfTpvNt~=lE3Kz5=-j%(LcK%ARvT$xORyt1A@Ge5*2qJR9 z4MqOl#VtJA7Z&{Un2%3c>vOqT&di#2r*F+!m2n?aDTjhz10)kR3G#fiptWZ2>(kIg z-gb;tY|X)PB0~IMALZVgCqVOqUn>G*sv5`zA13kaFO_rah5pWRG!HRL@;8`+UhK>9 zN2`TDRRwKN{l$iD$u=$s2nS;V4TWHg*K**72>Cc!eQodgTZ7%87Q|@(vd$6-zzTZ! z>mGqm5c0k!G#y?ibm49wme+O9IP3Dsf)N|(*m#Z&k9Hq>jwR=_5Vq}{{(eY{vs&ZI zRG@wHfpi1Ezhm>Px#yz0pAS^Xt50qI;{I5-2iq;1*#PTpp~3Rdf9DsCX>hX%xP!V7 z-Ks@D=Y8nI6~5^GUUjvb#$5G-3Z7egFq?GUyl@-hA?cj$6F6P*rFr&K{^3b? z6Ts5`#JV9HWs0f8Hrpo@C)DYco*aYLH5X>Wf0H%DusA;YWa%6Fxu%OMkjQekeQZxT zkN2MDhYh_hK00iy&sd^kJM+%e`85~-wU68BYx6m1d*R{CougD~1D||41^L0I>2lwq zP_6)&ruoWQ{8b-E4Au5v^_lwKybS$FL{o!UceDcV%#P+(dIE__Uz#FR+9LLk`yFiQ zi#1Otk>$h6W(U~1QPFjYvzQZ>!x|HEK^#*sz1&#a%fY+9yh$+odlu-|TI!?5&^2zD ztgCr3r`lmRR#gYCYCb}_ke$6^=b4&;n3i!TK!8d z|0r9xaz*@Ft-7nMGrSu9IZw4&>uQT#_z{(RdI9gmR*M@Gs`JFTyXfIj=lGGsWy38G z7Uno2{{z4M{S%brs4o}NThC$Zj(>T}4e6f0qq{lZNM3-bgqMj8j+}stt);oV-7W6$ z3Wv{g`2q_r7CtTu)`H)UM%f9tvYW2PjWd`3Z_R-Z-YNJC=e)NjzwB=(S7h(GC$9CU z&sCO3mDV=~61Ojlgv&z(#2#oDzK=(V>)e&x8z<1=H_g6E{Ps1WghfFuPWNL$T2EdA zt4nu^e6FFbTfa4cDT{S>Cw5)AR>in($6D-syER+sR_aMAgH{ip@4agU(`zfgr>v7X z$M1CUt7~Ba)+gRq|Dtn~6nJ?{P)=dyCNFK`;`6N~U!o@j-*P!*g3c=5ow}|3qNx~n zH)mh1xzLM&-c4A3I_^14n6>)&H*H| zM*O)7{xT%}TyX6&_VJqq9QJxsd%R)uP29>j6+gy5(r6m+4fVk}!oJqQJHnv{rMz?Y z{;6IidNI3y|1(@Ss49~(;(2H20bkadP=Fl$s0$w_g8j#h5&@zGu?(cJPOKC(Jb_?L z{*f)jWY*x~H>lk>8bb!*LE>CNbiu=M+Vu1EOs$CF%F@>BUW^mz#1aAjy36q3aK>KT zd|zAejCW>cvDL~hl)Q_c^<}Mlv-t^sa&#)&W%l*y*>oN4OHEl{K2Y@vzEM2ZS?G1) zMx%M5VfAz(-3|*!=MGZy$Q!tG0W;eiT;uZUnDzUwiMq2}nKohWY$F9yu~*AZ?62ORG*ro{=5 z)91;ax9riBg=AO}eQ2L7Qj2f(fqyp*^Lu+dn#G)2HOAqgI;z+0!Wp<=FHbQ|ADe@w3p=ie zkFhz!)-#wJF`b>)CW*d=gYK7%xNuUxH?yp0-8b>5E$EQ`gcH=a*M`f&8dplj&2?nx zPS@b<+yOHN&@TE)s`-nzgv4CPfNsEpz*YBTtRMz@z8>z1Ai`WhfsrqLTy0?f?|dWg zx7+0#p4--p$S3?|-pfyR|Lt4UuMH1elIQTwuTh=$l^AJ`iO=rm+M>?aQ`eI3tCPYC zK3li=*6@!3(Rpl{m*YTyN_+FSCwwu#g9>+t-K99~>x&cTMHz0AtwJ)?uW3TR=j-i8 z%xsUtjl?C7)Fndocjm+Tdhw^rxwbjru%%yR}vNX3JyQmhc@zs+96euL8ECr&$-Y*8F`vU~Q08?K5k5}{j5}hjxF9Bjo zPI!HgkAz=}{bU_a&y)1lU&hUgkMlyW+e{-u4g?np>QU!&@0v%SoBE_E>G4C2=gO*ChY2}SA_wyoWf2hbO82}aUH>fJuF}2WSitN*$@~6xdLeGVMb!@nF)nv)o=9iIWawVI9*&dLZavRutP#G` zxH9`=E?<3)dLfQntnZ-RDzTy@*j>FY0DRND%#GE}vH@f{kSlMA*3 z0e(Gq;PMx5vj72pJmaAf@(K`L%Jv*tJP&L;scU;-@iRbihHbOZUyAQIN!|~h8G&p< z1N$lWa8ge~4mQH(O-Y)ZlU&b$pAQdgCFKch3NWl@hfXni6QDfBLcJ6CPhmfM%irT- zwq&AzOi}I)58NOJtkpsg;+^GS83FureIZ1?CTtC<&XiHvLr%_{c5hg_>!7GIc+ykZ#_KVXc!o|qS5ZQiJ(ANp^6kDY*4Pt6QQ zumzuvfFBTuZkXXfKa8dy@7)4;ISH*G>HtRPpUvOZqBnxd%7mcF%z^^x9?!Snqui2m9jar`M{X^Y)8r}RtYM%rF zW?j9@UIyn+e&Mx&r(mhWQug zNvq#hYKsJrhk=`D+_mvIYTp8Bb~#6cey((dWWhtznA*JQwqk)m;mEFcN9F9)4!vfi z4AjPnru+WFdt0%ddmC`@e}L@YZHX8R+}q`Z;_OhtYp!YB7Qh^~G1`KPsfE)r@)%ik zY3id@HALs!J>oL0W5&yfw@9}SrTaTw1SO7sY|^&{jA2Ig+&*HukcP8EoJi^$-lL;7Zxf zI#!rl@V9L&jTwUKR)uHIa7h9&G1|o}rkk~*E_6h2x1%FU9{8_GAc2<|uHFe00~UBb z8S^L3EIz23m#i_OQIkYd@GhfZhXg)S&bIpON~La)tV(EEmI3_W7&^M+1IrE4`P4Wd zS7{)MYV$}rWvyV1lvj8ZQS=tyfUH2jjC%&Lbn995k$f%EMwb@b-Uk)S)Ua|7PN}(N z^cF(}fRf?;YHdQQN+OJAOcc%OD{+Q_4SN%)?}Etks^l` z+P-7}HfoP@<1?$F&{BpBQ%MFKE~RSqwuCX!hq_i>#yav`g#iSuS4#scpNZJh6}J2a z%TrS-*d^)md9c^xu@|Ws_2F!jId*AuenI@~{9<_kc4)Pezv<|FF#Ov;?c zOeHtnLG(tsI{_Q{3qI9lBa)!qN)a~RxFpqF!;ob{Vkl6I9Noo zuALs{5IW=0#9JXHPS^0}HL*ql%v16W9TyZSuE-2hsnHb?01y39>(5EI-?L1ZBpi(u z^14=yT`7p#N@hFezs;u#5WN+ zf7Ydlosmafjd(C8cY7G zCX#N3dKI>OMq_sw8bliiadK=+Vi#FbTl5SfeT;Y8+n6hso#=HycNio1D}dmt{|m`MTJ>o=RupH>J);|p=1`lOVUU6^FYDhUyA;25w2fG^Kc2?t0K&HO4EsQi8lA3B|F!3&k1`|B>1U zKF8(g<}8Q1LzkpxLsIwkkfMsvS>Td(`~I^wzoOGAo#@}GnBm6PVR75&GjwDV*uGiz zkxkfGUff?hF}#-zK?OAq`>uESo-z;Iv46E~lI&?Xk77KwrRw;jZiQ@=Vb+9r3N{XS zXZj11#g&!ZvG`*GJ?uknuqF;79VjL9$9yvkVSbcpCow6mu9ocqNKKg$Zmm`OViind zjAT6Th0TVshPpj3YAE#%Z@Z|(7$U9DzEmeqZ!@$q&ZJxK8NFg)CY6&V#_ygYw+jb8 zb)9mUUs!}|uZOVjVJtWa;5{7$?^T(?_c*pmie=&crpV;F(er6jsLFirWdVA zBBV?Y)=i_^HSJGCsqnOMRNbv}|NZnEutck!kKWb20It`~URtLrw%NC$mRqDgNHs0W zJL8s>A+p7AxU+4$dex3{o+XCgeYZHDFeXCMMcu z#C=n%h&NfXNF@Gy5w<=B3kd_H`=w6MCUIoVapafAe*7qIhEvd@0XuQune_j5Y%K`}*3Pb-1iDT139bj~}`^M}KhD&WtkeZ>~_RY0@w7C4nZ?)$v#38Ial{4~oHi=e*XRxNQJN#VDNn>HVwa3@OtJuL7+PsR%*W>wR!Okb6GL9rLT1g^=4S9=`CSW(i_tFW*wz@dOBlhCaMY&t_!&5JL8ov}WvT;d2}F3ho}9LC0bKHkd8hZl z$iutLDz{F^(m8GnzjBN?Zp6uetBu|;FVm+>3GOi8E1&xBfHN=taI?1AO$?Q_wuw`_ zn?pza2Ed_AyP9IxDRpfA7CPNS)b?CiLvp=vDuUT=kfffRi?GmCiRY%gmcgcBHh5_t z6tSsZS0Q6!$+4VCo^g*h0&8?BJJPU1Y$2bcxLvJGk6|Js+3IE`tt=@(<&RrP@X~>V zi;r(mTLuMv3wo8?(1mU*i!ieIkt z8!Gb0Zhb357Q|TXlwH+c;J_C*%2GS9%4g2=@P^wHDb?Oi3mH1A@70+J=SIzNE85mt3H3_PXk_>`n`Bq*hu5P$?y2twrGhn z=VV6%tevzTb~Hb(E7tDydtnk=D4RF0(0nlEI?b`Oc-%ET*VT;Tvf@lU8i9U%&!g-QmVl{4~G9bX{A%(Q+klOacH4cndj$)k%F0a83h}T5T`vZ=DXgDqQbk!qtg*tTAu@PKx(mLvh_s6M72B6ezIvzb z?Re<0np#_o*q!Q~TeA=s>d8aFlO`Y5ZaYynO2@8yF-6)B?*yvF%7R9($|8168x(%< z-QafSGk!o}Qjs-NS6TC5XjbECmfDhv-Y@y@a_J-Mtv+MDA!@jroLX82`yyS@u1X53 z!zS5#ooa8x97Fz z^F)pa@YR?i*1uifJYT9N;mEUAFm!dagqEz{+Rsi-EpfZs#5hMim>Vy5XG>tl5}4+c zO@US3oNMEmn58?Iu=H9dl&+{vsBL4*OdZBpUGvWyeJ`aA8II1R|GpAENnP@4Ua%-N z#^Y3LZ}7Z#Y&V^`xaO&vjvoyq^}=5JWG(I}UGpI}4$F!+p~h3l_brg!pqWCPc7UDq zf;5Vp6l+|}r7O)7gNrY_0>?5v{mEr2+R>a3NY2B+6El)|RxgDxa-xL&n+3+l6_50X z4&|N8KRdTvNd!?Sy1!F2z$r7EOBM;<0gI1(n}{t6?1=j(fI^CNaS7V&{CB981Eg=_ zs!kXNCv~uxJmF=oG>v(mi$yJFE|~W%`hWhnNs|JP8!tPdbbp>j0ggyHb4P zKzXDha6L#U0BNHp5SJ;=?VmBIshe};KJQ4*Oe7yJ`jIrzM9tL%)?rTQ%tKz;@N6g} zlq%ZZ*8PFt9{p^}eb0Wf0RxYNlMs!l=6%RvpIF9yO?G+aUJ6z-=ttR~xJ%L<%nX$F zjWm}#_oUlgXS`vpB2y)_;S-!?T@Ji07{%dRaYz-;_;hN(QXRnj+R|JYPR=fhwdq;s zvQlU?NXeGbtO?Rsjip_Hd7O?&Pp1%C+}dt(+C<^q-pS8NLl`kg_UBn@aLY5p|Y7<1ov(DDd$e{8)474PBu`OgDRQ2qhX1wa&&*r5m zVoT!looxcn&m(J&lD7xZEM!8(juw}e%?3j3N}tk3D#692$-%Y~VKBLh3qD&g22TJe zb$`(KGu|++8YTNk=!_{YU|hx@NY}R<)()5Eg0Bk9sY=BNeZv^{IV ztc&*Io1mya^aOWfSUodk?@kP}8Z+%(jTR-2fUoZ``7N`0Y@QPJA_ab_O3MdpJ_|9X zy;+rfH?|O2D!gWrpUAK~(P44t6F*%WKb20lHt(d`q{%A%y98n4#a4EGJ+;^-nMT!v z3ow>OhUHRgjWc)~Akwqh4VHqX51{%$ly)q?6r3Zef z-=Iv8DuM1-^zPwQj5orK77O*fEnBz2ti6dp?06qt9#BS={f)w$tdicKP0ex$dk3+D zYom-0uv30PbvinT^1XHT?}}7TASJU2m3$y6W%|{Gk&{3CCRO{=9+tiVcdgbcYD*QC zA#Pa*ym6}o+d;(*$Sr8AzD3nQ)!jVJ{oqtVa1t)GTX{F{e@cX1Sta-`_)U6(<++(T^Kt1 z5ivEI*d8l+b>zpm5?8&xqSG36I(;cSoLA(dF{-|TV@)hp+HlWqMe;-sv90K&)F^y7 zM3s12EsQ_Fx~tVR%^x3!FfSp9DV#^6m~ZQ@s zbZ#$CM9D3#(T3=*QZY6I5*{YhGO%wy&vUfQUlg>GiLX`YiT#cp3O8<=_?Kllc`LPT z(6(u<3n?>7{>7ohEtAh*gD@4LwtzJKEv@RYdX!Bf_E|-uYRza6W^`u5>#J$LsBK)2 zoH`9AiS5WB-BC;#pLnmH!4>sGF$lM8T<~eZDgu3N5bzvR)}nHrM-?2}ZA0u9Ln)7V zhC^mce{T1)<1gXRL3~jXu4R>LHeLBMOIdIon%PwLh_lylTUsq#mrnre61AYes5cs$ zFoh~B4dw`3^pDAjvKVU+d=MQm!9nj)k=F_sD0pmh90a-NT?n+?m}*X-WvfN7-`Jx=OD_7WZ#bBsF=nAGRAf> z43S! zzO+Bn5t^C2D-`?&xFkNKda}X;LV&>;@d*`a$@4|TyyEMs2>W>BjkD25vugpRkFxCs!u?7=jPKr|U9vXC9 z#D{m<6G8#k3p4CEj6B#btNPSHZEpW9bVo+8;GFJC;P^S$i6BO)DMOyXPOc@dd}p#7 z8iNP4qd!yv<2pyZrKp^t&8whT)?=gSm4Vx=U_L%m0%;Gq2V#P8`lb|5x+Cv@HWnTP z?0_uzYu5tQ`clj3uuY>cprqC&5I@%%sf`XyuVDhDfHt`}g;zw8P)2feF)!W%l^rJH z&kkn^&u7or7x4m6c7oAJYaKKWv?6^T0#3d^QSd5X82kgFt5`YTd|`HqoRP(k|7Zp*F!bkBF4O2!b$9GrNQ4Sv7?kh>ld&5PTvh&I&?<>_oLm+o8^c@7g~DzKm!pW^GR~RW{Q<&K zF_ub*@kTCVtV_r<-Yb>M?9m`OMp~Y|LQ_UgQ{>{{Mgz29pL(T=w!gF)_G3^?q|E{> zH1?UZr2`~|QHx~A06!}&`(ayn=43Hz<0w&T&z(lZA4CU*1d6Kjs&`Ka7Tno8e;z)J zQIfyMB)EX`P!4PQaxqXR2G*7ydE8RkG-gA^-O$;!wl*XYQMH5@w9&&jLI#5d#Pyn+ zJ8m%IEiP)pyL}PC59fw^OS~G!PhgFRmE~j$#b{7uNa-_!M3hlEjzf$`c%E%?tB_v^ zL!KKK&Zhnakzen9*NhayF8+xOB$JoQ;9zE#5mS208SL$_L9A*WV459xp(+(a4{57{g7+&oCG-I-&9Rg03KX)4 zuX-RZ*6{sL(){ml$zVtPxz(D=96{t_QFCS`S5z3_CzJ?SbTV#29xvf_DAr!|nfure z0{eP|!aQvkv63++ixd$oEO+biTzhTteAmmfc~_0`T;Fj#<7KTl-$JuJl!fKD&hUM4Us?9s6WUPgd}l8AoY(` zBXz>X(ie(U==R;2r0+C5S5^ZR?X0lME#+G$8~d<aJr1%p_TGRdN;TNs^(w_M!VYl4qyOiPZk04xmFLnx;9p4<(0nPHah# z1gaSnv7}EM1uBWi@bq>-CK{$NMSZn?_k>%OA;(~OeMlSV=?rMsX;Oo}@+d*E90`mMC<=`ptdvoh3+~CUF*38e%m{6_Oa>j$@BMT}{El z0xOM;X_Q0B@2BKP$|ZolfGQc7*i!pPsvyA}C^HjO2GyR0OMt7LHAF%N$p0k-?ivCr zP&H6)MzK$f7wA=+7@Rg^YJeiKUJ{FuAF)Hm^w0pvP%V>$uaz~*>5p{jV2CsE&D8xX1=ygB#*s+A&?@3I2A66)@%DYmA%t;*( zfx%)x{GF_+Nb9m@;WYL2uil0z)6vDYrzaw(nvN*pai^sNhP-J)i!$^Dicls71oJ1K zfB4Y>QSzV*OM5_^Avle!0#VLIC~B$x$q&g9I>ZPuu7ve9JS~~@iJzLl1P9&>>dp@mOWJ1kwoYoI!Q_p#Suaj zv}l3fB7w+U9;~fEiw-W(Cg=b%GT=^7i+%@BCMIZ1hvR`5FiJ>f#al`QLs1NX2;A%m{zW&XR+4q3 zawO(%+*Bjq#A`5VL*!3i!`G|FJL_b&=PN%@Banli|F0PEe{k=A*!ypMHw(xA4Fcz2 z`|oaEUIt|kdlMoCF*{pl7zQO5L+Aezl^tD7{tdt|2pKq;{2L@x~ISZQ`I1;fi!!XDg{I|f& z#sn%zJ5;#7SIflA#rfZUh*?;hFcUE|{`2jByYQc$|8_yf#MaE&{9Ef^1S$SI7uL=u zj^Ag_+Q8XF#N_(`eV?=cC@~Q+Gkx2BZ-$ezqltkHjC|tzLgV%7QKm;XOIk;0 zJWCoW7`f>!QM?3^a3XZ@HPjD5h;Y+e;s8NnXd>!(3}URCfN(_b`B$y7=FUejPxOw) zgUz$X)9U7h@=D*%O6AIG5XG|~#GQRTF91u@DCoo0(}wSpub!OaqlVW-mJ}PG-AS&j3n%~t<6+ZN#g?+p)1hak{_tnpgAUKC z-)#8?Wc)O^KHusLhHa<)`&JN8+RccODkSl4M*cEV{R4s!of}N$;aMOj_vL0l7*38_-8b=3S6DaLP@gASn zswexWNhHBr91xV+k656EFiS8I*e&-2JL2tW`g;^s|8r+gMl9Lrc2A88{rVu#UG*t! z#HwHsiPyuBFWb~ZICOC*utW_WF;-wo0{v&uLi{e+HALY3lYRh;XFMQc#|12Ny>F-9 z8=o`b^1L}ouzC~Z;vMxJTG!;*==2)Y9+4Nut|vy#*go4iVY^w2=8^cJAaEa*A?PSc zaW|@uOeDBH&pBcsvX;2N_!>DgbZhsH`0)!0b6am`4;o9F$?85)bU>QEkL=kHZ$tVS zw7`FPN5DV;&p(S1Xz9m0RR`f%(2b8(V=IOm z`uRM}Z6=W^b)B989cJMigga=QM0y0Rzzg;hG`s(i{YA;+>p(V@5c|6teAZ#+VRvvU zo9ZX<5A4U@yW`w(o}@zzXpl&TXtc3^EiD%>Ab-CX6B% zrfeTV7Ii(~C<<5|@@^|IrFlD$X^4po6? zuG3Dgtk-OPk~qi~Rfb7lQbq|Nq|D%GcAi`y8>}}&pP;23nYugD{k@mL#OI}{Y8uM1 zK~f|uo3$$^DJLakKghF(=bEu#$c_!~nWai{jTeBINJ^%{3dSKZiY}YDqIJ?3mFRKu zjp2meT_>m(ro9iVQYDH#oDOF>)+AMQs=LGOn3yvKskOSyJo#gP;$HX(x7k_@y2 z=n>xlqz0&vmr&3=?opgqPj;cLk*qhi;hS9ZM71)+tUYyWOT_WeAkT2{LZFy)tqL$x zIN;Kv(KjR6Nr?S_=#Q8SMMn_Fi%uaiO_9KDkN1{`aZYPZdpjtv6LoS(1ZZU-U90A8 z*bi_qI~qRE2Q2^Su|OUv6^ukmY!aHK5(>{!B%;=v_cAz-r1P{q3EVo7s@RU=NcZgT-+eL>`7BPC%&V_vzl)HC!XAn zEEby@=g~v1wUE;rf-FqFjwtOQ^lANFpRrV_V57I!C+{9A5|`yPmk#15N+dtl{jTK* zZA)%u+W?^pZq(4J>S1P2rNOULyUm;d-Dg44Pre}6(f1I@&Y;iUH0wOezl%li%KPvJ zWv2E)obFb*N)JFv@Ovt7wj~7|S>ZE?G!BpHq55GQoOMLhu|NPW*Q#L>vbW=b-d-Yf zruE2K8sfd4@OM^-bV&du4!aw46-AI2sr@gVZ z>N>C4wh z8mGx4eT`SzmYxbq)N#1Pm(Pr{ZkC-|k{;bQ&hx1limOv$nCQyauI)jInp;-0RvcoB z@ec7#)c<_LPM(NHAEi^Bxpf3757er|oMRQ0RAtvEXsG#P0)IFRV|-bZ))&ScltrTq zYQS0sEPS@N$TSR9nEHx^YoqzP*tN<6xUDBu1E0tw=R9 zOs<%r{~NEtYf#UNtX+OqnKjcfHB_V>bPV@rdI*0yo4Tmqg-^otD)fzOM6wiVz%H;A z70rpaArpdFkT@Iyd+7{%c}g2_gR4vh?(A}BNw!w5+ki)DC_{Z>k?QF{a8@|7XOB_5Nb zSLX_!H>j&&sISQY1xT@Gv_Anj;i4_HV=1o?3sQr&Y*F6@ft7#H?ERt;Tmd$Gj;6&o z)MyDw;R94mR*;YpY&2@yGxJM@nklz%{v14}K^6Vhav(J^X)-w2XD4cdnUvI6OP zx1;gNZ!4VG4B+Bg3{2``%=C6bc-^ShV5^GXMT!)=H&Q4{y3UBJ7Og2l{F<|$B4_#( zp`!}qD|)!)bKF#2MYfe%#JS~2ZfJtbAm0I>k-lE$-N}OErtp_Kz(X`K8TcB0=S6&t@g@?Grnb-YH+u%XBo;FLLlC}X`OxvHAMTbueS)!U!m3GU zu1wB885d~@Y4^$sDRp4)-V$|tlv-`2S^N1^kV%suKla5G^E@^p)TNscRJ_hMjmwC% zqYy3`*gotK<_hh#x^maQr}|*=3t;-l>$6_KA9Fg_lU)p=Dm)|vlvN{5>Jd!xDMp>o z;P}e`T?L=ubGOis2t8BDX}_HQ6%+KnuqHDWL_~*#O*94y#d`XpFqN&2gL^z2c|oKP(81`K0V*NM{sIzO|fTe%^@IHO6Y=&?cDg$0Vju!n_Q$RE4Ro+ zUK+E;p|lbDgt30&us*bbaFIq)c?ED$ab9B$)m7tN{xoH_b{ccGm{-QF~lh@E&sxNAhToB;6~7 zu=`iEd@3?L=9>YiPod~gPD;t!dPsxX%sdHob%~fIiHoVDTit5v{NHn}MYjF zcb2MS&7E19XAGHbn!YKZlYg|jJ2h$P=$&;wHv?kpdI(2dSpI&Druv1=ZYk8a`y@y+ z>Z;(}UlZx6al1`SnP*n_pJzsN(FTGB#Me?5hVS`^aAcV$>WpT_qX7oetOxW(1C$ue z3}Bcn;9Fzie&jNe(fzo%R0!-rW4{)mM7u;l=T=g5WO3z|xRjd_gbV#fOBseXcl$2> zyaSrB^UE%z2gg$nOFl1bE!VEchsGkfYspJ%U2mwU$V=>c+ zT^L{>BYUCa^&qy@>PT)vtG4j{hOok8`+$z`OFgUBQI^u{G2P=tL#5KB+}0wy^|4p) z!Pd)&9a>q9LWV{v=U2ml zael}w<0L|@r?(1GLL3QB<)MPan30%ei;f5Hjz`dD?>r6dwK$9tHuZqx@D4J<=-B~a zG)o9ze_Srx_aiUgHLicY-T(h8?z`i$?*9LiQK%#tB_(?l*B*r14%wsZeaW67vxsD7 zWQGu#QC4<#2sf2I3YClyk%;fPx)<;3^LYIJ{Js6d^Zh#Kyv}Q$!}D=57*}I^mHv^Z zbgBcjU4H)pLkEV5wTgp0DTlZ9Op+Xd!9fK4AAr#N^7Eeg9jf!#A72C_I1|XaN;OiS zsfjY2ptb6byp&o^`|Xy`%tOuNM?B3|YBDGD=;jtv zaB`Q>4HHJX9>WHUi@R&tRkHS7@vFW4xx%M*Zuu)+ZqrMnIz+DRWf&8QydGQrke@r+ z#A3u#b1L9?;sQ@kCOli@UYP2;#}lmmTt|lNn4WyBzyHPo$^G)y38ofvr7GPe3H{7O z$H#?Rrw{g^QYLi>`h=Q+0sB$=n&x$}l#D*M%H@u%UiSN2JVLQh5lcbqb?_MUHZO8*SYI<^rqs@B2wPwU`Cp> zgx?ef!HHd6QU2U-)rsz=n;NcE^H&5Y$cHcK;8NzDUd2DU!8&$V znyTi&CowY(qZ0{nac!;E8=*dDdsoUPWN0D<+_*4^I-%37L8UabQwHuw%*6GMIoELP z3cc!$)-at<>D~P_RnY4&bYgC#K5ua(b+pp9$Dsbh3!k0Wuvfy)w|nB3c9wU>J;qcl z4MGs^1qh}?Io}+PD&{D#3l((Td7iw0aXLO^UY^6f*jL&gz8=}xdbVr~Ms7ABX)4K) zrXIp^pX1@57bSSz>b&O6o9cdUYut|O6#kBOcNpy-D4VXxYFWRUbaJdGNZ2}|?CY<_ z)UB@~nTiiWSEgR3X2M~tC<>g}z;)Cm1unX~CyIWy+-3gsWz$>wCxz{{@A-ndD@tX0 zQ!jMGyTYcYreYX6jAD(8Mz4vUez!=$+Mp-Cx_bTaan*n)CKa^Vhj@G+h6Uf!;eBl6 zP|ncI@T;=HTT)#9`Q)WvRogY@VKv<|v!mrp7kPSwgFB9FhHZS>8GLG+$o3KSK_m`G znUm3iq#6qLQw>Qs>nO9-Nar0r@y5XVuC!1M54@wh*(lb!n#Wi5%t-8MH2ic+mX8YO z$o(fruiKU@>yb_4ge4fT(jSk&3NE8-Qj_YghYuGwOLqzTmrs9KlHi~=+}#}8qA>dP zS-15%TyD!SIcH}ab1^>O0&M13aCOcn4=mQi*NL6suJwI zy%)b#RGel?k1}F4C?RwQ1kKl1%Z0SO54PEbiHvF5r{o8SBzqUVM|Ox6k}g`D>4-?na>Yy>o=bK zI$q}8AjnIzylR}{oa$28_x<|4gD=GIXLUJ0rlsB_zjJuA$v0#B&h5Ckw|CxdNl~xI z#jQOgvy>gb5>r3;L1N2*tJ`d@Bu~`RgC^lb$*}1&;hY0+;ItQ~$uyLbFVpo+u@fxJ z6pZShd-s~9cnF;vt~JyJAG)#hEt`&Fz8T+GU04-inU17o_PrMWt!x+>gLrE6 z{-SMhT7_M2)PUFrp7*`o-&MQQk}Z@jwWtW{gSQu~FY$kHD&Y0} z^xlAHBEGeE%6U?lOr<^LE&H>>wY!Yf8`D+_+qs%L$MIzE2hNSp1$o_!@=5nee9M-S zPw%Fge&YR!r#Cj^Bha)WRjF%^=hti{ld~2l8?ZOG$}9SN8;h*`IW{{!XG>)CN_c*y z_9%;Q`tRX8 zD$9rOEhi3;h24qz09U5I#4|=QPeI+kCKuA&TgTnR3}g49q7Cw@UFp!4tXw|Z6!Q6( zC*2?TbecCo+MUey%K}#&0<8GI9h^uvJD=OSCHA`PsHcC(`UAC?!2@N(p1Wkd2E|!a zgXApBj~sB6Cbe`+O0x%Bl2)ekH*2oX{5mjj=BKZ4jv-=$^Y}__vGk##Mmp>?P4TJ0 zjFWC|^bNH7>udr-X$q}K(P7=FrZcluM;Jey59(4kJx?|8$BDUumwI=K)lJ##K2+qD zoF&`>|4*ePbW1JhqRvGL)u5syz2x+s27`0CTBc+&@@#?VwWERNVKlU`R%eF5@{mE1 zubQT0F=yzIi8e(Zm$IAqN~b>`8Q`2)@YD>VOq}zKYNXP_@keT!wjQG?9Fn}vD9TrI zoLtad&14V2pI=P22o6G-O*-MCl#Y+xFAJ-gmPvcvYUF8Y&&KAJ960qQRQa`5&ziRu zi>1=l1(WOvRf&wIgO8syyfhJ=UVTQRDW1Tx@OXVKR3LnPjR41`bxx-~Y2u6WfCn0e zL~Xc(IdmudsCZ#Nvjnbu@$Y=Eui4&PC>-0@Wm%JXNG$Wi}!q=1Ig zSMEe0GS?qT$cO#JN5HfF<3JF~^6BzcA`qgLvD{PnNnhxL1<- zY&U%E6H7xPr{B$ktIrS6nv?B>lu(FdP*%KGc*4BoJ}YfNDW(7DZn&&9W*7>C zrItWWuRmAB<1!hn)-xG(O#HF(;f4SVLxo>m9C_J*zOk+b1&wM^XcPR4pqqVEb zuN0nXB!0QVS@^(O#{PMu zB5>1SMco+nmE-Nn!S1q*K1pP8M60`C*1Y;O^6sz$Qvb=_o7a*?GhM7Tw@lk=?rz?* z8EbEwEhO;Bw=|iXKT%E1kogwxoVcEQ3_sbaFIG4i>Z(_gp4A2~V(hHO_uXi-`Llz= zRLEKl}5ao>iY(S`NIE>C28PV$K`YzvjMVvhpTEXXLej-jC2^foIHT8MPHH z=XCUC1t}*wU6k_Tv_?X(oIZS(%w2y9w&y<2veOYmHi^ZYPtAW&Su&z5==j9uvq43} z+X5X2D|Akn^{HpyW^;Q?)2NXzv?Bsn7(MKGEaYuNG$cocA|(fhUIA+Estt?tTdDbI z4#cOcH;qJdLRGJpdOX%!le@?i{b|=KeLH?D24{IBs+In%nGGr#%dWDb$z?M#yrG0-gGHk&I+Yb-c!1Y=K{|sfeTcM&sqhC6m5-qwlU< zkq=(Xsc-OG206^+FLSv3MIELLju2*@I?mI_iG@DLzby7!v&Q~q{ ztoraG?ohg4`R(4i@out~Av51+ul-!ti5UODc+uP=xeqR8c5m@@WXg`5gq%CMm)>}x zUd~0i0G)w;wEV(zGJZX?^~n0-ymrNpj+Uoo+-nQuwVgkPmq#=*r0!x%#W@Es|T{F(hKtmmi{xjtvem=3H{q|KY!jCmTF+uwJJF+}&CFO9H?wwkUZe~*TE zw^o67CWp1yRBLWxGKpiX3_L5(dns=tPvqX9evSBRc)Aku6Ev00eYi= zjey+6xoZWlG?<(1%NBJ?SLg*~8#Zn98!uFbe?RG{RbnKz%E;EO?yK9r#!@q9!*owl z4xMgY%W?X=_60A-FPwdOh0iX?ov;*}8@;B>p?=X%Ig-zSV_HyKHL8-f{HG6rL0~X+ zw)5)L6<1gOEmV!{uajasn%`zuyoMAnT%#9HzU5+382T=K(TeUM%mWOqFQ<@^|lx9qlj>=M)_;Lm?mc2JZFpY8jl4^)`B3+x1>_t5WID`TYxI! ziPkc$?$NPeZ9B94zUlHuKCvc(qLUt_t0O<~4C<{TZX8we5wzA#mrNto&c8kp8gvVG zHJ4totvBg@esHJKH|OpZ+wkyrB{t)M6{(lw6V=V`dUy(dRhiDsLgZ}k z+Q4e#b{ZU}i;Zs?<7g@3sjW(m9`-+0h`OdYA)b04_whTnq-rIHVj}{}-SG2t(`bcx zY2Klfrw(=)2NfsBv085>#mNEB!MN|NCDuzVIYpck;{$LfLq!+IrlX76WbpHqT1 z8jCX~uZmvuxu?Wm#P?9b!8wjXO~U<6fIg%J%zmg>Q42 zd}5<<>!I*+{Tpq>s`0DP-LB2K<)=RJZqi~CXTI;%|RNnxTR_;RD%q9fWp zjk}RU+!h{>zDYK2)NP^b4=pkK(2ezOMvfJKANL=crIq0NaaN>d^Q$=5kFO%RD{Plq zwvMs6XAkSQFgY|fKU}JBt|;@STdns#=E^tr<<@s6f_q1P^Gs{=OtJB7Vy!V(wbIZV z8$rB+h=RNc)za4LqxV~$_cz8vd-bWx>l^E+COzC4jCX|^D_NIPYuxG$y>GU;s<>*n zD6ASyjYe&V*E&uVtQ=i<_j7&W-R4-Sp+c#_Q;w@+R}zZ;v=nkW_04eP67!OWbSgn&SHO)0jm1*4)E3H^0SA z{a*hYM!06WCzi^k1l3YY>sTLN1yS8|P9uaLg?MrO>cQj><;u#Xq1F{vmlIL3X)ntO zDdVOX7G*+_isL8Bh*O8H2EHj+W9q|=+ZwuQCj%>QyT)oM#R#=dJ?GV%y5ku(sqCU? z6-P)QJRrp7B!p&bDvf6=WIyeHp`o9bp{3uMAZ2ZDDi%Fu^C+j@z$H@vE!deYW!z0| zR2WO+gO15?w{JdvzVhyILFX;i=0~!@82zaHh7JClya?<@yId7}n@0u9$tMTzK6SIjq#MyuEv%ypZbA{~#It#cLpP9dJk_=3f>E z0)_x|hrcNhYA%izH_QR)fltlF+QHnC9gY!#vm5Yvcz6go{YE_P?S#x7?G5<(X@s?` z-2h30PfbHrQC3>ZSW{bBSyDrne-A|j@tg9qpI?Ckl#l;Ot@w-KbWOvO0B9f9UY3A~ zfdYIG2MbHU?EvH*@P%YYqS(=Z*#lTR;Ab3y9RnC1SHWxITf@D449doPWC1YnDd-kt zliD(BFPRrPeGPUWzykfZO`A9?JR6S{sQ8L($4S0>uP9_>-^xfoX7oLDi2r{W*3$)O3^*rn8rZ)NATObjXm$eozZf7o z{eH{t@DBz@0;&@PLn2{VD2B#jNyg$a2*6SyKL5@Kha*scqO%`EqKF)){TLcd2*t1{ zK(>O&;oy69h9lVj+aPYw;wUUT^6y>3L0~~PM7Ak?4X) z6S-Q%=bzw!Cg~47ziQ+i5wh7WZ>%G_VgooD zJka?-OhV=Z4k1#xAnRhWa1sm$+Z#1F97sjXKOur7-8K&R89FT;hz!JiCIgvGBvC>!^qx#0z9WV!$hCcP0K-8|3p@pb>IcFaL8ML+ zpMPBs2$w{H}Gy)M=m}Ng5L| zsDA-QlEy>~nzF#5#Ss0)xaKxRR6AC5xdq5T!u6$VL~zu4ad z>V0Do2n-4urvQVNRiH5z1GOJWBT(k{>jLT!kwU$14J0U{P#YkTNGypQ5(Fi5EDDB% z`VxtTlk69CLz4X>(J0dSFmRGMMFK)L)P6_|mLvy}csv?fa{xxNH{f4r8wUObMG>+$ zfRWf9!~wJifG{Af#Q+0`(EWA>E+UC%5LQI0`#ygF4B8IiAdjGJ7>-7u5KzAXjHJeb zd?Try#7+v0Q-JMlkwl%~AoHPZ9fUKSBnL4d;h;XkAkido0FF;2>w=RjNxi~iaU^vJ zR1yqyzW^h#6*!I|pfQO)G literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..d72952b --- /dev/null +++ b/README.md @@ -0,0 +1,410 @@ +# Yinli API + +基于 Golang Gin 框架构建的高性能 RESTful API 服务,集成了 JWT 认证、Redis 缓存、频率限制、CORS 等安全特性。 + +## 🚀 技术架构 + +### 核心技术栈 + +- **Web 框架**: [Gin](https://gin-gonic.com/) - 高性能的 HTTP Web 框架 +- **数据库**: [MySQL 8.0](https://dev.mysql.com/doc/) - 关系型数据库 +- **缓存**: [Redis](https://redis.io/) - 内存数据库,用于缓存和频率限制 +- **ORM**: [GORM](https://gorm.io/) - Go 语言 ORM 库 +- **配置管理**: [Viper](https://github.com/spf13/viper) - 配置文件管理 +- **认证**: [JWT](https://jwt.io/) - JSON Web Token 认证 +- **文档**: [Swagger](https://swagger.io/) - API 文档自动生成 +- **测试**: [Testify](https://github.com/stretchr/testify) - 测试框架 +- **容器化**: [Docker](https://www.docker.com/) - 容器化部署 + +### 安全特性 + +- **JWT 认证**: 基于 JSON Web Token 的用户认证 +- **CORS 支持**: 跨域资源共享配置 +- **频率限制**: 基于 Redis 的 API 频率限制 +- **密码加密**: 使用 bcrypt 加密用户密码 +- **中间件保护**: 多层中间件安全防护 + +### 项目结构 + +``` +yinli-api/ +├── cmd/ # 应用程序入口 +│ └── main.go +├── internal/ # 内部应用代码 +│ ├── handler/ # HTTP 处理器 +│ ├── middleware/ # 中间件 +│ ├── model/ # 数据模型 +│ ├── repository/ # 数据访问层 +│ └── service/ # 业务逻辑层 +├── pkg/ # 可复用的包 +│ ├── auth/ # 认证相关 +│ ├── cache/ # 缓存操作 +│ ├── config/ # 配置管理 +│ └── database/ # 数据库连接 +├── config/ # 配置文件 +│ ├── dev.yaml # 开发环境配置 +│ ├── stage.yaml # 预发布环境配置 +│ └── prod.yaml # 生产环境配置 +├── docker/ # Docker 相关文件 +├── doc/ # API 文档 +├── sql/ # 数据库脚本 +├── test/ # 测试文件 +├── build/ # 构建输出 +├── Dockerfile # Docker 镜像构建文件 +├── Makefile # 构建脚本 +└── README.md # 项目说明 +``` + +## 🛠️ 快速开始 + +### 环境要求 + +- Go 1.21+ +- MySQL 8.0+ +- Redis 6.0+ +- Docker & Docker Compose (可选) + +### 本地开发 + +1. **克隆项目** +```bash +git clone +cd yinli-api +``` + +2. **安装依赖** +```bash +make deps +``` + +3. **配置数据库** +```bash +# 创建数据库 +mysql -u root -p < sql/init.sql +``` + +4. **启动 Redis** +```bash +redis-server +``` + +5. **启动开发环境** +```bash +make dev +``` + +### Docker 部署 + +1. **生成 Docker Compose 文件** +```bash +make docker-compose-dev +``` + +2. **启动服务** +```bash +make docker-up-dev +``` + +## 📋 可用命令 + +### 开发命令 + +```bash +make dev # 启动开发环境 +make stage # 启动预发布环境 +make prod # 启动生产环境 +``` + +### 构建命令 + +```bash +make build # 构建 Linux 版本 +make build-all # 构建所有平台版本 +make clean # 清理构建文件 +``` + +### 测试命令 + +```bash +make test # 运行测试 +make test-coverage # 运行测试并生成覆盖率报告 +make benchmark # 运行基准测试 +``` + +### 代码质量 + +```bash +make fmt # 格式化代码 +make vet # 静态检查 +make lint # 代码规范检查 +make check # 执行所有检查 +``` + +### 文档生成 + +```bash +make docs # 生成 API 文档 +make docs-serve # 启动文档服务器 +``` + +### Docker 操作 + +```bash +make docker-build # 构建 Docker 镜像 +make docker-up-dev # 启动开发环境容器 +make docker-up-stage # 启动预发布环境容器 +make docker-up-prod # 启动生产环境容器 +make docker-down # 停止容器 +make docker-logs # 查看容器日志 +``` + +## 🔧 配置说明 + +### 环境配置 + +项目支持三种环境配置: + +- `dev` - 开发环境 +- `stage` - 预发布环境 +- `prod` - 生产环境 + +配置文件位于 `config/` 目录下,可通过环境变量 `APP_ENV` 或命令行参数 `-env` 指定。 + +### 主要配置项 + +```yaml +server: + port: 1234 # 服务端口 + mode: debug # 运行模式 (debug/release) + +database: + host: localhost # 数据库地址 + port: 3306 # 数据库端口 + username: root # 数据库用户名 + password: sasasasa # 数据库密码 + dbname: yinli # 数据库名称 + +redis: + host: localhost # Redis 地址 + port: 6379 # Redis 端口 + password: "" # Redis 密码 + db: 0 # Redis 数据库 + +jwt: + secret: your-secret-key # JWT 密钥 + expireHours: 24 # 令牌过期时间(小时) + +rateLimit: + enabled: true # 是否启用频率限制 + requests: 100 # 每个时间窗口的请求数 + window: 60 # 时间窗口(秒) +``` + +## 📡 API 接口 + +### 认证接口 + +| 方法 | 路径 | 描述 | 认证 | +|------|------|------|------| +| POST | `/api/auth/register` | 用户注册 | ❌ | +| POST | `/api/auth/login` | 用户登录 | ❌ | + +### 用户接口 + +| 方法 | 路径 | 描述 | 认证 | +|------|------|------|------| +| GET | `/api/user/profile` | 获取用户资料 | ✅ | +| PUT | `/api/user/profile` | 更新用户资料 | ✅ | +| PUT | `/api/user/password` | 修改密码 | ✅ | + +### 管理员接口 + +| 方法 | 路径 | 描述 | 认证 | +|------|------|------|------| +| GET | `/api/admin/users` | 获取用户列表 | ✅ (管理员) | +| DELETE | `/api/admin/users/{id}` | 删除用户 | ✅ (管理员) | +| PUT | `/api/admin/users/{id}/status` | 更新用户状态 | ✅ (管理员) | + +### 系统接口 + +| 方法 | 路径 | 描述 | 认证 | +|------|------|------|------| +| GET | `/health` | 健康检查 | ❌ | +| GET | `/swagger/*` | API 文档 | ❌ | + +## 🧪 接口测试 + +### 使用 curl 测试 + +1. **用户注册** +```bash +curl -X POST http://localhost:1234/api/auth/register \ + -H "Content-Type: application/json" \ + -d '{ + "name": "testuser", + "password": "password123" + }' +``` + +2. **用户登录** +```bash +curl -X POST http://localhost:1234/api/auth/login \ + -H "Content-Type: application/json" \ + -d '{ + "name": "testuser", + "password": "password123" + }' +``` + +3. **获取用户资料** +```bash +curl -X GET http://localhost:1234/api/user/profile \ + -H "Authorization: Bearer YOUR_JWT_TOKEN" +``` + +### 使用 Postman + +1. 导入 Postman 集合文件(如果有) +2. 设置环境变量 `base_url` 为 `http://localhost:1234` +3. 在认证接口获取 JWT token +4. 在需要认证的接口中添加 `Authorization: Bearer {token}` 头 + +## 🔍 开发调试 + +### 日志查看 + +```bash +# 查看应用日志 +tail -f logs/app.log + +# 查看 Docker 容器日志 +make docker-logs +``` + +### 数据库调试 + +```bash +# 连接数据库 +mysql -h localhost -u root -p yinli + +# 查看用户表 +SELECT * FROM user; +``` + +### Redis 调试 + +```bash +# 连接 Redis +redis-cli + +# 查看所有键 +KEYS * + +# 查看频率限制 +KEYS rate_limit:* +``` + +### 性能监控 + +```bash +# 查看应用性能 +go tool pprof http://localhost:1234/debug/pprof/profile + +# 内存使用情况 +go tool pprof http://localhost:1234/debug/pprof/heap +``` + +## 📊 测试报告 + +运行测试并生成报告: + +```bash +make test-coverage +``` + +测试报告将生成在 `build/coverage.html`,可在浏览器中查看详细的覆盖率信息。 + +## 🚀 部署指南 + +### 生产环境部署 + +1. **构建生产版本** +```bash +make build +``` + +2. **配置生产环境** +```bash +# 修改 config/prod.yaml +# 设置正确的数据库和 Redis 连接信息 +# 更改 JWT 密钥 +``` + +3. **使用 Docker 部署** +```bash +make docker-compose-prod +make docker-up-prod +``` + +### 环境变量 + +生产环境建议使用环境变量覆盖敏感配置: + +```bash +export YINLI_DATABASE_PASSWORD=your_db_password +export YINLI_JWT_SECRET=your_jwt_secret +export YINLI_REDIS_PASSWORD=your_redis_password +``` + +## 📚 主要依赖库 + +### 核心依赖 + +- [Gin Web Framework](https://github.com/gin-gonic/gin) - HTTP Web 框架 +- [GORM](https://github.com/go-gorm/gorm) - ORM 库 +- [Viper](https://github.com/spf13/viper) - 配置管理 +- [JWT-Go](https://github.com/golang-jwt/jwt) - JWT 实现 +- [Go-Redis](https://github.com/go-redis/redis) - Redis 客户端 + +### 中间件 + +- [Gin-CORS](https://github.com/gin-contrib/cors) - CORS 中间件 +- [Gin-Swagger](https://github.com/swaggo/gin-swagger) - Swagger 文档 + +### 测试工具 + +- [Testify](https://github.com/stretchr/testify) - 测试断言库 +- [HTTP Test](https://golang.org/pkg/net/http/httptest/) - HTTP 测试工具 + +### 开发工具 + +- [Air](https://github.com/cosmtrek/air) - 热重载工具 +- [GolangCI-Lint](https://github.com/golangci/golangci-lint) - 代码检查工具 + +## 🤝 贡献指南 + +1. Fork 项目 +2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) +3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) +4. 推送到分支 (`git push origin feature/AmazingFeature`) +5. 开启 Pull Request + +## 📄 许可证 + +本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 + +## 🆘 常见问题 + +### Q: 如何修改数据库连接? +A: 修改 `config/{env}.yaml` 文件中的 `database` 配置项。 + +### Q: 如何添加新的 API 接口? +A: 1. 在 `internal/handler` 中添加处理函数 + 2. 在 `internal/handler/router.go` 中注册路由 + 3. 添加相应的测试用例 + +### Q: 如何自定义中间件? +A: 在 `internal/middleware` 目录下创建新的中间件文件,参考现有中间件的实现。 + +### Q: 如何部署到生产环境? +A: 使用 `make docker-compose-prod` 生成生产环境配置,然后使用 `make docker-up-prod` 部署。 diff --git a/README.pdf b/README.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f0a45147a95a6aa7caa0b1d8e17e69342f39ec79 GIT binary patch literal 265958 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 EFFGTy7ytkO literal 0 HcmV?d00001 diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..6ae5583 --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,102 @@ +package main + +import ( + "flag" + "log" + "os" + "os/signal" + "syscall" + + "yinli-api/internal/handler" + "yinli-api/pkg/cache" + "yinli-api/pkg/config" + "yinli-api/pkg/database" + + "github.com/gin-gonic/gin" +) + +// @title Yinli API +// @version 1.0 +// @description 这是一个基于Gin框架的API服务 +// @termsOfService http://swagger.io/terms/ + +// @contact.name API Support +// @contact.url http://www.swagger.io/support +// @contact.email support@swagger.io + +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html + +// @host localhost:1234 +// @BasePath /api + +// @securityDefinitions.apikey ApiKeyAuth +// @in header +// @name Authorization +// @description Type "Bearer" followed by a space and JWT token. + +func main() { + // 解析命令行参数 + var env string + flag.StringVar(&env, "env", "dev", "运行环境 (dev, stage, prod)") + flag.Parse() + + // 从环境变量获取环境配置 + if envVar := os.Getenv("APP_ENV"); envVar != "" { + env = envVar + } + + // 加载配置 + cfg, err := config.LoadConfig(env) + if err != nil { + log.Fatalf("加载配置失败: %v", err) + } + + // 设置Gin模式 + gin.SetMode(cfg.Server.Mode) + + // 初始化数据库 + if err := database.InitDatabase(cfg); err != nil { + log.Fatalf("初始化数据库失败: %v", err) + } + defer database.CloseDatabase() + + // 初始化Redis + if err := cache.InitRedis(cfg); err != nil { + log.Fatalf("初始化Redis失败: %v", err) + } + defer cache.CloseRedis() + + // 创建Gin引擎 + r := gin.New() + + // 设置路由 + handler.SetupRoutes(r) + + // 如果是开发环境,添加测试路由 + if cfg.Server.Mode == "debug" { + handler.SetupTestRoutes(r) + } + + // 启动服务器 + log.Printf("服务器启动在端口 %s,环境: %s", cfg.Server.Port, env) + + // 优雅关闭 + go func() { + if err := r.Run(":" + cfg.Server.Port); err != nil { + log.Fatalf("服务器启动失败: %v", err) + } + }() + + // 等待中断信号 + quit := make(chan os.Signal, 1) + signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) + <-quit + + log.Println("正在关闭服务器...") + + // 这里可以添加优雅关闭的逻辑 + // 比如关闭数据库连接、Redis连接等 + + log.Println("服务器已关闭") +} diff --git a/config/dev.yaml b/config/dev.yaml new file mode 100644 index 0000000..b285782 --- /dev/null +++ b/config/dev.yaml @@ -0,0 +1,41 @@ +server: + port: 1234 + mode: debug + +database: + host: localhost + port: 3306 + username: root + password: sasasasa + dbname: yinli + charset: utf8mb4 + parseTime: true + loc: Local + maxIdleConns: 10 + maxOpenConns: 100 + +redis: + host: localhost + port: 6379 + password: "" + db: 0 + poolSize: 10 + +jwt: + secret: dev-jwt-secret-key-change-in-production + expireHours: 24 + +rateLimit: + enabled: true + requests: 100 + window: 60 # seconds + +cors: + allowOrigins: ["*"] + allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"] + allowHeaders: ["*"] + +log: + level: debug + format: json + output: stdout diff --git a/config/prod.yaml b/config/prod.yaml new file mode 100644 index 0000000..71864a9 --- /dev/null +++ b/config/prod.yaml @@ -0,0 +1,41 @@ +server: + port: 1234 + mode: release + +database: + host: localhost + port: 3306 + username: root + password: sasasasa + dbname: yinli + charset: utf8mb4 + parseTime: true + loc: Local + maxIdleConns: 50 + maxOpenConns: 500 + +redis: + host: localhost + port: 6379 + password: "" + db: 2 + poolSize: 50 + +jwt: + secret: prod-jwt-secret-key-must-be-changed + expireHours: 8 + +rateLimit: + enabled: true + requests: 500 + window: 60 # seconds + +cors: + allowOrigins: ["https://api.example.com"] + allowMethods: ["GET", "POST", "PUT", "DELETE"] + allowHeaders: ["Content-Type", "Authorization"] + +log: + level: warn + format: json + output: file diff --git a/config/stage.yaml b/config/stage.yaml new file mode 100644 index 0000000..21077c2 --- /dev/null +++ b/config/stage.yaml @@ -0,0 +1,41 @@ +server: + port: 1234 + mode: release + +database: + host: localhost + port: 3306 + username: root + password: sasasasa + dbname: yinli + charset: utf8mb4 + parseTime: true + loc: Local + maxIdleConns: 20 + maxOpenConns: 200 + +redis: + host: localhost + port: 6379 + password: "" + db: 1 + poolSize: 20 + +jwt: + secret: stage-jwt-secret-key-change-in-production + expireHours: 12 + +rateLimit: + enabled: true + requests: 200 + window: 60 # seconds + +cors: + allowOrigins: ["http://localhost:3000", "https://stage.example.com"] + allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"] + allowHeaders: ["Content-Type", "Authorization"] + +log: + level: info + format: json + output: file diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml new file mode 100644 index 0000000..d09b3bb --- /dev/null +++ b/docker/docker-compose.dev.yml @@ -0,0 +1,48 @@ +version: '3.8' + +services: + yinli-api: + build: + context: .. + dockerfile: Dockerfile + ports: + - "8080:8080" + environment: + - APP_ENV=dev + depends_on: + - mysql + - redis + volumes: + - ../config:/app/config:ro + networks: + - yinli-network + + mysql: + image: mysql:8.0 + environment: + MYSQL_ROOT_PASSWORD: sasasasa + MYSQL_DATABASE: yinli + ports: + - "3306:3306" + volumes: + - mysql_data:/var/lib/mysql + - ../sql:/docker-entrypoint-initdb.d:ro + networks: + - yinli-network + + redis: + image: redis:7-alpine + ports: + - "6379:6379" + volumes: + - redis_data:/data + networks: + - yinli-network + +volumes: + mysql_data: + redis_data: + +networks: + yinli-network: + driver: bridge diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b21180c --- /dev/null +++ b/go.mod @@ -0,0 +1,78 @@ +module yinli-api + +go 1.24.0 + +require ( + github.com/gin-contrib/cors v1.7.6 + github.com/gin-gonic/gin v1.11.0 + github.com/go-redis/redis/v8 v8.11.5 + github.com/go-sql-driver/mysql v1.9.3 + github.com/golang-jwt/jwt/v5 v5.3.0 + github.com/jinzhu/gorm v1.9.16 + github.com/spf13/viper v1.21.0 + github.com/stretchr/testify v1.11.1 + github.com/swaggo/files v1.0.1 + github.com/swaggo/gin-swagger v1.6.1 + golang.org/x/crypto v0.45.0 + golang.org/x/time v0.14.0 +) + +require ( + filippo.io/edwards25519 v1.1.0 // indirect + github.com/KyleBanks/depth v1.2.1 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/bytedance/sonic v1.14.0 // indirect + github.com/bytedance/sonic/loader v0.3.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cloudwego/base64x v0.1.6 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.9 // indirect + github.com/gin-contrib/sse v1.1.0 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.6 // indirect + github.com/go-openapi/spec v0.20.4 // indirect + github.com/go-openapi/swag v0.19.15 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.27.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect + github.com/goccy/go-json v0.10.5 // indirect + github.com/goccy/go-yaml v1.18.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/leodido/go-urn v1.4.0 // indirect + github.com/mailru/easyjson v0.7.6 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.54.0 // indirect + github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/swaggo/swag v1.8.12 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.3.0 // indirect + go.uber.org/mock v0.5.0 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/arch v0.20.0 // indirect + golang.org/x/mod v0.29.0 // indirect + golang.org/x/net v0.47.0 // indirect + golang.org/x/sync v0.18.0 // indirect + golang.org/x/sys v0.38.0 // indirect + golang.org/x/text v0.31.0 // indirect + golang.org/x/tools v0.38.0 // indirect + google.golang.org/protobuf v1.36.9 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..ace7216 --- /dev/null +++ b/go.sum @@ -0,0 +1,242 @@ +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= +github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ= +github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA= +github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= +github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= +github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM= +github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y= +github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY= +github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok= +github.com/gin-contrib/cors v1.7.6 h1:3gQ8GMzs1Ylpf70y8bMw4fVpycXIeX1ZemuSQIsnQQY= +github.com/gin-contrib/cors v1.7.6/go.mod h1:Ulcl+xN4jel9t1Ry8vqph23a60FwH9xVLd+3ykmTjOk= +github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= +github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= +github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w= +github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM= +github.com/gin-gonic/gin v1.11.0 h1:OW/6PLjyusp2PPXtyxKHU0RbX6I/l28FTdDlae5ueWk= +github.com/gin-gonic/gin v1.11.0/go.mod h1:+iq/FyxlGzII0KHiBGjuNn4UNENUlKbGlNmc+W50Dls= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4= +github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= +github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= +github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= +github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= +github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M= +github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA= +github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.54.0 h1:6s1YB9QotYI6Ospeiguknbp2Znb/jZYjZLRXn9kMQBg= +github.com/quic-go/quic-go v0.54.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= +github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= +github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= +github.com/swaggo/gin-swagger v1.6.1 h1:Ri06G4gc9N4t4k8hekMigJ9zKTFSlqj/9paAQCQs7cY= +github.com/swaggo/gin-swagger v1.6.1/go.mod h1:LQ+hJStHakCWRiK/YNYtJOu4mR2FP+pxLnILT/qNiTw= +github.com/swaggo/swag v1.8.12 h1:pctzkNPu0AlQP2royqX3apjKCQonAnf7KGoxeO4y64w= +github.com/swaggo/swag v1.8.12/go.mod h1:lNfm6Gg+oAq3zRJQNEMBE66LIJKM44mxFqhEEgy2its= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA= +github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c= +golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= +google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/handler/router.go b/internal/handler/router.go new file mode 100644 index 0000000..598715b --- /dev/null +++ b/internal/handler/router.go @@ -0,0 +1,133 @@ +package handler + +import ( + "yinli-api/internal/middleware" + "yinli-api/internal/repository" + "yinli-api/internal/service" + + "net/http/pprof" + + "github.com/gin-gonic/gin" + swaggerFiles "github.com/swaggo/files" + ginSwagger "github.com/swaggo/gin-swagger" +) + +// SetupRoutes 设置路由 +func SetupRoutes(r *gin.Engine) { + // 初始化仓库 + userRepo := repository.NewUserRepository() + + // 初始化服务 + userService := service.NewUserService(userRepo) + + // 初始化处理器 + userHandler := NewUserHandler(userService) + + // 添加中间件 + r.Use(middleware.CORSMiddleware()) + r.Use(middleware.LoggerMiddleware()) + r.Use(middleware.RequestIDMiddleware()) + r.Use(middleware.RateLimitMiddleware()) + r.Use(gin.Recovery()) + + // API 文档路由 + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + + // 健康检查 + r.GET("/health", func(c *gin.Context) { + c.JSON(200, gin.H{ + "status": "ok", + "message": "服务运行正常", + }) + }) + + // pprof 性能分析路由 (仅在调试模式下启用) + if gin.Mode() == gin.DebugMode { + pprofGroup := r.Group("/debug/pprof") + { + pprofGroup.GET("/", gin.WrapF(pprof.Index)) + pprofGroup.GET("/cmdline", gin.WrapF(pprof.Cmdline)) + pprofGroup.GET("/profile", gin.WrapF(pprof.Profile)) + pprofGroup.POST("/symbol", gin.WrapF(pprof.Symbol)) + pprofGroup.GET("/symbol", gin.WrapF(pprof.Symbol)) + pprofGroup.GET("/trace", gin.WrapF(pprof.Trace)) + pprofGroup.GET("/allocs", gin.WrapH(pprof.Handler("allocs"))) + pprofGroup.GET("/block", gin.WrapH(pprof.Handler("block"))) + pprofGroup.GET("/goroutine", gin.WrapH(pprof.Handler("goroutine"))) + pprofGroup.GET("/heap", gin.WrapH(pprof.Handler("heap"))) + pprofGroup.GET("/mutex", gin.WrapH(pprof.Handler("mutex"))) + pprofGroup.GET("/threadcreate", gin.WrapH(pprof.Handler("threadcreate"))) + } + } + + // API 路由组 + api := r.Group("/api") + { + // 认证路由(不需要JWT) + auth := api.Group("/auth") + { + auth.POST("/register", userHandler.Register) + auth.POST("/login", userHandler.Login) + } + + // 用户路由(需要JWT认证) + user := api.Group("/user") + user.Use(middleware.AuthMiddleware()) + { + user.GET("/profile", userHandler.GetProfile) + user.PUT("/profile", userHandler.UpdateProfile) + user.PUT("/password", userHandler.ChangePassword) + } + + // 管理员路由(需要JWT认证和管理员权限) + admin := api.Group("/admin") + admin.Use(middleware.AuthMiddleware()) + admin.Use(middleware.AdminMiddleware()) + { + admin.GET("/users", userHandler.GetUserList) + admin.DELETE("/users/:id", userHandler.DeleteUser) + admin.PUT("/users/:id/status", userHandler.UpdateUserStatus) + } + } + + // 404 处理 + r.NoRoute(func(c *gin.Context) { + c.JSON(404, gin.H{ + "code": 404, + "message": "接口不存在", + }) + }) +} + +// SetupTestRoutes 设置测试路由(用于测试环境) +func SetupTestRoutes(r *gin.Engine) { + test := r.Group("/test") + { + // 测试Redis连接 + test.GET("/redis", func(c *gin.Context) { + // 这里可以添加Redis连接测试逻辑 + c.JSON(200, gin.H{ + "status": "ok", + "message": "Redis连接正常", + }) + }) + + // 测试数据库连接 + test.GET("/database", func(c *gin.Context) { + // 这里可以添加数据库连接测试逻辑 + c.JSON(200, gin.H{ + "status": "ok", + "message": "数据库连接正常", + }) + }) + + // 测试JWT生成 + test.GET("/jwt", func(c *gin.Context) { + // 这里可以添加JWT生成测试逻辑 + c.JSON(200, gin.H{ + "status": "ok", + "message": "JWT功能正常", + }) + }) + } +} diff --git a/internal/handler/user_handler.go b/internal/handler/user_handler.go new file mode 100644 index 0000000..64ebf48 --- /dev/null +++ b/internal/handler/user_handler.go @@ -0,0 +1,381 @@ +package handler + +import ( + "net/http" + "strconv" + + "yinli-api/internal/middleware" + "yinli-api/internal/model" + "yinli-api/internal/service" + + "github.com/gin-gonic/gin" +) + +// UserHandler 用户处理器 +type UserHandler struct { + userService service.UserService +} + +// NewUserHandler 创建用户处理器实例 +func NewUserHandler(userService service.UserService) *UserHandler { + return &UserHandler{ + userService: userService, + } +} + +// Register 用户注册 +// @Summary 用户注册 +// @Description 用户注册接口 +// @Tags 用户认证 +// @Accept json +// @Produce json +// @Param request body model.UserRegisterRequest true "注册信息" +// @Success 200 {object} model.LoginResponse +// @Failure 400 {object} map[string]interface{} +// @Failure 500 {object} map[string]interface{} +// @Router /api/auth/register [post] +func (h *UserHandler) Register(c *gin.Context) { + var req model.UserRegisterRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": "请求参数错误", + "error": err.Error(), + }) + return + } + + response, err := h.userService.Register(&req) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": err.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 200, + "message": "注册成功", + "data": response, + }) +} + +// Login 用户登录 +// @Summary 用户登录 +// @Description 用户登录接口 +// @Tags 用户认证 +// @Accept json +// @Produce json +// @Param request body model.UserLoginRequest true "登录信息" +// @Success 200 {object} model.LoginResponse +// @Failure 400 {object} map[string]interface{} +// @Failure 500 {object} map[string]interface{} +// @Router /api/auth/login [post] +func (h *UserHandler) Login(c *gin.Context) { + var req model.UserLoginRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": "请求参数错误", + "error": err.Error(), + }) + return + } + + response, err := h.userService.Login(&req) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": err.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 200, + "message": "登录成功", + "data": response, + }) +} + +// GetProfile 获取用户资料 +// @Summary 获取用户资料 +// @Description 获取当前用户的资料信息 +// @Tags 用户管理 +// @Accept json +// @Produce json +// @Security ApiKeyAuth +// @Success 200 {object} model.UserResponse +// @Failure 401 {object} map[string]interface{} +// @Failure 500 {object} map[string]interface{} +// @Router /api/user/profile [get] +func (h *UserHandler) GetProfile(c *gin.Context) { + userID, exists := middleware.GetUserID(c) + if !exists { + c.JSON(http.StatusUnauthorized, gin.H{ + "code": 401, + "message": "未认证", + }) + return + } + + user, err := h.userService.GetProfile(userID) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "code": 500, + "message": err.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 200, + "message": "获取成功", + "data": user, + }) +} + +// UpdateProfile 更新用户资料 +// @Summary 更新用户资料 +// @Description 更新当前用户的资料信息 +// @Tags 用户管理 +// @Accept json +// @Produce json +// @Security ApiKeyAuth +// @Param request body map[string]interface{} true "更新信息" +// @Success 200 {object} model.UserResponse +// @Failure 400 {object} map[string]interface{} +// @Failure 401 {object} map[string]interface{} +// @Failure 500 {object} map[string]interface{} +// @Router /api/user/profile [put] +func (h *UserHandler) UpdateProfile(c *gin.Context) { + userID, exists := middleware.GetUserID(c) + if !exists { + c.JSON(http.StatusUnauthorized, gin.H{ + "code": 401, + "message": "未认证", + }) + return + } + + var updates map[string]interface{} + if err := c.ShouldBindJSON(&updates); err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": "请求参数错误", + "error": err.Error(), + }) + return + } + + user, err := h.userService.UpdateProfile(userID, updates) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": err.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 200, + "message": "更新成功", + "data": user, + }) +} + +// ChangePassword 修改密码 +// @Summary 修改密码 +// @Description 修改当前用户的密码 +// @Tags 用户管理 +// @Accept json +// @Produce json +// @Security ApiKeyAuth +// @Param request body map[string]string true "密码信息" +// @Success 200 {object} map[string]interface{} +// @Failure 400 {object} map[string]interface{} +// @Failure 401 {object} map[string]interface{} +// @Failure 500 {object} map[string]interface{} +// @Router /api/user/password [put] +func (h *UserHandler) ChangePassword(c *gin.Context) { + userID, exists := middleware.GetUserID(c) + if !exists { + c.JSON(http.StatusUnauthorized, gin.H{ + "code": 401, + "message": "未认证", + }) + return + } + + var req struct { + OldPassword string `json:"old_password" binding:"required"` + NewPassword string `json:"new_password" binding:"required,min=6"` + } + + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": "请求参数错误", + "error": err.Error(), + }) + return + } + + err := h.userService.ChangePassword(userID, req.OldPassword, req.NewPassword) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": err.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 200, + "message": "密码修改成功", + }) +} + +// GetUserList 获取用户列表(管理员) +// @Summary 获取用户列表 +// @Description 获取用户列表(管理员权限) +// @Tags 用户管理 +// @Accept json +// @Produce json +// @Security ApiKeyAuth +// @Param page query int false "页码" default(1) +// @Param limit query int false "每页数量" default(10) +// @Success 200 {object} map[string]interface{} +// @Failure 400 {object} map[string]interface{} +// @Failure 401 {object} map[string]interface{} +// @Failure 403 {object} map[string]interface{} +// @Failure 500 {object} map[string]interface{} +// @Router /api/admin/users [get] +func (h *UserHandler) GetUserList(c *gin.Context) { + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + limit, _ := strconv.Atoi(c.DefaultQuery("limit", "10")) + + if page < 1 { + page = 1 + } + if limit < 1 || limit > 100 { + limit = 10 + } + + offset := (page - 1) * limit + + users, total, err := h.userService.GetUserList(offset, limit) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "code": 500, + "message": err.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 200, + "message": "获取成功", + "data": gin.H{ + "users": users, + "pagination": gin.H{ + "page": page, + "limit": limit, + "total": total, + }, + }, + }) +} + +// DeleteUser 删除用户(管理员) +// @Summary 删除用户 +// @Description 删除指定用户(管理员权限) +// @Tags 用户管理 +// @Accept json +// @Produce json +// @Security ApiKeyAuth +// @Param id path int true "用户ID" +// @Success 200 {object} map[string]interface{} +// @Failure 400 {object} map[string]interface{} +// @Failure 401 {object} map[string]interface{} +// @Failure 403 {object} map[string]interface{} +// @Failure 500 {object} map[string]interface{} +// @Router /api/admin/users/{id} [delete] +func (h *UserHandler) DeleteUser(c *gin.Context) { + userID, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": "无效的用户ID", + }) + return + } + + err = h.userService.DeleteUser(uint(userID)) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": err.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 200, + "message": "删除成功", + }) +} + +// UpdateUserStatus 更新用户状态(管理员) +// @Summary 更新用户状态 +// @Description 更新指定用户的状态(管理员权限) +// @Tags 用户管理 +// @Accept json +// @Produce json +// @Security ApiKeyAuth +// @Param id path int true "用户ID" +// @Param request body map[string]int true "状态信息" +// @Success 200 {object} map[string]interface{} +// @Failure 400 {object} map[string]interface{} +// @Failure 401 {object} map[string]interface{} +// @Failure 403 {object} map[string]interface{} +// @Failure 500 {object} map[string]interface{} +// @Router /api/admin/users/{id}/status [put] +func (h *UserHandler) UpdateUserStatus(c *gin.Context) { + userID, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": "无效的用户ID", + }) + return + } + + var req struct { + Status int `json:"status" binding:"required,oneof=0 1"` + } + + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": "请求参数错误", + "error": err.Error(), + }) + return + } + + err = h.userService.UpdateUserStatus(uint(userID), req.Status) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": err.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 200, + "message": "状态更新成功", + }) +} diff --git a/internal/middleware/auth.go b/internal/middleware/auth.go new file mode 100644 index 0000000..9990f42 --- /dev/null +++ b/internal/middleware/auth.go @@ -0,0 +1,125 @@ +package middleware + +import ( + "net/http" + + "yinli-api/pkg/auth" + + "github.com/gin-gonic/gin" +) + +// AuthMiddleware JWT认证中间件 +func AuthMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + authHeader := c.GetHeader("Authorization") + if authHeader == "" { + c.JSON(http.StatusUnauthorized, gin.H{ + "code": 401, + "message": "缺少授权头", + }) + c.Abort() + return + } + + token, err := auth.ExtractTokenFromHeader(authHeader) + if err != nil { + c.JSON(http.StatusUnauthorized, gin.H{ + "code": 401, + "message": "无效的授权头格式", + }) + c.Abort() + return + } + + claims, err := auth.ValidateToken(token) + if err != nil { + c.JSON(http.StatusUnauthorized, gin.H{ + "code": 401, + "message": "无效的令牌: " + err.Error(), + }) + c.Abort() + return + } + + // 将用户信息存储到上下文中 + c.Set("user_id", claims.UserID) + c.Set("username", claims.Username) + c.Set("token", token) + + c.Next() + } +} + +// OptionalAuthMiddleware 可选的JWT认证中间件 +func OptionalAuthMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + authHeader := c.GetHeader("Authorization") + if authHeader != "" { + token, err := auth.ExtractTokenFromHeader(authHeader) + if err == nil { + claims, err := auth.ValidateToken(token) + if err == nil { + c.Set("user_id", claims.UserID) + c.Set("username", claims.Username) + c.Set("token", token) + } + } + } + c.Next() + } +} + +// GetUserID 从上下文中获取用户ID +func GetUserID(c *gin.Context) (uint, bool) { + userID, exists := c.Get("user_id") + if !exists { + return 0, false + } + return userID.(uint), true +} + +// GetUsername 从上下文中获取用户名 +func GetUsername(c *gin.Context) (string, bool) { + username, exists := c.Get("username") + if !exists { + return "", false + } + return username.(string), true +} + +// GetToken 从上下文中获取令牌 +func GetToken(c *gin.Context) (string, bool) { + token, exists := c.Get("token") + if !exists { + return "", false + } + return token.(string), true +} + +// AdminMiddleware 管理员权限中间件 +func AdminMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + userID, exists := GetUserID(c) + if !exists { + c.JSON(http.StatusUnauthorized, gin.H{ + "code": 401, + "message": "未认证", + }) + c.Abort() + return + } + + // 这里可以添加管理员权限检查逻辑 + // 例如检查用户角色或权限表 + if userID != 1 { // 简单示例:只有ID为1的用户是管理员 + c.JSON(http.StatusForbidden, gin.H{ + "code": 403, + "message": "权限不足", + }) + c.Abort() + return + } + + c.Next() + } +} diff --git a/internal/middleware/cors.go b/internal/middleware/cors.go new file mode 100644 index 0000000..9dc1a70 --- /dev/null +++ b/internal/middleware/cors.go @@ -0,0 +1,31 @@ +package middleware + +import ( + "yinli-api/pkg/config" + + "github.com/gin-contrib/cors" + "github.com/gin-gonic/gin" +) + +// CORSMiddleware CORS中间件 +func CORSMiddleware() gin.HandlerFunc { + cfg := config.AppConfig + if cfg == nil { + // 默认配置 + return cors.New(cors.Config{ + AllowOrigins: []string{"*"}, + AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, + AllowHeaders: []string{"*"}, + ExposeHeaders: []string{"Content-Length"}, + AllowCredentials: true, + }) + } + + return cors.New(cors.Config{ + AllowOrigins: cfg.CORS.AllowOrigins, + AllowMethods: cfg.CORS.AllowMethods, + AllowHeaders: cfg.CORS.AllowHeaders, + ExposeHeaders: []string{"Content-Length", "X-RateLimit-Limit", "X-RateLimit-Remaining", "X-RateLimit-Reset"}, + AllowCredentials: true, + }) +} diff --git a/internal/middleware/logger.go b/internal/middleware/logger.go new file mode 100644 index 0000000..cbe5d51 --- /dev/null +++ b/internal/middleware/logger.go @@ -0,0 +1,49 @@ +package middleware + +import ( + "fmt" + "time" + + "github.com/gin-gonic/gin" +) + +// LoggerMiddleware 自定义日志中间件 +func LoggerMiddleware() gin.HandlerFunc { + return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { + return fmt.Sprintf("[%s] %s %s %s %d %s %s\n", + param.TimeStamp.Format("2006-01-02 15:04:05"), + param.ClientIP, + param.Method, + param.Path, + param.StatusCode, + param.Latency, + param.ErrorMessage, + ) + }) +} + +// RequestIDMiddleware 请求ID中间件 +func RequestIDMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + requestID := c.GetHeader("X-Request-ID") + if requestID == "" { + requestID = generateRequestID() + } + c.Set("request_id", requestID) + c.Header("X-Request-ID", requestID) + c.Next() + } +} + +// generateRequestID 生成请求ID +func generateRequestID() string { + return fmt.Sprintf("%d", time.Now().UnixNano()) +} + +// GetRequestID 从上下文中获取请求ID +func GetRequestID(c *gin.Context) string { + if requestID, exists := c.Get("request_id"); exists { + return requestID.(string) + } + return "" +} diff --git a/internal/middleware/rate_limit.go b/internal/middleware/rate_limit.go new file mode 100644 index 0000000..6509145 --- /dev/null +++ b/internal/middleware/rate_limit.go @@ -0,0 +1,207 @@ +package middleware + +import ( + "fmt" + "net/http" + "strconv" + "time" + + "yinli-api/pkg/cache" + "yinli-api/pkg/config" + + "github.com/gin-gonic/gin" + "golang.org/x/time/rate" +) + +// RateLimitMiddleware Redis频率限制中间件 +func RateLimitMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + cfg := config.AppConfig + if cfg == nil || !cfg.RateLimit.Enabled { + c.Next() + return + } + + // 获取客户端IP + clientIP := c.ClientIP() + key := fmt.Sprintf("rate_limit:%s", clientIP) + + // 获取当前请求数 + currentRequests, err := cache.GetString(key) + if err != nil { + // 键不存在,设置为1 + err = cache.SetString(key, "1", time.Duration(cfg.RateLimit.Window)*time.Second) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "code": 500, + "message": "内部服务器错误", + }) + c.Abort() + return + } + c.Next() + return + } + + // 转换为整数 + requests, err := strconv.Atoi(currentRequests) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "code": 500, + "message": "内部服务器错误", + }) + c.Abort() + return + } + + // 检查是否超过限制 + if requests >= cfg.RateLimit.Requests { + // 获取剩余时间 + ttl, _ := cache.TTL(key) + c.Header("X-RateLimit-Limit", strconv.Itoa(cfg.RateLimit.Requests)) + c.Header("X-RateLimit-Remaining", "0") + c.Header("X-RateLimit-Reset", strconv.FormatInt(time.Now().Add(ttl).Unix(), 10)) + + c.JSON(http.StatusTooManyRequests, gin.H{ + "code": 429, + "message": "请求过于频繁,请稍后再试", + "retry_after": int(ttl.Seconds()), + }) + c.Abort() + return + } + + // 增加请求计数 + newCount, err := cache.IncrBy(key, 1) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "code": 500, + "message": "内部服务器错误", + }) + c.Abort() + return + } + + // 设置响应头 + remaining := cfg.RateLimit.Requests - int(newCount) + if remaining < 0 { + remaining = 0 + } + + c.Header("X-RateLimit-Limit", strconv.Itoa(cfg.RateLimit.Requests)) + c.Header("X-RateLimit-Remaining", strconv.Itoa(remaining)) + + ttl, _ := cache.TTL(key) + c.Header("X-RateLimit-Reset", strconv.FormatInt(time.Now().Add(ttl).Unix(), 10)) + + c.Next() + } +} + +// InMemoryRateLimitMiddleware 内存频率限制中间件(备用方案) +func InMemoryRateLimitMiddleware() gin.HandlerFunc { + limiters := make(map[string]*rate.Limiter) + + return func(c *gin.Context) { + cfg := config.AppConfig + if cfg == nil || !cfg.RateLimit.Enabled { + c.Next() + return + } + + clientIP := c.ClientIP() + + limiter, exists := limiters[clientIP] + if !exists { + // 创建新的限制器 + limiter = rate.NewLimiter(rate.Every(time.Duration(cfg.RateLimit.Window)*time.Second/time.Duration(cfg.RateLimit.Requests)), cfg.RateLimit.Requests) + limiters[clientIP] = limiter + } + + if !limiter.Allow() { + c.JSON(http.StatusTooManyRequests, gin.H{ + "code": 429, + "message": "请求过于频繁,请稍后再试", + }) + c.Abort() + return + } + + c.Next() + } +} + +// UserRateLimitMiddleware 基于用户的频率限制中间件 +func UserRateLimitMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + cfg := config.AppConfig + if cfg == nil || !cfg.RateLimit.Enabled { + c.Next() + return + } + + // 获取用户ID + userID, exists := GetUserID(c) + if !exists { + // 如果没有用户ID,使用IP限制 + RateLimitMiddleware()(c) + return + } + + key := fmt.Sprintf("user_rate_limit:%d", userID) + + // 获取当前请求数 + currentRequests, err := cache.GetString(key) + if err != nil { + // 键不存在,设置为1 + err = cache.SetString(key, "1", time.Duration(cfg.RateLimit.Window)*time.Second) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "code": 500, + "message": "内部服务器错误", + }) + c.Abort() + return + } + c.Next() + return + } + + // 转换为整数 + requests, err := strconv.Atoi(currentRequests) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "code": 500, + "message": "内部服务器错误", + }) + c.Abort() + return + } + + // 检查是否超过限制(认证用户可以有更高的限制) + userLimit := cfg.RateLimit.Requests * 2 // 认证用户限制翻倍 + if requests >= userLimit { + ttl, _ := cache.TTL(key) + c.JSON(http.StatusTooManyRequests, gin.H{ + "code": 429, + "message": "请求过于频繁,请稍后再试", + "retry_after": int(ttl.Seconds()), + }) + c.Abort() + return + } + + // 增加请求计数 + _, err = cache.IncrBy(key, 1) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "code": 500, + "message": "内部服务器错误", + }) + c.Abort() + return + } + + c.Next() + } +} diff --git a/internal/model/user.go b/internal/model/user.go new file mode 100644 index 0000000..42984ed --- /dev/null +++ b/internal/model/user.go @@ -0,0 +1,94 @@ +package model + +import ( + "time" + + "github.com/jinzhu/gorm" + "golang.org/x/crypto/bcrypt" +) + +// User 用户模型 +type User struct { + ID uint `json:"id" gorm:"primary_key;auto_increment"` + Name string `json:"name" gorm:"type:varchar(100);not null;unique_index"` + Password string `json:"-" gorm:"type:varchar(255);not null"` + Status int `json:"status" gorm:"type:tinyint;default:1;comment:'用户状态 1:正常 0:禁用'"` + CreatedAt time.Time `json:"created_at" gorm:"type:datetime;not null"` + UpdatedAt time.Time `json:"updated_at" gorm:"type:datetime;not null"` +} + +// TableName 指定表名 +func (User) TableName() string { + return "user" +} + +// BeforeCreate 创建前钩子 +func (u *User) BeforeCreate(scope *gorm.Scope) error { + if u.Password != "" { + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(u.Password), bcrypt.DefaultCost) + if err != nil { + return err + } + u.Password = string(hashedPassword) + } + return nil +} + +// CheckPassword 验证密码 +func (u *User) CheckPassword(password string) bool { + err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(password)) + return err == nil +} + +// SetPassword 设置密码 +func (u *User) SetPassword(password string) error { + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) + if err != nil { + return err + } + u.Password = string(hashedPassword) + return nil +} + +// UserRegisterRequest 用户注册请求 +type UserRegisterRequest struct { + Name string `json:"name" binding:"required,min=3,max=50" example:"testuser"` + Password string `json:"password" binding:"required,min=6,max=100" example:"password123"` +} + +// UserLoginRequest 用户登录请求 +type UserLoginRequest struct { + Name string `json:"name" binding:"required" example:"testuser"` + Password string `json:"password" binding:"required" example:"password123"` +} + +// UserResponse 用户响应 +type UserResponse struct { + ID uint `json:"id"` + Name string `json:"name"` + Status int `json:"status"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +// ToResponse 转换为响应格式 +func (u *User) ToResponse() *UserResponse { + return &UserResponse{ + ID: u.ID, + Name: u.Name, + Status: u.Status, + CreatedAt: u.CreatedAt, + UpdatedAt: u.UpdatedAt, + } +} + +// LoginResponse 登录响应 +type LoginResponse struct { + User *UserResponse `json:"user"` + Token string `json:"token"` +} + +// IsActive 检查用户是否激活 +func (u *User) IsActive() bool { + return u.Status == 1 +} diff --git a/internal/repository/user_repository.go b/internal/repository/user_repository.go new file mode 100644 index 0000000..3078e26 --- /dev/null +++ b/internal/repository/user_repository.go @@ -0,0 +1,105 @@ +package repository + +import ( + "yinli-api/internal/model" + "yinli-api/pkg/database" + + "github.com/jinzhu/gorm" +) + +// UserRepository 用户仓库接口 +type UserRepository interface { + Create(user *model.User) error + GetByID(id uint) (*model.User, error) + GetByName(name string) (*model.User, error) + Update(user *model.User) error + Delete(id uint) error + List(offset, limit int) ([]*model.User, int64, error) + ExistsByName(name string) (bool, error) + UpdateStatus(id uint, status int) error +} + +// userRepository 用户仓库实现 +type userRepository struct { + db *gorm.DB +} + +// NewUserRepository 创建用户仓库实例 +func NewUserRepository() UserRepository { + return &userRepository{ + db: database.GetDB(), + } +} + +// Create 创建用户 +func (r *userRepository) Create(user *model.User) error { + return r.db.Create(user).Error +} + +// GetByID 根据ID获取用户 +func (r *userRepository) GetByID(id uint) (*model.User, error) { + var user model.User + err := r.db.Where("id = ?", id).First(&user).Error + if err != nil { + return nil, err + } + return &user, nil +} + +// GetByName 根据用户名获取用户 +func (r *userRepository) GetByName(name string) (*model.User, error) { + var user model.User + err := r.db.Where("name = ?", name).First(&user).Error + if err != nil { + return nil, err + } + return &user, nil +} + +// Update 更新用户 +func (r *userRepository) Update(user *model.User) error { + return r.db.Save(user).Error +} + +// Delete 删除用户 +func (r *userRepository) Delete(id uint) error { + return r.db.Where("id = ?", id).Delete(&model.User{}).Error +} + +// List 获取用户列表 +func (r *userRepository) List(offset, limit int) ([]*model.User, int64, error) { + var users []*model.User + var total int64 + + // 获取总数 + if err := r.db.Model(&model.User{}).Count(&total).Error; err != nil { + return nil, 0, err + } + + // 获取分页数据 + err := r.db.Offset(offset).Limit(limit).Find(&users).Error + if err != nil { + return nil, 0, err + } + + return users, total, nil +} + +// ExistsByName 检查用户名是否存在 +func (r *userRepository) ExistsByName(name string) (bool, error) { + var count int64 + err := r.db.Model(&model.User{}).Where("name = ?", name).Count(&count).Error + return count > 0, err +} + +// GetActiveUsers 获取活跃用户 +func (r *userRepository) GetActiveUsers() ([]*model.User, error) { + var users []*model.User + err := r.db.Where("status = ?", 1).Find(&users).Error + return users, err +} + +// UpdateStatus 更新用户状态 +func (r *userRepository) UpdateStatus(id uint, status int) error { + return r.db.Model(&model.User{}).Where("id = ?", id).Update("status", status).Error +} diff --git a/internal/service/user_service.go b/internal/service/user_service.go new file mode 100644 index 0000000..d2c53b2 --- /dev/null +++ b/internal/service/user_service.go @@ -0,0 +1,235 @@ +package service + +import ( + "errors" + "fmt" + + "yinli-api/internal/model" + "yinli-api/internal/repository" + "yinli-api/pkg/auth" + + "github.com/jinzhu/gorm" +) + +// UserService 用户服务接口 +type UserService interface { + Register(req *model.UserRegisterRequest) (*model.LoginResponse, error) + Login(req *model.UserLoginRequest) (*model.LoginResponse, error) + GetProfile(userID uint) (*model.UserResponse, error) + UpdateProfile(userID uint, updates map[string]interface{}) (*model.UserResponse, error) + ChangePassword(userID uint, oldPassword, newPassword string) error + GetUserList(offset, limit int) ([]*model.UserResponse, int64, error) + DeleteUser(userID uint) error + UpdateUserStatus(userID uint, status int) error +} + +// userService 用户服务实现 +type userService struct { + userRepo repository.UserRepository +} + +// NewUserService 创建用户服务实例 +func NewUserService(userRepo repository.UserRepository) UserService { + return &userService{ + userRepo: userRepo, + } +} + +// Register 用户注册 +func (s *userService) Register(req *model.UserRegisterRequest) (*model.LoginResponse, error) { + // 检查用户名是否已存在 + exists, err := s.userRepo.ExistsByName(req.Name) + if err != nil { + return nil, fmt.Errorf("检查用户名失败: %w", err) + } + if exists { + return nil, errors.New("用户名已存在") + } + + // 创建用户 + user := &model.User{ + Name: req.Name, + Password: req.Password, // 密码会在BeforeCreate钩子中加密 + Status: 1, + } + + if err := s.userRepo.Create(user); err != nil { + return nil, fmt.Errorf("创建用户失败: %w", err) + } + + // 生成JWT令牌 + token, err := auth.GenerateToken(user.ID, user.Name) + if err != nil { + return nil, fmt.Errorf("生成令牌失败: %w", err) + } + + return &model.LoginResponse{ + User: user.ToResponse(), + Token: token, + }, nil +} + +// Login 用户登录 +func (s *userService) Login(req *model.UserLoginRequest) (*model.LoginResponse, error) { + // 根据用户名查找用户 + user, err := s.userRepo.GetByName(req.Name) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, errors.New("用户名或密码错误") + } + return nil, fmt.Errorf("查找用户失败: %w", err) + } + + // 检查用户状态 + if !user.IsActive() { + return nil, errors.New("用户账号已被禁用") + } + + // 验证密码 + if !user.CheckPassword(req.Password) { + return nil, errors.New("用户名或密码错误") + } + + // 生成JWT令牌 + token, err := auth.GenerateToken(user.ID, user.Name) + if err != nil { + return nil, fmt.Errorf("生成令牌失败: %w", err) + } + + return &model.LoginResponse{ + User: user.ToResponse(), + Token: token, + }, nil +} + +// GetProfile 获取用户资料 +func (s *userService) GetProfile(userID uint) (*model.UserResponse, error) { + user, err := s.userRepo.GetByID(userID) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, errors.New("用户不存在") + } + return nil, fmt.Errorf("获取用户信息失败: %w", err) + } + + return user.ToResponse(), nil +} + +// UpdateProfile 更新用户资料 +func (s *userService) UpdateProfile(userID uint, updates map[string]interface{}) (*model.UserResponse, error) { + user, err := s.userRepo.GetByID(userID) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, errors.New("用户不存在") + } + return nil, fmt.Errorf("获取用户信息失败: %w", err) + } + + // 检查用户名是否重复 + if newName, exists := updates["name"]; exists { + if newName != user.Name { + exists, err := s.userRepo.ExistsByName(newName.(string)) + if err != nil { + return nil, fmt.Errorf("检查用户名失败: %w", err) + } + if exists { + return nil, errors.New("用户名已存在") + } + } + } + + // 更新用户信息 + for key, value := range updates { + switch key { + case "name": + user.Name = value.(string) + case "status": + user.Status = value.(int) + } + } + + if err := s.userRepo.Update(user); err != nil { + return nil, fmt.Errorf("更新用户信息失败: %w", err) + } + + return user.ToResponse(), nil +} + +// ChangePassword 修改密码 +func (s *userService) ChangePassword(userID uint, oldPassword, newPassword string) error { + user, err := s.userRepo.GetByID(userID) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return errors.New("用户不存在") + } + return fmt.Errorf("获取用户信息失败: %w", err) + } + + // 验证旧密码 + if !user.CheckPassword(oldPassword) { + return errors.New("原密码错误") + } + + // 设置新密码 + if err := user.SetPassword(newPassword); err != nil { + return fmt.Errorf("设置新密码失败: %w", err) + } + + // 更新用户 + if err := s.userRepo.Update(user); err != nil { + return fmt.Errorf("更新密码失败: %w", err) + } + + return nil +} + +// GetUserList 获取用户列表 +func (s *userService) GetUserList(offset, limit int) ([]*model.UserResponse, int64, error) { + users, total, err := s.userRepo.List(offset, limit) + if err != nil { + return nil, 0, fmt.Errorf("获取用户列表失败: %w", err) + } + + responses := make([]*model.UserResponse, len(users)) + for i, user := range users { + responses[i] = user.ToResponse() + } + + return responses, total, nil +} + +// DeleteUser 删除用户 +func (s *userService) DeleteUser(userID uint) error { + // 检查用户是否存在 + _, err := s.userRepo.GetByID(userID) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return errors.New("用户不存在") + } + return fmt.Errorf("获取用户信息失败: %w", err) + } + + if err := s.userRepo.Delete(userID); err != nil { + return fmt.Errorf("删除用户失败: %w", err) + } + + return nil +} + +// UpdateUserStatus 更新用户状态 +func (s *userService) UpdateUserStatus(userID uint, status int) error { + // 检查用户是否存在 + _, err := s.userRepo.GetByID(userID) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return errors.New("用户不存在") + } + return fmt.Errorf("获取用户信息失败: %w", err) + } + + if err := s.userRepo.UpdateStatus(userID, status); err != nil { + return fmt.Errorf("更新用户状态失败: %w", err) + } + + return nil +} diff --git a/localhost.session.sql b/localhost.session.sql new file mode 100644 index 0000000..5ba3848 --- /dev/null +++ b/localhost.session.sql @@ -0,0 +1,2 @@ +SELECT id, name, password, status, created_at, updated_at +FROM yinli.`user`; \ No newline at end of file diff --git a/pkg/auth/jwt.go b/pkg/auth/jwt.go new file mode 100644 index 0000000..1c18df1 --- /dev/null +++ b/pkg/auth/jwt.go @@ -0,0 +1,131 @@ +package auth + +import ( + "errors" + "fmt" + "time" + + "yinli-api/pkg/config" + + "github.com/golang-jwt/jwt/v5" +) + +// Claims JWT声明 +type Claims struct { + UserID uint `json:"user_id"` + Username string `json:"username"` + jwt.RegisteredClaims +} + +// GenerateToken 生成JWT令牌 +func GenerateToken(userID uint, username string) (string, error) { + cfg := config.AppConfig + if cfg == nil { + return "", errors.New("配置未初始化") + } + + now := time.Now() + claims := Claims{ + UserID: userID, + Username: username, + RegisteredClaims: jwt.RegisteredClaims{ + ExpiresAt: jwt.NewNumericDate(now.Add(time.Duration(cfg.JWT.ExpireHours) * time.Hour)), + IssuedAt: jwt.NewNumericDate(now), + NotBefore: jwt.NewNumericDate(now), + Issuer: "yinli-api", + Subject: fmt.Sprintf("%d", userID), + }, + } + + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + return token.SignedString([]byte(cfg.JWT.Secret)) +} + +// ParseToken 解析JWT令牌 +func ParseToken(tokenString string) (*Claims, error) { + cfg := config.AppConfig + if cfg == nil { + return nil, errors.New("配置未初始化") + } + + token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) { + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, fmt.Errorf("意外的签名方法: %v", token.Header["alg"]) + } + return []byte(cfg.JWT.Secret), nil + }) + + if err != nil { + return nil, err + } + + if claims, ok := token.Claims.(*Claims); ok && token.Valid { + return claims, nil + } + + return nil, errors.New("无效的令牌") +} + +// ValidateToken 验证JWT令牌 +func ValidateToken(tokenString string) (*Claims, error) { + claims, err := ParseToken(tokenString) + if err != nil { + return nil, err + } + + // 检查令牌是否过期 + if claims.ExpiresAt != nil && claims.ExpiresAt.Time.Before(time.Now()) { + return nil, errors.New("令牌已过期") + } + + return claims, nil +} + +// RefreshToken 刷新JWT令牌 +func RefreshToken(tokenString string) (string, error) { + claims, err := ParseToken(tokenString) + if err != nil { + return "", err + } + + // 检查令牌是否在刷新窗口内 + cfg := config.AppConfig + refreshWindow := time.Duration(cfg.JWT.ExpireHours/2) * time.Hour + if claims.ExpiresAt != nil && time.Until(claims.ExpiresAt.Time) > refreshWindow { + return "", errors.New("令牌还未到刷新时间") + } + + return GenerateToken(claims.UserID, claims.Username) +} + +// ExtractTokenFromHeader 从请求头中提取令牌 +func ExtractTokenFromHeader(authHeader string) (string, error) { + if authHeader == "" { + return "", errors.New("授权头为空") + } + + const bearerPrefix = "Bearer " + if len(authHeader) < len(bearerPrefix) || authHeader[:len(bearerPrefix)] != bearerPrefix { + return "", errors.New("无效的授权头格式") + } + + return authHeader[len(bearerPrefix):], nil +} + +// GetUserIDFromToken 从令牌中获取用户ID +func GetUserIDFromToken(tokenString string) (uint, error) { + claims, err := ValidateToken(tokenString) + if err != nil { + return 0, err + } + return claims.UserID, nil +} + +// GetUsernameFromToken 从令牌中获取用户名 +func GetUsernameFromToken(tokenString string) (string, error) { + claims, err := ValidateToken(tokenString) + if err != nil { + return "", err + } + return claims.Username, nil +} diff --git a/pkg/cache/redis.go b/pkg/cache/redis.go new file mode 100644 index 0000000..550865e --- /dev/null +++ b/pkg/cache/redis.go @@ -0,0 +1,187 @@ +package cache + +import ( + "context" + "encoding/json" + "fmt" + "log" + "time" + + "yinli-api/pkg/config" + + "github.com/go-redis/redis/v8" +) + +var RedisClient *redis.Client +var ctx = context.Background() + +// InitRedis 初始化Redis连接 +func InitRedis(cfg *config.Config) error { + RedisClient = redis.NewClient(&redis.Options{ + Addr: cfg.GetRedisAddr(), + Password: cfg.Redis.Password, + DB: cfg.Redis.DB, + PoolSize: cfg.Redis.PoolSize, + }) + + // 测试连接 + _, err := RedisClient.Ping(ctx).Result() + if err != nil { + return fmt.Errorf("Redis连接失败: %w", err) + } + + log.Println("Redis连接成功") + return nil +} + +// CloseRedis 关闭Redis连接 +func CloseRedis() error { + if RedisClient != nil { + return RedisClient.Close() + } + return nil +} + +// Set 设置键值对 +func Set(key string, value interface{}, expiration time.Duration) error { + jsonValue, err := json.Marshal(value) + if err != nil { + return err + } + return RedisClient.Set(ctx, key, jsonValue, expiration).Err() +} + +// Get 获取值 +func Get(key string, dest interface{}) error { + val, err := RedisClient.Get(ctx, key).Result() + if err != nil { + return err + } + return json.Unmarshal([]byte(val), dest) +} + +// GetString 获取字符串值 +func GetString(key string) (string, error) { + return RedisClient.Get(ctx, key).Result() +} + +// SetString 设置字符串值 +func SetString(key, value string, expiration time.Duration) error { + return RedisClient.Set(ctx, key, value, expiration).Err() +} + +// Delete 删除键 +func Delete(key string) error { + return RedisClient.Del(ctx, key).Err() +} + +// Exists 检查键是否存在 +func Exists(key string) (bool, error) { + count, err := RedisClient.Exists(ctx, key).Result() + return count > 0, err +} + +// Expire 设置过期时间 +func Expire(key string, expiration time.Duration) error { + return RedisClient.Expire(ctx, key, expiration).Err() +} + +// TTL 获取剩余过期时间 +func TTL(key string) (time.Duration, error) { + return RedisClient.TTL(ctx, key).Result() +} + +// Incr 递增 +func Incr(key string) (int64, error) { + return RedisClient.Incr(ctx, key).Result() +} + +// IncrBy 按指定值递增 +func IncrBy(key string, value int64) (int64, error) { + return RedisClient.IncrBy(ctx, key, value).Result() +} + +// Decr 递减 +func Decr(key string) (int64, error) { + return RedisClient.Decr(ctx, key).Result() +} + +// DecrBy 按指定值递减 +func DecrBy(key string, value int64) (int64, error) { + return RedisClient.DecrBy(ctx, key, value).Result() +} + +// HSet 设置哈希字段 +func HSet(key, field string, value interface{}) error { + return RedisClient.HSet(ctx, key, field, value).Err() +} + +// HGet 获取哈希字段 +func HGet(key, field string) (string, error) { + return RedisClient.HGet(ctx, key, field).Result() +} + +// HGetAll 获取所有哈希字段 +func HGetAll(key string) (map[string]string, error) { + return RedisClient.HGetAll(ctx, key).Result() +} + +// HDel 删除哈希字段 +func HDel(key string, fields ...string) error { + return RedisClient.HDel(ctx, key, fields...).Err() +} + +// SAdd 添加集合成员 +func SAdd(key string, members ...interface{}) error { + return RedisClient.SAdd(ctx, key, members...).Err() +} + +// SMembers 获取集合所有成员 +func SMembers(key string) ([]string, error) { + return RedisClient.SMembers(ctx, key).Result() +} + +// SIsMember 检查是否为集合成员 +func SIsMember(key string, member interface{}) (bool, error) { + return RedisClient.SIsMember(ctx, key, member).Result() +} + +// SRem 移除集合成员 +func SRem(key string, members ...interface{}) error { + return RedisClient.SRem(ctx, key, members...).Err() +} + +// ZAdd 添加有序集合成员 +func ZAdd(key string, score float64, member interface{}) error { + return RedisClient.ZAdd(ctx, key, &redis.Z{Score: score, Member: member}).Err() +} + +// ZRange 获取有序集合范围内的成员 +func ZRange(key string, start, stop int64) ([]string, error) { + return RedisClient.ZRange(ctx, key, start, stop).Result() +} + +// ZRem 移除有序集合成员 +func ZRem(key string, members ...interface{}) error { + return RedisClient.ZRem(ctx, key, members...).Err() +} + +// Keys 获取匹配模式的所有键 +func Keys(pattern string) ([]string, error) { + return RedisClient.Keys(ctx, pattern).Result() +} + +// FlushDB 清空当前数据库 +func FlushDB() error { + return RedisClient.FlushDB(ctx).Err() +} + +// Ping 测试连接 +func Ping() error { + return RedisClient.Ping(ctx).Err() +} + +// GetClient 获取Redis客户端实例 +func GetClient() *redis.Client { + return RedisClient +} diff --git a/pkg/config/config.go b/pkg/config/config.go new file mode 100644 index 0000000..46c027f --- /dev/null +++ b/pkg/config/config.go @@ -0,0 +1,135 @@ +package config + +import ( + "fmt" + "log" + "os" + + "github.com/spf13/viper" +) + +// Config 应用配置结构 +type Config struct { + Server ServerConfig `mapstructure:"server"` + Database DatabaseConfig `mapstructure:"database"` + Redis RedisConfig `mapstructure:"redis"` + JWT JWTConfig `mapstructure:"jwt"` + RateLimit RateLimitConfig `mapstructure:"rateLimit"` + CORS CORSConfig `mapstructure:"cors"` + Log LogConfig `mapstructure:"log"` +} + +// ServerConfig 服务器配置 +type ServerConfig struct { + Port string `mapstructure:"port"` + Mode string `mapstructure:"mode"` +} + +// DatabaseConfig 数据库配置 +type DatabaseConfig struct { + Host string `mapstructure:"host"` + Port int `mapstructure:"port"` + Username string `mapstructure:"username"` + Password string `mapstructure:"password"` + DBName string `mapstructure:"dbname"` + Charset string `mapstructure:"charset"` + ParseTime bool `mapstructure:"parseTime"` + Loc string `mapstructure:"loc"` + MaxIdleConns int `mapstructure:"maxIdleConns"` + MaxOpenConns int `mapstructure:"maxOpenConns"` +} + +// RedisConfig Redis配置 +type RedisConfig struct { + Host string `mapstructure:"host"` + Port int `mapstructure:"port"` + Password string `mapstructure:"password"` + DB int `mapstructure:"db"` + PoolSize int `mapstructure:"poolSize"` +} + +// JWTConfig JWT配置 +type JWTConfig struct { + Secret string `mapstructure:"secret"` + ExpireHours int `mapstructure:"expireHours"` +} + +// RateLimitConfig 频率限制配置 +type RateLimitConfig struct { + Enabled bool `mapstructure:"enabled"` + Requests int `mapstructure:"requests"` + Window int `mapstructure:"window"` +} + +// CORSConfig CORS配置 +type CORSConfig struct { + AllowOrigins []string `mapstructure:"allowOrigins"` + AllowMethods []string `mapstructure:"allowMethods"` + AllowHeaders []string `mapstructure:"allowHeaders"` +} + +// LogConfig 日志配置 +type LogConfig struct { + Level string `mapstructure:"level"` + Format string `mapstructure:"format"` + Output string `mapstructure:"output"` +} + +var AppConfig *Config + +// LoadConfig 加载配置文件 +func LoadConfig(env string) (*Config, error) { + if env == "" { + env = "dev" + } + + viper.SetConfigName(env) + viper.SetConfigType("yaml") + viper.AddConfigPath("./config") + viper.AddConfigPath("../config") + viper.AddConfigPath("../../config") + + // 设置环境变量前缀 + viper.SetEnvPrefix("YINLI") + viper.AutomaticEnv() + + if err := viper.ReadInConfig(); err != nil { + return nil, fmt.Errorf("读取配置文件失败: %w", err) + } + + var config Config + if err := viper.Unmarshal(&config); err != nil { + return nil, fmt.Errorf("解析配置文件失败: %w", err) + } + + AppConfig = &config + log.Printf("已加载配置文件: %s", viper.ConfigFileUsed()) + return &config, nil +} + +// GetEnv 获取环境变量,如果不存在则返回默认值 +func GetEnv(key, defaultValue string) string { + if value := os.Getenv(key); value != "" { + return value + } + return defaultValue +} + +// GetDSN 获取数据库连接字符串 +func (c *Config) GetDSN() string { + return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=%t&loc=%s", + c.Database.Username, + c.Database.Password, + c.Database.Host, + c.Database.Port, + c.Database.DBName, + c.Database.Charset, + c.Database.ParseTime, + c.Database.Loc, + ) +} + +// GetRedisAddr 获取Redis连接地址 +func (c *Config) GetRedisAddr() string { + return fmt.Sprintf("%s:%d", c.Redis.Host, c.Redis.Port) +} diff --git a/pkg/database/database.go b/pkg/database/database.go new file mode 100644 index 0000000..0e049cc --- /dev/null +++ b/pkg/database/database.go @@ -0,0 +1,98 @@ +package database + +import ( + "database/sql" + "fmt" + "log" + "time" + + "yinli-api/pkg/config" + + _ "github.com/go-sql-driver/mysql" + "github.com/jinzhu/gorm" + _ "github.com/jinzhu/gorm/dialects/mysql" +) + +var DB *gorm.DB + +// InitDatabase 初始化数据库连接 +func InitDatabase(cfg *config.Config) error { + dsn := cfg.GetDSN() + + db, err := gorm.Open("mysql", dsn) + if err != nil { + return fmt.Errorf("连接数据库失败: %w", err) + } + + // 设置连接池参数 + db.DB().SetMaxIdleConns(cfg.Database.MaxIdleConns) + db.DB().SetMaxOpenConns(cfg.Database.MaxOpenConns) + db.DB().SetConnMaxLifetime(time.Hour) + + // 测试连接 + if err := db.DB().Ping(); err != nil { + return fmt.Errorf("数据库连接测试失败: %w", err) + } + + // 启用日志 + if cfg.Server.Mode == "debug" { + db.LogMode(true) + } + + DB = db + log.Println("数据库连接成功") + return nil +} + +// CloseDatabase 关闭数据库连接 +func CloseDatabase() error { + if DB != nil { + return DB.Close() + } + return nil +} + +// GetDB 获取数据库实例 +func GetDB() *gorm.DB { + return DB +} + +// Ping 检查数据库连接 +func Ping() error { + if DB == nil { + return fmt.Errorf("数据库未初始化") + } + return DB.DB().Ping() +} + +// Transaction 执行事务 +func Transaction(fn func(*gorm.DB) error) error { + tx := DB.Begin() + if tx.Error != nil { + return tx.Error + } + + defer func() { + if r := recover(); r != nil { + tx.Rollback() + panic(r) + } + }() + + if err := fn(tx); err != nil { + tx.Rollback() + return err + } + + return tx.Commit().Error +} + +// RawQuery 执行原生SQL查询 +func RawQuery(query string, args ...interface{}) (*sql.Rows, error) { + return DB.Raw(query, args...).Rows() +} + +// Exec 执行原生SQL +func Exec(sql string, values ...interface{}) error { + return DB.Exec(sql, values...).Error +} diff --git a/sql/init.sql b/sql/init.sql new file mode 100644 index 0000000..28ced4f --- /dev/null +++ b/sql/init.sql @@ -0,0 +1,62 @@ +-- 创建数据库(如果不存在) +CREATE DATABASE IF NOT EXISTS yinli CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- 使用数据库 +USE yinli; + +-- 创建用户表 +CREATE TABLE IF NOT EXISTS `user` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `name` varchar(100) NOT NULL COMMENT '用户名', + `password` varchar(255) NOT NULL COMMENT '密码', + `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '用户状态 1:正常 0:禁用', + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_name` (`name`), + KEY `idx_status` (`status`), + KEY `idx_created_at` (`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; + +-- 插入测试数据 +INSERT INTO `user` (`name`, `password`, `status`) VALUES +('admin', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 1), +('testuser', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 1) +ON DUPLICATE KEY UPDATE `name` = VALUES(`name`); + +-- 创建索引优化查询 +CREATE INDEX IF NOT EXISTS `idx_user_name_status` ON `user` (`name`, `status`); + +-- 创建会话表(可选,用于会话管理) +CREATE TABLE IF NOT EXISTS `user_session` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '会话ID', + `user_id` int(11) unsigned NOT NULL COMMENT '用户ID', + `token` varchar(500) NOT NULL COMMENT 'JWT令牌', + `expires_at` datetime NOT NULL COMMENT '过期时间', + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_user_id` (`user_id`), + KEY `idx_token` (`token`(255)), + KEY `idx_expires_at` (`expires_at`), + FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户会话表'; + +-- 创建API访问日志表(可选) +CREATE TABLE IF NOT EXISTS `api_log` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '日志ID', + `user_id` int(11) unsigned DEFAULT NULL COMMENT '用户ID', + `method` varchar(10) NOT NULL COMMENT 'HTTP方法', + `path` varchar(255) NOT NULL COMMENT '请求路径', + `status_code` int(11) NOT NULL COMMENT '响应状态码', + `ip` varchar(45) NOT NULL COMMENT '客户端IP', + `user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理', + `request_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '请求时间', + `response_time` int(11) DEFAULT NULL COMMENT '响应时间(毫秒)', + PRIMARY KEY (`id`), + KEY `idx_user_id` (`user_id`), + KEY `idx_path` (`path`), + KEY `idx_status_code` (`status_code`), + KEY `idx_ip` (`ip`), + KEY `idx_request_time` (`request_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API访问日志表'; diff --git a/test/config_test.go b/test/config_test.go new file mode 100644 index 0000000..98c79b3 --- /dev/null +++ b/test/config_test.go @@ -0,0 +1,156 @@ +package test + +import ( + "os" + "testing" + + "yinli-api/pkg/config" + + "github.com/stretchr/testify/assert" +) + +// TestLoadConfig 测试配置加载 +func TestLoadConfig(t *testing.T) { + tests := []struct { + name string + env string + expectError bool + }{ + { + name: "加载开发环境配置", + env: "dev", + expectError: false, + }, + { + name: "加载预发布环境配置", + env: "stage", + expectError: false, + }, + { + name: "加载生产环境配置", + env: "prod", + expectError: false, + }, + { + name: "加载不存在的配置", + env: "nonexistent", + expectError: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg, err := config.LoadConfig(tt.env) + + if tt.expectError { + assert.Error(t, err) + assert.Nil(t, cfg) + } else { + assert.NoError(t, err) + assert.NotNil(t, cfg) + + // 验证配置结构 + assert.NotEmpty(t, cfg.Server.Port) + assert.NotEmpty(t, cfg.Server.Mode) + assert.NotEmpty(t, cfg.Database.Host) + assert.NotEmpty(t, cfg.Database.Username) + assert.NotEmpty(t, cfg.Database.DBName) + assert.NotEmpty(t, cfg.Redis.Host) + assert.NotEmpty(t, cfg.JWT.Secret) + } + }) + } +} + +// TestGetDSN 测试数据库连接字符串生成 +func TestGetDSN(t *testing.T) { + cfg, err := config.LoadConfig("dev") + assert.NoError(t, err) + assert.NotNil(t, cfg) + + dsn := cfg.GetDSN() + assert.NotEmpty(t, dsn) + assert.Contains(t, dsn, cfg.Database.Username) + assert.Contains(t, dsn, cfg.Database.Host) + assert.Contains(t, dsn, cfg.Database.DBName) +} + +// TestGetRedisAddr 测试Redis连接地址生成 +func TestGetRedisAddr(t *testing.T) { + cfg, err := config.LoadConfig("dev") + assert.NoError(t, err) + assert.NotNil(t, cfg) + + addr := cfg.GetRedisAddr() + assert.NotEmpty(t, addr) + assert.Contains(t, addr, cfg.Redis.Host) +} + +// TestGetEnv 测试环境变量获取 +func TestGetEnv(t *testing.T) { + // 设置测试环境变量 + os.Setenv("TEST_VAR", "test_value") + defer os.Unsetenv("TEST_VAR") + + tests := []struct { + name string + key string + defaultValue string + expected string + }{ + { + name: "存在的环境变量", + key: "TEST_VAR", + defaultValue: "default", + expected: "test_value", + }, + { + name: "不存在的环境变量", + key: "NON_EXISTENT_VAR", + defaultValue: "default", + expected: "default", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := config.GetEnv(tt.key, tt.defaultValue) + assert.Equal(t, tt.expected, result) + }) + } +} + +// TestConfigValidation 测试配置验证 +func TestConfigValidation(t *testing.T) { + cfg, err := config.LoadConfig("dev") + assert.NoError(t, err) + assert.NotNil(t, cfg) + + // 验证服务器配置 + assert.True(t, cfg.Server.Port != "") + assert.Contains(t, []string{"debug", "release"}, cfg.Server.Mode) + + // 验证数据库配置 + assert.True(t, cfg.Database.Port > 0) + assert.True(t, cfg.Database.MaxIdleConns > 0) + assert.True(t, cfg.Database.MaxOpenConns > 0) + + // 验证Redis配置 + assert.True(t, cfg.Redis.Port > 0) + assert.True(t, cfg.Redis.PoolSize > 0) + + // 验证JWT配置 + assert.True(t, cfg.JWT.ExpireHours > 0) + assert.NotEmpty(t, cfg.JWT.Secret) + + // 验证频率限制配置 + if cfg.RateLimit.Enabled { + assert.True(t, cfg.RateLimit.Requests > 0) + assert.True(t, cfg.RateLimit.Window > 0) + } + + // 验证CORS配置 + assert.True(t, len(cfg.CORS.AllowOrigins) > 0) + assert.True(t, len(cfg.CORS.AllowMethods) > 0) + assert.True(t, len(cfg.CORS.AllowHeaders) > 0) +} diff --git a/test/middleware_test.go b/test/middleware_test.go new file mode 100644 index 0000000..ed5b1d8 --- /dev/null +++ b/test/middleware_test.go @@ -0,0 +1,171 @@ +package test + +import ( + "net/http" + "net/http/httptest" + "testing" + + "yinli-api/internal/middleware" + "yinli-api/pkg/auth" + "yinli-api/pkg/config" + + "github.com/gin-gonic/gin" + "github.com/stretchr/testify/assert" +) + +// setupMiddlewareTestRouter 设置中间件测试路由 +func setupMiddlewareTestRouter() *gin.Engine { + gin.SetMode(gin.TestMode) + config.LoadConfig("dev") + + r := gin.New() + return r +} + +// TestAuthMiddleware 测试JWT认证中间件 +func TestAuthMiddleware(t *testing.T) { + router := setupMiddlewareTestRouter() + + // 生成测试token + token, _ := auth.GenerateToken(1, "testuser") + + router.GET("/protected", middleware.AuthMiddleware(), func(c *gin.Context) { + userID, _ := middleware.GetUserID(c) + username, _ := middleware.GetUsername(c) + c.JSON(200, gin.H{ + "user_id": userID, + "username": username, + }) + }) + + tests := []struct { + name string + authHeader string + expectedStatus int + }{ + { + name: "有效token", + authHeader: "Bearer " + token, + expectedStatus: http.StatusOK, + }, + { + name: "无授权头", + authHeader: "", + expectedStatus: http.StatusUnauthorized, + }, + { + name: "无效token格式", + authHeader: "InvalidFormat", + expectedStatus: http.StatusUnauthorized, + }, + { + name: "无效token", + authHeader: "Bearer invalid-token", + expectedStatus: http.StatusUnauthorized, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req, _ := http.NewRequest("GET", "/protected", nil) + if tt.authHeader != "" { + req.Header.Set("Authorization", tt.authHeader) + } + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, tt.expectedStatus, w.Code) + }) + } +} + +// TestCORSMiddleware 测试CORS中间件 +func TestCORSMiddleware(t *testing.T) { + router := setupMiddlewareTestRouter() + router.Use(middleware.CORSMiddleware()) + + router.GET("/test", func(c *gin.Context) { + c.JSON(200, gin.H{"message": "ok"}) + }) + + req, _ := http.NewRequest("GET", "/test", nil) + req.Header.Set("Origin", "http://localhost:3000") + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + assert.NotEmpty(t, w.Header().Get("Access-Control-Allow-Origin")) +} + +// TestRequestIDMiddleware 测试请求ID中间件 +func TestRequestIDMiddleware(t *testing.T) { + router := setupMiddlewareTestRouter() + router.Use(middleware.RequestIDMiddleware()) + + router.GET("/test", func(c *gin.Context) { + requestID := middleware.GetRequestID(c) + c.JSON(200, gin.H{"request_id": requestID}) + }) + + req, _ := http.NewRequest("GET", "/test", nil) + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + assert.NotEmpty(t, w.Header().Get("X-Request-ID")) +} + +// TestOptionalAuthMiddleware 测试可选认证中间件 +func TestOptionalAuthMiddleware(t *testing.T) { + router := setupMiddlewareTestRouter() + + token, _ := auth.GenerateToken(1, "testuser") + + router.GET("/optional", middleware.OptionalAuthMiddleware(), func(c *gin.Context) { + userID, exists := middleware.GetUserID(c) + if exists { + c.JSON(200, gin.H{"authenticated": true, "user_id": userID}) + } else { + c.JSON(200, gin.H{"authenticated": false}) + } + }) + + tests := []struct { + name string + authHeader string + hasUserID bool + }{ + { + name: "有效token", + authHeader: "Bearer " + token, + hasUserID: true, + }, + { + name: "无token", + authHeader: "", + hasUserID: false, + }, + { + name: "无效token", + authHeader: "Bearer invalid-token", + hasUserID: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req, _ := http.NewRequest("GET", "/optional", nil) + if tt.authHeader != "" { + req.Header.Set("Authorization", tt.authHeader) + } + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + // 这里可以进一步验证响应内容 + }) + } +} diff --git a/test/user_test.go b/test/user_test.go new file mode 100644 index 0000000..395ea23 --- /dev/null +++ b/test/user_test.go @@ -0,0 +1,90 @@ +package test + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" + + "yinli-api/pkg/config" + + "github.com/gin-gonic/gin" + "github.com/stretchr/testify/assert" +) + +// setupTestRouter 设置测试路由 +func setupTestRouter() *gin.Engine { + gin.SetMode(gin.TestMode) + + // 加载测试配置 + config.LoadConfig("dev") + + r := gin.New() + // 不使用完整的路由设置,避免Redis依赖 + // handler.SetupRoutes(r) + + // 手动设置基本路由用于测试 + r.GET("/health", func(c *gin.Context) { + c.JSON(200, gin.H{ + "status": "ok", + "message": "服务运行正常", + }) + }) + + // 404 处理 + r.NoRoute(func(c *gin.Context) { + c.JSON(404, gin.H{ + "code": 404, + "message": "接口不存在", + }) + }) + + return r +} + +// TestUserRegister 测试用户注册 (需要数据库连接,暂时跳过) +func TestUserRegister(t *testing.T) { + t.Skip("需要数据库连接,跳过此测试") +} + +// TestUserLogin 测试用户登录 (需要数据库连接,暂时跳过) +func TestUserLogin(t *testing.T) { + t.Skip("需要数据库连接,跳过此测试") +} + +// TestGetProfile 测试获取用户资料 (需要数据库连接,暂时跳过) +func TestGetProfile(t *testing.T) { + t.Skip("需要数据库连接,跳过此测试") +} + +// TestHealthCheck 测试健康检查 +func TestHealthCheck(t *testing.T) { + router := setupTestRouter() + + req, _ := http.NewRequest("GET", "/health", nil) + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + + var response map[string]interface{} + json.Unmarshal(w.Body.Bytes(), &response) + assert.Equal(t, "ok", response["status"]) + assert.Equal(t, "服务运行正常", response["message"]) +} + +// TestNotFound 测试404处理 +func TestNotFound(t *testing.T) { + router := setupTestRouter() + + req, _ := http.NewRequest("GET", "/nonexistent", nil) + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusNotFound, w.Code) + + var response map[string]interface{} + json.Unmarshal(w.Body.Bytes(), &response) + assert.Equal(t, float64(404), response["code"]) + assert.Equal(t, "接口不存在", response["message"]) +}