mirror of
https://github.com/aaPanel/aaPanel.git
synced 2026-09-22 01:14:52 +02:00
Update to 7.7.0
Since version 7.7.0, we recommend yours update python to 3.12. [+] Using nginx technology to load static files improves access speed [+] Refactor homepage, website, FTP, and database using vue3 [+] Table loading changed to skeleton screen [+] Add Website statistics-v2 professional plug-in [+] Add Home page - top 5 resource occupancy [+] Add protection for Files management (requires Tamper-proof for Enterprise 3.7) [+] Website, FTP, Databases page add program status [+] Add FTP log analysis (only supports Centos) [+] Add password-free login to phpMyAdmin [+] Add Proxy Project in Website (Supported when web service uses Nginx) [+] Add WP Toolkit (Pro version only) [+] Redesigned Docker module [+] Add WP Toolkit Protection [+] Add WP Toolkit Backup and Restore [+] Add WP Toolkit Migrated [+] Add WP Toolkit Clone site (supports new domain and subdomain) [+] Add WP Toolkit Create site from backup of other panel [+] Add WP Toolkit support for Cron automatic backup (only save Local disk) [+] Add WP Toolkit operation log [+] Add Integrity check for WP Toolkit [+] Add WP Toolkit plug-in management and themes management [*] Optimize phpMyAdmin formula access method [*] Optimize Home page PHP display problem [*] Optimize jump to the login interface after the login expires [*] Optimize automatic renewal of SSL at some times [*] Optimize Let's Encrypt to increase application success rate [-] Fix Logs Audit cannot be opened [-] Fix apache URL rewrite issue [-] Fix phpmyadmin installation problem [-] Fix the problem that some servers cannot install software [-] Fix upload file error [-] Fix left menu hiding problem [-] Fix aaPanel Mobile QR code display problem [-] Fix problem that third-party plug-ins are not displayed in the App Store [-] Fix issue where the menu bar is blank when opening new tabs [-] Fixed panel not being accessible in some cases [-] Fix the issue where Curl warning caused the inability to apply for SSL [-] Fix Quota issues for Website, FTP, Databases [-] Fix file interface display problem on mobile terminal
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
#coding: utf-8
|
||||
import public,re
|
||||
|
||||
class projectBase:
|
||||
|
||||
def check_port(self, port):
|
||||
'''
|
||||
@name 检查端口是否被占用
|
||||
@args port:端口号
|
||||
@return: 被占用返回True,否则返回False
|
||||
@author: lkq 2021-08-28
|
||||
'''
|
||||
a = public.ExecShell("netstat -nltp|awk '{print $4}'")
|
||||
if a[0]:
|
||||
if re.search(':' + port + '\n', a[0]):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
def is_domain(self, domain):
|
||||
'''
|
||||
@name 验证域名合法性
|
||||
@args domain:域名
|
||||
@return: 合法返回True,否则返回False
|
||||
@author: lkq 2021-08-28
|
||||
'''
|
||||
import re
|
||||
domain_regex = re.compile(r'(?:[A-Z0-9_](?:[A-Z0-9-_]{0,247}[A-Z0-9])?\.)+(?:[A-Z]{2,6}|[A-Z0-9-]{2,}(?<!-))\Z', re.IGNORECASE)
|
||||
return True if domain_regex.match(domain) else False
|
||||
|
||||
|
||||
def generate_random_port(self):
|
||||
'''
|
||||
@name 生成随机端口
|
||||
@args
|
||||
@return: 端口号
|
||||
@author: lkq 2021-08-28
|
||||
'''
|
||||
import random
|
||||
port = str(random.randint(5000, 10000))
|
||||
while True:
|
||||
if not self.check_port(port): break
|
||||
port = str(random.randint(5000, 10000))
|
||||
return port
|
||||
|
||||
def IsOpen(self, port):
|
||||
'''
|
||||
@name 检查端口是否被占用
|
||||
@args port:端口号
|
||||
@return: 被占用返回True,否则返回False
|
||||
@author: lkq 2021-08-28
|
||||
'''
|
||||
ip = '0.0.0.0'
|
||||
import socket
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
try:
|
||||
s.connect((ip, int(port)))
|
||||
s.shutdown(2)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
@@ -0,0 +1,8 @@
|
||||
from .limit_net import LimitNet
|
||||
from .redirect import Redirect
|
||||
|
||||
|
||||
__all__ = [
|
||||
"LimitNet",
|
||||
"Redirect"
|
||||
]
|
||||
@@ -0,0 +1,47 @@
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class BaseProjectCommon:
|
||||
setup_path = "/www/server/panel"
|
||||
_allow_mod_name = {
|
||||
"go", "java", "net", "nodejs", "other", "python", "proxy",
|
||||
}
|
||||
|
||||
def get_project_mod_type(self) -> Optional[str]:
|
||||
_mod_name = self.__class__.__module__
|
||||
|
||||
# "projectModel/javaModel.py" 的格式
|
||||
if "/" in _mod_name:
|
||||
_mod_name = _mod_name.replace("/", ".")
|
||||
if _mod_name.endswith(".py"):
|
||||
mod_name = _mod_name[:-3]
|
||||
else:
|
||||
mod_name = _mod_name
|
||||
|
||||
# "projectModel.javaModel" 的格式
|
||||
if "." in mod_name:
|
||||
mod_name = mod_name.rsplit(".", 1)[1]
|
||||
|
||||
if mod_name.endswith("Model"):
|
||||
return mod_name[:-5]
|
||||
if mod_name in self._allow_mod_name:
|
||||
return mod_name
|
||||
return None
|
||||
|
||||
@property
|
||||
def config_prefix(self) -> Optional[str]:
|
||||
if getattr(self, "_config_prefix_cache", None) is not None:
|
||||
return getattr(self, "_config_prefix_cache")
|
||||
p_name = self.get_project_mod_type()
|
||||
if p_name == "nodejs":
|
||||
p_name = "node"
|
||||
|
||||
if isinstance(p_name, str):
|
||||
p_name = p_name + "_"
|
||||
|
||||
setattr(self, "_config_prefix_cache", p_name)
|
||||
return p_name
|
||||
|
||||
@config_prefix.setter
|
||||
def config_prefix(self, prefix: str):
|
||||
setattr(self, "_config_prefix_cache", prefix)
|
||||
@@ -0,0 +1,239 @@
|
||||
import os
|
||||
import re
|
||||
from typing import Tuple
|
||||
|
||||
import public
|
||||
from .base import BaseProjectCommon
|
||||
|
||||
|
||||
class LimitNet(BaseProjectCommon):
|
||||
|
||||
def get_limit_net(self, get):
|
||||
if public.get_webserver() != 'nginx':
|
||||
return public.returnMsg(False, 'SITE_NETLIMIT_ERR')
|
||||
try:
|
||||
site_id = int(get.site_id)
|
||||
except (AttributeError, TypeError, ValueError):
|
||||
return public.returnMsg(False, "参数错误")
|
||||
|
||||
if self.config_prefix is None:
|
||||
return public.returnMsg(False, "不支持的网站类型")
|
||||
|
||||
# 取配置文件
|
||||
site_name = public.M('sites').where("id=?", (site_id,)).getField('name')
|
||||
filename = "{}/vhost/nginx/{}{}.conf".format(self.setup_path, self.config_prefix, site_name)
|
||||
conf = public.readFile(filename)
|
||||
if not isinstance(conf, str):
|
||||
return public.returnMsg(False, "配置文件读取错误")
|
||||
|
||||
# 站点总并发
|
||||
data = {
|
||||
'perserver': 0,
|
||||
'perip': 0,
|
||||
'limit_rate': 0,
|
||||
}
|
||||
|
||||
rep_per_server = re.compile(r"(?P<prefix>.*)limit_conn +perserver +(?P<target>\d+) *; *", re.M)
|
||||
tmp_res = rep_per_server.search(conf)
|
||||
if tmp_res is not None and tmp_res.group("prefix").find("#") == -1: # 有且不是注释
|
||||
data['perserver'] = int(tmp_res.group("target"))
|
||||
|
||||
# IP并发限制
|
||||
rep_per_ip = re.compile(r"(?P<prefix>.*)limit_conn +perip +(?P<target>\d+) *; *", re.M)
|
||||
tmp_res = rep_per_ip.search(conf)
|
||||
if tmp_res is not None and tmp_res.group("prefix").find("#") == -1: # 有且不是注释
|
||||
data['perip'] = int(tmp_res.group("target"))
|
||||
|
||||
# 请求并发限制
|
||||
rep_limit_rate = re.compile(r"(?P<prefix>.*)limit_rate +(?P<target>\d+)\w+ *; *", re.M)
|
||||
tmp_res = rep_limit_rate.search(conf)
|
||||
if tmp_res is not None and tmp_res.group("prefix").find("#") == -1: # 有且不是注释
|
||||
data['limit_rate'] = int(tmp_res.group("target"))
|
||||
|
||||
self._show_limit_net(data)
|
||||
return data
|
||||
|
||||
@staticmethod
|
||||
def _show_limit_net(data):
|
||||
values = [
|
||||
[300, 25, 512],
|
||||
[200, 10, 1024],
|
||||
[50, 3, 2048],
|
||||
[500, 10, 2048],
|
||||
[400, 15, 1024],
|
||||
[60, 10, 512],
|
||||
[150, 4, 1024],
|
||||
]
|
||||
for i, c in enumerate(values):
|
||||
if data["perserver"] == c[0] and data["perip"] == c[1] and data["limit_rate"] == c[2]:
|
||||
data["value"] = i + 1
|
||||
break
|
||||
else:
|
||||
data["value"] = 0
|
||||
|
||||
@staticmethod
|
||||
def _set_nginx_conf_limit() -> Tuple[bool, str]:
|
||||
# 设置共享内存
|
||||
nginx_conf_file = "/www/server/nginx/conf/nginx.conf"
|
||||
if not os.path.exists(nginx_conf_file):
|
||||
return False, "nginx配置文件丢失"
|
||||
nginx_conf = public.readFile(nginx_conf_file)
|
||||
rep_perip = re.compile(r"\s+limit_conn_zone +\$binary_remote_addr +zone=perip:10m;", re.M)
|
||||
rep_per_server = re.compile(r"\s+limit_conn_zone +\$server_name +zone=perserver:10m;", re.M)
|
||||
perip_res = rep_perip.search(nginx_conf)
|
||||
per_serve_res = rep_per_server.search(nginx_conf)
|
||||
if perip_res and per_serve_res:
|
||||
return True, ""
|
||||
elif perip_res or per_serve_res:
|
||||
tmp_res = perip_res or per_serve_res
|
||||
new_conf = nginx_conf[:tmp_res.start()] + (
|
||||
"\n\t\tlimit_conn_zone $binary_remote_addr zone=perip:10m;"
|
||||
"\n\t\tlimit_conn_zone $server_name zone=perserver:10m;"
|
||||
) + nginx_conf[tmp_res.end():]
|
||||
else:
|
||||
# 通过检查第一个server的位置
|
||||
rep_first_server = re.compile(r"http\s*\{(.*\n)*\s*server\s*\{")
|
||||
tmp_res = rep_first_server.search(nginx_conf)
|
||||
if tmp_res:
|
||||
old_http_conf = tmp_res.group()
|
||||
# 在第一个server项前添加
|
||||
server_idx = old_http_conf.rfind("server")
|
||||
new_http_conf = old_http_conf[:server_idx] + (
|
||||
"\n\t\tlimit_conn_zone $binary_remote_addr zone=perip:10m;"
|
||||
"\n\t\tlimit_conn_zone $server_name zone=perserver:10m;\n"
|
||||
) + old_http_conf[server_idx:]
|
||||
new_conf = rep_first_server.sub(new_http_conf, nginx_conf, 1)
|
||||
else:
|
||||
# 在没有配置其他server项目时,通过检查include server项目检查
|
||||
# 通检查 include /www/server/panel/vhost/nginx/*.conf; 位置
|
||||
rep_include = re.compile(r"http\s*\{(.*\n)*\s*include +/www/server/panel/vhost/nginx/\*\.conf;")
|
||||
tmp_res = rep_include.search(nginx_conf)
|
||||
if not tmp_res:
|
||||
return False, "全局配置缓存配置失败"
|
||||
old_http_conf = tmp_res.group()
|
||||
|
||||
include_idx = old_http_conf.rfind("include ")
|
||||
new_http_conf = old_http_conf[:include_idx] + (
|
||||
"\n\t\tlimit_conn_zone $binary_remote_addr zone=perip:10m;"
|
||||
"\n\t\tlimit_conn_zone $server_name zone=perserver:10m;\n"
|
||||
) + old_http_conf[include_idx:]
|
||||
new_conf = rep_first_server.sub(new_http_conf, nginx_conf, 1)
|
||||
|
||||
public.writeFile(nginx_conf_file, new_conf)
|
||||
if public.checkWebConfig() is not True: # 检测失败,无法添加
|
||||
public.writeFile(nginx_conf_file, nginx_conf)
|
||||
return False, "全局配置缓存配置失败"
|
||||
return True, ""
|
||||
|
||||
# 设置流量限制
|
||||
def set_limit_net(self, get):
|
||||
if public.get_webserver() != 'nginx':
|
||||
return public.returnMsg(False, 'SITE_NETLIMIT_ERR')
|
||||
try:
|
||||
site_id = int(get.site_id)
|
||||
per_server = int(get.perserver)
|
||||
perip = int(get.perip)
|
||||
limit_rate = int(get.limit_rate)
|
||||
except (AttributeError, TypeError, ValueError):
|
||||
return public.returnMsg(False, "参数错误")
|
||||
|
||||
if per_server < 1 or perip < 1 or limit_rate < 1:
|
||||
return public.returnMsg(False, '并发限制,IP限制,流量限制必需大于0')
|
||||
|
||||
# 取配置文件
|
||||
site_info = public.M('sites').where("id=?", (site_id,)).find()
|
||||
if not isinstance(site_info, dict):
|
||||
return public.returnMsg(False, "站点信息查询错误")
|
||||
else:
|
||||
site_name = site_info["name"]
|
||||
filename = "{}/vhost/nginx/{}{}.conf".format(self.setup_path, self.config_prefix, site_name)
|
||||
site_conf: str = public.readFile(filename)
|
||||
if not isinstance(site_conf, str):
|
||||
return public.returnMsg(False, "配置文件读取错误")
|
||||
|
||||
flag, msg = self._set_nginx_conf_limit()
|
||||
if not flag:
|
||||
return public.returnMsg(False, msg)
|
||||
|
||||
per_server_str = ' limit_conn perserver {};'.format(per_server)
|
||||
perip_str = ' limit_conn perip {};'.format(perip)
|
||||
limit_rate_str = ' limit_rate {}k;'.format(limit_rate)
|
||||
|
||||
# 请求并发限制
|
||||
new_conf = site_conf
|
||||
ssl_end_res = re.search(r"#error_page 404/404.html;[^\n]*\n", new_conf)
|
||||
if ssl_end_res is None:
|
||||
return public.returnMsg(False, "未定位到SSL的相关配置,添加失败")
|
||||
ssl_end_idx = ssl_end_res.end()
|
||||
rep_limit_rate = re.compile(r"(.*)limit_rate +(\d+)\w+ *; *", re.M)
|
||||
tmp_res = rep_limit_rate.search(new_conf)
|
||||
if tmp_res is not None :
|
||||
new_conf = rep_limit_rate.sub(limit_rate_str, new_conf)
|
||||
else:
|
||||
new_conf = new_conf[:ssl_end_idx] + limit_rate_str + "\n" + new_conf[ssl_end_idx:]
|
||||
|
||||
# IP并发限制
|
||||
rep_per_ip = re.compile(r"(.*)limit_conn +perip +(\d+) *; *", re.M)
|
||||
tmp_res = rep_per_ip.search(new_conf)
|
||||
if tmp_res is not None:
|
||||
new_conf = rep_per_ip.sub(perip_str, new_conf)
|
||||
else:
|
||||
new_conf = new_conf[:ssl_end_idx] + perip_str + "\n" + new_conf[ssl_end_idx:]
|
||||
|
||||
rep_per_server = re.compile(r"(.*)limit_conn +perserver +(\d+) *; *", re.M)
|
||||
tmp_res = rep_per_server.search(site_conf)
|
||||
if tmp_res is not None:
|
||||
new_conf = rep_per_server.sub(per_server_str, new_conf)
|
||||
else:
|
||||
new_conf = new_conf[:ssl_end_idx] + per_server_str + "\n" + new_conf[ssl_end_idx:]
|
||||
|
||||
public.writeFile(filename, new_conf)
|
||||
is_error = public.checkWebConfig()
|
||||
if is_error is not True:
|
||||
public.writeFile(filename, site_conf)
|
||||
return public.returnMsg(False, 'ERROR:<br><a style="color:red;">' + is_error.replace("\n", '<br>') + '</a>')
|
||||
|
||||
public.serviceReload()
|
||||
public.WriteLog('TYPE_SITE', 'SITE_NETLIMIT_OPEN_SUCCESS', (site_name,))
|
||||
return public.returnMsg(True, 'SET_SUCCESS')
|
||||
|
||||
# 关闭流量限制
|
||||
def close_limit_net(self, get):
|
||||
if public.get_webserver() != 'nginx':
|
||||
return public.returnMsg(False, 'SITE_NETLIMIT_ERR')
|
||||
if self.config_prefix is None:
|
||||
return public.returnMsg(False, "不支持的网站类型")
|
||||
try:
|
||||
site_id = int(get.site_id)
|
||||
except (AttributeError, TypeError, ValueError):
|
||||
return public.returnMsg(False, "参数错误")
|
||||
|
||||
# 取回配置文件
|
||||
site_info = public.M('sites').where("id=?", (site_id,)).find()
|
||||
if not isinstance(site_info, dict):
|
||||
return public.returnMsg(False, "站点信息查询错误")
|
||||
else:
|
||||
site_name = site_info["name"]
|
||||
filename = "{}/vhost/nginx/{}{}.conf".format(self.setup_path, self.config_prefix, site_name)
|
||||
site_conf = public.readFile(filename)
|
||||
if not isinstance(site_conf, str):
|
||||
return public.returnMsg(False, "配置文件读取错误")
|
||||
|
||||
# 清理总并发
|
||||
rep_limit_rate = re.compile(r"(.*)limit_rate +(\d+)\w+ *; *\n?", re.M)
|
||||
rep_per_ip = re.compile(r"(.*)limit_conn +perip +(\d+) *; *\n?", re.M)
|
||||
rep_per_server = re.compile(r"(.*)limit_conn +perserver +(\d+) *; *\n?", re.M)
|
||||
|
||||
new_conf = site_conf
|
||||
new_conf = rep_limit_rate.sub("", new_conf, 1)
|
||||
new_conf = rep_per_ip.sub("", new_conf, 1)
|
||||
new_conf = rep_per_server.sub("", new_conf, 1)
|
||||
|
||||
public.writeFile(filename, new_conf)
|
||||
is_error = public.checkWebConfig()
|
||||
if is_error is not True:
|
||||
public.writeFile(filename, site_conf)
|
||||
return public.returnMsg(False, 'ERROR:<br><a style="color:red;">' + is_error.replace("\n", '<br>') + '</a>')
|
||||
public.serviceReload()
|
||||
public.WriteLog('TYPE_SITE', 'SITE_NETLIMIT_CLOSE_SUCCESS', (site_name,))
|
||||
return public.returnMsg(True, 'SITE_NETLIMIT_CLOSE_SUCCESS')
|
||||
@@ -0,0 +1,806 @@
|
||||
import os,sys
|
||||
import re
|
||||
import json
|
||||
import hashlib
|
||||
import time
|
||||
from typing import Tuple, Optional, Union, Dict, List
|
||||
from urllib import parse
|
||||
from itertools import product
|
||||
|
||||
import public
|
||||
from public.validate import Param
|
||||
# from .base import BaseProjectCommon
|
||||
|
||||
|
||||
class _RealRedirect:
|
||||
setup_path = "/www/server/panel"
|
||||
_redirect_conf_file = "{}/data/redirect.conf".format(setup_path)
|
||||
|
||||
_ng_domain_format = """
|
||||
if ($host ~ '^%s'){
|
||||
return %s %s%s;
|
||||
}
|
||||
"""
|
||||
_ng_path_format = """
|
||||
rewrite ^%s(.*) %s%s %s;
|
||||
"""
|
||||
_ap_domain_format = """
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
RewriteCond %%{HTTP_HOST} ^%s [NC]
|
||||
RewriteRule ^(.*) %s%s [L,R=%s]
|
||||
</IfModule>
|
||||
"""
|
||||
_ap_path_format = """
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
RewriteRule ^%s(.*) %s%s [L,R=%s]
|
||||
</IfModule>
|
||||
"""
|
||||
|
||||
def __init__(self, config_prefix: str):
|
||||
self._config: Optional[List[Dict[str, Union[str, int]]]] = None
|
||||
self.config_prefix = config_prefix
|
||||
self._webserver = None
|
||||
|
||||
@property
|
||||
def webserver(self) -> str:
|
||||
if self._webserver is not None:
|
||||
return self._webserver
|
||||
self._webserver = public.get_webserver()
|
||||
return self._webserver
|
||||
|
||||
@property
|
||||
def config(self) -> List[Dict[str, Union[str, int, List]]]:
|
||||
if self._config is not None:
|
||||
return self._config
|
||||
try:
|
||||
self._config = json.loads(public.readFile(self._redirect_conf_file))
|
||||
except (json.JSONDecodeError, TypeError, ValueError):
|
||||
self._config = []
|
||||
if not isinstance(self._config, list):
|
||||
self._config = []
|
||||
return self._config
|
||||
|
||||
def save_config(self):
|
||||
if self._config is not None:
|
||||
return public.writeFile(self._redirect_conf_file, json.dumps(self._config))
|
||||
|
||||
def _check_redirect_domain_exist(self, site_name,
|
||||
redirect_domain: list,
|
||||
redirect_name: str = None,
|
||||
is_modify=False) -> Optional[List[str]]:
|
||||
res = set()
|
||||
redirect_domain_set = set(redirect_domain)
|
||||
for c in self.config:
|
||||
if c["sitename"] != site_name:
|
||||
continue
|
||||
if is_modify:
|
||||
if c["redirectname"] != redirect_name:
|
||||
res |= set(c["redirectdomain"]) & redirect_domain_set
|
||||
else:
|
||||
res |= set(c["redirectdomain"]) & redirect_domain_set
|
||||
return list(res) if res else None
|
||||
|
||||
def _check_redirect_path_exist(self, site_name,
|
||||
redirect_path: str,
|
||||
redirect_name: str = None) -> bool:
|
||||
for c in self.config:
|
||||
if c["sitename"] == site_name:
|
||||
if c["redirectname"] != redirect_name and c["redirectpath"] == redirect_path:
|
||||
return True
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def _parse_url_domain(url: str):
|
||||
return parse.urlparse(url).netloc
|
||||
|
||||
@staticmethod
|
||||
def _parse_url_path(url: str):
|
||||
return parse.urlparse(url).path
|
||||
|
||||
# 计算name md5
|
||||
@staticmethod
|
||||
def _calc_redirect_name_md5(redirect_name) -> str:
|
||||
md5 = hashlib.md5()
|
||||
md5.update(redirect_name.encode('utf-8'))
|
||||
return md5.hexdigest()
|
||||
|
||||
def _check_redirect(self, site_name, redirect_name, is_error=False):
|
||||
for i in self.config:
|
||||
if i["sitename"] != site_name:
|
||||
continue
|
||||
if is_error and "errorpage" in i and i["errorpage"] in [1, '1']:
|
||||
return i
|
||||
if i["redirectname"] == redirect_name:
|
||||
return i
|
||||
return None
|
||||
|
||||
# 创建修改配置检测
|
||||
def _check_redirect_args(self, get, is_modify=False) -> Union[str, Dict]:
|
||||
if public.checkWebConfig() is not True:
|
||||
return '配置文件出错请先排查配置'
|
||||
|
||||
try:
|
||||
site_name = get.sitename.strip()
|
||||
redirect_path = get.redirectpath.strip()
|
||||
redirect_type = get.redirecttype.strip()
|
||||
domain_or_path = get.domainorpath.strip()
|
||||
hold_path = int(get.holdpath)
|
||||
|
||||
to_url = ""
|
||||
to_path = ""
|
||||
error_page = 0
|
||||
redirect_domain = []
|
||||
redirect_name = ""
|
||||
status_type = 1
|
||||
|
||||
if "redirectname" in get and get.redirectname.strip():
|
||||
redirect_name = get.redirectname.strip()
|
||||
if "tourl" in get:
|
||||
to_url = get.tourl.strip()
|
||||
if "topath" in get:
|
||||
to_path = get.topath.strip()
|
||||
if "redirectdomain" in get:
|
||||
redirect_domain = json.loads(get.redirectdomain.strip())
|
||||
if "type" in get:
|
||||
status_type = int(get.type)
|
||||
if "errorpage" in get:
|
||||
error_page = int(get.errorpage)
|
||||
except (AttributeError, ValueError):
|
||||
return '参数错误'
|
||||
|
||||
if not is_modify:
|
||||
if not redirect_name:
|
||||
return "参数错误,配置名称不能为空"
|
||||
# 检测名称是否重复
|
||||
if not (3 < len(redirect_name) < 15):
|
||||
return '名称必须大于3小于15个字符串'
|
||||
|
||||
if self._check_redirect(site_name, redirect_name, error_page == 1):
|
||||
return '指定重定向名称已存在'
|
||||
|
||||
site_info = public.M('sites').where("name=?", (site_name,)).find()
|
||||
if not isinstance(site_info, dict):
|
||||
return "站点信息查询错误"
|
||||
else:
|
||||
site_name = site_info["name"]
|
||||
|
||||
# 检测目标URL格式
|
||||
rep = r"http(s)?\:\/\/([a-zA-Z0-9][-a-zA-Z0-9]{0,62}\.)+([a-zA-Z0-9][a-zA-Z0-9]{0,62})+.?"
|
||||
if to_url and not re.match(rep, to_url):
|
||||
return '目标URL格式不对【%s】' % to_url
|
||||
|
||||
# 非404页面de重定向检测项
|
||||
if error_page != 1:
|
||||
# 检测是否选择域名
|
||||
if domain_or_path == "domain":
|
||||
if not redirect_domain:
|
||||
return '请选择重定向域名'
|
||||
# 检测域名是否已经存在配置文件
|
||||
repeat_domain = self._check_redirect_domain_exist(site_name, redirect_domain, redirect_name, is_modify)
|
||||
if repeat_domain:
|
||||
return '重定向域名重复 %s' % repeat_domain
|
||||
|
||||
# 检查目标URL的域名和被重定向的域名是否一样
|
||||
tu = self._parse_url_domain(to_url)
|
||||
for d in redirect_domain:
|
||||
if d == tu:
|
||||
return '域名 "%s" 和目标域名一致请取消选择' % d
|
||||
else:
|
||||
if not redirect_path:
|
||||
return '请输入重定向路径'
|
||||
if redirect_path[0] != "/":
|
||||
return "路径格式不正确,格式为/xxx"
|
||||
# 检测路径是否有存在配置文件
|
||||
if self._check_redirect_path_exist(site_name, redirect_path, redirect_name):
|
||||
return '重定向路径重复 %s' % redirect_path
|
||||
|
||||
to_url_path = self._parse_url_path(to_url)
|
||||
if to_url_path.startswith(redirect_path):
|
||||
return '目标URL[%s]以被重定向的路径[%s]开头,会导致循环匹配' % (to_url_path, redirect_path)
|
||||
# 404页面重定向检测项
|
||||
else:
|
||||
if not to_url and not to_path:
|
||||
return '首页或自定义页面必须二选一'
|
||||
if to_path:
|
||||
to_path = "/"
|
||||
|
||||
return {
|
||||
"tourl": to_url,
|
||||
"topath": to_path,
|
||||
"errorpage": error_page,
|
||||
"redirectdomain": redirect_domain,
|
||||
"redirectname": redirect_name if redirect_name else str(int(time.time())),
|
||||
"type": status_type,
|
||||
"sitename": site_name,
|
||||
"redirectpath": redirect_path,
|
||||
"redirecttype": redirect_type,
|
||||
"domainorpath": domain_or_path,
|
||||
"holdpath": hold_path,
|
||||
}
|
||||
|
||||
def create_redirect(self, get):
|
||||
res_conf = self._check_redirect_args(get, is_modify=False)
|
||||
if isinstance(res_conf, str):
|
||||
return public.returnMsg(False, res_conf)
|
||||
|
||||
res = self._set_include(res_conf)
|
||||
if res is not None:
|
||||
return public.returnMsg(False, res)
|
||||
res = self._write_config(res_conf)
|
||||
if res is not None:
|
||||
return public.returnMsg(False, res)
|
||||
self.config.append(res_conf)
|
||||
self.save_config()
|
||||
public.serviceReload()
|
||||
return public.returnMsg(True, '创建成功')
|
||||
|
||||
def _set_include(self, res_conf) -> Optional[str]:
|
||||
flag, msg = self._set_nginx_redirect_include(res_conf)
|
||||
if not flag:
|
||||
return msg
|
||||
flag, msg = self._set_apache_redirect_include(res_conf)
|
||||
if not flag:
|
||||
return msg
|
||||
|
||||
def _write_config(self, res_conf) -> Optional[str]:
|
||||
if res_conf["errorpage"] != 1:
|
||||
res = self.write_nginx_redirect_file(res_conf)
|
||||
if res is not None:
|
||||
return res
|
||||
res = self.write_apache_redirect_file(res_conf)
|
||||
if res is not None:
|
||||
return res
|
||||
else:
|
||||
self.unset_nginx_404_conf(res_conf["sitename"])
|
||||
res = self.write_nginx_404_redirect_file(res_conf)
|
||||
if res is not None:
|
||||
return res
|
||||
res = self.write_apache_404_redirect_file(res_conf)
|
||||
if res is not None:
|
||||
return res
|
||||
|
||||
def modify_redirect(self, get):
|
||||
"""
|
||||
@name 修改、启用、禁用重定向
|
||||
@author hezhihong
|
||||
@param get.sitename 站点名称
|
||||
@param get.redirectname 重定向名称
|
||||
@param get.tourl 目标URL
|
||||
@param get.redirectdomain 重定向域名
|
||||
@param get.redirectpath 重定向路径
|
||||
@param get.redirecttype 重定向类型
|
||||
@param get.type 重定向状态 0禁用 1启用
|
||||
@param get.domainorpath 重定向类型 domain 域名重定向 path 路径重定向
|
||||
@param get.holdpath 保留路径 0不保留 1保留
|
||||
@return json
|
||||
"""
|
||||
# 基本信息检查
|
||||
res_conf = self._check_redirect_args(get, is_modify=True)
|
||||
if isinstance(res_conf, str):
|
||||
return public.returnMsg(False, res_conf)
|
||||
|
||||
old_idx = None
|
||||
for i, conf in enumerate(self.config):
|
||||
if conf["redirectname"] == res_conf["redirectname"] and conf["sitename"] == res_conf["sitename"]:
|
||||
old_idx = i
|
||||
|
||||
res = self._set_include(res_conf)
|
||||
if res is not None:
|
||||
return public.returnMsg(False, res)
|
||||
res = self._write_config(res_conf)
|
||||
if res is not None:
|
||||
return public.returnMsg(False, res)
|
||||
|
||||
if old_idx:
|
||||
self.config[old_idx].update(res_conf)
|
||||
else:
|
||||
self.config.append(res_conf)
|
||||
self.save_config()
|
||||
public.serviceReload()
|
||||
return public.returnMsg(True, '修改成功')
|
||||
|
||||
def _set_nginx_redirect_include(self, redirect_conf: dict) -> Tuple[bool, str]:
|
||||
ng_redirect_dir = "%s/vhost/nginx/redirect/%s" % (self.setup_path, redirect_conf["sitename"])
|
||||
ng_file = "{}/vhost/nginx/{}{}.conf".format(self.setup_path, self.config_prefix, redirect_conf["sitename"])
|
||||
if not os.path.exists(ng_redirect_dir):
|
||||
os.makedirs(ng_redirect_dir, 0o600)
|
||||
ng_conf = public.readFile(ng_file)
|
||||
if not isinstance(ng_conf, str):
|
||||
return False, "nginx配置文件读取失败"
|
||||
|
||||
rep_include = re.compile(r"\sinclude +.*/redirect/.*\*\.conf;", re.M)
|
||||
if rep_include.search(ng_conf):
|
||||
return True, ""
|
||||
redirect_include = (
|
||||
"#SSL-END\n"
|
||||
" #引用重定向规则,注释后配置的重定向代理将无效\n"
|
||||
" include {}/*.conf;"
|
||||
).format(ng_redirect_dir)
|
||||
|
||||
if "#SSL-END" not in ng_conf:
|
||||
return False, "添加配置失败,无法定位SSL相关配置的位置"
|
||||
|
||||
new_conf = ng_conf.replace("#SSL-END", redirect_include)
|
||||
public.writeFile(ng_file, new_conf)
|
||||
if self.webserver == "nginx" and public.checkWebConfig() is not True:
|
||||
public.writeFile(ng_file, ng_conf)
|
||||
return False, "添加配置失败"
|
||||
|
||||
return True, ""
|
||||
|
||||
def _un_set_nginx_redirect_include(self, redirect_conf: dict) -> Tuple[bool, str]:
|
||||
ng_file = "{}/vhost/nginx/{}{}.conf".format(self.setup_path, self.config_prefix, redirect_conf["sitename"])
|
||||
ng_conf = public.readFile(ng_file)
|
||||
if not isinstance(ng_conf, str):
|
||||
return False, "nginx配置文件读取失败"
|
||||
|
||||
rep_include = re.compile(r"(#(.*)\n)?\s*include +.*/redirect/.*\*\.conf;")
|
||||
if not rep_include.search(ng_conf):
|
||||
return True, ""
|
||||
|
||||
new_conf = rep_include.sub("", ng_conf, 1)
|
||||
public.writeFile(ng_file, new_conf)
|
||||
if self.webserver == "nginx" and public.checkWebConfig() is not True:
|
||||
public.writeFile(ng_file, ng_conf)
|
||||
return False, "移除配置失败"
|
||||
|
||||
return True, ""
|
||||
|
||||
def _set_apache_redirect_include(self, redirect_conf: dict) -> Tuple[bool, str]:
|
||||
ap_redirect_dir = "%s/vhost/apache/redirect/%s" % (self.setup_path, redirect_conf["sitename"])
|
||||
ap_file = "{}/vhost/apache/{}{}.conf".format(self.setup_path, self.config_prefix, redirect_conf["sitename"])
|
||||
if not os.path.exists(ap_redirect_dir):
|
||||
os.makedirs(ap_redirect_dir, 0o600)
|
||||
|
||||
ap_conf = public.readFile(ap_file)
|
||||
if not isinstance(ap_conf, str):
|
||||
return False, "apache配置文件读取失败"
|
||||
|
||||
rep_include = re.compile(r"\sIncludeOptional +.*/redirect/.*\*\.conf", re.M)
|
||||
# public.print_log(list(rep_include.finditer(ap_conf)))
|
||||
include_count = len(list(rep_include.finditer(ap_conf)))
|
||||
if ap_conf.count("</VirtualHost>") == include_count:
|
||||
return True, ""
|
||||
|
||||
if include_count > 0:
|
||||
# 先清除已有的配置
|
||||
self._un_set_apache_redirect_include(redirect_conf)
|
||||
|
||||
rep_custom_log = re.compile(r"CustomLog .*\n")
|
||||
rep_deny_files = re.compile(r"\n\s*#DENY FILES")
|
||||
|
||||
include_conf = (
|
||||
"\n # 引用重定向规则,注释后配置的重定向代理将无效\n"
|
||||
" IncludeOptional {}/*.conf\n"
|
||||
).format(ap_redirect_dir)
|
||||
|
||||
new_conf = None
|
||||
|
||||
def set_by_rep_idx(rep: re.Pattern, use_start: bool) -> bool:
|
||||
new_conf_list = []
|
||||
last_idx = 0
|
||||
for tmp in rep.finditer(ap_conf):
|
||||
new_conf_list.append(ap_conf[last_idx:tmp.start()])
|
||||
if use_start:
|
||||
new_conf_list.append(include_conf)
|
||||
new_conf_list.append(tmp.group())
|
||||
else:
|
||||
new_conf_list.append(tmp.group())
|
||||
new_conf_list.append(include_conf)
|
||||
last_idx = tmp.end()
|
||||
|
||||
new_conf_list.append(ap_conf[last_idx:])
|
||||
|
||||
nonlocal new_conf
|
||||
new_conf = "".join(new_conf_list)
|
||||
public.writeFile(ap_file, new_conf)
|
||||
if self.webserver == "apache" and public.checkWebConfig() is not True:
|
||||
public.writeFile(ap_file, ap_conf)
|
||||
return False
|
||||
return True
|
||||
|
||||
if set_by_rep_idx(rep_custom_log, False) and rep_include.search(new_conf):
|
||||
return True, ""
|
||||
|
||||
if set_by_rep_idx(rep_deny_files, True) and rep_include.search(new_conf):
|
||||
return True, ""
|
||||
return False, "设置失败"
|
||||
|
||||
def _un_set_apache_redirect_include(self, redirect_conf: dict) -> Tuple[bool, str]:
|
||||
ap_file = "{}/vhost/apache/{}{}.conf".format(self.setup_path, self.config_prefix, redirect_conf["sitename"])
|
||||
ap_conf = public.readFile(ap_file)
|
||||
if not isinstance(ap_conf, str):
|
||||
return False, "apache配置文件读取失败"
|
||||
|
||||
rep_include = re.compile(r"(#(.*)\n)?\s*IncludeOptional +.*/redirect/.*\*\.conf")
|
||||
if not rep_include.search(ap_conf):
|
||||
return True, ""
|
||||
|
||||
new_conf = rep_include.sub("", ap_conf)
|
||||
public.writeFile(ap_file, new_conf)
|
||||
if self.webserver == "apache" and public.checkWebConfig() is not True:
|
||||
public.writeFile(ap_file, ap_conf)
|
||||
return False, "移除配置失败"
|
||||
|
||||
return True, ""
|
||||
|
||||
def write_nginx_redirect_file(self, redirect_conf: dict) -> Optional[str]:
|
||||
conf_file = "{}/vhost/nginx/redirect/{}/{}_{}.conf".format(
|
||||
self.setup_path, redirect_conf["sitename"], self._calc_redirect_name_md5(redirect_conf["redirectname"]),
|
||||
redirect_conf["sitename"]
|
||||
)
|
||||
if redirect_conf["type"] == 1:
|
||||
to_url = redirect_conf["tourl"]
|
||||
conf_list = ["#REWRITE-START"]
|
||||
if redirect_conf["domainorpath"] == "domain":
|
||||
hold_path = "$request_uri" if redirect_conf["holdpath"] == 1 else ""
|
||||
for sd in redirect_conf["redirectdomain"]:
|
||||
if sd.startswith("*."):
|
||||
sd = r"[\w.]+\." + sd[2:]
|
||||
|
||||
conf_list.append(self._ng_domain_format % (
|
||||
sd, redirect_conf["redirecttype"], to_url, hold_path
|
||||
))
|
||||
else:
|
||||
redirect_path = redirect_conf["redirectpath"]
|
||||
if redirect_conf["redirecttype"] == "301":
|
||||
redirect_type = "permanent"
|
||||
else:
|
||||
redirect_type = "redirect"
|
||||
hold_path = "$1" if redirect_conf["holdpath"] == 1 else ""
|
||||
conf_list.append(self._ng_path_format % (redirect_path, to_url, hold_path, redirect_type))
|
||||
|
||||
conf_list.append("#REWRITE-END")
|
||||
|
||||
conf_data = "\n".join(conf_list)
|
||||
public.writeFile(conf_file, conf_data)
|
||||
|
||||
if self.webserver == "nginx":
|
||||
isError = public.checkWebConfig()
|
||||
if isError is not True:
|
||||
if os.path.exists(conf_file):
|
||||
os.remove(conf_file)
|
||||
return 'ERROR: 配置出错<br><a style="color:red;">' + isError.replace("\n", '<br>') + '</a>'
|
||||
else:
|
||||
if os.path.exists(conf_file):
|
||||
os.remove(conf_file)
|
||||
|
||||
def write_apache_redirect_file(self, redirect_conf: dict) -> Optional[str]:
|
||||
conf_file = "{}/vhost/apache/redirect/{}/{}_{}.conf".format(
|
||||
self.setup_path, redirect_conf["sitename"], self._calc_redirect_name_md5(redirect_conf["redirectname"]),
|
||||
redirect_conf["sitename"]
|
||||
)
|
||||
if redirect_conf["type"] != 1:
|
||||
if os.path.exists(conf_file):
|
||||
os.remove(conf_file)
|
||||
return
|
||||
|
||||
to_url = redirect_conf["tourl"]
|
||||
conf_list = ["#REWRITE-START"]
|
||||
hold_path = "$1" if redirect_conf["holdpath"] == 1 else ""
|
||||
if redirect_conf["domainorpath"] == "domain":
|
||||
for sd in redirect_conf["redirectdomain"]:
|
||||
if sd.startswith("*."):
|
||||
sd = r"[\w.]+\." + sd[2:]
|
||||
|
||||
conf_list.append(self._ap_domain_format % (
|
||||
sd, to_url, hold_path, redirect_conf["redirecttype"]
|
||||
))
|
||||
else:
|
||||
redirect_path = redirect_conf["redirectpath"]
|
||||
conf_list.append(self._ap_path_format % (redirect_path, to_url, hold_path, redirect_conf["redirecttype"]))
|
||||
|
||||
conf_list.append("#REWRITE-END")
|
||||
|
||||
public.writeFile(conf_file, "\n".join(conf_list))
|
||||
if self.webserver == "apache":
|
||||
isError = public.checkWebConfig()
|
||||
if isError is not True:
|
||||
if os.path.exists(conf_file):
|
||||
os.remove(conf_file)
|
||||
return 'ERROR: 配置出错<br><a style="color:red;">' + isError.replace("\n", '<br>') + '</a>'
|
||||
|
||||
def unset_nginx_404_conf(self, site_name):
|
||||
"""
|
||||
清理已有的 404 页面 配置
|
||||
"""
|
||||
need_clear_files = [
|
||||
"{}/vhost/nginx/{}{}.conf".format(self.setup_path, self.config_prefix, site_name),
|
||||
"{}/vhost/nginx/rewrite/{}{}.conf".format(self.setup_path, self.config_prefix, site_name),
|
||||
]
|
||||
rep_error_page = re.compile(r'(?P<prefix>.*)error_page +404 +/404\.html[^\n]*\n', re.M)
|
||||
rep_location_404 = re.compile(r'(?P<prefix>.*)location += +/404\.html[^}]*}')
|
||||
clear_files = [
|
||||
{
|
||||
"data": public.readFile(i),
|
||||
"path": i,
|
||||
} for i in need_clear_files
|
||||
]
|
||||
for file_info, rep in product(clear_files, (rep_error_page, rep_location_404)):
|
||||
if not isinstance(file_info["data"], str):
|
||||
continue
|
||||
tmp_res = rep.search(file_info["data"])
|
||||
if not tmp_res or tmp_res.group("prefix").find("#") != -1:
|
||||
continue
|
||||
file_info["data"] = rep.sub("", file_info["data"])
|
||||
|
||||
for i in clear_files:
|
||||
if not isinstance(i["data"], str):
|
||||
continue
|
||||
public.writeFile(i["path"], i["data"])
|
||||
|
||||
def write_nginx_404_redirect_file(self, redirect_conf: dict) -> Optional[str]:
|
||||
"""
|
||||
设置nginx 404重定向
|
||||
"""
|
||||
r_name_md5 = self._calc_redirect_name_md5(redirect_conf["redirectname"])
|
||||
file_path = "{}/vhost/nginx/redirect/{}".format(self.setup_path, redirect_conf["sitename"])
|
||||
file_name = '%s_%s.conf' % (r_name_md5, redirect_conf["sitename"])
|
||||
conf_file = os.path.join(file_path, file_name)
|
||||
if redirect_conf["type"] != 1:
|
||||
if os.path.exists(conf_file):
|
||||
os.remove(conf_file)
|
||||
return
|
||||
|
||||
_path = redirect_conf["tourl"] if redirect_conf["tourl"] else redirect_conf["topath"]
|
||||
conf_data = (
|
||||
'#REWRITE-START\n'
|
||||
'error_page 404 = @notfound;\n'
|
||||
'location @notfound {{\n'
|
||||
' return {} {};\n'
|
||||
'}}\n#REWRITE-END'
|
||||
).format(redirect_conf["redirecttype"], _path)
|
||||
|
||||
public.writeFile(conf_file, conf_data)
|
||||
if self.webserver == "nginx":
|
||||
isError = public.checkWebConfig()
|
||||
if isError is not True:
|
||||
if os.path.exists(conf_file):
|
||||
os.remove(conf_file)
|
||||
return 'ERROR: 配置出错<br><a style="color:red;">' + isError.replace("\n", '<br>') + '</a>'
|
||||
|
||||
def write_apache_404_redirect_file(self, redirect_conf: dict) -> Optional[str]:
|
||||
"""
|
||||
设置apache 404重定向
|
||||
"""
|
||||
r_name_md5 = self._calc_redirect_name_md5(redirect_conf["redirectname"])
|
||||
conf_file = "{}/vhost/apache/redirect/{}/{}_{}.conf".format(
|
||||
self.setup_path, redirect_conf["sitename"], r_name_md5, redirect_conf["sitename"]
|
||||
)
|
||||
if redirect_conf["type"] != 1:
|
||||
if os.path.exists(conf_file):
|
||||
os.remove(conf_file)
|
||||
return
|
||||
|
||||
_path = redirect_conf["tourl"] if redirect_conf["tourl"] else redirect_conf["topath"]
|
||||
conf_data = """
|
||||
#REWRITE-START
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
RewriteCond %{{REQUEST_FILENAME}} !-f
|
||||
RewriteCond %{{REQUEST_FILENAME}} !-d
|
||||
RewriteRule . {} [L,R={}]
|
||||
</IfModule>
|
||||
#REWRITE-END
|
||||
""".format(_path, redirect_conf["redirecttype"])
|
||||
|
||||
public.writeFile(conf_file, conf_data)
|
||||
if self.webserver == "apache":
|
||||
isError = public.checkWebConfig()
|
||||
if isError is not True:
|
||||
if os.path.exists(conf_file):
|
||||
os.remove(conf_file)
|
||||
return 'ERROR: 配置出错<br><a style="color:red;">' + isError.replace("\n", '<br>') + '</a>'
|
||||
|
||||
def remove_redirect(self, get, multiple=None):
|
||||
try:
|
||||
site_name = get.sitename.strip()
|
||||
redirect_name = get.redirectname.strip()
|
||||
except AttributeError:
|
||||
return public.returnMsg(False, "参数错误")
|
||||
target_idx = None
|
||||
have_other_redirect = False
|
||||
target_conf = None
|
||||
for i, conf in enumerate(self.config):
|
||||
if conf["redirectname"] != redirect_name and conf["sitename"] == site_name:
|
||||
have_other_redirect = True
|
||||
if conf["redirectname"] == redirect_name and conf["sitename"] == site_name:
|
||||
target_idx = i
|
||||
target_conf = conf
|
||||
|
||||
if not target_idx:
|
||||
return public.returnMsg(False, '没有指定的配置')
|
||||
|
||||
r_md5_name = self._calc_redirect_name_md5(target_conf["redirectname"])
|
||||
public.ExecShell("rm -f %s/vhost/nginx/redirect/%s/%s_%s.conf" % (
|
||||
self.setup_path, site_name, r_md5_name, site_name))
|
||||
|
||||
public.ExecShell("rm -f %s/vhost/apache/redirect/%s/%s_%s.conf" % (
|
||||
self.setup_path, site_name, r_md5_name, site_name))
|
||||
|
||||
if not have_other_redirect:
|
||||
self._un_set_apache_redirect_include(target_conf)
|
||||
self._un_set_nginx_redirect_include(target_conf)
|
||||
|
||||
del self.config[target_idx]
|
||||
self.save_config()
|
||||
if not multiple:
|
||||
public.serviceReload()
|
||||
|
||||
return public.returnMsg(True, '删除成功')
|
||||
|
||||
def mutil_remove_redirect(self, get):
|
||||
try:
|
||||
redirect_names = json.loads(get.redirectnames.strip())
|
||||
site_name = json.loads(get.sitename.strip())
|
||||
except (AttributeError, json.JSONDecodeError, TypeError):
|
||||
return public.returnMsg(False, "参数错误")
|
||||
del_successfully = []
|
||||
del_failed = {}
|
||||
get_obj = public.dict_obj()
|
||||
for redirect_name in redirect_names:
|
||||
get_obj.redirectname = redirect_name
|
||||
get_obj.sitename = site_name
|
||||
try:
|
||||
result = self.remove_redirect(get, multiple=1)
|
||||
if not result['status']:
|
||||
del_failed[redirect_name] = result['msg']
|
||||
continue
|
||||
del_successfully.append(redirect_name)
|
||||
except:
|
||||
del_failed[redirect_name] = '删除时出错了,请再试一次'
|
||||
|
||||
public.serviceReload()
|
||||
return {
|
||||
'status': True,
|
||||
'msg': '删除重定向 [ {} ] 成功'.format(','.join(del_successfully)),
|
||||
'error': del_failed,
|
||||
'success': del_successfully
|
||||
}
|
||||
|
||||
def get_redirect_list(self, get):
|
||||
try:
|
||||
error_page = None
|
||||
site_name = get.sitename.strip()
|
||||
if "errorpage" in get:
|
||||
error_page = int(get.errorpage)
|
||||
except (AttributeError, ValueError, TypeError):
|
||||
return public.return_message(-1,0, "parameter error")
|
||||
redirect_list = []
|
||||
webserver = public.get_webserver()
|
||||
if webserver == 'openlitespeed':
|
||||
webserver = 'apache'
|
||||
for conf in self.config:
|
||||
if conf["sitename"] != site_name:
|
||||
continue
|
||||
if error_page is not None and error_page != int(conf['errorpage']):
|
||||
continue
|
||||
if 'errorpage' in conf and conf['errorpage'] in [1, '1']:
|
||||
conf['redirectdomain'] = ['404 page']
|
||||
|
||||
md5_name = self._calc_redirect_name_md5(conf['redirectname'])
|
||||
conf["redirect_conf_file"] = "%s/vhost/%s/redirect/%s/%s_%s.conf" % (
|
||||
self.setup_path, webserver, site_name, md5_name, site_name)
|
||||
conf["type"] = 1 if os.path.isfile(conf["redirect_conf_file"]) else 0
|
||||
redirect_list.append(conf)
|
||||
return public.return_message(0,0,redirect_list)
|
||||
|
||||
def remove_redirect_by_project_name(self, project_name):
|
||||
for i in range(len(self.config) - 1, -1, -1):
|
||||
if self.config[i]["sitename"] == project_name:
|
||||
del self.config[i]
|
||||
self.save_config()
|
||||
m_path = self.setup_path + '/vhost/nginx/redirect/' + project_name
|
||||
if os.path.exists(m_path):
|
||||
public.ExecShell("rm -rf %s" % m_path)
|
||||
m_path = self.setup_path + '/vhost/apache/redirect/' + project_name
|
||||
if os.path.exists(m_path):
|
||||
public.ExecShell("rm -rf %s" % m_path)
|
||||
|
||||
|
||||
def test_api_warp(fn):
|
||||
def inner(*args, **kwargs):
|
||||
try:
|
||||
return fn(*args, **kwargs)
|
||||
except:
|
||||
public.print_log(public.get_error_info())
|
||||
|
||||
return inner
|
||||
|
||||
|
||||
class BaseProjectCommon:
|
||||
setup_path = "/www/server/panel"
|
||||
_allow_mod_name = {
|
||||
"go", "java", "net", "nodejs", "other", "python", "proxy",
|
||||
}
|
||||
|
||||
def get_project_mod_type(self) -> Optional[str]:
|
||||
_mod_name = self.__class__.__module__
|
||||
|
||||
# "projectModel/javaModel.py" 的格式
|
||||
if "/" in _mod_name:
|
||||
_mod_name = _mod_name.replace("/", ".")
|
||||
if _mod_name.endswith(".py"):
|
||||
mod_name = _mod_name[:-3]
|
||||
else:
|
||||
mod_name = _mod_name
|
||||
|
||||
# "projectModel.javaModel" 的格式
|
||||
if "." in mod_name:
|
||||
mod_name = mod_name.rsplit(".", 1)[1]
|
||||
|
||||
if mod_name.endswith("Model"):
|
||||
return mod_name[:-5]
|
||||
if mod_name in self._allow_mod_name:
|
||||
return mod_name
|
||||
return None
|
||||
|
||||
@property
|
||||
def config_prefix(self) -> Optional[str]:
|
||||
if getattr(self, "_config_prefix_cache", None) is not None:
|
||||
return getattr(self, "_config_prefix_cache")
|
||||
p_name = self.get_project_mod_type()
|
||||
if p_name == "nodejs":
|
||||
p_name = "node"
|
||||
|
||||
if isinstance(p_name, str):
|
||||
p_name = p_name + "_"
|
||||
|
||||
setattr(self, "_config_prefix_cache", p_name)
|
||||
return p_name
|
||||
|
||||
@config_prefix.setter
|
||||
def config_prefix(self, prefix: str):
|
||||
setattr(self, "_config_prefix_cache", prefix)
|
||||
|
||||
class Redirect(BaseProjectCommon):
|
||||
# 匹配目标URL的域名并返回
|
||||
|
||||
def remove_redirect_by_project_name(self, project_name):
|
||||
if not isinstance(self.config_prefix, str):
|
||||
return None
|
||||
return _RealRedirect(self.config_prefix).remove_redirect_by_project_name(project_name)
|
||||
|
||||
def create_project_redirect(self, get):
|
||||
if not isinstance(self.config_prefix, str):
|
||||
return public.returnMsg(False, "Unsupported website type")
|
||||
return _RealRedirect(self.config_prefix).create_redirect(get)
|
||||
|
||||
def modify_project_redirect(self, get):
|
||||
if not isinstance(self.config_prefix, str):
|
||||
return public.returnMsg(False, "Unsupported website type")
|
||||
|
||||
return _RealRedirect(self.config_prefix).modify_redirect(get)
|
||||
|
||||
def remove_project_redirect(self, get):
|
||||
if not isinstance(self.config_prefix, str):
|
||||
return public.returnMsg(False, "Unsupported website type")
|
||||
return _RealRedirect(self.config_prefix).remove_redirect(get)
|
||||
|
||||
def mutil_remove_project_redirect(self, get):
|
||||
if not isinstance(self.config_prefix, str):
|
||||
return public.returnMsg(False, "Unsupported website type")
|
||||
|
||||
return _RealRedirect(self.config_prefix).mutil_remove_redirect(get)
|
||||
|
||||
def get_project_redirect_list(self, get):
|
||||
# 校验参数
|
||||
try:
|
||||
get.validate([
|
||||
Param('sitename').String(),
|
||||
|
||||
], [
|
||||
public.validate.trim_filter(),
|
||||
])
|
||||
except Exception as ex:
|
||||
public.print_log("error info: {}".format(ex))
|
||||
return public.return_message(-1, 0, str(ex))
|
||||
self.config_prefix='proxy_'
|
||||
if not isinstance(self.config_prefix, str):
|
||||
return public.return_message(-1,0, "Unsupported website type")
|
||||
return _RealRedirect(self.config_prefix).get_redirect_list(get)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
# coding: utf-8
|
||||
# -------------------------------------------------------------------
|
||||
# aaPanel
|
||||
# -------------------------------------------------------------------
|
||||
# Copyright (c) 2015-2017 aaPanel(www.aapanel.com) All rights reserved.
|
||||
# -------------------------------------------------------------------
|
||||
# Author: zouhw <zhw@aapanel.com>
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
# ------------------------------
|
||||
# 项目管理控制器
|
||||
# ------------------------------
|
||||
import os ,public ,json ,re ,time #line:13
|
||||
class main :#line:15
|
||||
def __init__ (O00000000O0OO000O ):#line:17
|
||||
pass #line:18
|
||||
def model (O0O0OOO0OO0OO00OO ,OO0O0O000O00O00O0 ):#line:20
|
||||
""#line:29
|
||||
import panelPlugin #line:30
|
||||
OO00OO0OOOO0OO0O0 =public .to_dict_obj ({})#line:31
|
||||
OO00OO0OOOO0OO0O0 .focre =1 #line:32
|
||||
O0OO000000O0000O0 =panelPlugin .panelPlugin ().get_soft_list (OO00OO0OOOO0OO0O0 )#line:33
|
||||
__OO000O0000OO000OO =int (O0OO000000O0000O0 ['ltd'])>1 #line:34
|
||||
try :#line:40
|
||||
OO0O0O000O00O00O0 .def_name =OO0O0O000O00O00O0 .dk_def_name #line:41
|
||||
OO0O0O000O00O00O0 .mod_name =OO0O0O000O00O00O0 .dk_model_name #line:42
|
||||
if OO0O0O000O00O00O0 ['mod_name']in ['base']:return public .return_status_code (1000 ,'Wrong call!')#line:43
|
||||
public .exists_args ('def_name,mod_name',OO0O0O000O00O00O0 )#line:44
|
||||
if OO0O0O000O00O00O0 ['def_name'].find ('__')!=-1 :return public .return_status_code (1000 ,'The called method name cannot contain the "__" characterrong call!')#line:45
|
||||
if not re .match (r"^\w+$",OO0O0O000O00O00O0 ['mod_name']):return public .return_status_code (1000 ,r'The called module name cannot contain characters other than \w')#line:46
|
||||
if not re .match (r"^\w+$",OO0O0O000O00O00O0 ['def_name']):return public .return_status_code (1000 ,r'The called module name cannot contain characters other than \w')#line:47
|
||||
except :#line:48
|
||||
return public .get_error_object ()#line:49
|
||||
O0OOO0O0O00O00O0O ="dk_{}".format (OO0O0O000O00O00O0 ['mod_name'].strip ())#line:51
|
||||
OO00OO0OOOO0OOOOO =OO0O0O000O00O00O0 ['def_name'].strip ()#line:52
|
||||
OO00OO0O0OOOOO000 ="{}/projectModel/bt_docker/{}.py".format (public .get_class_path (),O0OOO0O0O00O00O0O )#line:55
|
||||
if not os .path .exists (OO00OO0O0OOOOO000 ):#line:56
|
||||
return public .return_status_code (1003 ,O0OOO0O0O00O00O0O )#line:57
|
||||
OO00O00OOOOOO0000 =public .get_script_object (OO00OO0O0OOOOO000 )#line:59
|
||||
if not OO00O00OOOOOO0000 :return public .return_status_code (1000 ,'{} model not found'.format (O0OOO0O0O00O00O0O ))#line:60
|
||||
OOO0O000O0OOOOO0O =getattr (OO00O00OOOOOO0000 .main (),OO00OO0OOOO0OOOOO ,None )#line:61
|
||||
if not OOO0O000O0OOOOO0O :return public .return_status_code (1000 ,'{} method not found in {} model'.format (O0OOO0O0O00O00O0O ,OO00OO0OOOO0OOOOO ))#line:62
|
||||
O00O0O00O000O0000 ='{}_{}_LAST'.format (O0OOO0O0O00O00O0O .upper (),OO00OO0OOOO0OOOOO .upper ())#line:76
|
||||
O0OO0OOOOO00OOOO0 =public .exec_hook (O00O0O00O000O0000 ,OO0O0O000O00O00O0 )#line:77
|
||||
if isinstance (O0OO0OOOOO00OOOO0 ,public .dict_obj ):#line:78
|
||||
OOO0OOOOOOO000O0O =O0OO0OOOOO00OOOO0 #line:79
|
||||
elif isinstance (O0OO0OOOOO00OOOO0 ,dict ):#line:80
|
||||
return O0OO0OOOOO00OOOO0 #line:81
|
||||
elif isinstance (O0OO0OOOOO00OOOO0 ,bool ):#line:82
|
||||
if not O0OO0OOOOO00OOOO0 :#line:83
|
||||
return public .return_data (False ,{},error_msg ='Pre-HOOK interrupt operation')#line:84
|
||||
OO000OOOO000OOO0O =OOO0O000O0OOOOO0O (OO0O0O000O00O00O0 )#line:87
|
||||
O00O0O00O000O0000 ='{}_{}_END'.format (O0OOO0O0O00O00O0O .upper (),OO00OO0OOOO0OOOOO .upper ())#line:90
|
||||
O0O000OO0O00O0OOO =public .to_dict_obj ({'args':OO0O0O000O00O00O0 ,'result':OO000OOOO000OOO0O })#line:94
|
||||
O0OO0OOOOO00OOOO0 =public .exec_hook (O00O0O00O000O0000 ,O0O000OO0O00O0OOO )#line:95
|
||||
if isinstance (O0OO0OOOOO00OOOO0 ,dict ):#line:96
|
||||
OO000OOOO000OOO0O =O0OO0OOOOO00OOOO0 ['result']#line:97
|
||||
return OO000OOOO000OOO0O #line:98
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,695 @@
|
||||
4wZIF38E5nxrLYkW2uUR7d3iaGQLSTjR4DuJynwT7k0=
|
||||
XqBLRXNa/0V7439P+rc6hEwNOx43wLjN61FZ6E2obAa23LCoGr2YlDYZYC1tcZk6mnFUnSSAMkOAkjmcftNoKhCg3JPMIJRBsMXbngZMA3Q=
|
||||
NF4oGUk70PXEJoCfkU1k+A==
|
||||
XqBLRXNa/0V7439P+rc6hEwNOx43wLjN61FZ6E2obAa23LCoGr2YlDYZYC1tcZk6mnFUnSSAMkOAkjmcftNoKhCg3JPMIJRBsMXbngZMA3Q=
|
||||
n+0ptngHIPIjFuMNQ53bftpaK0KYKjbY/JzxOkjVDFkqjO9WVvBZllMi2G3YerYfc6HYWOzoeF74xGLl1Znalv8dm0hrQlyXIHlBtsUjirU=
|
||||
XqBLRXNa/0V7439P+rc6hEwNOx43wLjN61FZ6E2obAa23LCoGr2YlDYZYC1tcZk6mnFUnSSAMkOAkjmcftNoKhCg3JPMIJRBsMXbngZMA3Q=
|
||||
PEKPgJeDDCLnL9UcS39EYZOZmcluSt+RuygO2AupCV4=
|
||||
XqBLRXNa/0V7439P+rc6hEwNOx43wLjN61FZ6E2obAa23LCoGr2YlDYZYC1tcZk6mnFUnSSAMkOAkjmcftNoKhCg3JPMIJRBsMXbngZMA3Q=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
XqBLRXNa/0V7439P+rc6hEwNOx43wLjN61FZ6E2obAbFx1CPChpgx6xlsqPUrTBV
|
||||
Z71ucSR75ppLp8TcGPXjF3pMbrAmHfUi73meeu5lk5g=
|
||||
XqBLRXNa/0V7439P+rc6hEwNOx43wLjN61FZ6E2obAbFx1CPChpgx6xlsqPUrTBV
|
||||
ysVvGAkjYd+CMvqMgwDSXLWjcMyzhbnUJllEs/XAJUc=
|
||||
dTLQ8Wr3wPn7w6pte1B1YA==
|
||||
piG6BsMF31u4R4iA6R4SRA==
|
||||
SbQQ5SqO9QrBwZ9ObpMYLw==
|
||||
wiYVtfO/yzajW1Tv5z7hyA==
|
||||
e+1YSk47tjYGkSkbGftbZE2uYCN5IbNhy3jmrXvEvpA=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
XIfdJ79nObMM+vyAmKbTmw==
|
||||
bbgfjwWjzPNOxnsxTb5hzQ==
|
||||
NyzlU2YOTFNZFPd7RK11YaWJrITXEmKGOKhVLomHOc20dOocSxleZ0AROzWQsbmh
|
||||
NKJqjhkvgNdUxIywfoLwoQ+rWX4Ub5rsDIB2VkgmsHbQZuxN+TYMgAuTxJq+YliuIqYyVFQzgzZmvrQpFRfdgg==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
1POn+WtE+lgXD3ffcoL21lvcxUuxtU7UEzaHRLypkEk=
|
||||
dOwNHIv3VHyb+LXIiMhwhoNJo9GQoWdlxj44kIhx6Hp82Kdhlr8gY2+EdvH4A5GLyunyBppgYfFAecDj13CWYA==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HknRXNf+EPwleJNY1jfx8qILnkV2USPGiWudZwlPY4n3oQ==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
/dMCrtsSS3AVo9f6yz5/6W682xaNsg6HJuCqCuwKk/0=
|
||||
rAmx4p+JZV3M+BRHZb295XUSu2ydOkZmyVfYHgJEFr6pg8rmusZs+IDM4uRAMobX2AfudLBLSPmuRpQF4T5VAKRvfeoURZQ1xEjbrqOIQpoPiEQWE/XxPN5p2F97G+wQ
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
9GxZpCRwMRDPejWR2Vvf+LKn0tNtFKp8Eh2tnr4Da9U=
|
||||
wgR07xfoapmx6eEnFHXXYrIeMJaP3Lg2M3zaGXD/L9gjQJppw0Kdfu9YroE8LgSjx3OthaS5h4DbYAtc65wP0Q==
|
||||
xWoGNWjKGPfI4gq8aHoTfBq1oaYa956TFzYuHTbqc+m/yYGgrco00Chzgj8jXX13K8mLh+/6MvqvJUOejPajKA==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
+1OulhOVgLGZsanMCIMHTov3J4R+Y/qOR1atWG/VUPMrqBDDVvYwgG74FwIEbUmH
|
||||
wgR07xfoapmx6eEnFHXXYo0pRHKIKLUse0GXAaX9haXCB+q3nG7WybPngoy25/lr
|
||||
O3CUgrw2GJfB+mDjH5+NdnceC2jE7ElwqGvUxIcW3ioxHSZL5I8DFWp0U9QXyZFCJEIa4bUmblNphufxI1RnSA==
|
||||
VmVrGQo2zRokW/ZuO9bN6+8Z7TpabL3QP28zOzKbdjakEuF8eNiysMFwArESQEwY
|
||||
VmVrGQo2zRokW/ZuO9bN6xqOsfK2LZ5KdaTaboUxT+J9crK/OkxM3Cj8QV4T4xVHdhEAJicef5dNzYYGTNmijMbUMqg0Qdml7huVnL95ngY=
|
||||
sobCGpmMf4/g7+HpPqBjC6hatZ6rUY3AAzqC73FJ58Q=
|
||||
VmVrGQo2zRokW/ZuO9bN6+8Z7TpabL3QP28zOzKbdjarRfvLG/H9rGMUHrshOkfFMP/VpuSx1UKdq74H98nb16vzDG30yJp2flJ85R7kiKjdYt3OAAWEEUxVb/l0+Vql
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
J2qwAW0nzQmbo9HpSOVZlqBGxoFlarg7r90Pqb8pOp0=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
+Frj5gqpvxE6m3yWzQ1UlTIgSgRpVewwUpyndC4ejPs=
|
||||
1O9qhjCr7g42w74sxW8Jlv/qDVNMbtBQQRaVFyF+WSiIU5hjbnf46ZqeQa2eiuyJUliAXdRmA7jeXoq7Zvzsug==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HknRXNf+EPwleJNY1jfx8qIL47rDksm6lN7pqbuOzxD+Rw==
|
||||
HZgQ37DasMTj06jDF6JhZeOucr+OS/yts2fdjXQ7Dm+4vRt5IE1mD34qMjUvwdSpTUFb+HQxnDeJ2haDwxBEfw==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HkmQ2DsRtKL7gFMZzQhcxfIn9vv7elCYoxsXqtak4E/tNQ==
|
||||
wgR07xfoapmx6eEnFHXXYtX+pH+0NWr1LYbDUaw1pomL5U7cS0NAfF3rE9bUtpXl5cYry5RpCH7tkxjCcl+JBIsfkiUE3HU5Jsl3yt70u28=
|
||||
L0eUthVnpkGsmKFAX6d+uBWSR38I0ooDiDs76zI3rHk=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
hCTaGH97j27PDhFRKBPIW1mpxeh+5/xXma/dtrv0fcg=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
b4OJVZe8QyIpjuTpKXDL9A==
|
||||
k1ktu/l6HFULD7Vyr8Cv0NTQ7W8T66w67/IAnPs1BphbcAqgtYD23/UPxAUUoOX3zHiZvFDvN79q8xGwTMxzD2H7sGNp8TutRAPVqCo4E6o=
|
||||
mfT8DrNbUmxQ2BnZ1bZFTLh9MEuZKOpmAfF70OnZ9TU=
|
||||
k1ktu/l6HFULD7Vyr8Cv0M4/SSQxyWRs7AonOXcLu6M=
|
||||
lNAImT/ajyr0UfekriSt9zSq0YdZAJlybeil//6Le5Lk+VqsbLPic0TZyMhSi1i4
|
||||
9uZN8r0CKVAbfzGtFDuvLzjQrmTpqtae6m5049udhE7jeDlzSXSQQb6RLWBeXr0h
|
||||
lNbaHNaSPRfUV3Bq+5wk6/o/pGhUxfVnG6Vdh8vueai6mE2PiMdE0bc8q4jeGJk5
|
||||
VmVrGQo2zRokW/ZuO9bN6wmr39mr/nsb2Dav+lIH7B04mbHZv7nimwjnfT2u87IJz/Cm6ht29LQKMvtjjf+B66QOHjnv2exZ+gY1I9sna3E=
|
||||
VmVrGQo2zRokW/ZuO9bN6zpu8f8CSK4jKnbU3ZGJmtvI3LMBtK4e0vlEt/NRBmS6
|
||||
VmVrGQo2zRokW/ZuO9bN68oOr6KTHQoLVUXKZT/zSoBoqKYJ9J0V8LlHuynr1gG3
|
||||
VmVrGQo2zRokW/ZuO9bN64iIPtwqqzY7IGXnqm0yAg890VkNwZCVekNfOG742tBCDsTNSICGfsHcEmavjt8ryQ==
|
||||
VmVrGQo2zRokW/ZuO9bN6/DCJtLswi79iRP2VS1Cl7lfMksK9QvQ1cbzmlzMcErh
|
||||
VmVrGQo2zRokW/ZuO9bN67Cw9WPgw66+cjpw/Ea5bB7otkixB28WuBR7LhKcbZ+r
|
||||
VmVrGQo2zRokW/ZuO9bN619j4sjPeFT5nbRqDaMF1SyRCEOykS6VtvIiINHSVF6d
|
||||
VmVrGQo2zRokW/ZuO9bN6+ggYawrMTekjFNmeq2lamXS1PinPTjUn3ObpK94+9cw
|
||||
VmVrGQo2zRokW/ZuO9bN61dj0GoH2G1Dp6ZIVlQ2vt0=
|
||||
VmVrGQo2zRokW/ZuO9bN64Mo+xDfj7h1iI635dygp4XcwMixUpSGp93xEK87JQBN
|
||||
VmVrGQo2zRokW/ZuO9bN64iIPtwqqzY7IGXnqm0yAg890VkNwZCVekNfOG742tBCy+Z23+N8lT5zKrFfykLJXw==
|
||||
VmVrGQo2zRokW/ZuO9bN61dj0GoH2G1Dp6ZIVlQ2vt0=
|
||||
YH231WTDnzQG3bFilBiqIg==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
b4OJVZe8QyIpjuTpKXDL9A==
|
||||
0snEhJ9RKaTb75xc3VQkty1aZuNySWxV7zy7TvMj3VELunqJJCu6WbOmoTqe9fBTss+PuRF0k3VMAy77nLPDRKCNrghLXLD+9ZRohmhwvHw=
|
||||
mfT8DrNbUmxQ2BnZ1bZFTLh9MEuZKOpmAfF70OnZ9TU=
|
||||
0snEhJ9RKaTb75xc3VQkt+QytQcTDkSIVmyzyDgzN38=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
qEXluMqy4s3YaMlhK+yN2FagSHb43j5sbjmAKOncUT9h+EXTNgwO3qaX8l+Kgen0
|
||||
lNAImT/ajyr0UfekriSt98+S7POF+Z6BRjAWZy5+byneV3Q5JJujzuhONtsDZg8T
|
||||
9uZN8r0CKVAbfzGtFDuvLzBJvYBsQoZdglGiULRh5LkQepPU8A5qwSrOLluzUtVy8JAf3NUhjARoB9em7CKotw==
|
||||
lNbaHNaSPRfUV3Bq+5wk6/o/pGhUxfVnG6Vdh8vueai6mE2PiMdE0bc8q4jeGJk5
|
||||
VmVrGQo2zRokW/ZuO9bN6wmr39mr/nsb2Dav+lIH7B04mbHZv7nimwjnfT2u87IJz/Cm6ht29LQKMvtjjf+B66QOHjnv2exZ+gY1I9sna3E=
|
||||
VmVrGQo2zRokW/ZuO9bN64Pq6Hr0GQda+jfI3yI24le74i0xC0v4Da596cm0JfkE
|
||||
VmVrGQo2zRokW/ZuO9bN67jx0a4m693Et0R92z2wvL71x/3S2aSF/NvGCgu6CHqf
|
||||
VmVrGQo2zRokW/ZuO9bN68oOr6KTHQoLVUXKZT/zSoBoqKYJ9J0V8LlHuynr1gG3
|
||||
VmVrGQo2zRokW/ZuO9bN64iIPtwqqzY7IGXnqm0yAg890VkNwZCVekNfOG742tBCDsTNSICGfsHcEmavjt8ryQ==
|
||||
VmVrGQo2zRokW/ZuO9bN6/DCJtLswi79iRP2VS1Cl7lfMksK9QvQ1cbzmlzMcErh
|
||||
VmVrGQo2zRokW/ZuO9bN67Cw9WPgw66+cjpw/Ea5bB7otkixB28WuBR7LhKcbZ+r
|
||||
VmVrGQo2zRokW/ZuO9bN619j4sjPeFT5nbRqDaMF1SyRCEOykS6VtvIiINHSVF6d
|
||||
VmVrGQo2zRokW/ZuO9bN6+ggYawrMTekjFNmeq2lamXS1PinPTjUn3ObpK94+9cw
|
||||
VmVrGQo2zRokW/ZuO9bN61dj0GoH2G1Dp6ZIVlQ2vt0=
|
||||
VmVrGQo2zRokW/ZuO9bN64Mo+xDfj7h1iI635dygp4XcwMixUpSGp93xEK87JQBN
|
||||
VmVrGQo2zRokW/ZuO9bN64iIPtwqqzY7IGXnqm0yAg890VkNwZCVekNfOG742tBCDsTNSICGfsHcEmavjt8ryQ==
|
||||
VmVrGQo2zRokW/ZuO9bN61gFm3fkb7F9QaTU95L/jPOa/fpyFMOpGyv47wlhPWUavkMZtX7vhm++qsgSrcsbMs7iYZPvqF57PAVFlPrQb9g=
|
||||
VmVrGQo2zRokW/ZuO9bN61dj0GoH2G1Dp6ZIVlQ2vt0=
|
||||
YH231WTDnzQG3bFilBiqIg==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
IhuisKim47k91RVt8z8qtPC1yXtxP4HpO+Fq1WLJQfIrs72H+rdxAJbYDuziNMhCDP4nqJoVpCdCT84Q09H2lGhMa2KtuWLGVujAUwS8tc0=
|
||||
CX0zxV/Ac/FH6f+lPc6emlnfZJ8TnNl2PJfU8arp9tA=
|
||||
CX0zxV/Ac/FH6f+lPc6emtaE/Z+HQ+edntL70zTF0MU=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
QRy2uI6M17xa8VECXPwQ/r3FvZ9uhLswudGkKrhamRBUed+4wvaGk+50+pqYUcvK
|
||||
vwPJuanCw0GGKmHnTL06kqiRb2TJevIkneRS65wI1Gg=
|
||||
M6K7zImQ7EejaudBMeyRrzUBkAth/QVYgGw+e7NSNq0ok1LuJoFoxPIRP/laAjHQ
|
||||
Dlyx6ZDFdkn72YIxkC3bo6dRBka5m193wr4Tuji3xDfal4l1bn1HdgJU+c7TJ1Vg
|
||||
VmVrGQo2zRokW/ZuO9bN66A2fToKVW3Kp87AR7xLfgU=
|
||||
VmVrGQo2zRokW/ZuO9bN69a0VQFchDw5lCmzSL0TyRpYBO2LnIP1Dq6Tn849AbL8mrG/FghB2zsTPS+n/OODJzFvaZSpI2TVY4zI3RcRmUk=
|
||||
VmVrGQo2zRokW/ZuO9bN65/ToZah2A1bCyMMmWoOHmwTDoouye0hw/WXVVasqBFLoh/FEdn1xkV5SIYhN6mUm5rSgxZdrKoNrvXutRDqIHY=
|
||||
VmVrGQo2zRokW/ZuO9bN69kILXNpKBWZL9i8mpYJQQ8=
|
||||
VmVrGQo2zRokW/ZuO9bN6w1Y5WxgJQ5MLDnvJCe9W01+kddoq5diIGZiCmLcwjNsGj/5PV83zGZZyBT+DL2LZ3LIzW5cj5kK3psaPepTpvXCc+DC0DY9z91U0kNTbcmP
|
||||
VmVrGQo2zRokW/ZuO9bN6yxP4eEsZPOAIxRf5Vq6NdXCvDij9/Mz7hFjclWDpZcvlMUPpuqhPrhUyyRjD2+HpfnXP2EDVQQwTF1bXx077bw=
|
||||
VmVrGQo2zRokW/ZuO9bN654Enj8yhWFV20SJ83piZWE=
|
||||
VmVrGQo2zRokW/ZuO9bN689VNSLJl+o30OP6460WfudZdrYr3BFzOC6rBJ7pfcP2
|
||||
+plE/1bhdo64kO07cLlUX9vuy3nOWCHRda7Edql0VQ4=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
H723/Fixv18fFechEvPfz+RShgw63yZpm0RRiruD6qgKiIksxbm4PQvdWh0n3Qv5
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
fg6BEyojOsebUV1Da0ek5HUdtpZqeBZhnz+XcTtBkgkzND/kRvI8T41ZtFR1F++bMFHpQKZGVIOzgelgaNXw0fIw4UTXnS4xgy4+N07DRSA=
|
||||
nB7uUqFfRyFo2dz1p5PSrbBSwrXmx/ZlKzCQbe4NOoWD3zLEqpTC3naia1wn2HnJ
|
||||
nB7uUqFfRyFo2dz1p5PSrVCidKjUrygAfYqtvGaCTx+P7CYvtc/HsI+QlD24z6T1BkgpveKIgrBCfXy8mi9tN3S73ZSEBsomyCpaYUenOzM=
|
||||
AW6BcohkqRe+6MPCUtbq72rijnAQgwcBIRYlwd0OM3p1c3LrZX0CAPa3YjXFuLAqtq673F6jtVTw9IaFt9S2PBbfjX8+iwEzNVQ+AFpkuXA=
|
||||
VmVrGQo2zRokW/ZuO9bN69h0gT5W9bsZSh/FPw+t8S7Xg3wbL376ONecW0BSarGt
|
||||
M6K7zImQ7EejaudBMeyRr3H1QBxcRmFmUDWI5IEICl0=
|
||||
n/Vg/an64od1JqfYD8zjtpmkT5XhnqiZIvQYECHVkbVtjF9uqp+q8tnLunH1B58zoVQtAiC8nqGnxZE4JD+cDA==
|
||||
VmVrGQo2zRokW/ZuO9bN63P4gUZ6s3DvlDlNl4yHUxo=
|
||||
aPdLEV6HY2SBr9CPW/3NlV6skNvI9JsIj9pOVhf2RvA=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
4TmkoDZIUXBDfgrEcjLrILoiV/r45eWI3EuL4iu8YCn8mmUZy1JG/0grjxu+JoNyI4MJoL1550P5cqm9YzkMmg==
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
QRy2uI6M17xa8VECXPwQ/msg81KEgiYBmI3HIABNuY6R+ST0p3U6tiMzZl8KC5E/+4LuyaVdKaDwd8xrlzplzA==
|
||||
/0ULpLqgTvInFD0r5hHANlt/A4HN48BaWWKSY1CtQvDGiXT/SvUITbHNTthFbVxc
|
||||
IpalQHG0U5xE1KnJ2rA3+zKtqFrPp3t19c9JGCjKU7o005Y2Y/EPTg/HqcBW9dPKmz/Fwy9EC/6B9qvDV4UqS6mdk3YE0NjY7aGYy8qDqg0=
|
||||
B46DYlFQtDlulKRQCnJ3QcKt5tVSQirJA5+oY7kSjdHFB3yakZu8NqU5tBnxAUCR
|
||||
ncUn2TP8ZQ4fZMBYk+CUrZu9buP2neyCDJBE1ohmVXDje+hgfrSkxiEVXRD5MMeB
|
||||
GlJrPWeRtvgVw0Cl3yHj2DnrwYIJQs3/uKozgXNgdGiPoyv85RnxyG7THH1MXgLIEkGYD5JxVcpwFVCXpZX7mA==
|
||||
jceVTICIbdeQFZqTJKGutfSrJlMev6knX9PMZKWQHjZP2zVkNQw5SLaJxnQB9+kv
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
8AKpM+6i2gR98IaMzP+8eqqIPbXcMKDW+V81QFTAVtM=
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
EKWXQpq52OG0J2Wd0ZMK1fHl6IB0UXMhfHM8IMciaUE8Cuhs2Jaq+7F+INo0pV0b
|
||||
tVC11ntb4xes47B6YgBZcZByliVS8Bcywk6SDhPLq9M=
|
||||
U2Lm52IpUMUiy6pQmybrUNMsxQNvrzGUtIlYUGx/G+d+d11TtLhKhajQSiLMOGbM
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
tVC11ntb4xes47B6YgBZcRoAGnZIKcHQ8817VE45RgE/szi0KWuuV0y+WiQG1xKnhxN36HfB+l+pBaungwquSjpKxsA0/x88FP41yUSvh5M=
|
||||
dBHzFT+Qe5dH9WRInSu8jgBdjJ3d9vUVTbusOnLdjISlXe3y6Hp9jE1CEAXO1Vgo
|
||||
lNbaHNaSPRfUV3Bq+5wk6635BWCQo9IrgUob1Zrag3U=
|
||||
TNgWuy5WhP0PGg7S3lA/vmyECpd3KM52AqVa+3aAThk=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
JR/YEWislpM0oP8V4S7W/T3x/sEx/RV81gEcsXh5Vm4=
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
EKWXQpq52OG0J2Wd0ZMK1amw32WdMHSvsYBysyBVye7MBGZqqMlCnilH41Ppl5z5
|
||||
hCTaGH97j27PDhFRKBPIW1mpxeh+5/xXma/dtrv0fcg=
|
||||
b4OJVZe8QyIpjuTpKXDL9A==
|
||||
lNbaHNaSPRfUV3Bq+5wk6zaqNMuN43kTxbH9sz7EO2ht3uTIAUE7QAf8gn2FiLoMM2qnty9PLRQax5H53+LRWsQG/ArUmkNEPQBKMtLhFic=
|
||||
mfT8DrNbUmxQ2BnZ1bZFTLh9MEuZKOpmAfF70OnZ9TU=
|
||||
s6ChnXH5zaR4nss2Jj7ULBibRmB/kmin0eYU9S2eTfU=
|
||||
oacxXEoPih9NKsd5qduwcOQwetUrLBW9DCPWftWi5APwlnytsKeJdxzEsW4Uksji/RXLLSNM+uMNJD3dcCtnrQ==
|
||||
L0eUthVnpkGsmKFAX6d+uIwh5dNhu3qfFXQw4bkQcLU=
|
||||
TNgWuy5WhP0PGg7S3lA/vuqTekPEYUPjtE+v8avEsM0=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
5n6k7W+gw/zLAOXg7V7ef11JvrMmq8Abhcn0Lriux3c=
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
rqA8uevZ84obkmE4+PiALnegDM7v+GnS5uqMmEfzMznDMjjPN2InjgfCEjrrETPS
|
||||
HXgXYcQ054mulb9vBwklSBYhmCzNXMpD7HETcV66cm3Ez8lsbeNFwRrL2pufjKIN
|
||||
hCTaGH97j27PDhFRKBPIW/dJaxrfoD6RixVo3Rf5Yz3CGP+VwV5No6W32fmew1fv
|
||||
/Apef+rUhQ+sRd878DPgvsqTHrbDs5B7KWyYuPbx/h60sw7UW87NeTBPLIIKfmyO
|
||||
+7P0MlEc1eFk6hnR1wxxsLeMOEssU3yb0jKp/217OlU=
|
||||
qMRWIbfylJbi8JdtlTKCc5qLCzoG+56ejKCriefYCzg=
|
||||
VmVrGQo2zRokW/ZuO9bN617WCoPIsnyqpe8hS61d314=
|
||||
VmVrGQo2zRokW/ZuO9bN66WOTbqs3JJ9oARgY2YlMq0=
|
||||
sQfTf8f6jxyRSx9SNPNEtQ==
|
||||
qMRWIbfylJbi8JdtlTKCc1faDhfd8MAGeioU59baa8k=
|
||||
VmVrGQo2zRokW/ZuO9bN617WCoPIsnyqpe8hS61d314=
|
||||
VmVrGQo2zRokW/ZuO9bN66WOTbqs3JJ9oARgY2YlMq0=
|
||||
YH231WTDnzQG3bFilBiqIg==
|
||||
661hZf7vhUQ+50okfwfTXw==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
uNSTKhXsc886vN3euLSVYkMvdkNBDE83aF6HgmNzzfm9nS8DOshApSz6BmwM4QxxEGBVCrw/4EI5+KcUH3As5A==
|
||||
Dx/Tamsgq45f2G8qqPP8mCCoT8bqocyYm33wbOaP3Tg=
|
||||
JpR/5cELI47P6HxjnatoQ2/atXOIHNcG1sc28haUJFZ1gZDGEl2o+OKEFUVLEwFaEzyLGFu5kNfMmEsr1svt1g==
|
||||
r7wsdpnewjrvWfftu89eoYTwkMI5OWUW8b5cozC4vefJKFfxvzCdPhjxCkfhZhB4aI7EzyABwQuKXPBn2jYK3A==
|
||||
pW8ou9f8OJbDl2h6RV18oo+Nb2xSCvRyGVnGpXJOZKFLJWxu4t/C+dMF19UdhbFV
|
||||
pW8ou9f8OJbDl2h6RV18oikbwwEIAI/F+KSggaRJYmv/cWHXoGxXdp3crBfIEA5L
|
||||
lNbaHNaSPRfUV3Bq+5wk63n5uJEj3P2III85nJ0uhYOX7Jw57j5UcSlV5FUAGDx8f48V0h/MPMwLz9LF6kln8w==
|
||||
51UII3rZ87NZKsRBZ0eyLdVqoWpbfe8TmH2YJ9DWmQlS1xLSN4I2NnpSxLSgoi6ARf5O3cCN9gvq9c/fk2WhpQ==
|
||||
51UII3rZ87NZKsRBZ0eyLdMEmNp2vC2WieoOz8+5XT1h8AmvAqKPSJXYghFKotIHwSJazFvEKrbDFNimm+5wCA==
|
||||
TNgWuy5WhP0PGg7S3lA/vq/Pa4m0zdEJKukF/iQ8p7w=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
8AKpM+6i2gR98IaMzP+8eiursxazYPKLu6wgIOWPjLg=
|
||||
kOT28QQt2GDU8VknV6OBKEjqdQ6KB8XgfYY8d9xdmSdjAru83zSuyfLg72ewneVt
|
||||
oguKPwdzdIXoCdJnfha//pL2zpBMd1+gikCsUIV2A7Y=
|
||||
WHkOzVx7seuLmxs5Hu+l/rPH5+mQcujSxbSmaq50dGDrgdFoJ8I/OP4q3nIZk9j6e/sIRs7MFvaiH8s1k9l4xA==
|
||||
NhnIR3Ilo4H2su9/cTNo/Jz8iK0F0orMNzBf9My4ZxFxRp41ki11trhLUwQPw5UA2abvNkVk4cCi77fZpcH0AM7gHazPquEwSeick4HgGNc=
|
||||
96orka/uERLyRst14azQwnND1LaAMeJ6hPF2g6RNEz6UPvO5bgA+DLcTH2CZLr/bGRj54IEJazMCgjM3+swz1g==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
VAMhP650VvSzUoGsza+Zzzu+y5xFCoLk4dxzpbTcSwM=
|
||||
6we+bQ+BNhpl74ICwbzDDyJheDk8+zESwtN6nsP8zU7Uere9TaY0CfOByEukHqNf
|
||||
c0jePRxtTVZYop75Q5JCFiIE3RJvFM05nYVUsJRwusjXXH+D9dAyYW92q67gBfn5
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWghjKa4Bx/9hwfBJOgnWLq5ZzPLUX/xqPUerYk2PoPswUHzqbrMkriRu9iUTYNkUQ=
|
||||
c0jePRxtTVZYop75Q5JCFhNbnjqrU5CDzmRZm0r0Awym1X2wG8X/4uCaFLBbqGAp
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWghjKa4Bx/9hwfBJOgnWLq5ZzPLUX/xqPUerYk2PoPs8fM+dMsuU0wJOAXUgqZD09pxvBN50/ZgncRWUVKlprQ
|
||||
c0jePRxtTVZYop75Q5JCFhNbnjqrU5CDzmRZm0r0AwwPUU7dHM1clC+rsS6Yiu9o
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWghjKa4Bx/9hwfBJOgnWLq5ZzPLUX/xqPUerYk2PoPszGlLmfF3+XBxrrFCfTO0u+lwudO575CdoR3BcS5rhnD
|
||||
c0jePRxtTVZYop75Q5JCFhNbnjqrU5CDzmRZm0r0Awz+x7baA4CU9Vq58U1Mh/Bi
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmXcMVI23sf4OEQYLlAO6/ObeURw20jcXuWd22HNjPFXSA==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HklQ/NA0CCb5gYasRx4vE/jiwP1oPICdX16xr3p3prUwUnh9ppk6jJupRQKnfWADwuI=
|
||||
B9nQgrssj+ws3f+4OSMxKmc+LynALf4SADHGSaLUuGY=
|
||||
u0YJgTHLzbZHSJypIBwn/LJB/+7gHq/cLzGLRiGjmak2IsQN4SdsQxkVuqy6868E
|
||||
cbvASHjpysrsjdY5RctXmOQD9rrCTb2ZxmWqcs5K2qSZ7dLEUX0XjSNDZ5yd5cTx8AH3snW3RGX7lCwH1f0D0g==
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWghjKa4Bx/9hwfBJOgnWLq1lfQhkMONeVXRmV7LJJvKul+Fy89aBAE/9tY8gTDXFzpUvLB4TFO7WEFIw0odvXb
|
||||
cbvASHjpysrsjdY5RctXmOQD9rrCTb2ZxmWqcs5K2qTNDFwTtRmB79/9v3BVJsrHpdji1CVknwhFllSpjXF2lA==
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmXcMVI23sf4OEQYLlAO6/ObeURw20jcXuWd22HNjPFXSA==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HknjAU/EofwtdUePHnhs2gewQri/RccLzVJp08Zsrqre1shu8DNVPQEBXLS9qc4V6E0=
|
||||
OE58XJkoqje9oPDfqi73ViDhb/MaA1CDRRN3hfs5qLcD7wPRDa7t67sgSM6GZud7iM7Q+yRzOZwxlLWELW/MJg==
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWghjKa4Bx/9hwfBJOgnWLq1lfQhkMONeVXRmV7LJJvKlg2pHEHdC2FnFJvgbKhNWegIP5NFaPmE64WTgBO0ycN
|
||||
A69EZujp4WFkVkJizqN6C8VUkrxVow0gg23pw9cAA/uGssiFLD9jqO7nvqtN8xHKbEUH8Q6uj7cH8Ol7YnBkNw==
|
||||
1S1xjYS0s+Ph1PyvECx3QHbY1OYa5gxYwaadGhIGNE4IFG/B7/pkR8wd8Pmtij+2zp1qIIbA4jXbHOMeTyXJWoDCmIqrdouDeBF95pQ4YIo=
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpt9ortgN38QM9ut7GqkF6952rTeSJFUEYTgtdoJlNBjI=
|
||||
1V2v8QerKOmubvSxgB4eTPvgycJaq1uM0FItIxQY+IBkx428stg/YVrimhpw15It
|
||||
VmVrGQo2zRokW/ZuO9bN6zM/X2hHBCd+n2OGnnATmrTlgv7Pbn3qn1rTK72IH5Ea
|
||||
VmVrGQo2zRokW/ZuO9bN6xRyTbp7DqdRCfMT3PPA8YlDL0IuPjiay9076A6RftkxLnv1sxO4e5wt96hxsWEaz4bz3cyXhvh3Dxk+v8Yfelc=
|
||||
HXgXYcQ054mulb9vBwklSBYhmCzNXMpD7HETcV66cm3Ez8lsbeNFwRrL2pufjKIN
|
||||
fLETQ22HuDIh4ibW1C50WWehEWMVGJXX0CLf5TNvJo4Q5+7XSqZAhWnHUsbASo7V
|
||||
fLETQ22HuDIh4ibW1C50WXEsbJxRZ4lXGXSSB22fG3I=
|
||||
wgR07xfoapmx6eEnFHXXYo4se8cEG3Kpe+KryARC+58c1jICgdZ/yfiiPJOB8osn
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmX0TLONUcGRzdgUZesuWNcR
|
||||
VmVrGQo2zRokW/ZuO9bN6+u15s9HJHBIPZ+EJMD/NKzYtx5z2nANTnl7b4WNC9nIszUUAF2u6QjLYwXkHkGcYqKqXEXhdsB3+KXxMAaa/+M=
|
||||
WHkOzVx7seuLmxs5Hu+l/vyGPI2ZUfF12Q0eaBVhpeoopSPGh26H6lFmBbaoJJwr
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmXcMVI23sf4OEQYLlAO6/ObeURw20jcXuWd22HNjPFXSA==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hklt1+ZWs9i7/wHYqYPvKals5jrnT1gCW27PaXDJFdo5AIGAqA4bE2k2HJSMU/RDpaw=
|
||||
WHkOzVx7seuLmxs5Hu+l/gzVZ0Va+DXFUK8nznHUhXhYsSTgQQX072ZHxHlXZn6E
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmX0TLONUcGRzdgUZesuWNcR
|
||||
VmVrGQo2zRokW/ZuO9bN6+u15s9HJHBIPZ+EJMD/NKzYtx5z2nANTnl7b4WNC9nI5t1B+HlkK75QMMuB3T2fEryfA0aaLxlmhGePr4B3TCc=
|
||||
wgR07xfoapmx6eEnFHXXYhJE4xrEpFjyOULkKEdGQ6xpKpQ97D+w2oBDgGLxKzYi
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmXcMVI23sf4OEQYLlAO6/ObeURw20jcXuWd22HNjPFXSA==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hklt1+ZWs9i7/wHYqYPvKals5jrnT1gCW27PaXDJFdo5AIGAqA4bE2k2HJSMU/RDpaw=
|
||||
hCTaGH97j27PDhFRKBPIWx5h0aqe91PCFXPRyuarZwHCnfY5zg3rAGF8JC1Rlqi7
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
OE58XJkoqje9oPDfqi73VlGkW2sntmceo8fDxcMP5lY1ekhmQtt77mccgEqJdX7o
|
||||
5p980mxWRpkxkeJsimzJ0c670/+1EUzG1KvIP4Osx0lqvbiasaqcKL7pqQoXRRlSmSgBIm75JI/P1rRgiosxmw==
|
||||
VmVrGQo2zRokW/ZuO9bN6zM/X2hHBCd+n2OGnnATmrTlgv7Pbn3qn1rTK72IH5Ea
|
||||
VmVrGQo2zRokW/ZuO9bN60kPGAe8BYlpKmCcCBaEvbVM0wtnd/Sxa3UXu5M3ODaXwT+F3h/lqsCt7RwtEnQ+Juic62CWc/I0sBOjdt4E/FU=
|
||||
lNbaHNaSPRfUV3Bq+5wk64nrImxso5dDuILvGI+MQwTmWuTQaQzUpeGGa/V25O8w
|
||||
lNbaHNaSPRfUV3Bq+5wk6wD9WRwpEUG8eRNjfnAkH7n/D7vEeaS6J3HXXnWCNV4afdFt7wSC63jvA3Dmj7kOFiXPh8V4ZxzOGAZNxEO/GSw=
|
||||
lNbaHNaSPRfUV3Bq+5wk6wD9WRwpEUG8eRNjfnAkH7mxlEizZI4FzeAXryBJu9K5U1bEK3vTRQwkjV/kSXPbLw==
|
||||
VmVrGQo2zRokW/ZuO9bN68rCCyFZ0GefvEM2z0oNIJFc4wqFGELFP6LESyfNOCfv5kKX8qHPVm9l+0s8kRJrRg==
|
||||
lNbaHNaSPRfUV3Bq+5wk6wD9WRwpEUG8eRNjfnAkH7n32akGeJETlKGDSs8LfYYC9O61WqHxRHNJwq7Sjf9EemFAkIFEWr7tHIeJwQnQvCo=
|
||||
lNbaHNaSPRfUV3Bq+5wk6wD9WRwpEUG8eRNjfnAkH7n/F8iZ64HMLmMMgGltzdd5Mybak4VoNhIJ9JWGMsNufQ==
|
||||
VmVrGQo2zRokW/ZuO9bN68rCCyFZ0GefvEM2z0oNIJFpouw5KukS9rQdg/yOLtUfQIhjL4gMIuurr0xfp6USoQ==
|
||||
lNbaHNaSPRfUV3Bq+5wk6wD9WRwpEUG8eRNjfnAkH7ndT8Do9qwTTLaDEmGd5tQby5rX6DaA9VhhKXndgHL9JuvRDdXFPEMCn7QL0m3lUzs=
|
||||
VmVrGQo2zRokW/ZuO9bN608deJSvexKXO21NHnmMGHeIg/pr3nDhgNXYDiErXtGU
|
||||
lNbaHNaSPRfUV3Bq+5wk6xOlK22tFRCz/MBWHqTO5bcxlrGueZZq4wrMs8Z1lnfjDuzShbwQZHdqLJ+DV3ERdQ==
|
||||
VmVrGQo2zRokW/ZuO9bN62ec9pTpN5Cg+2rTnrzF44sbSkSgWYcimLMO39fwdTM8QQ9HapIm3253ANyva+ZKow==
|
||||
l2FJPs4YkAmmok1ulDRuSA==
|
||||
lNbaHNaSPRfUV3Bq+5wk67RG2evr7TLF3SKM8U8p2AA=
|
||||
VmVrGQo2zRokW/ZuO9bN6+GpeDJLU0SmT7L+/5sE5xIlwrT8TwQpkYYGHjbVkNftN1CKdBCjUzympMQ9RT/FEg==
|
||||
VmVrGQo2zRokW/ZuO9bN60neO6DA37E8cryoS6/9NzyxLC2oEdN7DcJRwQhdCjJH
|
||||
VmVrGQo2zRokW/ZuO9bN68oOr6KTHQoLVUXKZT/zSoBoqKYJ9J0V8LlHuynr1gG3
|
||||
VmVrGQo2zRokW/ZuO9bN6yJjT4k1EBcR3P33HPsJKcS2iJiueG/E56TTg8JuY5PMBrWa6U4B5U8rW1KDAZ2JSficZo3wFKS2XvW6ui8Tv2Y=
|
||||
VmVrGQo2zRokW/ZuO9bN6/DCJtLswi79iRP2VS1Cl7m3kLpB5lzqL2Me52OhtZ1zUFOJHRYhWSvYLeuSZixvqmuGQwZgeXJcumVSIEgd/00=
|
||||
VmVrGQo2zRokW/ZuO9bN6xRgv05zRD9dGM5M32jg6eA41WZXP7dtRrdMXjEoH3lvGk8OfKeqpDa0bqO9TtO5SbDD1FpNmhqJhoAYwQK56Qs=
|
||||
VmVrGQo2zRokW/ZuO9bN619j4sjPeFT5nbRqDaMF1SytlAuchmjuOqjKzKLlRlpKp0wX5I7ca4hs64AaenatopykN6zoa1vKVmy5GNym1kk=
|
||||
VmVrGQo2zRokW/ZuO9bN68Ys5qSHlhgxubR3riCCkMH07t3rA9i/RBuH8FqAjmcn82Cl0Yv2F59R3Y2ngEly5Bn5i06KWEOErKyGGIaEm5s=
|
||||
VmVrGQo2zRokW/ZuO9bN61dj0GoH2G1Dp6ZIVlQ2vt0=
|
||||
VmVrGQo2zRokW/ZuO9bN64Mo+xDfj7h1iI635dygp4XcwMixUpSGp93xEK87JQBN
|
||||
VmVrGQo2zRokW/ZuO9bN6yJjT4k1EBcR3P33HPsJKcRSOVZETH4NsaP+09MQKNzjBQ68t3nxeo4G6JqqxhrjboknRazz5h4TuwgKRRmKioM=
|
||||
VmVrGQo2zRokW/ZuO9bN61dj0GoH2G1Dp6ZIVlQ2vt0=
|
||||
YH231WTDnzQG3bFilBiqIg==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
OE58XJkoqje9oPDfqi73VnAo3wfSgmMs+Dj8jbP7qWFcxm5vY3PPNCW7jzGH1g0O
|
||||
eV/v00/xYHddkCxXY1E1CutyiNhsUp5dQKzgD5wic7IgXr6vXqh+W6d4JHYxTx7KWitSUvhADyOfRWeCoy8QOA==
|
||||
Dlyx6ZDFdkn72YIxkC3bo1MEi9hlWmv1Zzc0sVxBv1A=
|
||||
VmVrGQo2zRokW/ZuO9bN6zM/X2hHBCd+n2OGnnATmrTlgv7Pbn3qn1rTK72IH5Ea
|
||||
VmVrGQo2zRokW/ZuO9bN64IIz+/BGgp+g6IZceFmjbE=
|
||||
VmVrGQo2zRokW/ZuO9bN64N/ZpXjHM9K9N0f3E2rn5WmGCGuCqdlsHbQ2dtHALi514chJeA1Hx2w6TnYXI1BkHbq2OIhHdxnU+azwjwrhDl2N6HE5nK+JyS7Sogxob13fbD21rB84V/svtOsrrU1++ayKZo53F/FxktbspEFfFGeAkkO+6B3q7B5P3cOtlN9
|
||||
VmVrGQo2zRokW/ZuO9bN66+yo8koaMFaeR72YfcN0MA=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
PWKGbNEPxxxpGpe8THO245iFXovVReeQ+N8g1T/vWbG7nH535jnCqkS519sVTR6d
|
||||
VmVrGQo2zRokW/ZuO9bN6zupz0i5vSNSVG9TGAJDyeoLDnDUXJHlYRiV20eRKyAX7xIMzgD8k3m4OcgwCDXDKzd9OsJEnb+M92CH7qeRZ0rXTaTN2IFoZniVzx0rvmSkMgg0Am0BzBuKc2Oy4b+Fwz22Rz9N82eyhvd8XOJC5uz4LBqftuz0hWqSTaSElBKoG3MPG7CNEYazXn7ounswqMclIOlDexzhfuPj/JPJkMXV9/kKnrcBcKBfppT05VExwJcuZ3qAf0UMyLGABEPcBYMQ+R9r/5jle4KezOy9UQns1yuOUpszLU/F0HSuvqLHoTleWG+8yf0L4bezFqV+OnoLU3fsTnAAvz4eBfP5CpHNwhaX0L8GQhbbhSCir00QDirnaca7yfuKjeHl9v4mJ+L80X7e9b6rV3BwLAxEclLhmkJjIsXn2ELLz6LA4q1p4l/V0/X4ui7HcDSp8fXfidL8c7vRgYqyWhzzbR2fE3UHBxaDFnpSWp0+ZuXHvCMScaIyJgZnYb+DTCjFMFU6lb4b9VNKQb9QbnC9ujuFU+JAw6rjiLPeHDb8gjkeBiQ9ynw5AYK0ZKL8d0Egv5xzVyq9+JxlM2dkfo11gyetKX4=
|
||||
VmVrGQo2zRokW/ZuO9bN6707T5hcoTPt8muDk6mBkfIb2fVyGf9Ofl629l94fe8y7TbM2fJP1K6AAnHO78QGE4QIfFGZ0iAOEsBOZhdfiig=
|
||||
VmVrGQo2zRokW/ZuO9bN6zM/X2hHBCd+n2OGnnATmrSuY4P/AlnqUWfNJ3Nv+yymeIVnB1recLomFaZp8gbNfQ==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
W+5RMzryWgfLCHr0OO+ErInNFnurUcbPlrIppCTTbAXA12wyKUkFjBea/Qb61VZ3c05s9epd9IsaBOqriuZPqMonOEUobnVmGGPlR7/5sVE=
|
||||
VmVrGQo2zRokW/ZuO9bN6zM/X2hHBCd+n2OGnnATmrTlgv7Pbn3qn1rTK72IH5Ea
|
||||
VmVrGQo2zRokW/ZuO9bN64IIz+/BGgp+g6IZceFmjbE=
|
||||
VmVrGQo2zRokW/ZuO9bN60cD4yDgVtlJBXBhnVmR4KRv3Cr6w0tsMAgfEOMZqertu+3og0F/QbIVS5TWho6wQ7g1mzy1fG1ZJjmIEe5S5/XwGDw0UuD1NCUzL9LbH/Ai
|
||||
VmVrGQo2zRokW/ZuO9bN66+yo8koaMFaeR72YfcN0MA=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
lOh2GtzHjjMM8E9J40AuOWo7iSH0P5z8Y9QjLJCJBGgafK4AuE7/cXHaYaFctwNo
|
||||
VmVrGQo2zRokW/ZuO9bN68M/5U7Jf9mVZjM7SR3NTECPgWjfF+U65HeMorIolhvD4HPEv93D1akoDkrkvPrOY9QS2DPJBdmooxB2TGPQNT0=
|
||||
VmVrGQo2zRokW/ZuO9bN64jhM4qvFQxrXhREkkL4evAvbPabM3xnVTII4I8povi4f3Pd2gWnwleD2BdzN0izmg==
|
||||
UbJuac0dxLiN+5ocS3w2vb7nzZrB/7qqG45ll0i5qjk=
|
||||
VmVrGQo2zRokW/ZuO9bN6zM/X2hHBCd+n2OGnnATmrTlgv7Pbn3qn1rTK72IH5Ea
|
||||
VmVrGQo2zRokW/ZuO9bN6z2QIHM+MwWG+DHtm57W1+SfMGavOQXjtK5E+Pd/RbfJnnyRuS5HM/BDbhDuGwNAThMAfBz6ti7yWZ76KqpxFpk=
|
||||
lOh2GtzHjjMM8E9J40AuOWo7iSH0P5z8Y9QjLJCJBGgafK4AuE7/cXHaYaFctwNo
|
||||
VmVrGQo2zRokW/ZuO9bN68M/5U7Jf9mVZjM7SR3NTECEaiFjmR/qWPRUlpmZbiW5VyN/W5PhHp8jokr2q+UyLUeUAIJ6zu+f1a6ekzajeN3jJrbDfSbX1Y+ZZXd3Q0JE
|
||||
VmVrGQo2zRokW/ZuO9bN68AJK8ucG0UjIlJ8vTejx4/UjlGzME7k234YwzM/EMl+2fL+nZx4XxqxEr363b5fjg==
|
||||
VmVrGQo2zRokW/ZuO9bN67wENRoFfl+EER/m7L/ET4GRAT4HyRemKVvrVKbyjVfM
|
||||
VmVrGQo2zRokW/ZuO9bN62Gbiu8sHPTspuRWoP5/2uyG+jNo2Z12jeXvFZbcfbfDFcbvNH4DvbGdfzF2nAV12A==
|
||||
UbJuac0dxLiN+5ocS3w2vb7nzZrB/7qqG45ll0i5qjk=
|
||||
VmVrGQo2zRokW/ZuO9bN6zM/X2hHBCd+n2OGnnATmrTlgv7Pbn3qn1rTK72IH5Ea
|
||||
VmVrGQo2zRokW/ZuO9bN6z2QIHM+MwWG+DHtm57W1+SfMGavOQXjtK5E+Pd/RbfJnnyRuS5HM/BDbhDuGwNAThMAfBz6ti7yWZ76KqpxFpk=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
uRzTWU2MnopGqqEdWeT6ZeDusW2quXQd3pL0k0Xg8wY=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
hCTaGH97j27PDhFRKBPIW4EZFPkfMH002JrNm9PLnXuwc9yq5Lyo6aOmZ30BZnoK
|
||||
2+RceSNjD2iq0sRzepMysYKB2p+0quZ3k/r81UP7jdA=
|
||||
0tTy9hW41S4+Kusr1EouU1D1oliZ7e6CIIanBdYINco=
|
||||
QSlGrRvW/rNBDeF7we6iBWKk2BA8QQKFrP2zSqI9P7ki0jFsOC40u8XHDVJCMmICcxej7Emo/6XIHyFNtg2eKufmZGJET5cF7chd87WOItU=
|
||||
VmVrGQo2zRokW/ZuO9bN64GHxlyw4JoKjlRq0kI99uVlNgUvBBu0glcGT+bS1WfEDCMuy8Daf9HtiO9MNlppARClW0pxHS+4u0haP8galI0=
|
||||
IhuisKim47k91RVt8z8qtM11IfmUg3Vzb1vU4L+nUSEXI43SqtfmWpr/I8AYFS79jp/blpkCZsPn/8gvY1O0DDcOOIqpPruCuHCHNHbX95w=
|
||||
96orka/uERLyRst14azQwnND1LaAMeJ6hPF2g6RNEz6MJouh6jubSHLlzeu4ZDhMi4c88PYp0hrZSfjI5JTCeSwrNjymmREnDUPzBiIcTHg=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
uC+DXmi0z9guz6E2K34tbxYHTBFHe6AQnlyDTD6Hc/rV77vRQxTn+MRGJaaqppIF
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
kOT28QQt2GDU8VknV6OBKCQUts5PU1sJ6OhmjdEHWvV7DuMTPnU4QUe9GhokxYr/
|
||||
qEXluMqy4s3YaMlhK+yN2PBqpgcwSiqQwLqIpKZKB54=
|
||||
HNr5/wGY+7coHgowTe94LmyrzabZ+F1uba2S8ZHow+auSBEdEXNeDwaLFHcP6wVoY1XpyD3B5G5cVIWyIhMziGO8FVB1Vl4mxAxFXsSIfZ4=
|
||||
mqjkDRz7NSn5aKPgUezVq11iXRHQrp2tT15ujt/F0bYTQCYjcppgnuJEuiMNwNgr
|
||||
NhnIR3Ilo4H2su9/cTNo/DyCETVXfy75d7o8helWnBsvvixqWmCON4WSy97dJwy2
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
TZ7deu05xHGE9hF3JFWmFKNL8L7HO7Uej/uyjh+xMus=
|
||||
YciZwvvDXocThCkMB+g25MvaKVnS5K98mkE7NC2a/WQ4mA3Ht59gE6D6i32RtvWR
|
||||
qAbVEM8+SQkJ03a0z2JhDtNtV08C1I/YV/6wz4lDUuejaC1OXdVMCt4PD51qEytS
|
||||
vQwaisdUFOt9b0SJYuH/nrHigrTUtycF35lf58xGUQo=
|
||||
VmVrGQo2zRokW/ZuO9bN698k4+GGpSbXcov4Fqu/oAw0FvcgRKi/DMw/D9yaLkasmWznSNTKwz4/hi3mzIakiA==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HklcPuLfk0fyZt9CAMcgeEUFsN3OsL0zJLY8NmDJQSQhDA==
|
||||
M0ZySqkmhuHCw6olbCKv9zQJzSQJo4Zslq06bXS41SQ=
|
||||
VmVrGQo2zRokW/ZuO9bN69PvoA3R0Po8RscBiX748GvjYuB6m9pC5D+fF3ib+VKf
|
||||
+plE/1bhdo64kO07cLlUX7e7q+kMaq7bcRu2iq9qqBQ=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
j/AwtlZD2qc0Bfi4crT5PVuymX2J11M8SjzJoWxpQSM=
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
rqA8uevZ84obkmE4+PiALqIGE496RRgzEOnxBnCJi5KM0A/RxMfdl5D+mQS+eMty
|
||||
hCTaGH97j27PDhFRKBPIW/dJaxrfoD6RixVo3Rf5Yz3CGP+VwV5No6W32fmew1fv
|
||||
qEXluMqy4s3YaMlhK+yN2FagSHb43j5sbjmAKOncUT9h+EXTNgwO3qaX8l+Kgen0
|
||||
/Apef+rUhQ+sRd878DPgvuQmATc00QFbteWJRrJXqqc=
|
||||
+7P0MlEc1eFk6hnR1wxxsLeMOEssU3yb0jKp/217OlU=
|
||||
hC9Wqf+oYT8RvKOl1V/o2ht+Kp2nrdRz7LH4nKSmxsw=
|
||||
qMRWIbfylJbi8JdtlTKCc5qLCzoG+56ejKCriefYCzg=
|
||||
VmVrGQo2zRokW/ZuO9bN66WOTbqs3JJ9oARgY2YlMq0=
|
||||
VmVrGQo2zRokW/ZuO9bN617WCoPIsnyqpe8hS61d314=
|
||||
sQfTf8f6jxyRSx9SNPNEtQ==
|
||||
qMRWIbfylJbi8JdtlTKCc1faDhfd8MAGeioU59baa8k=
|
||||
VmVrGQo2zRokW/ZuO9bN66WOTbqs3JJ9oARgY2YlMq0=
|
||||
VmVrGQo2zRokW/ZuO9bN617WCoPIsnyqpe8hS61d314=
|
||||
YH231WTDnzQG3bFilBiqIg==
|
||||
661hZf7vhUQ+50okfwfTXw==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
NrBMtcyWGtR1hVD5pwJYfwziCIADCHuKVoMfBVeB7td+eZjbZWU5lEr9RqqI2vmp
|
||||
uNSTKhXsc886vN3euLSVYkMvdkNBDE83aF6HgmNzzfl+lr+dusojmKJFGktXhvrngS9Kwg2wwLx9IK9kj8NxAA==
|
||||
Dx/Tamsgq45f2G8qqPP8mCCoT8bqocyYm33wbOaP3Tg=
|
||||
JpR/5cELI47P6HxjnatoQ2/atXOIHNcG1sc28haUJFY4USrV8c8DFQmuaJj5pmjKoadTYNH/El5wiqoWDGDr6Q==
|
||||
lNbaHNaSPRfUV3Bq+5wk63n5uJEj3P2III85nJ0uhYOX7Jw57j5UcSlV5FUAGDx8f48V0h/MPMwLz9LF6kln8w==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
51UII3rZ87NZKsRBZ0eyLdVqoWpbfe8TmH2YJ9DWmQlS1xLSN4I2NnpSxLSgoi6ARf5O3cCN9gvq9c/fk2WhpQ==
|
||||
51UII3rZ87NZKsRBZ0eyLdMEmNp2vC2WieoOz8+5XT1h8AmvAqKPSJXYghFKotIHwSJazFvEKrbDFNimm+5wCA==
|
||||
TNgWuy5WhP0PGg7S3lA/vq/Pa4m0zdEJKukF/iQ8p7w=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
3nekdX1X45iQPZ9gGedeIRFpzvW0t6AmXo0Vs+Q3B7MtIFmd1ITSQq54rNj3Of0V
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
W/E3KX5TvlXFgPkaqGzgjqZHeKuJLKPP6l4qtgNz7IY4hJWE8FmjSzvjmmmb5VunZ4QzK5iqrn9HNqRecsPrrjLC7uAEfwtdQjEdDm40Dwo=
|
||||
iPZI+idezVAJw0Ib5lZU4dl17+hCGjC6tXjNver4UbLVz5ZhKILGgbDAaOsRj0c/
|
||||
GIeBciyw9rxD3VOfe1EU6vwglDMZ6MEBP18g88btvtydgx9BEGtIPKmLOI6QmFbkxdYO7/HvVy6vSz6J5utDXg/muXopzjQJUZywMhtpdPA=
|
||||
VmVrGQo2zRokW/ZuO9bN6xVGSYCDtM0pf92u8Yp9YqgrkVutZIWx3e8oFQ+V83/M
|
||||
555vbfqS9x/Bki5IPjqgDMk1rrU5PWcetLJxQqKiztI=
|
||||
YY5wEo94l9qfo5TPxQmUgiOUk9wZ4yEOytm43lMuFnP0mvaVswvUBe1Evg3XhOXV
|
||||
VmVrGQo2zRokW/ZuO9bN6xeLX5vqx959YU/gZDt0YvZIPNF3mPlWCXYJIVjVWyc/N7aPs92P0AWzUUvFuNKpd1rTZ0TR2jK/sb0o+La8V7w=
|
||||
VmVrGQo2zRokW/ZuO9bN67dFbrzCL8hImD2yMrdv4Vg=
|
||||
iPZI+idezVAJw0Ib5lZU4dl17+hCGjC6tXjNver4UbLVz5ZhKILGgbDAaOsRj0c/
|
||||
cHKRqjHJIG5yrQxjLveUB+BsKw4vJCwsahPFceqybLFw1oHD0QEOO5T2HuKqoFvf5JKkTScorvUimpe/w1iw3/20b2DhJrTx5Z/eZ8G1Pd8A+/nIh5G8dKiIOMDYEwkXv2bX/3bHTYJSjBrGPPQ2T1tEB8qyc93ELHuc8u/HjQX54E/ovWrEq5ukBa2/xfMqwB2Rn3KzuET5YnmuBYAyK2tysxpciP8LIikFg5VJLeZ0Hh9/dIZ1ahA7xKqyIZH+BO4KLnEoXtwZviiL88jehOElk1E2Xq7Ym8ZGcXfqBfk=
|
||||
9HH0xFa0JPpRaw85JsXnfXwg8i96ZpFEflcqyM3HGgSPSZ2dtq3IxwdeQSueeE4yRiNtorfxbpEMEQJLb1pr9A==
|
||||
555vbfqS9x/Bki5IPjqgDMk1rrU5PWcetLJxQqKiztI=
|
||||
YY5wEo94l9qfo5TPxQmUgiOUk9wZ4yEOytm43lMuFnP0mvaVswvUBe1Evg3XhOXV
|
||||
VmVrGQo2zRokW/ZuO9bN6xeLX5vqx959YU/gZDt0YvZIPNF3mPlWCXYJIVjVWyc/N7aPs92P0AWzUUvFuNKpd1rTZ0TR2jK/sb0o+La8V7w=
|
||||
VmVrGQo2zRokW/ZuO9bN67dFbrzCL8hImD2yMrdv4Vg=
|
||||
PAoN3u73Z3nXo35rPzNO33JGqzHB3DHCHZe0q2yDue7WFNUAgfdpyjJARPhEvbbL
|
||||
guSZID0bFQuDFoWO2uxAJoOpitq6s6c9ladjgxAHqGE=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
Z02eW0OyMdUTGgS/rY5UtxvNt0bONzQv0Ne5fwFyOPvckIt7Mxia2dqwynmp7umh
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
3mFSQTn132ru23T3/05U2VtbqO/J7l6+ra/ix/dBlb4tFyl4q2VRrR7kEYMUqY32jfvvBlqKgjBPSVLN+fFOQE6uwzVJbbAN5c5vub7z7MA=
|
||||
iPZI+idezVAJw0Ib5lZU4dl17+hCGjC6tXjNver4UbLVz5ZhKILGgbDAaOsRj0c/
|
||||
GIeBciyw9rxD3VOfe1EU6vwglDMZ6MEBP18g88btvtydgx9BEGtIPKmLOI6QmFbkxdYO7/HvVy6vSz6J5utDXg/muXopzjQJUZywMhtpdPA=
|
||||
VmVrGQo2zRokW/ZuO9bN6xVGSYCDtM0pf92u8Yp9YqgrkVutZIWx3e8oFQ+V83/M
|
||||
555vbfqS9x/Bki5IPjqgDMk1rrU5PWcetLJxQqKiztI=
|
||||
YY5wEo94l9qfo5TPxQmUgiOUk9wZ4yEOytm43lMuFnP0mvaVswvUBe1Evg3XhOXV
|
||||
VmVrGQo2zRokW/ZuO9bN6/+//o1VxepUuVN4dtwtzUt1O4qqUXiJ+PucnHjF/NzPsClK+zrktiTn+Ec+l1k8pohfVzCbgFrhTHJ0VGrqs4Y=
|
||||
VmVrGQo2zRokW/ZuO9bN67dFbrzCL8hImD2yMrdv4Vg=
|
||||
iPZI+idezVAJw0Ib5lZU4dl17+hCGjC6tXjNver4UbLVz5ZhKILGgbDAaOsRj0c/
|
||||
cHKRqjHJIG5yrQxjLveUB9ExfFoUGJtN5RuV80lRdDSmDk68awlmo7TMrBJtA4GHSQ9ZM94NKEG1NkhDJownhQ2r+B6ZIf0BzeTxSESFjTE=
|
||||
VmVrGQo2zRokW/ZuO9bN6xVGSYCDtM0pf92u8Yp9YqgrkVutZIWx3e8oFQ+V83/M
|
||||
555vbfqS9x/Bki5IPjqgDMk1rrU5PWcetLJxQqKiztI=
|
||||
YY5wEo94l9qfo5TPxQmUgiOUk9wZ4yEOytm43lMuFnP0mvaVswvUBe1Evg3XhOXV
|
||||
VmVrGQo2zRokW/ZuO9bN6/+//o1VxepUuVN4dtwtzUt1O4qqUXiJ+PucnHjF/NzPsClK+zrktiTn+Ec+l1k8pohfVzCbgFrhTHJ0VGrqs4Y=
|
||||
VmVrGQo2zRokW/ZuO9bN67dFbrzCL8hImD2yMrdv4Vg=
|
||||
PAoN3u73Z3nXo35rPzNO33JGqzHB3DHCHZe0q2yDue7WFNUAgfdpyjJARPhEvbbL
|
||||
guSZID0bFQuDFoWO2uxAJoOpitq6s6c9ladjgxAHqGE=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
NuiaTGqwOgT56I/A6JuW+OYXU3qy8sRWssvgEhRPgEg=
|
||||
sXXQWFPsb9cQdoRNLvTIV8rn2NRc5Be1ATIx2zUeuZqsOYDCo+7iBPhL/G74PPQT
|
||||
c0jePRxtTVZYop75Q5JCFggVGiy5K37SY6O292Ia4MPkJnXEVXE/4VzqWDalKAbQ
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWghjKa4Bx/9hwfBJOgnWLq5ZzPLUX/xqPUerYk2PoPsymFnJ5By9OX6QOc1ugur9I=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
GtEk0s5RgbBW28KN6lhHJPglIAC2uEFNpbOm1inM5bU=
|
||||
b4OJVZe8QyIpjuTpKXDL9A==
|
||||
84Vymj90Wzn5yYuvz1pUuANPeEDUN+p9ZnLSm6zv1bU=
|
||||
VmVrGQo2zRokW/ZuO9bN670H5P+s0tiwdJfbGZCx661rd6moQu3BvusznuCG0tD/
|
||||
84Vymj90Wzn5yYuvz1pUuFE+OEJSVzvJho5ZjQiIPBe4Jo8zq8jO8peaF2StFqJO
|
||||
VmVrGQo2zRokW/ZuO9bN670H5P+s0tiwdJfbGZCx663i8WbYWNuKhaXf+ufb67XdedTrYd6XbXJ4R6divvitmA==
|
||||
mfT8DrNbUmxQ2BnZ1bZFTLh9MEuZKOpmAfF70OnZ9TU=
|
||||
s6ChnXH5zaR4nss2Jj7ULBibRmB/kmin0eYU9S2eTfU=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
xvhr5kRQI+GM++iQkYI5iZR7ekEg1I0ti6W1CX4my1o=
|
||||
i03pkbdctj+nAGBFpRXJf4F1uccpkrAJ6vfCX+MrMLo=
|
||||
ZBEun/friv7tm8hfXQraKbzUFK6ic1paL3nAvarxZME1vwjFDPMgwxS15zNwFDB7
|
||||
1V2v8QerKOmubvSxgB4eTBXpUZR6PqydO8mMhIOfyKFGthL4I2hlbLeW2mVUWO0YoHQS7Cw1T4h9CJtczURt+w==
|
||||
VmVrGQo2zRokW/ZuO9bN6zM/X2hHBCd+n2OGnnATmrSuY4P/AlnqUWfNJ3Nv+yym8gDrRRn88+E97SwP9crSGg==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HkljVbRSmRphUPMLwP2qafpDf0RBDjAildUzjjnayI8DL7HlvMSlZFKOqgTdesXR7sc=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
W+5RMzryWgfLCHr0OO+ErKxDL7PCXIjhB4TInB8eVS9O5hZl9zfsNzlK9ihwJvwAWqnaaomc3arDNjrzacptHg==
|
||||
VmVrGQo2zRokW/ZuO9bN6w7q5JOrUTgpjW8N+SP2Atc7he+WeQiHTFqNuIlGY0i4THU1qwL26q1GrHcLZME4I/17G4fCcBY2RQ1y+CHrq3Q=
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpEMPvuOg4yWJa5Si36Ytvw5qEGRH2b9ICWRSmYmVtGvQ=
|
||||
VmVrGQo2zRokW/ZuO9bN60RwCdNuq+t1770A64ug2G/c85wRX5QkmJMqMmYnxhBYkD7eiGF9ZH8bGFOtAVcsnQ==
|
||||
VmVrGQo2zRokW/ZuO9bN6y1I47Lsjes5Xkzm/KZ2HUj6vOCoGShzUiscvkZRGEAK7uATIRxawNjeYl+9wQBySA==
|
||||
VmVrGQo2zRokW/ZuO9bN68viVmfoF0CTwLptyJBHtwoSZr9tnNwdtzzzsyNXbUiH4ZjqOIUbdd3rJE7TWaxfypVJqZu/Aj/SGb5km46+4nA=
|
||||
hy0P42EdUgeeptYosmZKRIqHHtOztyzrdCi1Ki/o8rei5TptjILoB9DzYg4dhtD8
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
3t+PWTTS6PQiwtwlmlTRxrj1Qed+wRQV5P7UkrnHcTJ09C2yMsencaTpdTOmxNS9
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
W3A5Dt+8AxWSKsTYeXZoLzA4p6eOOqHFU6wo6i6M1wMfoECZ+LC1zy95fZWoQ/4A
|
||||
VmVrGQo2zRokW/ZuO9bN6y/sHulJCdzqGiPnuEJh09GPOIF9J+niHBhGtw8fD45+pm0DBOHDbSGRphcx4joVf4s3jxWlrdo/+Xom1OuxaXU=
|
||||
VmVrGQo2zRokW/ZuO9bN693VxLLTwZ5oiZ5WvX/IvvnPb+1eXq+YPA/fVCnI376l
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmX0TLONUcGRzdgUZesuWNcR
|
||||
VmVrGQo2zRokW/ZuO9bN69ju9su8sxzPM3AaGjlemMgcJAO2F+YRyjnWgbx5kZm3DDgmoVN2NnxtI1J/EBiaN3wzhoLg5uOydx3vmy3nBp0RYsKdXaZ0938zc7X1H9j+
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
qEXluMqy4s3YaMlhK+yN2MTRTE+r7oIVVgr5FZa6wktdkLfItiTuEdAda4Prd/uu
|
||||
NrBMtcyWGtR1hVD5pwJYfwziCIADCHuKVoMfBVeB7tfQcYQo9g3WMZE+QdDqr5d9
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
wgR07xfoapmx6eEnFHXXYhJE4xrEpFjyOULkKEdGQ6xpKpQ97D+w2oBDgGLxKzYi
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmX0TLONUcGRzdgUZesuWNcR
|
||||
VmVrGQo2zRokW/ZuO9bN6ytmrKShFDNF/sBD9TyNb4M=
|
||||
VmVrGQo2zRokW/ZuO9bN69ZEePYalO2NtKh63r2pCPdTwSWq+E1d5Vwp+OG0GW3QWB453G+Ivr5bi/FDqKsXgs+adjjgioHoNdPlikgjRC0=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
hCTaGH97j27PDhFRKBPIWx5h0aqe91PCFXPRyuarZwHCnfY5zg3rAGF8JC1Rlqi7
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
OE58XJkoqje9oPDfqi73VlGkW2sntmceo8fDxcMP5lY1ekhmQtt77mccgEqJdX7o
|
||||
bjpI32qzKze0nfrRYYQXmxQCptR8qXtM3eo8u7Hcpi52MCDBviv4HsElaaoUM2T8SccwLoZulXlCQSP1tUW0zQ==
|
||||
f6i+lsi35nURDz6EJdx9zHkEwXP+oTAogJyWuMcbY+bCC4q6cHvMzOZJC/zSZqSlBoxWJ31FyRCKzYVEIwqIIGphFDgbiCs3jOWEnfTVYvpfqohCFOIPs7aAQ/e7qizKq2O1OuN6sW3wWSCv1R60FQ==
|
||||
lNbaHNaSPRfUV3Bq+5wk64nrImxso5dDuILvGI+MQwTmWuTQaQzUpeGGa/V25O8w
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
PWKGbNEPxxxpGpe8THO24yNGDxaAdaWP6Ho84adPD4xRdueQCK5aifGjt4a5kMSr
|
||||
VmVrGQo2zRokW/ZuO9bN67Y8lER9Kabik7S1mV8J7BhJJn4LWRADsH3OSK3w2mDm
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
1D18KWr2hdVsBcdZx1OaPRKa04PZd6Lh4pE5HE5I+6w=
|
||||
VmVrGQo2zRokW/ZuO9bN67Y8lER9Kabik7S1mV8J7BjTWa3H547K7NAn0dgBK9APa9PKBQvJpaRJnxbK6GlinQ==
|
||||
VmVrGQo2zRokW/ZuO9bN6/Q2k38eGwybF6UxQWGmZ078Ummo0l7USrgIMp2GbYxOX/mhLPY1elsTwCazaEKdmQ==
|
||||
VmVrGQo2zRokW/ZuO9bN67Y8lER9Kabik7S1mV8J7Bj2jdAwm8k60quASDa57AGB+88A1mMb59gDR7BrxstZVQ==
|
||||
VmVrGQo2zRokW/ZuO9bN6/Q2k38eGwybF6UxQWGmZ05NTezu3MlCHaWwWIcPk44PcMKo9jE/vk9iLOai9+rrxA==
|
||||
VmVrGQo2zRokW/ZuO9bN67Y8lER9Kabik7S1mV8J7Bipb2FXNrO3nmjKp7FS8IV2D1PFSWGe34foTBexG5IW8NvIEINGi9MDK+xkxh/JWYQ=
|
||||
VmVrGQo2zRokW/ZuO9bN67Y8lER9Kabik7S1mV8J7BiPv3Kfo9CJTrr9+UH2pEnYBMXobVjY6m+4Nub6BAneGA==
|
||||
VmVrGQo2zRokW/ZuO9bN6/Q2k38eGwybF6UxQWGmZ07a+MiM4TasrtElO3rR88djBDttzYexwnhRBI9yaixsug==
|
||||
VmVrGQo2zRokW/ZuO9bN67Y8lER9Kabik7S1mV8J7BiBPPnFp2y3W2sI/ics+tip6wIqnrMeHchezJBWwG4BnXlrvThfCLQ//csXUmX785Y=
|
||||
VmVrGQo2zRokW/ZuO9bN65IkmxrkVECa18yoyhjHuJ62aVQkcicwTpC0ikCyAi/t
|
||||
lNbaHNaSPRfUV3Bq+5wk6xOlK22tFRCz/MBWHqTO5bcv8iF8VlYARBwBFw2wdPus7zN51U2zCgV+IxIlEMlayQ==
|
||||
l2FJPs4YkAmmok1ulDRuSA==
|
||||
lNbaHNaSPRfUV3Bq+5wk67RG2evr7TLF3SKM8U8p2AA=
|
||||
VmVrGQo2zRokW/ZuO9bN6+GpeDJLU0SmT7L+/5sE5xIlwrT8TwQpkYYGHjbVkNftN1CKdBCjUzympMQ9RT/FEg==
|
||||
VmVrGQo2zRokW/ZuO9bN67oM2Yuk/fGj3koZ5Ii2OcjDkwr5hlr55yICOO4Y42+5
|
||||
VmVrGQo2zRokW/ZuO9bN67jx0a4m693Et0R92z2wvL71x/3S2aSF/NvGCgu6CHqf
|
||||
VmVrGQo2zRokW/ZuO9bN64Mo+xDfj7h1iI635dygp4XcwMixUpSGp93xEK87JQBN
|
||||
VmVrGQo2zRokW/ZuO9bN6wbwiW2kEQvsTvAnLBH2llxizFasN29ZbVRWydu2b7CB
|
||||
VmVrGQo2zRokW/ZuO9bN61gFm3fkb7F9QaTU95L/jPPifv6QNOCZefRXntGGdHLE
|
||||
VmVrGQo2zRokW/ZuO9bN654Enj8yhWFV20SJ83piZWE=
|
||||
YH231WTDnzQG3bFilBiqIg==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
1D18KWr2hdVsBcdZx1OaPRKa04PZd6Lh4pE5HE5I+6w=
|
||||
VmVrGQo2zRokW/ZuO9bN67Y8lER9Kabik7S1mV8J7BgQnyGGSctkQxn38k19EVX1
|
||||
VmVrGQo2zRokW/ZuO9bN6yJjT4k1EBcR3P33HPsJKcS2iJiueG/E56TTg8JuY5PMBrWa6U4B5U8rW1KDAZ2JSficZo3wFKS2XvW6ui8Tv2Y=
|
||||
VmVrGQo2zRokW/ZuO9bN6/DCJtLswi79iRP2VS1Cl7m3kLpB5lzqL2Me52OhtZ1zUFOJHRYhWSvYLeuSZixvqmuGQwZgeXJcumVSIEgd/00=
|
||||
VmVrGQo2zRokW/ZuO9bN6xRgv05zRD9dGM5M32jg6eA41WZXP7dtRrdMXjEoH3lvGk8OfKeqpDa0bqO9TtO5SbDD1FpNmhqJhoAYwQK56Qs=
|
||||
VmVrGQo2zRokW/ZuO9bN619j4sjPeFT5nbRqDaMF1SytlAuchmjuOqjKzKLlRlpKp0wX5I7ca4hs64AaenatopykN6zoa1vKVmy5GNym1kk=
|
||||
VmVrGQo2zRokW/ZuO9bN68Ys5qSHlhgxubR3riCCkMH07t3rA9i/RBuH8FqAjmcn82Cl0Yv2F59R3Y2ngEly5Bn5i06KWEOErKyGGIaEm5s=
|
||||
VmVrGQo2zRokW/ZuO9bN654Enj8yhWFV20SJ83piZWE=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
VmVrGQo2zRokW/ZuO9bN61MJdzJmpSSmQu1uh7zy38qILLEI2fsEffNYGvDUZieQ
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
hCTaGH97j27PDhFRKBPIW4EZFPkfMH002JrNm9PLnXuwc9yq5Lyo6aOmZ30BZnoK
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
2+RceSNjD2iq0sRzepMysYKB2p+0quZ3k/r81UP7jdA=
|
||||
0tTy9hW41S4+Kusr1EouU1D1oliZ7e6CIIanBdYINco=
|
||||
QSlGrRvW/rNBDeF7we6iBWKk2BA8QQKFrP2zSqI9P7kNT8zHpEzOqA9PqxnKhMkciutQQEuCUUTddAcDKQqmZtP+tM67XZ4sPVMO7+1M9AE=
|
||||
B46DYlFQtDlulKRQCnJ3QWpbjBDDHLSb3vyz7F+mTm17hwykciIqoQznuIX47KmXxdbWZDnI+CY124mc9V20Ag==
|
||||
IhuisKim47k91RVt8z8qtM11IfmUg3Vzb1vU4L+nUSEXI43SqtfmWpr/I8AYFS79jp/blpkCZsPn/8gvY1O0DDcOOIqpPruCuHCHNHbX95w=
|
||||
96orka/uERLyRst14azQwnND1LaAMeJ6hPF2g6RNEz5S9puu5cR7ebyYVgOteskCUo9CHPdWLgUk6a7nUg/Dd/W6vX2Ar2YxjHE1Ly/3O18=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
Z02eW0OyMdUTGgS/rY5Ut6VY+CyNgF9FPBp9CnQzrMw=
|
||||
Y8LE4fq4wJWePrU6pM0UJA/F7Cz7yGlo9qD3wRRTzkoqBjEYPeDTgDuU3vQKtZ/tslbdISWCHKSrP4sG9aOO6w==
|
||||
c0jePRxtTVZYop75Q5JCFggVGiy5K37SY6O292Ia4MPkJnXEVXE/4VzqWDalKAbQ
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmWghjKa4Bx/9hwfBJOgnWLq5ZzPLUX/xqPUerYk2PoPsymFnJ5By9OX6QOc1ugur9I=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
3t+PWTTS6PQiwtwlmlTRxrj1Qed+wRQV5P7UkrnHcTJ09C2yMsencaTpdTOmxNS9
|
||||
dh7w9F2NtRbFZXQAT43UNEb8EuN3AGhltXubCNFU3Ojzklfcg9iluJiEzQBZ1zSs
|
||||
YnAdY30Lg/9fjxdn+Sc57EuR2oeC8XoCVhpUHNm7E15HYPr7Brw6YP/tAPp/5VcUf3nQ01NwI7KLps+jszazNg==
|
||||
0bmFnPqs+8pv2SMKrUKBGjsjPAHPnQkQBpMrQ+IQDC0=
|
||||
vxZRPtvgnx9GXrXB4G/UM7qbPAq4XIfzYp2SJP08XdQ=
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmX0TLONUcGRzdgUZesuWNcR
|
||||
VmVrGQo2zRokW/ZuO9bN69ju9su8sxzPM3AaGjlemMgcJAO2F+YRyjnWgbx5kZm3DDgmoVN2NnxtI1J/EBiaNy+VxOc/ziUJR5VmuD66oPA=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
qEXluMqy4s3YaMlhK+yN2MTRTE+r7oIVVgr5FZa6wktdkLfItiTuEdAda4Prd/uu
|
||||
NrBMtcyWGtR1hVD5pwJYfwziCIADCHuKVoMfBVeB7tfQcYQo9g3WMZE+QdDqr5d9
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
hCTaGH97j27PDhFRKBPIWx5h0aqe91PCFXPRyuarZwHCnfY5zg3rAGF8JC1Rlqi7
|
||||
OE58XJkoqje9oPDfqi73VlGkW2sntmceo8fDxcMP5lZFXTmVGM0w7rfgyRt9m7p5
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmX0TLONUcGRzdgUZesuWNcR
|
||||
VmVrGQo2zRokW/ZuO9bN6ytmrKShFDNF/sBD9TyNb4M=
|
||||
VmVrGQo2zRokW/ZuO9bN6xf5/2Z1ozJYK3IX9gEGYhudX+JDHzXKmtCPQeY89xZsmJ01Lxhee8vjMmUoN+52YwE0e8xmkBrpg0JAK3o4nqk=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
uNSTKhXsc886vN3euLSVYrxsmQUHvKax1CVDvgx4wzZ3gluW+Zte0pfXA1MbL3uR
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
PAoN3u73Z3nXo35rPzNO3zk0x+iuneUZogH87K0TFCnqFSMDSQMOfHfmH+Dp486Z
|
||||
0Ey56M3Rq4Z87mMZBzWCke79du117mx9ftztVnc2s4Y=
|
||||
L0eUthVnpkGsmKFAX6d+uDz5ZRBys3d0SQKK5GYgSmX0TLONUcGRzdgUZesuWNcR
|
||||
VmVrGQo2zRokW/ZuO9bN65W8leO0ggdGbf/NAsQSTaUN/Vkvk2lUEMRqevWdlxhOpMxrHYmMEeuI0pVjPC/pCg==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
yRP7zwdiezjpAYBvh+/YJI6Z+aRD7eDMoKmdruOi/nVKZCf2Kpe/EZS92lyLhXJw
|
||||
S2kU4JuQ9t0SS+VL3mxwjQg60glazkUAeC35PDN/3gi5UC0kW/K3ybMcAsPxO6OqOno9DTOG+s+nbhv8quAd37RmBLZ4bWlOVxQB8830aY4=
|
||||
VmVrGQo2zRokW/ZuO9bN65NDZuHjHfhtjN50qQqxWwhM0zCWzMVFfYkfFQXIapw7
|
||||
cbvASHjpysrsjdY5RctXmCMIFkDgRpOy80SbmGIoVLlLES/Dr35tD/epk2Bblup2
|
||||
L0eUthVnpkGsmKFAX6d+uBWSR38I0ooDiDs76zI3rHk=
|
||||
sux3pEp0y4Ts+BK0jWjiPLanIepY87Lf1wBsVBlLv3Y=
|
||||
32pdC9DD05OE2l0oXazDFCL2UDwltzVzeKrLP+917rjhOkK+v03ZP0I3EFsTN5wdo+TxLXpWwlAA41kIMUBwEdM0Vq0pElFIAqVtyfgDNJA=
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HkmXtpUVC1kW3J/dl/fkcePcu0IQQNXefRtOGv4ZZf1LvA==
|
||||
51UII3rZ87NZKsRBZ0eyLdVqoWpbfe8TmH2YJ9DWmQku+7dd9C856BngwQGeroz0DGruUOn3OzHXaFAtZ68Zrg==
|
||||
2+RceSNjD2iq0sRzepMysYKB2p+0quZ3k/r81UP7jdA=
|
||||
0tTy9hW41S4+Kusr1EouU1D1oliZ7e6CIIanBdYINco=
|
||||
noar+Dkj/qVB9vIuoUrH4blDBjPJbLLUMktkKwDg+T3Yyejah7ZSTiS84g0cIqgmOkfT24OfZWuI2mlySo1e1rXnhvoN3FmpA8o1x0iDGmc=
|
||||
VmVrGQo2zRokW/ZuO9bN69LIx3FNqnEXJvGI/6KUnVMBiTvkfBHbYk7rYKIjJcSR
|
||||
IhuisKim47k91RVt8z8qtM11IfmUg3Vzb1vU4L+nUSEXI43SqtfmWpr/I8AYFS79jp/blpkCZsPn/8gvY1O0DDcOOIqpPruCuHCHNHbX95w=
|
||||
96orka/uERLyRst14azQwnND1LaAMeJ6hPF2g6RNEz56MuFgEZqjEPy+8YvS/67ALmhmn5yIn6bMKi20dsYGHJ1JVuo73YMpR5XMGsGJGqk=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
uk/kSuwtaQ0nOezb8+RxpwUfyvjVM2PQ7j0JF7CVDyk=
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
aSrbsYE1ObLqGiiKHJGlHAcTCUngVNP7oPzhbRYTc1LguHKuTuQ19V/e58YOe1oL
|
||||
vHflHGke4H/vMW5vfCuuUZkBDGb44m2BYpshIz0Qtv4=
|
||||
OqT2rZxw+7PFqTI/7vaTYrDpIYlrorSNlnfPF+E80GZUtRwUSNGvcVbzeIQULPWq
|
||||
0lIZluLVeEFaTSZzolqlcLJwgguKY+dpcMGzanWqRYgG35UDUa7t06U8mwJTvAIl
|
||||
3HT+U1PE2cuTIdd28XDjLu4fELXwXCAvh+GRuQu5k6XIkFRLUhSeTkeWNqYg2bjX
|
||||
661hZf7vhUQ+50okfwfTXw==
|
||||
b4OJVZe8QyIpjuTpKXDL9A==
|
||||
RVzqPMqMgbuirEDXLgMelnPNG1gGdxjJLuVE8z6iQD5rYH0fwwATzprmhCYaEIEPHwpSMPEmiRRpa14KTdZ8lrL8H7fceiNvq4Xjg2gDlfA=
|
||||
mfT8DrNbUmxQ2BnZ1bZFTLh9MEuZKOpmAfF70OnZ9TU=
|
||||
RVzqPMqMgbuirEDXLgMelvzcH7BOolbnVIZqDiEiOec=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
Nyrr9YR1SCpCbvnfcYsQdEJ5IErIE8c0cMFm3mG2Yjebpw+Cl1FLBTAZQhLw09+DifJASUH9cY0pNUe9YSHgQA==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
Nyrr9YR1SCpCbvnfcYsQdJPhbI7hgpVa6+b+pvEaZAgc7bOsYPSHQlBFlGcB4Tjs5+5PriIt/rre1MNSsEjYGg==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
OE58XJkoqje9oPDfqi73Vka6WpT+CnxlVbAMrhaI5qQllYRS+Ky/Og2S0buO4RDjLaK7aaOhQSDmoE/kbmyEX0/AwGUJ48Lz1OaTrJghsS4=
|
||||
5p980mxWRpkxkeJsimzJ0eLt36Y+8CY+qHE8h6zZGmRXfw3tRaIncwdy2TcKbyGM
|
||||
VmVrGQo2zRokW/ZuO9bN67r9iEkxlbKOXEHHo/GR3+6OlLSZTy+2hsIBqqaZN8zs2PwpJyZ9IxXb0V3MIkxqLA==
|
||||
sobCGpmMf4/g7+HpPqBjC6hatZ6rUY3AAzqC73FJ58Q=
|
||||
VmVrGQo2zRokW/ZuO9bN6zsF8RkKy/6qv8OwuTSXg5vBuddKZS4lQenCng06/MCtanygpIb/Fmy0N+f5854jLg==
|
||||
lNbaHNaSPRfUV3Bq+5wk6xregBSeqbTc3HP8b1a2L+LfsHzyC7B1QGy1YoM9wHb8
|
||||
lNbaHNaSPRfUV3Bq+5wk6x5c5FnmEkX4AMPnck73YtTfeAm/ehjF+VgLA6BASKYSOc0tdbZri4rI9oHgjk7DZ0y1lndySUX1LpsU+X4a+b4=
|
||||
VmVrGQo2zRokW/ZuO9bN67l3wsMkIC1w41ITKeGhwtPvYwn0s/yxa7F2gxzMl8sIe2o/YPydyBKaXszPWarTog==
|
||||
lNbaHNaSPRfUV3Bq+5wk6+MyMCLzOgYEev4vKFrT6VYswGLpldqwZFYz/mwTTxzi4N9Vog0YC88LxDAzU619Jg==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
lNbaHNaSPRfUV3Bq+5wk6wP9GMD3ujIvzKZlvdwah6xFKn9/N3/0c1ldYqNuhjD+DafNHKr4KQgIaI1li2boiw==
|
||||
l2FJPs4YkAmmok1ulDRuSA==
|
||||
5p980mxWRpkxkeJsimzJ0XxWkYe8AuDbH/wDJ9SMovWF4UqbpzK2e1xLE+WLbzyS
|
||||
VmVrGQo2zRokW/ZuO9bN64uAF5aDWHLl0Mr6n5QG1UKr9GBXEgStOxmayztSy2KXpV2gQCOW03tZ9GFDtTtwKg==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
Qqw7/vtLTsLpPtVEcrxvqt1KzLgzU6i+9fBX4qg6S06lwIrFxe7lO1lW93JTA8QUi+I+L9IoSN9HvHBBfimTuQ==
|
||||
EJoGFvRvZ0ApgLDRyrlLhA==
|
||||
IhuisKim47k91RVt8z8qtLgFgQIxiwgnyWmJTJdd9h3En7oUD2HpPW3NDaRGcUSt6YoEknERcJPsfCBaPB4nCCEZAIRq1lDGynvHBaj+qnU=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
ZmnvqmOaBVPZA11BQvdr3w==
|
||||
+qdJgONcot1WKgm0a/QSWRfjD/63UhGjDDaD83ombAk=
|
||||
5sfgsihl9XVF/Mhh9qm1EXf+NRhU/cymXz1HbW9F6P0AEvJeZudYCA+pkRXe4Uye
|
||||
hCTaGH97j27PDhFRKBPIW/dJaxrfoD6RixVo3Rf5Yz3CGP+VwV5No6W32fmew1fv
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
uNSTKhXsc886vN3euLSVYkem6h/gL5IHP/XBe2yL1bo=
|
||||
RDZxR0eU/0YxwhYtovyGeQdnHApsoYjk/m7WJoznATFPayg1JrxurOnrWeCKYGPxeVB/Pw06PW3t/mffVKTZXA==
|
||||
5p980mxWRpkxkeJsimzJ0cW/XPkGPu2EZf497lktZsIIxlZhnrw6R5u2fNEYrFnx
|
||||
VmVrGQo2zRokW/ZuO9bN60btJ3KSmT5EZdF/tXV227NT+FaJI6ICAUv8U1dGM7fI
|
||||
VmVrGQo2zRokW/ZuO9bN665BzXWwO22NoRyeko8p9TvBNbaZ4mmPHkdSjtdhxjFs
|
||||
VmVrGQo2zRokW/ZuO9bN68iybrt8ScY6aQlDmfS7eSM=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
OE58XJkoqje9oPDfqi73Vls284DI6YzG6XdVqkLU4Lg=
|
||||
L0eUthVnpkGsmKFAX6d+uMq25m1vOsGY6uP5qR9ZDEk=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
Dx/Tamsgq45f2G8qqPP8mNKTgXHLg2Jqs99bb34tU2xwBPXgAea9fPTD7mOcju2nndDdcCRYG/Dk9k8gfM4mlQ==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
OE58XJkoqje9oPDfqi73Vka6WpT+CnxlVbAMrhaI5qTvWyB5POI819VyoubLgWwB5otU5A2wKU0FdlIfCfOYuwe8tZUX3UkX2C3v16xcahM=
|
||||
L0eUthVnpkGsmKFAX6d+uEiHn3ZMQfz1ZBQJd6m1KmU=
|
||||
aPdLEV6HY2SBr9CPW/3NlV6skNvI9JsIj9pOVhf2RvA=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
FNzrf0lVMea1y0IWwp4L8epdqcTQLISFJkRRoX88WUg=
|
||||
YsP/lfsk7bnmh2Eb9pKHkx7tWRnRvXwXah4j7+bCanMiqa4Sv8rxo4QlIJtxoVVB+SYW2kzxPd3PjQ9b/8SThg==
|
||||
Z8UsPk1Q7HtwjRd4g01ryw==
|
||||
mGGXRHZ5m7FaXP7i8r+TjKXApLbXwo2hRd9B7Q+Oh+YScyp7CR8x/JMkWUjHmH2e
|
||||
Z8UsPk1Q7HtwjRd4g01ryw==
|
||||
Djb8zu0gG2jt979SRwXXjOvVYuDaNNQCNmI1OvvoD70=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
qEXluMqy4s3YaMlhK+yN2MTRTE+r7oIVVgr5FZa6wktdkLfItiTuEdAda4Prd/uu
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
hCTaGH97j27PDhFRKBPIWx5h0aqe91PCFXPRyuarZwHCnfY5zg3rAGF8JC1Rlqi7
|
||||
PAoN3u73Z3nXo35rPzNO3zk0x+iuneUZogH87K0TFCnqFSMDSQMOfHfmH+Dp486Z
|
||||
0Ey56M3Rq4Z87mMZBzWCkcIFCFur1J8qdEROFpa5DTfPmhRCLNzFjK3BYhcI7wHL
|
||||
b4OJVZe8QyIpjuTpKXDL9A==
|
||||
wlLHv6kT3Q/RmtMBN4nDAUsRm/HZvlCR+HWwmmPd5BfKH0/mlXTbyd8F5IPAE/TQu6d4aGXkkjKrV3KQBzmzVA==
|
||||
VmVrGQo2zRokW/ZuO9bN68lFj6lfd3kckH/8VU5KCGqRWPiKTSyoPv5Bah2WfmYPVCp2VdHIolYjln+bUY8IfA==
|
||||
VmVrGQo2zRokW/ZuO9bN6wN0w1RlCvEbh31Ln2UXkZ4=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
VmVrGQo2zRokW/ZuO9bN64qGHGLHzR3bJ0XTpYCKgYgQpBdbM26ZAvopx/0wQyEoMC3CmrgnHMvfx+hntjfNUHY7L2qLZPXkr8UaUm3Cy0k=
|
||||
VmVrGQo2zRokW/ZuO9bN6xlpjbR96JcinCRcpOHpwZenlGkZdJSeRDRdYj+Uxd4Q
|
||||
VmVrGQo2zRokW/ZuO9bN63FDXhc/zgNdUygJevY6sdfklx6SK4YjsNl6mTDBAKgE8h7HBiUUTA9Bt0KMzmPRKQ==
|
||||
VmVrGQo2zRokW/ZuO9bN674gG529I8kaxTDpeI5FsT8dMvpo4da/IxkpsnqO1PV6
|
||||
VmVrGQo2zRokW/ZuO9bN67ldobmDDoizoaOC01WU6Lefy2U3Vi+qnHg+Yz87bA7Yx0kQAUrar1aLZvBPsQzYNQ==
|
||||
VmVrGQo2zRokW/ZuO9bN641bT1nOxoWTwSy5bjmJpALq5/7D5eyKkgIFXHllLBCM
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
VmVrGQo2zRokW/ZuO9bN6zr+/1wvjvcA1PfTZ75ETzhfDdosE8sRI6toDfDVa/B+GA3ZxX/sQ5x8rNHncB67PQ==
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
VmVrGQo2zRokW/ZuO9bN67bnnwCzLN0nCiOfYCjwGkzY3B74QLecUPd3/scZhk0IehNEkYTW5l8MuaPFKHqVdQ==
|
||||
VmVrGQo2zRokW/ZuO9bN68lvNCUThol9QOZsTvs3KfyGyJbrExzCQ6mfnSmO05oAUT0VDwsgBOA+xBAbY1o7AH+CI7nyhOXcP2xDCSHKZcc=
|
||||
VmVrGQo2zRokW/ZuO9bN6y1m/1hYuCtHRuLugwo8qhGp3RtxJPr/0R9/8numyyW4RR2GSU+QZ1wJB5832QK4WA==
|
||||
VmVrGQo2zRokW/ZuO9bN6zUY/ks5sODBNkit+XUmGYfULT1Hm3kjx3OllDbqxCp5
|
||||
VmVrGQo2zRokW/ZuO9bN60uVXYgkwzKRDFzxQBIq76qRjSWU3fpXZBItYruE986KEffW/VhhUdVZm89YsKusT5fg0PTP+/voESni1r2r/mo=
|
||||
VmVrGQo2zRokW/ZuO9bN6zTqNbvPfLl0muLinRFsIVJnX8w6F7OF6czp+acnqKok
|
||||
VmVrGQo2zRokW/ZuO9bN664k4tNeuaruJ/sFk8Bpdhd+Kuw7EwE3k6tuVPiwyQPh/dbbmXLoyDryQD+C7WG6IA==
|
||||
VmVrGQo2zRokW/ZuO9bN620zSkiHBXev6YTvy3qjpOw=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
VmVrGQo2zRokW/ZuO9bN68lFj6lfd3kckH/8VU5KCGpL8uDM5jESUEVKzanX7SIT34Qe4HuSzT9CzY9onFg14DakCsvU0GyUHbn02itcG7k=
|
||||
VmVrGQo2zRokW/ZuO9bN6yzC2K2s9gZH1JCopKV0Ar4x5AppikyVQmfuHMxIKL83UsUGiLw1dPHTpVO8OXszJyMOhx9I9L4ie7f5yGBz7F4=
|
||||
VmVrGQo2zRokW/ZuO9bN6yDqekvzHp5Ed5o8lYwu08gQvbBnlCFR6OzQBk0zuhcJ
|
||||
VmVrGQo2zRokW/ZuO9bN6+mC4aS+uqusFmsL8BytKn/hS7c7ij9TJiyQy60d4c0NqLXgocb8PZ3sNsFMa3Nip++r3rnQ90me5kM1X+GMQ30=
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpglmoyr/KfGS/F8kfb7XBOQmFuNPgF6sTpiQlwU0wFj4=
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpyz1Asb8tJdmNZVt1y9C5pjJdvLrwYyZILmakF/bC+zM=
|
||||
VmVrGQo2zRokW/ZuO9bN693SjNGuvN8cXdnK0A7Y+ycnGy0ZQfSO3nE81pPoyyp3U4SKGgGb3zIB5poznxhWT0VsGXdaYJ0qyM+igR1cz+8=
|
||||
VmVrGQo2zRokW/ZuO9bN6+6OSQjJyDHPNRB3fSq3EOcAoWNzFMgvgUAWiGAmZDd3
|
||||
VmVrGQo2zRokW/ZuO9bN62BvU+ACUylwdsM3AEh5vxG9ahubQdJ/24TjNy1jqCqN
|
||||
VmVrGQo2zRokW/ZuO9bN6zxA5tAr3l0brvCSLFOCVTe2rbsn8iecC4QUX6qqquupab5ALX5SWCmXowW86sbKKoKxmn3G+92voYN1oleYcRHhyMTKXW/xSk9Vbu3H4Ryh
|
||||
VmVrGQo2zRokW/ZuO9bN67FRjyUL790gahogpF4bk/0KuYf1lD1XRfqDBFgwVpiQu8K990tiW+jZiLy8UgeJYg==
|
||||
VmVrGQo2zRokW/ZuO9bN620zSkiHBXev6YTvy3qjpOw=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
VmVrGQo2zRokW/ZuO9bN68lFj6lfd3kckH/8VU5KCGpL8uDM5jESUEVKzanX7SITo87IQQenhDLL5E41UYEEt1zKN51FxDrrT3NlL/bThGh9fv4aJdoH/yPu/bkEggBJ
|
||||
VmVrGQo2zRokW/ZuO9bN66pSy2yezMgXP8gSS2GK+PpDegwDKFSH1dYfVl26gnZj1jhP7kPEVPumIlOzBJ+DIJ2PF+2le2jE5SDVCLl1NiE=
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehp5dTPBR/trYVhdp27jkIn6J6H5oHikRa60ngWLPNBVzo=
|
||||
VmVrGQo2zRokW/ZuO9bN61IUDnAmfgBQO6uHH1Yclt0ynNsjH12Q/lM4PiHYK8Yh
|
||||
VmVrGQo2zRokW/ZuO9bN60JKAP0f5b6Sb7s9Js4pTMpTnlWWsEzXQ+p858xVCqurEIhq7VC4BSJPHvWQ57VJoQ==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hknz/J5UNnSr5HoDQfOjMQiy6/uL7ISdH22fNdwzZ/8iWxubQxhh6seRqDUg0oS1XIAit7c7VNhMHdAx5zY4Vqy+
|
||||
VmVrGQo2zRokW/ZuO9bN6ylgXkDyP4zJff9d51ElvAIMq3E5W8e//ErL9duy8ksPrIEGzcQJJw7VFLvdP0ogWi8sDVJaJcJxoKhXOn6xIBk=
|
||||
VmVrGQo2zRokW/ZuO9bN6/Ykiia9pTHWG10nmQ2azo1nONlRLILx+L82bJzKIMHd
|
||||
VmVrGQo2zRokW/ZuO9bN6zn88KEm9OgxN0QITEeDgHR9RpFiPd0ZwiLF5lEABccP
|
||||
VmVrGQo2zRokW/ZuO9bN6/isbQJniBo16ObIGPZRjcFiPqV4uBr2OpohSuDyZjLt0XGVHG4wpO4VVc3reFGBB+/6OMzyTMioQa0/nD9ejqTVB3eW8hcBPdPA6Kl5IG1cw/LW+q0gxEzhV+EvhQTsYA==
|
||||
VmVrGQo2zRokW/ZuO9bN62dUIyY4EVuFnYchLLg1Q9bs+s6edwxQpeiikyW8nG2yNYj6TTFZTrmMt1EQS41HJA==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HknNX4uUDjKKQHFJozt8cgdhI80NVDlJ98fuWbEMsUykomMbyoRzTFmFF5uSKeJoOAw=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
VmVrGQo2zRokW/ZuO9bN67focE/OItqiH8RxmfzhIw3c9UUf6KvpDEhdOqh/QOWs/1EqaCMGyBSwFbIse4JBKjHHHkNKma+31mNrfboMY3c=
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpFeyaEx6TSSxDiBlioSN7WSfpsecKcmnjxXZb+dyTMEM=
|
||||
VmVrGQo2zRokW/ZuO9bN6yDqekvzHp5Ed5o8lYwu08gQvbBnlCFR6OzQBk0zuhcJ
|
||||
VmVrGQo2zRokW/ZuO9bN6+mC4aS+uqusFmsL8BytKn/hS7c7ij9TJiyQy60d4c0NqLXgocb8PZ3sNsFMa3Nip++r3rnQ90me5kM1X+GMQ30=
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpglmoyr/KfGS/F8kfb7XBOQmFuNPgF6sTpiQlwU0wFj4=
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6Hkl8sUPd5ZHgQChuaaRMaehpyz1Asb8tJdmNZVt1y9C5pjJdvLrwYyZILmakF/bC+zM=
|
||||
VmVrGQo2zRokW/ZuO9bN693SjNGuvN8cXdnK0A7Y+ycnGy0ZQfSO3nE81pPoyyp3U4SKGgGb3zIB5poznxhWT0VsGXdaYJ0qyM+igR1cz+8=
|
||||
VmVrGQo2zRokW/ZuO9bN6+6OSQjJyDHPNRB3fSq3EOcAoWNzFMgvgUAWiGAmZDd3
|
||||
VmVrGQo2zRokW/ZuO9bN62BvU+ACUylwdsM3AEh5vxG9ahubQdJ/24TjNy1jqCqN
|
||||
VmVrGQo2zRokW/ZuO9bN6zxA5tAr3l0brvCSLFOCVTeGK1EDQpaQ4W+HZzdN7+BB2ZUl65M4XyjU/xYSEFyczi5NDLlf8Rw3rPFXMprgLYPL6UBJd3EBOVlSZi16q0v8cVHtqJGKa0gzXjpjel/S2Q==
|
||||
VmVrGQo2zRokW/ZuO9bN67FRjyUL790gahogpF4bk/0KuYf1lD1XRfqDBFgwVpiQZsZqUVnw544DWr0gXit21Q==
|
||||
VmVrGQo2zRokW/ZuO9bN64ZTCtjiSIe1Vj/8GYr6HknzRBBxXsj0OoebX5mHuVG/bP0kyt0UFdIMy35sdT+Xlx9CbxX3haSizx9Fd1+tPwU=
|
||||
A50UO/kAI17YP7MCbTvBkFTjN5Ay5WDQtfGIvrhR2tvkyujMWxwi3omnSXsVaboD
|
||||
s6ChnXH5zaR4nss2Jj7ULBibRmB/kmin0eYU9S2eTfU=
|
||||
IhuisKim47k91RVt8z8qtM11IfmUg3Vzb1vU4L+nUSEXI43SqtfmWpr/I8AYFS79jp/blpkCZsPn/8gvY1O0DDcOOIqpPruCuHCHNHbX95w=
|
||||
lIrvZaQ6CfSmdKebjwiKcKdbPCIaBJUdHz+nu4YDNU8=
|
||||
1u+XjG/2+GSQRv6EzCaWRQ==
|
||||
a7rKHSoe96bTC1qOWHQhNXgPTFVeAmUicD8E9nHKDLE=
|
||||
6we+bQ+BNhpl74ICwbzDDxCOR7eR1lYIi6R1B7qE6VQq5fLF725RdYF6Y+savDkL
|
||||
dHP8w7bwYQXmb0DilW0aGoiXjYmTX2tV1zDoCXSG5x0=
|
||||
oPiee0X1lhqQ76kw9N2+8TRpQ8dHbXh5l9s3hEzztTi7WxTx3RYObFQX4hoEVzqA
|
||||
oPiee0X1lhqQ76kw9N2+8VJVl0MJWad+iXT4tHQ1qJM=
|
||||
S8MkKIBd1s9qx4qteuqTKYtNNok7S0W1D9yy/JgdcKA=
|
||||
UqaKSIk9RYYWXSK0cIFfXhsSTGfp/1ffoQCd4abr94o=
|
||||
39tsr9ptyNKBswzHAsYTwQNhpjS5ZgfHk3NXI3mGlC8=
|
||||
hC9Wqf+oYT8RvKOl1V/o2sfBwmNUWuaRvOIXJpHTuAM=
|
||||
661hZf7vhUQ+50okfwfTXw==
|
||||
oPiee0X1lhqQ76kw9N2+8SoJ8C9QFPZokIoCmoh0qvPxsretPquTnGN79JC/ZUu8
|
||||
CAhn8dRUItEbEErp4w+lXwA7HvkR+MU9AKdUt6vt65vn7GpKaNuQvNmOChuosmFK
|
||||
Reference in New Issue
Block a user