diff --git a/src/ui/client/dashboard/pages/modes/index.html b/src/ui/client/dashboard/pages/modes/index.html index f87f80134..8356a8824 100644 --- a/src/ui/client/dashboard/pages/modes/index.html +++ b/src/ui/client/dashboard/pages/modes/index.html @@ -19,7 +19,7 @@ >
diff --git a/src/ui/client/tests/builder/utils/form.py b/src/ui/client/tests/builder/utils/form.py index e32ba2afa..a142ec226 100644 --- a/src/ui/client/tests/builder/utils/form.py +++ b/src/ui/client/tests/builder/utils/form.py @@ -2,6 +2,17 @@ from typing import Union +def get_setting_data(template_settings: dict, settings: dict, setting: str, value: dict) -> tuple: + template_value = template_settings.get(setting, None) + current_value = settings[setting].get("value", None) + default_value = value.get("default") + is_disabled_method = settings.get(setting, {}).get("method", "ui") not in ("ui", "default", "manual") + is_current_from_template = settings[setting].get("template", None) and template_value is not None + is_current_default = current_value is not None and current_value == default_value + setting_value = current_value if current_value is not None else default_value + return template_value, current_value, default_value, is_disabled_method, is_current_from_template, is_current_default, setting_value + + def get_service_settings(service_name: str, global_config: dict, total_config: dict) -> dict: """ total_config is a dict that contains global settings and services settings (format SERVICE_NAME_SETTING - www.example.com_USE_ANTIBOT for example -). @@ -154,43 +165,27 @@ def set_raw(template: list, plugins_base: list, settings: dict, is_new: bool) -> for plugin in plugins: for setting, value in plugin.get("settings").items(): - # we want to show disabled method on raw mode + # Avoid issue with multiple settings + if not setting in settings: + continue - # if setting in settings and settings[setting].get("method", "ui") not in ("ui", "default", "manual") and : + template_value, current_value, default_value, is_disabled_method, is_current_from_template, is_current_default, setting_value = get_setting_data( + template_settings, settings, setting, value + ) + + # We want to show any methods on raw mode + + # if is_disabled_method : # continue - template_value = template_settings.get(setting, None) - current_value = settings[setting].get("value", None) - default_value = value.get("default") - is_disabled_method = settings.get(setting, {}).get("method", "ui") not in ("ui", "default", "manual") - is_current_from_template = settings[setting].get("template", None) and template_value is not None - is_current_default = current_value is not None and current_value == default_value - # setting value is the current (custom one) if exists or fallback to default - setting_value = current_value if current_value is not None else default_value - - # Cases we set the setting value - # 1 - the value is from a disabled method - # 2 - no template value - if is_disabled_method or not is_disabled_method and template_value is None: - raw_settings[setting] = setting_value + if current_value is not None and not is_current_default: + raw_settings[setting] = current_value continue - # Cases we can override by template value - # 1 - the current value is default and from template - # 2 - the current value is default and not from template - # 3 - the current value is not default but from template - if template_value is not None and ( - (is_current_default and is_current_from_template) - or (not is_current_from_template and is_current_default) - or (is_current_from_template and not is_current_default) - ): + if template_value is not None: raw_settings[setting] = template_value continue - # Case the current value is not default and not from template, we can't override - # Or any others cases, we set this fallback - raw_settings[setting] = setting_value - return raw_settings diff --git a/src/ui/client/tests/raw.json b/src/ui/client/tests/raw.json index e5e5df8d9..6410ee69a 100644 --- a/src/ui/client/tests/raw.json +++ b/src/ui/client/tests/raw.json @@ -52,6 +52,12 @@ "USE_ANTIBOT": "yes", "ANTIBOT_URI": "/challenge", "ANTIBOT_RECAPTCHA_SCORE": "0.7", + "ANTIBOT_RECAPTCHA_SITEKEY": "", + "ANTIBOT_RECAPTCHA_SECRET": "", + "ANTIBOT_HCAPTCHA_SITEKEY": "", + "ANTIBOT_HCAPTCHA_SECRET": "", + "ANTIBOT_TURNSTILE_SITEKEY": "", + "ANTIBOT_TURNSTILE_SECRET": "", "USE_BAD_BEHAVIOR": "yes", "BAD_BEHAVIOR_STATUS_CODES": "400 401 403 404 405 429 444", "BAD_BEHAVIOR_THRESHOLD": "30", @@ -71,6 +77,7 @@ "KEEP_UPSTREAM_HEADERS": "Content-Security-Policy Permissions-Policy X-Frame-Options", "STRICT_TRANSPORT_SECURITY": "max-age=31536000; includeSubDomains; preload", "COOKIE_FLAGS": "* SameSite=Lax", + "CONTENT_SECURITY_POLICY": "", "REFERRER_POLICY": "no-referrer-when-downgrade", "PERMISSIONS_POLICY": "accelerometer=(), ambient-light-sensor=(), attribution-reporting=(), autoplay=(), battery=(), bluetooth=(), browsing-topics=(), camera=(), compute-pressure=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), identity-credentials-get=(), idle-detection=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), publickey-credentials-create=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), speaker-selection=(), storage-access=(), usb=(), web-share=(), window-management=(), xr-spatial-tracking=()", "AUTO_LETS_ENCRYPT": "yes", @@ -89,6 +96,7 @@ "HTTP3": "yes", "MODSECURITY_CRS_VERSION": "4", "USE_REVERSE_PROXY": "yes", + "REVERSE_PROXY_CUSTOM_HOST": "", "REVERSE_PROXY_HOST": "http://app1:8080", "REVERSE_PROXY_URL": "/", "REVERSE_PROXY_WS": "no", diff --git a/src/ui/client/tests/raw.txt b/src/ui/client/tests/raw.txt index b22443f5f..19ff295b3 100644 --- a/src/ui/client/tests/raw.txt +++ b/src/ui/client/tests/raw.txt @@ -1 +1 @@ -W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogMTIsICJ0YWJsZXQiOiAxMiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlRpdGxlIiwgImRhdGEiOiB7InRpdGxlIjogImFwcDEuZXhhbXBsZS5jb20iLCAidHlwZSI6ICJjb250YWluZXIiLCAibG93ZXJjYXNlIjogdHJ1ZX19LCB7InR5cGUiOiAiU3VidGl0bGUiLCAiZGF0YSI6IHsic3VidGl0bGUiOiAic2VydmljZXNfbWFuYWdlX3N1YnRpdGxlIiwgInR5cGUiOiAiY29udGFpbmVyIn19LCB7InR5cGUiOiAiVGVtcGxhdGVzIiwgImRhdGEiOiB7InRlbXBsYXRlcyI6IHsicmF3IjogeyJkZWZhdWx0IjogeyJTRVJWRVJfTkFNRSI6ICJhcHAxLmV4YW1wbGUuY29tIiwgIlVTRV9CTEFDS0xJU1QiOiAibm8iLCAiVVNFX0JVTktFUk5FVCI6ICJubyIsICJDT1JTX0FMTE9XX09SSUdJTiI6ICJzZWxmIiwgIkNST1NTX09SSUdJTl9PUEVORVJfUE9MSUNZIjogInNhbWUtb3JpZ2luIiwgIkNST1NTX09SSUdJTl9FTUJFRERFUl9QT0xJQ1kiOiAicmVxdWlyZS1jb3JwIiwgIkNST1NTX09SSUdJTl9SRVNPVVJDRV9QT0xJQ1kiOiAic2FtZS1zaXRlIiwgIlVTRV9DTElFTlRfQ0FDSEUiOiAieWVzIiwgIlVTRV9HWklQIjogInllcyIsICJSRU1PVkVfSEVBREVSUyI6ICJTZXJ2ZXIgRXhwZWN0LUNUIFgtUG93ZXJlZC1CeSBYLUFzcE5ldC1WZXJzaW9uIFgtQXNwTmV0TXZjLVZlcnNpb24gUHVibGljLUtleS1QaW5zIiwgIktFRVBfVVBTVFJFQU1fSEVBREVSUyI6ICJDb250ZW50LVNlY3VyaXR5LVBvbGljeSBQZXJtaXNzaW9ucy1Qb2xpY3kgWC1GcmFtZS1PcHRpb25zIiwgIlNUUklDVF9UUkFOU1BPUlRfU0VDVVJJVFkiOiAibWF4LWFnZT0zMTUzNjAwMDsgaW5jbHVkZVN1YkRvbWFpbnM7IHByZWxvYWQiLCAiUEVSTUlTU0lPTlNfUE9MSUNZIjogImFjY2VsZXJvbWV0ZXI9KCksIGFtYmllbnQtbGlnaHQtc2Vuc29yPSgpLCBhdHRyaWJ1dGlvbi1yZXBvcnRpbmc9KCksIGF1dG9wbGF5PSgpLCBiYXR0ZXJ5PSgpLCBibHVldG9vdGg9KCksIGJyb3dzaW5nLXRvcGljcz0oKSwgY2FtZXJhPSgpLCBjb21wdXRlLXByZXNzdXJlPSgpLCBkaXNwbGF5LWNhcHR1cmU9KCksIGRvY3VtZW50LWRvbWFpbj0oKSwgZW5jcnlwdGVkLW1lZGlhPSgpLCBleGVjdXRpb24td2hpbGUtbm90LXJlbmRlcmVkPSgpLCBleGVjdXRpb24td2hpbGUtb3V0LW9mLXZpZXdwb3J0PSgpLCBmdWxsc2NyZWVuPSgpLCBnYW1lcGFkPSgpLCBnZW9sb2NhdGlvbj0oKSwgZ3lyb3Njb3BlPSgpLCBoaWQ9KCksIGlkZW50aXR5LWNyZWRlbnRpYWxzLWdldD0oKSwgaWRsZS1kZXRlY3Rpb249KCksIGxvY2FsLWZvbnRzPSgpLCBtYWduZXRvbWV0ZXI9KCksIG1pY3JvcGhvbmU9KCksIG1pZGk9KCksIG90cC1jcmVkZW50aWFscz0oKSwgcGF5bWVudD0oKSwgcGljdHVyZS1pbi1waWN0dXJlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtY3JlYXRlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtZ2V0PSgpLCBzY3JlZW4td2FrZS1sb2NrPSgpLCBzZXJpYWw9KCksIHNwZWFrZXItc2VsZWN0aW9uPSgpLCBzdG9yYWdlLWFjY2Vzcz0oKSwgdXNiPSgpLCB3ZWItc2hhcmU9KCksIHdpbmRvdy1tYW5hZ2VtZW50PSgpLCB4ci1zcGF0aWFsLXRyYWNraW5nPSgpIiwgIlNFUlZFX0ZJTEVTIjogIm5vIiwgIk1PRFNFQ1VSSVRZX0NSU19WRVJTSU9OIjogIjQiLCAiVVNFX1JFVkVSU0VfUFJPWFkiOiAieWVzIiwgIlJFVkVSU0VfUFJPWFlfSE9TVCI6ICJodHRwOi8vYXBwMTo4MDgwIiwgIlVTRV9XSElURUxJU1QiOiAibm8ifSwgImxvdyI6IHsiU0VSVkVSX05BTUUiOiAiYXBwMS5leGFtcGxlLmNvbSIsICJVU0VfQU5USUJPVCI6ICJ5ZXMiLCAiQU5USUJPVF9VUkkiOiAiL2NoYWxsZW5nZSIsICJBTlRJQk9UX1JFQ0FQVENIQV9TQ09SRSI6ICIwLjciLCAiVVNFX0JBRF9CRUhBVklPUiI6ICJ5ZXMiLCAiQkFEX0JFSEFWSU9SX1NUQVRVU19DT0RFUyI6ICI0MDAgNDAxIDQwMyA0MDQgNDA1IDQyOSA0NDQiLCAiQkFEX0JFSEFWSU9SX1RIUkVTSE9MRCI6ICIzMCIsICJCQURfQkVIQVZJT1JfQ09VTlRfVElNRSI6ICI2MCIsICJCQURfQkVIQVZJT1JfQkFOX1RJTUUiOiAiMzYwMCIsICJVU0VfQkxBQ0tMSVNUIjogIm5vIiwgIlVTRV9CVU5LRVJORVQiOiAibm8iLCAiVVNFX0NPUlMiOiAieWVzIiwgIkNPUlNfQUxMT1dfT1JJR0lOIjogInNlbGYiLCAiQ1JPU1NfT1JJR0lOX09QRU5FUl9QT0xJQ1kiOiAic2FtZS1vcmlnaW4iLCAiQ1JPU1NfT1JJR0lOX0VNQkVEREVSX1BPTElDWSI6ICJyZXF1aXJlLWNvcnAiLCAiQ1JPU1NfT1JJR0lOX1JFU09VUkNFX1BPTElDWSI6ICJzYW1lLXNpdGUiLCAiVVNFX0NMSUVOVF9DQUNIRSI6ICJ5ZXMiLCAiVVNFX0ROU0JMIjogIm5vIiwgIlVTRV9HWklQIjogInllcyIsICJSRU1PVkVfSEVBREVSUyI6ICJTZXJ2ZXIgRXhwZWN0LUNUIFgtUG93ZXJlZC1CeSBYLUFzcE5ldC1WZXJzaW9uIFgtQXNwTmV0TXZjLVZlcnNpb24gUHVibGljLUtleS1QaW5zIiwgIktFRVBfVVBTVFJFQU1fSEVBREVSUyI6ICJDb250ZW50LVNlY3VyaXR5LVBvbGljeSBQZXJtaXNzaW9ucy1Qb2xpY3kgWC1GcmFtZS1PcHRpb25zIiwgIlNUUklDVF9UUkFOU1BPUlRfU0VDVVJJVFkiOiAibWF4LWFnZT0zMTUzNjAwMDsgaW5jbHVkZVN1YkRvbWFpbnM7IHByZWxvYWQiLCAiQ09PS0lFX0ZMQUdTIjogIiogU2FtZVNpdGU9TGF4IiwgIlJFRkVSUkVSX1BPTElDWSI6ICJuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSIsICJQRVJNSVNTSU9OU19QT0xJQ1kiOiAiYWNjZWxlcm9tZXRlcj0oKSwgYW1iaWVudC1saWdodC1zZW5zb3I9KCksIGF0dHJpYnV0aW9uLXJlcG9ydGluZz0oKSwgYXV0b3BsYXk9KCksIGJhdHRlcnk9KCksIGJsdWV0b290aD0oKSwgYnJvd3NpbmctdG9waWNzPSgpLCBjYW1lcmE9KCksIGNvbXB1dGUtcHJlc3N1cmU9KCksIGRpc3BsYXktY2FwdHVyZT0oKSwgZG9jdW1lbnQtZG9tYWluPSgpLCBlbmNyeXB0ZWQtbWVkaWE9KCksIGV4ZWN1dGlvbi13aGlsZS1ub3QtcmVuZGVyZWQ9KCksIGV4ZWN1dGlvbi13aGlsZS1vdXQtb2Ytdmlld3BvcnQ9KCksIGZ1bGxzY3JlZW49KCksIGdhbWVwYWQ9KCksIGdlb2xvY2F0aW9uPSgpLCBneXJvc2NvcGU9KCksIGhpZD0oKSwgaWRlbnRpdHktY3JlZGVudGlhbHMtZ2V0PSgpLCBpZGxlLWRldGVjdGlvbj0oKSwgbG9jYWwtZm9udHM9KCksIG1hZ25ldG9tZXRlcj0oKSwgbWljcm9waG9uZT0oKSwgbWlkaT0oKSwgb3RwLWNyZWRlbnRpYWxzPSgpLCBwYXltZW50PSgpLCBwaWN0dXJlLWluLXBpY3R1cmU9KCksIHB1YmxpY2tleS1jcmVkZW50aWFscy1jcmVhdGU9KCksIHB1YmxpY2tleS1jcmVkZW50aWFscy1nZXQ9KCksIHNjcmVlbi13YWtlLWxvY2s9KCksIHNlcmlhbD0oKSwgc3BlYWtlci1zZWxlY3Rpb249KCksIHN0b3JhZ2UtYWNjZXNzPSgpLCB1c2I9KCksIHdlYi1zaGFyZT0oKSwgd2luZG93LW1hbmFnZW1lbnQ9KCksIHhyLXNwYXRpYWwtdHJhY2tpbmc9KCkiLCAiQVVUT19MRVRTX0VOQ1JZUFQiOiAieWVzIiwgIlVTRV9MRVRTX0VOQ1JZUFRfU1RBR0lORyI6ICJubyIsICJVU0VfTElNSVRfUkVRIjogInllcyIsICJMSU1JVF9SRVFfVVJMIjogIi8iLCAiTElNSVRfUkVRX1JBVEUiOiAiNXIvcyIsICJVU0VfTElNSVRfQ09OTiI6ICJ5ZXMiLCAiTElNSVRfQ09OTl9NQVhfSFRUUDEiOiAiMjUiLCAiTElNSVRfQ09OTl9NQVhfSFRUUDIiOiAiMjAwIiwgIkFMTE9XRURfTUVUSE9EUyI6ICJHRVR8UE9TVHxIRUFEfE9QVElPTlN8UFVUfERFTEVURXxQQVRDSCIsICJNQVhfQ0xJRU5UX1NJWkUiOiAiMTAwbSIsICJTRVJWRV9GSUxFUyI6ICJubyIsICJTU0xfUFJPVE9DT0xTIjogIlRMU3YxLjIgVExTdjEuMyIsICJIVFRQMiI6ICJ5ZXMiLCAiSFRUUDMiOiAieWVzIiwgIk1PRFNFQ1VSSVRZX0NSU19WRVJTSU9OIjogIjQiLCAiVVNFX1JFVkVSU0VfUFJPWFkiOiAieWVzIiwgIlJFVkVSU0VfUFJPWFlfSE9TVCI6ICJodHRwOi8vYXBwMTo4MDgwIiwgIlJFVkVSU0VfUFJPWFlfVVJMIjogIi8iLCAiUkVWRVJTRV9QUk9YWV9XUyI6ICJubyIsICJSRVZFUlNFX1BST1hZX0tFRVBBTElWRSI6ICJubyIsICJVU0VfV0hJVEVMSVNUIjogIm5vIn19fSwgIm9wZXJhdGlvbiI6ICJlZGl0IiwgIm9sZFNlcnZlck5hbWUiOiAiYXBwMS5leGFtcGxlLmNvbSJ9fV19XQ== \ No newline at end of file +W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogMTIsICJ0YWJsZXQiOiAxMiwgIm1vYmlsZSI6IDEyfSwgIndpZGdldHMiOiBbeyJ0eXBlIjogIlRpdGxlIiwgImRhdGEiOiB7InRpdGxlIjogImFwcDEuZXhhbXBsZS5jb20iLCAidHlwZSI6ICJjb250YWluZXIiLCAibG93ZXJjYXNlIjogdHJ1ZX19LCB7InR5cGUiOiAiU3VidGl0bGUiLCAiZGF0YSI6IHsic3VidGl0bGUiOiAic2VydmljZXNfbWFuYWdlX3N1YnRpdGxlIiwgInR5cGUiOiAiY29udGFpbmVyIn19LCB7InR5cGUiOiAiVGVtcGxhdGVzIiwgImRhdGEiOiB7InRlbXBsYXRlcyI6IHsicmF3IjogeyJkZWZhdWx0IjogeyJTRVJWRVJfTkFNRSI6ICJhcHAxLmV4YW1wbGUuY29tIiwgIlVTRV9CTEFDS0xJU1QiOiAibm8iLCAiVVNFX0JVTktFUk5FVCI6ICJubyIsICJDT1JTX0FMTE9XX09SSUdJTiI6ICJzZWxmIiwgIkNST1NTX09SSUdJTl9PUEVORVJfUE9MSUNZIjogInNhbWUtb3JpZ2luIiwgIkNST1NTX09SSUdJTl9FTUJFRERFUl9QT0xJQ1kiOiAicmVxdWlyZS1jb3JwIiwgIkNST1NTX09SSUdJTl9SRVNPVVJDRV9QT0xJQ1kiOiAic2FtZS1zaXRlIiwgIlVTRV9DTElFTlRfQ0FDSEUiOiAieWVzIiwgIlVTRV9HWklQIjogInllcyIsICJSRU1PVkVfSEVBREVSUyI6ICJTZXJ2ZXIgRXhwZWN0LUNUIFgtUG93ZXJlZC1CeSBYLUFzcE5ldC1WZXJzaW9uIFgtQXNwTmV0TXZjLVZlcnNpb24gUHVibGljLUtleS1QaW5zIiwgIktFRVBfVVBTVFJFQU1fSEVBREVSUyI6ICJDb250ZW50LVNlY3VyaXR5LVBvbGljeSBQZXJtaXNzaW9ucy1Qb2xpY3kgWC1GcmFtZS1PcHRpb25zIiwgIlNUUklDVF9UUkFOU1BPUlRfU0VDVVJJVFkiOiAibWF4LWFnZT0zMTUzNjAwMDsgaW5jbHVkZVN1YkRvbWFpbnM7IHByZWxvYWQiLCAiUEVSTUlTU0lPTlNfUE9MSUNZIjogImFjY2VsZXJvbWV0ZXI9KCksIGFtYmllbnQtbGlnaHQtc2Vuc29yPSgpLCBhdHRyaWJ1dGlvbi1yZXBvcnRpbmc9KCksIGF1dG9wbGF5PSgpLCBiYXR0ZXJ5PSgpLCBibHVldG9vdGg9KCksIGJyb3dzaW5nLXRvcGljcz0oKSwgY2FtZXJhPSgpLCBjb21wdXRlLXByZXNzdXJlPSgpLCBkaXNwbGF5LWNhcHR1cmU9KCksIGRvY3VtZW50LWRvbWFpbj0oKSwgZW5jcnlwdGVkLW1lZGlhPSgpLCBleGVjdXRpb24td2hpbGUtbm90LXJlbmRlcmVkPSgpLCBleGVjdXRpb24td2hpbGUtb3V0LW9mLXZpZXdwb3J0PSgpLCBmdWxsc2NyZWVuPSgpLCBnYW1lcGFkPSgpLCBnZW9sb2NhdGlvbj0oKSwgZ3lyb3Njb3BlPSgpLCBoaWQ9KCksIGlkZW50aXR5LWNyZWRlbnRpYWxzLWdldD0oKSwgaWRsZS1kZXRlY3Rpb249KCksIGxvY2FsLWZvbnRzPSgpLCBtYWduZXRvbWV0ZXI9KCksIG1pY3JvcGhvbmU9KCksIG1pZGk9KCksIG90cC1jcmVkZW50aWFscz0oKSwgcGF5bWVudD0oKSwgcGljdHVyZS1pbi1waWN0dXJlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtY3JlYXRlPSgpLCBwdWJsaWNrZXktY3JlZGVudGlhbHMtZ2V0PSgpLCBzY3JlZW4td2FrZS1sb2NrPSgpLCBzZXJpYWw9KCksIHNwZWFrZXItc2VsZWN0aW9uPSgpLCBzdG9yYWdlLWFjY2Vzcz0oKSwgdXNiPSgpLCB3ZWItc2hhcmU9KCksIHdpbmRvdy1tYW5hZ2VtZW50PSgpLCB4ci1zcGF0aWFsLXRyYWNraW5nPSgpIiwgIlNFUlZFX0ZJTEVTIjogIm5vIiwgIk1PRFNFQ1VSSVRZX0NSU19WRVJTSU9OIjogIjQiLCAiVVNFX1JFVkVSU0VfUFJPWFkiOiAieWVzIiwgIlJFVkVSU0VfUFJPWFlfSE9TVCI6ICJodHRwOi8vYXBwMTo4MDgwIiwgIlVTRV9XSElURUxJU1QiOiAibm8ifSwgImxvdyI6IHsiU0VSVkVSX05BTUUiOiAiYXBwMS5leGFtcGxlLmNvbSIsICJVU0VfQU5USUJPVCI6ICJ5ZXMiLCAiQU5USUJPVF9VUkkiOiAiL2NoYWxsZW5nZSIsICJBTlRJQk9UX1JFQ0FQVENIQV9TQ09SRSI6ICIwLjciLCAiQU5USUJPVF9SRUNBUFRDSEFfU0lURUtFWSI6ICIiLCAiQU5USUJPVF9SRUNBUFRDSEFfU0VDUkVUIjogIiIsICJBTlRJQk9UX0hDQVBUQ0hBX1NJVEVLRVkiOiAiIiwgIkFOVElCT1RfSENBUFRDSEFfU0VDUkVUIjogIiIsICJBTlRJQk9UX1RVUk5TVElMRV9TSVRFS0VZIjogIiIsICJBTlRJQk9UX1RVUk5TVElMRV9TRUNSRVQiOiAiIiwgIlVTRV9CQURfQkVIQVZJT1IiOiAieWVzIiwgIkJBRF9CRUhBVklPUl9TVEFUVVNfQ09ERVMiOiAiNDAwIDQwMSA0MDMgNDA0IDQwNSA0MjkgNDQ0IiwgIkJBRF9CRUhBVklPUl9USFJFU0hPTEQiOiAiMzAiLCAiQkFEX0JFSEFWSU9SX0NPVU5UX1RJTUUiOiAiNjAiLCAiQkFEX0JFSEFWSU9SX0JBTl9USU1FIjogIjM2MDAiLCAiVVNFX0JMQUNLTElTVCI6ICJubyIsICJVU0VfQlVOS0VSTkVUIjogIm5vIiwgIlVTRV9DT1JTIjogInllcyIsICJDT1JTX0FMTE9XX09SSUdJTiI6ICJzZWxmIiwgIkNST1NTX09SSUdJTl9PUEVORVJfUE9MSUNZIjogInNhbWUtb3JpZ2luIiwgIkNST1NTX09SSUdJTl9FTUJFRERFUl9QT0xJQ1kiOiAicmVxdWlyZS1jb3JwIiwgIkNST1NTX09SSUdJTl9SRVNPVVJDRV9QT0xJQ1kiOiAic2FtZS1zaXRlIiwgIlVTRV9DTElFTlRfQ0FDSEUiOiAieWVzIiwgIlVTRV9ETlNCTCI6ICJubyIsICJVU0VfR1pJUCI6ICJ5ZXMiLCAiUkVNT1ZFX0hFQURFUlMiOiAiU2VydmVyIEV4cGVjdC1DVCBYLVBvd2VyZWQtQnkgWC1Bc3BOZXQtVmVyc2lvbiBYLUFzcE5ldE12Yy1WZXJzaW9uIFB1YmxpYy1LZXktUGlucyIsICJLRUVQX1VQU1RSRUFNX0hFQURFUlMiOiAiQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgUGVybWlzc2lvbnMtUG9saWN5IFgtRnJhbWUtT3B0aW9ucyIsICJTVFJJQ1RfVFJBTlNQT1JUX1NFQ1VSSVRZIjogIm1heC1hZ2U9MzE1MzYwMDA7IGluY2x1ZGVTdWJEb21haW5zOyBwcmVsb2FkIiwgIkNPT0tJRV9GTEFHUyI6ICIqIFNhbWVTaXRlPUxheCIsICJDT05URU5UX1NFQ1VSSVRZX1BPTElDWSI6ICIiLCAiUkVGRVJSRVJfUE9MSUNZIjogIm5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlIiwgIlBFUk1JU1NJT05TX1BPTElDWSI6ICJhY2NlbGVyb21ldGVyPSgpLCBhbWJpZW50LWxpZ2h0LXNlbnNvcj0oKSwgYXR0cmlidXRpb24tcmVwb3J0aW5nPSgpLCBhdXRvcGxheT0oKSwgYmF0dGVyeT0oKSwgYmx1ZXRvb3RoPSgpLCBicm93c2luZy10b3BpY3M9KCksIGNhbWVyYT0oKSwgY29tcHV0ZS1wcmVzc3VyZT0oKSwgZGlzcGxheS1jYXB0dXJlPSgpLCBkb2N1bWVudC1kb21haW49KCksIGVuY3J5cHRlZC1tZWRpYT0oKSwgZXhlY3V0aW9uLXdoaWxlLW5vdC1yZW5kZXJlZD0oKSwgZXhlY3V0aW9uLXdoaWxlLW91dC1vZi12aWV3cG9ydD0oKSwgZnVsbHNjcmVlbj0oKSwgZ2FtZXBhZD0oKSwgZ2VvbG9jYXRpb249KCksIGd5cm9zY29wZT0oKSwgaGlkPSgpLCBpZGVudGl0eS1jcmVkZW50aWFscy1nZXQ9KCksIGlkbGUtZGV0ZWN0aW9uPSgpLCBsb2NhbC1mb250cz0oKSwgbWFnbmV0b21ldGVyPSgpLCBtaWNyb3Bob25lPSgpLCBtaWRpPSgpLCBvdHAtY3JlZGVudGlhbHM9KCksIHBheW1lbnQ9KCksIHBpY3R1cmUtaW4tcGljdHVyZT0oKSwgcHVibGlja2V5LWNyZWRlbnRpYWxzLWNyZWF0ZT0oKSwgcHVibGlja2V5LWNyZWRlbnRpYWxzLWdldD0oKSwgc2NyZWVuLXdha2UtbG9jaz0oKSwgc2VyaWFsPSgpLCBzcGVha2VyLXNlbGVjdGlvbj0oKSwgc3RvcmFnZS1hY2Nlc3M9KCksIHVzYj0oKSwgd2ViLXNoYXJlPSgpLCB3aW5kb3ctbWFuYWdlbWVudD0oKSwgeHItc3BhdGlhbC10cmFja2luZz0oKSIsICJBVVRPX0xFVFNfRU5DUllQVCI6ICJ5ZXMiLCAiVVNFX0xFVFNfRU5DUllQVF9TVEFHSU5HIjogIm5vIiwgIlVTRV9MSU1JVF9SRVEiOiAieWVzIiwgIkxJTUlUX1JFUV9VUkwiOiAiLyIsICJMSU1JVF9SRVFfUkFURSI6ICI1ci9zIiwgIlVTRV9MSU1JVF9DT05OIjogInllcyIsICJMSU1JVF9DT05OX01BWF9IVFRQMSI6ICIyNSIsICJMSU1JVF9DT05OX01BWF9IVFRQMiI6ICIyMDAiLCAiQUxMT1dFRF9NRVRIT0RTIjogIkdFVHxQT1NUfEhFQUR8T1BUSU9OU3xQVVR8REVMRVRFfFBBVENIIiwgIk1BWF9DTElFTlRfU0laRSI6ICIxMDBtIiwgIlNFUlZFX0ZJTEVTIjogIm5vIiwgIlNTTF9QUk9UT0NPTFMiOiAiVExTdjEuMiBUTFN2MS4zIiwgIkhUVFAyIjogInllcyIsICJIVFRQMyI6ICJ5ZXMiLCAiTU9EU0VDVVJJVFlfQ1JTX1ZFUlNJT04iOiAiNCIsICJVU0VfUkVWRVJTRV9QUk9YWSI6ICJ5ZXMiLCAiUkVWRVJTRV9QUk9YWV9DVVNUT01fSE9TVCI6ICIiLCAiUkVWRVJTRV9QUk9YWV9IT1NUIjogImh0dHA6Ly9hcHAxOjgwODAiLCAiUkVWRVJTRV9QUk9YWV9VUkwiOiAiLyIsICJSRVZFUlNFX1BST1hZX1dTIjogIm5vIiwgIlJFVkVSU0VfUFJPWFlfS0VFUEFMSVZFIjogIm5vIiwgIlVTRV9XSElURUxJU1QiOiAibm8ifX19LCAib3BlcmF0aW9uIjogImVkaXQiLCAib2xkU2VydmVyTmFtZSI6ICJhcHAxLmV4YW1wbGUuY29tIn19XX1d \ No newline at end of file