Compare commits
No commits in common. "master" and "init" have entirely different histories.
@ -45,7 +45,7 @@ func HGamePreOrder(w http.ResponseWriter, r *http.Request) {
|
||||
uid := r.PostFormValue("uid")
|
||||
sid := r.PostFormValue("server")
|
||||
|
||||
if !redis.IsValidServerId(util.StringToUint32(sid)) {
|
||||
if !redis.HExists("game_info", sid) {
|
||||
log.Error("not Found server ", r.Form.Encode())
|
||||
return
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ func HuaweiPreOrder(w http.ResponseWriter, r *http.Request) {
|
||||
sid := r.PostFormValue("server")
|
||||
log.Debugf("HuaweiPreOrder Param %+v", r.Form)
|
||||
|
||||
if !redis.IsValidServerId(util.StringToUint32(sid)) {
|
||||
if !redis.HExists("game_info", sid) {
|
||||
log.Error("not Found server ", r.Form.Encode())
|
||||
return
|
||||
}
|
||||
|
@ -5,8 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"game/base/log"
|
||||
//"game/base/redis"
|
||||
"game/config"
|
||||
"game/base/redis"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
@ -14,7 +13,6 @@ import (
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// Server 服务器
|
||||
@ -31,7 +29,6 @@ func (srv *PayServer) Run() {
|
||||
//开始access Token服务
|
||||
//platApi.StartAccessTokenMgr()
|
||||
|
||||
/*
|
||||
http.HandleFunc("/qqPreOrder", QQPreOrder)
|
||||
http.HandleFunc("/qqCallback", srv.QQPayCallBack)
|
||||
http.HandleFunc("/oppoPreOrder", OppoPreOrder)
|
||||
@ -49,9 +46,7 @@ func (srv *PayServer) Run() {
|
||||
http.HandleFunc("/huaweiPreOrder", HuaweiPreOrder)
|
||||
http.HandleFunc("/checkRegisterReward", srv.CheckRegisterReward)
|
||||
http.HandleFunc("/RegisterReward", srv.RegisterReward)
|
||||
http.HandleFunc("/testGameProxy", srv.TestGameProxy)
|
||||
http.HandleFunc("/selfChecking", srv.SelfChecking)
|
||||
*/
|
||||
|
||||
server := http.Server{Addr: srv.addr, Handler: http.DefaultServeMux}
|
||||
go func() {
|
||||
err := server.ListenAndServe()
|
||||
@ -124,73 +119,8 @@ type ServerInfo struct {
|
||||
WorldName string `json:"worldName"`
|
||||
}
|
||||
|
||||
func (srv *PayServer) forwardKsGame(sid int, urlPath string, msg interface{}, name string) (respData []byte, e error) {
|
||||
var data []byte
|
||||
data, e = json.Marshal(msg)
|
||||
if e != nil {
|
||||
log.Debug("SendMsgToGameProxy e:", e)
|
||||
return
|
||||
}
|
||||
|
||||
var domain_name = "game1009proxy.kingsome.cn"
|
||||
if config.CmConfig.IsProxyDebug {
|
||||
domain_name = "game1009proxy-test.kingsome.cn"
|
||||
}
|
||||
|
||||
sUrl := fmt.Sprintf("https://%s/webapp/index.php?c=GameProxy&a=forwardMsg&sid=%d&urlPath=%s&msg=%s&name=%s",
|
||||
domain_name,
|
||||
sid,
|
||||
urlPath,
|
||||
url.QueryEscape(string(data)),
|
||||
url.QueryEscape(string(name)))
|
||||
ss, _ := url.QueryUnescape(sUrl)
|
||||
log.Info("SendMsgToGameProxy Url ", ss)
|
||||
|
||||
var resp *http.Response
|
||||
resp, e = http.Get(sUrl)
|
||||
if e != nil {
|
||||
log.Error("SendMsgToGameProxy Get fail err:", e)
|
||||
return
|
||||
}
|
||||
|
||||
respData, e = ioutil.ReadAll(resp.Body)
|
||||
if e != nil {
|
||||
log.Error("SendMsgToGameProxy ReadAll fail err:", e)
|
||||
return
|
||||
}
|
||||
resp.Body.Close()
|
||||
|
||||
log.Info("response", string(respData))
|
||||
return respData, nil;
|
||||
}
|
||||
|
||||
func (srv *PayServer) TestGameProxy(w http.ResponseWriter, r *http.Request) {
|
||||
var msg = make(map[string]string)
|
||||
var e error
|
||||
if e = json.Unmarshal([]byte(r.FormValue("msg")), &msg); e != nil {
|
||||
log.Error("SendMsgToGame Unmarshal fail err:", e)
|
||||
return
|
||||
}
|
||||
var sid, _ = strconv.Atoi(r.FormValue("sid"));
|
||||
var urlPath = "selfChecking"
|
||||
if config.CmConfig.IsProxyDebug {
|
||||
urlPath = r.FormValue("urlPath")
|
||||
}
|
||||
var name = r.FormValue("name")
|
||||
|
||||
var respData, _ = srv.forwardKsGame(
|
||||
sid,
|
||||
urlPath,
|
||||
msg,
|
||||
name)
|
||||
log.Info("response", string(respData))
|
||||
w.Write(respData)
|
||||
}
|
||||
|
||||
func (srv *PayServer) SendMsgToGame(sid int, urlPath string, msg interface{}, name string) (respData []byte, e error) {
|
||||
respData, e = srv.forwardKsGame(sid, urlPath, msg, name)
|
||||
return respData, e
|
||||
/*info := redis.HGet("game_info", sid)
|
||||
info := redis.HGet("game_info", sid)
|
||||
if info == "" {
|
||||
log.Debug("SendMsgToGame info=nil")
|
||||
return
|
||||
@ -234,10 +164,5 @@ func (srv *PayServer) SendMsgToGame(sid int, urlPath string, msg interface{}, na
|
||||
return
|
||||
}
|
||||
log.Info("SendMail Fail msg:", msg, " sid:", sid, " name:", name, " rr:", rr)
|
||||
return*/
|
||||
return
|
||||
}
|
||||
|
||||
func (srv *PayServer) SelfChecking(w http.ResponseWriter, r *http.Request) {
|
||||
w.Write([] byte(`{"errcode":0,"errmsg":"","healthy":1,"max_rundelay":1}`))
|
||||
}
|
||||
|
||||
|
@ -6,10 +6,8 @@ import (
|
||||
"game/base/platApi"
|
||||
"game/base/util"
|
||||
"game/config"
|
||||
"game/excel"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func QQPreOrder(w http.ResponseWriter, r *http.Request) {
|
||||
@ -24,14 +22,11 @@ func QQPreOrder(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
r.ParseForm()
|
||||
openid := r.Form.Get("openid")
|
||||
//uid := r.Form.Get("uid")
|
||||
zone := r.Form.Get("sid")
|
||||
item := r.Form.Get("produce")
|
||||
sessionKey := r.Form.Get("session")
|
||||
//amt := r.Form.Get("amt")
|
||||
//amount := util.StringToUint32(r.Form.Get("amount"))
|
||||
amt := "1"
|
||||
amount := uint32(1)
|
||||
zone := r.Form.Get("zone")
|
||||
item := r.Form.Get("item")
|
||||
amt := r.Form.Get("amt")
|
||||
sessionKey := r.Form.Get("sessionKey")
|
||||
amount := util.StringToUint32(r.Form.Get("amount"))
|
||||
token := platApi.GetAppAccessToken(config.QQAppID, config.QQAppSecret, platApi.Plat_QQ)
|
||||
|
||||
ret, err := platApi.QQPrePay(openid, config.QQAppID, zone, amt, item, amount, token, sessionKey)
|
||||
@ -45,10 +40,8 @@ func QQPreOrder(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (srv *PayServer) QQPayCallBack(w http.ResponseWriter, r *http.Request) {
|
||||
ret := &platApi.QQPayCallBackRet{}
|
||||
var data []byte
|
||||
defer func() {
|
||||
log.Info("QQPayCallBack ret:", ret)
|
||||
data, _ := json.Marshal(ret)
|
||||
w.Write(data)
|
||||
}()
|
||||
|
||||
@ -66,47 +59,22 @@ func (srv *PayServer) QQPayCallBack(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
log.Info(" req:", req)
|
||||
|
||||
ok := platApi.QQCallBackVerify(req, r.URL.Path, config.QQAppSecret)
|
||||
if !ok {
|
||||
ret.Code = 1
|
||||
ret.Msg = "签名检验失败"
|
||||
return
|
||||
}
|
||||
|
||||
extInfo := strings.Split(req.AppRemark, "-")
|
||||
if len(extInfo) != 3 {
|
||||
ret.Code = 2
|
||||
ret.Msg = "app_remark参数格式错误"
|
||||
ret := &platApi.QQPayCallBackRet{}
|
||||
//ret.Code=
|
||||
//ret.Msg =
|
||||
|
||||
log.Info("QQPayCallBack ret:", ret, " req:", req)
|
||||
data, err = json.Marshal(ret)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
sid := util.StringToInt(extInfo[0])
|
||||
produce := util.StringToUint32(extInfo[1])
|
||||
uid := util.StringToUint64(extInfo[2])
|
||||
|
||||
info := excel.GetPlatformIdById(produce)
|
||||
msg := &RechargeCommonC2SMsg{
|
||||
RoleId: uid,
|
||||
Rmb: float32(info.Money),
|
||||
ChargeYb: info.Money * 10,
|
||||
GiftYb: 0,
|
||||
OrderId: r.FormValue("bill_no"),
|
||||
POrderId: r.FormValue("bill_no"),
|
||||
PlatformIp: r.Header.Get("X-Real_IP"),
|
||||
AttType: info.Type,
|
||||
AttValue: info.Index,
|
||||
}
|
||||
code, _ := srv.DeliverGood(sid, msg)
|
||||
if code == 1 || code == 1002 {
|
||||
ret.Code = 0
|
||||
} else {
|
||||
ret.Code = 3
|
||||
}
|
||||
log.Info("QQCallback DeliverRecv sid:", sid, " Role:", uid, " OrderId:", msg.OrderId, " POrderId:", msg.POrderId,
|
||||
" Money:", info.Money, " produce:", produce, " Code:", ret.Code, " code:", code, " err:", err)
|
||||
|
||||
//TODO 发货
|
||||
//var serverId uint64
|
||||
//var uid uint64
|
||||
|
@ -52,7 +52,7 @@ func XiaomiPreOrder(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
return
|
||||
}
|
||||
if !redis.IsValidServerId(util.StringToUint32(sid)) {
|
||||
if !redis.HExists("game_info", sid) {
|
||||
log.Error("not Found server ", r.Form.Encode())
|
||||
return
|
||||
}
|
||||
|
@ -49,20 +49,6 @@ type QQPrePayRes struct {
|
||||
PrepayId string `json:"prepayId"`
|
||||
}
|
||||
|
||||
type QQPrePayReq struct {
|
||||
OpenId string `json:"openid"`
|
||||
AppId string `json:"appid"`
|
||||
Ts int `json:"ts"`
|
||||
ZoneId string `json:"zone_id"`
|
||||
Pf string `json:"pf"`
|
||||
Amt int `json:"amt"`
|
||||
GoodId string `json:"goodid"`
|
||||
GoodNum int `json:"good_num"`
|
||||
AppRemark string `json:"app_remark"`
|
||||
BillNo string `json:"bill_no"`
|
||||
Sig string `json:"sig"`
|
||||
}
|
||||
|
||||
func QQPrePay(openid string, appid string, zone string, amt string, goodId string, goodNum uint32, token string, sessionKey string) (*QQPrePayRes, error) {
|
||||
u := "https://api.q.qq.com/api/json/openApiPay/GamePrePay?access_token=" + token
|
||||
value := url.Values{}
|
||||
@ -72,10 +58,9 @@ func QQPrePay(openid string, appid string, zone string, amt string, goodId strin
|
||||
value.Add("zone_id", zone)
|
||||
value.Add("pf", "qq_m_qq-2001-android-2011")
|
||||
value.Add("amt", amt)
|
||||
value.Add("goodid", "31b654ce0caeda34ad583d069551481c")
|
||||
//value.Add("goodid", goodId)
|
||||
value.Add("good_num", util.Uint32ToString(goodNum))
|
||||
value.Add("app_remark", zone + "-" + goodId + "-" + openid)
|
||||
value.Add("goodid", goodId)
|
||||
value.Add("good_nun", util.Uint32ToString(goodNum))
|
||||
value.Add("app_remark", appid)
|
||||
|
||||
billNo, _ := util.NextId()
|
||||
value.Add("bill_no", util.Int64ToString(billNo))
|
||||
@ -84,14 +69,7 @@ func QQPrePay(openid string, appid string, zone string, amt string, goodId strin
|
||||
h.Write([]byte(param))
|
||||
sign := hex.EncodeToString(h.Sum(nil))
|
||||
value.Set("sig", sign)
|
||||
req := &QQPrePayReq{};
|
||||
raw_data, _ := json.Marshal(util.UrlValuesToMap(value))
|
||||
err := json.Unmarshal(raw_data, &req)
|
||||
req.ZoneId = "1"
|
||||
req.Amt = 1
|
||||
req.Ts = int(time.Now().Unix())
|
||||
req.GoodNum = 1
|
||||
data, _ := json.Marshal(req)
|
||||
data, _ := json.Marshal(value)
|
||||
resp, err := http.Post(u, "application/json;charset=UTF-8", bytes.NewReader(data))
|
||||
if err != nil {
|
||||
log.Error("Post error ", err)
|
||||
|
@ -69,7 +69,3 @@ func initPool() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func IsValidServerId(sid uint32) (bool) {
|
||||
return sid > 0 && sid < 200000000;
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import (
|
||||
"encoding/binary"
|
||||
"math"
|
||||
"math/rand"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@ -402,15 +401,3 @@ func CombineMapU64U32(m1, m2 map[uint64]uint32) map[uint64]uint32 {
|
||||
|
||||
return m1
|
||||
}
|
||||
|
||||
func UrlValuesToMap(v url.Values) map[string]string {
|
||||
ret := make(map[string]string)
|
||||
for k := range v {
|
||||
if len(v[k]) > 0 {
|
||||
ret[k] = v[k][0]
|
||||
} else {
|
||||
ret[k] = ""
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
@ -66,8 +66,7 @@ func (id *idWorker) nextid() (int64, error) {
|
||||
} else {
|
||||
id.sequence = 0
|
||||
}
|
||||
var sarly int64 = 1
|
||||
//sarly := time.Now().Unix() % nodeMask
|
||||
sarly := time.Now().Unix() % nodeMask
|
||||
id.lastTimestamp = timestamp
|
||||
return ((timestamp - id.twepoch) << timestampLeftShift) | (sarly << nodeIdShift) | id.sequence, nil
|
||||
}
|
||||
|
@ -12,7 +12,6 @@ type CommonConfig struct {
|
||||
Debug bool `yaml:"debug"` // 是否测试环境
|
||||
IsHGameDebug bool `yaml:"isHGameDebug"` // 测试的充值渠道
|
||||
IsHuaweiPayDebug bool `yaml:"isHuaweiPayDebug"` // 测试华为的充值渠道
|
||||
IsProxyDebug bool `yaml:"isProxyDebug"` // 测试代理服务器
|
||||
}
|
||||
|
||||
type RedisConfig struct {
|
||||
|
@ -3,8 +3,8 @@ package config
|
||||
const (
|
||||
WXAppID = ""
|
||||
WXAppSecret = ""
|
||||
QQAppID = "1109788480"
|
||||
QQAppSecret = "a6xKTrhGM2IvGEaU"
|
||||
QQAppID = ""
|
||||
QQAppSecret = ""
|
||||
// oppo的APPid
|
||||
OppoAppID = "30203124"
|
||||
// OPPO的支付秘钥
|
||||
@ -49,34 +49,34 @@ NF3guaUf9bEOBc8WVQIDAQAB`
|
||||
// 华为
|
||||
const (
|
||||
HuaweiAppId = "101381633"
|
||||
HuaweiPayId = "890086000300096364"
|
||||
HuaweiPayId = "890086000300110644"
|
||||
HuaweiAppSecret = "a78915d8df88e59d0a2b552d2abe147d3f8c62cfc345176a198bbea3f905b076"
|
||||
HuaweiPublicKey = `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsO0P48iyB/lJpyooyUd+
|
||||
n+XCc2T3SQjDkb9Ci4AuiW61z3oRv6JBtLyhT3z55HdJL87W3IgJdERDHiPt7XMmMs806w6K15Q
|
||||
Xp9xi17x/aDA956oHT54qbK6akZuHb35Yf9ptFK5tjd1eJjHJywg2tUzLEl032QKTYZd9NkPWMv
|
||||
q6+E4UbXWSGZpEEwG6UxYfqKh9uFoF9AD8cIwKIrZeJLalQj4GODxyPYvjPy2Ce57oFCl4HJsbH
|
||||
Oxzh0So7PP5kg2G4OhXrEHrQkekF88nSLXRWeby2aQqX/Jye+0WDkuANkB2j8ycoEToOvOdvAMK
|
||||
gBRHcTjQGuLjHnbNqFgjWwIDAQAB`
|
||||
HuaweiPrivateKey = `MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCw7Q/jyLIH+Umn
|
||||
KijJR36f5cJzZPdJCMORv0KLgC6JbrXPehG/okG0vKFPfPnkd0kvztbciAl0REMeI+3tcyYyzzT
|
||||
rDorXlBen3GLXvH9oMD3nqgdPnipsrpqRm4dvflh/2m0Urm2N3V4mMcnLCDa1TMsSXTfZApNhl3
|
||||
02Q9Yy+rr4ThRtdZIZmkQTAbpTFh+oqH24WgX0APxwjAoitl4ktqVCPgY4PHI9i+M/LYJ7nugUK
|
||||
Xgcmxsc7HOHRKjs8/mSDYbg6FesQetCR6QXzydItdFZ5vLZpCpf8nJ77RYOS4A2QHaPzJygROg6
|
||||
8528AwqAFEdxONAa4uMeds2oWCNbAgMBAAECggEABc2YxN9leJfwIqaQrC7kSDfloHc7AtIb/vb
|
||||
GD35N9wDaBYJDtwpEW4vxQl/H/Clz0355KoCCgWu4rMO6HFbxxvA5lFkQWlEByFp9sXm4FQGLWH
|
||||
F+CCt198VvnxbuRZ4mDz1SWW4sH0gjdl8o38O5+jHqN2178lLXzeARMy5otJh81M2CFt77WdUFu
|
||||
2l6j3uj4EF+PcwyaBAD8RWjbDZL9U4KNj2TVdc9zaTTNOl4laTfcZhMiCtuvZwa1d2eA8JvkqPP
|
||||
CbpH+l4PvJfrSp+3ugj+PNNtD6uihDtE3JWd1wOkwTX1XKcMJw3W+qnrEMCr7TyfPRk+NcD1fNL
|
||||
/6APZgQKBgQDmrcyLBuFTPEXv/Bh/fwFLRiZF2p3zSaf/QlH33xU54KQwq70wKoixtVHPR/ZQc1
|
||||
c5HLpXFZiVDrJOtRNG+uBE0CLg40PlkzrmR4yLTpN37cXs/yMBgm3mbBZjtgbhqMA7TghdEaJgN
|
||||
cK2F48gH9nwYYhxpfvtr95kqW/V4N/XgQKBgQDEWMdASXPXnKfZEcU366++C7NRLpWIdG9jgGWA
|
||||
VvHs851Tdoqb4wfmmesgbmwVbljor9jNkwuNiYAyx7D7lCVg+OyhUJWvrClSaLBRAN6vqSYyumS
|
||||
0MmZfbLnfW/a1PpeJQEM532zyEC7stPqgytPPfIEdRDHSITxlNrX+137I2wKBgHHuBMflbgQeEK
|
||||
ymZbMSlyEGVIDLqJcwGbkImFND6sfbGzyulZHkb/7U/sLRV+YEEWAzwBSipel4iLg21n6ICZvy8
|
||||
EcB99a7EKwLSm7DMDJbTRXwLOnh8UWMvMIidOOe5NJlh9vvibLa2n/0wsuq74i5oxn+UJ7j7YLp
|
||||
7EJF/kgBAoGBAJVX0XYcaHg/N4vr8E4wfmPXEnVVMXew2GieaJXNjAXm5mttZtBbRs8nk6f/VUa
|
||||
XwBh8aDM0/TySsWfua7dvX17690Fbwf70vBlqd3Glb7u8tMkw7RgCnctHL7msgWIqUaibsIZ8Yq
|
||||
lbldWFcnyKycCvuqVAEYT6sq1ph9RmpJCxAoGAe0t7nY7JFImFv633m2QYbJNDajDs+SPbCdbr4
|
||||
jOm16JoXjPZXO3T3FD4OrXAdn2YA67dThrcrhtL0/vtqoeh8t3QVlmBS3KML5d7G2uGp7w3RGqG
|
||||
X3Yzi3GiYw9xOjLaBO7a20z3tK8u/U1IR0lDTKNmuLzaIKiJV2VC2NeQqeQ=`
|
||||
HuaweiPublicKey = `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqpRCMMJqNgP2oj40Isnh
|
||||
diRh9eRqWHg9NFOaDTB7zL/TRSJ++SUlB2WoLHoZzM2aw/L+grWFRO4XvTI4hT9sivWNa37pmTu
|
||||
b+Q1+r7Iszwwq1NuOaW+9tpvDespq3H+YMOqCGhZCBNZrtHIw86kIDfjjG26UI0TgW/LGo8Jv0k
|
||||
q4RiI7Ok2hzM26+Rcf7L42EQuEcVfixQnHNQTUSwrGZX6M2LBT6YjBceqzYRhZsRHe5V2y8Uo80
|
||||
zUe0+cyi/faPjCZy2fdkMJ5OQixpAmSndh4PyIrxLSufgfm153dceRPb/okPcXsA/kbJ03lA6Yp
|
||||
u4WRNs02gjH3nagKLOEcOwIDAQAB`
|
||||
HuaweiPrivateKey = `MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqlEIwwmo2A/ai
|
||||
PjQiyeF2JGH15GpYeD00U5oNMHvMv9NFIn75JSUHZagsehnMzZrD8v6CtYVE7he9MjiFP2yK9Y1
|
||||
rfumZO5v5DX6vsizPDCrU245pb722m8N6ymrcf5gw6oIaFkIE1mu0cjDzqQgN+OMbbpQjROBb8s
|
||||
ajwm/SSrhGIjs6TaHMzbr5Fx/svjYRC4RxV+LFCcc1BNRLCsZlfozYsFPpiMFx6rNhGFmxEd7lX
|
||||
bLxSjzTNR7T5zKL99o+MJnLZ92Qwnk5CLGkCZKd2Hg/IivEtK5+B+bXnd1x5E9v+iQ9xewD+Rsn
|
||||
TeUDpim7hZE2zTaCMfedqAos4Rw7AgMBAAECggEACffaAMSlTxZfAYIsqvyTLioLU3XcRRYM6Mb
|
||||
nhLr/MRFKRL4yuPDtWTsc+P4CdFzVHRUd8s0UYAyhDhxZZmgB05w5fgoPl2j+9C62s+7vywJ4ak
|
||||
uRgFXYVBiFwHvQ6aVgyZ/N2vDPPaS67I0tXfMHY0TWuLhDwRl55vjb/mvfyJeFGKSAO0PN5Sj1G
|
||||
PxVQaW4x7hYa5kntwmumdvAA3OaqlxmZdIXyirn9Rbv5x+ZClkKorr9UahL9Hc1Cj6JyBy1tK7k
|
||||
Ry4J3kyjRrvHI81zDN3qi9HIlRtdqkafxsBtGHlF63ORbWkdLJkJYk6/bmF7FCX7aJDddZgKNj2
|
||||
aU1ccIQKBgQDlnYcE1IdL270msFFQ4VMXKldzZI8THyLEaTttG6tnQHtj04BmgO1WVYRYvEUIoX
|
||||
P/PAvuBwrCnUOKi8AJfgR1J4ak23kh5QsR++NTBTmZEMNtdTjybu6bm1ys9AycOOxYGHxF+Xvt8
|
||||
xSmmYPBpwIT+nhaFTIUs8ipZBEIZGCcywKBgQC+Lhgqhz95Ngf3QfPZJxtVZzWueMr+/NOp4kNV
|
||||
4rpP5J+lM7tBvDkKxnw9SCVZrJaTTOmK2dtRMpcy4umDz+00Mvqxns132tI1nZk7g9yNJhPWjC2
|
||||
sHSj94VN0x8KRvIUnrNiLOI4bk7FEZyvsBQcGGOTsrwRGvY9aWFnA0H6AUQKBgCqOAWIByXljpj
|
||||
CvaMKmn/GhJUf7kRCoKpdgMWVNRX0DVFrx7dARgOsJOlf/vIOW+JqLFGLu5y2eW9AnilW4Bzd3N
|
||||
dsD2fVQL7cLidvvEfeuRanZmc5EhPBN4OUk7dleK19AWnfVfwRgkqk1tleDjj0JpJh9aSSxFTVf
|
||||
mFCH2ef1AoGAf3HIRAeqY4HvyKRr0uPAD3VAphDQiBvJhBjaYt2zWQKucTi/jgeiejQU4cRNM1D
|
||||
S/xcVkjT4IeuzIyior+pQ3SAkm479xgnfwIpCO33b+MLBnI8HtEU+SRQMpz+Ohbc9zB6qZnGZ2a
|
||||
UZr+srpdigoldgYbPPO9CgFj0KuIl/nGECgYEAjg0V7IMMXRoK09Sw0RGcKEDSYZ1bgPaQhrSQJ
|
||||
XUU+K+E+HwdK8+xvaJQg3bHaCQ5m8VVITaG3hjdlgaPx9bVKdHGpeg6JpbNX9KiWA1TxRUW2pxP
|
||||
ssQoYIQzDNNyRZd23XhvOYLffVyuN3tNsOSQ/2GlAD45YWrcKhNNiQHz2wE=`
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user