Shopware
One-click Shopware 6 blueprint with bundled MySQL, Redis, bootstrap, init, worker, and scheduler services.
Configuration
version: "3.8"
# Dokploy Blueprint notes:
# - This stack is intentionally self-contained for one-click deployments.
# - The first deployment is slower because bootstrap downloads Shopware into a persistent volume.
# - Shopware source code and generated JWT keys live in named volumes so redeploys remain stable.
# - Failed messenger jobs remain in the `failed` queue for manual retry via Shopware console commands.
x-shopware-env: &shopware-env
APP_ENV: "${APP_ENV:-prod}"
APP_SECRET: "${APP_SECRET}"
INSTANCE_ID: "${INSTANCE_ID}"
APP_URL: "${APP_URL}"
ENABLE_DEMO_DATA: "${ENABLE_DEMO_DATA:-1}"
TRUSTED_PROXIES: "${TRUSTED_PROXIES:-private_ranges}"
SYMFONY_TRUSTED_PROXIES: "${SYMFONY_TRUSTED_PROXIES:-private_ranges}"
SYMFONY_TRUSTED_HEADERS: "${SYMFONY_TRUSTED_HEADERS:-x-forwarded-for,x-forwarded-host,x-forwarded-proto,x-forwarded-port,x-forwarded-prefix}"
DATABASE_HOST: "database"
DATABASE_PORT: "3306"
DATABASE_NAME: "${DATABASE_NAME:-shopware}"
DATABASE_USER: "${DATABASE_USER:-shopware}"
DATABASE_PASSWORD: "${DATABASE_PASSWORD}"
DATABASE_URL: "${DATABASE_URL}"
REDIS_HOST: "redis"
REDIS_PORT: "6379"
REDIS_PASSWORD: "${REDIS_PASSWORD}"
MAILER_DSN: "${MAILER_DSN:-null://localhost}"
LOCK_DSN: "${LOCK_DSN}"
MESSENGER_TRANSPORT_DSN: "${MESSENGER_TRANSPORT_DSN:-doctrine://default?queue_name=async}"
MESSENGER_TRANSPORT_LOW_PRIORITY_DSN: "${MESSENGER_TRANSPORT_LOW_PRIORITY_DSN:-doctrine://default?queue_name=low_priority}"
MESSENGER_TRANSPORT_FAILURE_DSN: "${MESSENGER_TRANSPORT_FAILURE_DSN:-doctrine://default?queue_name=failed}"
COMPOSER_PLUGIN_LOADER: "${COMPOSER_PLUGIN_LOADER:-1}"
SHOPWARE_HTTP_CACHE_ENABLED: "${SHOPWARE_HTTP_CACHE_ENABLED:-1}"
SHOPWARE_HTTP_DEFAULT_TTL: "${SHOPWARE_HTTP_DEFAULT_TTL:-7200}"
INSTALL_LOCALE: "${INSTALL_LOCALE:-en-GB}"
INSTALL_CURRENCY: "${INSTALL_CURRENCY:-EUR}"
INSTALL_ADMIN_USERNAME: "${INSTALL_ADMIN_USERNAME:-admin}"
INSTALL_ADMIN_PASSWORD: "${INSTALL_ADMIN_PASSWORD}"
PHP_SESSION_HANDLER: "${PHP_SESSION_HANDLER:-redis}"
PHP_SESSION_SAVE_PATH: "${PHP_SESSION_SAVE_PATH}"
PHP_SESSION_COOKIE_LIFETIME: "${PHP_SESSION_COOKIE_LIFETIME:-0}"
PHP_SESSION_GC_MAXLIFETIME: "${PHP_SESSION_GC_MAXLIFETIME:-1440}"
PHP_MAX_UPLOAD_SIZE: "${PHP_MAX_UPLOAD_SIZE:-128M}"
PHP_MAX_EXECUTION_TIME: "${PHP_MAX_EXECUTION_TIME:-300}"
PHP_MEMORY_LIMIT: "${PHP_MEMORY_LIMIT:-512M}"
FPM_PM: "${FPM_PM:-dynamic}"
FPM_PM_MAX_CHILDREN: "${FPM_PM_MAX_CHILDREN:-20}"
FPM_PM_START_SERVERS: "${FPM_PM_START_SERVERS:-4}"
FPM_PM_MIN_SPARE_SERVERS: "${FPM_PM_MIN_SPARE_SERVERS:-2}"
FPM_PM_MAX_SPARE_SERVERS: "${FPM_PM_MAX_SPARE_SERVERS:-6}"
BLUE_GREEN_DEPLOYMENT: "${BLUE_GREEN_DEPLOYMENT:-0}"
x-shopware-runtime-volumes: &shopware-runtime-volumes
- shopware-code:/var/www/html
- shopware-secrets:/run/shopware-secrets
- files:/var/www/html/files
- theme:/var/www/html/public/theme
- media:/var/www/html/public/media
- thumbnail:/var/www/html/public/thumbnail
- sitemap:/var/www/html/public/sitemap
services:
database:
image: mysql:8.4
restart: unless-stopped
environment:
MYSQL_DATABASE: "${DATABASE_NAME:-shopware}"
MYSQL_USER: "${DATABASE_USER:-shopware}"
MYSQL_PASSWORD: "${DATABASE_PASSWORD}"
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
healthcheck:
test:
- CMD-SHELL
- mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent
interval: 10s
timeout: 5s
retries: 20
start_period: 30s
volumes:
- database-data:/var/lib/mysql
redis:
image: redis:7.4-alpine
restart: unless-stopped
environment:
REDIS_PASSWORD: "${REDIS_PASSWORD}"
command:
- redis-server
- --appendonly
- "yes"
- --requirepass
- "${REDIS_PASSWORD}"
healthcheck:
test:
- CMD-SHELL
- redis-cli -a "$${REDIS_PASSWORD}" ping | grep -q PONG
interval: 10s
timeout: 5s
retries: 20
volumes:
- redis-data:/data
bootstrap:
image: ${SHOPWARE_CLI_IMAGE:-shopware/shopware-cli:0.14.3-php-8.4}
restart: "no"
environment:
<<: *shopware-env
COMPOSER_ALLOW_SUPERUSER: "1"
COMPOSER_HOME: "/tmp/composer"
SHOPWARE_VERSION: "${SHOPWARE_VERSION:-6.7.12.1}"
SHOPWARE_DOCKER_VERSION: "${SHOPWARE_DOCKER_VERSION:-0.3.0}"
ENABLE_DEMO_DATA: "${ENABLE_DEMO_DATA:-1}"
DEMO_DATA_VERSION: "${DEMO_DATA_VERSION:-2.1.0}"
depends_on:
database:
condition: service_healthy
redis:
condition: service_healthy
entrypoint:
- /bin/sh
- -ec
- |
mkdir -p /run/shopware-secrets /var/www/html
if [ ! -s /run/shopware-secrets/jwt-private.pem ] || [ ! -s /run/shopware-secrets/jwt-public.pem ]; then
echo "Generating JWT keypair."
openssl genpkey -algorithm RSA -out /run/shopware-secrets/jwt-private.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -pubout -in /run/shopware-secrets/jwt-private.pem -out /run/shopware-secrets/jwt-public.pem
chmod 600 /run/shopware-secrets/jwt-private.pem
chmod 644 /run/shopware-secrets/jwt-public.pem
fi
export JWT_PRIVATE_KEY="$$(cat /run/shopware-secrets/jwt-private.pem)"
export JWT_PUBLIC_KEY="$$(cat /run/shopware-secrets/jwt-public.pem)"
if [ -f /var/www/html/composer.json ] && [ -f /var/www/html/bin/console ] && [ -f /var/www/html/vendor/autoload.php ]; then
echo "Shopware source already exists. Skipping bootstrap."
exit 0
fi
if find /var/www/html -mindepth 1 -maxdepth 1 -print -quit | grep -q .; then
echo "Incomplete Shopware source detected. Cleaning bootstrap volume."
find /var/www/html -mindepth 1 -maxdepth 1 -exec rm -rf {} +
fi
tmp_dir="$$(mktemp -d)"
# Composer >=2.9 refuses to install pinned versions that are affected by
# security advisories published later. Keep the pinned bootstrap deterministic.
composer config -g audit.block-insecure false 2>/dev/null || true
composer create-project --no-interaction --prefer-dist "shopware/production:${SHOPWARE_VERSION}" "$$tmp_dir"
cd "$$tmp_dir"
composer require --no-interaction "shopware/docker:${SHOPWARE_DOCKER_VERSION}"
if [ "${ENABLE_DEMO_DATA}" = "1" ]; then
composer require --no-interaction --prefer-dist "swag/demo-data:${DEMO_DATA_VERSION}"
fi
shopware-cli project ci "$$tmp_dir"
cp -a "$$tmp_dir"/. /var/www/html/
volumes:
- shopware-code:/var/www/html
- shopware-secrets:/run/shopware-secrets
init-permissions:
image: alpine:3.21
restart: "no"
command:
- sh
- -ec
- |
mkdir -p \
/var/www/html/files \
/var/www/html/public/theme \
/var/www/html/public/media \
/var/www/html/public/thumbnail \
/var/www/html/public/sitemap \
/run/shopware-secrets
chown -R 82:82 /var/www/html /run/shopware-secrets
depends_on:
bootstrap:
condition: service_completed_successfully
volumes: *shopware-runtime-volumes
init:
image: ${SHOPWARE_BASE_IMAGE:-shopware/docker-base:8.4.19-nginx}
restart: "no"
entrypoint:
- /bin/sh
- -ec
- |
export JWT_PRIVATE_KEY="$(cat /run/shopware-secrets/jwt-private.pem)"
export JWT_PUBLIC_KEY="$(cat /run/shopware-secrets/jwt-public.pem)"
/setup
if [ "${ENABLE_DEMO_DATA:-1}" != "1" ]; then
exit 0
fi
cd /var/www/html
echo "Demo data enabled. Refreshing plugin list."
php bin/console -n plugin:refresh
if [ ! -d /var/www/html/custom/plugins/SwagPlatformDemoData ]; then
echo "SwagPlatformDemoData is not present in the volume."
echo "Continuing without demo data activation."
exit 0
fi
if ! plugin_state="$$(
php bin/console -n plugin:list --json | php -r '
$$plugins = json_decode(stream_get_contents(STDIN), true);
if (!is_array($$plugins)) {
fwrite(STDERR, "Unable to parse plugin list\n");
exit(2);
}
foreach ($$plugins as $$plugin) {
if (($$plugin["name"] ?? null) !== "SwagPlatformDemoData") {
continue;
}
$$installed = ($$plugin["installed"] ?? false) ? "1" : "0";
$$active = ($$plugin["active"] ?? false) ? "1" : "0";
echo $$installed . ":" . $$active;
exit(0);
}
fwrite(STDERR, "SwagPlatformDemoData not found in plugin list\n");
exit(1);
'
)"; then
echo "Unable to resolve SwagPlatformDemoData state."
echo "Continuing without demo data activation."
exit 0
fi
case "$${plugin_state}" in
"0:0")
echo "Installing and activating SwagPlatformDemoData."
php bin/console -n plugin:install --activate SwagPlatformDemoData
;;
"1:0")
echo "Activating existing SwagPlatformDemoData plugin."
php bin/console -n plugin:activate SwagPlatformDemoData
;;
"1:1")
echo "SwagPlatformDemoData is already active."
;;
*)
echo "Unexpected SwagPlatformDemoData state: $${plugin_state}"
echo "Continuing without demo data activation."
exit 0
;;
esac
environment: *shopware-env
depends_on:
init-permissions:
condition: service_completed_successfully
database:
condition: service_healthy
redis:
condition: service_healthy
volumes: *shopware-runtime-volumes
shopware:
image: ${SHOPWARE_BASE_IMAGE:-shopware/docker-base:8.4.19-nginx}
restart: unless-stopped
expose:
- "8000"
entrypoint:
- /bin/sh
- -ec
- |
export JWT_PRIVATE_KEY="$(cat /run/shopware-secrets/jwt-private.pem)"
export JWT_PUBLIC_KEY="$(cat /run/shopware-secrets/jwt-public.pem)"
exec /usr/bin/supervisord -c /etc/supervisord.conf
environment: *shopware-env
depends_on:
init:
condition: service_completed_successfully
volumes: *shopware-runtime-volumes
worker:
image: ${SHOPWARE_BASE_IMAGE:-shopware/docker-base:8.4.19-nginx}
restart: unless-stopped
entrypoint:
- /bin/sh
- -ec
- |
export JWT_PRIVATE_KEY="$(cat /run/shopware-secrets/jwt-private.pem)"
export JWT_PUBLIC_KEY="$(cat /run/shopware-secrets/jwt-public.pem)"
exec php bin/console messenger:consume async low_priority --time-limit=300 --memory-limit=512M
environment: *shopware-env
depends_on:
init:
condition: service_completed_successfully
volumes: *shopware-runtime-volumes
scheduler:
image: ${SHOPWARE_BASE_IMAGE:-shopware/docker-base:8.4.19-nginx}
restart: unless-stopped
entrypoint:
- /bin/sh
- -ec
- |
export JWT_PRIVATE_KEY="$(cat /run/shopware-secrets/jwt-private.pem)"
export JWT_PUBLIC_KEY="$(cat /run/shopware-secrets/jwt-public.pem)"
exec php bin/console scheduled-task:run
environment: *shopware-env
depends_on:
init:
condition: service_completed_successfully
volumes: *shopware-runtime-volumes
volumes:
database-data:
redis-data:
shopware-code:
shopware-secrets:
files:
theme:
media:
thumbnail:
sitemap:[variables]
main_domain = "${domain}"
app_url = "http://${main_domain}"
app_secret = "${hash:64}"
instance_id = "${hash:32}"
database_name = "shopware"
database_user = "shopware"
database_password = "${hash:32}"
mysql_root_password = "${hash:32}"
redis_password = "${hash:32}"
database_url = "mysql://${database_user}:${database_password}@database:3306/${database_name}?charset=utf8mb4"
lock_dsn = "redis://:${redis_password}@redis:6379/1"
php_session_save_path = "tcp://redis:6379?auth=${redis_password}"
install_admin_username = "admin"
install_admin_password = "${password:20}"
shopware_version = "6.7.12.1"
shopware_docker_version = "0.3.0"
shopware_cli_image = "shopware/shopware-cli:0.14.3-php-8.4"
shopware_base_image = "shopware/docker-base:8.4.19-nginx"
enable_demo_data = "1"
demo_data_version = "2.1.0"
[config]
[[config.domains]]
serviceName = "shopware"
port = 8000
host = "${main_domain}"
[config.env]
APP_ENV = "prod"
APP_URL = "${app_url}"
APP_SECRET = "${app_secret}"
INSTANCE_ID = "${instance_id}"
SHOPWARE_VERSION = "${shopware_version}"
SHOPWARE_DOCKER_VERSION = "${shopware_docker_version}"
SHOPWARE_CLI_IMAGE = "${shopware_cli_image}"
SHOPWARE_BASE_IMAGE = "${shopware_base_image}"
ENABLE_DEMO_DATA = "${enable_demo_data}"
DEMO_DATA_VERSION = "${demo_data_version}"
DATABASE_HOST = "database"
DATABASE_PORT = "3306"
DATABASE_NAME = "${database_name}"
DATABASE_USER = "${database_user}"
DATABASE_PASSWORD = "${database_password}"
DATABASE_URL = "${database_url}"
MYSQL_ROOT_PASSWORD = "${mysql_root_password}"
REDIS_HOST = "redis"
REDIS_PORT = "6379"
REDIS_PASSWORD = "${redis_password}"
MAILER_DSN = "null://localhost"
LOCK_DSN = "${lock_dsn}"
TRUSTED_PROXIES = "private_ranges"
SYMFONY_TRUSTED_PROXIES = "private_ranges"
SYMFONY_TRUSTED_HEADERS = "x-forwarded-for,x-forwarded-host,x-forwarded-proto,x-forwarded-port,x-forwarded-prefix"
COMPOSER_PLUGIN_LOADER = "1"
SHOPWARE_HTTP_CACHE_ENABLED = "1"
SHOPWARE_HTTP_DEFAULT_TTL = "7200"
INSTALL_LOCALE = "en-GB"
INSTALL_CURRENCY = "EUR"
INSTALL_ADMIN_USERNAME = "${install_admin_username}"
INSTALL_ADMIN_PASSWORD = "${install_admin_password}"
PHP_SESSION_HANDLER = "redis"
PHP_SESSION_SAVE_PATH = "${php_session_save_path}"
PHP_SESSION_COOKIE_LIFETIME = "0"
PHP_SESSION_GC_MAXLIFETIME = "1440"
PHP_MAX_UPLOAD_SIZE = "128M"
PHP_MAX_EXECUTION_TIME = "300"
PHP_MEMORY_LIMIT = "512M"
FPM_PM = "dynamic"
FPM_PM_MAX_CHILDREN = "20"
FPM_PM_START_SERVERS = "4"
FPM_PM_MIN_SPARE_SERVERS = "2"
FPM_PM_MAX_SPARE_SERVERS = "6"
MESSENGER_TRANSPORT_DSN = "doctrine://default?queue_name=async"
MESSENGER_TRANSPORT_LOW_PRIORITY_DSN = "doctrine://default?queue_name=low_priority"
MESSENGER_TRANSPORT_FAILURE_DSN = "doctrine://default?queue_name=failed"
BLUE_GREEN_DEPLOYMENT = "0"Base64
To import this template in Dokploy: create a Compose service → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxuIyBEb2twbG95IEJsdWVwcmludCBub3RlczpcbiMgLSBUaGlzIHN0YWNrIGlzIGludGVudGlvbmFsbHkgc2VsZi1jb250YWluZWQgZm9yIG9uZS1jbGljayBkZXBsb3ltZW50cy5cbiMgLSBUaGUgZmlyc3QgZGVwbG95bWVudCBpcyBzbG93ZXIgYmVjYXVzZSBib290c3RyYXAgZG93bmxvYWRzIFNob3B3YXJlIGludG8gYSBwZXJzaXN0ZW50IHZvbHVtZS5cbiMgLSBTaG9wd2FyZSBzb3VyY2UgY29kZSBhbmQgZ2VuZXJhdGVkIEpXVCBrZXlzIGxpdmUgaW4gbmFtZWQgdm9sdW1lcyBzbyByZWRlcGxveXMgcmVtYWluIHN0YWJsZS5cbiMgLSBGYWlsZWQgbWVzc2VuZ2VyIGpvYnMgcmVtYWluIGluIHRoZSBgZmFpbGVkYCBxdWV1ZSBmb3IgbWFudWFsIHJldHJ5IHZpYSBTaG9wd2FyZSBjb25zb2xlIGNvbW1hbmRzLlxuXG54LXNob3B3YXJlLWVudjogJnNob3B3YXJlLWVudlxuICBBUFBfRU5WOiBcIiR7QVBQX0VOVjotcHJvZH1cIlxuICBBUFBfU0VDUkVUOiBcIiR7QVBQX1NFQ1JFVH1cIlxuICBJTlNUQU5DRV9JRDogXCIke0lOU1RBTkNFX0lEfVwiXG4gIEFQUF9VUkw6IFwiJHtBUFBfVVJMfVwiXG4gIEVOQUJMRV9ERU1PX0RBVEE6IFwiJHtFTkFCTEVfREVNT19EQVRBOi0xfVwiXG4gIFRSVVNURURfUFJPWElFUzogXCIke1RSVVNURURfUFJPWElFUzotcHJpdmF0ZV9yYW5nZXN9XCJcbiAgU1lNRk9OWV9UUlVTVEVEX1BST1hJRVM6IFwiJHtTWU1GT05ZX1RSVVNURURfUFJPWElFUzotcHJpdmF0ZV9yYW5nZXN9XCJcbiAgU1lNRk9OWV9UUlVTVEVEX0hFQURFUlM6IFwiJHtTWU1GT05ZX1RSVVNURURfSEVBREVSUzoteC1mb3J3YXJkZWQtZm9yLHgtZm9yd2FyZGVkLWhvc3QseC1mb3J3YXJkZWQtcHJvdG8seC1mb3J3YXJkZWQtcG9ydCx4LWZvcndhcmRlZC1wcmVmaXh9XCJcbiAgREFUQUJBU0VfSE9TVDogXCJkYXRhYmFzZVwiXG4gIERBVEFCQVNFX1BPUlQ6IFwiMzMwNlwiXG4gIERBVEFCQVNFX05BTUU6IFwiJHtEQVRBQkFTRV9OQU1FOi1zaG9wd2FyZX1cIlxuICBEQVRBQkFTRV9VU0VSOiBcIiR7REFUQUJBU0VfVVNFUjotc2hvcHdhcmV9XCJcbiAgREFUQUJBU0VfUEFTU1dPUkQ6IFwiJHtEQVRBQkFTRV9QQVNTV09SRH1cIlxuICBEQVRBQkFTRV9VUkw6IFwiJHtEQVRBQkFTRV9VUkx9XCJcbiAgUkVESVNfSE9TVDogXCJyZWRpc1wiXG4gIFJFRElTX1BPUlQ6IFwiNjM3OVwiXG4gIFJFRElTX1BBU1NXT1JEOiBcIiR7UkVESVNfUEFTU1dPUkR9XCJcbiAgTUFJTEVSX0RTTjogXCIke01BSUxFUl9EU046LW51bGw6Ly9sb2NhbGhvc3R9XCJcbiAgTE9DS19EU046IFwiJHtMT0NLX0RTTn1cIlxuICBNRVNTRU5HRVJfVFJBTlNQT1JUX0RTTjogXCIke01FU1NFTkdFUl9UUkFOU1BPUlRfRFNOOi1kb2N0cmluZTovL2RlZmF1bHQ/cXVldWVfbmFtZT1hc3luY31cIlxuICBNRVNTRU5HRVJfVFJBTlNQT1JUX0xPV19QUklPUklUWV9EU046IFwiJHtNRVNTRU5HRVJfVFJBTlNQT1JUX0xPV19QUklPUklUWV9EU046LWRvY3RyaW5lOi8vZGVmYXVsdD9xdWV1ZV9uYW1lPWxvd19wcmlvcml0eX1cIlxuICBNRVNTRU5HRVJfVFJBTlNQT1JUX0ZBSUxVUkVfRFNOOiBcIiR7TUVTU0VOR0VSX1RSQU5TUE9SVF9GQUlMVVJFX0RTTjotZG9jdHJpbmU6Ly9kZWZhdWx0P3F1ZXVlX25hbWU9ZmFpbGVkfVwiXG4gIENPTVBPU0VSX1BMVUdJTl9MT0FERVI6IFwiJHtDT01QT1NFUl9QTFVHSU5fTE9BREVSOi0xfVwiXG4gIFNIT1BXQVJFX0hUVFBfQ0FDSEVfRU5BQkxFRDogXCIke1NIT1BXQVJFX0hUVFBfQ0FDSEVfRU5BQkxFRDotMX1cIlxuICBTSE9QV0FSRV9IVFRQX0RFRkFVTFRfVFRMOiBcIiR7U0hPUFdBUkVfSFRUUF9ERUZBVUxUX1RUTDotNzIwMH1cIlxuICBJTlNUQUxMX0xPQ0FMRTogXCIke0lOU1RBTExfTE9DQUxFOi1lbi1HQn1cIlxuICBJTlNUQUxMX0NVUlJFTkNZOiBcIiR7SU5TVEFMTF9DVVJSRU5DWTotRVVSfVwiXG4gIElOU1RBTExfQURNSU5fVVNFUk5BTUU6IFwiJHtJTlNUQUxMX0FETUlOX1VTRVJOQU1FOi1hZG1pbn1cIlxuICBJTlNUQUxMX0FETUlOX1BBU1NXT1JEOiBcIiR7SU5TVEFMTF9BRE1JTl9QQVNTV09SRH1cIlxuICBQSFBfU0VTU0lPTl9IQU5ETEVSOiBcIiR7UEhQX1NFU1NJT05fSEFORExFUjotcmVkaXN9XCJcbiAgUEhQX1NFU1NJT05fU0FWRV9QQVRIOiBcIiR7UEhQX1NFU1NJT05fU0FWRV9QQVRIfVwiXG4gIFBIUF9TRVNTSU9OX0NPT0tJRV9MSUZFVElNRTogXCIke1BIUF9TRVNTSU9OX0NPT0tJRV9MSUZFVElNRTotMH1cIlxuICBQSFBfU0VTU0lPTl9HQ19NQVhMSUZFVElNRTogXCIke1BIUF9TRVNTSU9OX0dDX01BWExJRkVUSU1FOi0xNDQwfVwiXG4gIFBIUF9NQVhfVVBMT0FEX1NJWkU6IFwiJHtQSFBfTUFYX1VQTE9BRF9TSVpFOi0xMjhNfVwiXG4gIFBIUF9NQVhfRVhFQ1VUSU9OX1RJTUU6IFwiJHtQSFBfTUFYX0VYRUNVVElPTl9USU1FOi0zMDB9XCJcbiAgUEhQX01FTU9SWV9MSU1JVDogXCIke1BIUF9NRU1PUllfTElNSVQ6LTUxMk19XCJcbiAgRlBNX1BNOiBcIiR7RlBNX1BNOi1keW5hbWljfVwiXG4gIEZQTV9QTV9NQVhfQ0hJTERSRU46IFwiJHtGUE1fUE1fTUFYX0NISUxEUkVOOi0yMH1cIlxuICBGUE1fUE1fU1RBUlRfU0VSVkVSUzogXCIke0ZQTV9QTV9TVEFSVF9TRVJWRVJTOi00fVwiXG4gIEZQTV9QTV9NSU5fU1BBUkVfU0VSVkVSUzogXCIke0ZQTV9QTV9NSU5fU1BBUkVfU0VSVkVSUzotMn1cIlxuICBGUE1fUE1fTUFYX1NQQVJFX1NFUlZFUlM6IFwiJHtGUE1fUE1fTUFYX1NQQVJFX1NFUlZFUlM6LTZ9XCJcbiAgQkxVRV9HUkVFTl9ERVBMT1lNRU5UOiBcIiR7QkxVRV9HUkVFTl9ERVBMT1lNRU5UOi0wfVwiXG5cbngtc2hvcHdhcmUtcnVudGltZS12b2x1bWVzOiAmc2hvcHdhcmUtcnVudGltZS12b2x1bWVzXG4gIC0gc2hvcHdhcmUtY29kZTovdmFyL3d3dy9odG1sXG4gIC0gc2hvcHdhcmUtc2VjcmV0czovcnVuL3Nob3B3YXJlLXNlY3JldHNcbiAgLSBmaWxlczovdmFyL3d3dy9odG1sL2ZpbGVzXG4gIC0gdGhlbWU6L3Zhci93d3cvaHRtbC9wdWJsaWMvdGhlbWVcbiAgLSBtZWRpYTovdmFyL3d3dy9odG1sL3B1YmxpYy9tZWRpYVxuICAtIHRodW1ibmFpbDovdmFyL3d3dy9odG1sL3B1YmxpYy90aHVtYm5haWxcbiAgLSBzaXRlbWFwOi92YXIvd3d3L2h0bWwvcHVibGljL3NpdGVtYXBcblxuc2VydmljZXM6XG4gIGRhdGFiYXNlOlxuICAgIGltYWdlOiBteXNxbDo4LjRcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgTVlTUUxfREFUQUJBU0U6IFwiJHtEQVRBQkFTRV9OQU1FOi1zaG9wd2FyZX1cIlxuICAgICAgTVlTUUxfVVNFUjogXCIke0RBVEFCQVNFX1VTRVI6LXNob3B3YXJlfVwiXG4gICAgICBNWVNRTF9QQVNTV09SRDogXCIke0RBVEFCQVNFX1BBU1NXT1JEfVwiXG4gICAgICBNWVNRTF9ST09UX1BBU1NXT1JEOiBcIiR7TVlTUUxfUk9PVF9QQVNTV09SRH1cIlxuICAgIGNvbW1hbmQ6XG4gICAgICAtIC0tY2hhcmFjdGVyLXNldC1zZXJ2ZXI9dXRmOG1iNFxuICAgICAgLSAtLWNvbGxhdGlvbi1zZXJ2ZXI9dXRmOG1iNF91bmljb2RlX2NpXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICAtIENNRC1TSEVMTFxuICAgICAgICAtIG15c3FsYWRtaW4gcGluZyAtaCAxMjcuMC4wLjEgLXVyb290IC1wJCR7TVlTUUxfUk9PVF9QQVNTV09SRH0gLS1zaWxlbnRcbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAyMFxuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcbiAgICB2b2x1bWVzOlxuICAgICAgLSBkYXRhYmFzZS1kYXRhOi92YXIvbGliL215c3FsXG5cbiAgcmVkaXM6XG4gICAgaW1hZ2U6IHJlZGlzOjcuNC1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgUkVESVNfUEFTU1dPUkQ6IFwiJHtSRURJU19QQVNTV09SRH1cIlxuICAgIGNvbW1hbmQ6XG4gICAgICAtIHJlZGlzLXNlcnZlclxuICAgICAgLSAtLWFwcGVuZG9ubHlcbiAgICAgIC0gXCJ5ZXNcIlxuICAgICAgLSAtLXJlcXVpcmVwYXNzXG4gICAgICAtIFwiJHtSRURJU19QQVNTV09SRH1cIlxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgLSBDTUQtU0hFTExcbiAgICAgICAgLSByZWRpcy1jbGkgLWEgXCIkJHtSRURJU19QQVNTV09SRH1cIiBwaW5nIHwgZ3JlcCAtcSBQT05HXG4gICAgICBpbnRlcnZhbDogMTBzXG4gICAgICB0aW1lb3V0OiA1c1xuICAgICAgcmV0cmllczogMjBcbiAgICB2b2x1bWVzOlxuICAgICAgLSByZWRpcy1kYXRhOi9kYXRhXG5cbiAgYm9vdHN0cmFwOlxuICAgIGltYWdlOiAke1NIT1BXQVJFX0NMSV9JTUFHRTotc2hvcHdhcmUvc2hvcHdhcmUtY2xpOjAuMTQuMy1waHAtOC40fVxuICAgIHJlc3RhcnQ6IFwibm9cIlxuICAgIGVudmlyb25tZW50OlxuICAgICAgPDw6ICpzaG9wd2FyZS1lbnZcbiAgICAgIENPTVBPU0VSX0FMTE9XX1NVUEVSVVNFUjogXCIxXCJcbiAgICAgIENPTVBPU0VSX0hPTUU6IFwiL3RtcC9jb21wb3NlclwiXG4gICAgICBTSE9QV0FSRV9WRVJTSU9OOiBcIiR7U0hPUFdBUkVfVkVSU0lPTjotNi43LjEyLjF9XCJcbiAgICAgIFNIT1BXQVJFX0RPQ0tFUl9WRVJTSU9OOiBcIiR7U0hPUFdBUkVfRE9DS0VSX1ZFUlNJT046LTAuMy4wfVwiXG4gICAgICBFTkFCTEVfREVNT19EQVRBOiBcIiR7RU5BQkxFX0RFTU9fREFUQTotMX1cIlxuICAgICAgREVNT19EQVRBX1ZFUlNJT046IFwiJHtERU1PX0RBVEFfVkVSU0lPTjotMi4xLjB9XCJcbiAgICBkZXBlbmRzX29uOlxuICAgICAgZGF0YWJhc2U6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICByZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnRyeXBvaW50OlxuICAgICAgLSAvYmluL3NoXG4gICAgICAtIC1lY1xuICAgICAgLSB8XG4gICAgICAgIG1rZGlyIC1wIC9ydW4vc2hvcHdhcmUtc2VjcmV0cyAvdmFyL3d3dy9odG1sXG5cbiAgICAgICAgaWYgWyAhIC1zIC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW0gXSB8fCBbICEgLXMgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtIF07IHRoZW5cbiAgICAgICAgICBlY2hvIFwiR2VuZXJhdGluZyBKV1Qga2V5cGFpci5cIlxuICAgICAgICAgIG9wZW5zc2wgZ2VucGtleSAtYWxnb3JpdGhtIFJTQSAtb3V0IC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW0gLXBrZXlvcHQgcnNhX2tleWdlbl9iaXRzOjIwNDhcbiAgICAgICAgICBvcGVuc3NsIHJzYSAtcHVib3V0IC1pbiAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXByaXZhdGUucGVtIC1vdXQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtXG4gICAgICAgICAgY2htb2QgNjAwIC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW1cbiAgICAgICAgICBjaG1vZCA2NDQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtXG4gICAgICAgIGZpXG5cbiAgICAgICAgZXhwb3J0IEpXVF9QUklWQVRFX0tFWT1cIiQkKGNhdCAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXByaXZhdGUucGVtKVwiXG4gICAgICAgIGV4cG9ydCBKV1RfUFVCTElDX0tFWT1cIiQkKGNhdCAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXB1YmxpYy5wZW0pXCJcblxuICAgICAgICBpZiBbIC1mIC92YXIvd3d3L2h0bWwvY29tcG9zZXIuanNvbiBdICYmIFsgLWYgL3Zhci93d3cvaHRtbC9iaW4vY29uc29sZSBdICYmIFsgLWYgL3Zhci93d3cvaHRtbC92ZW5kb3IvYXV0b2xvYWQucGhwIF07IHRoZW5cbiAgICAgICAgICBlY2hvIFwiU2hvcHdhcmUgc291cmNlIGFscmVhZHkgZXhpc3RzLiBTa2lwcGluZyBib290c3RyYXAuXCJcbiAgICAgICAgICBleGl0IDBcbiAgICAgICAgZmlcblxuICAgICAgICBpZiBmaW5kIC92YXIvd3d3L2h0bWwgLW1pbmRlcHRoIDEgLW1heGRlcHRoIDEgLXByaW50IC1xdWl0IHwgZ3JlcCAtcSAuOyB0aGVuXG4gICAgICAgICAgZWNobyBcIkluY29tcGxldGUgU2hvcHdhcmUgc291cmNlIGRldGVjdGVkLiBDbGVhbmluZyBib290c3RyYXAgdm9sdW1lLlwiXG4gICAgICAgICAgZmluZCAvdmFyL3d3dy9odG1sIC1taW5kZXB0aCAxIC1tYXhkZXB0aCAxIC1leGVjIHJtIC1yZiB7fSArXG4gICAgICAgIGZpXG5cbiAgICAgICAgdG1wX2Rpcj1cIiQkKG1rdGVtcCAtZClcIlxuXG4gICAgICAgICMgQ29tcG9zZXIgPj0yLjkgcmVmdXNlcyB0byBpbnN0YWxsIHBpbm5lZCB2ZXJzaW9ucyB0aGF0IGFyZSBhZmZlY3RlZCBieVxuICAgICAgICAjIHNlY3VyaXR5IGFkdmlzb3JpZXMgcHVibGlzaGVkIGxhdGVyLiBLZWVwIHRoZSBwaW5uZWQgYm9vdHN0cmFwIGRldGVybWluaXN0aWMuXG4gICAgICAgIGNvbXBvc2VyIGNvbmZpZyAtZyBhdWRpdC5ibG9jay1pbnNlY3VyZSBmYWxzZSAyPi9kZXYvbnVsbCB8fCB0cnVlXG5cbiAgICAgICAgY29tcG9zZXIgY3JlYXRlLXByb2plY3QgLS1uby1pbnRlcmFjdGlvbiAtLXByZWZlci1kaXN0IFwic2hvcHdhcmUvcHJvZHVjdGlvbjoke1NIT1BXQVJFX1ZFUlNJT059XCIgXCIkJHRtcF9kaXJcIlxuICAgICAgICBjZCBcIiQkdG1wX2RpclwiXG4gICAgICAgIGNvbXBvc2VyIHJlcXVpcmUgLS1uby1pbnRlcmFjdGlvbiBcInNob3B3YXJlL2RvY2tlcjoke1NIT1BXQVJFX0RPQ0tFUl9WRVJTSU9OfVwiXG5cbiAgICAgICAgaWYgWyBcIiR7RU5BQkxFX0RFTU9fREFUQX1cIiA9IFwiMVwiIF07IHRoZW5cbiAgICAgICAgICBjb21wb3NlciByZXF1aXJlIC0tbm8taW50ZXJhY3Rpb24gLS1wcmVmZXItZGlzdCBcInN3YWcvZGVtby1kYXRhOiR7REVNT19EQVRBX1ZFUlNJT059XCJcbiAgICAgICAgZmlcblxuICAgICAgICBzaG9wd2FyZS1jbGkgcHJvamVjdCBjaSBcIiQkdG1wX2RpclwiXG4gICAgICAgIGNwIC1hIFwiJCR0bXBfZGlyXCIvLiAvdmFyL3d3dy9odG1sL1xuICAgIHZvbHVtZXM6XG4gICAgICAtIHNob3B3YXJlLWNvZGU6L3Zhci93d3cvaHRtbFxuICAgICAgLSBzaG9wd2FyZS1zZWNyZXRzOi9ydW4vc2hvcHdhcmUtc2VjcmV0c1xuXG4gIGluaXQtcGVybWlzc2lvbnM6XG4gICAgaW1hZ2U6IGFscGluZTozLjIxXG4gICAgcmVzdGFydDogXCJub1wiXG4gICAgY29tbWFuZDpcbiAgICAgIC0gc2hcbiAgICAgIC0gLWVjXG4gICAgICAtIHxcbiAgICAgICAgbWtkaXIgLXAgXFxcbiAgICAgICAgICAvdmFyL3d3dy9odG1sL2ZpbGVzIFxcXG4gICAgICAgICAgL3Zhci93d3cvaHRtbC9wdWJsaWMvdGhlbWUgXFxcbiAgICAgICAgICAvdmFyL3d3dy9odG1sL3B1YmxpYy9tZWRpYSBcXFxuICAgICAgICAgIC92YXIvd3d3L2h0bWwvcHVibGljL3RodW1ibmFpbCBcXFxuICAgICAgICAgIC92YXIvd3d3L2h0bWwvcHVibGljL3NpdGVtYXAgXFxcbiAgICAgICAgICAvcnVuL3Nob3B3YXJlLXNlY3JldHNcbiAgICAgICAgY2hvd24gLVIgODI6ODIgL3Zhci93d3cvaHRtbCAvcnVuL3Nob3B3YXJlLXNlY3JldHNcbiAgICBkZXBlbmRzX29uOlxuICAgICAgYm9vdHN0cmFwOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgIHZvbHVtZXM6ICpzaG9wd2FyZS1ydW50aW1lLXZvbHVtZXNcblxuICBpbml0OlxuICAgIGltYWdlOiAke1NIT1BXQVJFX0JBU0VfSU1BR0U6LXNob3B3YXJlL2RvY2tlci1iYXNlOjguNC4xOS1uZ2lueH1cbiAgICByZXN0YXJ0OiBcIm5vXCJcbiAgICBlbnRyeXBvaW50OlxuICAgICAgLSAvYmluL3NoXG4gICAgICAtIC1lY1xuICAgICAgLSB8XG4gICAgICAgIGV4cG9ydCBKV1RfUFJJVkFURV9LRVk9XCIkKGNhdCAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXByaXZhdGUucGVtKVwiXG4gICAgICAgIGV4cG9ydCBKV1RfUFVCTElDX0tFWT1cIiQoY2F0IC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHVibGljLnBlbSlcIlxuXG4gICAgICAgIC9zZXR1cFxuXG4gICAgICAgIGlmIFsgXCIke0VOQUJMRV9ERU1PX0RBVEE6LTF9XCIgIT0gXCIxXCIgXTsgdGhlblxuICAgICAgICAgIGV4aXQgMFxuICAgICAgICBmaVxuXG4gICAgICAgIGNkIC92YXIvd3d3L2h0bWxcblxuICAgICAgICBlY2hvIFwiRGVtbyBkYXRhIGVuYWJsZWQuIFJlZnJlc2hpbmcgcGx1Z2luIGxpc3QuXCJcbiAgICAgICAgcGhwIGJpbi9jb25zb2xlIC1uIHBsdWdpbjpyZWZyZXNoXG5cbiAgICAgICAgaWYgWyAhIC1kIC92YXIvd3d3L2h0bWwvY3VzdG9tL3BsdWdpbnMvU3dhZ1BsYXRmb3JtRGVtb0RhdGEgXTsgdGhlblxuICAgICAgICAgIGVjaG8gXCJTd2FnUGxhdGZvcm1EZW1vRGF0YSBpcyBub3QgcHJlc2VudCBpbiB0aGUgdm9sdW1lLlwiXG4gICAgICAgICAgZWNobyBcIkNvbnRpbnVpbmcgd2l0aG91dCBkZW1vIGRhdGEgYWN0aXZhdGlvbi5cIlxuICAgICAgICAgIGV4aXQgMFxuICAgICAgICBmaVxuXG4gICAgICAgIGlmICEgcGx1Z2luX3N0YXRlPVwiJCQoXG4gICAgICAgICAgcGhwIGJpbi9jb25zb2xlIC1uIHBsdWdpbjpsaXN0IC0tanNvbiB8IHBocCAtciAnXG4gICAgICAgICAgICAkJHBsdWdpbnMgPSBqc29uX2RlY29kZShzdHJlYW1fZ2V0X2NvbnRlbnRzKFNURElOKSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzX2FycmF5KCQkcGx1Z2lucykpIHtcbiAgICAgICAgICAgICAgZndyaXRlKFNUREVSUiwgXCJVbmFibGUgdG8gcGFyc2UgcGx1Z2luIGxpc3RcXG5cIik7XG4gICAgICAgICAgICAgIGV4aXQoMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcmVhY2ggKCQkcGx1Z2lucyBhcyAkJHBsdWdpbikge1xuICAgICAgICAgICAgICBpZiAoKCQkcGx1Z2luW1wibmFtZVwiXSA/PyBudWxsKSAhPT0gXCJTd2FnUGxhdGZvcm1EZW1vRGF0YVwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAkJGluc3RhbGxlZCA9ICgkJHBsdWdpbltcImluc3RhbGxlZFwiXSA/PyBmYWxzZSkgPyBcIjFcIiA6IFwiMFwiO1xuICAgICAgICAgICAgICAkJGFjdGl2ZSA9ICgkJHBsdWdpbltcImFjdGl2ZVwiXSA/PyBmYWxzZSkgPyBcIjFcIiA6IFwiMFwiO1xuXG4gICAgICAgICAgICAgIGVjaG8gJCRpbnN0YWxsZWQgLiBcIjpcIiAuICQkYWN0aXZlO1xuICAgICAgICAgICAgICBleGl0KDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmd3JpdGUoU1RERVJSLCBcIlN3YWdQbGF0Zm9ybURlbW9EYXRhIG5vdCBmb3VuZCBpbiBwbHVnaW4gbGlzdFxcblwiKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgICAgJ1xuICAgICAgICApXCI7IHRoZW5cbiAgICAgICAgICBlY2hvIFwiVW5hYmxlIHRvIHJlc29sdmUgU3dhZ1BsYXRmb3JtRGVtb0RhdGEgc3RhdGUuXCJcbiAgICAgICAgICBlY2hvIFwiQ29udGludWluZyB3aXRob3V0IGRlbW8gZGF0YSBhY3RpdmF0aW9uLlwiXG4gICAgICAgICAgZXhpdCAwXG4gICAgICAgIGZpXG5cbiAgICAgICAgY2FzZSBcIiQke3BsdWdpbl9zdGF0ZX1cIiBpblxuICAgICAgICAgIFwiMDowXCIpXG4gICAgICAgICAgICBlY2hvIFwiSW5zdGFsbGluZyBhbmQgYWN0aXZhdGluZyBTd2FnUGxhdGZvcm1EZW1vRGF0YS5cIlxuICAgICAgICAgICAgcGhwIGJpbi9jb25zb2xlIC1uIHBsdWdpbjppbnN0YWxsIC0tYWN0aXZhdGUgU3dhZ1BsYXRmb3JtRGVtb0RhdGFcbiAgICAgICAgICAgIDs7XG4gICAgICAgICAgXCIxOjBcIilcbiAgICAgICAgICAgIGVjaG8gXCJBY3RpdmF0aW5nIGV4aXN0aW5nIFN3YWdQbGF0Zm9ybURlbW9EYXRhIHBsdWdpbi5cIlxuICAgICAgICAgICAgcGhwIGJpbi9jb25zb2xlIC1uIHBsdWdpbjphY3RpdmF0ZSBTd2FnUGxhdGZvcm1EZW1vRGF0YVxuICAgICAgICAgICAgOztcbiAgICAgICAgICBcIjE6MVwiKVxuICAgICAgICAgICAgZWNobyBcIlN3YWdQbGF0Zm9ybURlbW9EYXRhIGlzIGFscmVhZHkgYWN0aXZlLlwiXG4gICAgICAgICAgICA7O1xuICAgICAgICAgICopXG4gICAgICAgICAgICBlY2hvIFwiVW5leHBlY3RlZCBTd2FnUGxhdGZvcm1EZW1vRGF0YSBzdGF0ZTogJCR7cGx1Z2luX3N0YXRlfVwiXG4gICAgICAgICAgICBlY2hvIFwiQ29udGludWluZyB3aXRob3V0IGRlbW8gZGF0YSBhY3RpdmF0aW9uLlwiXG4gICAgICAgICAgICBleGl0IDBcbiAgICAgICAgICAgIDs7XG4gICAgICAgIGVzYWNcbiAgICBlbnZpcm9ubWVudDogKnNob3B3YXJlLWVudlxuICAgIGRlcGVuZHNfb246XG4gICAgICBpbml0LXBlcm1pc3Npb25zOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgICAgZGF0YWJhc2U6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICByZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICB2b2x1bWVzOiAqc2hvcHdhcmUtcnVudGltZS12b2x1bWVzXG5cbiAgc2hvcHdhcmU6XG4gICAgaW1hZ2U6ICR7U0hPUFdBUkVfQkFTRV9JTUFHRTotc2hvcHdhcmUvZG9ja2VyLWJhc2U6OC40LjE5LW5naW54fVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZXhwb3NlOlxuICAgICAgLSBcIjgwMDBcIlxuICAgIGVudHJ5cG9pbnQ6XG4gICAgICAtIC9iaW4vc2hcbiAgICAgIC0gLWVjXG4gICAgICAtIHxcbiAgICAgICAgZXhwb3J0IEpXVF9QUklWQVRFX0tFWT1cIiQoY2F0IC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW0pXCJcbiAgICAgICAgZXhwb3J0IEpXVF9QVUJMSUNfS0VZPVwiJChjYXQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtKVwiXG4gICAgICAgIGV4ZWMgL3Vzci9iaW4vc3VwZXJ2aXNvcmQgLWMgL2V0Yy9zdXBlcnZpc29yZC5jb25mXG4gICAgZW52aXJvbm1lbnQ6ICpzaG9wd2FyZS1lbnZcbiAgICBkZXBlbmRzX29uOlxuICAgICAgaW5pdDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbiAgICB2b2x1bWVzOiAqc2hvcHdhcmUtcnVudGltZS12b2x1bWVzXG5cbiAgd29ya2VyOlxuICAgIGltYWdlOiAke1NIT1BXQVJFX0JBU0VfSU1BR0U6LXNob3B3YXJlL2RvY2tlci1iYXNlOjguNC4xOS1uZ2lueH1cbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudHJ5cG9pbnQ6XG4gICAgICAtIC9iaW4vc2hcbiAgICAgIC0gLWVjXG4gICAgICAtIHxcbiAgICAgICAgZXhwb3J0IEpXVF9QUklWQVRFX0tFWT1cIiQoY2F0IC9ydW4vc2hvcHdhcmUtc2VjcmV0cy9qd3QtcHJpdmF0ZS5wZW0pXCJcbiAgICAgICAgZXhwb3J0IEpXVF9QVUJMSUNfS0VZPVwiJChjYXQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wdWJsaWMucGVtKVwiXG4gICAgICAgIGV4ZWMgcGhwIGJpbi9jb25zb2xlIG1lc3Nlbmdlcjpjb25zdW1lIGFzeW5jIGxvd19wcmlvcml0eSAtLXRpbWUtbGltaXQ9MzAwIC0tbWVtb3J5LWxpbWl0PTUxMk1cbiAgICBlbnZpcm9ubWVudDogKnNob3B3YXJlLWVudlxuICAgIGRlcGVuZHNfb246XG4gICAgICBpbml0OlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgIHZvbHVtZXM6ICpzaG9wd2FyZS1ydW50aW1lLXZvbHVtZXNcblxuICBzY2hlZHVsZXI6XG4gICAgaW1hZ2U6ICR7U0hPUFdBUkVfQkFTRV9JTUFHRTotc2hvcHdhcmUvZG9ja2VyLWJhc2U6OC40LjE5LW5naW54fVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZW50cnlwb2ludDpcbiAgICAgIC0gL2Jpbi9zaFxuICAgICAgLSAtZWNcbiAgICAgIC0gfFxuICAgICAgICBleHBvcnQgSldUX1BSSVZBVEVfS0VZPVwiJChjYXQgL3J1bi9zaG9wd2FyZS1zZWNyZXRzL2p3dC1wcml2YXRlLnBlbSlcIlxuICAgICAgICBleHBvcnQgSldUX1BVQkxJQ19LRVk9XCIkKGNhdCAvcnVuL3Nob3B3YXJlLXNlY3JldHMvand0LXB1YmxpYy5wZW0pXCJcbiAgICAgICAgZXhlYyBwaHAgYmluL2NvbnNvbGUgc2NoZWR1bGVkLXRhc2s6cnVuXG4gICAgZW52aXJvbm1lbnQ6ICpzaG9wd2FyZS1lbnZcbiAgICBkZXBlbmRzX29uOlxuICAgICAgaW5pdDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbiAgICB2b2x1bWVzOiAqc2hvcHdhcmUtcnVudGltZS12b2x1bWVzXG5cbnZvbHVtZXM6XG4gIGRhdGFiYXNlLWRhdGE6XG4gIHJlZGlzLWRhdGE6XG4gIHNob3B3YXJlLWNvZGU6XG4gIHNob3B3YXJlLXNlY3JldHM6XG4gIGZpbGVzOlxuICB0aGVtZTpcbiAgbWVkaWE6XG4gIHRodW1ibmFpbDpcbiAgc2l0ZW1hcDpcbiIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5hcHBfdXJsID0gXCJodHRwOi8vJHttYWluX2RvbWFpbn1cIlxuYXBwX3NlY3JldCA9IFwiJHtoYXNoOjY0fVwiXG5pbnN0YW5jZV9pZCA9IFwiJHtoYXNoOjMyfVwiXG5kYXRhYmFzZV9uYW1lID0gXCJzaG9wd2FyZVwiXG5kYXRhYmFzZV91c2VyID0gXCJzaG9wd2FyZVwiXG5kYXRhYmFzZV9wYXNzd29yZCA9IFwiJHtoYXNoOjMyfVwiXG5teXNxbF9yb290X3Bhc3N3b3JkID0gXCIke2hhc2g6MzJ9XCJcbnJlZGlzX3Bhc3N3b3JkID0gXCIke2hhc2g6MzJ9XCJcbmRhdGFiYXNlX3VybCA9IFwibXlzcWw6Ly8ke2RhdGFiYXNlX3VzZXJ9OiR7ZGF0YWJhc2VfcGFzc3dvcmR9QGRhdGFiYXNlOjMzMDYvJHtkYXRhYmFzZV9uYW1lfT9jaGFyc2V0PXV0ZjhtYjRcIlxubG9ja19kc24gPSBcInJlZGlzOi8vOiR7cmVkaXNfcGFzc3dvcmR9QHJlZGlzOjYzNzkvMVwiXG5waHBfc2Vzc2lvbl9zYXZlX3BhdGggPSBcInRjcDovL3JlZGlzOjYzNzk/YXV0aD0ke3JlZGlzX3Bhc3N3b3JkfVwiXG5pbnN0YWxsX2FkbWluX3VzZXJuYW1lID0gXCJhZG1pblwiXG5pbnN0YWxsX2FkbWluX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjIwfVwiXG5zaG9wd2FyZV92ZXJzaW9uID0gXCI2LjcuMTIuMVwiXG5zaG9wd2FyZV9kb2NrZXJfdmVyc2lvbiA9IFwiMC4zLjBcIlxuc2hvcHdhcmVfY2xpX2ltYWdlID0gXCJzaG9wd2FyZS9zaG9wd2FyZS1jbGk6MC4xNC4zLXBocC04LjRcIlxuc2hvcHdhcmVfYmFzZV9pbWFnZSA9IFwic2hvcHdhcmUvZG9ja2VyLWJhc2U6OC40LjE5LW5naW54XCJcbmVuYWJsZV9kZW1vX2RhdGEgPSBcIjFcIlxuZGVtb19kYXRhX3ZlcnNpb24gPSBcIjIuMS4wXCJcblxuW2NvbmZpZ11cblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwic2hvcHdhcmVcIlxucG9ydCA9IDgwMDBcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcblxuW2NvbmZpZy5lbnZdXG5BUFBfRU5WID0gXCJwcm9kXCJcbkFQUF9VUkwgPSBcIiR7YXBwX3VybH1cIlxuQVBQX1NFQ1JFVCA9IFwiJHthcHBfc2VjcmV0fVwiXG5JTlNUQU5DRV9JRCA9IFwiJHtpbnN0YW5jZV9pZH1cIlxuU0hPUFdBUkVfVkVSU0lPTiA9IFwiJHtzaG9wd2FyZV92ZXJzaW9ufVwiXG5TSE9QV0FSRV9ET0NLRVJfVkVSU0lPTiA9IFwiJHtzaG9wd2FyZV9kb2NrZXJfdmVyc2lvbn1cIlxuU0hPUFdBUkVfQ0xJX0lNQUdFID0gXCIke3Nob3B3YXJlX2NsaV9pbWFnZX1cIlxuU0hPUFdBUkVfQkFTRV9JTUFHRSA9IFwiJHtzaG9wd2FyZV9iYXNlX2ltYWdlfVwiXG5FTkFCTEVfREVNT19EQVRBID0gXCIke2VuYWJsZV9kZW1vX2RhdGF9XCJcbkRFTU9fREFUQV9WRVJTSU9OID0gXCIke2RlbW9fZGF0YV92ZXJzaW9ufVwiXG5EQVRBQkFTRV9IT1NUID0gXCJkYXRhYmFzZVwiXG5EQVRBQkFTRV9QT1JUID0gXCIzMzA2XCJcbkRBVEFCQVNFX05BTUUgPSBcIiR7ZGF0YWJhc2VfbmFtZX1cIlxuREFUQUJBU0VfVVNFUiA9IFwiJHtkYXRhYmFzZV91c2VyfVwiXG5EQVRBQkFTRV9QQVNTV09SRCA9IFwiJHtkYXRhYmFzZV9wYXNzd29yZH1cIlxuREFUQUJBU0VfVVJMID0gXCIke2RhdGFiYXNlX3VybH1cIlxuTVlTUUxfUk9PVF9QQVNTV09SRCA9IFwiJHtteXNxbF9yb290X3Bhc3N3b3JkfVwiXG5SRURJU19IT1NUID0gXCJyZWRpc1wiXG5SRURJU19QT1JUID0gXCI2Mzc5XCJcblJFRElTX1BBU1NXT1JEID0gXCIke3JlZGlzX3Bhc3N3b3JkfVwiXG5NQUlMRVJfRFNOID0gXCJudWxsOi8vbG9jYWxob3N0XCJcbkxPQ0tfRFNOID0gXCIke2xvY2tfZHNufVwiXG5UUlVTVEVEX1BST1hJRVMgPSBcInByaXZhdGVfcmFuZ2VzXCJcblNZTUZPTllfVFJVU1RFRF9QUk9YSUVTID0gXCJwcml2YXRlX3Jhbmdlc1wiXG5TWU1GT05ZX1RSVVNURURfSEVBREVSUyA9IFwieC1mb3J3YXJkZWQtZm9yLHgtZm9yd2FyZGVkLWhvc3QseC1mb3J3YXJkZWQtcHJvdG8seC1mb3J3YXJkZWQtcG9ydCx4LWZvcndhcmRlZC1wcmVmaXhcIlxuQ09NUE9TRVJfUExVR0lOX0xPQURFUiA9IFwiMVwiXG5TSE9QV0FSRV9IVFRQX0NBQ0hFX0VOQUJMRUQgPSBcIjFcIlxuU0hPUFdBUkVfSFRUUF9ERUZBVUxUX1RUTCA9IFwiNzIwMFwiXG5JTlNUQUxMX0xPQ0FMRSA9IFwiZW4tR0JcIlxuSU5TVEFMTF9DVVJSRU5DWSA9IFwiRVVSXCJcbklOU1RBTExfQURNSU5fVVNFUk5BTUUgPSBcIiR7aW5zdGFsbF9hZG1pbl91c2VybmFtZX1cIlxuSU5TVEFMTF9BRE1JTl9QQVNTV09SRCA9IFwiJHtpbnN0YWxsX2FkbWluX3Bhc3N3b3JkfVwiXG5QSFBfU0VTU0lPTl9IQU5ETEVSID0gXCJyZWRpc1wiXG5QSFBfU0VTU0lPTl9TQVZFX1BBVEggPSBcIiR7cGhwX3Nlc3Npb25fc2F2ZV9wYXRofVwiXG5QSFBfU0VTU0lPTl9DT09LSUVfTElGRVRJTUUgPSBcIjBcIlxuUEhQX1NFU1NJT05fR0NfTUFYTElGRVRJTUUgPSBcIjE0NDBcIlxuUEhQX01BWF9VUExPQURfU0laRSA9IFwiMTI4TVwiXG5QSFBfTUFYX0VYRUNVVElPTl9USU1FID0gXCIzMDBcIlxuUEhQX01FTU9SWV9MSU1JVCA9IFwiNTEyTVwiXG5GUE1fUE0gPSBcImR5bmFtaWNcIlxuRlBNX1BNX01BWF9DSElMRFJFTiA9IFwiMjBcIlxuRlBNX1BNX1NUQVJUX1NFUlZFUlMgPSBcIjRcIlxuRlBNX1BNX01JTl9TUEFSRV9TRVJWRVJTID0gXCIyXCJcbkZQTV9QTV9NQVhfU1BBUkVfU0VSVkVSUyA9IFwiNlwiXG5NRVNTRU5HRVJfVFJBTlNQT1JUX0RTTiA9IFwiZG9jdHJpbmU6Ly9kZWZhdWx0P3F1ZXVlX25hbWU9YXN5bmNcIlxuTUVTU0VOR0VSX1RSQU5TUE9SVF9MT1dfUFJJT1JJVFlfRFNOID0gXCJkb2N0cmluZTovL2RlZmF1bHQ/cXVldWVfbmFtZT1sb3dfcHJpb3JpdHlcIlxuTUVTU0VOR0VSX1RSQU5TUE9SVF9GQUlMVVJFX0RTTiA9IFwiZG9jdHJpbmU6Ly9kZWZhdWx0P3F1ZXVlX25hbWU9ZmFpbGVkXCJcbkJMVUVfR1JFRU5fREVQTE9ZTUVOVCA9IFwiMFwiXG4iCn0=Links
Tags
e-commerce, shop, php, mysql, redis
Version: 6.7.8.2