Spaces:
Paused
Paused
Upload 21 files
Browse files- app/main.py +64 -3
- app/sub_manager.py +2 -2
- data/config.yaml.raw +1 -0
- entrypoint.sh +23 -5
app/main.py
CHANGED
|
@@ -39,16 +39,39 @@ initialization_error = None
|
|
| 39 |
@app.before_request
|
| 40 |
def initialize_once():
|
| 41 |
"""应用首次请求前的初始化"""
|
| 42 |
-
global clash_manager, sub_manager, initialization_error
|
| 43 |
|
| 44 |
# 使用类变量确保只初始化一次
|
| 45 |
if not getattr(initialize_once, '_initialized', False):
|
| 46 |
logger.info("正在初始化应用 (首次请求)...")
|
| 47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
# 初始化订阅管理器
|
| 49 |
sub_manager = SubscriptionManager(
|
| 50 |
sub_url=SUB_URL,
|
| 51 |
-
config_path=
|
| 52 |
)
|
| 53 |
|
| 54 |
# 加载订阅并转换为Clash配置
|
|
@@ -64,7 +87,7 @@ def initialize_once():
|
|
| 64 |
|
| 65 |
# 初始化Clash管理器
|
| 66 |
clash_manager = ClashManager(
|
| 67 |
-
config_path=
|
| 68 |
clash_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "clash_core", "clash.meta-linux-amd64"),
|
| 69 |
api_port=CLASH_API_PORT,
|
| 70 |
proxy_port=CLASH_PROXY_PORT
|
|
@@ -452,6 +475,44 @@ def index():
|
|
| 452 |
</html>
|
| 453 |
"""
|
| 454 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 455 |
if __name__ == "__main__":
|
| 456 |
# 如果直接运行此文件,将初始化应用并启动Flask服务器
|
| 457 |
initialize_once()
|
|
|
|
| 39 |
@app.before_request
|
| 40 |
def initialize_once():
|
| 41 |
"""应用首次请求前的初始化"""
|
| 42 |
+
global clash_manager, sub_manager, initialization_error
|
| 43 |
|
| 44 |
# 使用类变量确保只初始化一次
|
| 45 |
if not getattr(initialize_once, '_initialized', False):
|
| 46 |
logger.info("正在初始化应用 (首次请求)...")
|
| 47 |
|
| 48 |
+
config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "config.yaml")
|
| 49 |
+
|
| 50 |
+
# 首先检查是否存在有效的本地配置文件
|
| 51 |
+
if os.path.exists(config_path) and os.path.getsize(config_path) > 0:
|
| 52 |
+
logger.info("检测到有效的本地配置文件,直接使用它启动Clash")
|
| 53 |
+
try:
|
| 54 |
+
# 初始化Clash管理器并使用本地配置文件
|
| 55 |
+
clash_manager = ClashManager(
|
| 56 |
+
config_path=config_path,
|
| 57 |
+
clash_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "clash_core", "clash.meta-linux-amd64"),
|
| 58 |
+
api_port=CLASH_API_PORT,
|
| 59 |
+
proxy_port=CLASH_PROXY_PORT
|
| 60 |
+
)
|
| 61 |
+
|
| 62 |
+
# 启动Clash Core
|
| 63 |
+
clash_manager.start_clash()
|
| 64 |
+
logger.info("成功使用本地配置文件启动Clash Core")
|
| 65 |
+
initialize_once._initialized = True
|
| 66 |
+
return
|
| 67 |
+
except Exception as e:
|
| 68 |
+
logger.warning(f"使用本地配置文件启动失败,将尝试从订阅加载: {str(e)}")
|
| 69 |
+
# 继续尝试从订阅加载
|
| 70 |
+
|
| 71 |
# 初始化订阅管理器
|
| 72 |
sub_manager = SubscriptionManager(
|
| 73 |
sub_url=SUB_URL,
|
| 74 |
+
config_path=config_path
|
| 75 |
)
|
| 76 |
|
| 77 |
# 加载订阅并转换为Clash配置
|
|
|
|
| 87 |
|
| 88 |
# 初始化Clash管理器
|
| 89 |
clash_manager = ClashManager(
|
| 90 |
+
config_path=config_path,
|
| 91 |
clash_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "clash_core", "clash.meta-linux-amd64"),
|
| 92 |
api_port=CLASH_API_PORT,
|
| 93 |
proxy_port=CLASH_PROXY_PORT
|
|
|
|
| 475 |
</html>
|
| 476 |
"""
|
| 477 |
|
| 478 |
+
@app.route("/api/use_local_config", methods=["POST"])
|
| 479 |
+
@authenticate
|
| 480 |
+
def use_local_config():
|
| 481 |
+
"""直接使用本地的config.yaml文件,跳过订阅转换"""
|
| 482 |
+
global clash_manager, sub_manager, initialization_error
|
| 483 |
+
|
| 484 |
+
try:
|
| 485 |
+
config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "config.yaml")
|
| 486 |
+
|
| 487 |
+
# 检查文件是否存在
|
| 488 |
+
if not os.path.exists(config_path):
|
| 489 |
+
return jsonify({"success": False, "error": "本地配置文件不存在"}), 404
|
| 490 |
+
|
| 491 |
+
# 停止当前的Clash服务(如果正在运行)
|
| 492 |
+
if clash_manager is not None:
|
| 493 |
+
clash_manager.stop_clash()
|
| 494 |
+
|
| 495 |
+
# 重新初始化Clash管理器并使用本地配置文件启动
|
| 496 |
+
clash_manager = ClashManager(
|
| 497 |
+
config_path=config_path,
|
| 498 |
+
clash_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "clash_core", "clash.meta-linux-amd64"),
|
| 499 |
+
api_port=CLASH_API_PORT,
|
| 500 |
+
proxy_port=CLASH_PROXY_PORT
|
| 501 |
+
)
|
| 502 |
+
|
| 503 |
+
# 启动Clash Core
|
| 504 |
+
clash_manager.start_clash()
|
| 505 |
+
initialization_error = None
|
| 506 |
+
|
| 507 |
+
logger.info("成功使用本地配置文件启动Clash Core")
|
| 508 |
+
return jsonify({"success": True, "message": "已使用本地配置文件启动服务"})
|
| 509 |
+
|
| 510 |
+
except Exception as e:
|
| 511 |
+
error_msg = f"使用本地配置文件失败: {str(e)}"
|
| 512 |
+
logger.error(error_msg)
|
| 513 |
+
initialization_error = error_msg
|
| 514 |
+
return jsonify({"success": False, "error": error_msg}), 500
|
| 515 |
+
|
| 516 |
if __name__ == "__main__":
|
| 517 |
# 如果直接运行此文件,将初始化应用并启动Flask服务器
|
| 518 |
initialize_once()
|
app/sub_manager.py
CHANGED
|
@@ -128,10 +128,10 @@ class SubscriptionManager:
|
|
| 128 |
|
| 129 |
cmd = [
|
| 130 |
self.subconverter_path,
|
| 131 |
-
"-f", # 添加强制转换文件标志,禁止服务器模式
|
| 132 |
"-i", input_file, # 输入文件
|
| 133 |
"-o", self.config_path, # 输出文件
|
| 134 |
-
"-t", "clash" # 目标格式
|
|
|
|
| 135 |
]
|
| 136 |
|
| 137 |
logger.info(f"执行命令: {' '.join(cmd)}")
|
|
|
|
| 128 |
|
| 129 |
cmd = [
|
| 130 |
self.subconverter_path,
|
|
|
|
| 131 |
"-i", input_file, # 输入文件
|
| 132 |
"-o", self.config_path, # 输出文件
|
| 133 |
+
"-t", "clash", # 目标格式
|
| 134 |
+
"--config", minimal_pref_path # 强制使用空白配置,避免默认行为
|
| 135 |
]
|
| 136 |
|
| 137 |
logger.info(f"执行命令: {' '.join(cmd)}")
|
data/config.yaml.raw
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
dmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuYXdzNDgueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUudHYuYXBwbGUuY29tJnBiaz02VC1rWUJmNjVFUmFFQWh4SXlITDFGQ2Z1MFFSNlAyWFFNdGN2VWd6U2pNJnNpZD03MGFkMTUwZCMlRTUlODklQTklRTQlQkQlOTklRTYlQjUlODElRTklODclOEYlRUYlQkMlOUE4OC4yNSUyMEdCDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5hd3M0OC55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXJlYWxpdHkmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWNocm9tZSZzbmk9YnV5bGl0ZS50di5hcHBsZS5jb20mcGJrPTZULWtZQmY2NUVSYUVBaHhJeUhMMUZDZnUwUVI2UDJYUU10Y3ZVZ3pTak0mc2lkPTcwYWQxNTBkIyVFOCVCNyU5RCVFNyVBNiVCQiVFNCVCOCU4QiVFNiVBQyVBMSVFOSU4NyU4RCVFNyVCRCVBRSVFNSU4OSVBOSVFNCVCRCU5OSVFRiVCQyU5QTYlMjAlRTUlQTQlQTkNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmF3czQ4Lnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1idXlsaXRlLnR2LmFwcGxlLmNvbSZwYms9NlQta1lCZjY1RVJhRUFoeEl5SEwxRkNmdTBRUjZQMlhRTXRjdlVnelNqTSZzaWQ9NzBhZDE1MGQjJUU1JUE1JTk3JUU5JUE0JTkwJUU1JTg4JUIwJUU2JTlDJTlGJUVGJUJDJTlBMjAyNS0xMC0xMA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuYXdzNDgueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUudHYuYXBwbGUuY29tJnBiaz02VC1rWUJmNjVFUmFFQWh4SXlITDFGQ2Z1MFFSNlAyWFFNdGN2VWd6U2pNJnNpZD03MGFkMTUwZCMlRjAlOUYlODclQjglRjAlOUYlODclQUNBV1MlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTEwMSUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRiVFNiU4RSVBOCVFOCU4RCU5MA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuYXdzNDkueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUudHYuYXBwbGUuY29tJnBiaz14T25ZMnlrTHJjRk1JaHA3R0JRdTFtU0g3eUlXLXlDYzFUaEpuVlZ0S0RjJnNpZD01YjY3NjJiZSMlRjAlOUYlODclQjglRjAlOUYlODclQUNBV1MlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTEwMiUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRiVFNiU4RSVBOCVFOCU4RCU5MA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuYXdzNTAueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPXR2LmFwcGxlLmNvbSZwYms9TzVXQzZ3YVdER1JfRWxPSG1ocUVRR1VXRHVmY0Z4VHV1N0JQaHdXMXNFNCZzaWQ9ZTFkZjJhMTUjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDQVdTJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExMDMlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYlRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmF3czU0Lnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1kb3dubG9hZC1wb3J0ZXIuaG95b3ZlcnNlLmNvbSZwYms9YXNMSlJFc3A5TDBKYlVSUVBJaEZ4YzZiWklncHVuRU9qT0plSHYzWWNFcyZzaWQ9YjBmYmUwZjAjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDQVdTJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExMDQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYlRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmF3czUxLnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1idXlsaXRlLnR2LmFwcGxlLmNvbSZwYms9Tjg2eXlXLUw5MXZPdEM5cWdKY1lBaG52YTlNNFdUM3ZjbFNuc1FvNEEyayZzaWQ9NzlmZDQ1MWUjJUYwJTlGJTg3JUFGJUYwJTlGJTg3JUI1QVdTJUU2JTk3JUE1JUU2JTlDJUFDJUU0JUI4JTlDJUU0JUJBJUFDMDElMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYlRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmF3czUyLnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT10di5hcHBsZS5jb20mcGJrPWdrZVVacHBWUXp1dGpHc1Jjc0dNVzhPclBIYm9KM3FSRnBJdmo4bGNVajQmc2lkPWMxNzQ2MThkIyVGMCU5RiU4NyVBRiVGMCU5RiU4NyVCNUFXUyVFNiU5NyVBNSVFNiU5QyVBQyVFNCVCOCU5QyVFNCVCQSVBQzAyJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5hd3M1NS55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXJlYWxpdHkmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWNocm9tZSZzbmk9ZG93bmxvYWQtcG9ydGVyLmhveW92ZXJzZS5jb20mcGJrPXpaSmcxM3JKTkh3NlpxMlRHQVRtOFVBblRtcUQ5N2k4cXpyWGNKRnlFbHMmc2lkPWQ0ZjJkMzc3IyVGMCU5RiU4NyVBRiVGMCU5RiU4NyVCNUFXUyVFNiU5NyVBNSVFNiU5QyVBQyVFNCVCOCU5QyVFNCVCQSVBQzAzJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGJUU2JThFJUE4JUU4JThEJTkwDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTkyLjkuMTMwLjEyMDozNTAwMC8/aW5zZWN1cmU9MSZzbmk9d3d3LmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTUlOUMlQTMlRTQlQkQlOTUlRTUlQTElOUUwLjElRTUlODAlOEQtJUU1JThGJUFGJUU5JTk1JUJGJUU2JTlDJTlGJUU0JUI4JThCJUU4JUJEJUJEDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdANjQuMTgxLjIzOC4zMjozNTAwMC8/aW5zZWN1cmU9MSZzbmk9dHYuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTAxLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5Mi45LjE1Ny45ODozNTAwMC8/aW5zZWN1cmU9MSZzbmk9dHYuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTAyLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDY0LjE4MS4yNDMuMTc3OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT10di5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDMtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTQ2LjIzNS4yMDEuMTg5OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT10di5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDQtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTQ2LjIzNS4yMTIuMTkyOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT10di5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDUtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTM4LjIuMjI5LjE2MjozNTAwMC8/aW5zZWN1cmU9MSZzbmk9dHYuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTA2LWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE2Ny4yMzQuMjA4LjI0MDozNTAwMC8/aW5zZWN1cmU9MSZzbmk9dHYuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTA3LWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5Mi4xOC4xMzMuMTkwOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT10di5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDgtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTY3LjIzNC4yMTAuMTIyOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTA5LWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0Ni4yMzUuMjAzLjM0OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTEwLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5My4xMjMuNzYuODQ6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE2JUYwJTlGJTg3JUFBJUU4JUJGJUFBJUU2JThCJTlDMiUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxOTMuMTIyLjk4LjEwNzozNTAwMC8/aW5zZWN1cmU9MSZzbmk9YXBpLnB1c2guYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRC0xJUU1JTgwJThEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0Ni41Ni4xNjQuMzY6MzUwMDAvP2luc2VjdXJlPTEmc25pPWFwaS5wdXNoLmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjAlRjAlOUYlODclQjclRTklOUYlQTklRTUlOUIlQkQzLTElRTUlODAlOEQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTkzLjEyMy4yNDYuMjQ0OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUIwJUYwJTlGJTg3JUI3JUU5JTlGJUE5JUU1JTlCJUJENC0xJUU1JTgwJThEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5My4xMjMuMjQ5LjA6MzUwMDAvP2luc2VjdXJlPTEmc25pPWFwaS5wdXNoLmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjAlRjAlOUYlODclQjclRTklOUYlQTklRTUlOUIlQkQ1LTElRTUlODAlOEQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTkzLjEyMy4yNDAuMTE5OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRDYtMiVFNSU4MCU4RCUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxOTMuMTIzLjI1MC4yMTk6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUIwJUYwJTlGJTg3JUI3JUU5JTlGJUE5JUU1JTlCJUJENy0yJUU1JTgwJThEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5My4xMjMuMjMxLjE0ODozNTAwMC8/aW5zZWN1cmU9MSZzbmk9d3d3LmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjAlRjAlOUYlODclQjclRTklOUYlQTklRTUlOUIlQkQ4LTIlRTUlODAlOEQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTUyLjY5LjIyNS4xOTY6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUIwJUYwJTlGJTg3JUI3JUU5JTlGJUE5JUU1JTlCJUJEOS0yJUU1JTgwJThEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0Ni41Ni4xMDAuMTAzOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRDEwLTIlRTUlODAlOEQlMjAlN0MlMjAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOTMlRTclQkElQkYtaHkyDQpoeXN0ZXJpYTI6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTMyLjE0NS4yMzkuMjUwOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE5JUYwJTlGJTg3JUFBJUU1JUJFJUI3JUU1JTlCJUJEJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0MS4xNDcuMTkuNTg6MzUwMDAvP2luc2VjdXJlPTEmc25pPWFwaS5wdXNoLmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQTklRjAlOUYlODclQUElRTUlQkUlQjclRTUlOUIlQkQyJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE1Mi42Ny45NS4xODM6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE4JUYwJTlGJTg3JUFEJUU3JTkxJTlFJUU1JUEzJUFCJUU4JThCJThGJUU5JUJCJThFJUU0JUI4JTk2JTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE1Mi42OS4xODAuMjI2OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE2JUYwJTlGJTg3JUJBJUU2JUJFJUIzJUU1JUE0JUE3JUU1JTg4JUE5JUU0JUJBJTlBJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE1OC4xNzkuMTguMjUxOjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE2JUYwJTlGJTg3JUJBJUU2JUJFJUIzJUU1JUE0JUE3JUU1JTg4JUE5JUU0JUJBJTlBMiUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNTkuMTMuMzUuMjQ1OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT1hcGkucHVzaC5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUE2JUYwJTlGJTg3JUJBJUU2JUJFJUIzJUU1JUE0JUE3JUU1JTg4JUE5JUU0JUJBJTlBMyUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNTIuNjkuMjIwLjIxMjozNTAwMC8/aW5zZWN1cmU9MSZzbmk9YXBpLnB1c2guYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCOCVGMCU5RiU4NyVBQyVFNiU5NiVCMCVFNSU4QSVBMCVFNSU5RCVBMSUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNTguMTc4LjIzNi4xMDQ6MzUwMDAvP2luc2VjdXJlPTEmc25pPWFwaS5wdXNoLmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjglRjAlOUYlODclQUMlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTEyJTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0MC4yNDUuMzUuNzg6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExMyUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDAuMjQ1LjM3LjE3MDozNTAwMC8/aW5zZWN1cmU9MSZzbmk9d3d3LmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjglRjAlOUYlODclQUMlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTE0JTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE0MC4yNDUuNDYuMTc6MzUwMDAvP2luc2VjdXJlPTEmc25pPXd3dy5hcHBsZS5jb20mbXBvcnQ9MzUwMDAtMzkwMDAjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExNSUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCmh5c3RlcmlhMjovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDAuMjQ1LjM2LjIwNzozNTAwMC8/aW5zZWN1cmU9MSZzbmk9d3d3LmFwcGxlLmNvbSZtcG9ydD0zNTAwMC0zOTAwMCMlRjAlOUYlODclQjglRjAlOUYlODclQUMlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTE2JTIwJTdDJTIwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JTkzJUU3JUJBJUJGLWh5Mg0KaHlzdGVyaWEyOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEyOS4xNDYuOTUuMTY1OjM1MDAwLz9pbnNlY3VyZT0xJnNuaT13d3cuYXBwbGUuY29tJm1wb3J0PTM1MDAwLTM5MDAwIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU4NyVBNCVFNSU4NyVCMCVFNSU5RiU4RSUyMCU3QyUyMCVFOSVBQiU5OCVFOSU4MCU5RiVFNCVCOCU5MyVFNyVCQSVCRi1oeTINCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czIuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzMiZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzMi5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwMi0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czMuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzMyZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzMy5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwMy0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czQuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzNCZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzNC5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwNC0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czUuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzNSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzNS5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwNS0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czYuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzNiZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzNi5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwNi0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDEwNC4xOC4yMC4yMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czcuZ2xvYmFscy1kb3dubG9hZC5jb20mcGF0aD0lMkZwcSUyRnVzNyZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPXVzNy5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTklOTglQkYlRTQlQkIlODAlRTYlOUMlQUMwNy0wLjElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5My4xMjMuMjI2LjU6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXJlYWxpdHkmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWVkZ2Umc25pPWJ1eWxpdGUubXVzaWMuYXBwbGUuY29tJnBiaz04blQ1eDVPTS05N2liV01mdTV5MG1ydldkbXV3VmVnX2ZfUkU1WWNsX3l3JnNpZD1jNTgzNWIxZiMlRjAlOUYlODclQjAlRjAlOUYlODclQjclRTklOUYlQTklRTUlOUIlQkQlRTklQTYlOTYlRTUlQjAlOTQwMQ0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTkzLjEyMi4xMTQuMTU6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXJlYWxpdHkmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWlvcyZzbmk9YnV5bGl0ZS5tdXNpYy5hcHBsZS5jb20mcGJrPWF6WUZ6VHRUNGUyVXdwbUJ6WklDbGU4cUpPTGpOOGtjNWJxOGk4YVZTajAmc2lkPWMyODljNjVkIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRCVFOSVBNiU5NiVFNSVCMCU5NDAyDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxMzEuMTg2LjIyLjIzODo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1idXlsaXRlLm11c2ljLmFwcGxlLmNvbSZwYms9UC0tQXNldVY3c0d2Z3k3WUo4aVg1OEd4ZVA1LU0yb3EwTXEyWXhQQVhScyZzaWQ9ZjAwZDQwZjM4NDgyIyVGMCU5RiU4NyVCMCVGMCU5RiU4NyVCNyVFOSU5RiVBOSVFNSU5QiVCRCVFOSVBNiU5NiVFNSVCMCU5NDAzDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5oa3QxLnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1pb3Mmc25pPWRvd25sb2FkLmdsb2JhbHMtZG93bmxvYWQuY29tIyVGMCU5RiU4NyVBRCVGMCU5RiU4NyVCMCVFOSVBNiU5OSVFNiVCOCVBRkhLVDElMjAlN0MlMjAlRTQlQjglODklRTclQkQlOTElRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmhrdDIueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWlvcyZzbmk9ZG93bmxvYWQuZ2xvYmFscy1kb3dubG9hZC5jb20jJUYwJTlGJTg3JUFEJUYwJTlGJTg3JUIwJUU5JUE2JTk5JUU2JUI4JUFGSEtUMiUyMCU3QyUyMCVFNCVCOCU4OSVFNyVCRCU5MSVFNiU4RSVBOCVFOCU4RCU5MA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAcHEuaGt0My55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9aW9zJnNuaT1kb3dubG9hZC5nbG9iYWxzLWRvd25sb2FkLmNvbSMlRjAlOUYlODclQUQlRjAlOUYlODclQjAlRTklQTYlOTklRTYlQjglQUZIS1QzJTIwJTdDJTIwJUU0JUI4JTg5JUU3JUJEJTkxJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5oa3Q0Lnl5ZGpjLnRvcDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1pb3Mmc25pPWRvd25sb2FkLmdsb2JhbHMtZG93bmxvYWQuY29tIyVGMCU5RiU4NyVBRCVGMCU5RiU4NyVCMCVFOSVBNiU5OSVFNiVCOCVBRkhLVDQlMjAlN0MlMjAlRTQlQjglODklRTclQkQlOTElRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmhpbmV0LnR3MS55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1kb3dubG9hZC55eWRqYy50b3AjJUYwJTlGJTg3JUI5JUYwJTlGJTg3JUJDJUU1JThGJUIwJUU2JUI5JUJFJTIwJTdDJTIwJUU5JTgxJUJGJUU1JTg1JThEJUU2JTk5JTlBJUU5JUFCJTk4JUU1JUIzJUIwJUU0JUJEJUJGJUU3JTk0JUE4DQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0BwcS5oaW5ldC50dzIueXlkamMudG9wOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWNocm9tZSZzbmk9ZG93bmxvYWQueXlkamMudG9wIyVGMCU5RiU4NyVCOSVGMCU5RiU4NyVCQyVFNSU4RiVCMCVFNiVCOSVCRTIlMjAlN0MlMjAlRTklODElQkYlRTUlODUlOEQlRTYlOTklOUElRTklQUIlOTglRTUlQjMlQjAlRTQlQkQlQkYlRTclOTQlQTgNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QHBxLmhpbmV0LnR3My55eWRqYy50b3A6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1kb3dubG9hZC55eWRqYy50b3AjJUYwJTlGJTg3JUI5JUYwJTlGJTg3JUJDJUU1JThGJUIwJUU2JUI5JUJFMyUyMCU3QyUyMCVFOSU4MSVCRiVFNSU4NSU4RCVFNiU5OSU5QSVFOSVBQiU5OCVFNSVCMyVCMCVFNCVCRCVCRiVFNyU5NCVBOA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTcyLjY3Ljc5LjEzNjo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD1qcDEueG4tLWdocXU1Zm0yN2I2N3cuY29tJnBhdGg9JTJGcHElMkZqcDEmaGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZnA9Y2hyb21lJnNuaT0jJUYwJTlGJTg3JUFGJUYwJTlGJTg3JUI1JUU2JTk3JUE1JUU2JTlDJUFDJUU5JUFCJTk4JUU5JTgwJTlGMDEtMC4xJUU1JTgwJThEDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AyMy4yMjcuMzguMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD1pbjFfcHFfdXNlcl92aXBfYXBpLnBxdmlwLnRvcCZwYXRoPSUyRnBxJTJGaW4xJmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZwPWNocm9tZSZzbmk9IyVGMCU5RiU4NyVBRSVGMCU5RiU4NyVCMyVFNSU4RCVCMCVFNSVCQSVBNjAxLTAuMDElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDIzLjIyNy4zOC4wOjQ0Mz90eXBlPXdzJmVuY3J5cHRpb249bm9uZSZob3N0PWluMl9wcV91c2VyX3ZpcF9hcGkucHF2aXAudG9wJnBhdGg9JTJGcHElMkZpbjImaGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZnA9Y2hyb21lJnNuaT0jJUYwJTlGJTg3JUFFJUYwJTlGJTg3JUIzJUU1JThEJUIwJUU1JUJBJUE2MDItMC4wMSVFNSU4MCU4RA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMjMuMjI3LjM4LjA6NDQzP3R5cGU9d3MmZW5jcnlwdGlvbj1ub25lJmhvc3Q9aW4zX3BxX3VzZXJfdmlwX2FwaS5wcXZpcC50b3AmcGF0aD0lMkZwcSUyRmluMyZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPSMlRjAlOUYlODclQUUlRjAlOUYlODclQjMlRTUlOEQlQjAlRTUlQkElQTYwMy0wLjAxJUU1JTgwJThEDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AyMy4yMjcuMzguMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD1pbjRfcHFfdXNlcl92aXBfYXBpLnBxdmlwLnRvcCZwYXRoPSUyRnBxJTJGaW40JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZwPWNocm9tZSZzbmk9IyVGMCU5RiU4NyVBRSVGMCU5RiU4NyVCMyVFNSU4RCVCMCVFNSVCQSVBNjA0LTAuMDElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDIzLjIyNy4zOC4wOjQ0Mz90eXBlPXdzJmVuY3J5cHRpb249bm9uZSZob3N0PXVzMV9wcV91c2VyX3ZpcF9hcGkucHF2aXAudG9wJnBhdGg9JTJGcHElMkZ1czEmaGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZnA9Y2hyb21lJnNuaT0jJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU2JUI0JTlCJUU2JTlEJTg5JUU3JTlGJUI2MDEtMC4wMSVFNSU4MCU4RA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMjMuMjI3LjM4LjA6NDQzP3R5cGU9d3MmZW5jcnlwdGlvbj1ub25lJmhvc3Q9dXMyX3BxX3VzZXJfdmlwX2FwaS5wcXZpcC50b3AmcGF0aD0lMkZwcSUyRnVzMiZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1jaHJvbWUmc25pPSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTYlQjQlOUIlRTYlOUQlODklRTclOUYlQjYwMi0wLjAxJUU1JTgwJThEDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AyMy4yMjcuMzguMDo0NDM/dHlwZT13cyZlbmNyeXB0aW9uPW5vbmUmaG9zdD11czNfcHFfdXNlcl92aXBfYXBpLnBxdmlwLnRvcCZwYXRoPSUyRnBxJTJGdXMzJmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZwPWNocm9tZSZzbmk9IyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNiVCNCU5QiVFNiU5RCU4OSVFNyU5RiVCNjAzLTAuMDElRTUlODAlOEQNCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDIzLjIyNy4zOC4wOjQ0Mz90eXBlPXdzJmVuY3J5cHRpb249bm9uZSZob3N0PXVzNF9wcV91c2VyX3ZpcF9hcGkucHF2aXAudG9wJnBhdGg9JTJGcHElMkZ1czQmaGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZnA9Y2hyb21lJnNuaT0jJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU2JUI0JTlCJUU2JTlEJTg5JUU3JTlGJUI2MDQtMC4wMSVFNSU4MCU4RA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMjMuMjI3LjM4LjA6NDQzP3R5cGU9d3MmZW5jcnlwdGlvbj1ub25lJmhvc3Q9dXM1X3BxX3VzZXJfdmlwX2FwaS5wcXZpcC50b3AmcGF0aD0lMkZwcSUyRnVzNSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmcD1pb3Mmc25pPSMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTYlQjQlOUIlRTYlOUQlODklRTclOUYlQjYwNS0wLjAxJUU1JTgwJThEDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDYuMjM1LjIwOC4xNjI6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9aW9zJnNuaT1kY3BxanMueXlkamMudG9wIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTAxJTIwJTdDJTIwJUU0JUI4JTg5JUU3JUJEJTkxJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0A2NC4xODEuMjI1LjE1MDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9dGxzJmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1pb3Mmc25pPWRjcHFqcy55eWRqYy50b3AjJUYwJTlGJTg3JUJBJUYwJTlGJTg3JUI4JUU3JUJFJThFJUU1JTlCJUJEJUU1JTlDJUEzJUU0JUJEJTk1JUU1JUExJTlFMDIlMjAlN0MlMjAlRTQlQjglODklRTclQkQlOTElRTYlOEUlQTglRTglOEQlOTANCnZsZXNzOi8vYzE5M2I0NTUtMWExNy00M2ZhLWJkNWUtZjQ2NzIwOGI2NzQ3QDE5Mi45LjEyOS4yMDY6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9aW9zJnNuaT1kY3BxanMueXlkamMudG9wIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTAzJTIwJTdDJTIwJUU0JUI4JTg5JUU3JUJEJTkxJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0A2NC4xODEuMjMzLjkwOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT10bHMmZmxvdz14dGxzLXJwcngtdmlzaW9uJmZwPWlvcyZzbmk9ZGNwcWpzLnl5ZGpjLnRvcCMlRjAlOUYlODclQkElRjAlOUYlODclQjglRTclQkUlOEUlRTUlOUIlQkQlRTUlOUMlQTMlRTQlQkQlOTUlRTUlQTElOUUwNCUyMCU3QyUyMCVFNCVCOCU4OSVFNyVCRCU5MSVFNiU4RSVBOCVFOCU4RCU5MA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTQ2LjIzNS4yMjguMzQ6NDQzP3R5cGU9dGNwJmVuY3J5cHRpb249bm9uZSZob3N0PSZwYXRoPSZoZWFkZXJUeXBlPW5vbmUmcXVpY1NlY3VyaXR5PW5vbmUmc2VydmljZU5hbWU9JnNlY3VyaXR5PXRscyZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9aW9zJnNuaT1kY3BxanMueXlkamMudG9wIyVGMCU5RiU4NyVCQSVGMCU5RiU4NyVCOCVFNyVCRSU4RSVFNSU5QiVCRCVFNSU5QyVBMyVFNCVCRCU5NSVFNSVBMSU5RTA1JTIwJTdDJTIwJUU0JUI4JTg5JUU3JUJEJTkxJUU2JThFJUE4JUU4JThEJTkwDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDAuMjQ1LjQzLjE5OTo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT10di5hcHBsZS5jb20mcGJrPVdtejJxMnR3ZldZdTZGck81eFUxTTg3TE81S2preUdpZjBBdVBMTk1QVzAmc2lkPWE4NjEwMzk2NWFjOTEzZjIjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AxNDAuMjQ1LjU4LjU2OjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPXR2LmFwcGxlLmNvbSZwYms9V216MnEydHdmV1l1NkZyTzV4VTFNODdMTzVLamt5R2lmMEF1UExOTVBXMCZzaWQ9YTg2MTAzOTY1YWM5MTNmMiMlRjAlOUYlODclQjglRjAlOUYlODclQUMlRTYlOTYlQjAlRTUlOEElQTAlRTUlOUQlQTEyDQp2bGVzczovL2MxOTNiNDU1LTFhMTctNDNmYS1iZDVlLWY0NjcyMDhiNjc0N0AyMTMuMzUuMTA4LjIyOjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUubXVzaWMuYXBwbGUuY29tJnBiaz1JUG5vMXc5R1V4aFJOMkpZX3lJa2EyRE5sbnVKSFFlYjNfMHlPQ000cFFnJnNpZD0zYWU1NGRiNDgzM2MjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExMw0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTY4LjEzOC4xNjUuMTA5OjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1pb3Mmc25pPWJ1eWxpdGUubXVzaWMuYXBwbGUuY29tJnBiaz1rUi1fNUoyRVBpQjlucmRneVhqZ3pmSlFueFFvZGtHZVZfamdLT0VubEVNJnNpZD1mYzgxNDM3NGFiYmEjJUYwJTlGJTg3JUI4JUYwJTlGJTg3JUFDJUU2JTk2JUIwJUU1JThBJUEwJUU1JTlEJUExNA0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTUyLjcwLjk5LjE4MDo0NDM/dHlwZT10Y3AmZW5jcnlwdGlvbj1ub25lJmhvc3Q9JnBhdGg9JmhlYWRlclR5cGU9bm9uZSZxdWljU2VjdXJpdHk9bm9uZSZzZXJ2aWNlTmFtZT0mc2VjdXJpdHk9cmVhbGl0eSZmbG93PXh0bHMtcnByeC12aXNpb24mZnA9Y2hyb21lJnNuaT1idXlsaXRlLm11c2ljLmFwcGxlLmNvbSZwYms9SUhKN3c3bTEzUXNZUEZxOGVwcGRxeVR5ZUxtWHpUdE9HOUVHdV8tZXAyYyZzaWQ9NDk4MjQyODNhMjQxIyVGMCU5RiU4NyVBRiVGMCU5RiU4NyVCNSVFNiU5NyVBNSVFNiU5QyVBQyVFNCVCOCU5QyVFNCVCQSVBQw0Kdmxlc3M6Ly9jMTkzYjQ1NS0xYTE3LTQzZmEtYmQ1ZS1mNDY3MjA4YjY3NDdAMTMwLjE2Mi4xNjMuMjE2OjQ0Mz90eXBlPXRjcCZlbmNyeXB0aW9uPW5vbmUmaG9zdD0mcGF0aD0maGVhZGVyVHlwZT1ub25lJnF1aWNTZWN1cml0eT1ub25lJnNlcnZpY2VOYW1lPSZzZWN1cml0eT1yZWFsaXR5JmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZmcD1jaHJvbWUmc25pPWJ1eWxpdGUudHYuYXBwbGUuY29tJnBiaz1iNVd1V29kZDN0QjljSFdVSnVvRUZOdmdZVk9jTHVEeWpheEh5NzB1bVU0JnNpZD01MDIxMTg0MyMlRjAlOUYlODclQUMlRjAlOUYlODclQTclRTglOEIlQjElRTUlOUIlQkQlRTQlQkMlQTYlRTYlOTUlQTYNCg==
|
entrypoint.sh
CHANGED
|
@@ -53,10 +53,24 @@ if [ -f ".env" ]; then
|
|
| 53 |
export $(grep -v '^#' .env | xargs -d '\n')
|
| 54 |
fi
|
| 55 |
|
| 56 |
-
#
|
| 57 |
-
if [
|
| 58 |
-
echo "${
|
| 59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
fi
|
| 61 |
|
| 62 |
# 设置默认端口
|
|
@@ -74,7 +88,11 @@ echo "Environment:"
|
|
| 74 |
echo "FLASK_PORT: ${FLASK_PORT:-7860}"
|
| 75 |
echo "CLASH_PROXY_PORT: ${CLASH_PROXY_PORT:-7890}"
|
| 76 |
echo "CLASH_API_PORT: ${CLASH_API_PORT:-9090}"
|
| 77 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
echo "API_KEY: [hidden]"
|
| 79 |
|
| 80 |
# 检查必要的环境变量
|
|
|
|
| 53 |
export $(grep -v '^#' .env | xargs -d '\n')
|
| 54 |
fi
|
| 55 |
|
| 56 |
+
# 检查是否使用本地配置文件
|
| 57 |
+
if [ "${USE_LOCAL_CONFIG}" = "true" ]; then
|
| 58 |
+
echo "${GREEN}Using local config.yaml file (skipping subscription)...${NC}"
|
| 59 |
+
# 检查配置文件是否存在
|
| 60 |
+
if [ -f "/app/data/config.yaml" ]; then
|
| 61 |
+
echo "${GREEN}Local config.yaml found${NC}"
|
| 62 |
+
else
|
| 63 |
+
echo "${RED}Error: Local config.yaml not found in /app/data/!${NC}"
|
| 64 |
+
echo "${YELLOW}Please mount your config.yaml to /app/data/config.yaml${NC}"
|
| 65 |
+
exit 1
|
| 66 |
+
fi
|
| 67 |
+
else
|
| 68 |
+
# 检查必要的环境变量
|
| 69 |
+
if [ -z "$SUB_URL" ]; then
|
| 70 |
+
echo "${RED}Error: SUB_URL environment variable is not set!${NC}"
|
| 71 |
+
echo "${YELLOW}Either set SUB_URL or use USE_LOCAL_CONFIG=true${NC}"
|
| 72 |
+
exit 1
|
| 73 |
+
fi
|
| 74 |
fi
|
| 75 |
|
| 76 |
# 设置默认端口
|
|
|
|
| 88 |
echo "FLASK_PORT: ${FLASK_PORT:-7860}"
|
| 89 |
echo "CLASH_PROXY_PORT: ${CLASH_PROXY_PORT:-7890}"
|
| 90 |
echo "CLASH_API_PORT: ${CLASH_API_PORT:-9090}"
|
| 91 |
+
if [ "${USE_LOCAL_CONFIG}" = "true" ]; then
|
| 92 |
+
echo "Using local config: YES"
|
| 93 |
+
else
|
| 94 |
+
echo "SUB_URL: [hidden]"
|
| 95 |
+
fi
|
| 96 |
echo "API_KEY: [hidden]"
|
| 97 |
|
| 98 |
# 检查必要的环境变量
|