Compare commits
12 Commits
61e756eecf
...
master
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0018654920 | ||
![]() |
d660b5ec00 | ||
![]() |
0cd63a7111 | ||
![]() |
e70bde7bd4 | ||
![]() |
f383eab282 | ||
![]() |
c2a6a26615 | ||
![]() |
9aa58a6812 | ||
![]() |
99ae909180 | ||
![]() |
d0b5c96f23 | ||
![]() |
4b7ef7b4a7 | ||
![]() |
f213f1d0c3 | ||
![]() |
f1cf4ed3cf |
@@ -6,25 +6,62 @@ import (
|
||||
"main.go/api"
|
||||
db "main.go/database"
|
||||
. "main.go/type"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// CrDb 专门用作给数据替换。
|
||||
type CrDb struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Score int `json:"score" binding:"required"`
|
||||
Flag string `json:"flag"` // 暂时一个题只能一个flag
|
||||
Description string `json:"description"`
|
||||
Name string `json:"name" binding:"required"`
|
||||
Score int `json:"score" binding:"required"`
|
||||
Flag string `json:"flag"` // 暂时一个题只能一个flag
|
||||
Description string `json:"description"`
|
||||
Attachment string `json:"attachment"`
|
||||
Category string `json:"category" binding:"required"`
|
||||
Tags string `json:"tags"`
|
||||
Category string `json:"category" binding:"required"`
|
||||
Tags string `json:"tags"`
|
||||
Hints string `json:"hints"`
|
||||
Visible int `json:"visible"`
|
||||
Visible int `json:"visible"`
|
||||
}
|
||||
|
||||
//GetAllChallenges 获取所有题目
|
||||
func GetAllChallenges(c *gin.Context) {
|
||||
var challenges []Challenge
|
||||
if err := getchallenge(&challenges); err != nil {
|
||||
fmt.Println(err)
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get all challenges failure!"})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "data": challenges})
|
||||
}
|
||||
|
||||
//getchallenge 获取题目
|
||||
func getchallenge(challenge *[]Challenge) error {
|
||||
var attachmentString, hints string
|
||||
api.Link()
|
||||
DB := db.DBsnctf
|
||||
command := "SELECT * FROM challenge;"
|
||||
rows, err := DB.Raw(command).Rows()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var b Challenge
|
||||
err := rows.Scan(&b.ID, &b.Name, &b.Score, &b.Flag, &b.Description, &attachmentString, &b.Category, &b.Tags, &hints, &b.Visible)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
b.Attachment = strings.Split(attachmentString, ",")
|
||||
b.Hints = strings.Split(hints, ",")
|
||||
|
||||
*challenge = append(*challenge, b)
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
//NewChallenge 新建一个题目
|
||||
func NewChallenge(c *gin.Context){
|
||||
func NewChallenge(c *gin.Context) {
|
||||
var request ChallengeRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
fmt.Println(err)
|
||||
@@ -58,15 +95,15 @@ func addChallenge(c *Challenge) error {
|
||||
attachmentString := strings.Join(c.Attachment, ",")
|
||||
hintString := strings.Join(c.Hints, ",")
|
||||
crdb := &CrDb{
|
||||
Name: c.Name,
|
||||
Score: c.Score,
|
||||
Flag: c.Flag,
|
||||
Name: c.Name,
|
||||
Score: c.Score,
|
||||
Flag: c.Flag,
|
||||
Description: c.Description,
|
||||
Attachment: attachmentString,
|
||||
Category: c.Category,
|
||||
Tags: c.Tags,
|
||||
Hints: hintString,
|
||||
Visible: c.Visible,
|
||||
Attachment: attachmentString,
|
||||
Category: c.Category,
|
||||
Tags: c.Tags,
|
||||
Hints: hintString,
|
||||
Visible: c.Visible,
|
||||
}
|
||||
//插入数据
|
||||
err := DB.Table("challenge").Create(crdb).Error
|
||||
@@ -76,4 +113,51 @@ func addChallenge(c *Challenge) error {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// DelChallenge 删除题目
|
||||
func DelChallenge(c *gin.Context) {
|
||||
api.Link()
|
||||
DB := db.DBsnctf
|
||||
id := c.Param("id")
|
||||
err := DB.Table("challenge").Where("id = ?", id).Delete(&Challenge{}).Error
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Delete challenge failure!"})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "msg": "Delete challenge success!"})
|
||||
}
|
||||
|
||||
// EditChallenge 修改题目
|
||||
func EditChallenge(c *gin.Context) {
|
||||
api.Link()
|
||||
DB := db.DBsnctf
|
||||
id := c.Param("id")
|
||||
cid, _ := strconv.Atoi(id)
|
||||
var request ChallengeRequeststrings
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"})
|
||||
return
|
||||
}
|
||||
visable, _ := strconv.Atoi(request.Visible)
|
||||
attachmentString := strings.Join(request.Attachment, ",")
|
||||
hintString := strings.Join(request.Hints, ",")
|
||||
challenge := &CrDb{
|
||||
Name: request.Name,
|
||||
Score: request.Score,
|
||||
Flag: request.Flag,
|
||||
Description: request.Description,
|
||||
Attachment: attachmentString,
|
||||
Category: request.Category,
|
||||
Tags: request.Tags,
|
||||
Hints: hintString,
|
||||
Visible: visable,
|
||||
}
|
||||
err := DB.Debug().Table("challenge").Where("id = ?", cid).Updates(challenge).Error
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Update challenge failure!"})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "msg": "Update challenge success!"})
|
||||
|
||||
}
|
||||
|
99
api/admin/user.go
Normal file
99
api/admin/user.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"main.go/api"
|
||||
db "main.go/database"
|
||||
. "main.go/type"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
//GetAllUserInfo 获取所有用户
|
||||
func GetAllUserInfo(c *gin.Context) {
|
||||
api.Link()
|
||||
DB := db.DBsnctf
|
||||
var resquest []AllInfoResponse
|
||||
rows, err := DB.Debug().Table("user").Select([]string{"id", "username", "affiliation", "country", "website", "password", "email", "banned", "hidden", "role", "team_id"}).Rows()
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get info error!"})
|
||||
return
|
||||
}
|
||||
for rows.Next() {
|
||||
var info AllInfoResponse
|
||||
err := rows.Scan(&info.Id, &info.Username, &info.Affiliation, &info.Country, &info.Website, &info.Password, &info.Email, &info.Banned, &info.Hidden, &info.Role, &info.TeamID)
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get info error!"})
|
||||
return
|
||||
}
|
||||
resquest = append(resquest, info)
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "data": resquest})
|
||||
}
|
||||
|
||||
// DelUser 删除用户
|
||||
func DelUser(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
uid, _ := strconv.Atoi(id)
|
||||
api.Link()
|
||||
DB := db.DBsnctf
|
||||
err := DB.Debug().Table("user").Where("id = ?", uid).Delete(&User{}).Error
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Delete user error!"})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "msg": "Delete user success!"})
|
||||
|
||||
}
|
||||
|
||||
// EditUser 更新用户信息
|
||||
func EditUser(c *gin.Context) {
|
||||
var user EditInfoRequest
|
||||
id := c.Param("id")
|
||||
uid, _ := strconv.Atoi(id)
|
||||
api.Link()
|
||||
DB := db.DBsnctf
|
||||
err := c.ShouldBindJSON(&user)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Update user error!"})
|
||||
return
|
||||
}
|
||||
upuser := &EditInfoRequest{
|
||||
Username: user.Username,
|
||||
Password: user.Password,
|
||||
Email: user.Email,
|
||||
Affiliation: user.Affiliation,
|
||||
Country: user.Country,
|
||||
Website: user.Website,
|
||||
Banned: user.Banned,
|
||||
Hidden: user.Hidden,
|
||||
Role: user.Role,
|
||||
TeamID: user.TeamID,
|
||||
}
|
||||
err = DB.Table("user").Where("id = ?", uid).Updates(upuser).Error
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Update user error!"})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "msg": "Update user success!"})
|
||||
}
|
||||
|
||||
// AddUser 新增用户
|
||||
func AddUser(c *gin.Context) {
|
||||
var user User
|
||||
api.Link()
|
||||
DB := db.DBsnctf
|
||||
err := c.ShouldBindJSON(&user)
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Add user error!"})
|
||||
return
|
||||
}
|
||||
err = DB.Debug().Table("user").Create(&user).Error
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Add user error!"})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "msg": "Add user success!"})
|
||||
}
|
@@ -11,7 +11,7 @@ import (
|
||||
|
||||
//GetAllChallenges 获取全部题目
|
||||
|
||||
func GetAllChallenges(c * gin.Context){
|
||||
func GetAllChallenges(c *gin.Context) {
|
||||
var challenges []ChallengeResponse
|
||||
|
||||
if err := getAllChallenges(c, &challenges); err != nil {
|
||||
@@ -25,33 +25,75 @@ func GetAllChallenges(c * gin.Context){
|
||||
|
||||
//GetChallengesByCategory 获取某个分类下的题目
|
||||
|
||||
func GetChallengesByCategory(c *gin.Context){
|
||||
func GetChallengesByCategory(c *gin.Context) {
|
||||
category := c.Param("category")
|
||||
if matched := CheckCategory(category); !matched {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Wrong category!"})
|
||||
return
|
||||
}
|
||||
var challenges []ChallengeResponse
|
||||
if err := getAllChallenges(c, &challenges); err != nil {
|
||||
if err := getCategory(c, &challenges); err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get all challenges failure!"})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "data": challenges})
|
||||
|
||||
}
|
||||
|
||||
//getCategory 操作数据库获取某个分类下的题目
|
||||
func getCategory(c *gin.Context, challenges *[]ChallengeResponse) error {
|
||||
var attachmentString, hints string
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
category := c.Param("category")
|
||||
rows, err := DB.Raw("SELECT id, name, score, description, attachment, category, tags, hints FROM challenge WHERE visible=1 AND category=?;", category).Rows()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var challenge ChallengeResponse
|
||||
err = rows.Scan(&challenge.ID, &challenge.Name, &challenge.Score, &challenge.Description, &attachmentString, &challenge.Category, &challenge.Tags, &hints)
|
||||
fmt.Println(err)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 解析为切片
|
||||
challenge.Attachment = strings.Split(attachmentString, ",")
|
||||
challenge.Hints = strings.Split(hints, ",")
|
||||
|
||||
solverCount, err := getSolverCount(challenge.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
challenge.SolverCount = solverCount
|
||||
session, err := Store.Get(c.Request, "SNCTFSESSID")
|
||||
if err != nil {
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "Get SNCTFSESSID error"})
|
||||
return err
|
||||
}
|
||||
user, ok := session.Values["user"].(User)
|
||||
if !ok {
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "No session"})
|
||||
return errors.New("no session")
|
||||
}
|
||||
challenge.IsSolved = hasAlreadySolved(user.ID, challenge.ID)
|
||||
*challenges = append(*challenges, challenge)
|
||||
}
|
||||
return rows.Err()
|
||||
|
||||
}
|
||||
|
||||
// getAllChallenges 操作数据库获取所有题目。
|
||||
func getAllChallenges(c *gin.Context, challenges *[]ChallengeResponse) error {
|
||||
var attachmentString, hints string
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
rows,err := DB.Raw("SELECT id, name, score, description, attachment, category, tags, hints FROM challenge WHERE visible=1;").Rows()
|
||||
rows, err := DB.Raw("SELECT id, name, score, description, attachment, category, tags, hints FROM challenge WHERE visible=1;").Rows()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next(){
|
||||
for rows.Next() {
|
||||
var challenge ChallengeResponse
|
||||
err = rows.Scan(&challenge.ID, &challenge.Name, &challenge.Score, &challenge.Description, &attachmentString, &challenge.Category, &challenge.Tags, &hints)
|
||||
fmt.Println(err)
|
||||
|
@@ -1,9 +1,11 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
. "main.go/type"
|
||||
db "main.go/database"
|
||||
"main.go/tools"
|
||||
. "main.go/type"
|
||||
)
|
||||
|
||||
// GetAllNotices 获取所有的公告
|
||||
@@ -17,7 +19,6 @@ func GetAllNotices(c *gin.Context) {
|
||||
c.JSON(200, gin.H{"code": 200, "data": notices})
|
||||
}
|
||||
|
||||
|
||||
func getAllNotices(notices *[]Notice) error {
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
@@ -37,3 +38,41 @@ func getAllNotices(notices *[]Notice) error {
|
||||
}
|
||||
return rows.Err()
|
||||
}
|
||||
|
||||
// AddNewNotices 新增公告
|
||||
func AddNewNotices(c *gin.Context) {
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
var request NoticeRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
fmt.Println(err)
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"})
|
||||
return
|
||||
}
|
||||
addtime := tools.Timestamp()
|
||||
notice := &Notice{
|
||||
Title: request.Title,
|
||||
Content: request.Content,
|
||||
CreatedAt: addtime,
|
||||
}
|
||||
err := DB.Table("notice").Create(¬ice).Error
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "error for database"})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "msg": "success!"})
|
||||
|
||||
}
|
||||
|
||||
// DelNotice 删除公告
|
||||
func DelNotice(c *gin.Context) {
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
noticeid := c.Param("id")
|
||||
err := DB.Table("notice").Where("id = ?", noticeid).Delete(&Notice{}).Error
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "error for database"})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "msg": "success!"})
|
||||
}
|
||||
|
@@ -13,18 +13,19 @@ import (
|
||||
func hasAlreadySolved(uid int, cid int) (exists bool) {
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
err := DB.Raw("SELECT EXISTS(SELECT 1 FROM solve WHERE uid=? AND cid=?)",uid,cid).Scan(&exists).Error
|
||||
if err != nil {
|
||||
err := DB.Raw("SELECT EXISTS(SELECT 1 FROM solve WHERE uid=? AND cid=?)", uid, cid).Scan(&exists).Error
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return exists
|
||||
}
|
||||
|
||||
// isChallengeExisted 检查数据库中是否存在某个题目。
|
||||
func isChallengeExisted(id int) (exists bool) {
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
command := "SELECT EXISTS(SELECT 1 FROM challenge WHERE id = ?);"
|
||||
err := DB.Raw(command,id).Scan(&exists).Error
|
||||
err := DB.Raw(command, id).Scan(&exists).Error
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
@@ -48,7 +49,7 @@ func addSubmission(s *Submission) error {
|
||||
func getFlag(id int) (flag string, err error) {
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
err = DB.Table("challenge").Select("flag").Where("id = ?",id).Find(&flag).Error
|
||||
err = DB.Table("challenge").Select("flag").Where("id = ?", id).Find(&flag).Error
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -81,10 +82,11 @@ func addUserScore(username string, cid int) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// updateUserScores 操作数据库更新解出用户的分数。
|
||||
func updateUserScores(reducedScore, cid int) error {
|
||||
|
||||
DB:=db.DBsnctf
|
||||
DB := db.DBsnctf
|
||||
command := "UPDATE score SET score=score-? WHERE EXISTS(SELECT 1 FROM user,solve WHERE user.id=solve.uid AND score.username=user.username AND solve.cid=?);"
|
||||
err := DB.Exec(command, reducedScore, cid).Error
|
||||
|
||||
@@ -127,12 +129,12 @@ func SubmitFlag(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
session,err := Store.Get(c.Request, "SNCTFSESSID")
|
||||
session, err := Store.Get(c.Request, "SNCTFSESSID")
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "GET SNCTFSESSID error!"})
|
||||
return
|
||||
}
|
||||
user,ok := session.Values["user"].(User)
|
||||
user, ok := session.Values["user"].(User)
|
||||
if !ok {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "GET user error!"})
|
||||
return
|
||||
@@ -158,21 +160,21 @@ func SubmitFlag(c *gin.Context) {
|
||||
}
|
||||
// 是否已经解出该题
|
||||
if hasAlreadySolved(user.ID, request.Cid) {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Already solved!"})
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "Already solved!"})
|
||||
return
|
||||
}
|
||||
// 获取flag
|
||||
flag, err := getFlag(request.Cid)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get flag failure!"})
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "Get flag failure!"})
|
||||
return
|
||||
}
|
||||
// 检查flag是否正确
|
||||
if flag != request.Flag {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Wrong flag!"})
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "Wrong flag!"})
|
||||
return
|
||||
}else {
|
||||
} else {
|
||||
// Solve记录
|
||||
solve := &Solve{
|
||||
UserID: user.ID,
|
||||
@@ -181,7 +183,7 @@ func SubmitFlag(c *gin.Context) {
|
||||
}
|
||||
err = addSolve(solve)
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Record solve failure!"})
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "Record solve failure!"})
|
||||
return
|
||||
}
|
||||
//加分
|
||||
@@ -208,4 +210,4 @@ func SubmitFlag(c *gin.Context) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
60
api/user.go
60
api/user.go
@@ -35,6 +35,7 @@ func Login(c *gin.Context) {
|
||||
//code 1用户名或密码错误
|
||||
|
||||
err := DB.Take(&user, "username = ?", request.Username).Error
|
||||
|
||||
if err != nil {
|
||||
c.JSON(200, gin.H{
|
||||
"Error": true,
|
||||
@@ -193,7 +194,7 @@ func GetInfoByUserId(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
err := DB.Debug().Raw("SELECT username,affiliation,country,team_id FROM user WHERE id = ? LIMIT 1", id).Scan(&info).Error
|
||||
err := DB.Debug().Raw("SELECT username,affiliation,country,team_id,website FROM user WHERE id = ? LIMIT 1", id).Scan(&info).Error
|
||||
//err := DB.Where("id = ?", id).First(user).Error
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get info error!"})
|
||||
@@ -203,6 +204,63 @@ func GetInfoByUserId(c *gin.Context) {
|
||||
|
||||
}
|
||||
|
||||
// UpdateUserInfo 更新用户信息
|
||||
func UpdateUserInfo(c *gin.Context) {
|
||||
var user User
|
||||
var request UpdateUserInfoRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"})
|
||||
return
|
||||
}
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
session, err := Store.Get(c.Request, "SNCTFSESSID")
|
||||
if err != nil {
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "Get SNCTFSESSID error"})
|
||||
}
|
||||
user, ok := session.Values["user"].(User)
|
||||
if !ok {
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "No session"})
|
||||
}
|
||||
//获取用户id
|
||||
userid := user.ID
|
||||
//获取传入数据
|
||||
username := request.Name
|
||||
affiliation := request.Affiliation
|
||||
country := request.Country
|
||||
website := request.Website
|
||||
email := request.Email
|
||||
//数据库更新数据
|
||||
err = DB.Model(&user).Where("id = ?", userid).Update("username", username).Update("affiliation", affiliation).Update("country", country).Update("website", website).Update("email", email).Error
|
||||
if err != nil {
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "Update info error!"})
|
||||
return
|
||||
}
|
||||
//更新session
|
||||
session.Values["user"] = user
|
||||
c.JSON(200, gin.H{"code": 200, "msg": "Update info success!"})
|
||||
|
||||
}
|
||||
|
||||
// GetAllUserInfo 获取所有用户信息
|
||||
func GetAllUserInfo(c *gin.Context) {
|
||||
var info PublicAllInfoResponse
|
||||
var alla []PublicAllInfoResponse
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
rows, err := DB.Debug().Select([]string{"id", "username", "affiliation", "country", "website"}).Table("user").Where("hidden = ?", 0).Rows()
|
||||
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get info error!"})
|
||||
return
|
||||
}
|
||||
for rows.Next() {
|
||||
rows.Scan(&info.Id, &info.Username, &info.Affiliation, &info.Country, &info.Website)
|
||||
alla = append(alla, info)
|
||||
}
|
||||
c.JSON(200, gin.H{"code": 200, "data": alla})
|
||||
}
|
||||
|
||||
// checkUsername 验证用户名是否符合中文数字字母下划线横杠,长度1到10位,返回true或false
|
||||
func checkUsername(username string) bool {
|
||||
if !(utf8.RuneCountInString(username) > 0) || !(utf8.RuneCountInString(username) < 11) {
|
||||
|
@@ -6,28 +6,28 @@ import (
|
||||
"main.go/api/admin"
|
||||
)
|
||||
|
||||
|
||||
func Initrouter(){
|
||||
func Initrouter() {
|
||||
router := gin.Default()
|
||||
router.Use(Cors())
|
||||
api_v1 := router.Group("/api/v1")
|
||||
|
||||
//公共接口(无需登录)
|
||||
public := api_v1.Group("")
|
||||
{
|
||||
//用户登录
|
||||
public.POST("/login",api.Login)
|
||||
public.POST("/login", api.Login)
|
||||
//用户注册
|
||||
public.POST("/register",api.Register)
|
||||
public.POST("/register", api.Register)
|
||||
//用户登出
|
||||
public.GET("/logout",api.Logout)
|
||||
public.GET("/logout", api.Logout)
|
||||
//获取指定id用户可公开信息
|
||||
public.GET("/user/:id",api.GetInfoByUserId)
|
||||
public.GET("/user/:id", api.GetInfoByUserId)
|
||||
//获取指定id用户分数
|
||||
public.GET("/score/:id",api.GetScoreByUserId)
|
||||
public.GET("/score/:id", api.GetScoreByUserId)
|
||||
//获取所有用户分数,降序排列
|
||||
public.GET("/score",api.GetAllScore)
|
||||
public.GET("/score", api.GetAllScore)
|
||||
//获取全部公告
|
||||
public.GET("/notice",api.GetAllNotices)
|
||||
public.GET("/notice", api.GetAllNotices)
|
||||
|
||||
}
|
||||
// 普通用户api,需要用户登陆且Role=0才能访问
|
||||
@@ -36,6 +36,8 @@ func Initrouter(){
|
||||
{
|
||||
// 获取当前用户信息
|
||||
personal.GET("/session", api.Session)
|
||||
// 修改当前用户的信息
|
||||
personal.PUT("/userinfo", api.UpdateUserInfo)
|
||||
// 获取题目分类
|
||||
personal.GET("/category", api.GetCategories)
|
||||
// 获取所有题目信息
|
||||
@@ -55,6 +57,8 @@ func Initrouter(){
|
||||
personal.GET("/solves/self", api.GetSelfSolves)
|
||||
// 获取当前用户分数、排名
|
||||
personal.GET("/score/self", api.GetSelfScoreAndRank)
|
||||
// 获取所有用户信息
|
||||
personal.GET("/users", api.GetAllUserInfo)
|
||||
// 校内排行api,暂时留空
|
||||
}
|
||||
// 管理员api,需要用户登陆且Role=1才能访问
|
||||
@@ -63,10 +67,51 @@ func Initrouter(){
|
||||
{
|
||||
// 创建新题目
|
||||
manager.POST("/challenge", admin.NewChallenge)
|
||||
// 删除题目 测试通过,但是分数不会同步删除
|
||||
manager.DELETE("/challenge/:id", admin.DelChallenge)
|
||||
// 获取所有题目,包括不可见题目
|
||||
manager.GET("/challenges", admin.GetAllChallenges)
|
||||
// 更新题目信息
|
||||
manager.PUT("/challenge/:id", admin.EditChallenge)
|
||||
//创建新公告
|
||||
manager.POST("/notice", api.AddNewNotices)
|
||||
//删除公告
|
||||
manager.DELETE("/notice/:id", api.DelNotice)
|
||||
|
||||
//显示数据库中所有用户信息
|
||||
manager.GET("/users", admin.GetAllUserInfo)
|
||||
//删除用户信息
|
||||
manager.DELETE("/user/:id", admin.DelUser)
|
||||
//修改用户信息
|
||||
manager.PUT("/user/:id", admin.EditUser)
|
||||
//新增用户
|
||||
manager.POST("/user", admin.AddUser)
|
||||
|
||||
}
|
||||
|
||||
err := router.Run(":9000")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
router.Run(":9000")
|
||||
}
|
||||
// 跨域
|
||||
func Cors() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
method := c.Request.Method
|
||||
origin := c.Request.Header.Get("Origin") //请求头部
|
||||
if origin != "" {
|
||||
c.Header("Access-Control-Allow-Origin", origin) //"http://172.20.10.10:8081")
|
||||
c.Header("Access-Control-Allow-Headers", "Content-Category, AccessToken, X-CSRF-Token, Authorization, Token, Content-Type")
|
||||
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PATCH, DELETE, PUT")
|
||||
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Category")
|
||||
c.Header("Access-Control-Max-Age", "172800")
|
||||
c.Header("Access-Control-Allow-Credentials", "true")
|
||||
}
|
||||
if method == "OPTIONS" {
|
||||
c.JSON(200, "ok")
|
||||
}
|
||||
// 处理请求
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDA1NHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyZp7R_7HdiX8UyxFTMz3PPRiS83yhpcaLmGMFD-L145A==
|
@@ -1 +0,0 @@
|
||||
MTY1MTU4Mjk5OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXzX2Hfpvc6Jpgio2o1bCyD8p5MlWNkPlboWDL4O92SG8w==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDA0OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXx0YsVP0Bsx_UC-SMnT2H5sXa3Rv-emyNOprM7KTZO22g==
|
@@ -1 +0,0 @@
|
||||
MTY1Mjk3NTUwM3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18R_nBzwfvM0VB9HgjG3j_tOYrJh9OwzMtHi7AxxPqDG4=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3NDQ4NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18aaWkxhTEgthoUKJ1GTlpyzmrevXI2QOM7XmE1f4Tws4=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3MzM5OXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18g3L0zUnti_MnEg_YIhPvXDONG7L4o30Yq1IHE4hKPzI=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY2NTYyNnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyEWhEqOaCFOXqnMIdP2SHN9WFhZxAjVudLfyUTS4zkfg==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDgyMXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwtNDxPyD59Y9CBHfAh54_pGb0xED5BrnS12WfwMbrHxQ==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY2NTQ2M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyBdgjcvRGhK6JnTrLlQETdtrVHCfqXHN9UWI5yMVsMTg==
|
@@ -1 +0,0 @@
|
||||
MTY1MTU4MjEyNXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXz6W0gwBf2X0RyprFJTaSBL1JLYgGYkXgcIh29Db_gJpw==
|
@@ -1 +0,0 @@
|
||||
MTY1Mjk3Mzc2OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18ONHNYhjemKmcTQ56VURz0wNePYzECS31waCtlRhCu78=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDk3M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyYBQByVjLbJZ2x4QafNqgpp-n6kCesEB6BNfoXvq-1ig==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
@@ -1 +0,0 @@
|
||||
MTY1MTU3NDg2NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXy1hayYz7EXP5XMGKWMk_wssR8J1BlbjDrxaakLbTIh1Q==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY2NTYyMXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXx7IIV8mOmTS0o0qjO2cO8ESW-joxUKV1YJS3-WHMUsFw==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDYzOXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwcSl56VFVQxQEhpD-LhkTqwgcmHgnPsmyT5kMXen_-1A==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3NDA3NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18EL_WCkeFjFbdJfyQGOSGVdIiX90CG6tvNZGdzl-mz2Y=
|
@@ -1 +0,0 @@
|
||||
MTY1MTU3NDk0NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXyOhGtdUodGwIpp0X9-g40AHGjmu3wvk-AU00RFNBkUuA==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3NDQ4OXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18eF3jTQqiTGwMrs-jtADV7OUSEV_wRzjg4EPnsC3tODw=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MTEwMXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXz5N5DorLr_UFgR8-PWyhwNcuD4pxzodlbWGkz7ANTDeA==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDc0NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXxXvX5_tBpv8gObNjrYH-KN7qp4tSGZ9725DdUo6qCe7g==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MTE0OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwcVGMp_v68wUnLRiSrd_xE_xurHal0es8Gxhq2FwOz4A==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3MzkwNHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18rYkgKtXvBGRfxZ9HaRsSscZ2QAXjFu9Y9b1pwoeu-B0=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDE0NXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXxt8__tXjZbcAc0ZhuT_1Ae991kPMs2j823Shb1IgUMhw==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDc0N3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzQxs1oG1_iJaION26ztr96l3eyW0Bm6hvMT6X9wucpzw==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3MzE2M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18XfrVpy5QOn89OAXXX_p5Om024hdVvn9DzpOVBUOKfTc=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDYzOXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwcSl56VFVQxQEhpD-LhkTqwgcmHgnPsmyT5kMXen_-1A==
|
@@ -1 +0,0 @@
|
||||
MTY1MTU4MjE3OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXyzrYkoEMyAeckMlz8wT3gRi8kpbicHZdXjmaYCSYEbTQ==
|
@@ -1 +0,0 @@
|
||||
MTY1NDA3MzA5MHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT189JqRfiFtYh5iCXgmTfG1gTbmx1-nDGdxL99aHII06bM=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3NDA3N3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT188eytn4LgdEMhXv4tFo0JNWC070N3GUuIsRNEYTyvx5c=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDE1MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzM8T4GoEMSqIe8zK2A6wn67v1nguMDHjUUo-yjKjNfcQ==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDM2MXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXx7XIYKo0HoZNY_DZVwi9ellyBp7o7V2gvM9Vb0pUli3Q==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDk3MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwR9evf4tXU9hUpH4hw_D6l7w4n0j-1Vf16locrZWzLFQ==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3MzE2MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18br434P_axalM2X4F6b6cEEkrCpk8OnhOsjp85410v0c=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY2NTQ2MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyfWEkkjK48q8lwLJEJSc7cQXbRGdDabcUHO9FVZID_5w==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY0OTk3OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXz0n4VX35X4e92mOLcdNVwHgoxgzHHGs7fSQ33yrgyMbA==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDM1M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzkpY_PPKBue5Qf7ZOP3tDQATS2rujJjRsNsVHTEL94lQ==
|
@@ -1 +0,0 @@
|
||||
MTY1Mjk3MTY3NHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT1808avPSF-CPY2M9KO1Gx-opThsHsrJxKGaUPR7BZp9WQ=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
@@ -1 +0,0 @@
|
||||
MTY1MTU3NzQwOXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXwP-FCJdqMaFJIxqG_AYodOb2iE8gguAw2E3W5WVu4v8g==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3NDE5MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18gUD_A631PFOBncH-QOxKbkmt0xtW6Fgug3qcEUfijcA=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MTEwMnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXxgHRdZoPZBE0kDMmtyHrzAaMfiKhlGdCF47u58n45cSw==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3NDE5M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18Cyx59YJB_tTb2EBULWXlfVECSpk1iqkG-odREjbKGsc=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
@@ -1 +0,0 @@
|
||||
MTY1MTU4MjQzNXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXw8cY50NHs9S6zCZtQkXsjSnr7Wv1O2LJ1X2cLAjybXIA==
|
@@ -1 +0,0 @@
|
||||
MTY1MTU4MTg5MHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXzKFszom5pRA96lq3Lb2fT6iDLQL1sguZ3xph75DDNpCQ==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MTE0OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwcVGMp_v68wUnLRiSrd_xE_xurHal0es8Gxhq2FwOz4A==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDgxOXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyD0OzJ2XvmQTfT3cln5USKo4wbM01lrwy_1tkmotJG-w==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3NDE5M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18Cyx59YJB_tTb2EBULWXlfVECSpk1iqkG-odREjbKGsc=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3MzQwNHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18UB3CM0FYHNdONL4rdGwb5t1aFPoJvD0sQsEEM4YJxHo=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3MzkwM3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT184E0y_hLsOmZ_gsWkLUJ_O2Xo6AGbJfaUboiHww2JZoM=
|
@@ -1 +0,0 @@
|
||||
MTY1MTY3MzMwM3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18XAWDOQNDSejAMWM96plPufODrSs0R38IJWaPlh7NpZc=
|
@@ -1 +0,0 @@
|
||||
MTY1Mjk3MjEwMnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18EA6m0QoNTA0TT7IkJ-AfPqtOHKKazFKMpf5FQI2Xr6A=
|
@@ -28,8 +28,6 @@ func Token() string {
|
||||
func Timestamp() int {
|
||||
// time_zone := time.FixedZone("UTC", 0)
|
||||
// t := time.Now().In(time_zone).Unix()
|
||||
t := time.Now().Unix()
|
||||
t := time.Now().UnixNano() / 1e6
|
||||
return int(t)
|
||||
}
|
||||
|
||||
|
||||
|
@@ -13,6 +13,31 @@ type ChallengeRequest struct {
|
||||
Visible int `json:"visible"`
|
||||
}
|
||||
|
||||
type ChallengeRequeststrings struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Score int `json:"score" binding:"required"`
|
||||
Flag string `json:"flag"` // 暂时一个题只能一个flag
|
||||
Description string `json:"description"`
|
||||
Attachment []string `json:"attachment"`
|
||||
Category string `json:"category" binding:"required"`
|
||||
Tags string `json:"tags"`
|
||||
Hints []string `json:"hints"`
|
||||
Visible string `json:"visible"`
|
||||
}
|
||||
|
||||
type ChallengeRequest2 struct {
|
||||
Id int `json:"id"`
|
||||
Name string `json:"name" binding:"required"`
|
||||
Score int `json:"score" binding:"required"`
|
||||
Flag string `json:"flag"` // 暂时一个题只能一个flag
|
||||
Description string `json:"description"`
|
||||
Attachment []string `json:"attachment"`
|
||||
Category string `json:"category" binding:"required"`
|
||||
Tags string `json:"tags"`
|
||||
Hints []string `json:"hints"`
|
||||
Visible int `json:"visible"`
|
||||
}
|
||||
|
||||
// NoticeRequest 定义新增公告的一个请求
|
||||
type NoticeRequest struct {
|
||||
Title string `form:"title" json:"title" binding:"required"`
|
||||
|
@@ -94,6 +94,48 @@ type PublicInfoResponse struct {
|
||||
Affiliation string `json:"affiliation"`
|
||||
Country string `json:"country"`
|
||||
TeamID int `json:"team_id"`
|
||||
Website string `json:"website"`
|
||||
}
|
||||
|
||||
// PublicAllInfoResponse 定义返回所有用户公开信息结构体 暂时不显示队伍名称
|
||||
type PublicAllInfoResponse struct {
|
||||
Id string `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Affiliation string `json:"affiliation"`
|
||||
Country string `json:"country"`
|
||||
Website string `json:"website"`
|
||||
TeamID string `json:"team_id"`
|
||||
Hidden string `json:"hidden"`
|
||||
}
|
||||
|
||||
// AllInfoResponse 定义返回所有用户公开信息结构体
|
||||
type AllInfoResponse struct {
|
||||
Id string `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
Email string `json:"email"`
|
||||
Affiliation string `json:"affiliation"`
|
||||
Country string `json:"country"`
|
||||
Website string `json:"website"`
|
||||
TeamID string `json:"team_id"`
|
||||
Hidden string `json:"hidden"`
|
||||
Banned string `json:"banned"`
|
||||
Role string `json:"role"`
|
||||
}
|
||||
|
||||
// EditInfoRequest 定义修改用户信息的结构体
|
||||
type EditInfoRequest struct {
|
||||
Id string `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
Email string `json:"email"`
|
||||
Affiliation string `json:"affiliation"`
|
||||
Country string `json:"country"`
|
||||
Website string `json:"website"`
|
||||
TeamID int `json:"team_id"`
|
||||
Hidden string `json:"hidden"`
|
||||
Banned string `json:"banned"`
|
||||
Role string `json:"role"`
|
||||
}
|
||||
|
||||
// ChallengeResponse 定义获取题目的一个响应。
|
||||
@@ -101,13 +143,13 @@ type ChallengeResponse struct {
|
||||
ID int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Score int `json:"score"`
|
||||
Description string `json:"description"` //题目描述
|
||||
Attachment []string `json:"attachment"` //题目附件
|
||||
Category string `json:"category"` //分类
|
||||
Tags string `json:"tags"` //标签
|
||||
Hints []string `json:"hints"` //提示
|
||||
SolverCount int `json:"solver_count"` //解决人数
|
||||
IsSolved bool `json:"is_solved"` // true:已解决,false:未解决
|
||||
Description string `json:"description"` //题目描述
|
||||
Attachment []string `json:"attachment"` //题目附件
|
||||
Category string `json:"category"` //分类
|
||||
Tags string `json:"tags"` //标签
|
||||
Hints []string `json:"hints"` //提示
|
||||
SolverCount int `json:"solver_count"` //解决人数
|
||||
IsSolved bool `json:"is_solved"` // true:已解决,false:未解决
|
||||
}
|
||||
|
||||
// ScoreRankResponse 定义获取当前用户分数和排名的一个响应。
|
||||
@@ -122,3 +164,12 @@ type StudentsOrOthersInfoResponse struct {
|
||||
IDOrEmail string `json:"id_email"`
|
||||
QQ string `json:"qq"`
|
||||
}
|
||||
|
||||
// UpdateUserInfoResponse 定义更新用户信息的响应
|
||||
type UpdateUserInfoRequest struct {
|
||||
Name string `json:"name"`
|
||||
Email string `json:"email"`
|
||||
Country string `json:"country"`
|
||||
Website string `json:"website"`
|
||||
Affiliation string `json:"affiliation"`
|
||||
}
|
||||
|
Reference in New Issue
Block a user