diff --git a/.github/workflows/deploy-push.yml b/.github/workflows/deploy-push.yml index e533293e6..864c296e9 100644 --- a/.github/workflows/deploy-push.yml +++ b/.github/workflows/deploy-push.yml @@ -112,7 +112,7 @@ jobs: - name: Deploy to hosting environment env: WORKFLOW_ID: ${{ 'deploy-application.yml' }} - uses: actions/github-script@v9.0.0 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.ADMIN_GITHUB_TOKEN }} script: |- diff --git a/CHANGELOG.md b/CHANGELOG.md index 2848afaef..017c77d4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines. +## [0.1.53](https://github.com/CodingBlackFemales/wordpress/compare/v0.1.52...v0.1.53) (2026-08-20) ## [0.1.52](https://github.com/CodingBlackFemales/wordpress/compare/v0.1.51...v0.1.52) (2026-08-20) ## [0.1.51](https://github.com/CodingBlackFemales/wordpress/compare/v0.1.50...v0.1.51) (2026-07-31) ## [0.1.50](https://github.com/CodingBlackFemales/wordpress/compare/v0.1.49...v0.1.50) (2026-06-04) diff --git a/composer.json b/composer.json index 255e03e76..1ebf39674 100644 --- a/composer.json +++ b/composer.json @@ -56,12 +56,12 @@ "php": ">=8.5", "composer/installers": "^2.3.0", "humanmade/s3-uploads": "^3.0.11", - "johnpbloch/wordpress": "^6.9.1", "koodimonni-language/en_gb": ">=6.9.1", "oscarotero/env": "^2.1.1", "roots/bedrock-autoloader": "^1.0.4", "roots/bedrock-disallow-indexing": "^2.0.0", "roots/multisite-url-fixer": "^1.1.0", + "roots/wordpress": "^7.1", "roots/wp-config": "1.0.0", "serenichron/learndash-bulk-lessons-or-topics": "^1.2.1", "sleiman/airtable-php": "^3.0.0", @@ -121,7 +121,7 @@ "preferred-install": "dist", "allow-plugins": { "composer/installers": true, - "johnpbloch/wordpress-core-installer": true, + "roots/wordpress-core-installer": true, "koodimonni/composer-dropin-installer": true, "dealerdirect/phpcodesniffer-composer-installer": true, "mnsami/composer-custom-directory-installer": false @@ -166,14 +166,15 @@ "php -r \"copy('.env.example', '.env');\"" ], "post-install-cmd": [ - "@configure-ssp", + "@install-ssp", "if [ ! -e .env ]; then cp .env.dist .env; fi", "if [ ! -e wp-cli.yml ]; then cp wp-cli.yml.dist wp-cli.yml; fi" ], "post-update-cmd": [ - "@configure-ssp" + "@update-ssp" ], - "configure-ssp": "cd web/app/plugins/cbf-multisite;composer install;cd ../../../..", + "install-ssp": "cd web/app/plugins/cbf-multisite;composer install;cd ../../../..", + "update-ssp": "cd web/app/plugins/cbf-multisite;composer update;cd ../../../..", "lint": "phpcs --standard=phpcs.xml", "lint:all": "@lint ./web/app/plugins/cbf-multisite ./web/app/themes/cbf-academy ./web/app/themes/cbf-jobs", "fix": "phpcbf --standard=phpcs.xml", diff --git a/composer.lock b/composer.lock index f4e2eb086..546b175a2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "25418c3dc8870c69d786c3bf6e7236cf", + "content-hash": "f860951cc422a1977a8f74af7adb869f", "packages": [ { "name": "aws/aws-crt-php", @@ -1096,154 +1096,6 @@ }, "time": "2026-02-25T17:57:09+00:00" }, - { - "name": "johnpbloch/wordpress", - "version": "6.9.7", - "source": { - "type": "git", - "url": "https://github.com/johnpbloch/wordpress.git", - "reference": "596eaa64c2f1f8760f14130f206833846e7ea540" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/johnpbloch/wordpress/zipball/596eaa64c2f1f8760f14130f206833846e7ea540", - "reference": "596eaa64c2f1f8760f14130f206833846e7ea540", - "shasum": "" - }, - "require": { - "johnpbloch/wordpress-core": "6.9.7", - "johnpbloch/wordpress-core-installer": "^1.0 || ^2.0", - "php": ">=7.0.0" - }, - "type": "package", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" - } - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "docs": "https://developer.wordpress.org/", - "forum": "https://wordpress.org/support/", - "irc": "irc://irc.freenode.net/wordpress", - "issues": "https://core.trac.wordpress.org/", - "source": "https://core.trac.wordpress.org/browser" - }, - "time": "2026-08-12T22:40:34+00:00" - }, - { - "name": "johnpbloch/wordpress-core", - "version": "6.9.7", - "source": { - "type": "git", - "url": "https://github.com/johnpbloch/wordpress-core.git", - "reference": "6b9fb51da302606a7f4e43da0153a77281d24fdd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/johnpbloch/wordpress-core/zipball/6b9fb51da302606a7f4e43da0153a77281d24fdd", - "reference": "6b9fb51da302606a7f4e43da0153a77281d24fdd", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=7.2.24" - }, - "provide": { - "wordpress/core-implementation": "6.9.7" - }, - "type": "wordpress-core", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" - } - ], - "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], - "support": { - "forum": "https://wordpress.org/support/", - "irc": "irc://irc.freenode.net/wordpress", - "issues": "https://core.trac.wordpress.org/", - "source": "https://core.trac.wordpress.org/browser", - "wiki": "https://codex.wordpress.org/" - }, - "time": "2026-08-12T22:40:30+00:00" - }, - { - "name": "johnpbloch/wordpress-core-installer", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/johnpbloch/wordpress-core-installer.git", - "reference": "237faae9a60a4a2e1d45dce1a5836ffa616de63e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/johnpbloch/wordpress-core-installer/zipball/237faae9a60a4a2e1d45dce1a5836ffa616de63e", - "reference": "237faae9a60a4a2e1d45dce1a5836ffa616de63e", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.6.0" - }, - "conflict": { - "composer/installers": "<1.0.6" - }, - "require-dev": { - "composer/composer": "^1.0 || ^2.0", - "phpunit/phpunit": ">=5.7.27" - }, - "type": "composer-plugin", - "extra": { - "class": "johnpbloch\\Composer\\WordPressCorePlugin" - }, - "autoload": { - "psr-0": { - "johnpbloch\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "John P. Bloch", - "email": "me@johnpbloch.com" - } - ], - "description": "A custom installer to handle deploying WordPress with composer", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/johnpbloch/wordpress-core-installer/issues", - "source": "https://github.com/johnpbloch/wordpress-core-installer/tree/master" - }, - "time": "2020-04-16T21:44:57+00:00" - }, { "name": "koodimonni-language/en_gb", "version": "7.1", @@ -2137,10 +1989,10 @@ }, { "name": "koodimonni-theme-language/twentynineteen-en_gb", - "version": "3.3", + "version": "3.4", "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/translation/theme/twentynineteen/3.3/en_GB.zip" + "url": "https://downloads.wordpress.org/translation/theme/twentynineteen/3.4/en_GB.zip" }, "require": { "koodimonni/composer-dropin-installer": ">=0.2.3" @@ -2156,10 +2008,10 @@ }, { "name": "koodimonni-theme-language/twentyseventeen-en_gb", - "version": "4.1", + "version": "4.2", "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/translation/theme/twentyseventeen/4.1/en_GB.zip" + "url": "https://downloads.wordpress.org/translation/theme/twentyseventeen/4.2/en_GB.zip" }, "require": { "koodimonni/composer-dropin-installer": ">=0.2.3" @@ -2251,10 +2103,10 @@ }, { "name": "koodimonni-theme-language/twentytwenty-en_gb", - "version": "3.1", + "version": "3.2", "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/translation/theme/twentytwenty/3.1/en_GB.zip" + "url": "https://downloads.wordpress.org/translation/theme/twentytwenty/3.2/en_GB.zip" }, "require": { "koodimonni/composer-dropin-installer": ">=0.2.3" @@ -3090,6 +2942,187 @@ }, "time": "2017-10-17T21:07:50+00:00" }, + { + "name": "roots/wordpress", + "version": "7.1", + "source": { + "type": "git", + "url": "https://github.com/roots/wordpress.git", + "reference": "eb3d108f216618a858dcaed691e00e68f0ccff9f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/roots/wordpress/zipball/eb3d108f216618a858dcaed691e00e68f0ccff9f", + "reference": "eb3d108f216618a858dcaed691e00e68f0ccff9f", + "shasum": "" + }, + "require": { + "roots/wordpress-core-installer": "^4.0", + "roots/wordpress-no-content": "self.version" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT", + "GPL-2.0-or-later" + ], + "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", + "homepage": "https://wordpress.org/", + "keywords": [ + "blog", + "cms", + "wordpress" + ], + "support": { + "issues": "https://github.com/roots/wordpress/issues", + "source": "https://github.com/roots/wordpress/tree/7.1" + }, + "funding": [ + { + "url": "https://github.com/roots", + "type": "github" + } + ], + "time": "2026-03-22T13:26:54+00:00" + }, + { + "name": "roots/wordpress-core-installer", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/roots/wordpress-core-installer.git", + "reference": "85d3589252eb93eee836facf33b54ce30c565bea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/roots/wordpress-core-installer/zipball/85d3589252eb93eee836facf33b54ce30c565bea", + "reference": "85d3589252eb93eee836facf33b54ce30c565bea", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": ">=7.2.24" + }, + "conflict": { + "composer/installers": "<1.0.6" + }, + "replace": { + "johnpbloch/wordpress-core-installer": "*" + }, + "require-dev": { + "composer/composer": "^2.0", + "phpunit/phpunit": "^8.5" + }, + "type": "composer-plugin", + "extra": { + "class": "Roots\\Composer\\WordPressCorePlugin" + }, + "autoload": { + "psr-4": { + "Roots\\Composer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "John P. Bloch", + "email": "me@johnpbloch.com" + }, + { + "name": "Roots", + "email": "team@roots.io" + } + ], + "description": "A Composer custom installer to handle installing WordPress as a dependency", + "keywords": [ + "wordpress" + ], + "support": { + "issues": "https://github.com/roots/wordpress-core-installer/issues", + "source": "https://github.com/roots/wordpress-core-installer/tree/v4.0.0" + }, + "funding": [ + { + "url": "https://github.com/roots", + "type": "github" + } + ], + "time": "2026-03-22T03:17:23+00:00" + }, + { + "name": "roots/wordpress-no-content", + "version": "7.1", + "source": { + "type": "git", + "url": "https://github.com/WordPress/WordPress.git", + "reference": "7.1" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/release/wordpress-7.1-no-content.zip", + "reference": "7.1", + "shasum": "7b28e5af89345d79a30b44a16cbe3244379d1765" + }, + "require": { + "php": ">= 7.4" + }, + "provide": { + "wordpress/core-implementation": "7.1" + }, + "suggest": { + "ext-curl": "Performs remote request operations.", + "ext-dom": "Used to validate Text Widget content and to automatically configuring IIS7+.", + "ext-exif": "Works with metadata stored in images.", + "ext-fileinfo": "Used to detect mimetype of file uploads.", + "ext-hash": "Used for hashing, including passwords and update packages.", + "ext-imagick": "Provides better image quality for media uploads.", + "ext-json": "Used for communications with other servers.", + "ext-libsodium": "Validates Signatures and provides securely random bytes.", + "ext-mbstring": "Used to properly handle UTF8 text.", + "ext-mysqli": "Connects to MySQL for database interactions.", + "ext-openssl": "Permits SSL-based connections to other hosts.", + "ext-pcre": "Increases performance of pattern matching in code searches.", + "ext-xml": "Used for XML parsing, such as from a third-party site.", + "ext-zip": "Used for decompressing Plugins, Themes, and WordPress update packages." + }, + "type": "wordpress-core", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "WordPress Community", + "homepage": "https://wordpress.org/about/" + } + ], + "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", + "homepage": "https://wordpress.org/", + "keywords": [ + "blog", + "cms", + "wordpress" + ], + "support": { + "docs": "https://developer.wordpress.org/", + "forum": "https://wordpress.org/support/", + "irc": "irc://irc.freenode.net/wordpress", + "issues": "https://core.trac.wordpress.org/", + "rss": "https://wordpress.org/news/feed/", + "source": "https://core.trac.wordpress.org/browser", + "wiki": "https://codex.wordpress.org/" + }, + "funding": [ + { + "url": "https://wordpressfoundation.org/donate/", + "type": "other" + } + ], + "time": "2026-08-19T20:16:40+00:00" + }, { "name": "roots/wp-config", "version": "1.0.0", @@ -6083,12 +6116,12 @@ "source": { "type": "git", "url": "https://github.com/wp-cli/wp-cli-bundle.git", - "reference": "8796efea130e1592844fa65f1321eda4e00a25f1" + "reference": "01b1b10949e0ba46fbef6474481ea63d4ce4c7db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-cli/wp-cli-bundle/zipball/8796efea130e1592844fa65f1321eda4e00a25f1", - "reference": "8796efea130e1592844fa65f1321eda4e00a25f1", + "url": "https://api.github.com/repos/wp-cli/wp-cli-bundle/zipball/01b1b10949e0ba46fbef6474481ea63d4ce4c7db", + "reference": "01b1b10949e0ba46fbef6474481ea63d4ce4c7db", "shasum": "" }, "require": { @@ -6154,7 +6187,7 @@ "issues": "https://github.com/wp-cli/wp-cli-bundle/issues", "source": "https://github.com/wp-cli/wp-cli-bundle" }, - "time": "2026-08-19T10:40:00+00:00" + "time": "2026-08-20T04:56:25+00:00" }, { "name": "wp-cli/wp-config-transformer", @@ -6485,15 +6518,15 @@ }, { "name": "wp-plugin/jetpack", - "version": "16.1.1", + "version": "16.1.2", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/jetpack/", - "reference": "tags/16.1.1" + "reference": "tags/16.1.2" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/jetpack.16.1.1.zip" + "url": "https://downloads.wordpress.org/plugin/jetpack.16.1.2.zip" }, "require": { "composer/installers": "~1.0|~2.0" @@ -6512,7 +6545,7 @@ "issues": "https://wordpress.org/support/plugin/jetpack", "source": "https://plugins.svn.wordpress.org/jetpack" }, - "time": "2026-08-11T22:16:13+00:00" + "time": "2026-08-20T20:01:51+00:00" }, { "name": "wp-plugin/login-as-user", @@ -6670,15 +6703,15 @@ }, { "name": "wp-plugin/otter-blocks", - "version": "3.2.2", + "version": "3.2.3", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/otter-blocks/", - "reference": "tags/3.2.2" + "reference": "tags/3.2.3" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/otter-blocks.3.2.2.zip" + "url": "https://downloads.wordpress.org/plugin/otter-blocks.3.2.3.zip" }, "require": { "composer/installers": "~1.0|~2.0" @@ -6697,7 +6730,7 @@ "issues": "https://wordpress.org/support/plugin/otter-blocks", "source": "https://plugins.svn.wordpress.org/otter-blocks" }, - "time": "2026-08-12T12:56:51+00:00" + "time": "2026-08-20T11:46:43+00:00" }, { "name": "wp-plugin/pdf-embedder", @@ -6918,15 +6951,15 @@ }, { "name": "wp-plugin/webberzone-code-block-highlighting", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/webberzone-code-block-highlighting/", - "reference": "tags/1.2.0" + "reference": "tags/1.2.1" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/webberzone-code-block-highlighting.1.2.0.zip" + "url": "https://downloads.wordpress.org/plugin/webberzone-code-block-highlighting.1.2.1.zip" }, "require": { "composer/installers": "~1.0|~2.0" @@ -6945,7 +6978,7 @@ "issues": "https://wordpress.org/support/plugin/webberzone-code-block-highlighting", "source": "https://plugins.svn.wordpress.org/webberzone-code-block-highlighting" }, - "time": "2026-08-13T09:01:46+00:00" + "time": "2026-08-20T04:46:07+00:00" }, { "name": "wp-plugin/woocommerce", diff --git a/package-lock.json b/package-lock.json index ce49639d3..44cc52a1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cbf-wordpress", - "version": "0.1.52", + "version": "0.1.53", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cbf-wordpress", - "version": "0.1.52", + "version": "0.1.53", "devDependencies": { "@commitlint/cli": "^19.0", "@commitlint/config-conventional": "^19.0", @@ -485,10 +485,11 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -568,6 +569,28 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -695,15 +718,16 @@ } }, "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -715,6 +739,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -730,6 +755,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -747,10 +773,11 @@ } }, "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -830,13 +857,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -844,10 +873,11 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -884,16 +914,18 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -946,16 +978,18 @@ } }, "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "dev": true, + "license": "MIT" }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -968,6 +1002,7 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -980,6 +1015,7 @@ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" @@ -992,10 +1028,11 @@ } }, "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1004,16 +1041,18 @@ } }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -1027,12 +1066,13 @@ } }, "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -1046,6 +1086,7 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10" } @@ -1069,6 +1110,7 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -1098,24 +1140,27 @@ "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/commitizen": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", - "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.2.tgz", + "integrity": "sha512-1Zs37z9JPvAcuTSSricZZwBhOPVNNxJouuY4yDEt+eD70EoxT2TU9kViG8CuB/PmVg2G4XsAGQiK4YCst97aDQ==", "dev": true, + "license": "MIT", "dependencies": { - "cachedir": "2.3.0", + "cachedir": "2.4.0", "cz-conventional-changelog": "3.3.0", "dedent": "0.7.0", "detect-indent": "6.1.0", @@ -1123,10 +1168,10 @@ "find-root": "1.1.0", "fs-extra": "9.1.0", "glob": "7.2.3", - "inquirer": "8.2.5", + "inquirer": "8.2.7", "is-utf8": "^0.2.1", - "lodash": "4.17.21", - "minimist": "1.2.7", + "lodash": "4.18.1", + "minimist": "1.2.8", "strip-bom": "4.0.0", "strip-json-comments": "3.1.1" }, @@ -1136,16 +1181,7 @@ "git-cz": "bin/git-cz" }, "engines": { - "node": ">= 12" - } - }, - "node_modules/commitizen/node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 18" } }, "node_modules/compare-func": { @@ -1256,10 +1292,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1379,12 +1416,13 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1446,6 +1484,7 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -1513,6 +1552,19 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1669,10 +1721,11 @@ } }, "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1881,10 +1934,11 @@ } }, "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" }, "node_modules/execa": { "version": "8.0.1", @@ -1921,20 +1975,6 @@ "node": ">=0.10.0" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1987,6 +2027,23 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -2010,6 +2067,7 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -2025,6 +2083,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -2162,10 +2221,11 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -2426,15 +2486,20 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ieee754": { @@ -2455,7 +2520,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.1", @@ -2554,16 +2620,17 @@ } }, "node_modules/inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", "dev": true, + "license": "MIT", "dependencies": { + "@inquirer/external-editor": "^1.0.0", "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", - "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", @@ -2573,7 +2640,7 @@ "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "wrap-ansi": "^6.0.1" }, "engines": { "node": ">=12.0.0" @@ -2584,6 +2651,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2599,6 +2667,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2615,6 +2684,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2626,7 +2696,23 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/is-arrayish": { "version": "0.2.1", @@ -2660,6 +2746,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2684,6 +2771,7 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2762,6 +2850,7 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2806,10 +2895,20 @@ "dev": true }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -2917,12 +3016,16 @@ } }, "node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -2932,21 +3035,22 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", - "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", - "dev": true, - "dependencies": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "3.0.0", - "listr2": "8.0.1", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz", + "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^13.1.0", + "debug": "^4.4.0", + "execa": "^8.0.1", + "lilconfig": "^3.1.3", + "listr2": "^8.2.5", + "micromatch": "^4.0.8", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.7.0" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -2958,17 +3062,31 @@ "url": "https://opencollective.com/lint-staged" } }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/listr2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", - "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.0", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -2976,10 +3094,11 @@ } }, "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2988,16 +3107,18 @@ } }, "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -3011,12 +3132,13 @@ } }, "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -3026,10 +3148,11 @@ } }, "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -3058,10 +3181,11 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", @@ -3134,6 +3258,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -3150,6 +3275,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3165,6 +3291,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3181,6 +3308,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3192,17 +3320,19 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, @@ -3214,25 +3344,27 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^3.0.0" + "environment": "^1.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3241,33 +3373,36 @@ } }, "node_modules/log-update/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, + "license": "MIT", "dependencies": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, + "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.0.0" + "get-east-asian-width": "^1.3.1" }, "engines": { "node": ">=18" @@ -3276,57 +3411,45 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/log-update/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, + "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" @@ -3339,10 +3462,11 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -3356,12 +3480,13 @@ } }, "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -3370,23 +3495,12 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -3476,12 +3590,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3500,6 +3615,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -3546,21 +3674,23 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "dev": true, "funding": [ { @@ -3568,6 +3698,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3678,6 +3809,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -3701,6 +3833,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3716,6 +3849,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3732,6 +3866,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3743,16 +3878,8 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, "node_modules/p-limit": { "version": "4.0.0", @@ -3875,10 +4002,11 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.2", @@ -3906,9 +4034,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", "dev": true, "funding": [ { @@ -3924,10 +4052,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -4223,6 +4352,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4307,6 +4437,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -4320,6 +4451,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4329,6 +4461,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -4343,7 +4476,8 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/reusify": { "version": "1.0.4", @@ -4356,10 +4490,11 @@ } }, "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", @@ -4381,6 +4516,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4409,10 +4545,11 @@ } }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -4435,13 +4572,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { "version": "7.6.0", @@ -4505,6 +4644,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -4517,10 +4657,11 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -4571,6 +4712,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -4904,10 +5046,11 @@ } }, "node_modules/stylelint/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true, + "license": "ISC", "engines": { "node": ">= 6" } @@ -5079,18 +5222,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5219,6 +5350,7 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -5338,12 +5470,19 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 14" + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { diff --git a/package.json b/package.json index 4d134a652..f939c60f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cbf-wordpress", - "version": "0.1.52", + "version": "0.1.53", "description": "[![Packagist](https://img.shields.io/packagist/v/roots/bedrock.svg?style=flat-square)](https://packagist.org/packages/roots/bedrock) [![Build Status](https://img.shields.io/travis/roots/bedrock.svg?style=flat-square)](https://travis-ci.org/roots/bedrock)", "devDependencies": { "@commitlint/cli": "^19.0", @@ -59,5 +59,8 @@ "stylelint-config-prettier", "stylelint-config-prettier-scss" ] + }, + "allowScripts": { + "@evilmartians/lefthook@1.6.4": true } } diff --git a/tools/slides-to-learndash/uv.lock b/tools/slides-to-learndash/uv.lock index 38849bafa..6b4508375 100644 --- a/tools/slides-to-learndash/uv.lock +++ b/tools/slides-to-learndash/uv.lock @@ -1,13 +1,14 @@ version = 1 +revision = 3 requires-python = ">=3.10" [[package]] name = "annotated-doc" version = "0.0.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288 } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303 }, + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, ] [[package]] @@ -15,138 +16,138 @@ name = "click" version = "8.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "platform_system == 'Windows'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856 } +sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856, upload-time = "2026-04-03T19:14:45.118Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl", hash = "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d", size = 108379 }, + { url = "https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl", hash = "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d", size = 108379, upload-time = "2026-04-03T19:14:43.505Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "lxml" -version = "6.0.4" +version = "6.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/08/1217ca4043f55c3c92993b283a7dbfa456a2058d8b57bbb416cc96b6efff/lxml-6.0.4.tar.gz", hash = "sha256:4137516be2a90775f99d8ef80ec0283f8d78b5d8bd4630ff20163b72e7e9abf2", size = 4237780 } +sdist = { url = "https://files.pythonhosted.org/packages/28/30/9abc9e34c657c33834eaf6cd02124c61bdf5944d802aa48e69be8da3585d/lxml-6.1.0.tar.gz", hash = "sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13", size = 4197006, upload-time = "2026-04-18T04:32:51.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/b9/93d71026bf6c4dfe3afc32064a3fcd533d9032c8b97499744a999f97c230/lxml-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4a2c26422c359e93d97afd29f18670ae2079dbe2dd17469f1e181aa6699e96a7", size = 8540588 }, - { url = "https://files.pythonhosted.org/packages/c0/61/33639497c73383e2f53f0b93d485248b77d5498f3589534952bd94380ff3/lxml-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e3b455459e5ed424a4cc277cd085fc1a50a05b940af30703a13a8ec0932d6a69", size = 4601730 }, - { url = "https://files.pythonhosted.org/packages/10/ad/cb2de3d32a0d4748be7cd002a3e3eb67e82027af3796f9fe2462aadb1f7c/lxml-6.0.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3109bdeb9674abbc4d8bd3fd273cce4a4087a93f31c17dc321130b71384992e5", size = 5000607 }, - { url = "https://files.pythonhosted.org/packages/93/4d/87d8eaba7638c917b2fd971efd1bd93d0662dade95e1d868c18ba7bb84d9/lxml-6.0.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d41f733476eecf7a919a1b909b12e67f247564b21c2b5d13e5f17851340847da", size = 5154439 }, - { url = "https://files.pythonhosted.org/packages/1b/6a/dd74a938ff10daadbc441bb4bc9d23fb742341da46f2730d7e335cb034bb/lxml-6.0.4-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:717e702b07b512aca0f09d402896e476cfdc1db12bca0441210b1a36fdddb6dd", size = 5055024 }, - { url = "https://files.pythonhosted.org/packages/ef/4a/ac0f195f52fae450338cae90234588a2ead2337440b4e5ff7230775477a3/lxml-6.0.4-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ad61a5fb291e45bb1d680b4de0c99e28547bd249ec57d60e3e59ebe6628a01f", size = 5285427 }, - { url = "https://files.pythonhosted.org/packages/34/f1/804925a5723b911507d7671ab164b697f2e3acb12c0bb17a201569ab848e/lxml-6.0.4-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:2c75422b742dd70cc2b5dbffb181ac093a847b338c7ca1495d92918ae35eabae", size = 5410657 }, - { url = "https://files.pythonhosted.org/packages/73/bc/1d032759c6fbd45c72c29880df44bd2115cdd4574b01a10c9d448496cb75/lxml-6.0.4-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:28df3bd54561a353ce24e80c556e993b397a41a6671d567b6c9bee757e1bf894", size = 4769048 }, - { url = "https://files.pythonhosted.org/packages/b1/d0/a6b5054a2df979d6c348173bc027cb9abaa781fe96590f93a0765f50748c/lxml-6.0.4-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8d7db1fa5f95a8e4fcf0462809f70e536c3248944ddeba692363177ac6b44f2b", size = 5358493 }, - { url = "https://files.pythonhosted.org/packages/c7/ce/99e7233391290b6e9a7d8429846b340aa547f16ad026307bf2a02919a3e2/lxml-6.0.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8fdae368cb2deb4b2476f886c107aecaaea084e97c0bc0a268861aa0dd2b7237", size = 5106775 }, - { url = "https://files.pythonhosted.org/packages/6f/c8/1d6d65736cec2cd3198bbe512ec121625a3dc4bb7c9dbd19cc0ea967e9b1/lxml-6.0.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:14e4af403766322522440863ca55a9561683b4aedf828df6726b8f83de14a17f", size = 4802389 }, - { url = "https://files.pythonhosted.org/packages/e1/99/2b9b704843f5661347ba33150918d4c1d18025449489b05895d352501ae7/lxml-6.0.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c4633c39204e97f36d68deff76471a0251afe8a82562034e4eda63673ee62d36", size = 5348648 }, - { url = "https://files.pythonhosted.org/packages/3e/af/2f15de7f947a71ee1b4c850d8f1764adfdfae459e434caf50e6c81983da4/lxml-6.0.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a72e2e31dbc3c35427486402472ca5d8ca2ef2b33648ed0d1b22de2a96347b76", size = 5307603 }, - { url = "https://files.pythonhosted.org/packages/b2/9a/028f3c7981411b90afce0743a12f947a047e7b75a0e0efd3774a704eb49a/lxml-6.0.4-cp310-cp310-win32.whl", hash = "sha256:15f135577ffb6514b40f02c00c1ba0ca6305248b1e310101ca17787beaf4e7ad", size = 3597402 }, - { url = "https://files.pythonhosted.org/packages/32/84/dac34d557eab04384914a9788caf6ec99132434a52a534bf7b367cf8b366/lxml-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:fd7f6158824b8bc1e96ae87fb14159553be8f7fa82aec73e0bdf98a5af54290c", size = 4019839 }, - { url = "https://files.pythonhosted.org/packages/97/cb/c91537a07a23ee6c55cf701df3dc34f76cf0daec214adffda9c8395648ef/lxml-6.0.4-cp310-cp310-win_arm64.whl", hash = "sha256:5ff4d73736c80cb9470c8efa492887e4e752a67b7fd798127794e2be103ebef1", size = 3667037 }, - { url = "https://files.pythonhosted.org/packages/15/93/5145f2c9210bf99c01f2f54d364be805f556f2cb13af21d3c2d80e0780bb/lxml-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3602d57fdb6f744f4c5d0bd49513fe5abbced08af85bba345fc354336667cd47", size = 8525003 }, - { url = "https://files.pythonhosted.org/packages/93/19/9d61560a53ac1b26aec1a83ae51fadbe0cc0b6534e2c753ad5af854f231b/lxml-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8c7976c384dcab4bca42f371449fb711e20f1bfce99c135c9b25614aed80e55", size = 4594697 }, - { url = "https://files.pythonhosted.org/packages/93/1a/0db40884f959c94ede238507ea0967dd47527ab11d130c5a571088637e78/lxml-6.0.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:579e20c120c3d231e53f0376058e4e1926b71ca4f7b77a7a75f82aea7a9b501e", size = 4922365 }, - { url = "https://files.pythonhosted.org/packages/04/db/4136fab3201087bd5a4db433b9a36e50808d8af759045e7d7af757b46178/lxml-6.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f32a27be5fb286febd16c0d13d4a3aee474d34417bd172e64d76c6a28e2dc14", size = 5066748 }, - { url = "https://files.pythonhosted.org/packages/03/d9/aad543afc57e6268200332ebe695be0320fdd2219b175d34a52027aa1bad/lxml-6.0.4-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d53b7cdaa961a4343312964f6c5a150d075a55e95e1338078d413bf38eba8c0", size = 5000464 }, - { url = "https://files.pythonhosted.org/packages/ab/92/14cc575b97dedf02eb8de96af8d977f06b9f2500213805165606ff06c011/lxml-6.0.4-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d4cc697347f6c61764b58767109e270d0b4a92aba4a8053a967ed9de23a5ea9", size = 5201395 }, - { url = "https://files.pythonhosted.org/packages/a7/72/0ff17f32a737a9c2840f781aee4bbd5cec947b966ff0c74c5dec56098beb/lxml-6.0.4-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:108b8d6da624133eaa1a6a5bbcb1f116b878ea9fd050a1724792d979251706fb", size = 5329108 }, - { url = "https://files.pythonhosted.org/packages/f7/f7/3b1f43e0db54462b5f1ebd96ee43b240388e3b9bf372546694175bec2d41/lxml-6.0.4-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:c087d643746489df06fe3ac03460d235b4b3ae705e25838257510c79f834e50f", size = 4658132 }, - { url = "https://files.pythonhosted.org/packages/94/cb/90513445e4f08c500f953543aadf18501e5438b31bc816d0ce9a5e09cc5c/lxml-6.0.4-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2063c486f80c32a576112201c93269a09ebeca5b663092112c5fb39b32556340", size = 5264665 }, - { url = "https://files.pythonhosted.org/packages/17/d2/c1fa939ea0fa75190dd452d9246f97c16372e2d593fe9f4684cae5c37dda/lxml-6.0.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ff016e86ec14ae96253a3834302e0e89981956b73e4e74617eeba4a6a81da08b", size = 5043801 }, - { url = "https://files.pythonhosted.org/packages/22/d4/01cdd3c367045526a376cc1eadacf647f193630db3f902b8842a76b3eb2e/lxml-6.0.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:0e9ba5bcd75efb8cb4613463e6cfb55b5a76d4143e4cfa06ea027bc6cc696a3e", size = 4711416 }, - { url = "https://files.pythonhosted.org/packages/8d/77/f6af805c6e23b9a12970c8c38891b087ffd884c2d4df6069e63ff1623fd6/lxml-6.0.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:9a69668bef9268f54a92f2254917df530ca4630a621027437f0e948eb1937e7b", size = 5251326 }, - { url = "https://files.pythonhosted.org/packages/2b/bb/bcd429655f6d12845d91f17e3977d63de22cde5fa77f7d4eef7669a80e8c/lxml-6.0.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:280f8e7398bdc48c7366ad375a5586692cd73b269d9e82e6898f9ada70dc0bcb", size = 5224752 }, - { url = "https://files.pythonhosted.org/packages/69/cd/0342c5a3663115560899a0529789969a72bc5209c8f0084e5b0598cda94d/lxml-6.0.4-cp311-cp311-win32.whl", hash = "sha256:a8eddf3c705e00738db695a9a77830f8d57f7d21a54954fbef23a1b8806384ed", size = 3592977 }, - { url = "https://files.pythonhosted.org/packages/92/c1/386ee2e8a8008cccc4903435f19aaffd16d9286186106752d08be2bd7ccb/lxml-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:b74d5b391fc49fc3cc213c930f87a7dedf2b4b0755aae4638e91e4501e278430", size = 4023718 }, - { url = "https://files.pythonhosted.org/packages/a7/a0/19f5072fdc7c73d44004506172dba4b7e3d179d9b3a387efce9c30365afd/lxml-6.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:2f0cf04bafc14b0eebfbc3b5b73b296dd76b5d7640d098c02e75884bb0a70f2b", size = 3666955 }, - { url = "https://files.pythonhosted.org/packages/3d/18/4732abab49bbb041b1ded9dd913ca89735a0dcca038eacec64c44ba02163/lxml-6.0.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:af0b8459c4e21a8417db967b2e453d1855022dac79c79b61fb8214f3da50f17e", size = 8570033 }, - { url = "https://files.pythonhosted.org/packages/72/7e/38523ec7178ca35376551911455d1b2766bc9d98bcc18f606a167fa9ecbb/lxml-6.0.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e0cdcea2affa53fa17dc4bf5cefc0edf72583eac987d669493a019998a623fa3", size = 4623270 }, - { url = "https://files.pythonhosted.org/packages/f1/cf/f9b6c9bf9d8c63d923ef893915141767cea4cea71774f20c36d0c14e1585/lxml-6.0.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8da4d4840c1bc07da6fcd647784f7fbaf538eeb7a57ce6b2487acc54c5e33330", size = 4929471 }, - { url = "https://files.pythonhosted.org/packages/e5/53/3117f988c9e20be4156d2b8e1bda82ae06878d11aeb820dea111a7cfa4e3/lxml-6.0.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb04a997588c3980894ded9172c10c5a3e45d3f1c5410472733626d268683806", size = 5092355 }, - { url = "https://files.pythonhosted.org/packages/4e/ca/05c6ac773a2bd3edb48fa8a5c5101e927ce044c4a8aed1a85ff00fab20a5/lxml-6.0.4-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca449642a08a6ceddf6e6775b874b6aee1b6242ed80aea84124497aba28e5384", size = 5004520 }, - { url = "https://files.pythonhosted.org/packages/f1/db/d8aa5aa3a51d0aa6706ef85f85027f7c972cd840fe69ba058ecaf32d093d/lxml-6.0.4-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:35b3ccdd137e62033662787dd4d2b8be900c686325d6b91e3b1ff6213d05ba11", size = 5629961 }, - { url = "https://files.pythonhosted.org/packages/9d/75/8fff4444e0493aeb15ab0f4a55c767b5baed9074cf67a1835dc1161f3a1f/lxml-6.0.4-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45dc690c54b1341fec01743caed02e5f1ea49d7cfb81e3ba48903e5e844ed68a", size = 5237561 }, - { url = "https://files.pythonhosted.org/packages/2a/9f/6d6cd73014f2dbf47a8aa7accd9712726f46ef4891e1c126bc285cfb94e4/lxml-6.0.4-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:15ae922e8f74b05798a0e88cee46c0244aaec6a66b5e00be7d18648fed8c432e", size = 5349197 }, - { url = "https://files.pythonhosted.org/packages/2d/43/e3e9a126e166234d1659d1dd9004dc1dd50cdc3c68575b071b0a1524b4de/lxml-6.0.4-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:ebd816653707fbf10c65e3dee3bc24dac6b691654c21533b1ae49287433f4db0", size = 4693123 }, - { url = "https://files.pythonhosted.org/packages/6c/98/b146dd123a4a7b69b571ff23ea8e8c68de8d8c1b03e23d01c6374d4fd835/lxml-6.0.4-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:21284cf36b95dd8be774eb06c304b440cf49ee811800a30080ce6d93700f0383", size = 5242967 }, - { url = "https://files.pythonhosted.org/packages/7e/60/8c275584452b55a902c883e8ab63d755c5ef35d7ad1f06f9e6559095521d/lxml-6.0.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0c08a2a9d0c4028ef5fc5a513b2e1e51af069a83c5b4206139edd08b3b8c2926", size = 5046810 }, - { url = "https://files.pythonhosted.org/packages/19/aa/19ec216147e1105e5403fe73657c693a6e91bde855a13242dd6031e829e5/lxml-6.0.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1bc2f0f417112cf1a428599dd58125ab74d8e1c66893efd9b907cbb4a5db6e44", size = 4776383 }, - { url = "https://files.pythonhosted.org/packages/41/c8/90afdb838705a736268fcffd2698c05e9a129144ce215d5e14db3bdfc295/lxml-6.0.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c0d86e328405529bc93913add9ff377e8b8ea9be878e611f19dbac7766a84483", size = 5643497 }, - { url = "https://files.pythonhosted.org/packages/32/ec/1135261ec9822dafb90be0ff6fb0ec79cee0b7fe878833dfe5f2b8c393bd/lxml-6.0.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:3cce9420fe8f91eae5d457582599d282195c958cb670aa4bea313a79103ba33f", size = 5232185 }, - { url = "https://files.pythonhosted.org/packages/13/f2/7380b11cae6943720f525e5a28ad9dbead96ac710417e556b7c03f3a8af3/lxml-6.0.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:96214985ec194ce97b9028414e179cfb21230cba4e2413aee7e249461bb84f4d", size = 5259968 }, - { url = "https://files.pythonhosted.org/packages/65/8f/141734f2c456f2253fed4237d8d4b241e3d701129cf6f0b135ccf241a75a/lxml-6.0.4-cp312-cp312-win32.whl", hash = "sha256:b2209b310e7ed1d4cd1c00d405ec9c49722fce731c7036abc1d876bf8df78139", size = 3594958 }, - { url = "https://files.pythonhosted.org/packages/b7/a9/c6d3531c6d8814af0919fbdb9bda43c9e8b5deffcb70c8534017db233512/lxml-6.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:03affcacfba4671ebc305813b02bfaf34d80b6a7c5b23eafc5d6da14a1a6e623", size = 3995897 }, - { url = "https://files.pythonhosted.org/packages/03/5d/1dabeddf762e5a315a31775b2bca39811d7e7a15fc3e677d044b9da973fe/lxml-6.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:af9678e3a2a047465515d95a61690109af7a4c9486f708249119adcef7861049", size = 3658607 }, - { url = "https://files.pythonhosted.org/packages/78/f6/550a1ed9afde66e24bfcf9892446ea9779152df336062c6df0f7733151a2/lxml-6.0.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ecc3d55ed756ee6c3447748862a97e1f5392d2c5d7f474bace9382345e4fc274", size = 8559522 }, - { url = "https://files.pythonhosted.org/packages/11/93/3f687c14d2b4d24b60fe13fd5482c8853f82a10bb87f2b577123e342ed1a/lxml-6.0.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7d5a627a368a0e861350ccc567a70ec675d2bc4d8b3b54f48995ae78d8d530e", size = 4617380 }, - { url = "https://files.pythonhosted.org/packages/b5/ed/91e443366063d3fb7640ae2badd5d7b65be4095ac6d849788e39c043baae/lxml-6.0.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d385141b186cc39ebe4863c1e41936282c65df19b2d06a701dedc2a898877d6a", size = 4922791 }, - { url = "https://files.pythonhosted.org/packages/30/4b/2243260b70974aca9ba0cc71bd668c0c3a79644d80ddcabbfbdb4b131848/lxml-6.0.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0132bb040e9bb5a199302e12bf942741defbc52922a2a06ce9ff7be0d0046483", size = 5080972 }, - { url = "https://files.pythonhosted.org/packages/f8/c3/54c53c4f772341bc12331557f8b0882a426f53133926306cbe6d7f0ee7e4/lxml-6.0.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:26aee5321e4aa1f07c9090a35f6ab8b703903fb415c6c823cfdb20ee0d779855", size = 4992236 }, - { url = "https://files.pythonhosted.org/packages/be/0f/416de42e22f287585abee610eb0d1c2638c9fe24cee7e15136e0b5e138f8/lxml-6.0.4-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b5652455de198ff76e02cfa57d5efc5f834fa45521aaf3fcc13d6b5a88bde23d", size = 5612398 }, - { url = "https://files.pythonhosted.org/packages/7d/63/29a3fa79b8a182f5bd5b5bdcb6f625f49f08f41d60a26ca25482820a1b99/lxml-6.0.4-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75842801fb48aea73f4c281b923a010dfb39bad75edf8ceb2198ec30c27f01cc", size = 5227480 }, - { url = "https://files.pythonhosted.org/packages/7c/4a/44d1843de599b1c6dbe578e4248c2f15e7fac90c5c86eb26775eaeac0fe0/lxml-6.0.4-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:94a1f74607a5a049ff6ff8de429fec922e643e32b5b08ec7a4fe49e8de76e17c", size = 5341001 }, - { url = "https://files.pythonhosted.org/packages/0d/52/c8aebde49f169e4e3452e7756be35be1cb2903e30d961cb57aa65a27055f/lxml-6.0.4-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:173cc246d3d3b6d3b6491f0b3aaf22ebdf2eed616879482acad8bd84d73eb231", size = 4699105 }, - { url = "https://files.pythonhosted.org/packages/78/60/76fc3735c31c28b70220d99452fb72052e84b618693ca2524da96f0131d8/lxml-6.0.4-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f0f2ee1be1b72e9890da87e4e422f2f703ff4638fd5ec5383055db431e8e30e9", size = 5231095 }, - { url = "https://files.pythonhosted.org/packages/e5/60/448f01c52110102f23df5f07b3f4fde57c8e13e497e182a743d125324c0b/lxml-6.0.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c51a274b7e8b9ce394c3f8b471eb0b23c1914eec64fdccf674e082daf72abf11", size = 5042411 }, - { url = "https://files.pythonhosted.org/packages/4a/2a/90612a001fa4fa0ff0443ebb0256a542670fe35473734c559720293e7aff/lxml-6.0.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:210ea934cba1a1ec42f88c4190c4d5c67b2d14321a8faed9b39e8378198ff99d", size = 4768431 }, - { url = "https://files.pythonhosted.org/packages/84/d8/572845a7d741c8a8ffeaf928185263e14d97fbd355de164677340951d7a5/lxml-6.0.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:14fe654a59eebe16368c51778caeb0c8fda6f897adcd9afe828d87d13b5d5e51", size = 5634972 }, - { url = "https://files.pythonhosted.org/packages/d7/1d/392b8c9f8cf1d502bbec50dee137c7af3dd5def5e5cd84572fbf0ba0541c/lxml-6.0.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:ec160a2b7e2b3cb71ec35010b19a1adea05785d19ba5c9c5f986b64b78fef564", size = 5222909 }, - { url = "https://files.pythonhosted.org/packages/21/ab/949fc96f825cf083612aee65d5a02eacc5eaeb2815561220e33e1e160677/lxml-6.0.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d305b86ef10b23cf3a6d62a2ad23fa296f76495183ee623f64d2600f65ffe09c", size = 5249096 }, - { url = "https://files.pythonhosted.org/packages/56/e8/fbe44df79ede5ff760401cc3c49c4204f49f0f529cc6b27d0af7b63f5472/lxml-6.0.4-cp313-cp313-win32.whl", hash = "sha256:a2f31380aa9a9b52591e79f1c1d3ac907688fbeb9d883ba28be70f2eb5db2277", size = 3595808 }, - { url = "https://files.pythonhosted.org/packages/f8/df/e873abb881092256520edf0d67d686e36f3c86b3cf289f01b6458272dede/lxml-6.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:b8efa9f681f15043e497293d58a4a63199564b253ed2291887d92bb3f74f59ab", size = 3994635 }, - { url = "https://files.pythonhosted.org/packages/23/a8/9c56c8914b9b18d89face5a7472445002baf309167f7af65d988842129fd/lxml-6.0.4-cp313-cp313-win_arm64.whl", hash = "sha256:905abe6a5888129be18f85f2aea51f0c9863fa0722fb8530dfbb687d2841d221", size = 3657374 }, - { url = "https://files.pythonhosted.org/packages/10/18/36e28a809c509a67496202771f545219ac5a2f1cd61aae325991fcf5ab91/lxml-6.0.4-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:569d3b18340863f603582d2124e742a68e85755eff5e47c26a55e298521e3a01", size = 8575045 }, - { url = "https://files.pythonhosted.org/packages/11/38/a168c820e3b08d3b4fa0f4e6b53b3930086b36cc11e428106d38c36778cd/lxml-6.0.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3b6245ee5241342d45e1a54a4a8bc52ef322333ada74f24aa335c4ab36f20161", size = 4622963 }, - { url = "https://files.pythonhosted.org/packages/53/e0/2c9d6abdd82358cea3c0d8d6ca272a6af0f38156abce7827efb6d5b62d17/lxml-6.0.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:79a1173ba3213a3693889a435417d4e9f3c07d96e30dc7cc3a712ed7361015fe", size = 4948832 }, - { url = "https://files.pythonhosted.org/packages/96/d7/f2202852e91d7baf3a317f4523a9c14834145301e5b0f2e80c01c4bfbd49/lxml-6.0.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc18bb975666b443ba23aedd2fcf57e9d0d97546b52a1de97a447c4061ba4110", size = 5085865 }, - { url = "https://files.pythonhosted.org/packages/09/57/abee549324496e92708f71391c6060a164d3c95369656a1a15e9f20d8162/lxml-6.0.4-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2079f5dc83291ac190a52f8354b78648f221ecac19fb2972a2d056b555824de7", size = 5030001 }, - { url = "https://files.pythonhosted.org/packages/c2/f8/432da7178c5917a16468af6c5da68fef7cf3357d4bd0e6f50272ec9a59b5/lxml-6.0.4-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3eda02da4ca16e9ca22bbe5654470c17fa1abcd967a52e4c2e50ff278221e351", size = 5646303 }, - { url = "https://files.pythonhosted.org/packages/82/f9/e1c04ef667a6bf9c9dbd3bf04c50fa51d7ee25b258485bb748b27eb9a1c7/lxml-6.0.4-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c3787cdc3832b70e21ac2efafea2a82a8ccb5e85bec110dc68b26023e9d3caae", size = 5237940 }, - { url = "https://files.pythonhosted.org/packages/d0/f0/cdea60d92df731725fc3c4f33e387b100f210acd45c92969e42d2ba993fa/lxml-6.0.4-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:3f276d49c23103565d39440b9b3f4fc08fa22f5a96395ea4b4d4fea4458b1505", size = 5350050 }, - { url = "https://files.pythonhosted.org/packages/2e/15/bf52c7a70b6081bb9e00d37cc90fcf60aa84468d9d173ad2fade38ec34c5/lxml-6.0.4-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:fdfdad73736402375b11b3a137e48cd09634177516baf5fc0bd80d1ca85f3cda", size = 4696409 }, - { url = "https://files.pythonhosted.org/packages/c5/69/9bade267332cc06f9a9aa773b5a11bdfb249af485df9e142993009ea1fc4/lxml-6.0.4-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:75912421456946931daba0ec3cedfa824c756585d05bde97813a17992bfbd013", size = 5249072 }, - { url = "https://files.pythonhosted.org/packages/14/ca/043bcacb096d6ed291cbbc58724e9625a453069d6edeb840b0bf18038d05/lxml-6.0.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:48cd5a88da67233fd82f2920db344503c2818255217cd6ea462c9bb8254ba7cb", size = 5083779 }, - { url = "https://files.pythonhosted.org/packages/04/89/f5fb18d76985969e84af13682e489acabee399bb54738a363925ea6e7390/lxml-6.0.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:87af86a8fa55b9ff1e6ee4233d762296f2ce641ba948af783fb995c5a8a3371b", size = 4736953 }, - { url = "https://files.pythonhosted.org/packages/84/ba/d1d7284bb4ba951f188c3fc0455943c1fcbd1c33d1324d6d57b7d4a45be6/lxml-6.0.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:a743714cd656ba7ccb29d199783906064c7b5ba3c0e2a79f0244ea0badc6a98c", size = 5669605 }, - { url = "https://files.pythonhosted.org/packages/72/05/1463e55f2de27bb60feddc894dd7c0833bd501f8861392ed416291b38db5/lxml-6.0.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e31c76bd066fb4f81d9a32e5843bffdf939ab27afb1ffc1c924e749bfbdb00e3", size = 5236886 }, - { url = "https://files.pythonhosted.org/packages/fe/fb/0b6ee9194ce3ac49db4cadaa8a9158f04779fc768b6c27c4e2945d71a99d/lxml-6.0.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f185fd6e7d550e9917d7103dccf51be589aba953e15994fb04646c1730019685", size = 5263382 }, - { url = "https://files.pythonhosted.org/packages/9a/93/ec18a08e98dd82cac39f1d2511ee2bed5affb94d228356d8ef165a4ec3b9/lxml-6.0.4-cp314-cp314-win32.whl", hash = "sha256:774660028f8722a598400430d2746fb0075949f84a9a5cd9767d9152e3baaac5", size = 3656164 }, - { url = "https://files.pythonhosted.org/packages/15/86/52507316abfc7150bf6bb191e39a12e301ee80334610a493884ae2f9d20d/lxml-6.0.4-cp314-cp314-win_amd64.whl", hash = "sha256:fbd7d14349413f5609c0b537b1a48117d6ccef1af37986af6b03766ad05bf43e", size = 4062512 }, - { url = "https://files.pythonhosted.org/packages/f1/d5/09c593a2ef2234b8cd6cf059e2dc212e0654bf05c503f0ef2daf05adb680/lxml-6.0.4-cp314-cp314-win_arm64.whl", hash = "sha256:a61a01ec3fbfd5b73a69a7bf513271051fd6c5795d82fc5daa0255934cd8db3d", size = 3740745 }, - { url = "https://files.pythonhosted.org/packages/4a/3c/42a98bf6693938bf7b285ec7f70ba2ae9d785d0e5b2cdb85d2ee29e287eb/lxml-6.0.4-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:504edb62df33cea502ea6e73847c647ba228623ca3f80a228be5723a70984dd5", size = 8826437 }, - { url = "https://files.pythonhosted.org/packages/c2/c2/ad13f39b2db8709788aa2dcb6e90b81da76db3b5b2e7d35e0946cf984960/lxml-6.0.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:f01b7b0316d4c0926d49a7f003b2d30539f392b140a3374bb788bad180bc8478", size = 4734892 }, - { url = "https://files.pythonhosted.org/packages/2c/6d/c559d7b5922c5b0380fc2cb5ac134b6a3f9d79d368347a624ee5d68b0816/lxml-6.0.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ab999933e662501efe4b16e6cfb7c9f9deca7d072cd1788b99c8defde78c0dfb", size = 4969173 }, - { url = "https://files.pythonhosted.org/packages/c7/78/ca521e36157f38e3e1a29276855cdf48d213138fc0c8365693ff5c876ca7/lxml-6.0.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67c3f084389fe75932c39b6869a377f6c8e21e818f31ae8a30c71dd2e59360e2", size = 5103134 }, - { url = "https://files.pythonhosted.org/packages/28/a7/7d62d023bacaa0aaf60af8c0a77c6c05f84327396d755f3aa64b788678a9/lxml-6.0.4-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:377ea1d654f76ed6205c87d14920f829c9f4d31df83374d3cbcbdaae804d37b2", size = 5027205 }, - { url = "https://files.pythonhosted.org/packages/34/be/51b194b81684f2e85e5d992771c45d70cb22ac6f7291ac6bc7b255830afe/lxml-6.0.4-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e60cd0bcacbfd1a96d63516b622183fb2e3f202300df9eb5533391a8a939dbfa", size = 5594461 }, - { url = "https://files.pythonhosted.org/packages/39/24/8850f38fbf89dd072ff31ba22f9e40347aeada7cadf710ecb04b8d9f32d4/lxml-6.0.4-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e9e30fd63d41dd0bbdb020af5cdfffd5d9b554d907cb210f18e8fcdc8eac013", size = 5223378 }, - { url = "https://files.pythonhosted.org/packages/2a/9b/595239ba8c719b0fdc7bc9ebdb7564459c9a6b24b8b363df4a02674aeece/lxml-6.0.4-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:1fb4a1606bb68c533002e7ed50d7e55e58f0ef1696330670281cb79d5ab2050d", size = 5311415 }, - { url = "https://files.pythonhosted.org/packages/be/cb/aa27ac8d041acf34691577838494ad08df78e83fdfdb66948d2903e9291e/lxml-6.0.4-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:695c7708438e449d57f404db8cc1b769e77ad5b50655f32f8175686ba752f293", size = 4637953 }, - { url = "https://files.pythonhosted.org/packages/f6/f2/f19114fd86825c2d1ce41cd99daad218d30cfdd2093d4de9273986fb4d68/lxml-6.0.4-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d49c35ae1e35ee9b569892cf8f8f88db9524f28d66e9daee547a5ef9f3c5f468", size = 5231532 }, - { url = "https://files.pythonhosted.org/packages/9a/0e/c3fa354039ec0b6b09f40fbe1129efc572ac6239faa4906de42d5ce87c0a/lxml-6.0.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5801072f8967625e6249d162065d0d6011ef8ce3d0efb8754496b5246b81a74b", size = 5083767 }, - { url = "https://files.pythonhosted.org/packages/b3/4b/1a0dbb6d6ffae16e54a8a3796ded0ad2f9c3bc1ff3728bde33456f4e1d63/lxml-6.0.4-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cbf768541526eba5ef1a49f991122e41b39781eafd0445a5a110fc09947a20b5", size = 4758079 }, - { url = "https://files.pythonhosted.org/packages/a9/01/a246cf5f80f96766051de4b305d6552f80bdaefb37f04e019e42af0aba69/lxml-6.0.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:eecce87cc09233786fc31c230268183bf6375126cfec1c8b3673fcdc8767b560", size = 5618686 }, - { url = "https://files.pythonhosted.org/packages/eb/1f/b072a92369039ebef11b0a654be5134fcf3ed04c0f437faf9435ac9ba845/lxml-6.0.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:07dce892881179e11053066faca2da17b0eeb0bb7298f11bcf842a86db207dbd", size = 5227259 }, - { url = "https://files.pythonhosted.org/packages/d5/a0/dc97034f9d4c0c4d30875147d81fd2c0c7f3d261b109db36ed746bf8ab1d/lxml-6.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e4f97aee337b947e6699e5574c90d087d3e2ce517016241c07e7e98a28dca885", size = 5246190 }, - { url = "https://files.pythonhosted.org/packages/f2/ef/85cb69835113583c2516fee07d0ffb4d824b557424b06ba5872c20ba6078/lxml-6.0.4-cp314-cp314t-win32.whl", hash = "sha256:064477c0d4c695aa1ea4b9c1c4ee9043ab740d12135b74c458cc658350adcd86", size = 3896005 }, - { url = "https://files.pythonhosted.org/packages/3d/5e/2231f34cc54b8422b793593138d86d3fa4588fb2297d4ea0472390f25627/lxml-6.0.4-cp314-cp314t-win_amd64.whl", hash = "sha256:25bad2d8438f4ef5a7ad4a8d8bcaadde20c0daced8bdb56d46236b0a7d1cbdd0", size = 4391037 }, - { url = "https://files.pythonhosted.org/packages/39/53/8ba3cd5984f8363635450c93f63e541a0721b362bb32ae0d8237d9674aee/lxml-6.0.4-cp314-cp314t-win_arm64.whl", hash = "sha256:1dcd9e6cb9b7df808ea33daebd1801f37a8f50e8c075013ed2a2343246727838", size = 3816184 }, - { url = "https://files.pythonhosted.org/packages/41/25/260b86340ec5aadda5e18ed39df0eea61ef8781fb0fcc16c847cdb9dfdff/lxml-6.0.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b29bcca95e82cd201d16c2101085faa2669838f4697fd914b7124a6c77032f80", size = 3929209 }, - { url = "https://files.pythonhosted.org/packages/8a/cc/b2157461584525fb0ceb7f4c3b6c1b276f6c7dd34858d78075ae8973bf3d/lxml-6.0.4-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a95e29710ecdf99b446990144598f6117271cb2ec19fd45634aa087892087077", size = 4209535 }, - { url = "https://files.pythonhosted.org/packages/1d/fa/7fdcd1eb31ec0d5871a4a0b1587e78a331f59941ff3af59bed064175499e/lxml-6.0.4-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:13085e0174e9c9fa4eb5a6bdfb81646d1f7be07e5895c958e89838afb77630c6", size = 4316979 }, - { url = "https://files.pythonhosted.org/packages/53/0c/dab9f5855e7d2e51c8eb461713ada38a7d4eb3ab07fec8d13c46ed353ad6/lxml-6.0.4-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e205c4869a28ec4447375333072978356cd0eeadd0412c643543238e638b89a3", size = 4249929 }, - { url = "https://files.pythonhosted.org/packages/a4/88/39e8e4ca7ee1bc9e7cd2f6b311279624afa70a375eef8727f0bb83db2936/lxml-6.0.4-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aec26080306a66ad5c62fad0053dd2170899b465137caca7eac4b72bda3588bf", size = 4399464 }, - { url = "https://files.pythonhosted.org/packages/66/54/14c518cc9ce5151fcd1fa95a1c2396799a505dca2c4f0acdf85fb23fe293/lxml-6.0.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3912221f41d96283b10a7232344351c8511e31f18734c752ed4798c12586ea35", size = 3507404 }, + { url = "https://files.pythonhosted.org/packages/02/6e/ee8fc0e01202eb3dd2b9e1ea4f0910d72425d35c66187c63931d7a3ea73f/lxml-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec", size = 8540733, upload-time = "2026-04-18T04:27:33.185Z" }, + { url = "https://files.pythonhosted.org/packages/54/e8/325fe9b942824c773dffe1baf0c35b046a763851fdff4393af4450bceeb7/lxml-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec", size = 4602805, upload-time = "2026-04-18T04:27:36.097Z" }, + { url = "https://files.pythonhosted.org/packages/2d/81/221aa3ea4a40370bb0358fa454cbe7e5a837e522f7630c24dfef3f9a73b0/lxml-6.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551", size = 5002652, upload-time = "2026-04-18T04:27:30.603Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e1/fdbfb9019542f1875c093576df7f37adc2983c8ba7ecf17e5f14490bc107/lxml-6.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd", size = 5155332, upload-time = "2026-04-18T04:27:33.507Z" }, + { url = "https://files.pythonhosted.org/packages/56/b1/4087c782fff397cd03abf9c551069be59bb04a7e548c50fb7b9c4cdaca28/lxml-6.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215", size = 5057226, upload-time = "2026-04-18T04:27:37.567Z" }, + { url = "https://files.pythonhosted.org/packages/5d/66/516c79dec8417f3a972327330254c0b5fac93d5c3ecfd8a5b43650a5a4d9/lxml-6.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4", size = 5287588, upload-time = "2026-04-18T04:27:41.4Z" }, + { url = "https://files.pythonhosted.org/packages/94/1d/e578f4cbeb42b9df9f29b0d44a45a7cdfa3a5ae300dd59ec68e3602d29bb/lxml-6.1.0-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea", size = 5412438, upload-time = "2026-04-18T04:27:45.589Z" }, + { url = "https://files.pythonhosted.org/packages/47/5b/2aa68307d6d15959e84d4882f9c04f2da63127eac463e1594166f681ef77/lxml-6.1.0-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6", size = 4770997, upload-time = "2026-04-18T04:27:49.853Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c9/3e51fc1228310a836b4eb32595ae00154ab12197fca944676a3ab3b163ea/lxml-6.1.0-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3", size = 5359678, upload-time = "2026-04-18T04:31:56.184Z" }, + { url = "https://files.pythonhosted.org/packages/b5/91/ab8bc834f977fbbd310e697b120787c153db026f9151e02a88d2645d4e5b/lxml-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7", size = 5107890, upload-time = "2026-04-18T04:32:00.387Z" }, + { url = "https://files.pythonhosted.org/packages/bb/10/8a143cfa3ac99cb5b0523ff6d0429a9c9dddf25ffeae09caa3866c7964d9/lxml-6.1.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16", size = 4803977, upload-time = "2026-04-18T04:32:05.099Z" }, + { url = "https://files.pythonhosted.org/packages/45/fd/ee02faf52fa39c2fe32f824628958b9aa86dff21343dc3161f0e3c6ccd15/lxml-6.1.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1", size = 5350277, upload-time = "2026-04-18T04:32:09.176Z" }, + { url = "https://files.pythonhosted.org/packages/85/8c/b3481364b8554b5d36d540189a87fc71e94b0b01c24f8f152bd662dd2e45/lxml-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a", size = 5309717, upload-time = "2026-04-18T04:32:13.303Z" }, + { url = "https://files.pythonhosted.org/packages/74/e8/a6b21927077a9127afa17473b6576b322616f34ac50ee4f577e763b75ec0/lxml-6.1.0-cp310-cp310-win32.whl", hash = "sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544", size = 3598491, upload-time = "2026-04-18T04:27:24.288Z" }, + { url = "https://files.pythonhosted.org/packages/ea/82/14dea800d041274d96c07d49ff9191f011d1427450850de19bf541e2cc12/lxml-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a", size = 4020906, upload-time = "2026-04-18T04:27:27.53Z" }, + { url = "https://files.pythonhosted.org/packages/f2/ba/d3539aaf4d9d21456b9a7b902816623227d05d63e7c5aafd8834c4b9bed6/lxml-6.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776", size = 3667787, upload-time = "2026-04-18T04:27:29.407Z" }, + { url = "https://files.pythonhosted.org/packages/5e/5d/3bccad330292946f97962df9d5f2d3ae129cce6e212732a781e856b91e07/lxml-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9", size = 8526232, upload-time = "2026-04-18T04:27:40.389Z" }, + { url = "https://files.pythonhosted.org/packages/a7/51/adc8826570a112f83bb4ddb3a2ab510bbc2ccd62c1b9fe1f34fae2d90b57/lxml-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50", size = 4595448, upload-time = "2026-04-18T04:27:44.208Z" }, + { url = "https://files.pythonhosted.org/packages/54/84/5a9ec07cbe1d2334a6465f863b949a520d2699a755738986dcd3b6b89e3f/lxml-6.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5", size = 4923771, upload-time = "2026-04-18T04:32:17.402Z" }, + { url = "https://files.pythonhosted.org/packages/a7/23/851cfa33b6b38adb628e45ad51fb27105fa34b2b3ba9d1d4aa7a9428dfe0/lxml-6.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e", size = 5068101, upload-time = "2026-04-18T04:32:21.437Z" }, + { url = "https://files.pythonhosted.org/packages/b0/38/41bf99c2023c6b79916ba057d83e9db21d642f473cac210201222882d38b/lxml-6.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512", size = 5002573, upload-time = "2026-04-18T04:32:25.373Z" }, + { url = "https://files.pythonhosted.org/packages/c2/20/053aa10bdc39747e1e923ce2d45413075e84f70a136045bb09e5eaca41d3/lxml-6.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c", size = 5202816, upload-time = "2026-04-18T04:32:29.393Z" }, + { url = "https://files.pythonhosted.org/packages/9a/da/bc710fad8bf04b93baee752c192eaa2210cd3a84f969d0be7830fea55802/lxml-6.1.0-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5", size = 5329999, upload-time = "2026-04-18T04:32:34.019Z" }, + { url = "https://files.pythonhosted.org/packages/b3/cb/bf035dedbdf7fab49411aa52e4236f3445e98d38647d85419e6c0d2806b9/lxml-6.1.0-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289", size = 4659643, upload-time = "2026-04-18T04:32:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4f/22be31f33727a5e4c7b01b0a874503026e50329b259d3587e0b923cf964b/lxml-6.1.0-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a", size = 5265963, upload-time = "2026-04-18T04:32:41.881Z" }, + { url = "https://files.pythonhosted.org/packages/c8/2b/d44d0e5c79226017f4ab8c87a802ebe4f89f97e6585a8e4166dffcdd7b6e/lxml-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3", size = 5045444, upload-time = "2026-04-18T04:32:44.512Z" }, + { url = "https://files.pythonhosted.org/packages/d3/c3/3f034fec1594c331a6dbf9491238fdcc9d66f68cc529e109ec75b97197e1/lxml-6.1.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9", size = 4712703, upload-time = "2026-04-18T04:32:47.16Z" }, + { url = "https://files.pythonhosted.org/packages/12/16/0b83fccc158218aca75a7aa33e97441df737950734246b9fffa39301603d/lxml-6.1.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11", size = 5252745, upload-time = "2026-04-18T04:32:50.427Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ee/12e6c1b39a77666c02eaa77f94a870aaf63c4ac3a497b2d52319448b01c6/lxml-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4", size = 5226822, upload-time = "2026-04-18T04:32:53.437Z" }, + { url = "https://files.pythonhosted.org/packages/34/20/c7852904858b4723af01d2fc14b5d38ff57cb92f01934a127ebd9a9e51aa/lxml-6.1.0-cp311-cp311-win32.whl", hash = "sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3", size = 3594026, upload-time = "2026-04-18T04:27:31.903Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/d60c732b56da5085175c07c74b2df4e6d181b0c9a61e1691474f06ef4b39/lxml-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7", size = 4025114, upload-time = "2026-04-18T04:27:34.077Z" }, + { url = "https://files.pythonhosted.org/packages/c2/df/c84dcc175fd690823436d15b41cb920cd5ba5e14cd8bfb00949d5903b320/lxml-6.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39", size = 3667742, upload-time = "2026-04-18T04:27:38.45Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d4/9326838b59dc36dfae42eec9656b97520f9997eee1de47b8316aaeed169c/lxml-6.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d", size = 8570663, upload-time = "2026-04-18T04:27:48.253Z" }, + { url = "https://files.pythonhosted.org/packages/d8/a4/053745ce1f8303ccbb788b86c0db3a91b973675cefc42566a188637b7c40/lxml-6.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93", size = 4624024, upload-time = "2026-04-18T04:27:52.594Z" }, + { url = "https://files.pythonhosted.org/packages/90/97/a517944b20f8fd0932ad2109482bee4e29fe721416387a363306667941f6/lxml-6.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d", size = 4930895, upload-time = "2026-04-18T04:32:56.29Z" }, + { url = "https://files.pythonhosted.org/packages/94/7c/e08a970727d556caa040a44773c7b7e3ad0f0d73dedc863543e9a8b931f2/lxml-6.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a", size = 5093820, upload-time = "2026-04-18T04:32:58.94Z" }, + { url = "https://files.pythonhosted.org/packages/88/ee/2a5c2aa2c32016a226ca25d3e1056a8102ea6e1fe308bf50213586635400/lxml-6.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105", size = 5005790, upload-time = "2026-04-18T04:33:01.272Z" }, + { url = "https://files.pythonhosted.org/packages/e3/38/a0db9be8f38ad6043ab9429487c128dd1d30f07956ef43040402f8da49e8/lxml-6.1.0-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485", size = 5630827, upload-time = "2026-04-18T04:33:04.036Z" }, + { url = "https://files.pythonhosted.org/packages/31/ba/3c13d3fc24b7cacf675f808a3a1baabf43a30d0cd24c98f94548e9aa58eb/lxml-6.1.0-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814", size = 5240445, upload-time = "2026-04-18T04:33:06.87Z" }, + { url = "https://files.pythonhosted.org/packages/55/ba/eeef4ccba09b2212fe239f46c1692a98db1878e0872ae320756488878a94/lxml-6.1.0-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32", size = 5350121, upload-time = "2026-04-18T04:33:09.365Z" }, + { url = "https://files.pythonhosted.org/packages/7e/01/1da87c7b587c38d0cbe77a01aae3b9c1c49ed47d76918ef3db8fc151b1ca/lxml-6.1.0-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad", size = 4694949, upload-time = "2026-04-18T04:33:11.628Z" }, + { url = "https://files.pythonhosted.org/packages/a1/88/7db0fe66d5aaf128443ee1623dec3db1576f3e4c17751ec0ef5866468590/lxml-6.1.0-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54", size = 5243901, upload-time = "2026-04-18T04:33:13.95Z" }, + { url = "https://files.pythonhosted.org/packages/00/a8/1346726af7d1f6fca1f11223ba34001462b0a3660416986d37641708d57c/lxml-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d", size = 5048054, upload-time = "2026-04-18T04:33:16.965Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b7/85057012f035d1a0c87e02f8c723ca3c3e6e0728bcf4cb62080b21b1c1e3/lxml-6.1.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69", size = 4777324, upload-time = "2026-04-18T04:33:19.832Z" }, + { url = "https://files.pythonhosted.org/packages/75/6c/ad2f94a91073ef570f33718040e8e160d5fb93331cf1ab3ca1323f939e2d/lxml-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d", size = 5645702, upload-time = "2026-04-18T04:33:22.436Z" }, + { url = "https://files.pythonhosted.org/packages/3b/89/0bb6c0bd549c19004c60eea9dc554dd78fd647b72314ef25d460e0d208c6/lxml-6.1.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5", size = 5232901, upload-time = "2026-04-18T04:33:26.21Z" }, + { url = "https://files.pythonhosted.org/packages/a1/d9/d609a11fb567da9399f525193e2b49847b5a409cdebe737f06a8b7126bdc/lxml-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d", size = 5261333, upload-time = "2026-04-18T04:33:28.984Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3a/ac3f99ec8ac93089e7dd556f279e0d14c24de0a74a507e143a2e4b496e7c/lxml-6.1.0-cp312-cp312-win32.whl", hash = "sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f", size = 3596289, upload-time = "2026-04-18T04:27:42.819Z" }, + { url = "https://files.pythonhosted.org/packages/f2/a7/0a915557538593cb1bbeedcd40e13c7a261822c26fecbbdb71dad0c2f540/lxml-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366", size = 3997059, upload-time = "2026-04-18T04:27:46.764Z" }, + { url = "https://files.pythonhosted.org/packages/92/96/a5dc078cf0126fbfbc35611d77ecd5da80054b5893e28fb213a5613b9e1d/lxml-6.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819", size = 3659552, upload-time = "2026-04-18T04:27:51.133Z" }, + { url = "https://files.pythonhosted.org/packages/08/03/69347590f1cf4a6d5a4944bb6099e6d37f334784f16062234e1f892fdb1d/lxml-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45", size = 8559689, upload-time = "2026-04-18T04:31:57.785Z" }, + { url = "https://files.pythonhosted.org/packages/3f/58/25e00bb40b185c974cfe156c110474d9a8a8390d5f7c92a4e328189bb60e/lxml-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d", size = 4617892, upload-time = "2026-04-18T04:32:01.78Z" }, + { url = "https://files.pythonhosted.org/packages/f5/54/92ad98a94ac318dc4f97aaac22ff8d1b94212b2ae8af5b6e9b354bf825f7/lxml-6.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2", size = 4923489, upload-time = "2026-04-18T04:33:31.401Z" }, + { url = "https://files.pythonhosted.org/packages/15/3b/a20aecfab42bdf4f9b390590d345857ad3ffd7c51988d1c89c53a0c73faf/lxml-6.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491", size = 5082162, upload-time = "2026-04-18T04:33:34.262Z" }, + { url = "https://files.pythonhosted.org/packages/45/26/2cdb3d281ac1bd175603e290cbe4bad6eff127c0f8de90bafd6f8548f0fd/lxml-6.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc", size = 4993247, upload-time = "2026-04-18T04:33:36.674Z" }, + { url = "https://files.pythonhosted.org/packages/f6/05/d735aef963740022a08185c84821f689fc903acb3d50326e6b1e9886cc22/lxml-6.1.0-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e", size = 5613042, upload-time = "2026-04-18T04:33:39.205Z" }, + { url = "https://files.pythonhosted.org/packages/ee/b8/ead7c10efff731738c72e59ed6eb5791854879fbed7ae98781a12006263a/lxml-6.1.0-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2", size = 5228304, upload-time = "2026-04-18T04:33:41.647Z" }, + { url = "https://files.pythonhosted.org/packages/6b/10/e9842d2ec322ea65f0a7270aa0315a53abed06058b88ef1b027f620e7a5f/lxml-6.1.0-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9", size = 5341578, upload-time = "2026-04-18T04:33:44.596Z" }, + { url = "https://files.pythonhosted.org/packages/89/54/40d9403d7c2775fa7301d3ddd3464689bfe9ba71acc17dfff777071b4fdc/lxml-6.1.0-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe", size = 4700209, upload-time = "2026-04-18T04:33:47.552Z" }, + { url = "https://files.pythonhosted.org/packages/85/b2/bbdcc2cf45dfc7dfffef4fd97e5c47b15919b6a365247d95d6f684ef5e82/lxml-6.1.0-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88", size = 5232365, upload-time = "2026-04-18T04:33:50.249Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/b06875665e53aaba7127611a7bed3b7b9658e20b22bc2dd217a0b7ab0091/lxml-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181", size = 5043654, upload-time = "2026-04-18T04:33:52.71Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9c/e71a069d09641c1a7abeb30e693f828c7c90a41cbe3d650b2d734d876f85/lxml-6.1.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24", size = 4769326, upload-time = "2026-04-18T04:33:55.244Z" }, + { url = "https://files.pythonhosted.org/packages/cc/06/7a9cd84b3d4ed79adf35f874750abb697dec0b4a81a836037b36e47c091a/lxml-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e", size = 5635879, upload-time = "2026-04-18T04:33:58.509Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f0/9d57916befc1e54c451712c7ee48e9e74e80ae4d03bdce49914e0aee42cd/lxml-6.1.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495", size = 5224048, upload-time = "2026-04-18T04:34:00.943Z" }, + { url = "https://files.pythonhosted.org/packages/99/75/90c4eefda0c08c92221fe0753db2d6699a4c628f76ff4465ec20dea84cc1/lxml-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33", size = 5250241, upload-time = "2026-04-18T04:34:03.365Z" }, + { url = "https://files.pythonhosted.org/packages/5e/73/16596f7e4e38fa33084b9ccbccc22a15f82a290a055126f2c1541236d2ff/lxml-6.1.0-cp313-cp313-win32.whl", hash = "sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62", size = 3596938, upload-time = "2026-04-18T04:31:56.206Z" }, + { url = "https://files.pythonhosted.org/packages/8e/63/981401c5680c1eb30893f00a19641ac80db5d1e7086c62cb4b13ed813038/lxml-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16", size = 3995728, upload-time = "2026-04-18T04:31:58.763Z" }, + { url = "https://files.pythonhosted.org/packages/e7/e8/c358a38ac3e541d16a1b527e4e9cb78c0419b0506a070ace11777e5e8404/lxml-6.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d", size = 3658372, upload-time = "2026-04-18T04:32:03.629Z" }, + { url = "https://files.pythonhosted.org/packages/eb/45/cee4cf203ef0bab5c52afc118da61d6b460c928f2893d40023cfa27e0b80/lxml-6.1.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8", size = 8576713, upload-time = "2026-04-18T04:32:06.831Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a7/eda05babeb7e046839204eaf254cd4d7c9130ce2bbf0d9e90ea41af5654d/lxml-6.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9", size = 4623874, upload-time = "2026-04-18T04:32:10.755Z" }, + { url = "https://files.pythonhosted.org/packages/e7/e9/db5846de9b436b91890a62f29d80cd849ea17948a49bf532d5278ee69a9e/lxml-6.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03", size = 4949535, upload-time = "2026-04-18T04:34:06.657Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ba/0d3593373dcae1d68f40dc3c41a5a92f2544e68115eb2f62319a4c2a6500/lxml-6.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb", size = 5086881, upload-time = "2026-04-18T04:34:09.556Z" }, + { url = "https://files.pythonhosted.org/packages/43/76/759a7484539ad1af0d125a9afe9c3fb5f82a8779fd1f5f56319d9e4ea2fd/lxml-6.1.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c", size = 5031305, upload-time = "2026-04-18T04:34:12.336Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b9/c1f0daf981a11e47636126901fd4ab82429e18c57aeb0fc3ad2940b42d8b/lxml-6.1.0-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28", size = 5647522, upload-time = "2026-04-18T04:34:14.89Z" }, + { url = "https://files.pythonhosted.org/packages/31/e6/1f533dcd205275363d9ba3511bcec52fa2df86abf8abe6a5f2c599f0dc31/lxml-6.1.0-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086", size = 5239310, upload-time = "2026-04-18T04:34:17.652Z" }, + { url = "https://files.pythonhosted.org/packages/c3/8c/4175fb709c78a6e315ed814ed33be3defd8b8721067e70419a6cf6f971da/lxml-6.1.0-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f", size = 5350799, upload-time = "2026-04-18T04:34:20.529Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/6ffdebc5994975f0dde4acb59761902bd9d9bb84422b9a0bd239a7da9ca8/lxml-6.1.0-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292", size = 4697693, upload-time = "2026-04-18T04:34:23.541Z" }, + { url = "https://files.pythonhosted.org/packages/f8/f1/565f36bd5c73294602d48e04d23f81ff4c8736be6ba5e1d1ec670ac9be80/lxml-6.1.0-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb", size = 5250708, upload-time = "2026-04-18T04:34:26.001Z" }, + { url = "https://files.pythonhosted.org/packages/5a/11/a68ab9dd18c5c499404deb4005f4bc4e0e88e5b72cd755ad96efec81d18d/lxml-6.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad", size = 5084737, upload-time = "2026-04-18T04:34:28.32Z" }, + { url = "https://files.pythonhosted.org/packages/ab/78/e8f41e2c74f4af564e6a0348aea69fb6daaefa64bc071ef469823d22cc18/lxml-6.1.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb", size = 4737817, upload-time = "2026-04-18T04:34:30.784Z" }, + { url = "https://files.pythonhosted.org/packages/06/2d/aa4e117aa2ce2f3b35d9ff246be74a2f8e853baba5d2a92c64744474603a/lxml-6.1.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f", size = 5670753, upload-time = "2026-04-18T04:34:33.675Z" }, + { url = "https://files.pythonhosted.org/packages/08/f5/dd745d50c0409031dbfcc4881740542a01e54d6f0110bd420fa7782110b8/lxml-6.1.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43", size = 5238071, upload-time = "2026-04-18T04:34:36.12Z" }, + { url = "https://files.pythonhosted.org/packages/3e/74/ad424f36d0340a904665867dab310a3f1f4c96ff4039698de83b77f44c1f/lxml-6.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585", size = 5264319, upload-time = "2026-04-18T04:34:39.035Z" }, + { url = "https://files.pythonhosted.org/packages/53/36/a15d8b3514ec889bfd6aa3609107fcb6c9189f8dc347f1c0b81eded8d87c/lxml-6.1.0-cp314-cp314-win32.whl", hash = "sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f", size = 3657139, upload-time = "2026-04-18T04:32:20.006Z" }, + { url = "https://files.pythonhosted.org/packages/1a/a4/263ebb0710851a3c6c937180a9a86df1206fdfe53cc43005aa2237fd7736/lxml-6.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120", size = 4064195, upload-time = "2026-04-18T04:32:23.876Z" }, + { url = "https://files.pythonhosted.org/packages/80/68/2000f29d323b6c286de077ad20b429fc52272e44eae6d295467043e56012/lxml-6.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946", size = 3741870, upload-time = "2026-04-18T04:32:27.922Z" }, + { url = "https://files.pythonhosted.org/packages/30/e9/21383c7c8d43799f0da90224c0d7c921870d476ec9b3e01e1b2c0b8237c5/lxml-6.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c", size = 8827548, upload-time = "2026-04-18T04:32:15.094Z" }, + { url = "https://files.pythonhosted.org/packages/a5/01/c6bc11cd587030dd4f719f65c5657960649fe3e19196c844c75bf32cd0d6/lxml-6.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d", size = 4735866, upload-time = "2026-04-18T04:32:18.924Z" }, + { url = "https://files.pythonhosted.org/packages/f3/01/757132fff5f4acf25463b5298f1a46099f3a94480b806547b29ce5e385de/lxml-6.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9", size = 4969476, upload-time = "2026-04-18T04:34:41.889Z" }, + { url = "https://files.pythonhosted.org/packages/fd/fb/1bc8b9d27ed64be7c8903db6c89e74dc8c2cd9ec630a7462e4654316dc5b/lxml-6.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9", size = 5103719, upload-time = "2026-04-18T04:34:44.797Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e7/5bf82fa28133536a54601aae633b14988e89ed61d4c1eb6b899b023233aa/lxml-6.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7", size = 5027890, upload-time = "2026-04-18T04:34:47.634Z" }, + { url = "https://files.pythonhosted.org/packages/2d/20/e048db5d4b4ea0366648aa595f26bb764b2670903fc585b87436d0a5032c/lxml-6.1.0-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86", size = 5596008, upload-time = "2026-04-18T04:34:51.503Z" }, + { url = "https://files.pythonhosted.org/packages/9a/c2/d10807bc8da4824b39e5bd01b5d05c077b6fd01bd91584167edf6b269d22/lxml-6.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb", size = 5224451, upload-time = "2026-04-18T04:34:54.263Z" }, + { url = "https://files.pythonhosted.org/packages/3c/15/2ebea45bea427e7f0057e9ce7b2d62c5aba20c6b001cca89ed0aadb3ad41/lxml-6.1.0-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c", size = 5312135, upload-time = "2026-04-18T04:34:56.818Z" }, + { url = "https://files.pythonhosted.org/packages/31/e2/87eeae151b0be2a308d49a7ec444ff3eb192b14251e62addb29d0bf3778f/lxml-6.1.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f", size = 4639126, upload-time = "2026-04-18T04:34:59.704Z" }, + { url = "https://files.pythonhosted.org/packages/a3/51/8a3f6a20902ad604dd746ec7b4000311b240d389dac5e9d95adefd349e0c/lxml-6.1.0-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773", size = 5232579, upload-time = "2026-04-18T04:35:02.658Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d2/650d619bdbe048d2c3f2c31edb00e35670a5e2d65b4fe3b61bce37b19121/lxml-6.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b", size = 5084206, upload-time = "2026-04-18T04:35:05.175Z" }, + { url = "https://files.pythonhosted.org/packages/dd/8a/672ca1a3cbeabd1f511ca275a916c0514b747f4b85bdaae103b8fa92f307/lxml-6.1.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405", size = 4758906, upload-time = "2026-04-18T04:35:08.098Z" }, + { url = "https://files.pythonhosted.org/packages/be/f1/ef4b691da85c916cb2feb1eec7414f678162798ac85e042fa164419ac05c/lxml-6.1.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690", size = 5620553, upload-time = "2026-04-18T04:35:11.23Z" }, + { url = "https://files.pythonhosted.org/packages/59/17/94e81def74107809755ac2782fdad4404420f1c92ca83433d117a6d5acf0/lxml-6.1.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd", size = 5229458, upload-time = "2026-04-18T04:35:14.254Z" }, + { url = "https://files.pythonhosted.org/packages/21/55/c4be91b0f830a871fc1b0d730943d56013b683d4671d5198260e2eae722b/lxml-6.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180", size = 5247861, upload-time = "2026-04-18T04:35:17.006Z" }, + { url = "https://files.pythonhosted.org/packages/c2/ca/77123e4d77df3cb1e968ade7b1f808f5d3a5c1c96b18a33895397de292c1/lxml-6.1.0-cp314-cp314t-win32.whl", hash = "sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2", size = 3897377, upload-time = "2026-04-18T04:32:07.656Z" }, + { url = "https://files.pythonhosted.org/packages/64/ce/3554833989d074267c063209bae8b09815e5656456a2d332b947806b05ff/lxml-6.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5", size = 4392701, upload-time = "2026-04-18T04:32:12.113Z" }, + { url = "https://files.pythonhosted.org/packages/2b/a0/9b916c68c0e57752c07f8f64b30138d9d4059dbeb27b90274dedbea128ff/lxml-6.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac", size = 3817120, upload-time = "2026-04-18T04:32:15.803Z" }, + { url = "https://files.pythonhosted.org/packages/f2/88/55143966481409b1740a3ac669e611055f49efd68087a5ce41582325db3e/lxml-6.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842", size = 3930134, upload-time = "2026-04-18T04:32:35.008Z" }, + { url = "https://files.pythonhosted.org/packages/b5/97/28b985c2983938d3cb696dd5501423afb90a8c3e869ef5d3c62569282c0f/lxml-6.1.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c", size = 4210749, upload-time = "2026-04-18T04:36:03.626Z" }, + { url = "https://files.pythonhosted.org/packages/29/67/dfab2b7d58214921935ccea7ce9b3df9b7d46f305d12f0f532ac7cf6b804/lxml-6.1.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de", size = 4318463, upload-time = "2026-04-18T04:36:06.309Z" }, + { url = "https://files.pythonhosted.org/packages/32/a2/4ac7eb32a4d997dd352c32c32399aae27b3f268d440e6f9cfa405b575d2f/lxml-6.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635", size = 4251124, upload-time = "2026-04-18T04:36:09.056Z" }, + { url = "https://files.pythonhosted.org/packages/33/ef/d6abd850bb4822f9b720cfe36b547a558e694881010ff7d012191e8769c6/lxml-6.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037", size = 4401758, upload-time = "2026-04-18T04:36:11.803Z" }, + { url = "https://files.pythonhosted.org/packages/40/44/3ee09a5b60cb44c4f2fbc1c9015cfd6ff5afc08f991cab295d3024dcbf2d/lxml-6.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace", size = 3508860, upload-time = "2026-04-18T04:32:48.619Z" }, ] [[package]] @@ -156,125 +157,121 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070 } +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321 }, + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] [[package]] name = "pillow" -version = "12.2.0" +version = "12.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819 } +sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/aa/d0b28e1c811cd4d5f5c2bfe2e022292bd255ae5744a3b9ac7d6c8f72dd75/pillow-12.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a4e8f36e677d3336f35089648c8955c51c6d386a13cf6ee9c189c5f5bd713a9f", size = 5354355 }, - { url = "https://files.pythonhosted.org/packages/27/8e/1d5b39b8ae2bd7650d0c7b6abb9602d16043ead9ebbfef4bc4047454da2a/pillow-12.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e589959f10d9824d39b350472b92f0ce3b443c0a3442ebf41c40cb8361c5b97", size = 4695871 }, - { url = "https://files.pythonhosted.org/packages/f0/c5/dcb7a6ca6b7d3be41a76958e90018d56c8462166b3ef223150360850c8da/pillow-12.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a52edc8bfff4429aaabdf4d9ee0daadbbf8562364f940937b941f87a4290f5ff", size = 6269734 }, - { url = "https://files.pythonhosted.org/packages/ea/f1/aa1bb13b2f4eba914e9637893c73f2af8e48d7d4023b9d3750d4c5eb2d0c/pillow-12.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:975385f4776fafde056abb318f612ef6285b10a1f12b8570f3647ad0d74b48ec", size = 8076080 }, - { url = "https://files.pythonhosted.org/packages/a1/2a/8c79d6a53169937784604a8ae8d77e45888c41537f7f6f65ed1f407fe66d/pillow-12.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd9c0c7a0c681a347b3194c500cb1e6ca9cab053ea4d82a5cf45b6b754560136", size = 6382236 }, - { url = "https://files.pythonhosted.org/packages/b5/42/bbcb6051030e1e421d103ce7a8ecadf837aa2f39b8f82ef1a8d37c3d4ebc/pillow-12.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88d387ff40b3ff7c274947ed3125dedf5262ec6919d83946753b5f3d7c67ea4c", size = 7070220 }, - { url = "https://files.pythonhosted.org/packages/3f/e1/c2a7d6dd8cfa6b231227da096fd2d58754bab3603b9d73bf609d3c18b64f/pillow-12.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:51c4167c34b0d8ba05b547a3bb23578d0ba17b80a5593f93bd8ecb123dd336a3", size = 6493124 }, - { url = "https://files.pythonhosted.org/packages/5f/41/7c8617da5d32e1d2f026e509484fdb6f3ad7efaef1749a0c1928adbb099e/pillow-12.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34c0d99ecccea270c04882cb3b86e7b57296079c9a4aff88cb3b33563d95afaa", size = 7194324 }, - { url = "https://files.pythonhosted.org/packages/2d/de/a777627e19fd6d62f84070ee1521adde5eeda4855b5cf60fe0b149118bca/pillow-12.2.0-cp310-cp310-win32.whl", hash = "sha256:b85f66ae9eb53e860a873b858b789217ba505e5e405a24b85c0464822fe88032", size = 6376363 }, - { url = "https://files.pythonhosted.org/packages/e7/34/fc4cb5204896465842767b96d250c08410f01f2f28afc43b257de842eed5/pillow-12.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:673aa32138f3e7531ccdbca7b3901dba9b70940a19ccecc6a37c77d5fdeb05b5", size = 7083523 }, - { url = "https://files.pythonhosted.org/packages/2d/a0/32852d36bc7709f14dc3f64f929a275e958ad8c19a6deba9610d458e28b3/pillow-12.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:3e080565d8d7c671db5802eedfb438e5565ffa40115216eabb8cd52d0ecce024", size = 2463318 }, - { url = "https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab", size = 5354347 }, - { url = "https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65", size = 4695873 }, - { url = "https://files.pythonhosted.org/packages/df/21/e3fbdf54408a973c7f7f89a23b2cb97a7ef30c61ab4142af31eee6aebc88/pillow-12.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7", size = 6280168 }, - { url = "https://files.pythonhosted.org/packages/d3/f1/00b7278c7dd52b17ad4329153748f87b6756ec195ff786c2bdf12518337d/pillow-12.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e", size = 8088188 }, - { url = "https://files.pythonhosted.org/packages/ad/cf/220a5994ef1b10e70e85748b75649d77d506499352be135a4989c957b701/pillow-12.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3997232e10d2920a68d25191392e3a4487d8183039e1c74c2297f00ed1c50705", size = 6394401 }, - { url = "https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176", size = 7079655 }, - { url = "https://files.pythonhosted.org/packages/6b/3d/45132c57d5fb4b5744567c3817026480ac7fc3ce5d4c47902bc0e7f6f853/pillow-12.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:56a3f9c60a13133a98ecff6197af34d7824de9b7b38c3654861a725c970c197b", size = 6503105 }, - { url = "https://files.pythonhosted.org/packages/7d/2e/9df2fc1e82097b1df3dce58dc43286aa01068e918c07574711fcc53e6fb4/pillow-12.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909", size = 7203402 }, - { url = "https://files.pythonhosted.org/packages/bd/2e/2941e42858ebb67e50ae741473de81c2984e6eff7b397017623c676e2e8d/pillow-12.2.0-cp311-cp311-win32.whl", hash = "sha256:8c984051042858021a54926eb597d6ee3012393ce9c181814115df4c60b9a808", size = 6378149 }, - { url = "https://files.pythonhosted.org/packages/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60", size = 7082626 }, - { url = "https://files.pythonhosted.org/packages/c2/88/549194b5d6f1f494b485e493edc6693c0a16f4ada488e5bd974ed1f42fad/pillow-12.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:9a8a34cc89c67a65ea7437ce257cea81a9dad65b29805f3ecee8c8fe8ff25ffe", size = 2463531 }, - { url = "https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5", size = 5308279 }, - { url = "https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3f40b3c5a968281fd507d519e444c35f0ff171237f4fdde090dd60699458421", size = 4695490 }, - { url = "https://files.pythonhosted.org/packages/de/af/4e8e6869cbed569d43c416fad3dc4ecb944cb5d9492defaed89ddd6fe871/pillow-12.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:03e7e372d5240cc23e9f07deca4d775c0817bffc641b01e9c3af208dbd300987", size = 6284462 }, - { url = "https://files.pythonhosted.org/packages/e9/9e/c05e19657fd57841e476be1ab46c4d501bffbadbafdc31a6d665f8b737b6/pillow-12.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b86024e52a1b269467a802258c25521e6d742349d760728092e1bc2d135b4d76", size = 8094744 }, - { url = "https://files.pythonhosted.org/packages/2b/54/1789c455ed10176066b6e7e6da1b01e50e36f94ba584dc68d9eebfe9156d/pillow-12.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7371b48c4fa448d20d2714c9a1f775a81155050d383333e0a6c15b1123dda005", size = 6398371 }, - { url = "https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780", size = 7087215 }, - { url = "https://files.pythonhosted.org/packages/8b/f8/2f6825e441d5b1959d2ca5adec984210f1ec086435b0ed5f52c19b3b8a6e/pillow-12.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:01afa7cf67f74f09523699b4e88c73fb55c13346d212a59a2db1f86b0a63e8c5", size = 6509783 }, - { url = "https://files.pythonhosted.org/packages/67/f9/029a27095ad20f854f9dba026b3ea6428548316e057e6fc3545409e86651/pillow-12.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc3d34d4a8fbec3e88a79b92e5465e0f9b842b628675850d860b8bd300b159f5", size = 7212112 }, - { url = "https://files.pythonhosted.org/packages/be/42/025cfe05d1be22dbfdb4f264fe9de1ccda83f66e4fc3aac94748e784af04/pillow-12.2.0-cp312-cp312-win32.whl", hash = "sha256:58f62cc0f00fd29e64b29f4fd923ffdb3859c9f9e6105bfc37ba1d08994e8940", size = 6378489 }, - { url = "https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f84204dee22a783350679a0333981df803dac21a0190d706a50475e361c93f5", size = 7084129 }, - { url = "https://files.pythonhosted.org/packages/10/e1/542a474affab20fd4a0f1836cb234e8493519da6b76899e30bcc5d990b8b/pillow-12.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:af73337013e0b3b46f175e79492d96845b16126ddf79c438d7ea7ff27783a414", size = 2463612 }, - { url = "https://files.pythonhosted.org/packages/4a/01/53d10cf0dbad820a8db274d259a37ba50b88b24768ddccec07355382d5ad/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c", size = 4100837 }, - { url = "https://files.pythonhosted.org/packages/0f/98/f3a6657ecb698c937f6c76ee564882945f29b79bad496abcba0e84659ec5/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2", size = 4176528 }, - { url = "https://files.pythonhosted.org/packages/69/bc/8986948f05e3ea490b8442ea1c1d4d990b24a7e43d8a51b2c7d8b1dced36/pillow-12.2.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c", size = 3640401 }, - { url = "https://files.pythonhosted.org/packages/34/46/6c717baadcd62bc8ed51d238d521ab651eaa74838291bda1f86fe1f864c9/pillow-12.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795", size = 5308094 }, - { url = "https://files.pythonhosted.org/packages/71/43/905a14a8b17fdb1ccb58d282454490662d2cb89a6bfec26af6d3520da5ec/pillow-12.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f", size = 4695402 }, - { url = "https://files.pythonhosted.org/packages/73/dd/42107efcb777b16fa0393317eac58f5b5cf30e8392e266e76e51cff28c3d/pillow-12.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed", size = 6280005 }, - { url = "https://files.pythonhosted.org/packages/a8/68/b93e09e5e8549019e61acf49f65b1a8530765a7f812c77a7461bca7e4494/pillow-12.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9", size = 8090669 }, - { url = "https://files.pythonhosted.org/packages/4b/6e/3ccb54ce8ec4ddd1accd2d89004308b7b0b21c4ac3d20fa70af4760a4330/pillow-12.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed", size = 6395194 }, - { url = "https://files.pythonhosted.org/packages/67/ee/21d4e8536afd1a328f01b359b4d3997b291ffd35a237c877b331c1c3b71c/pillow-12.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3", size = 7082423 }, - { url = "https://files.pythonhosted.org/packages/78/5f/e9f86ab0146464e8c133fe85df987ed9e77e08b29d8d35f9f9f4d6f917ba/pillow-12.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9", size = 6505667 }, - { url = "https://files.pythonhosted.org/packages/ed/1e/409007f56a2fdce61584fd3acbc2bbc259857d555196cedcadc68c015c82/pillow-12.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795", size = 7208580 }, - { url = "https://files.pythonhosted.org/packages/23/c4/7349421080b12fb35414607b8871e9534546c128a11965fd4a7002ccfbee/pillow-12.2.0-cp313-cp313-win32.whl", hash = "sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e", size = 6375896 }, - { url = "https://files.pythonhosted.org/packages/3f/82/8a3739a5e470b3c6cbb1d21d315800d8e16bff503d1f16b03a4ec3212786/pillow-12.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b", size = 7081266 }, - { url = "https://files.pythonhosted.org/packages/c3/25/f968f618a062574294592f668218f8af564830ccebdd1fa6200f598e65c5/pillow-12.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06", size = 2463508 }, - { url = "https://files.pythonhosted.org/packages/4d/a4/b342930964e3cb4dce5038ae34b0eab4653334995336cd486c5a8c25a00c/pillow-12.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b", size = 5309927 }, - { url = "https://files.pythonhosted.org/packages/9f/de/23198e0a65a9cf06123f5435a5d95cea62a635697f8f03d134d3f3a96151/pillow-12.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f", size = 4698624 }, - { url = "https://files.pythonhosted.org/packages/01/a6/1265e977f17d93ea37aa28aa81bad4fa597933879fac2520d24e021c8da3/pillow-12.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612", size = 6321252 }, - { url = "https://files.pythonhosted.org/packages/3c/83/5982eb4a285967baa70340320be9f88e57665a387e3a53a7f0db8231a0cd/pillow-12.2.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c", size = 8126550 }, - { url = "https://files.pythonhosted.org/packages/4e/48/6ffc514adce69f6050d0753b1a18fd920fce8cac87620d5a31231b04bfc5/pillow-12.2.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea", size = 6433114 }, - { url = "https://files.pythonhosted.org/packages/36/a3/f9a77144231fb8d40ee27107b4463e205fa4677e2ca2548e14da5cf18dce/pillow-12.2.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4", size = 7115667 }, - { url = "https://files.pythonhosted.org/packages/c1/fc/ac4ee3041e7d5a565e1c4fd72a113f03b6394cc72ab7089d27608f8aaccb/pillow-12.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4", size = 6538966 }, - { url = "https://files.pythonhosted.org/packages/c0/a8/27fb307055087f3668f6d0a8ccb636e7431d56ed0750e07a60547b1e083e/pillow-12.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea", size = 7238241 }, - { url = "https://files.pythonhosted.org/packages/ad/4b/926ab182c07fccae9fcb120043464e1ff1564775ec8864f21a0ebce6ac25/pillow-12.2.0-cp313-cp313t-win32.whl", hash = "sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24", size = 6379592 }, - { url = "https://files.pythonhosted.org/packages/c2/c4/f9e476451a098181b30050cc4c9a3556b64c02cf6497ea421ac047e89e4b/pillow-12.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98", size = 7085542 }, - { url = "https://files.pythonhosted.org/packages/00/a4/285f12aeacbe2d6dc36c407dfbbe9e96d4a80b0fb710a337f6d2ad978c75/pillow-12.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453", size = 2465765 }, - { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848 }, - { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515 }, - { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159 }, - { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185 }, - { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386 }, - { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384 }, - { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599 }, - { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021 }, - { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360 }, - { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628 }, - { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321 }, - { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723 }, - { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400 }, - { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835 }, - { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225 }, - { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541 }, - { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251 }, - { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807 }, - { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935 }, - { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720 }, - { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498 }, - { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413 }, - { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084 }, - { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152 }, - { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579 }, - { url = "https://files.pythonhosted.org/packages/4e/b7/2437044fb910f499610356d1352e3423753c98e34f915252aafecc64889f/pillow-12.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f", size = 5273969 }, - { url = "https://files.pythonhosted.org/packages/f6/f4/8316e31de11b780f4ac08ef3654a75555e624a98db1056ecb2122d008d5a/pillow-12.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d", size = 4659674 }, - { url = "https://files.pythonhosted.org/packages/d4/37/664fca7201f8bb2aa1d20e2c3d5564a62e6ae5111741966c8319ca802361/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f", size = 5288479 }, - { url = "https://files.pythonhosted.org/packages/49/62/5b0ed78fce87346be7a5cfcfaaad91f6a1f98c26f86bdbafa2066c647ef6/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e", size = 7032230 }, - { url = "https://files.pythonhosted.org/packages/c3/28/ec0fc38107fc32536908034e990c47914c57cd7c5a3ece4d8d8f7ffd7e27/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6c9fa44005fa37a91ebfc95d081e8079757d2e904b27103f4f5fa6f0bf78c0", size = 5355404 }, - { url = "https://files.pythonhosted.org/packages/5e/8b/51b0eddcfa2180d60e41f06bd6d0a62202b20b59c68f5a132e615b75aecf/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1", size = 6002215 }, - { url = "https://files.pythonhosted.org/packages/bc/60/5382c03e1970de634027cee8e1b7d39776b778b81812aaf45b694dfe9e28/pillow-12.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e", size = 7080946 }, + { url = "https://files.pythonhosted.org/packages/25/c2/669d88644cddb1485bd9534e63e8cf476c8e51cb3c3a1297677023505c0e/pillow-12.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a", size = 5392418, upload-time = "2026-07-01T11:53:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ba/3762f376a2948e3036488d773a146e0ae6ecc2ca03ac20e2615bd0b2ba02/pillow-12.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7", size = 4785287, upload-time = "2026-07-01T11:53:29.761Z" }, + { url = "https://files.pythonhosted.org/packages/07/50/b5d688cc9c52d4482f3d5bcab6ce20bc2a74a85d2343841c907444a3be2c/pillow-12.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f", size = 6253754, upload-time = "2026-07-01T11:53:32.298Z" }, + { url = "https://files.pythonhosted.org/packages/4e/89/36f4cd76cf4baf05c50ababb976249153f18c959171c7f6ba09a6f217260/pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec", size = 6925605, upload-time = "2026-07-01T11:53:34.487Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c0/4de58cf6633b9e3a6061ef4be6fb91fc3c90b812ece886f531e3c523d777/pillow-12.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468", size = 6327788, upload-time = "2026-07-01T11:53:36.433Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/14d53682a19550dbbaf3b598f807d5457646c510805a44c7d7891cd1cd1a/pillow-12.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed", size = 7036288, upload-time = "2026-07-01T11:53:38.712Z" }, + { url = "https://files.pythonhosted.org/packages/38/1d/36279e3c77efe034e4cc2b0393ee74ffdb5a62391dacbf9b916154f5f0b8/pillow-12.3.0-cp310-cp310-win32.whl", hash = "sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1", size = 6472396, upload-time = "2026-07-01T11:53:40.781Z" }, + { url = "https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb", size = 7226887, upload-time = "2026-07-01T11:53:42.764Z" }, + { url = "https://files.pythonhosted.org/packages/fa/17/e324be141d173c1c919428066c3259f21c1b8982e564e01a4a81e96dbdcf/pillow-12.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f", size = 2568039, upload-time = "2026-07-01T11:53:45.372Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c8/0a78b0e02d7ac54bc03e5321c9220da52f0c2ea83b21f7c40e7f3169c502/pillow-12.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756", size = 5392415, upload-time = "2026-07-01T11:53:47.162Z" }, + { url = "https://files.pythonhosted.org/packages/b2/5b/a02d30018abd97ced9f5a6c63d28597694a00d066516b9c1c6de45859fc9/pillow-12.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6", size = 4785266, upload-time = "2026-07-01T11:53:49.079Z" }, + { url = "https://files.pythonhosted.org/packages/c8/98/766667a4be768150a202836acd9fad19c06824ca86c4286d3cf6b274964e/pillow-12.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd", size = 6263814, upload-time = "2026-07-01T11:53:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd", size = 6934408, upload-time = "2026-07-01T11:53:53.487Z" }, + { url = "https://files.pythonhosted.org/packages/a3/48/9c58b685e69d49c31af6c8eb9012055fab7e665785165c84796e2c73ce72/pillow-12.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c", size = 6337160, upload-time = "2026-07-01T11:53:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fa/dc2a5c0ba6df93f67c31d34b808b7ce440b40cdbf96f0b81cde1d1e6fa93/pillow-12.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5", size = 7045172, upload-time = "2026-07-01T11:53:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/86/a5/444817a4d4c4c2417df00513086ca196f388d8f9ef40c2e4ccd1ad1af54b/pillow-12.3.0-cp311-cp311-win32.whl", hash = "sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b", size = 6472232, upload-time = "2026-07-01T11:53:59.767Z" }, + { url = "https://files.pythonhosted.org/packages/63/c6/4bad1b18d132a50b27e1365e1ab163616f7a5bb56d330f66f9d1d9d4f9d4/pillow-12.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a", size = 7233653, upload-time = "2026-07-01T11:54:02.066Z" }, + { url = "https://files.pythonhosted.org/packages/fd/16/00f91ab7760dc842f5aad55217e80fc4a7067a0604535249bc8a2d6d9870/pillow-12.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26", size = 2568195, upload-time = "2026-07-01T11:54:04.622Z" }, + { url = "https://files.pythonhosted.org/packages/37/bf/fb3ebff8ddcb76aac5a01389251bbbb9519922a9b520d8247c1ca864a25d/pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965", size = 5345969, upload-time = "2026-07-01T11:54:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/d8/66/9a386a92561f402389a4fc70c18838bf6d35eb5eb5c6850b4b2dc64f5048/pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7", size = 4780323, upload-time = "2026-07-01T11:54:09.351Z" }, + { url = "https://files.pythonhosted.org/packages/25/27/ac8f99618ffd3dde21db0f4d4b1d2ab00c0880595bfd17df103f7f39fd0c/pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9", size = 6266838, upload-time = "2026-07-01T11:54:11.71Z" }, + { url = "https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91", size = 6940830, upload-time = "2026-07-01T11:54:13.732Z" }, + { url = "https://files.pythonhosted.org/packages/eb/51/8b08617af3ad95e33ce6d7dd2c99ed6c8298f7fb131636303956be022e25/pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c", size = 6344383, upload-time = "2026-07-01T11:54:15.756Z" }, + { url = "https://files.pythonhosted.org/packages/1d/72/cf78ac9780bb93c28328f408973845a309d4d145041665f734572ced1b52/pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df", size = 7052934, upload-time = "2026-07-01T11:54:17.721Z" }, + { url = "https://files.pythonhosted.org/packages/20/20/25e0f4dc178a6bc0696793720055519a0de89e7661dae886992decbd2f81/pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f", size = 6472684, upload-time = "2026-07-01T11:54:19.839Z" }, + { url = "https://files.pythonhosted.org/packages/45/89/da2f7971a317f83d807fdd4065c0af40208e59e692cc43d315a71a0e96d1/pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09", size = 7227137, upload-time = "2026-07-01T11:54:22.025Z" }, + { url = "https://files.pythonhosted.org/packages/de/47/4845a0a6c0dbf1db8456bd9fc791f13c5ced7ced20606d08a0aacfd25b49/pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510", size = 2568267, upload-time = "2026-07-01T11:54:24.051Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, + { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, + { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, + { url = "https://files.pythonhosted.org/packages/dc/01/001f65b68192f0228cc1dbbc8d2530ab5d58b61037ba0587f946fea607cd/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330", size = 4161736, upload-time = "2026-07-01T11:54:51.156Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d2/0219746d0fd16fc8a84498e79452375be3797d3ce4044596ce565164b84f/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217", size = 4255435, upload-time = "2026-07-01T11:54:53.414Z" }, + { url = "https://files.pythonhosted.org/packages/c8/02/8d0bc62ef0302318c46ff2a512822d2610e81c7aa46c9b3abe6cbaca5ad0/pillow-12.3.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930", size = 3696262, upload-time = "2026-07-01T11:54:55.739Z" }, + { url = "https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8", size = 5350344, upload-time = "2026-07-01T11:54:57.657Z" }, + { url = "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0", size = 4780131, upload-time = "2026-07-01T11:54:59.713Z" }, + { url = "https://files.pythonhosted.org/packages/b1/9d/8b2c807dbef61a5197c047afe99823787eb66f63daf9fb2432f91d6f0462/pillow-12.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321", size = 6263757, upload-time = "2026-07-01T11:55:01.778Z" }, + { url = "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", size = 6936962, upload-time = "2026-07-01T11:55:03.93Z" }, + { url = "https://files.pythonhosted.org/packages/18/7e/e483414b35800b86b6f08dbbc7803fb5cd52c4d6f897f47d53ea2c7e6f65/pillow-12.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198", size = 6339171, upload-time = "2026-07-01T11:55:05.989Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f4/68c491844841ede6bed70189546b3ee9731cf9f2cbad396faff5e1ccba45/pillow-12.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130", size = 7048116, upload-time = "2026-07-01T11:55:08.131Z" }, + { url = "https://files.pythonhosted.org/packages/a3/34/77f3f793fed8efc7d243f21b33c5a3f0d1c97ee70346d3db855587e155ff/pillow-12.3.0-cp314-cp314-win32.whl", hash = "sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a", size = 6467209, upload-time = "2026-07-01T11:55:10.408Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d", size = 7237707, upload-time = "2026-07-01T11:55:12.745Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ac/6b11f2875f1c2ac040d84e1bbf9cf22a88038f901ca1037898b280b38365/pillow-12.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838", size = 2565995, upload-time = "2026-07-01T11:55:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/52/69/c2208e56af9bfc1913afb24020297a691eb1d4ef688474c8a04913f65e04/pillow-12.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e", size = 5352503, upload-time = "2026-07-01T11:55:17.076Z" }, + { url = "https://files.pythonhosted.org/packages/07/70/e5686d753e898a45d778ff1718dba8516ead6ab6b95d85fc8c4b70650cf2/pillow-12.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17", size = 4782956, upload-time = "2026-07-01T11:55:19.448Z" }, + { url = "https://files.pythonhosted.org/packages/d5/37/25c6692f06927ee973ff18c8d9ee98ad0b4d84ee67a09610c2dd1447958e/pillow-12.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385", size = 6322855, upload-time = "2026-07-01T11:55:21.613Z" }, + { url = "https://files.pythonhosted.org/packages/cc/91/420637fcb8f1bc11029e403b4538e6694744428d8246118e45719f944556/pillow-12.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c", size = 6989642, upload-time = "2026-07-01T11:55:24.006Z" }, + { url = "https://files.pythonhosted.org/packages/10/08/b94d7811281ccf0d143a1cf768d1c49e1e54af63e7b708ab2ee3eb87face/pillow-12.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d", size = 6391281, upload-time = "2026-07-01T11:55:26.252Z" }, + { url = "https://files.pythonhosted.org/packages/d2/87/24233f785f55474dc02ce3e739c5528a77e3a862e9333d1dd7a25cc31f70/pillow-12.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931", size = 7096716, upload-time = "2026-07-01T11:55:28.318Z" }, + { url = "https://files.pythonhosted.org/packages/23/26/fcb2f6e37175b04f53570b59937867e2b80ee1685e744023153028fc14f9/pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7", size = 6474125, upload-time = "2026-07-01T11:55:30.956Z" }, + { url = "https://files.pythonhosted.org/packages/90/de/3634abee5f1c9e13c56787b7d5517b0ba8d6de51700b95578cf338349c9f/pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c", size = 7242939, upload-time = "2026-07-01T11:55:34.044Z" }, + { url = "https://files.pythonhosted.org/packages/ce/2a/fd13f8eb24de5714a6eb444a3d67e2842c6c576e159a43793adf23051351/pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45", size = 2567506, upload-time = "2026-07-01T11:55:35.988Z" }, + { url = "https://files.pythonhosted.org/packages/5d/dc/8fdce34ec725a33c81c6ba122b904d6b9024e50ea9ac7bede62fab54506c/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139", size = 4162063, upload-time = "2026-07-01T11:55:37.941Z" }, + { url = "https://files.pythonhosted.org/packages/76/66/2044b9a63d3b84ff048228dfcb7cd9bf0df983e8470971bf7d4c57b693de/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402", size = 4255549, upload-time = "2026-07-01T11:55:40.022Z" }, + { url = "https://files.pythonhosted.org/packages/52/7e/1f67e6f4ece6b582ee4b539decbcc9f848dc245a93ed8cd7338bafef72f1/pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c", size = 3696331, upload-time = "2026-07-01T11:55:41.98Z" }, + { url = "https://files.pythonhosted.org/packages/12/40/d306fc2c8e4d45d7f175c77edca7063be7b86fe7fe6e68f4353bf71d808c/pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f", size = 5350370, upload-time = "2026-07-01T11:55:44.028Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/668fb1437e8ce420f62d6106eb66e44a5971602a4d794615bdf79315d82d/pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701", size = 4780147, upload-time = "2026-07-01T11:55:46.073Z" }, + { url = "https://files.pythonhosted.org/packages/0c/08/93fa2e70e30a2d81547e481b6ee2bb9522117221fb1e0ce4b5df70967677/pillow-12.3.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace", size = 6273659, upload-time = "2026-07-01T11:55:48.264Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6d/043e96ff814fc31a33077e4cba86082167db520c93632afdf2042febbb0c/pillow-12.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4", size = 6947439, upload-time = "2026-07-01T11:55:50.503Z" }, + { url = "https://files.pythonhosted.org/packages/af/92/ba71d2ee2ac0edf3fa33bd9d5ee9ee080da70b1766f3ca3934f9938ddac9/pillow-12.3.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39", size = 6353577, upload-time = "2026-07-01T11:55:52.697Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ce/e63064e2122923ff687c8ad792d0d736a7b3920a56a46982e81a7fdd25d6/pillow-12.3.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71", size = 7060394, upload-time = "2026-07-01T11:55:55.149Z" }, + { url = "https://files.pythonhosted.org/packages/54/76/a09cc3ccc8d773a7283d34c38bec1708f9e3cc932093cbc4c5e71ac4060b/pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827", size = 6467375, upload-time = "2026-07-01T11:55:57.769Z" }, + { url = "https://files.pythonhosted.org/packages/3e/03/1846c49ba3b1d5550392a4bbd06d6fb4578e1cd91a803198b5c90f5f7d53/pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5", size = 7237048, upload-time = "2026-07-01T11:55:59.975Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/89f35dcc79610423f9f195504d7def7f0d1416a711541b42867e25fe3412/pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658", size = 2566006, upload-time = "2026-07-01T11:56:02.143Z" }, + { url = "https://files.pythonhosted.org/packages/30/88/707027ba09942dfa2c28759b5c222d769290a41c6d20ea60ec250801941f/pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf", size = 5352509, upload-time = "2026-07-01T11:56:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6d/00352fa25332c2569cd387851f568cc5a4b75a9adbfb37ac4fbce4c02eec/pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64", size = 4783167, upload-time = "2026-07-01T11:56:06.631Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/9e049dfa21af7c22427275720e2490267ba8138120add5c4c574deb69782/pillow-12.3.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e", size = 6329237, upload-time = "2026-07-01T11:56:08.868Z" }, + { url = "https://files.pythonhosted.org/packages/36/16/cf6eeaae8d0fce8dd390a33437cf68c5d5bd73834a2bc6e2f14efda0ab45/pillow-12.3.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777", size = 6997047, upload-time = "2026-07-01T11:56:11.379Z" }, + { url = "https://files.pythonhosted.org/packages/1e/69/dbf769bdd55f48bf5733cac28edc6364ffaa072ec9ba336266e4fe66be55/pillow-12.3.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1", size = 6400440, upload-time = "2026-07-01T11:56:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e1/ffc9cfc2eea0d178da8018e18e959301ad9d6bc9f3edb7181e748a474b97/pillow-12.3.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9", size = 7105895, upload-time = "2026-07-01T11:56:16.575Z" }, + { url = "https://files.pythonhosted.org/packages/18/f0/a5595c1e8c3ae44b9828cb2f0fa8155e5095ef04d6327b8f61cf44a3df85/pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8", size = 6474384, upload-time = "2026-07-01T11:56:18.855Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/62bcd9f844984c5938d3b05264a61d797a29d3e0812341a8204af70bbdee/pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418", size = 7243537, upload-time = "2026-07-01T11:56:21.214Z" }, + { url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" }, + { url = "https://files.pythonhosted.org/packages/75/18/2e8b40223153ccbc60df07f9e8928dc0c76202aa4e55ae9f53962b6510d6/pillow-12.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468", size = 5302510, upload-time = "2026-07-01T11:56:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/46/3e/51fabf59d5ab801ceab709453d3ab6b180083496579549de4c45ced6528a/pillow-12.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94", size = 4736058, upload-time = "2026-07-01T11:56:28.041Z" }, + { url = "https://files.pythonhosted.org/packages/bf/20/22fe9384b7949e25fb1293bcfc84fb82590ff4ea6b37c95b24d26d793d86/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e", size = 5237776, upload-time = "2026-07-01T11:56:30.263Z" }, + { url = "https://files.pythonhosted.org/packages/08/14/f6ba68107680ffa74b39985f3f30884e41318fbc4250caa423c79b4788bb/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3", size = 5860358, upload-time = "2026-07-01T11:56:32.68Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0169bc772ec491108b62f644f8ecf1fe5d8ae5ebafde2ee2142210166903/pillow-12.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a", size = 7231786, upload-time = "2026-07-01T11:56:35.046Z" }, ] [[package]] name = "pygments" version = "2.20.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991 } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151 }, + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, ] [[package]] @@ -287,9 +284,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "xlsxwriter" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/a9/0c0db8d37b2b8a645666f7fd8accea4c6224e013c42b1d5c17c93590cd06/python_pptx-1.0.2.tar.gz", hash = "sha256:479a8af0eaf0f0d76b6f00b0887732874ad2e3188230315290cd1f9dd9cc7095", size = 10109297 } +sdist = { url = "https://files.pythonhosted.org/packages/52/a9/0c0db8d37b2b8a645666f7fd8accea4c6224e013c42b1d5c17c93590cd06/python_pptx-1.0.2.tar.gz", hash = "sha256:479a8af0eaf0f0d76b6f00b0887732874ad2e3188230315290cd1f9dd9cc7095", size = 10109297, upload-time = "2024-08-07T17:33:37.772Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/4f/00be2196329ebbff56ce564aa94efb0fbc828d00de250b1980de1a34ab49/python_pptx-1.0.2-py3-none-any.whl", hash = "sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba", size = 472788 }, + { url = "https://files.pythonhosted.org/packages/d9/4f/00be2196329ebbff56ce564aa94efb0fbc828d00de250b1980de1a34ab49/python_pptx-1.0.2-py3-none-any.whl", hash = "sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba", size = 472788, upload-time = "2024-08-07T17:33:28.192Z" }, ] [[package]] @@ -300,18 +297,18 @@ dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680 } +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654 }, + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, ] [[package]] name = "shellingham" version = "1.5.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, ] [[package]] @@ -339,25 +336,25 @@ dependencies = [ { name = "rich" }, { name = "shellingham" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f5/24/cb09efec5cc954f7f9b930bf8279447d24618bb6758d4f6adf2574c41780/typer-0.24.1.tar.gz", hash = "sha256:e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45", size = 118613 } +sdist = { url = "https://files.pythonhosted.org/packages/f5/24/cb09efec5cc954f7f9b930bf8279447d24618bb6758d4f6adf2574c41780/typer-0.24.1.tar.gz", hash = "sha256:e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45", size = 118613, upload-time = "2026-02-21T16:54:40.609Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl", hash = "sha256:112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e", size = 56085 }, + { url = "https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl", hash = "sha256:112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e", size = 56085, upload-time = "2026-02-21T16:54:41.616Z" }, ] [[package]] name = "typing-extensions" version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] [[package]] name = "xlsxwriter" version = "3.2.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940 } +sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940, upload-time = "2025-09-16T00:16:21.63Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315 }, + { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315, upload-time = "2025-09-16T00:16:20.108Z" }, ] diff --git a/web/app/plugins/cbf-multisite/composer.json b/web/app/plugins/cbf-multisite/composer.json index 5483187b4..3e7b8f13b 100644 --- a/web/app/plugins/cbf-multisite/composer.json +++ b/web/app/plugins/cbf-multisite/composer.json @@ -1,48 +1,51 @@ { - "name": "author-slug/cbf-multisite", - "description": "This is a short description of what the plugin does. It's displayed in the WordPress admin area.", - "homepage": "http://example.com/", - "type": "wordpress-plugin", - "keywords": [], - "license": "GPL-2.0-or-later", - "require": { - "php": ">=7.3" - }, - "require-dev": { - "composer/installers": "^2.3", - "dealerdirect/phpcodesniffer-composer-installer": "^1.1", - "woocommerce/woocommerce-sniffs": "^1.0", - "wp-coding-standards/wpcs": "^3.2" - }, - "autoload": { - "psr-4": { - "CodingBlackFemales\\Multisite\\": "includes/" - } - }, - "config": { - "platform": { - "php": "7.3.0" - }, - "allow-plugins": { - "composer/installers": true, - "dealerdirect/phpcodesniffer-composer-installer": true - } - }, - "scripts": { - "phpcs": [ - "phpcs . --ignore=vendor,node_modules,assets --extensions=php -s -p" - ], - "phpcbf": [ - "phpcbf . --ignore=vendor,node_modules,assets --extensions=php -p" - ], + "name": "author-slug/cbf-multisite", + "description": "This is a short description of what the plugin does. It's displayed in the WordPress admin area.", + "homepage": "http://example.com/", + "type": "wordpress-plugin", + "keywords": [], + "license": "GPL-2.0-or-later", + "require": { + "php": ">=7.3" + }, + "require-dev": { + "composer/installers": "^2.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.1", + "woocommerce/woocommerce-sniffs": "^2.0", + "wp-coding-standards/wpcs": "^3.2" + }, + "autoload": { + "psr-4": { + "CodingBlackFemales\\Multisite\\": "includes/" + } + }, + "config": { + "platform": { + "php": "7.3.0" + }, + "allow-plugins": { + "composer/installers": true, + "dealerdirect/phpcodesniffer-composer-installer": true + } + }, + "scripts": { + "phpcs": [ + "phpcs . --ignore=vendor,node_modules,assets --extensions=php -s -p" + ], + "phpcbf": [ + "phpcbf . --ignore=vendor,node_modules,assets --extensions=php -p" + ], "post-install-cmd": [ "npm install || true" + ], + "post-update-cmd": [ + "npm update || true" ] - }, - "extra": { - "scripts-description": { - "phpcs": "Analyze code against the WordPress coding standards with PHP_CodeSniffer", - "phpcbf": "Fix coding standards warnings/errors automatically with PHP Code Beautifier" - } - } + }, + "extra": { + "scripts-description": { + "phpcs": "Analyze code against the WordPress coding standards with PHP_CodeSniffer", + "phpcbf": "Fix coding standards warnings/errors automatically with PHP Code Beautifier" + } + } } diff --git a/web/app/plugins/cbf-multisite/composer.lock b/web/app/plugins/cbf-multisite/composer.lock index ab3eb4fc4..db925c2c5 100644 --- a/web/app/plugins/cbf-multisite/composer.lock +++ b/web/app/plugins/cbf-multisite/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0ecc0af9f78592efb629cec5897dbf0e", + "content-hash": "596c058a2695b06721f3dcf08cf36b57", "packages": [], "packages-dev": [ { @@ -639,16 +639,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.13.5", + "version": "3.13.6", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4" + "reference": "4c378e1a528ea066890fc2397cbdd2f94eb2fc91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4", - "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/4c378e1a528ea066890fc2397cbdd2f94eb2fc91", + "reference": "4c378e1a528ea066890fc2397cbdd2f94eb2fc91", "shasum": "" }, "require": { @@ -714,27 +714,27 @@ "type": "thanks_dev" } ], - "time": "2025-11-04T16:30:35+00:00" + "time": "2026-08-06T00:17:32+00:00" }, { "name": "woocommerce/woocommerce-sniffs", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/woocommerce/woocommerce-sniffs.git", - "reference": "e6da0c372573724806b270ec1d5d94988b8aec52" + "reference": "906c75a4127adeb835ddbc859a99a9dbff8891c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/woocommerce/woocommerce-sniffs/zipball/e6da0c372573724806b270ec1d5d94988b8aec52", - "reference": "e6da0c372573724806b270ec1d5d94988b8aec52", + "url": "https://api.github.com/repos/woocommerce/woocommerce-sniffs/zipball/906c75a4127adeb835ddbc859a99a9dbff8891c0", + "reference": "906c75a4127adeb835ddbc859a99a9dbff8891c0", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^1.0.0", - "php": ">=7.0", - "phpcompatibility/phpcompatibility-wp": "^2.1.0", - "wp-coding-standards/wpcs": "^3.0.0" + "php": ">=7.2", + "phpcompatibility/phpcompatibility-wp": "^2.1.7", + "wp-coding-standards/wpcs": "^3.4.1" }, "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", @@ -751,9 +751,9 @@ ], "support": { "issues": "https://github.com/woocommerce/woocommerce-sniffs/issues", - "source": "https://github.com/woocommerce/woocommerce-sniffs/tree/1.0.1" + "source": "https://github.com/woocommerce/woocommerce-sniffs/tree/2.0.0" }, - "time": "2025-09-03T13:34:27+00:00" + "time": "2026-07-31T13:27:58+00:00" }, { "name": "wp-coding-standards/wpcs", diff --git a/web/app/plugins/cbf-multisite/package-lock.json b/web/app/plugins/cbf-multisite/package-lock.json index 901130b3a..1ecb34139 100644 --- a/web/app/plugins/cbf-multisite/package-lock.json +++ b/web/app/plugins/cbf-multisite/package-lock.json @@ -117,14 +117,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", - "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -409,13 +409,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", - "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.7" + "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -1232,16 +1232,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz", - "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", + "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" + "@babel/traverse": "^7.29.8" }, "engines": { "node": ">=6.9.0" @@ -1555,9 +1555,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz", - "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", + "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", "dev": true, "license": "MIT", "dependencies": { @@ -1655,9 +1655,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz", - "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", + "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", "dev": true, "license": "MIT", "dependencies": { @@ -1964,18 +1964,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", - "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", + "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.7", + "@babel/parser": "^7.29.8", "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7", + "@babel/types": "^7.29.8", "debug": "^4.3.1" }, "engines": { @@ -1983,9 +1983,9 @@ } }, "node_modules/@babel/types": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", - "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "dev": true, "license": "MIT", "dependencies": { @@ -2160,9 +2160,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz", - "integrity": "sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.8.tgz", + "integrity": "sha512-CpMLjAvwQg3BL5S0IeqsZNMH7EQrEWi0kLKOC13ZBF0ZwERiLWlibNPJr8G1kdU3Ms/r2KiNrF81pUh2HwAHdg==", "dev": true, "funding": [ { @@ -2499,9 +2499,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { @@ -2699,13 +2699,99 @@ } }, "node_modules/@isaacs/cliui": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", - "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "engines": { - "node": ">=18" + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/@istanbuljs/load-nyc-config": { @@ -2993,50 +3079,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@jest/reporters/node_modules/brace-expansion": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", @@ -3069,22 +3111,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/reporters/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/@jest/reporters/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -3125,58 +3151,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/reporters/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/reporters/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@jest/schemas": { "version": "30.4.1", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", @@ -3411,14 +3385,14 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.64.0.tgz", - "integrity": "sha512-zs2TAq7Six5jgMuoMNjpspAvOP3mhtgq/k1UyQodEzCtQi/N83y2/y+zcvnZSGp/Rxq96DBN+bValOBQAyn/ew==", + "version": "4.68.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.68.1.tgz", + "integrity": "sha512-V5oZ4Gt9WJKyQef0n9cAd0N9qjSkIBm3E4MYsgNIWBk5aINCDPKxMPo1i29rBxqiT4Ixf1epklqV9VJMKIxwlw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.68.1", + "@jsonjoy.com/fs-node-utils": "4.68.1", "thingies": "^2.5.0" }, "engines": { @@ -3433,15 +3407,15 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.64.0.tgz", - "integrity": "sha512-nMWOVbkLFyEgmXZih3wyvxA9XpgyyqyfrINMHvEFqhi7uqfRl7c9ERJt6yX7vgMPrB9Uo+OJO+Spa0cFzPD01w==", + "version": "4.68.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.68.1.tgz", + "integrity": "sha512-HCG72UioncuO7Gw09XNVG+S85e3cq2hrUC/mexBrsWsa3mI7eePkkqWie3uVYbtsb64OR9YGQs5SqaufDRYBcg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.64.0", - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/fs-core": "4.68.1", + "@jsonjoy.com/fs-node-builtins": "4.68.1", + "@jsonjoy.com/fs-node-utils": "4.68.1", "thingies": "^2.5.0" }, "engines": { @@ -3456,17 +3430,17 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.64.0.tgz", - "integrity": "sha512-dO+NNkODbUli4uV42bcNrrLvq5rE7SNpdZ5TNd0dtbLsAaNK3MDiIC9lUi+brboGoIjW6vd2fB1qao60nrk5xA==", + "version": "4.68.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.68.1.tgz", + "integrity": "sha512-R5D9mWtqdURzcOWj1vdXr3APCwX0xchtFT+kmW7fXLNDifWdDrnh26jSID8pdnUfFBxTyfHtFtTL/NWKzIH7kQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.64.0", - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "@jsonjoy.com/fs-node-utils": "4.64.0", - "@jsonjoy.com/fs-print": "4.64.0", - "@jsonjoy.com/fs-snapshot": "4.64.0", + "@jsonjoy.com/fs-core": "4.68.1", + "@jsonjoy.com/fs-node-builtins": "4.68.1", + "@jsonjoy.com/fs-node-utils": "4.68.1", + "@jsonjoy.com/fs-print": "4.68.1", + "@jsonjoy.com/fs-snapshot": "4.68.1", "glob-to-regex.js": "^1.0.0", "thingies": "^2.5.0" }, @@ -3482,9 +3456,9 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.64.0.tgz", - "integrity": "sha512-/o7WRFhUWaM/fOrslwLZGnzn4RmRILykn+lAL+mNObqqRNw+CQSiij6hpCeZ+C7buhdoVo7go/OYqzaSUfDYmA==", + "version": "4.68.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.68.1.tgz", + "integrity": "sha512-HK1BTksysokNZxNspqDH0yPaqN9YgR/AYIlYiIaU2Ys4BOk5CdybI7r6BgiZuiiPiV8n4sK/kZdice7Znpy2Kw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3499,15 +3473,15 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.64.0.tgz", - "integrity": "sha512-WDD9WVs0hb7UAEKTgZW2f66WDrbj7gIIWwpP3spbLyXa0rghtUaFTB8L4gdR3ZCWwiKIsj38/CNijpVmpnuPUw==", + "version": "4.68.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.68.1.tgz", + "integrity": "sha512-lpKmU4X9e/oh8GIuAI7EXaS5QiLNM3KD15CkdhfS6PYmrGvoJqKQcyEfnLgnnaGslh/PFUMYSIZBCf2ejJGw8g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.64.0", - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "@jsonjoy.com/fs-node-utils": "4.64.0" + "@jsonjoy.com/fs-fsa": "4.68.1", + "@jsonjoy.com/fs-node-builtins": "4.68.1", + "@jsonjoy.com/fs-node-utils": "4.68.1" }, "engines": { "node": ">=10.0" @@ -3521,13 +3495,13 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.64.0.tgz", - "integrity": "sha512-k5Indsx9hWW9xSF7Y6oSKKwtCUNhzZxadub3owhIlitc+iMRVlPPdX2duTKQWBL3qNWpXya8jykgaaWpheeS4w==", + "version": "4.68.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.68.1.tgz", + "integrity": "sha512-/GxfW1DWm9SCdkfbvqevLO/P5duobQfmKkHXxdMIDbcZMQeAgooAstIfZhkXpATzq9QbCQsnoWFM/dGHdZfndw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.68.1", "glob-to-regex.js": "^1.0.1" }, "engines": { @@ -3542,13 +3516,13 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.64.0.tgz", - "integrity": "sha512-PHZFccchvkhWrwPWHjmVAhbC3vSHCtyZvlZfJJ3ho2bnzl450hXri6/8e6pbkWdH+SkmLXNml0sV8e5HDAfxKw==", + "version": "4.68.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.68.1.tgz", + "integrity": "sha512-oGeZOGPYKK9v1CgeVeEDsLomH1lCnslSpqUN5GmPzrmAVGQlsmsdcXNA2O4lV8Y4xkuSuynx2ITBkUHJVaTbow==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.68.1", "tree-dump": "^1.1.0" }, "engines": { @@ -3563,14 +3537,14 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.64.0.tgz", - "integrity": "sha512-oM7UDeL83q6NBzzsfKAsYKXKVXlykKFqqOLh4xZZKAzzROTlInkPbc6LTDGThEOnPiFiUzA7tYziHG9xavd76Q==", + "version": "4.68.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.68.1.tgz", + "integrity": "sha512-XZfP0FDZN32bbc4t2bZN2qRrYHg5AktJnzk22HRoKGK4BprrbNRH2k5ceSNS/kupKYcofCs+O841+xaAbjnxwQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.68.1", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -3805,9 +3779,9 @@ "license": "MIT" }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.1.tgz", - "integrity": "sha512-KjZdi8Q1wh89gsVmghvbrMgWl6ZWmRmHV6wjB7/g4Zf0dyO+hH3neZUtuDNPO00qq5YE5RITVWvrIZKRaAmzGQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.3.tgz", + "integrity": "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==", "dev": true, "license": "MIT", "optional": true, @@ -3822,8 +3796,8 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" } }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { @@ -4792,20 +4766,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@paulirish/trace_engine": { "version": "0.0.59", "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.59.tgz", @@ -4818,139 +4778,169 @@ } }, "node_modules/@peculiar/asn1-cms": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.8.0.tgz", - "integrity": "sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.9.4.tgz", + "integrity": "sha512-cben7oxmQsUGZqotus7yt0srYdncOT6RNWcTQ77T2RFOXejYVYkXadrfePdRcrVpO9K95IRLKKglG2k38jKXuw==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "@peculiar/asn1-x509-attr": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", + "@peculiar/asn1-x509-attr": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-csr": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.8.0.tgz", - "integrity": "sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.9.4.tgz", + "integrity": "sha512-xd4YN4vpRjkDAQWVfZZkeu12IEND7DOpkqaHSIHxZl1uggUNa9Ju0QxY2jHvDAS9pP0zhRBytg8ifsnGo3V0jw==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-ecc": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.8.0.tgz", - "integrity": "sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.9.4.tgz", + "integrity": "sha512-JJXefFshRAuVAjWQo/39bkg1ywc1VaiO44S8RRC+Ykvf/u2KDmYffoDb0ZBPCR5uJy4AGKQhl8mX+Q8ShcWaXQ==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-pfx": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.8.0.tgz", - "integrity": "sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.9.4.tgz", + "integrity": "sha512-khuGzHTzNzk4GDlIBEILyIs6Lce0yn0ZBdoI9v93kmNncfZRhD+AQ5ODFqdhvoE8cMJF/JMTQ8yA+t1D14kqCw==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.8.0", - "@peculiar/asn1-pkcs8": "^2.8.0", - "@peculiar/asn1-rsa": "^2.8.0", - "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-cms": "^2.9.4", + "@peculiar/asn1-pkcs8": "^2.9.4", + "@peculiar/asn1-rsa": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.8.0.tgz", - "integrity": "sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.9.4.tgz", + "integrity": "sha512-duRdotlUx9eDZe6QrQpQKl61RbWykCHBCkKayP8V8XdEFwlKHZ8qGGDMyS6Pye7OX7nLFttTTpRkJeet78ckwQ==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.8.0.tgz", - "integrity": "sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.9.4.tgz", + "integrity": "sha512-kaL4cNxBpdQE2dKlyZBqz4ygCrwffO+8wfoxTEqM1Z8RadvCeELBRzcv0dzM8aY9azHMwODO5nxU65zXmhToOQ==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.8.0", - "@peculiar/asn1-pfx": "^2.8.0", - "@peculiar/asn1-pkcs8": "^2.8.0", - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "@peculiar/asn1-x509-attr": "^2.8.0", + "@peculiar/asn1-cms": "^2.9.4", + "@peculiar/asn1-pfx": "^2.9.4", + "@peculiar/asn1-pkcs8": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", + "@peculiar/asn1-x509-attr": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-rsa": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.8.0.tgz", - "integrity": "sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.9.4.tgz", + "integrity": "sha512-pZ96eD1PptovcWQ/GSmuNFXd/7EQJNlKfDaNCyE2rx3W0v6QFelkzquVqRSRyyDXXCYD69ZXJDzZ8GhIiQzKoA==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", - "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.4.tgz", + "integrity": "sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==", "dev": true, "license": "MIT", "dependencies": { "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-x509": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.8.0.tgz", - "integrity": "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.9.4.tgz", + "integrity": "sha512-CxhBo/RdEbMMob7T31ZdQjGuoyRFLVwrDzTn25bihzBasRg9kRm/0IxIPvhgQtcK/9dNcO1XQL2fuPugwELL0Q==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.8.0.tgz", - "integrity": "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.9.4.tgz", + "integrity": "sha512-ehQXbpQaQYycgu8OrvigwSPTFfVRcu0ECNYCWw+yzBp02Lw5paRqzzhUpfOgO2K38+WfFZuEz/0RPtam5g0OMg==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/utils": { @@ -5096,9 +5086,44 @@ "@opentelemetry/api": "^1.8" } }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "node_modules/@puppeteer/browsers": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.2.tgz", + "integrity": "sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.4", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" @@ -5721,19 +5746,6 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.2.tgz", - "integrity": "sha512-d3KvEXBSo/lOAMc2u6fkyDHBvetBHeqD7wm/AcXfLpSOQwlmG9D/aQ0SFswVjv05p7ullQS7Mjohj6/VdbZuTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { "version": "4.19.9", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.9.tgz", "integrity": "sha512-QP2ESEe/ImWY0HDwNAnK9PvEffUyhLTnWkk7KXzHfyeWAnlrDe1fN77bXl6ia8KT3wPlmA7t9/VPRpnf4Ex9sg==", @@ -5893,13 +5905,6 @@ "@types/pg": "*" } }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/qs": { "version": "6.15.1", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", @@ -5914,27 +5919,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/react": { - "version": "18.3.31", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", - "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.2.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" - } - }, "node_modules/@types/retry": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", @@ -6065,17 +6049,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz", - "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz", + "integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/type-utils": "8.65.0", - "@typescript-eslint/utils": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/type-utils": "8.67.0", + "@typescript-eslint/utils": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -6088,22 +6072,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.65.0", + "@typescript-eslint/parser": "^8.67.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", - "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz", + "integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", "debug": "^4.4.3" }, "engines": { @@ -6119,14 +6103,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", - "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz", + "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.65.0", - "@typescript-eslint/types": "^8.65.0", + "@typescript-eslint/tsconfig-utils": "^8.67.0", + "@typescript-eslint/types": "^8.67.0", "debug": "^4.4.3" }, "engines": { @@ -6141,14 +6125,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz", - "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz", + "integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0" + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6159,9 +6143,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz", - "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz", + "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==", "dev": true, "license": "MIT", "engines": { @@ -6176,15 +6160,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz", - "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz", + "integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/utils": "8.65.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/utils": "8.67.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -6201,9 +6185,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz", - "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz", + "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==", "dev": true, "license": "MIT", "engines": { @@ -6215,16 +6199,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz", - "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz", + "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.65.0", - "@typescript-eslint/tsconfig-utils": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", + "@typescript-eslint/project-service": "8.67.0", + "@typescript-eslint/tsconfig-utils": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -6295,16 +6279,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz", - "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz", + "integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0" + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6319,13 +6303,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz", - "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz", + "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/types": "8.67.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -6908,9 +6892,9 @@ } }, "node_modules/@wordpress/babel-preset-default": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.52.0.tgz", - "integrity": "sha512-0beMLrvoMAHH3Q4916FEftMCkn0/lx+wg8JoxX80BjOTrCzZMQaArTgvmH2F0G9jvuhzqJebsNoqdrNvd6nTVQ==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.53.0.tgz", + "integrity": "sha512-rP2iZ89WA7SEOyuxBHF18PYOQEdA3TarxGgFXuAfObKdoC9f83N4l1zxdGNZN7418v1uMtLnGZK4v3xZzpIgoA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -6920,8 +6904,8 @@ "@babel/plugin-transform-runtime": "^7.25.7", "@babel/preset-env": "^7.25.7", "@babel/preset-typescript": "^7.25.7", - "@wordpress/browserslist-config": "^6.52.0", - "@wordpress/warning": "^3.52.0", + "@wordpress/browserslist-config": "^6.53.0", + "@wordpress/warning": "^3.53.0", "browserslist": "^4.28.4", "core-js": "^3.31.0", "react": "^18.3.1" @@ -6931,10 +6915,23 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/babel-preset-default/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@wordpress/base-styles": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-12.0.0.tgz", - "integrity": "sha512-BqSA9qZrBM9FBXFmQYvYCigA8ytkmlNFZ8+H0FscEnLWXkyCRwvHm4dE6LL53lmclKUGRMKlTZOUe1l8hfBQ5g==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-12.1.0.tgz", + "integrity": "sha512-B8Ab7dU574B1lNtjnTolO340nnW+WeaztR4RFpoL6tyqWrvDU1hK6xcjQnuNtQYJc2ngH/MO/rZOVFaFa7HFxw==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -6943,9 +6940,9 @@ } }, "node_modules/@wordpress/browserslist-config": { - "version": "6.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.52.0.tgz", - "integrity": "sha512-+4oOFS7wOuCc8ZRRT8rjoQbJCXX0li8tWN++1szH0qsRzSNVvZSu4gR7bIAK1GrQKhIjAUZItrT02iocBq7lIA==", + "version": "6.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.53.0.tgz", + "integrity": "sha512-C95FGDuloXSkystZ6jLzcl7InsLE7ySLKFYvHR3PowIMsiDPMnqRCgDUxQsl2md97Zoejgq7s+lgaC7Yxn1gQg==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -6954,21 +6951,21 @@ } }, "node_modules/@wordpress/compose": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-8.5.0.tgz", - "integrity": "sha512-giYS22Tbhtr3Lj4lK6lxzGqV6EkM2QeVBiP7+c9r2F9rnQN3F6A8cN4gQM5sVGdgIOlps9tw+dsn9OHzIFVwIg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-8.6.0.tgz", + "integrity": "sha512-aurjKO5vgnKl3p4iRM/maMEB3z36e0FdAuJOvPTHKMUjd0OUk8n2M/n2mfRS68QxVHv8mmDm1IEg8zKobwIDmA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@types/mousetrap": "^1.6.8", - "@wordpress/deprecated": "^4.52.0", - "@wordpress/dom": "^4.52.0", - "@wordpress/element": "^8.4.0", - "@wordpress/is-shallow-equal": "^5.52.0", - "@wordpress/keycodes": "^4.52.0", - "@wordpress/priority-queue": "^3.52.0", - "@wordpress/private-apis": "^1.52.0", - "@wordpress/undo-manager": "^1.52.0", + "@wordpress/deprecated": "^4.53.0", + "@wordpress/dom": "^4.53.0", + "@wordpress/element": "^8.5.0", + "@wordpress/is-shallow-equal": "^5.53.0", + "@wordpress/keycodes": "^4.53.0", + "@wordpress/priority-queue": "^3.53.0", + "@wordpress/private-apis": "^1.53.0", + "@wordpress/undo-manager": "^1.53.0", "change-case": "^4.1.2", "mousetrap": "^1.6.5", "use-memo-one": "^1.1.1" @@ -6987,10 +6984,20 @@ } } }, + "node_modules/@wordpress/compose/node_modules/use-memo-one": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", + "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@wordpress/dependency-extraction-webpack-plugin": { - "version": "6.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.52.0.tgz", - "integrity": "sha512-3cl4vODbsN2D+7E/y7QiOlm11lgWSsUBH8lnznFNuTPQc7LlqumyaY8Bxuek1BIBerbmam0R/Ww8krl1zSpvPQ==", + "version": "6.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.53.0.tgz", + "integrity": "sha512-u3ShLXmSTDmbTTe/2qEC2W4Gq5ygz5M7ahT4yOK8mkaefRE8/faX0RMHDCboaE5rApJM/sgvtufvEaLOsO4Q0g==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7005,13 +7012,13 @@ } }, "node_modules/@wordpress/deprecated": { - "version": "4.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-4.52.0.tgz", - "integrity": "sha512-94oHBKPty4pp6L5510LWDwJwNqFhikxLfwN6VUcDOQzj3itkc0MQ4ZQhmsfBy3Y6IRxSGx+p2bjSQvA4D+M96A==", + "version": "4.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-4.53.0.tgz", + "integrity": "sha512-JaIWiGVoKEmsiWP4XwAZvrET44T34EtPG+xCJe9vPIs9O3DHPyB83VHV4WxVRxddaf1osTmR6iPLx0sBvVTjZw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/hooks": "^4.52.0" + "@wordpress/hooks": "^4.53.0" }, "engines": { "node": ">=18.12.0", @@ -7019,13 +7026,13 @@ } }, "node_modules/@wordpress/dom": { - "version": "4.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-4.52.0.tgz", - "integrity": "sha512-LUY9nI9h6blk4xBuG83KgyfTnx7PMs/g6ZVzY/SOaCcOc2P3zOfzacADq/vxQydbZpcwtLM6juzgnNta6AX95w==", + "version": "4.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-4.53.0.tgz", + "integrity": "sha512-cf+WkRxuXtPLmAWXYShsbitUIkPOjIgiScUJQztA4OSqy9vfSPvrOgb6pUqijPiIo9+fhBSoyryOFCOg7xABOQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/deprecated": "^4.52.0" + "@wordpress/deprecated": "^4.53.0" }, "engines": { "node": ">=18.12.0", @@ -7033,9 +7040,9 @@ } }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.52.0.tgz", - "integrity": "sha512-LK0/WJd8iGfTo9ONaHrLSBh0IjKHeXU7urZPaNuXXB7jdt+coLTF+y0gP4c6sQ5m9OgfQqf01FPT/t2XzEbJ+w==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.53.0.tgz", + "integrity": "sha512-46wLx4MUEoXeWq+JtmFjFsQd0+m219bA1WUDW4vpMrNzO2qU87Rm+9LWudRQ5+niJvPiYyZruNAhscl5KRxbOQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7055,30 +7062,40 @@ } }, "node_modules/@wordpress/element": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-8.4.0.tgz", - "integrity": "sha512-/LzW+0MpSmKfYiESoXUQtjBPqOPyvqUm17GigQR5c0Z8Wj2NiklP72x4XaF02uSkau1ru1Z9lP8NWEGjwBwLsA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-8.5.0.tgz", + "integrity": "sha512-d6Ct+JETXRoGjfAxu5kSPjportHloZ3auAPLguQOLEoNBiZJp60fslYYd6LeVw7M7dUR3lArwcYVK0x0G06c9Q==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@types/react": "^18.3.27", - "@types/react-dom": "^18.3.1", - "@wordpress/deprecated": "^4.52.0", - "@wordpress/escape-html": "^3.52.0", + "@wordpress/deprecated": "^4.53.0", + "@wordpress/escape-html": "^3.53.0", "change-case": "^4.1.2", - "is-plain-object": "^5.0.0", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "is-plain-object": "^5.0.0" }, "engines": { "node": ">=18.12.0", "npm": ">=8.19.2" + }, + "peerDependencies": { + "@types/react": "^18 || ^19", + "@types/react-dom": "^18 || ^19", + "react": "^18 || ^19", + "react-dom": "^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, "node_modules/@wordpress/escape-html": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-3.52.0.tgz", - "integrity": "sha512-sW8X839Xu8aiJlCGF48MM3iYrcXspuiY0By8iTpXKpnUdd2u0SL9HRR0ALSAsOf2ujOeWm/x58ODMSchovRWGw==", + "version": "3.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-3.53.0.tgz", + "integrity": "sha512-6EE4hOsd0kUp4bO9voTsIeK0oa80FYMbxvJkjN9Vitnf0ZTRVB7Iz2IviaYorhGUDemlRy3kOPEZdP9DA/CoCA==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -7087,22 +7104,22 @@ } }, "node_modules/@wordpress/eslint-plugin": { - "version": "25.8.0", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-25.8.0.tgz", - "integrity": "sha512-QqYfiAVUYFLUhiLlVwB1MoGHcyNElwAPFeXnfZhYUPvFYOmQucsn4dxEGpl67PfcM2XWimni5z+mUquv4y1Mow==", + "version": "25.9.0", + "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-25.9.0.tgz", + "integrity": "sha512-SqlQUBhE+RNBvwVrDmyr0ifS6VyCwxwliiFoFjNIqEIsZlK7Os50q8bg3CjK48TwsS2n6uNIGKjERmiVMFVcLA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/eslint-parser": "^7.28.6", "@eslint-community/eslint-plugin-eslint-comments": "^4.7.0", "@eslint/compat": "^2.0.0", - "@wordpress/babel-preset-default": "^8.52.0", - "@wordpress/prettier-config": "^4.52.0", - "@wordpress/theme": "^1.1.0", + "@wordpress/babel-preset-default": "^8.53.0", + "@wordpress/prettier-config": "^4.53.0", + "@wordpress/theme": "^1.2.0", "cosmiconfig": "^7.0.0", "eslint-config-prettier": "^10.0.0", "eslint-import-resolver-typescript": "^4.4.4", - "eslint-plugin-import": "^2.31.0", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^29.16.0", "eslint-plugin-jsdoc": "^50.0.0", "eslint-plugin-jsx-a11y": "^6.10.0", @@ -7151,9 +7168,9 @@ } }, "node_modules/@wordpress/hooks": { - "version": "4.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.52.0.tgz", - "integrity": "sha512-EbV/nJTerhqwNW3DLvvGutJfNyXcmBHXuWyJpv1NypzT80k21jPGP79HBE5Z0A2oAI2kIBp6Klaa4O8uEjq/sw==", + "version": "4.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.53.0.tgz", + "integrity": "sha512-YU30rweJCTu5g7X8bc+w6QyoxJBYLEHH++Wwo/IbbROHUC/4I7e+ZtxnPWls8BTtMP4d28JJ74s+UoKpzd2J7w==", "license": "GPL-2.0-or-later", "engines": { "node": ">=18.12.0", @@ -7161,13 +7178,13 @@ } }, "node_modules/@wordpress/i18n": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.25.0.tgz", - "integrity": "sha512-UcyUT8CJgEkhjzEGTVV6kw0Qi4OraF0I9J9FBLmTda/1Wi1o6rLAXZBm2aJrP740ezFxPneHH92aQF4Z5xZqcQ==", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.26.0.tgz", + "integrity": "sha512-v/LzeB7T5YKIfBgmLM0jYG8zOuu81biZ90j8RY9pHIVu+jdRE+DSmt55S3FvtXRo5J2X9FoigFRzYPKXLbitWA==", "license": "GPL-2.0-or-later", "dependencies": { "@tannin/sprintf": "^1.3.2", - "@wordpress/hooks": "^4.52.0", + "@wordpress/hooks": "^4.53.0", "gettext-parser": "^1.3.1", "tannin": "^1.2.0" }, @@ -7180,9 +7197,9 @@ } }, "node_modules/@wordpress/is-shallow-equal": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.52.0.tgz", - "integrity": "sha512-LMIBLLTZ+vvq0DlYebL4d9XaCu16PNnhPGSn8QqsMPmBzwBYOjO0/btMLpYbs9rRc8k1QKBDWvw8eddvRVsYxA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.53.0.tgz", + "integrity": "sha512-NHhvEnqi82Vzon458Jz6nzmbAPWM1zy9k6rBXQTc+9PsRiWHWpqXqldKAeTFVrl0vspZf4PwmLlsxqP3ckCLWw==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -7191,9 +7208,9 @@ } }, "node_modules/@wordpress/jest-console": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-9.0.0.tgz", - "integrity": "sha512-SUoXpQ5Neq9hgizrYEA6uza8dTAbdzL/mD4AEwIZrsGfrcmWxguYKAahtiYLBRobhFyc3/r/uR7n5Q6xif/QYA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-9.1.0.tgz", + "integrity": "sha512-DvIDCckbQq3G4DZVktLmAQNGRsptkUSW5JeTbDAtr5L3ZtoV1fXYnryiDG9QP3ELgzIHcFX0Qa7TZmymb6SXxg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7209,13 +7226,13 @@ } }, "node_modules/@wordpress/jest-preset-default": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-13.0.0.tgz", - "integrity": "sha512-eFB/eNGJdhsdPrj1jroyIc+VPRD8TmrA36DqZWn8aZB9aCswty8bPe+OgdUeajKdRxFdnAi4jQxat9jm5EDGHA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-14.0.0.tgz", + "integrity": "sha512-ao/QFpjiVs56/WL7w/ZglLrIHmGPqiAKTNMakAZ/DQsjfEybaaHblzlpCHRCQ5qUGllYeUbQ7lsT9PrNLOe6zQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/jest-console": "^9.0.0", + "@wordpress/jest-console": "^9.1.0", "babel-jest": "^30.4.1", "change-case": "^4.1.2" }, @@ -7229,13 +7246,13 @@ } }, "node_modules/@wordpress/keycodes": { - "version": "4.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.52.0.tgz", - "integrity": "sha512-KRvwViTTdxUDgikYaCm+qnXSH2UlFuCDjAIvtjjcen8oRviSkeMv6bPn1T2vqFRKcVgt88xTtKlvI8l5U99o2Q==", + "version": "4.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.53.0.tgz", + "integrity": "sha512-e2o0NjkyGpPUGz8sfRd1OeEHdeOk3UVlL1J8P4Y9/fgQQJumTjulbiwps6yheE5kRNqbrh2o424QLdMaODu9Kw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/i18n": "^6.25.0" + "@wordpress/i18n": "^6.26.0" }, "engines": { "node": ">=18.12.0", @@ -7251,9 +7268,9 @@ } }, "node_modules/@wordpress/npm-package-json-lint-config": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-5.52.0.tgz", - "integrity": "sha512-+3fv1jmdmsvSIhlZ2PpYKVQ6VQ1zKJFMTbHoJKSSiUA0Os5ASgAAH6S/+s4B0EGHZ94G3SV3k8oaiOnwOghE5Q==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-5.53.0.tgz", + "integrity": "sha512-DxpVzH261pBWWG9MczQCAyco3MJ9vHzgoQIz2ORBGw4EdlXHIDwSJeSSosCm6tjWiJhPrr8SXEdA08UdiXb4/w==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -7265,14 +7282,14 @@ } }, "node_modules/@wordpress/postcss-plugins-preset": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.52.0.tgz", - "integrity": "sha512-/Wvo88zPqzHlLJR51JAuLm1jrMEt+tAnvmTs2xhysigFuH9gv4UN8sNf8kGmMwPMneSl2MAlLAd5ilkBTcRVag==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.53.0.tgz", + "integrity": "sha512-YzZlwe7Mh0tmZAkv+sfza0bKl5qUBk19trwyUwZHPbkyRRsb5GBAC8mvvebpLp2wb01VQwp4X69gYpALxXRjMg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/base-styles": "^12.0.0", - "@wordpress/browserslist-config": "^6.52.0", + "@wordpress/base-styles": "^12.1.0", + "@wordpress/browserslist-config": "^6.53.0", "autoprefixer": "^10.4.21", "postcss-import": "^16.1.1" }, @@ -7285,9 +7302,9 @@ } }, "node_modules/@wordpress/prettier-config": { - "version": "4.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.52.0.tgz", - "integrity": "sha512-aUxF/a7BtcfIVaJn12eZOwMUPJFMCu37wEyR+KhzR5gXssXi5yGqxJKNIHT/dmTyYC+MNxVM73g+W1HyAoIwxw==", + "version": "4.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.53.0.tgz", + "integrity": "sha512-8PrqYYl2yOsfZoo/SMQMgkJj09o1SlShwfMcD0XAXy+e5DUn0so1OodTCiAyBW1c0P1hUv7nKb+DEeCbsgjaIQ==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -7299,9 +7316,9 @@ } }, "node_modules/@wordpress/priority-queue": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.52.0.tgz", - "integrity": "sha512-aYnVXxV5j4D73tRld2n1D3G6cKLfSwKWcTnktJ7XlmiswW7xlaAqvn4FyBjwmIe20pZw0A7xLH5xCuQcqOM7nw==", + "version": "3.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.53.0.tgz", + "integrity": "sha512-HQ5AatN1QWimFHQnhhhzrfgNoiVWTqwhUEv5326hhTnyUxvh5SOYxg46IBGow+zj/VJjIPyaxv1ftuqzVxgRMQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7313,9 +7330,9 @@ } }, "node_modules/@wordpress/private-apis": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-1.52.0.tgz", - "integrity": "sha512-gFcmBXSti73Y4uEx++5qUNDaH/o0/2ijrHEJkY5e/df4RtmxVSQOIVxftRiI4m9thCWfJMoehMMreJxhwx6Qtg==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-1.53.0.tgz", + "integrity": "sha512-xXW2yeBC0n/doFLsv6chEl3Qs5phqmRH7wcUyil+Xvh3msVGzUJxvyo0szmKpQcmoYafASpkQux82HCtNp6jxQ==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -7324,25 +7341,25 @@ } }, "node_modules/@wordpress/scripts": { - "version": "34.0.0", - "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-34.0.0.tgz", - "integrity": "sha512-scpq2FRGhpUq5b0tApNPhLRUWAClKcwuilVxKsK4prnpvatmU8dkRrYGtK5nIQx/ZlzxknoQ8CETdPmtdWf2uQ==", + "version": "34.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-34.1.0.tgz", + "integrity": "sha512-eghybMctbwUuXzfWcJ25iNygCLT8oVwOKwgGuhxTTJGxD9j8xYmsu0KCqKDQ5UNnZoC0PKb4UikyEpwjmi2pWA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/core": "^7.25.7", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", "@svgr/webpack": "^8.0.1", - "@wordpress/babel-preset-default": "^8.52.0", - "@wordpress/browserslist-config": "^6.52.0", - "@wordpress/dependency-extraction-webpack-plugin": "^6.52.0", - "@wordpress/e2e-test-utils-playwright": "^1.52.0", - "@wordpress/eslint-plugin": "^25.8.0", - "@wordpress/jest-preset-default": "^13.0.0", - "@wordpress/npm-package-json-lint-config": "^5.52.0", - "@wordpress/postcss-plugins-preset": "^5.52.0", - "@wordpress/prettier-config": "^4.52.0", - "@wordpress/stylelint-config": "^24.1.0", + "@wordpress/babel-preset-default": "^8.53.0", + "@wordpress/browserslist-config": "^6.53.0", + "@wordpress/dependency-extraction-webpack-plugin": "^6.53.0", + "@wordpress/e2e-test-utils-playwright": "^1.53.0", + "@wordpress/eslint-plugin": "^25.9.0", + "@wordpress/jest-preset-default": "^14.0.0", + "@wordpress/npm-package-json-lint-config": "^5.53.0", + "@wordpress/postcss-plugins-preset": "^5.53.0", + "@wordpress/prettier-config": "^4.53.0", + "@wordpress/stylelint-config": "^24.2.0", "adm-zip": "^0.5.9", "babel-jest": "^30.4.1", "babel-loader": "^9.2.1", @@ -7520,9 +7537,9 @@ } }, "node_modules/@wordpress/scripts/node_modules/eslint": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.0.tgz", - "integrity": "sha512-nuKKvN+oIBO0koN7Tm7dlkmnkc21mtt0QJLwAKzjLq14y6lRTdVG36MZHJ8eQHwdJMwZbQNMlPOYedMq/oVJvQ==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.1.tgz", + "integrity": "sha512-wqA7W2jbsC/BnV9Iv1UZpKVFkO1AdNoSmYW8NWG4HNOBbkAMvIqDZ27pI2f07dqn583NcIC44ckjAcOXDL1QbQ==", "dev": true, "license": "MIT", "workspaces": [ @@ -7748,9 +7765,9 @@ } }, "node_modules/@wordpress/style-runtime": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@wordpress/style-runtime/-/style-runtime-0.8.0.tgz", - "integrity": "sha512-gqe5cnsDLwH2NQ//VyUtzS4pcht0iR64hP+3u6p5/pPvwA2ySGn71mJ/7+O2X7sUG5drxNp6+4Kl3LWOzkKYng==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@wordpress/style-runtime/-/style-runtime-0.9.0.tgz", + "integrity": "sha512-K2T4OfVbqgsp07zi7C6UemlJK7fF78EPmxFYuxSjnbbB14fJcOxX+Tqi/4y24hn9ECahoGjCKHZCY2U2kts8dQ==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -7759,14 +7776,14 @@ } }, "node_modules/@wordpress/stylelint-config": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-24.1.0.tgz", - "integrity": "sha512-A7baRv7LTGNiDBsKkPWP5d2xAcgdMzvYCX7rGUbEiZSCq/6JqhylzA/+ZpgwnVDFcDWlFGeEr03e+TsHH6Efyw==", + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-24.2.0.tgz", + "integrity": "sha512-hRAcYVoGAAeh8abfkF5T7d6O2T7jQgf5jRP6HEWmQOqpOFkhenZaOFC6jdoX+t/PxXFUYFV3mzgjWqNa+b1jXw==", "dev": true, "license": "MIT", "dependencies": { "@stylistic/stylelint-plugin": "^3.1.3", - "@wordpress/theme": "^1.1.0", + "@wordpress/theme": "^1.2.0", "stylelint-config-recommended": "^14.0.1", "stylelint-config-recommended-scss": "^14.1.0" }, @@ -7780,17 +7797,17 @@ } }, "node_modules/@wordpress/theme": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/theme/-/theme-1.1.0.tgz", - "integrity": "sha512-SWEGYY/HnSzmKDJnDhWVfxUDyLlJkz9EtpfAWhgPcCLSaZVc/pp99Fxr+/ueB2mHlQ9gpaWCPAMBxq8knDCbXw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@wordpress/theme/-/theme-1.2.0.tgz", + "integrity": "sha512-pILS4ytGGiASrpJ8sLp+pRbcBspFYeMTr5LdM4fWBv/EN2CIKhBLpX3qGlXwKzS+HzjrbXZwj60Bfbg/PxvQew==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/compose": "^8.5.0", - "@wordpress/deprecated": "^4.52.0", - "@wordpress/element": "^8.4.0", - "@wordpress/private-apis": "^1.52.0", - "@wordpress/style-runtime": "^0.8.0", + "@wordpress/compose": "^8.6.0", + "@wordpress/deprecated": "^4.53.0", + "@wordpress/element": "^8.5.0", + "@wordpress/private-apis": "^1.53.0", + "@wordpress/style-runtime": "^0.9.0", "colorjs.io": "^0.7.1", "memize": "^2.1.1" }, @@ -7826,13 +7843,13 @@ } }, "node_modules/@wordpress/undo-manager": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-1.52.0.tgz", - "integrity": "sha512-6hI0WWDOtLLVEkWqQokCoQRz5Pba9UNtgt5MV4hHGe5x0mzsowj+GWHedppf8UCVZ2ex3cde7fThaRKMCackrQ==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-1.53.0.tgz", + "integrity": "sha512-0MtlfeCa0uFWAGubP2rAJ1NoWQOWOuzW0kTwZgqfFFg81HEgNIBb8LU3eXMbMxERjdZYpCrqUL3MbVPl7ExiGw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/is-shallow-equal": "^5.52.0" + "@wordpress/is-shallow-equal": "^5.53.0" }, "engines": { "node": ">=18.12.0", @@ -7840,9 +7857,9 @@ } }, "node_modules/@wordpress/warning": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.52.0.tgz", - "integrity": "sha512-BjJ+Jte1g2nMITI1IHq0NwMpm/qlFOV1L+gNe0vFQmGKEcXiQ0DjrHQNtA8hV+Mgt9zSWRNS71Fgonht3r72Ew==", + "version": "3.53.0", + "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.53.0.tgz", + "integrity": "sha512-pNco8mfQM5EUJZ4m6zuHxyjnCvOKeZtxu9UGYQIRtEEMAKQJgz6HdHXKt+xQHvLA5Wi/bd0kPK5AWrl1wM22Tg==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -8143,6 +8160,19 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/are-docs-informative": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", @@ -8480,9 +8510,9 @@ } }, "node_modules/axe-core": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz", - "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.13.0.tgz", + "integrity": "sha512-UzGt8zg7Ny8djbYMhxl2zuEevVa7r2gJjYY5Lwr1xM7+XU2nd6CkIWFTVcCIbAP63vSz71NaVyyuSk9lHKcy0A==", "dev": true, "license": "MPL-2.0", "engines": { @@ -8499,6 +8529,21 @@ "node": ">= 0.4" } }, + "node_modules/b4a": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, "node_modules/babel-jest": { "version": "30.4.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.4.1.tgz", @@ -8681,9 +8726,9 @@ } }, "node_modules/bare-fs": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.4.tgz", - "integrity": "sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.8.0.tgz", + "integrity": "sha512-fM+MhCvdQhZ7NV6S95a07gPSqjIYKn6mFaXfx266wN3ajZGl/+1AzH+ubkXQ0fFZvOe2nk9VHkzdYkQE5zMV3Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8694,7 +8739,7 @@ "fast-fifo": "^1.3.2" }, "engines": { - "bare": ">=1.16.0" + "bare": ">=1.28.0" }, "peerDependencies": { "bare-buffer": "*" @@ -8740,25 +8785,10 @@ } } }, - "node_modules/bare-stream/node_modules/b4a": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", - "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, "node_modules/bare-url": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.6.tgz", - "integrity": "sha512-iQxPClE07hETVpbRoX7JXX3v/ZQViCxe/SYCxylRLzdEx1xJAufPptfiOqR8tqiCtmbtMDANKWszzjLu1PMAZQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.5.2.tgz", + "integrity": "sha512-L13PCJzKG8RGvx8V1/DdMi12ERhC3tprr7/8a94BxpmnRsFqxh5XZNdhtMxu5HPkRshYOOWRGY8lDP7ZhpG9Cg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8766,9 +8796,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.8.tgz", - "integrity": "sha512-zAgkquC2WYF0PIc6XbNYkA2uuxxFavzgmX61R+dHDUa558V8Ejf8ozTZFR6QzM24RWu4kBcRkhJ5kpz77j9fnQ==", + "version": "2.11.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.16.tgz", + "integrity": "sha512-H/bNPUFHewJHyCTdjn1n3Pit5+2GmWT6mmeHImPX+8MA9NA6b67jO4gYmi4jTbCJb2otq34KMZnovndDPqJwhQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -8923,9 +8953,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz", - "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", "dev": true, "funding": [ { @@ -8943,11 +8973,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.44", - "caniuse-lite": "^1.0.30001806", - "electron-to-chromium": "^1.5.393", - "node-releases": "^2.0.51", - "update-browserslist-db": "^1.2.3" + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" }, "bin": { "browserslist": "cli.js" @@ -9169,9 +9199,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001806", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", - "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", + "version": "1.0.30001809", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", + "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", "dev": true, "funding": [ { @@ -9329,6 +9359,30 @@ "node": ">=6.0" } }, + "node_modules/chromium-bidi": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz", + "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/chromium-bidi/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/ci-info": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", @@ -9346,9 +9400,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.1.tgz", + "integrity": "sha512-Ca8swihM+/4yKecYHY52kgJd300hi2lADU/a1RxNTRe+RJ9jvqQlESpbz9DnG9mowez8qwXHB8qYdIUw9e+F5Q==", "dev": true, "license": "MIT" }, @@ -9367,6 +9421,34 @@ "node": ">=12" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -9406,9 +9488,9 @@ "license": "MIT" }, "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.10.0.tgz", + "integrity": "sha512-AidJptpBJmjTclAp9BkLwJi0T93fo5epJnbaZslpg6QVzpHjAiveF55mE9AcUJiGMqRHgMDY8soMsQtuNYMHfw==", "dev": true, "license": "MIT" }, @@ -9430,6 +9512,16 @@ "url": "https://opencollective.com/color" } }, + "node_modules/commander": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", + "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/comment-parser": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", @@ -9616,25 +9708,31 @@ } }, "node_modules/core-js": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", - "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.50.0.tgz", + "integrity": "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==", "dev": true, "hasInstallScript": true, "license": "MIT", + "engines": { + "node": "*" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", - "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", + "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.28.1" + "browserslist": "^4.28.7" + }, + "engines": { + "node": ">=6.4.0" }, "funding": { "type": "opencollective", @@ -9642,12 +9740,15 @@ } }, "node_modules/core-js-pure": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.49.0.tgz", - "integrity": "sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.50.0.tgz", + "integrity": "sha512-6GP3Pxz4IKyWjAfa747vIu/jilB5z29JWROLqH/b+pXVcpgh6tM06ZIBwSuglgVqzDYURhOK6oEzTrG0bCHitA==", "dev": true, "hasInstallScript": true, "license": "MIT", + "engines": { + "node": "*" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -9695,9 +9796,9 @@ "license": "Python-2.0" }, "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { @@ -9997,13 +10098,6 @@ "node": ">=18" } }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -10201,9 +10295,9 @@ } }, "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", "dev": true, "license": "MIT", "dependencies": { @@ -10535,9 +10629,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.399", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.399.tgz", - "integrity": "sha512-lEcqhErbHjXRvd41rnWLpzbyU/IXfIYo7QwaFWmxGeLiLyY2TBCdHnWY88vB+p3ubnihRypDm66panXl7TylLA==", + "version": "1.5.411", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.411.tgz", + "integrity": "sha512-gglkxzokjHfawpGxq75XdBV2/l3BAPzrsMs70qgaZdTW5rpV1tC4MdgJVP9fN126bODA4ZJQkn1wryEzJyQXIg==", "dev": true, "license": "ISC" }, @@ -10821,9 +10915,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", - "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", "dev": true, "license": "MIT" }, @@ -11209,9 +11303,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "29.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.16.0.tgz", - "integrity": "sha512-0WFBxDHlT2ratGQfnFQEVIsgQJ5cfd+0IV8Kc6U3X2onB8ATLG23voD2Ch5G9fCkEpCPmCMuzW0tbS0kYb8biw==", + "version": "29.16.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.16.1.tgz", + "integrity": "sha512-tfxOIsjzaBud+f74aLbBMRcnrztt5eCIgnAdeoGdnzMAQ4IdAa/s/p8Ls55mk9MC79N3j2jbv4Qetz6Hclbcfw==", "dev": true, "license": "MIT", "dependencies": { @@ -11323,9 +11417,9 @@ } }, "node_modules/eslint-plugin-playwright/node_modules/globals": { - "version": "17.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.8.0.tgz", - "integrity": "sha512-Zz/LMDZScFmkakeL2cTHzf+PbWKdpU3uclqkZT7TjDG58j5WPt0PpA+n9uPI24fZtlw07q0OtEi84K+umsRzqQ==", + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.11.0.tgz", + "integrity": "sha512-Z2I8hM+PbJDXQDq3Icgpzv+mPdwr68iZUU9d5WW4FuXfDUQfkZaZuvjMv42/5crNyw154+9+VWXbYrUgDXbxNw==", "dev": true, "license": "MIT", "engines": { @@ -11933,9 +12027,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", - "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", "dev": true, "funding": [ { @@ -12002,6 +12096,24 @@ "pend": "~1.2.0" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -12444,9 +12556,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", - "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz", + "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==", "dev": true, "license": "MIT", "dependencies": { @@ -12568,18 +12680,66 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", - "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "global-prefix": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/globalthis": { "version": "1.0.4", @@ -13202,6 +13362,13 @@ "module-details-from-path": "^1.0.3" } }, + "node_modules/import-in-the-middle/node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, "node_modules/import-local": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", @@ -13275,11 +13442,14 @@ "license": "ISC" }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", + "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/internal-slot": { "version": "1.1.0", @@ -13320,9 +13490,9 @@ } }, "node_modules/ip-address": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.3.1.tgz", - "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz", + "integrity": "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==", "dev": true, "license": "MIT", "engines": { @@ -13330,9 +13500,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", - "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.5.0.tgz", + "integrity": "sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==", "dev": true, "license": "MIT", "engines": { @@ -14080,19 +14250,19 @@ } }, "node_modules/jackspeak": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", - "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^9.0.0" - }, - "engines": { - "node": "20 || >=22" + "@isaacs/cliui": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jest": { @@ -14253,50 +14423,6 @@ } } }, - "node_modules/jest-config/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jest-config/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-config/node_modules/brace-expansion": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", @@ -14329,22 +14455,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-config/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jest-config/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -14385,58 +14495,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-config/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-config/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/jest-diff": { "version": "30.4.1", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.4.1.tgz", @@ -14550,19 +14608,6 @@ "fsevents": "^2.3.3" } }, - "node_modules/jest-haste-map/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-leak-detector": { "version": "30.4.1", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.4.1.tgz", @@ -14615,19 +14660,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-message-util/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-mock": { "version": "30.4.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", @@ -14773,50 +14805,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-runtime/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jest-runtime/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-runtime/node_modules/brace-expansion": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", @@ -14827,13 +14815,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/jest-runtime/node_modules/cjs-module-lexer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", - "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-runtime/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -14856,22 +14837,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-runtime/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jest-runtime/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -14879,89 +14844,37 @@ "dev": true, "license": "ISC" }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-runtime/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-regex": "^6.2.2" + "brace-expansion": "^2.0.2" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-runtime/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/jest-runtime/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/jest-snapshot": { @@ -15028,19 +14941,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-validate": { "version": "30.4.1", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.4.1.tgz", @@ -15137,9 +15037,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", - "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.1.tgz", + "integrity": "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==", "dev": true, "license": "MIT", "dependencies": { @@ -15294,6 +15194,16 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/klona": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", @@ -15435,103 +15345,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/lighthouse/node_modules/@puppeteer/browsers": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.2.tgz", - "integrity": "sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.4.3", - "extract-zip": "^2.0.1", - "progress": "^2.0.3", - "proxy-agent": "^6.5.0", - "semver": "^7.7.4", - "tar-fs": "^3.1.1", - "yargs": "^17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/lighthouse/node_modules/puppeteer-core": { - "version": "24.43.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.43.1.tgz", - "integrity": "sha512-T5ScUMAsmhdNbgDR41AGESYeS6V9MSgetkSnVhhW+gXvzC42VesKCn5ld87gAZDJ6vLHL9GkRvY9WtQWSnwFbw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@puppeteer/browsers": "2.13.2", - "chromium-bidi": "14.0.0", - "debug": "^4.4.3", - "devtools-protocol": "0.0.1608973", - "typed-query-selector": "^2.12.2", - "webdriver-bidi-protocol": "0.4.1", - "ws": "^8.20.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/lighthouse/node_modules/puppeteer-core/node_modules/chromium-bidi": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz", - "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "mitt": "^3.0.1", - "zod": "^3.24.1" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/lighthouse/node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1608973", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1608973.tgz", - "integrity": "sha512-Tpm17fxYzt+J7VrGdc1k8YdRqS3YV7se/M6KeemEqvUbq/n7At1rWVuXMxQgpWkdwSdIEKYbU//Bve+Shm4YNQ==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/lighthouse/node_modules/puppeteer-core/node_modules/ws": { - "version": "8.21.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", - "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/lighthouse/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/lighthouse/node_modules/ws": { "version": "7.5.13", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz", @@ -15554,16 +15367,6 @@ } } }, - "node_modules/lighthouse/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -15867,16 +15670,6 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/markdownlint-cli/node_modules/commander": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", - "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, "node_modules/markdownlint-cli/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -15923,9 +15716,9 @@ } }, "node_modules/markdownlint-cli/node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { @@ -16018,20 +15811,20 @@ } }, "node_modules/memfs": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.64.0.tgz", - "integrity": "sha512-Kw72fgY7Wn+sD8KmtNWSafl1dz0UvAsE/PHs3YVfLiaZuA3HxNm9sRLqAu0ATiBGJvME1PxZXbBZPv5GycDeAw==", + "version": "4.68.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.68.1.tgz", + "integrity": "sha512-OD+IDRUvIxu3QHL+nFm9gdyugInD27FDJ+sl4B5QgomPHXMlbw+GP918P8VNKu2FkNlVeqBkpzkwROpamVifRw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.64.0", - "@jsonjoy.com/fs-fsa": "4.64.0", - "@jsonjoy.com/fs-node": "4.64.0", - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "@jsonjoy.com/fs-node-to-fsa": "4.64.0", - "@jsonjoy.com/fs-node-utils": "4.64.0", - "@jsonjoy.com/fs-print": "4.64.0", - "@jsonjoy.com/fs-snapshot": "4.64.0", + "@jsonjoy.com/fs-core": "4.68.1", + "@jsonjoy.com/fs-fsa": "4.68.1", + "@jsonjoy.com/fs-node": "4.68.1", + "@jsonjoy.com/fs-node-builtins": "4.68.1", + "@jsonjoy.com/fs-node-to-fsa": "4.68.1", + "@jsonjoy.com/fs-node-utils": "4.68.1", + "@jsonjoy.com/fs-print": "4.68.1", + "@jsonjoy.com/fs-snapshot": "4.68.1", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -16042,9 +15835,6 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" } }, "node_modules/memize": { @@ -16162,6 +15952,19 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -16294,16 +16097,6 @@ "node": ">=0.10.0" } }, - "node_modules/minimist-options/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/minimizer-webpack-plugin": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", @@ -16475,9 +16268,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", - "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "dev": true, "funding": [ { @@ -16589,9 +16382,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.51", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", - "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", "dev": true, "license": "MIT", "engines": { @@ -16617,6 +16410,16 @@ "wpi18n": "bin/wpi18n" } }, + "node_modules/node-wp-i18n/node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/node-wp-i18n/node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -16677,6 +16480,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/node-wp-i18n/node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/node-wp-i18n/node_modules/minimatch": { "version": "10.2.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", @@ -17487,9 +17306,9 @@ } }, "node_modules/pg-protocol": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.15.0.tgz", - "integrity": "sha512-cq9sECI5s0+uPUXjbz8ioyPJni6RzsRib0US67i5IoTZKw8fNeYlVE7u8F4dG7vEJJtc5wdD1K189lCCUwqWTQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.16.0.tgz", + "integrity": "sha512-sILXutLVjCLjcDuOmvhX5e2Z4cS5qG/6Bu3VkpFwdf/633ElGLpEh9bgmuI5I4sqKqkifQiGyiCcx1HdtrK7tg==", "dev": true, "license": "MIT" }, @@ -17518,28 +17337,18 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pirates": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", @@ -17749,9 +17558,9 @@ } }, "node_modules/postcss": { - "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", - "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", "dev": true, "funding": [ { @@ -17769,7 +17578,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.16", + "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -17883,9 +17692,9 @@ } }, "node_modules/postcss-import": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.1.tgz", - "integrity": "sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.2.0.tgz", + "integrity": "sha512-0mQUGlSp87Zl70K58RNwQAN1WS9plFE6KWGui9nyK6ninduMyjW/Khaoy/BpBoFTBh7ndAvAKrSKVbwy6vd/BA==", "dev": true, "license": "MIT", "dependencies": { @@ -18096,9 +17905,9 @@ } }, "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz", + "integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==", "dev": true, "license": "MIT", "dependencies": { @@ -18126,9 +17935,9 @@ } }, "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz", + "integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==", "dev": true, "license": "MIT", "dependencies": { @@ -18603,13 +18412,6 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -18692,6 +18494,32 @@ "node": ">=6" } }, + "node_modules/puppeteer-core": { + "version": "24.43.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.43.1.tgz", + "integrity": "sha512-T5ScUMAsmhdNbgDR41AGESYeS6V9MSgetkSnVhhW+gXvzC42VesKCn5ld87gAZDJ6vLHL9GkRvY9WtQWSnwFbw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.13.2", + "chromium-bidi": "14.0.0", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1608973", + "typed-query-selector": "^2.12.2", + "webdriver-bidi-protocol": "0.4.1", + "ws": "^8.20.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core/node_modules/devtools-protocol": { + "version": "0.0.1608973", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1608973.tgz", + "integrity": "sha512-Tpm17fxYzt+J7VrGdc1k8YdRqS3YV7se/M6KeemEqvUbq/n7At1rWVuXMxQgpWkdwSdIEKYbU//Bve+Shm4YNQ==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/pure-rand": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", @@ -18720,9 +18548,9 @@ } }, "node_modules/pvutils": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", - "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz", + "integrity": "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==", "dev": true, "license": "MIT", "engines": { @@ -18847,32 +18675,37 @@ } }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", "dev": true, "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.2.8" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/react-is-18": { "name": "react-is", "version": "18.3.1", @@ -18900,14 +18733,11 @@ } }, "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.2.tgz", + "integrity": "sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA==", "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } + "license": "MIT" }, "node_modules/read-pkg": { "version": "5.2.0", @@ -19009,9 +18839,9 @@ } }, "node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", "dev": true, "license": "MIT", "engines": { @@ -19368,16 +19198,6 @@ "run-con": "cli.js" } }, - "node_modules/run-con/node_modules/ini": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", - "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -19484,9 +19304,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.102.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.102.0.tgz", - "integrity": "sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==", + "version": "1.103.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.103.0.tgz", + "integrity": "sha512-+QpdXUDw19lVqRDlYIyje1Lq/0gHsnNHIl4x1CqeUg13zRhaQN11UvTvouwHWLXc9Q3rQVT6oBhFGRYJ5Z8gHw==", "dev": true, "license": "MIT", "dependencies": { @@ -19569,14 +19389,12 @@ } }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "dev": true, "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } + "peer": true }, "node_modules/schema-utils": { "version": "4.3.3", @@ -19734,9 +19552,9 @@ } }, "node_modules/serialize-javascript": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.7.tgz", - "integrity": "sha512-YAy8Od6KV+uuwUuU50np8fGB/Aues6Y0nAhA9y/hId74PlKUcme4pXcBD46NWKr1Q4osN/iseZ17YqO1XfmI8g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.0.tgz", + "integrity": "sha512-RNEqWOyhhUQYN9V1GfHwu9AR/g+NTciH6Z5u3/no6X3/w+04J2lVDL+svFQVXgXrEGBMG2puMVN3gq2SNGuTGw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -19892,6 +19710,19 @@ "dev": true, "license": "ISC" }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -20859,9 +20690,9 @@ } }, "node_modules/stylelint-scss/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz", + "integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==", "dev": true, "license": "MIT", "dependencies": { @@ -20982,38 +20813,10 @@ "hookified": "^1.15.0" } }, - "node_modules/stylelint/node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stylelint/node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/stylelint/node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { @@ -21033,16 +20836,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/stylelint/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stylelint/node_modules/meow": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", @@ -21057,9 +20850,9 @@ } }, "node_modules/stylelint/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz", + "integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==", "dev": true, "license": "MIT", "dependencies": { @@ -21070,19 +20863,6 @@ "node": ">=4" } }, - "node_modules/stylelint/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -21127,11 +20907,14 @@ } }, "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.5.tgz", + "integrity": "sha512-FuT74puvVMJQ8sgFxgOKPex5MbxPeltqCXJV3wR9Xq+vPHaF+tTdE1lhJcwspUxjtjvXy1NwqcSLZx9UNwHawg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/svg-tags": { "version": "1.0.0", @@ -21311,21 +21094,6 @@ "streamx": "^2.15.0" } }, - "node_modules/tar-stream/node_modules/b4a": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", - "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, "node_modules/teex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", @@ -21337,9 +21105,9 @@ } }, "node_modules/terser": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.49.0.tgz", - "integrity": "sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.50.0.tgz", + "integrity": "sha512-CN9BVxWhgS/hRxtUMjtC2uRWSTcSfQFHMDWma6sKKfIivCD91sM+FOPfvwoaRMqCSrUpe1nv3jDamd9eEQ4y+w==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -21522,21 +21290,6 @@ "b4a": "^1.6.4" } }, - "node_modules/text-decoder/node_modules/b4a": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", - "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, "node_modules/thingies": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.1.tgz", @@ -21585,37 +21338,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tldts": { "version": "6.1.86", "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", @@ -21983,16 +21705,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz", - "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.67.0.tgz", + "integrity": "sha512-S2udFs8tCKEKffuJ4TB1idGUZiXdCPGi3IPBGWXarbLQ5UPXORV8QEVzJ4gCRduURMb5EkpNCdjbk0eDIuI8Yg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.65.0", - "@typescript-eslint/parser": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/utils": "8.65.0" + "@typescript-eslint/eslint-plugin": "8.67.0", + "@typescript-eslint/parser": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/utils": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -22132,9 +21854,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", "dev": true, "funding": [ { @@ -22239,16 +21961,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/use-memo-one": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", - "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -22678,19 +22390,6 @@ } } }, - "node_modules/webpack-dev-server/node_modules/@types/express-serve-static-core": { - "version": "4.19.9", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.9.tgz", - "integrity": "sha512-QP2ESEe/ImWY0HDwNAnK9PvEffUyhLTnWkk7KXzHfyeWAnlrDe1fN77bXl6ia8KT3wPlmA7t9/VPRpnf4Ex9sg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, "node_modules/webpack-dev-server/node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -22761,6 +22460,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/webpack-dev-server/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -22789,57 +22501,6 @@ "node": ">=10.0.0" } }, - "node_modules/webpack-merge/node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-merge/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-merge/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-merge/node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-remove-empty-scripts": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/webpack-remove-empty-scripts/-/webpack-remove-empty-scripts-1.1.1.tgz", @@ -23144,9 +22805,9 @@ } }, "node_modules/ws": { - "version": "8.21.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", - "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", "dev": true, "license": "MIT", "engines": { diff --git a/web/app/plugins/cbf-multisite/package.json b/web/app/plugins/cbf-multisite/package.json index 1416f4b7c..bbeb3d4ec 100644 --- a/web/app/plugins/cbf-multisite/package.json +++ b/web/app/plugins/cbf-multisite/package.json @@ -39,5 +39,13 @@ }, "dependencies": { "@wordpress/i18n": "^6.15.0" + }, + "allowScripts": { + "@parcel/watcher@2.6.0": true, + "core-js@3.50.0": true, + "core-js-pure@3.50.0": true, + "fsevents@2.3.3": true, + "fsevents@2.3.2": true, + "unrs-resolver@1.12.2": true } } diff --git a/web/app/plugins/wp-rocket/assets/css/rocket-insights.css b/web/app/plugins/wp-rocket/assets/css/rocket-insights.css index e924fdf34..5b9082dc1 100644 --- a/web/app/plugins/wp-rocket/assets/css/rocket-insights.css +++ b/web/app/plugins/wp-rocket/assets/css/rocket-insights.css @@ -241,6 +241,16 @@ background-position: center center; } +.wpr-icon-orange-loader:before { + display: block; + content: ""; + background: url("../img/orange-loading.svg") no-repeat center center; + background-size: contain; + width: 22.857px; + height: 24px; + aspect-ratio: 20/21; +} + .wp-list-table th.column-rocket_insights, .wp-list-table td.column-rocket_insights { width: 150px; @@ -568,7 +578,7 @@ } .wpr-ri-column .wpr-ri-results .wpr-ri-actions button.wpr-ri-action--disabled, .wpr-ri-column .wpr-ri-results .wpr-ri-actions a.wpr-ri-action--disabled { - color: rgb(134.5094339623, 150.0566037736, 169.4905660377) !important; + color: #8796a9 !important; cursor: not-allowed; } .wpr-ri-column .wpr-ri-results .wpr-ri-actions button.wpr-ri-action--disabled:focus, diff --git a/web/app/plugins/wp-rocket/assets/css/rocket-insights.min.css b/web/app/plugins/wp-rocket/assets/css/rocket-insights.min.css index 06690e36d..12dbd9918 100644 --- a/web/app/plugins/wp-rocket/assets/css/rocket-insights.min.css +++ b/web/app/plugins/wp-rocket/assets/css/rocket-insights.min.css @@ -1 +1 @@ -@font-face{font-family:"wpr-icomoon";src:url("../fonts/icomoon.eot");src:url("../fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon.woff") format("woff"),url("../fonts/icomoon.ttf") format("truetype"),url("../fonts/icomoon.svg#icomoon") format("svg");font-weight:normal;font-style:normal}[class^=wpr-icon-]:before,[class*=" wpr-icon-"]:after,[class^=wpr-icon-]:after,[class*=" wpr-icon-"]:before,[id^=wpr-nav-]:before,[id*=" wpr-nav-"]:after,[id^=wpr-nav-]:after,[id*=" wpr-nav-"]:before{font-family:"wpr-icomoon";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=wpr-icon-] span.hidden,[class*=" wpr-icon-"] span.hidden{display:inline-block;height:0;width:0;overflow:hidden}.wpr-icon-chevron-right:before{content:""}.wpr-icon-chevron-left:before{content:"";transform:rotate(180deg)}.wpr-icon-chevron-down:before{content:"";transform:scale(0.6)}.wpr-icon-chevron-up:before{content:"";top:50%;transform:translateY(-50%) scale(0.6)}.wpr-icon-rollback:before{content:""}.wpr-icon-addon:before{content:""}.wpr-icon-addons:before{content:""}.wpr-icon-book:before{content:""}.wpr-icon-cdn:before{content:""}.wpr-icon-database:before{content:""}.wpr-icon-export:before{content:""}.wpr-icon-files:before{content:""}.wpr-icon-help:before{content:""}.wpr-icon-home:before{content:""}.wpr-icon-import:before{content:""}.wpr-icon-important:before{content:""}.wpr-icon-information:before{content:""}.wpr-icon-information2:before{content:""}.wpr-icon-interrogation:before{content:""}.wpr-icon-media:before{content:""}.wpr-icon-plus:before{content:""}.wpr-icon-refresh:before{content:""}.wpr-icon-rules:before{content:""}.wpr-icon-stack:before{content:""}.wpr-icon-tools:before{content:""}.wpr-icon-trash:before{content:""}.wpr-icon-user:before{content:""}.wpr-icon-check:before{content:""}.wpr-icon-check2:before{content:""}.wpr-icon-close:before{content:""}.wpr-icon-heartbeat:before{content:url("../img/heartbeat.svg")}.wpr-icon-heartbeat-hover:before{content:url("../img/heartbeat-hover.svg")}.wpr-icon-imagify:before{content:url("../img/imagify.svg")}.wpr-icon-imagify-hover:before{content:url("../img/imagify-hover.svg")}.wpr-icon-tutorial:before{content:url("../img/play.svg")}.wpr-icon-tutorial-hover:before{content:url("../img/play-hover.svg")}.wpr-icon-tutorial-alt:before{content:url("../img/play-alt.svg")}.wpr-imagify-info:before{content:url("../img/imagify-info.svg")}.wpr-imagify-install:before{content:url("../img/imagify-install.svg")}.wpr-icons-plugins:before{content:url("../img/plugins.png")}.wpr-icons-plugins-hover:before{content:url("../img/plugins-hover.png")}.wpr-icon-rocket-insights:before{content:"";background-image:url("../img/rocket-insights.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-rocket-insights-hover:before{content:"";background-image:url("../img/rocket-insights-hover.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-bold-refresh:before{content:""}.wpr-icon-report:before{content:""}.wpr-Header-nav .wpr-icon-rocket-insights:before{width:30px;height:24px;right:15px}.wpr-icon-exclamation:before{content:"";background-image:url("../img/exclamation.svg");background-repeat:no-repeat;background-position:center center}.wp-list-table th.column-rocket_insights,.wp-list-table td.column-rocket_insights{width:150px}.wpr-ri-column{min-width:150px}.wpr-ri-column.wpr-ri-not-tracked{display:flex;flex-direction:column;gap:4px}.wpr-ri-column.wpr-ri-not-tracked .wpr-ri-test-page{color:#2271b1;text-decoration:none;font-size:14px;font-weight:400;background:none;border:none;text-align:left;padding:0 0 0 0;cursor:pointer}.wpr-ri-column.wpr-ri-not-tracked .wpr-ri-test-page.wpr-ri-no-credit{color:#646970;cursor:not-allowed}.wpr-ri-column.wpr-ri-not-tracked .wpr-ri-credit-message{color:#c01b1b;font-size:12px;margin-top:2px}.wpr-ri-column .wpr-ri-loading{text-align:left;padding:8px 0}.wpr-ri-column .wpr-ri-loading .wpr-loading-img{width:32px;height:32px}.wpr-ri-column .wpr-ri-blurred{display:flex;flex-direction:column;align-items:flex-start;gap:4px}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator{top:3px}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle{display:flex;justify-content:center;align-items:center;width:32px;height:32px;font-size:14.67px;border-radius:50%;border-style:solid;border-width:1.33px;font-weight:600;line-height:0}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle.status-red{border-color:#c01b1b;color:#c01b1b;background-color:#fbe4e4}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle.status-yellow{border-color:#e9aa01;color:#e9aa01;background-color:#fff7ea}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle.status-green{border-color:#2e8f44;color:#2e8f44;background-color:#e8f8eb}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle.blurred{filter:blur(4px);-webkit-filter:blur(4px);pointer-events:none}.wpr-ri-column .wpr-ri-blurred .wpr-btn-with-tool-tip{width:100%}.wpr-ri-column .wpr-ri-score-wrapper{margin-bottom:12px}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator{position:relative;top:3px}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle{display:flex;justify-content:center;align-items:center;width:32px;height:32px;font-size:14.67px;border-radius:50%;border-style:solid;border-width:1.33px;font-weight:600;line-height:0}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle.status-red{border-color:#c01b1b;color:#c01b1b;background-color:#fbe4e4}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle.status-yellow{border-color:#e9aa01;color:#e9aa01;background-color:#fff7ea}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle.status-green{border-color:#2e8f44;color:#2e8f44;background-color:#e8f8eb}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score{display:flex;align-items:center;justify-content:center;width:21.33px;height:21.33px}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score:before{position:relative;width:21.33px;height:21.33px;background-size:contain;display:inline-block}.wpr-ri-column .wpr-ri-actions-wrapper{display:flex;flex-direction:column;gap:4px;font-size:14px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link{margin-bottom:3px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link{display:block;color:#2271b1;text-decoration:none;font-weight:400;background:none;border:none;text-align:left;padding:0 0 0 0;cursor:pointer}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link:before,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link:before,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link:before{margin-right:4px;font-size:14px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link:focus-visible,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link:focus,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link:focus-visible,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link:focus,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link:focus-visible,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link:focus{outline:none;box-shadow:0 0 0 0 rgba(106,90,205,.18);border-radius:2px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link.wpr-icon-bold-refresh:before{font-size:15px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link.wpr-ri-disabled,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link.wpr-ri-disabled,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link.wpr-ri-disabled{color:#a7aaad;cursor:not-allowed;pointer-events:none}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link.wpr-ri-disabled:hover,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link.wpr-ri-disabled:hover,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link.wpr-ri-disabled:hover{text-decoration:none}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-no-credit-text{color:#c01b1b;font-size:12px}.wpr-ri-column .wpr-btn-with-tool-tip{position:relative}.wpr-ri-column .wpr-btn-with-tool-tip:hover .wpr-tooltip{opacity:1;visibility:visible}.wpr-ri-column .wpr-tooltip{position:absolute;bottom:calc(100% + 8px);left:-125%;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:1000;width:240px}.wpr-ri-column .wpr-tooltip .wpr-tooltip-content{background:#1d2327;color:#fff;padding:8px 12px;border-radius:4px;font-size:12px;line-height:1.4;text-align:center;box-shadow:0 2px 10px rgba(0,0,0,.2)}.wpr-ri-column .wpr-tooltip:after{content:"";position:absolute;top:100%;left:83%;width:0;height:0;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);border-top:6px solid #1d2327}.wpr-ri-column .wpr-ri-results{display:flex;align-items:center;gap:12px}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator{top:3px}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle{display:flex;justify-content:center;align-items:center;width:32px;height:32px;font-size:14.67px;border-radius:50%;border-style:solid;border-width:1.33px;font-weight:600;line-height:0}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.status-red{border-color:#c01b1b;color:#c01b1b;background-color:#fbe4e4}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.status-yellow{border-color:#e9aa01;color:#e9aa01;background-color:#fff7ea}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.status-green{border-color:#2e8f44;color:#2e8f44;background-color:#e8f8eb}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.blurred{filter:blur(10px);user-select:none;-webkit-user-select:none;-moz-user-select:none;pointer-events:none}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score{width:16px;height:16px}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score:before{width:16px;height:16px;background-size:contain;display:inline-block}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-loading-img{width:32px;height:32px}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.wpr-centralize-100-score{text-indent:-1px}.wpr-ri-column .wpr-ri-results .wpr-ri-actions{display:inline-flex;align-items:center;gap:0;margin-left:0}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a{font-family:Roboto,Arial,sans-serif;display:inline-block;font-size:14px;font-weight:600;line-height:1.5;padding:0 8px;margin:0;color:#121116;background:rgba(0,0,0,0);border:0;cursor:pointer;text-decoration:none;transition:color .2s ease;position:relative}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button:first-child,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a:first-child{padding-left:0}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button:hover:not(.wpr-ri-action--disabled),.wpr-ri-column .wpr-ri-results .wpr-ri-actions a:hover:not(.wpr-ri-action--disabled){color:#135e96}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button:focus,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a:focus{outline:2px solid #2271b1;outline-offset:2px}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button.wpr-ri-action--disabled,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a.wpr-ri-action--disabled{color:rgb(134.5094339623,150.0566037736,169.4905660377) !important;cursor:not-allowed}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button.wpr-ri-action--disabled:focus,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a.wpr-ri-action--disabled:focus{outline:none}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button:before,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a:before{position:relative}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button.wpr-icon-bold-refresh:before,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a.wpr-icon-bold-refresh:before{font-size:15px}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-btn-with-tool-tip{position:relative}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-btn-with-tool-tip:hover .wpr-tooltip{opacity:1;visibility:visible}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:1000;width:280px}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-tooltip .wpr-tooltip-content{background:#1d2327;color:#fff;padding:8px 12px;border-radius:4px;font-size:12px;line-height:1.4;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-weight:400;text-align:left}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-tooltip:before{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);border:6px solid rgba(0,0,0,0);border-top-color:#1d2327}.wpr-ri-column .wpr-ri-error{color:#d63638;font-size:13px}.wpr-ri-column .wpr-ri-error .wpr-icon-exclamation{width:16px;height:16px}.wpr-ri-column .wpr-ri-error .wpr-icon-exclamation:before{width:16px;height:16px}.wpr-ri-column .wpr-ri-message{margin-top:8px;font-size:12px;line-height:1.4;color:#c01b1b}.wpr-ri-column .wpr-ri-message a{color:#c01b1b;text-decoration:underline} \ No newline at end of file +@font-face{font-family:"wpr-icomoon";src:url("../fonts/icomoon.eot");src:url("../fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon.woff") format("woff"),url("../fonts/icomoon.ttf") format("truetype"),url("../fonts/icomoon.svg#icomoon") format("svg");font-weight:normal;font-style:normal}[class^=wpr-icon-]:before,[class*=" wpr-icon-"]:after,[class^=wpr-icon-]:after,[class*=" wpr-icon-"]:before,[id^=wpr-nav-]:before,[id*=" wpr-nav-"]:after,[id^=wpr-nav-]:after,[id*=" wpr-nav-"]:before{font-family:"wpr-icomoon";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=wpr-icon-] span.hidden,[class*=" wpr-icon-"] span.hidden{display:inline-block;height:0;width:0;overflow:hidden}.wpr-icon-chevron-right:before{content:""}.wpr-icon-chevron-left:before{content:"";transform:rotate(180deg)}.wpr-icon-chevron-down:before{content:"";transform:scale(0.6)}.wpr-icon-chevron-up:before{content:"";top:50%;transform:translateY(-50%) scale(0.6)}.wpr-icon-rollback:before{content:""}.wpr-icon-addon:before{content:""}.wpr-icon-addons:before{content:""}.wpr-icon-book:before{content:""}.wpr-icon-cdn:before{content:""}.wpr-icon-database:before{content:""}.wpr-icon-export:before{content:""}.wpr-icon-files:before{content:""}.wpr-icon-help:before{content:""}.wpr-icon-home:before{content:""}.wpr-icon-import:before{content:""}.wpr-icon-important:before{content:""}.wpr-icon-information:before{content:""}.wpr-icon-information2:before{content:""}.wpr-icon-interrogation:before{content:""}.wpr-icon-media:before{content:""}.wpr-icon-plus:before{content:""}.wpr-icon-refresh:before{content:""}.wpr-icon-rules:before{content:""}.wpr-icon-stack:before{content:""}.wpr-icon-tools:before{content:""}.wpr-icon-trash:before{content:""}.wpr-icon-user:before{content:""}.wpr-icon-check:before{content:""}.wpr-icon-check2:before{content:""}.wpr-icon-close:before{content:""}.wpr-icon-heartbeat:before{content:url("../img/heartbeat.svg")}.wpr-icon-heartbeat-hover:before{content:url("../img/heartbeat-hover.svg")}.wpr-icon-imagify:before{content:url("../img/imagify.svg")}.wpr-icon-imagify-hover:before{content:url("../img/imagify-hover.svg")}.wpr-icon-tutorial:before{content:url("../img/play.svg")}.wpr-icon-tutorial-hover:before{content:url("../img/play-hover.svg")}.wpr-icon-tutorial-alt:before{content:url("../img/play-alt.svg")}.wpr-imagify-info:before{content:url("../img/imagify-info.svg")}.wpr-imagify-install:before{content:url("../img/imagify-install.svg")}.wpr-icons-plugins:before{content:url("../img/plugins.png")}.wpr-icons-plugins-hover:before{content:url("../img/plugins-hover.png")}.wpr-icon-rocket-insights:before{content:"";background-image:url("../img/rocket-insights.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-rocket-insights-hover:before{content:"";background-image:url("../img/rocket-insights-hover.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-bold-refresh:before{content:""}.wpr-icon-report:before{content:""}.wpr-Header-nav .wpr-icon-rocket-insights:before{width:30px;height:24px;right:15px}.wpr-icon-exclamation:before{content:"";background-image:url("../img/exclamation.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-orange-loader:before{display:block;content:"";background:url("../img/orange-loading.svg") no-repeat center center;background-size:contain;width:22.857px;height:24px;aspect-ratio:20/21}.wp-list-table th.column-rocket_insights,.wp-list-table td.column-rocket_insights{width:150px}.wpr-ri-column{min-width:150px}.wpr-ri-column.wpr-ri-not-tracked{display:flex;flex-direction:column;gap:4px}.wpr-ri-column.wpr-ri-not-tracked .wpr-ri-test-page{color:#2271b1;text-decoration:none;font-size:14px;font-weight:400;background:none;border:none;text-align:left;padding:0 0 0 0;cursor:pointer}.wpr-ri-column.wpr-ri-not-tracked .wpr-ri-test-page.wpr-ri-no-credit{color:#646970;cursor:not-allowed}.wpr-ri-column.wpr-ri-not-tracked .wpr-ri-credit-message{color:#c01b1b;font-size:12px;margin-top:2px}.wpr-ri-column .wpr-ri-loading{text-align:left;padding:8px 0}.wpr-ri-column .wpr-ri-loading .wpr-loading-img{width:32px;height:32px}.wpr-ri-column .wpr-ri-blurred{display:flex;flex-direction:column;align-items:flex-start;gap:4px}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator{top:3px}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle{display:flex;justify-content:center;align-items:center;width:32px;height:32px;font-size:14.67px;border-radius:50%;border-style:solid;border-width:1.33px;font-weight:600;line-height:0}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle.status-red{border-color:#c01b1b;color:#c01b1b;background-color:#fbe4e4}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle.status-yellow{border-color:#e9aa01;color:#e9aa01;background-color:#fff7ea}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle.status-green{border-color:#2e8f44;color:#2e8f44;background-color:#e8f8eb}.wpr-ri-column .wpr-ri-blurred .wpr-percentage-indicator .wpr-percentage-circle.blurred{filter:blur(4px);-webkit-filter:blur(4px);pointer-events:none}.wpr-ri-column .wpr-ri-blurred .wpr-btn-with-tool-tip{width:100%}.wpr-ri-column .wpr-ri-score-wrapper{margin-bottom:12px}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator{position:relative;top:3px}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle{display:flex;justify-content:center;align-items:center;width:32px;height:32px;font-size:14.67px;border-radius:50%;border-style:solid;border-width:1.33px;font-weight:600;line-height:0}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle.status-red{border-color:#c01b1b;color:#c01b1b;background-color:#fbe4e4}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle.status-yellow{border-color:#e9aa01;color:#e9aa01;background-color:#fff7ea}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle.status-green{border-color:#2e8f44;color:#2e8f44;background-color:#e8f8eb}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score{display:flex;align-items:center;justify-content:center;width:21.33px;height:21.33px}.wpr-ri-column .wpr-ri-score-wrapper .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score:before{position:relative;width:21.33px;height:21.33px;background-size:contain;display:inline-block}.wpr-ri-column .wpr-ri-actions-wrapper{display:flex;flex-direction:column;gap:4px;font-size:14px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link{margin-bottom:3px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link{display:block;color:#2271b1;text-decoration:none;font-weight:400;background:none;border:none;text-align:left;padding:0 0 0 0;cursor:pointer}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link:before,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link:before,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link:before{margin-right:4px;font-size:14px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link:focus-visible,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link:focus,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link:focus-visible,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link:focus,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link:focus-visible,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link:focus{outline:none;box-shadow:0 0 0 0 rgba(106,90,205,.18);border-radius:2px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link.wpr-icon-bold-refresh:before{font-size:15px}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link.wpr-ri-disabled,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link.wpr-ri-disabled,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link.wpr-ri-disabled{color:#a7aaad;cursor:not-allowed;pointer-events:none}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-retest-link.wpr-ri-disabled:hover,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-see-report-link.wpr-ri-disabled:hover,.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-view-details-link.wpr-ri-disabled:hover{text-decoration:none}.wpr-ri-column .wpr-ri-actions-wrapper .wpr-ri-no-credit-text{color:#c01b1b;font-size:12px}.wpr-ri-column .wpr-btn-with-tool-tip{position:relative}.wpr-ri-column .wpr-btn-with-tool-tip:hover .wpr-tooltip{opacity:1;visibility:visible}.wpr-ri-column .wpr-tooltip{position:absolute;bottom:calc(100% + 8px);left:-125%;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:1000;width:240px}.wpr-ri-column .wpr-tooltip .wpr-tooltip-content{background:#1d2327;color:#fff;padding:8px 12px;border-radius:4px;font-size:12px;line-height:1.4;text-align:center;box-shadow:0 2px 10px rgba(0,0,0,.2)}.wpr-ri-column .wpr-tooltip:after{content:"";position:absolute;top:100%;left:83%;width:0;height:0;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);border-top:6px solid #1d2327}.wpr-ri-column .wpr-ri-results{display:flex;align-items:center;gap:12px}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator{top:3px}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle{display:flex;justify-content:center;align-items:center;width:32px;height:32px;font-size:14.67px;border-radius:50%;border-style:solid;border-width:1.33px;font-weight:600;line-height:0}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.status-red{border-color:#c01b1b;color:#c01b1b;background-color:#fbe4e4}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.status-yellow{border-color:#e9aa01;color:#e9aa01;background-color:#fff7ea}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.status-green{border-color:#2e8f44;color:#2e8f44;background-color:#e8f8eb}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.blurred{filter:blur(10px);user-select:none;-webkit-user-select:none;-moz-user-select:none;pointer-events:none}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score{width:16px;height:16px}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score:before{width:16px;height:16px;background-size:contain;display:inline-block}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-loading-img{width:32px;height:32px}.wpr-ri-column .wpr-ri-results .wpr-percentage-indicator .wpr-percentage-circle.wpr-centralize-100-score{text-indent:-1px}.wpr-ri-column .wpr-ri-results .wpr-ri-actions{display:inline-flex;align-items:center;gap:0;margin-left:0}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a{font-family:Roboto,Arial,sans-serif;display:inline-block;font-size:14px;font-weight:600;line-height:1.5;padding:0 8px;margin:0;color:#121116;background:rgba(0,0,0,0);border:0;cursor:pointer;text-decoration:none;transition:color .2s ease;position:relative}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button:first-child,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a:first-child{padding-left:0}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button:hover:not(.wpr-ri-action--disabled),.wpr-ri-column .wpr-ri-results .wpr-ri-actions a:hover:not(.wpr-ri-action--disabled){color:#135e96}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button:focus,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a:focus{outline:2px solid #2271b1;outline-offset:2px}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button.wpr-ri-action--disabled,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a.wpr-ri-action--disabled{color:#8796a9 !important;cursor:not-allowed}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button.wpr-ri-action--disabled:focus,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a.wpr-ri-action--disabled:focus{outline:none}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button:before,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a:before{position:relative}.wpr-ri-column .wpr-ri-results .wpr-ri-actions button.wpr-icon-bold-refresh:before,.wpr-ri-column .wpr-ri-results .wpr-ri-actions a.wpr-icon-bold-refresh:before{font-size:15px}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-btn-with-tool-tip{position:relative}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-btn-with-tool-tip:hover .wpr-tooltip{opacity:1;visibility:visible}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:1000;width:280px}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-tooltip .wpr-tooltip-content{background:#1d2327;color:#fff;padding:8px 12px;border-radius:4px;font-size:12px;line-height:1.4;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-weight:400;text-align:left}.wpr-ri-column .wpr-ri-results .wpr-ri-actions .wpr-tooltip:before{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);border:6px solid rgba(0,0,0,0);border-top-color:#1d2327}.wpr-ri-column .wpr-ri-error{color:#d63638;font-size:13px}.wpr-ri-column .wpr-ri-error .wpr-icon-exclamation{width:16px;height:16px}.wpr-ri-column .wpr-ri-error .wpr-icon-exclamation:before{width:16px;height:16px}.wpr-ri-column .wpr-ri-message{margin-top:8px;font-size:12px;line-height:1.4;color:#c01b1b}.wpr-ri-column .wpr-ri-message a{color:#c01b1b;text-decoration:underline} \ No newline at end of file diff --git a/web/app/plugins/wp-rocket/assets/css/wpr-admin-common.css b/web/app/plugins/wp-rocket/assets/css/wpr-admin-common.css index 1de3b2f09..8584829cc 100644 --- a/web/app/plugins/wp-rocket/assets/css/wpr-admin-common.css +++ b/web/app/plugins/wp-rocket/assets/css/wpr-admin-common.css @@ -40,7 +40,23 @@ min-width: 18px; height: 18px; border-radius: 9px; - background-color: red; + background-color: #d63638; color: #fff; z-index: 26; } + +.rocket-red-bubble { + background-color: #d63638; + color: #fff; + display: inline-block; + box-sizing: border-box; + min-width: 18px; + height: 18px; + font-size: 13px; + text-align: center; + border-radius: 9px; +} +#wp-admin-bar-wp-rocket .rocket-red-bubble { + line-height: 18px; + border-radius: 9px; +} diff --git a/web/app/plugins/wp-rocket/assets/css/wpr-admin.css b/web/app/plugins/wp-rocket/assets/css/wpr-admin.css index c6e09cf8b..685d2cf90 100644 --- a/web/app/plugins/wp-rocket/assets/css/wpr-admin.css +++ b/web/app/plugins/wp-rocket/assets/css/wpr-admin.css @@ -414,6 +414,25 @@ a:focus, button:focus { background-position: center center; } +.wpr-icon-orange-loader:before { + display: block; + content: ""; + background: url("../img/orange-loading.svg") no-repeat center center; + background-size: contain; + width: 22.857px; + height: 24px; + aspect-ratio: 20/21; +} + +.wpr-icon-mcp:before { + display: block; + content: ""; + background: url("../img/mcp.svg") no-repeat center center; + background-size: contain; + width: 45px; + height: 45px; +} + .wpr-title1 { font-size: 1.625rem; line-height: 1; @@ -697,6 +716,10 @@ a:focus, button:focus { .wpr-Page#dashboard .wpr-field-account { padding-bottom: 0; } +.wpr-Page#dashboard .wpr-dashboard-plans > div { + margin-bottom: 10px; + text-align: left; +} .wpr-Page#dashboard .wpr-infoAccount { font-weight: bold; margin-left: 8px; @@ -727,6 +750,13 @@ a:focus, button:focus { background: #3ECE9D; top: -1px; } +.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid.wpr-no-icon:before { + content: ""; + background: none; + width: 0; + height: 0; + margin-right: 0; +} .wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid { color: #D60E5B; } @@ -884,6 +914,89 @@ a:focus, button:focus { .wpr-rocketcdn-cta { margin: 10px 0; position: relative; + background: #F9FAFB; + border: 1px solid #E2E5E9; + border-radius: 4px; + padding: 16px; + display: flex; + flex-direction: column; + gap: 16px; +} +.wpr-rocketcdn-cta-toggle { + display: flex; + align-items: flex-start; + gap: 8px; + width: 100%; + cursor: pointer; +} +.wpr-rocketcdn-cta-toggle__check { + width: 16px; + height: 16px; + flex-shrink: 0; + margin-top: 4px; + background-image: url("../img/rocketcdn-check.svg"); + background-size: contain; + background-repeat: no-repeat; +} +.wpr-rocketcdn-cta-toggle__text { + margin: 0; + flex: 1; + font-size: 0.875rem; + line-height: 1.7142857143; + color: #0c0f1f; +} +.wpr-rocketcdn-cta-toggle__text strong { + font-weight: 700; +} +.wpr-rocketcdn-cta-toggle__text span { + font-size: 14px; + color: #464F59; +} +.wpr-rocketcdn-cta-toggle__icon { + position: relative; + width: 24px; + height: 24px; + flex-shrink: 0; + align-self: center; +} +.wpr-rocketcdn-cta-toggle__icon:before { + content: ""; + position: absolute; + top: 6px; + left: 7px; + width: 9px; + height: 9px; + border-right: 2px solid #121116; + border-bottom: 2px solid #121116; + transform: rotate(45deg); + transition: transform 0.2s ease; +} +.wpr-rocketcdn-cta-toggle--max-limit { + display: none; +} +.wpr-rocketcdn-cta.wpr-rocketcdn-cta---max-limit .wpr-rocketcdn-cta-toggle--default { + display: none; +} +.wpr-rocketcdn-cta.wpr-rocketcdn-cta---max-limit .wpr-rocketcdn-cta-toggle--max-limit { + display: flex; +} +.wpr-rocketcdn-cta-separator { + width: 100%; + height: 1px; + background: #E2E5E9; +} +.wpr-rocketcdn-cta-expandable { + display: block; +} +.wpr-rocketcdn-cta--collapsed .wpr-rocketcdn-cta-separator, +.wpr-rocketcdn-cta--collapsed .wpr-rocketcdn-cta-expandable { + display: none; +} +.wpr-rocketcdn-cta--collapsed .wpr-rocketcdn-cta-toggle__icon:before { + transform: rotate(-45deg); +} +.wpr-rocketcdn-cta--collapsed .wpr-rocketcdn-cta-close { + display: none; } .wpr-rocketcdn-cta.wpr-isHidden { display: none; @@ -896,39 +1009,19 @@ a:focus, button:focus { border: 0; color: rgba(255, 255, 255, 0.5); } -@media (max-width: 1083px) { - .wpr-rocketcdn-cta-close { - position: absolute; - top: 20px; - right: 20px; - } -} .wpr-rocketcdn-cta-close--no-promo { - position: relative; - border: none; - background: none; - padding: 0; - margin: 0; - cursor: pointer; - outline: none; - width: 14px; - height: 16px; - flex-shrink: 0; - top: 0; - right: 0; -} -@media (max-width: 1083px) { - .wpr-rocketcdn-cta-close--no-promo { - position: absolute; - top: 20px; - right: 20px; - } + position: absolute; + top: 16px; + right: 16px; + background: transparent; + border: 0; + color: rgba(0, 0, 0, 0.5); } .wpr-rocketcdn-cta-close--no-promo:before { - content: url(../img/wpr-close.svg); -} -.wpr-rocketcdn-cta-close--no-promo:hover { - opacity: 0.7; + content: "✕"; + font-weight: 700; + font-size: 1.5rem; + line-height: 1.3333333333; } .wpr-rocketcdn-cta-close:before { content: "✕"; @@ -962,31 +1055,16 @@ a:focus, button:focus { } .wpr-rocketcdn-cta-content { background: #F9FAFB; - border-top: 1px solid #E8EBEE; - border-left: 1px solid #E8EBEE; - border-right: 1px solid #E8EBEE; padding: 16px; } .wpr-rocketcdn-cta-content--no-promo { border-top-left-radius: 2px; border-top-right-radius: 2px; background: #F9FAFB; - border: 1px solid #E8EBEE; - padding: 32px; - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 24px; - flex: 1 0 0; } .wpr-rocketcdn-cta .wpr-flex { display: flex; - flex-direction: row; - justify-content: flex-start; - align-items: stretch; - gap: 24px; - flex: 1; - min-width: 0; + justify-content: space-between; } @media (max-width: 783px) { .wpr-rocketcdn-cta .wpr-flex { @@ -997,149 +1075,19 @@ a:focus, button:focus { .wpr-rocketcdn-cta .wpr-rocketcdn-features { margin: 0; padding-right: 16px; - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 24px; - align-self: stretch; } @media (max-width: 783px) { .wpr-rocketcdn-cta .wpr-rocketcdn-features { border-right: none; } } -.wpr-rocketcdn-cta .wpr-rocketcdn-card-left { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: stretch; - gap: 24px; - flex: 1; - min-width: 0; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-header { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: stretch; - gap: 8px; - color: #0c0f1f; - padding: 0 5px; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-header--title { - font-size: 18px; - font-weight: 600; - line-height: 1.3; - margin: 0; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-header--subtitle { - font-size: 16px; - font-weight: 400; - line-height: 1.3; - margin: 0; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-feature { - min-height: 30px; - padding-left: 62px; - position: relative; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-feature:before { - position: absolute; - top: 50%; - left: 5px; - transform: translateY(-50%); - width: 42px; - height: 32px; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-feature--content { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: stretch; - gap: 4px; - flex: 1; - min-width: 0; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-feature--title { - font-size: 16px; - font-weight: 600; - line-height: 1.3; - color: #0c0f1f; - margin: 0; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-feature--description { - font-size: 14px; - font-weight: 400; - line-height: 1.3; - color: #738191; - margin: 0; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-bandwidth:before { - content: url(../img/bandwidth.svg); -} -.wpr-rocketcdn-cta .wpr-rocketcdn-configuration:before { - content: url(../img/configuration.svg); -} -.wpr-rocketcdn-cta .wpr-rocketcdn-automatic:before { - content: url(../img/automatic.svg); -} -.wpr-rocketcdn-cta-footer { - color: #121116; - font-weight: 600; - padding: 0 8px 0 8px; - font-size: 0.875rem; - line-height: 1.5714285714; -} -.wpr-rocketcdn-cta-footer a { - position: relative; - padding-left: 22px; -} -.wpr-rocketcdn-cta-footer a:before { - content: ""; - position: absolute; - width: 14px; - height: 15px; - background: url("../img/icon-i-circle.svg") no-repeat center center; - top: 3px; - left: 0; -} -.wpr-rocketcdn-cta-footer--cancel-notice { - display: flex; - flex-direction: row; - justify-content: flex-start; - align-items: center; - gap: 4px; - font-family: "Roboto", sans-serif; - font-size: 11px; - font-weight: 600; - line-height: 1.3; - color: #738191; -} -.wpr-rocketcdn-cta-footer--cancel-notice span::after { - position: absolute; - content: url(../img/icon-i-circle.svg); - margin-left: 4px; - margin-top: 1px; -} -.wpr-rocketcdn-cta-promo-footer { - color: #121116; - padding: 16px 8px 8px; - font-size: 0.875rem; - line-height: 1.5714285714; -} .wpr-rocketcdn-cta .wpr-rocketcdn-pricing { + background-color: #fff; + align-items: center; display: flex; flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #ffffff; - border-radius: 4px; - width: 310px; - flex-shrink: 0; - align-self: flex-start; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-pricing.has-regular-price { - max-height: 400px; + width: 40%; + max-width: 310px; } @media (max-width: 783px) { .wpr-rocketcdn-cta .wpr-rocketcdn-pricing { @@ -1148,34 +1096,30 @@ a:focus, button:focus { } .wpr-rocketcdn-cta .wpr-rocketcdn-pricing-regular { color: #72777C; + margin-bottom: 8px; } -.wpr-rocketcdn-cta .wpr-rocketcdn-pricing-regular-price.wpr-isHidden { - display: none; -} -.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--logo { - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - gap: 6px; - width: 100%; - padding: 24px 0; - border-bottom: 1px solid #e2e5e9; +.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-billing-detail { + margin-bottom: 16px; + font-size: 1rem; + line-height: 1.375; } -.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--logo-icon { - width: auto; - height: 24px; +.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-major { + font-weight: 700; + font-size: 3rem; + line-height: 1.1666666667; } -.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--logo-text { - width: auto; - height: 15px; +.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-minor { + font-weight: 700; + vertical-align: top; + font-size: 1.5rem; + line-height: 1.3333333333; } .wpr-rocketcdn-cta .wpr-rocketcdn-pricing--content { display: flex; flex-direction: column; justify-content: flex-start; align-items: center; - gap: 32px; + gap: 20px; width: 100%; padding: 24px; box-sizing: border-box; @@ -1346,8 +1290,57 @@ a:focus, button:focus { .wpr-rocketcdn-cta .wpr-rocketcdn-pricing--cta:active { transform: translateY(1px); } - -.wpr-rocketcdn-subscription { +.wpr-rocketcdn-cta .wpr-rocketcdn-feature { + margin: 24px 0; + min-height: 30px; + padding-left: 55px; + position: relative; +} +.wpr-rocketcdn-cta .wpr-rocketcdn-feature:before { + position: absolute; + top: 50%; + left: 5px; + transform: translateY(-50%); +} +.wpr-rocketcdn-cta .wpr-rocketcdn-bandwidth:before { + content: url(../img/rocketcdn-speed.svg); +} +.wpr-rocketcdn-cta .wpr-rocketcdn-configuration:before { + left: 0; + content: url(../img/rocketcdn-bandwidth.svg); +} +.wpr-rocketcdn-cta .wpr-rocketcdn-automatic:before { + left: 0; + content: url(../img/rocketcdn-location.svg); +} +.wpr-rocketcdn-cta-footer { + color: #121116; + font-weight: 600; + padding: 16px 8px 8px; + font-size: 0.875rem; + line-height: 1.5714285714; +} +.wpr-rocketcdn-cta-footer a { + position: relative; + padding-left: 22px; +} +.wpr-rocketcdn-cta-footer a:before { + content: ""; + position: absolute; + width: 14px; + height: 15px; + background: url("../img/icon-i-circle.svg") no-repeat center center; + top: 3px; + left: 0; +} +.wpr-rocketcdn-cta-promo-footer { + color: #121116; + padding: 16px 8px 8px; + font-size: 0.875rem; + line-height: 1.5714285714; +} + +.wpr-rocketcdn-subscription { text-align: end; } .wpr-rocketcdn-subscription .wpr-rocketcdn-open { @@ -1476,6 +1469,45 @@ div.wpr-upgrade-prices { line-height: 1; font-weight: bold; margin: 0 0 16px 0; + padding-right: 8%; + padding-left: 0; + /** + * EUR variant: Symbol on right, swap padding + */ +} +div.wpr-upgrade-prices.wpr-with-euro { + padding-right: 0; + padding-left: 10%; +} +div.wpr-upgrade-prices { + /** + * Promo variant: Active offer adjusts left padding + */ +} +div.wpr-upgrade-prices.wpr-with-promo { + padding-right: 0; + padding-left: 6%; +} +div.wpr-upgrade-prices { + /** + * Both EUR and Promo: Maximum left padding for alignment + */ +} +div.wpr-upgrade-prices.wpr-with-euro.wpr-with-promo { + padding-right: 0; + padding-left: 25%; +} + +span.price-tax__info { + font-size: 13px; + color: #464F59; + margin-bottom: 13px; +} + +span.renewal-tax__info { + color: #464F59; + font-size: 14px; + font-weight: 400; } .wpr-upgrade-price-symbol { @@ -1488,7 +1520,7 @@ div.wpr-upgrade-prices { color: #72777C; font-size: 1rem; line-height: 1; - vertical-align: top; + vertical-align: bottom; } div.wpr-upgrade-websites { @@ -1745,13 +1777,14 @@ div.wpr-upgrade-websites.notstacked { \*-----------------------------------------------*/ .wpr-menuItem { position: relative; - display: block; + display: flex; + flex-direction: column; padding: 16px 44px 18px 20px; text-decoration: none; color: #121116; border-top: 1px solid #E0E4E9; border-left: 2px solid transparent; - overflow: hidden; + position: relative; transition: all 100ms ease-out; -webkit-transition: all 100ms ease-out; } @@ -1793,6 +1826,9 @@ div.wpr-upgrade-websites.notstacked { color: #121116; } .wpr-menuItem-title { + display: flex; + align-items: center; + gap: 6px; font-size: 0.8125rem; line-height: 1.4615384615; font-weight: bold; @@ -1900,6 +1936,10 @@ div.wpr-upgrade-websites.notstacked { margin-right: 24px; } +.wpr-without-padding { + padding: 0; +} + /*-----------------------------------------------*\ Header of option group @@ -2086,9 +2126,10 @@ div.wpr-upgrade-websites.notstacked { transform: translateY(-2px); box-shadow: 0 7px 14px rgba(50, 50, 93, 0.25), 0 3px 6px rgba(0, 0, 0, 0.2); } -.wpr-button--disabled { +.wpr-button--disabled, .wpr-button:disabled { opacity: 0.5; pointer-events: none; + background: #F56640; } .wpr-button--small { padding: 5px 0; @@ -2827,6 +2868,7 @@ div.wpr-upgrade-websites.notstacked { } .wpr-tools-col { flex: 1 1 auto; + align-self: center; } .wpr-tools-col:first-child { padding-left: 72px; @@ -2849,7 +2891,7 @@ div.wpr-upgrade-websites.notstacked { } } .wpr-tools .wpr-button { - margin-top: 24px; + margin-top: 0; white-space: normal; } .wpr-tools .wpr-field-description { @@ -3996,26 +4038,34 @@ div.wpr-tutorial-item { .wpr-ri-add-section { margin: 16px 0; display: flex; + gap: 8px; } .wpr-ri-add-section .wpr-speed-radar-input { display: flex; width: 80%; - margin-right: 16px; - border: 2px solid #C2CAD4; + border-radius: 4px; + border: 1px solid #E2E5E9; + padding: 6px 8px 6px 16px; + height: 50px; } .wpr-ri-add-section .wpr-button { display: flex; text-align: center; justify-content: center; - padding: 8px; + padding: 16px; width: 20%; + height: 50px; + align-items: center; + gap: 8px; + border-radius: 4px; + background: #2D1656; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2); } .wpr-ri-add-url-button { - font-family: "Segoe UI ", Tahoma, Geneva, Verdana, sans-serif; - font-size: 12px; + font-size: 14px; font-style: normal; - font-weight: 700; + font-weight: 600; line-height: normal; text-transform: uppercase; } @@ -4550,6 +4600,769 @@ div.wpr-tutorial-item { display: flex; } +.wpr-optionHeader--cdn-driver { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + margin-bottom: 16px; +} + +.wpr-optionHeader__title-group { + display: flex; + flex: 1; + align-items: center; + gap: 12px; +} + +.wpr-title2--orange { + color: #F56640; + text-transform: capitalize; + padding-right: 0; +} + +.wpr-optionHeader .wpr-title2--orange { + padding-right: 0; +} + +.wpr-badge { + display: inline-flex; + align-items: center; + padding: 4px 8px; + border-radius: 2px; + font-size: 0.875rem; + line-height: 1.2857142857; + font-weight: 600; + white-space: nowrap; +} +.wpr-badge--grey { + background: #f6f7f8; + color: #738191; +} +.wpr-badge--blue { + background: #d4e6fc; + color: #0d5ec3; +} +.wpr-badge--new { + background: #0d5ec3; + color: #fff; + padding: 4px 2px; + border-radius: 4px; + font-size: 0.5625rem; + line-height: 1.3333333333; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.02em; + writing-mode: vertical-rl; + transform: rotate(180deg); + left: -11px; + position: absolute; + top: 50%; + translate: 0 -50%; +} + +.wpr-cdn-tabs { + display: flex; + gap: 8px; + align-items: center; + padding: 8px; + border: 1px solid #E2E5E9; + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +.wpr-cdn-tabs__tab { + display: flex; + align-items: center; + padding: 6px 8px; + border: 0; + border-radius: 2px; + background: transparent; + cursor: pointer; + font-size: 0.875rem; + line-height: 1.2857142857; + font-family: "Roboto", sans-serif; + color: #738191; +} +.wpr-cdn-tabs__tab--active { + background: #F9FAFB; + color: #121116; + font-weight: 600; +} +.wpr-cdn-tabs__tab:hover:not(.wpr-cdn-tabs__tab--active) { + background: #F2F3F6; +} +.wpr-cdn-tabs__tab:disabled { + opacity: 0.5; + cursor: not-allowed; +} +.wpr-cdn-tabs__tab:disabled:hover { + background: none; + color: #738191; + cursor: not-allowed; +} +.wpr-cdn-tabs__tab-wrapper { + position: relative; + display: flex; + align-items: center; +} +.wpr-cdn-tabs__tooltip { + position: absolute; + top: 9px; + right: 95px; + transform: translateX(-50%); + padding: 8px 12px; + background: #0c0f1f; + border-radius: 4px; + color: #fff; + font-size: 0.875rem; + line-height: 1.2857142857; + font-weight: 400; + white-space: nowrap; + opacity: 0; + visibility: hidden; + pointer-events: none; + transition: opacity 0.2s ease; + z-index: 3; +} +.wpr-cdn-tabs__tooltip::after { + content: ""; + position: absolute; + top: 34%; + right: -9px; + transform: translateX(-50%); + width: 0; + height: 0; + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; + border-left: 6px solid #0c0f1f; +} +.wpr-cdn-tabs:hover .wpr-cdn-tabs__tooltip, .wpr-cdn-tabs:focus-within .wpr-cdn-tabs__tooltip, .wpr-cdn-tabs__tab-wrapper:hover .wpr-cdn-tabs__tooltip, .wpr-cdn-tabs__tab-wrapper:focus-within .wpr-cdn-tabs__tooltip { + opacity: 1; + visibility: visible; +} +.wpr-cdn-tabs.wpr-isHidden { + display: none; +} +.wpr-cdn-tabs__divider { + width: 1px; + align-self: stretch; + background: #E2E5E9; +} + +.wpr-sectionHeader--cdn { + display: flex; + align-items: center; + justify-content: space-between; + gap: 24px; +} +.wpr-sectionHeader--cdn .wpr-title1 { + flex: 1; +} + +.wpr-cdn-status { + display: flex; + align-items: center; + overflow: hidden; + width: 100%; +} +.wpr-cdn-status.wpr-cdn-status-pronounced { + gap: 12px; + padding: 16px; + background: #F9FAFB; + border: 1px solid #E2E5E9; + border-radius: 4px; + margin-top: 16px; +} + +.wpr-cdn-indicator { + flex: 1; +} +.wpr-cdn-indicator__status { + display: flex; + align-items: center; + gap: 8px; +} +.wpr-cdn-indicator__info { + display: flex; + justify-content: space-between; +} +.wpr-cdn-indicator__dot { + width: 8px; + height: 8px; + border-radius: 50%; + background: #00A66B; + flex-shrink: 0; +} +.wpr-cdn-indicator__text { + font-size: 0.875rem; + line-height: 1.7142857143; + font-weight: 700; + color: #121116; +} +.wpr-cdn-indicator__details { + font-size: 0.875rem; + line-height: 1.2857142857; + color: #666; + margin: 0; +} +.wpr-cdn-indicator .wpr-icon-orange-loader:before { + width: 15.238px; + height: 16px; + aspect-ratio: 20/21; +} + +.wpr-cdn-status--paused .wpr-cdn-indicator__dot { + background: #e5a800; +} +.wpr-cdn-status--paused .wpr-cdn-pause { + opacity: 0.5; +} + +.wpr-cdn-status--long-details { + align-items: flex-start; + position: relative; +} +.wpr-cdn-status--long-details .wpr-cdn-indicator { + width: 100%; +} +.wpr-cdn-status--long-details .wpr-cdn-indicator__details { + max-width: none; +} +.wpr-cdn-status--long-details .wpr-cdn-pause { + position: absolute; + top: 2px; + right: 0; +} + +.wpr-cdn-status--expired .wpr-cdn-pause { + opacity: 0.5; + pointer-events: none; +} + +.wpr-cdn-expired__notice { + color: #0C0F1F; + background: #FFF7E1; + border-left: 4px solid #FED055; + font-size: 14px; + margin-bottom: 15px; +} +.wpr-cdn-expired__notice-title { + font-weight: 600; + font-size: 14px; +} +.wpr-cdn-expired__notice .wpr-notice-close { + font-size: 14px; + color: #0C0F1F; + font-weight: 600; +} + +.wpr-cdn-pause { + display: flex; + align-items: center; + gap: 2px; + border: 0; + border-radius: 4px; + cursor: pointer; + flex-shrink: 0; + padding: 0; +} +.wpr-cdn-pause:disabled { + opacity: 0.5; + pointer-events: none; +} +.wpr-cdn-pause__icon { + display: inline-block; + width: 14px; + height: 14px; + background-color: currentColor; + -webkit-mask-image: url("../img/wpr-pause.svg"); + mask-image: url("../img/wpr-pause.svg"); + -webkit-mask-size: contain; + mask-size: contain; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; +} +.wpr-cdn-pause--paused .wpr-cdn-pause__icon { + -webkit-mask-image: url("../img/wpr-resume.svg"); + mask-image: url("../img/wpr-resume.svg"); +} +.wpr-cdn-pause__text { + font-size: 0.6875rem; + line-height: 1.2727272727; + font-weight: 600; + color: #121116; + white-space: nowrap; +} +.wpr-cdn-pause__text--resume { + display: none; +} +.wpr-cdn-pause--paused .wpr-cdn-pause__text--pause { + display: none; +} +.wpr-cdn-pause--paused .wpr-cdn-pause__text--resume { + display: inline; +} +.wpr-cdn-pause--disabled { + opacity: 0.5; + pointer-events: none; +} + +.wpr-cdn-built-in { + display: flex; + flex-direction: column; + gap: 16px; + width: 100%; + padding: 16px; + background: #F9FAFB; + border: 1px solid #E2E5E9; + border-radius: 4px; +} +.wpr-cdn-built-in__separator { + width: 100%; + height: 1px; + background: #E2E5E9; +} +.wpr-cdn-built-in--paused .wpr-cdn-add-page, .wpr-cdn-built-in--disabled .wpr-cdn-add-page { + pointer-events: none; +} +.wpr-cdn-built-in--paused .wpr-cdn-add-page .wpr-cdn-add-page__input-wrap, .wpr-cdn-built-in--disabled .wpr-cdn-add-page .wpr-cdn-add-page__input-wrap { + border: 1px solid #eceef1; +} +.wpr-cdn-built-in--paused .wpr-cdn-add-page input[type=text]::placeholder, .wpr-cdn-built-in--disabled .wpr-cdn-add-page input[type=text]::placeholder { + color: #b4b7ba; +} +.wpr-cdn-built-in--paused .wpr-cdn-add-page__button, .wpr-cdn-built-in--disabled .wpr-cdn-add-page__button { + background: #9186a7; +} +.wpr-cdn-built-in .wpr-table-list__row { + background: #FFF; +} + +.wpr-cdn-add-page { + display: flex; + gap: 8px; + align-items: center; +} +.wpr-cdn-add-page__input-wrap { + display: flex; + align-items: center; + justify-content: space-between; + flex: 1; + min-width: 0; + height: 49.56px; + padding: 6px 6px 6px 16px; + border: 1px solid #E2E5E9; + border-radius: 4px; + background: #fff; +} +.wpr-cdn-add-page input[type=text] { + flex: 1; + min-width: 0; + border: 0; + padding: 0; + background: transparent; + font-size: 0.875rem; + line-height: 1.2857142857; + color: #121116; + outline: none; + box-shadow: none; +} +.wpr-cdn-add-page input[type=text]:focus { + box-shadow: none; + outline: none; +} +.wpr-cdn-add-page input[type=text]::placeholder { + color: #72777C; +} +.wpr-cdn-add-page__homepage { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + background: #F9FAFB; + color: #050710; + border: 1px solid rgba(47, 69, 162, 0.1); + border-radius: 2px; + cursor: pointer; + font-size: 0.875rem; + line-height: 1.2857142857; + font-weight: 600; + white-space: nowrap; + flex-shrink: 0; +} +.wpr-cdn-add-page__homepage:hover { + background: rgb(233.7, 237.25, 240.8); +} +.wpr-cdn-add-page__homepage.wpr-isHidden { + display: none; +} +.wpr-cdn-add-page__icon { + display: inline-block; + width: 16px; + height: 16px; + background-color: currentColor; + -webkit-mask-image: url("../img/wpr-add-homepage.svg"); + mask-image: url("../img/wpr-add-homepage.svg"); + -webkit-mask-size: contain; + mask-size: contain; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; +} +.wpr-cdn-add-page__button { + display: flex; + align-items: center; + gap: 8px; + padding: 14px; + background: #2D1656; + color: #fff; + border: 0; + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); + transition: box-shadow 0.2s ease; + cursor: pointer; + font-size: 0.875rem; + line-height: 1.2857142857; + font-weight: 600; + white-space: nowrap; +} +.wpr-cdn-add-page__button:hover, .wpr-cdn-add-page__button:focus-visible, .wpr-cdn-add-page__button:focus { + background: #2D1656; + color: #fff; + box-shadow: 0 6px 18px rgba(45, 22, 86, 0.25); +} +.wpr-cdn-add-page__button:active { + background: #2D1656; + color: #fff; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); +} +.wpr-cdn-add-page__button [class^=wpr-icon-] { + font-size: 16px; +} +.wpr-cdn-add-page__button-wrapper { + position: relative; + display: inline-flex; +} +.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip { + pointer-events: auto; +} +.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip .wpr-cdn-add-page__button { + cursor: not-allowed; + opacity: 0.5; + pointer-events: none; +} +.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip .wpr-tooltip { + bottom: -40px; + top: auto; + left: 50%; + transform: translateX(-50%); + white-space: nowrap; + font-size: 14px; + font-weight: normal; + text-transform: none; +} +.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip .wpr-tooltip.wpr-isHidden { + display: none; +} +.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip .wpr-tooltip:before { + top: auto; + bottom: 33px; + left: 50%; + transform: translateX(-50%) rotate(180deg); + border-bottom: none; + border-top: 8px solid #0e1428; +} + +.wpr-cdn-upsell__text { + font-size: 0.875rem; + line-height: 1.2857142857; + color: #121116; + margin: 0; +} +.wpr-cdn-upsell__link { + font-size: 0.875rem; + line-height: 1.2857142857; + font-weight: 600; + color: #F56F46; + text-decoration: underline; + white-space: nowrap; +} +.wpr-cdn-upsell__link:hover { + color: #F56640; +} + +.wpr-cdn-purge { + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px; + background: #F9FAFB; + border: 1px solid #E2E5E9; + border-radius: 4px; + margin-top: 16px; +} +.wpr-cdn-purge__content { + display: flex; + flex-direction: column; + gap: 16px; + max-width: 400px; +} +.wpr-cdn-purge__title { + font-size: 0.875rem; + line-height: 1.2857142857; + font-weight: 600; + color: #121116; + margin: 0; +} +.wpr-cdn-purge__description { + font-size: 0.875rem; + line-height: 1.2857142857; + color: #666; + margin: 0; +} +.wpr-cdn-purge__learn-more { + display: flex; + align-items: center; + gap: 8px; + font-size: 0.875rem; + line-height: 1.5714285714; + font-weight: 600; + color: #121116; + text-decoration: underline; +} +.wpr-cdn-purge__learn-more:hover { + color: #121116; +} +.wpr-cdn-purge__info-icon { + width: 14px; + height: 14px; + background-color: currentColor; + -webkit-mask-image: url("../img/wpr-info-circle.svg"); + mask-image: url("../img/wpr-info-circle.svg"); + -webkit-mask-size: contain; + mask-size: contain; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; + flex-shrink: 0; +} +.wpr-cdn-purge__button { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 16px; + border: 1px solid #E2E5E9; + border-radius: 4px; + box-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.1); + background: #fff; + color: #121116; + font-size: 0.875rem; + line-height: 1.2857142857; + font-weight: 600; + text-decoration: none; + cursor: pointer; + text-transform: uppercase; + white-space: nowrap; + flex-shrink: 0; +} +.wpr-cdn-purge__button:hover { + background: rgb(239.82, 242.35, 244.88); + color: #121116; + text-decoration: none; +} +.wpr-cdn-purge__button-icon { + display: inline-block; + width: 16px; + height: 16px; + background-color: currentColor; + -webkit-mask-image: url("../img/wpr-purge.svg"); + mask-image: url("../img/wpr-purge.svg"); + -webkit-mask-size: contain; + mask-size: contain; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; +} + +.wpr-cdn-exclusions .wpr-field-description-label { + color: #0C0F1F; + font-weight: 600; +} + +.rocketcdn.wpr-isHidden, +.your-own-cdn.wpr-isHidden, +.your-own-cdn.wpr-fieldsContainer-fieldset.wpr-isHidden { + display: none; +} + +.your-own-cdn.wpr-fieldsContainer-fieldset { + display: flex; + flex-direction: column; + gap: 16px; +} +.your-own-cdn .wpr-field-description-label { + color: #0C0F1F; +} +.your-own-cdn .wpr-field-description { + margin-top: 4px; +} +.your-own-cdn .wpr-field { + padding: 0; + border: 0; +} +.your-own-cdn .wpr-multiple { + gap: 16px; + margin-top: 6px; +} +.your-own-cdn .wpr-multiple .wpr-text { + top: 0; +} +.your-own-cdn .wpr-multiple .wpr-text input[type=text] { + height: 50px; + border-radius: 4px; + border: 1px solid #E2E5E9; + background: #FFF; + margin-top: 0; +} +.your-own-cdn .wpr-multiple .wpr-select::after { + content: ""; + position: absolute; + top: 50%; + right: 12px; + width: 10px; + height: 6px; + transform: translateY(-50%); + background-image: url("../img/ri-caret-down.svg"); + background-size: contain; + background-repeat: no-repeat; + pointer-events: none; +} +.your-own-cdn .wpr-multiple select { + height: 50px; + border-radius: 4px; + border: 1px solid #E2E5E9; + background: #FFF; + font-weight: bold; + appearance: none; + -webkit-appearance: none; + padding-right: 32px; +} +.your-own-cdn .wpr-multiple .wpr-multiple-close::after { + content: url(../img/wpr-close.svg); +} +.your-own-cdn .wpr-button { + padding: 16px; + font-size: 14px; + font-weight: 600; + line-height: normal; + margin: 9px 0; +} + +.wpr-cdn-disabled, +.wpr-cdn-disabled a { + opacity: 0.5; + pointer-events: none; +} + +/*-----------------------------------------------*\ + + Table component style. + +\*-----------------------------------------------*/ +.wpr-table-list { + display: flex; + flex-direction: column; + width: 100%; +} +.wpr-table-list__row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + padding: 16px; + background: #F9FAFB; + border: 1px solid #E2E5E9; + font-size: 0.875rem; + line-height: 1.2857142857; + color: #121116; +} +.wpr-table-list__row:first-child { + border-radius: 4px 4px 0 0; +} +.wpr-table-list__row:last-child { + border-radius: 0 0 4px 4px; +} +.wpr-table-list__row:only-child { + border-radius: 4px; +} +.wpr-table-list__row + .wpr-table-list__row { + border-top: 0; +} +.wpr-table-list__cell { + flex: 1; + min-width: 0; +} +.wpr-table-list__cell a { + font-size: 0.875rem; + line-height: 1.2857142857; + color: #121116; + text-decoration: underline; +} +.wpr-table-list__cell a:hover { + color: #121116; +} +.wpr-table-list__actions { + display: flex; + align-items: center; + flex-shrink: 0; +} +.wpr-table-list__retest { + display: flex; + align-items: center; + gap: 4px; + padding: 0 16px; + border: 0; + border-right: 1px solid #D4D9DD; + background: none; + cursor: pointer; + font-size: 0.875rem; + line-height: 1.2857142857; + font-weight: 600; + color: #121116; + white-space: nowrap; +} +.wpr-table-list__retest:hover { + color: #72777C; +} +.wpr-table-list__retest .dashicons { + width: 14px; + height: 14px; + font-size: 14px; +} +.wpr-table-list__delete { + display: flex; + align-items: center; + justify-content: center; + padding-left: 16px; + background: none; + border: 0; + cursor: pointer; + color: #121116; +} +.wpr-table-list__delete:hover { + color: #D33F49; +} +.wpr-table-list__delete .dashicons { + width: 14px; + height: 14px; + font-size: 14px; +} + /*-----------------------------------------------*\ Custom checkbox @@ -4937,7 +5750,7 @@ div.wpr-tutorial-item { height: 30px; } .wpr-multiple-default { - margin-right: 20px; + margin-right: 30px; } .wpr-multiple-list { display: none; diff --git a/web/app/plugins/wp-rocket/assets/css/wpr-admin.min.css b/web/app/plugins/wp-rocket/assets/css/wpr-admin.min.css index 7911a44fa..5c9828c08 100644 --- a/web/app/plugins/wp-rocket/assets/css/wpr-admin.min.css +++ b/web/app/plugins/wp-rocket/assets/css/wpr-admin.min.css @@ -1 +1 @@ -h1,h2,h3,h4{color:currentColor;margin:0;font-weight:normal}button{padding:0;border:none;background:none;cursor:pointer}a{color:currentColor;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}a:hover{color:currentColor}input[type=submit]{cursor:pointer;border:none}a:active,button:active{outline:none}a:focus,button:focus{color:currentColor;box-shadow:none}.wpr-wrap{padding:16px;margin:0 0 0 -20px}@media(max-width: 783px){.wpr-wrap{padding:0;margin:0 0 0 -10px}}.wpr-body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeQuality;text-rendering:optimizeLegibility;display:flex;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-body *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media(max-width: 783px){#hs-beacon{display:none !important}}.wpr-u-flex{display:flex;align-items:center;justify-content:center}.wpr-mt-2{margin-top:20px}.wpr-fs-sm{font-size:.9em}.wpr-fs-md{font-size:1em}.wpr-loader{position:fixed;top:50%;left:50%;transform:translate(-50%, -50%);margin:0 auto;width:60px;aspect-ratio:2;--_g: no-repeat radial-gradient(circle closest-side,#ffffff 90%,#0000);background:var(--_g) 0% 50%,var(--_g) 50% 50%,var(--_g) 100% 50%;background-size:33.3333333333% 50%;animation:l3 1s infinite linear}@keyframes l3{20%{background-position:0% 0%,50% 50%,100% 50%}40%{background-position:0% 100%,50% 0%,100% 50%}60%{background-position:0% 50%,50% 100%,100% 0%}80%{background-position:0% 50%,50% 50%,100% 100%}}.wpr-tooltip{visibility:hidden;position:absolute;border-radius:4px;background-color:#0e1428;color:#fff;padding:8px 16px;margin-top:8px;font-size:14px;line-height:1.3;z-index:100;width:auto;opacity:0;box-shadow:0 2px 10px rgba(0,0,0,.1)}.wpr-tooltip:before{content:"";position:absolute;top:-6px;left:17.6px;width:0;height:0;border-left:8px solid rgba(0,0,0,0);border-right:8px solid rgba(0,0,0,0);border-bottom:8px solid #0e1428}.wpr-checkbox{position:relative}.wpr-checkbox .wpr-tooltip{left:-16px;top:20px}.wpr-checkbox .wpr-tooltip:before{top:-6px;left:17.6px}.wpr-checkbox:hover .wpr-tooltip{visibility:visible;opacity:1}@font-face{font-family:"wpr-icomoon";src:url("../fonts/icomoon.eot");src:url("../fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon.woff") format("woff"),url("../fonts/icomoon.ttf") format("truetype"),url("../fonts/icomoon.svg#icomoon") format("svg");font-weight:normal;font-style:normal}[class^=wpr-icon-]:before,[class*=" wpr-icon-"]:after,[class^=wpr-icon-]:after,[class*=" wpr-icon-"]:before,[id^=wpr-nav-]:before,[id*=" wpr-nav-"]:after,[id^=wpr-nav-]:after,[id*=" wpr-nav-"]:before{font-family:"wpr-icomoon";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=wpr-icon-] span.hidden,[class*=" wpr-icon-"] span.hidden{display:inline-block;height:0;width:0;overflow:hidden}.wpr-icon-chevron-right:before{content:""}.wpr-icon-chevron-left:before{content:"";transform:rotate(180deg)}.wpr-icon-chevron-down:before{content:"";transform:scale(0.6)}.wpr-icon-chevron-up:before{content:"";top:50%;transform:translateY(-50%) scale(0.6)}.wpr-icon-rollback:before{content:""}.wpr-icon-addon:before,.wpr-addonSubMenuItem:before{content:""}.wpr-icon-addons:before,#wpr-nav-addons:before{content:""}.wpr-icon-book:before{content:""}.wpr-icon-cdn:before,#wpr-nav-page_cdn:before{content:""}.wpr-icon-database:before,#wpr-nav-database:before{content:""}.wpr-icon-export:before{content:""}.wpr-icon-files:before,#wpr-nav-cache:before{content:""}.wpr-icon-help:before{content:""}.wpr-icon-home:before,#wpr-nav-dashboard:before{content:""}.wpr-icon-import:before{content:""}.wpr-icon-important:before{content:""}.wpr-icon-information:before{content:""}.wpr-icon-information2:before{content:""}.wpr-icon-interrogation:before{content:""}.wpr-icon-media:before,#wpr-nav-media:before{content:""}.wpr-icon-plus:before{content:""}.wpr-icon-refresh:before,#wpr-nav-preload:before{content:""}.wpr-icon-rules:before,#wpr-nav-advanced_cache:before{content:""}.wpr-icon-stack:before,#wpr-nav-file_optimization:before{content:""}.wpr-icon-tools:before,#wpr-nav-tools:before{content:""}.wpr-icon-trash:before{content:""}.wpr-icon-user:before{content:""}.wpr-icon-check:before{content:""}.wpr-icon-check2:before{content:""}.wpr-icon-close:before{content:""}.wpr-icon-heartbeat:before,#wpr-nav-heartbeat:before{content:url("../img/heartbeat.svg")}.wpr-icon-heartbeat-hover:before,#wpr-nav-heartbeat.isActive:before,#wpr-nav-heartbeat:hover:before{content:url("../img/heartbeat-hover.svg")}.wpr-icon-imagify:before,#wpr-nav-imagify:before{content:url("../img/imagify.svg")}.wpr-icon-imagify-hover:before,#wpr-nav-imagify.isActive:before,#wpr-nav-imagify:hover:before{content:url("../img/imagify-hover.svg")}.wpr-icon-tutorial:before,#wpr-nav-tutorials:before{content:url("../img/play.svg")}.wpr-icon-tutorial-hover:before,#wpr-nav-tutorials.isActive:before,#wpr-nav-tutorials:hover:before{content:url("../img/play-hover.svg")}.wpr-icon-tutorial-alt:before{content:url("../img/play-alt.svg")}.wpr-imagify-info:before{content:url("../img/imagify-info.svg")}.wpr-imagify-install:before{content:url("../img/imagify-install.svg")}.wpr-icons-plugins:before,#wpr-nav-plugins:before{content:url("../img/plugins.png")}.wpr-icons-plugins-hover:before,#wpr-nav-plugins.isActive:before,#wpr-nav-plugins:hover:before{content:url("../img/plugins-hover.png")}.wpr-icon-rocket-insights:before,#wpr-nav-rocket_insights:before{content:"";background-image:url("../img/rocket-insights.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-rocket-insights-hover:before,#wpr-nav-rocket_insights.isActive:before,#wpr-nav-rocket_insights:hover:before{content:"";background-image:url("../img/rocket-insights-hover.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-bold-refresh:before{content:""}.wpr-icon-report:before{content:""}.wpr-Header-nav .wpr-icon-rocket-insights:before,.wpr-Header-nav #wpr-nav-rocket_insights:before{width:30px;height:24px;right:15px}.wpr-icon-exclamation:before{content:"";background-image:url("../img/exclamation.svg");background-repeat:no-repeat;background-position:center center}.wpr-title1{font-size:1.625rem;line-height:1;font-weight:600;letter-spacing:.01em}.wpr-title2{font-size:1rem;line-height:1.5;font-weight:bold;letter-spacing:-0.02em}.wpr-title3,.wpr-select label,.wpr-select select,.wpr-field--radio label{font-size:0.875rem;line-height:1.7142857143;font-weight:bold;letter-spacing:-0.011em}.wpr-Header{display:flex;flex-direction:column;flex:0 0 225px}@media(max-width: 783px){.wpr-Header{flex:0 0 50px}}.wpr-Header-logo{padding:32px 0 24px;text-align:center}@media(max-width: 783px){.wpr-Header-logo{padding:16px 0 8px}}@media(max-width: 783px){.wpr-Header-logo-desktop{display:none}}.wpr-Header-logo-mobile{display:none}@media(max-width: 783px){.wpr-Header-logo-mobile{display:inline-block}}.wpr-Header-footer{margin-top:auto;padding:48px 20px 0;font-size:0.6875rem;line-height:4.3636363636;color:#666;opacity:.6;font-weight:bold}@media(max-width: 783px){.wpr-Header-footer{display:none}}.wpr-Sidebar{position:relative;display:none;flex:0 0 290px;padding:0 16px;flex-direction:column;gap:16px}@media(max-width: 1239px){.wpr-Sidebar{flex:0 0 260px}}@media(max-width: 1083px){.wpr-Sidebar{display:none !important}}.wpr-Sidebar-title{margin-bottom:32px}.wpr-Sidebar-notice{padding:8px 16px;margin-bottom:16px;background:#fff;border:1px solid #e8ebee;border-left:2px solid #1eadbf;border-radius:0 3px 3px 0;color:#666}.wpr-Sidebar-notice p{margin:0}.wpr-Sidebar-notice-link{display:inline-block;margin-top:8px;font-size:0.6875rem;line-height:1.8181818182;color:#02707f;letter-spacing:-0.05em;text-transform:uppercase;text-decoration:none;font-weight:bold}.wpr-Sidebar-notice-link:hover,.wpr-Sidebar-notice-link:focus{color:#40bacb}.wpr-Sidebar-info{padding:16px;background:#ebfaf5;margin-bottom:16px;border-radius:3px}.wpr-Sidebar-info h4{padding-left:48px;font-weight:500}.wpr-Sidebar-info p{margin:8px 0 0;font-size:0.6875rem;line-height:1.4545454545;color:#666}.wpr-Sidebar-info i{position:absolute;display:block;margin-top:-1px;width:40px;height:40px;color:#00a66b;font-size:1.0625rem;line-height:2.3529411765;background:#c6f0de;border-radius:3px;text-align:center}.wpr-Content{position:relative;background:#fff;padding:32px 24px;flex:1 1 auto;max-width:1230px}@media(max-width: 783px){.wpr-Content{padding:24px 16px}}.wpr-Content form>input:last-child{margin-top:24px;color:#fff !important}.wpr-Content.isNotFull{max-width:960px;z-index:1000}.wpr-Content-tips{position:absolute;top:48px;right:24px;font-weight:bold;color:#666}@media(max-width: 1083px){.wpr-Content-tips{display:none !important}}.wpr-Page{margin-bottom:32px}.wpr-Page-row{display:flex;flex-direction:row}@media(max-width: 1239px){.wpr-Page-row{flex-direction:column}}.wpr-Page-col{flex:1 1 auto}.wpr-Page-col-half{flex:0 1 50%}.wpr-Page-col--fixed{margin-left:24px;flex:0 0 325px}@media(max-width: 1239px){.wpr-Page-col--fixed{margin-left:0}}.wpr-Page#dashboard #wpr-action-refresh_account:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isHidden:before{opacity:0}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isShown:before{opacity:1}@keyframes loading{from{transform:rotate(0)}to{transform:rotate(360deg)}}.wpr-Page#dashboard .wpr-documentation{margin-top:48px;padding:43px 16px}@media(max-width: 1239px){.wpr-Page#dashboard .wpr-documentation{margin-top:40px}}.wpr-Page#dashboard .wpr-documentation .wpr-button{margin-top:8px}.wpr-Page#dashboard .wpr-documentation i{font-size:3.375rem;line-height:1}.wpr-Page#dashboard .wpr-radio{padding-left:72px}.wpr-Page#dashboard .wpr-field--radio{padding:16px 8px}.wpr-Page#dashboard .wpr-field--radio:first-child{padding-top:0}.wpr-Page#dashboard .wpr-field--radio:last-child{padding-bottom:0}.wpr-Page#dashboard .wpr-field--radio .wpr-field-description{font-style:normal;color:#666;margin-left:72px}.wpr-Page#dashboard .wpr-field-account{padding-bottom:0}.wpr-Page#dashboard .wpr-infoAccount{font-weight:bold;margin-left:8px;color:#444}.wpr-Page#dashboard .wpr-infoAccount:before{content:"";position:relative;display:inline-block;width:13px;height:13px;background:#e0e4e9;border-radius:50%;color:#fff;margin-right:6px;text-align:center;top:2px;font-size:0.5rem;line-height:1.625}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid{color:#00a66b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid:before{content:"";font-family:"wpr-icomoon";speak:none;background:#3ece9d;top:-1px}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid{color:#d60e5b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid:before{content:"!";font-weight:bold;font-size:0.625rem;line-height:1.3;speak:none;background:#d33f49;top:-1px}.wpr-Page#dashboard #wpr-account-data:before{content:none}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Popin{display:none;position:fixed;width:772px;height:auto;top:50%;left:50%;background:#fff;border-radius:3px;transform:translateX(-50%) translateY(-50%);z-index:100000}.wpr-Popin-overlay{display:none;position:fixed;opacity:0;width:100%;height:100%;top:0;left:0;background:rgba(0,0,0,.8);z-index:99999}.wpr-Popin-header{display:flex;align-items:center;justify-content:space-between;height:64px;padding:0 32px;background:#2d1656;color:#fff;font-weight:600}.wpr-Popin-close{color:#665090;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-Popin-close:hover,.wpr-Popin-close:focus{color:#fff;outline:none}.wpr-Popin-content{padding:8px 32px;color:#666}.wpr-Popin-flex{display:flex;flex-direction:row;align-items:center}.wpr-Popin-flex div{margin-left:32px}.wpr-Popin p{margin:16px 0}.wpr-Popin .wp-rocket-data-table{padding:12px 24px;background:#f2f3f6 !important;border:none}.wpr-Popin .wp-rocket-data-table td{width:50%;color:#121116;padding:8px 0;padding-left:4px;border-bottom:1px solid rgb(194.1698113208,202.0188679245,211.8301886792)}.wpr-Popin .wp-rocket-data-table td:not(.column-primary){font-family:"Monaco";font-size:0.75rem;line-height:1.6666666667;color:#666;letter-spacing:-0.01em}.wpr-Popin .wp-rocket-data-table tr{background:#f2f3f6;border-bottom:1px solid #e0e4e9}.wpr-Popin .wp-rocket-data-table tr:last-child td{border-bottom:none}.wpr-Popin .wp-rocket-data-table strong{font-weight:500}.wpr-Popin .wp-rocket-data-table em{font-style:normal}.wpr-Popin .wp-rocket-data-table code{padding:0;margin:0;background:rgba(0,0,0,0)}.wpr-rocketcdn-cta-small{border-radius:5px;margin:24px 0;padding:16px}.wpr-rocketcdn-cta-small.wpr-isHidden{display:none}.wpr-rocketcdn-cta-small .notice-title{font-weight:700}.wpr-rocketcdn-cta-small .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta-small .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta{margin:10px 0;position:relative}.wpr-rocketcdn-cta.wpr-isHidden{display:none}.wpr-rocketcdn-cta-close{position:absolute;top:16px;right:16px;background:rgba(0,0,0,0);border:0;color:hsla(0,0%,100%,.5)}@media(max-width: 1083px){.wpr-rocketcdn-cta-close{position:absolute;top:20px;right:20px}}.wpr-rocketcdn-cta-close--no-promo{position:relative;border:none;background:none;padding:0;margin:0;cursor:pointer;outline:none;width:14px;height:16px;flex-shrink:0;top:0;right:0}@media(max-width: 1083px){.wpr-rocketcdn-cta-close--no-promo{position:absolute;top:20px;right:20px}}.wpr-rocketcdn-cta-close--no-promo:before{content:url(../img/wpr-close.svg)}.wpr-rocketcdn-cta-close--no-promo:hover{opacity:.7}.wpr-rocketcdn-cta-close:before{content:"✕";color:#121116;font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo{background:#ffd147;border-top-left-radius:2px;border-top-right-radius:2px;padding:16px 48px 16px 16px}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-title{font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-date{margin:0;font-weight:500;font-size:1rem;line-height:1.5}.wpr-rocketcdn-cta-subtitle{color:#444;margin-top:0;font-size:0.875rem;line-height:1.7142857143}.wpr-rocketcdn-cta-content{background:#f9fafb;border-top:1px solid #e8ebee;border-left:1px solid #e8ebee;border-right:1px solid #e8ebee;padding:16px}.wpr-rocketcdn-cta-content--no-promo{border-top-left-radius:2px;border-top-right-radius:2px;background:#f9fafb;border:1px solid #e8ebee;padding:32px;display:flex;flex-direction:column;align-items:flex-start;gap:24px;flex:1 0 0}.wpr-rocketcdn-cta .wpr-flex{display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;gap:24px;flex:1;min-width:0}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta .wpr-rocketcdn-features{margin:0;padding-right:16px;display:flex;flex-direction:column;align-items:flex-start;gap:24px;align-self:stretch}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-features{border-right:none}}.wpr-rocketcdn-cta .wpr-rocketcdn-card-left{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;gap:24px;flex:1;min-width:0}.wpr-rocketcdn-cta .wpr-rocketcdn-header{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;gap:8px;color:#0c0f1f;padding:0 5px}.wpr-rocketcdn-cta .wpr-rocketcdn-header--title{font-size:18px;font-weight:600;line-height:1.3;margin:0}.wpr-rocketcdn-cta .wpr-rocketcdn-header--subtitle{font-size:16px;font-weight:400;line-height:1.3;margin:0}.wpr-rocketcdn-cta .wpr-rocketcdn-feature{min-height:30px;padding-left:62px;position:relative}.wpr-rocketcdn-cta .wpr-rocketcdn-feature:before{position:absolute;top:50%;left:5px;transform:translateY(-50%);width:42px;height:32px}.wpr-rocketcdn-cta .wpr-rocketcdn-feature--content{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;gap:4px;flex:1;min-width:0}.wpr-rocketcdn-cta .wpr-rocketcdn-feature--title{font-size:16px;font-weight:600;line-height:1.3;color:#0c0f1f;margin:0}.wpr-rocketcdn-cta .wpr-rocketcdn-feature--description{font-size:14px;font-weight:400;line-height:1.3;color:#738191;margin:0}.wpr-rocketcdn-cta .wpr-rocketcdn-bandwidth:before{content:url(../img/bandwidth.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-configuration:before{content:url(../img/configuration.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-automatic:before{content:url(../img/automatic.svg)}.wpr-rocketcdn-cta-footer{color:#121116;font-weight:600;padding:0 8px 0 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-cta-footer a{position:relative;padding-left:22px}.wpr-rocketcdn-cta-footer a:before{content:"";position:absolute;width:14px;height:15px;background:url("../img/icon-i-circle.svg") no-repeat center center;top:3px;left:0}.wpr-rocketcdn-cta-footer--cancel-notice{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:4px;font-family:"Roboto",sans-serif;font-size:11px;font-weight:600;line-height:1.3;color:#738191}.wpr-rocketcdn-cta-footer--cancel-notice span::after{position:absolute;content:url(../img/icon-i-circle.svg);margin-left:4px;margin-top:1px}.wpr-rocketcdn-cta-promo-footer{color:#121116;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;background-color:#fff;border-radius:4px;width:310px;flex-shrink:0;align-self:flex-start}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing.has-regular-price{max-height:400px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{width:auto}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing-regular{color:#72777c}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing-regular-price.wpr-isHidden{display:none}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--logo{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:6px;width:100%;padding:24px 0;border-bottom:1px solid #e2e5e9}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--logo-icon{width:auto;height:24px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--logo-text{width:auto;height:15px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--content{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;gap:32px;width:100%;padding:24px;box-sizing:border-box;position:relative}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle{position:relative;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;gap:8px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input{opacity:0;width:0;height:0;margin:0;position:absolute}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input:checked+.wpr-rocketcdn-toggle .wpr-rocketcdn-toggle--slider::before{transform:translateX(26px)}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input:checked+.wpr-rocketcdn-toggle .wpr-rocketcdn-pricing--toggle-label--inactive{color:#a9b2bc}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input:checked+.wpr-rocketcdn-toggle .wpr-rocketcdn-pricing--toggle-label--active{color:#0c0f1f}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input:checked~.wpr-rocketcdn-pricing--badge{background-color:#a4caf9;color:#0d5ec3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle{position:relative;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:8px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--slider{position:relative;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#f3704d;transition:all .3s ease;border-radius:16px;order:2;width:47px;height:20px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--slider::before{content:"";position:absolute;height:13px;width:13px;left:3px;bottom:3.5px;background-color:#fff;transition:all .3s ease;border-radius:50%}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle-label{font-family:"Roboto",sans-serif;font-size:14px;font-weight:600;line-height:1.3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle-label--inactive{color:#0c0f1f;order:1}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle-label--active{color:#a9b2bc;order:3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--badge{font-family:"Roboto",sans-serif;font-size:11px;font-weight:600;line-height:1.3;background-color:#e2e5e9;color:#a9b2bc;padding:4px 8px;border-radius:4px;white-space:nowrap;flex-shrink:0;align-self:flex-end}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--price{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;color:#0c0f1f;font-weight:600}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--price-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;gap:5px;width:100%}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--currency{font-size:34px;line-height:1.2}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--amount{font-size:46px;line-height:1.2}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--amount.wpr-isHidden{display:none}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--cents{font-size:29.67px;line-height:1.2}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--cents.wpr-isHidden{display:none}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--billing{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;color:#0c0f1f;opacity:.8;text-align:center}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--billing-period{font-family:"Roboto",sans-serif;font-size:14px;font-weight:600;line-height:1.3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--billing-period span.wpr-isHidden{display:none}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--billing-vat{font-family:"Roboto",sans-serif;font-size:14px;font-weight:400;line-height:1.3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--cta{font-family:"Roboto",sans-serif;font-size:14px;font-weight:600;line-height:1.3;width:100%;padding:12px 16px;background-color:#f3704d;border:1px solid #f3704d;border-radius:4px;color:#fff;cursor:pointer;transition:all .3s ease;text-transform:uppercase}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--cta:active{transform:translateY(1px)}.wpr-rocketcdn-subscription{text-align:end}.wpr-rocketcdn-subscription .wpr-rocketcdn-open{color:#666;text-decoration:underline}.wpr-rocket-analytics-cta.wpr-isHidden{display:none}.wpr-license-upgrade-button{font-weight:bold;text-decoration:underline}.wpr-license-upgrade-button:hover{text-decoration:none}.wpr-field.wpr-field-account .wpr-flex{align-items:flex-start}.wpr-infoAccount-License{flex:1 0 60%;margin-right:16px}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div{width:100%}}.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:left}}.wpr-Popin-Upgrade .wpr-Popin-content{padding-bottom:32px}.wpr-Popin-Upgrade .wpr-Popin-flex{justify-content:space-between;display:grid;grid-template-columns:1fr 1fr;grid-gap:15px}.wpr-Popin-Upgrade .wpr-Popin-flex>div{align-items:center;border:1px solid #dadada;border-radius:24px;display:flex;flex-direction:column;padding:24px;text-align:center;flex:.5;margin:0}@media(max-width: 783px){.wpr-Popin-Upgrade .wpr-Popin-flex>div{margin:0;width:100%}}.wpr-upgrade-item:first-child .wpr-upgrade-title::before{content:url(../img/plus.svg);display:block;width:117px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}.wpr-upgrade-item:nth-child(2) .wpr-upgrade-title::before{content:url(../img/infinite.svg);display:block;width:48px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}div.wpr-upgrade-saving{background:#ffd147;border-radius:44px;color:#121116;font-weight:bold;margin:0 0 24px 0;padding:8px 16px;text-align:center}.wpr-upgrade-title{color:#f56f46;font-size:1.875rem;line-height:1.2;margin-bottom:16px;padding-top:55px;position:relative}div.wpr-upgrade-prices{color:#121116;font-size:3rem;line-height:1;font-weight:bold;margin:0 0 16px 0}.wpr-upgrade-price-symbol{font-size:1.875rem;line-height:1;vertical-align:super}.wpr-upgrade-price-regular{color:#72777c;font-size:1rem;line-height:1;vertical-align:top}div.wpr-upgrade-websites{color:#121116;font-size:0.875rem;line-height:1;font-weight:bold;margin:0 0 24px 0;width:100%}div.wpr-upgrade-websites.notstacked{padding:16px 0;margin:0 0 16px}.wpr-upgrade-link{background:#fff;border:1px solid #f56f46;border-radius:800px;color:#f56f46;display:flex;align-items:center;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.wpr-upgrade-link:hover{background:#f56f46;color:#fff}.wpr-upgrade-link:hover:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M11.2 2.8a.8.8 0 00-1.3 1L12.6 7h-11a.8.8 0 100 1.7h11L10 12a.8.8 0 101.3 1L15 8.6a.8.8 0 000-1.2l-3.8-4.5z'/%3E%3C/svg%3E")}.wpr-upgrade-link::after{content:"";display:inline-block;margin:0 0 0 .89em;height:16px;width:16px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23F56F46'%3E%3Cpath d='M11.2 2.8a.8.8 0 00-1.3 1L12.6 7h-11a.8.8 0 100 1.7h11L10 12a.8.8 0 101.3 1L15 8.6a.8.8 0 000-1.2l-3.8-4.5z'/%3E%3C/svg%3E");vertical-align:-10%}.rocket-promo-banner{background:#ffd147;display:flex;justify-content:space-around;margin-top:16px;padding:24px;position:relative}@media(max-width: 783px){.rocket-promo-banner{flex-flow:column}}.rocket-promo-banner>div{display:flex;flex-flow:column}@media(max-width: 783px){.rocket-promo-banner>div{width:100%}}.rocket-promo-banner>div{width:50%}.rocket-promo-title{font-weight:bold;margin-bottom:24px}.rocket-promo-discount{background:#fff;border-radius:44px;display:inline-block;margin-right:8px;padding:8px 16px;text-transform:uppercase}.rocket-promo-message,.rocket-promo-deal{font-size:1rem;line-height:1.5;margin-bottom:0}.rocket-promo-deal{margin-top:8px}.rocket-promo-cta-block{align-items:center;margin-right:24px}.rocket-promo-countdown{display:flex;flex-flow:row wrap;width:66%}.rocket-promo-countdown>.rocket-countdown-item{background:#fff;border-radius:8px;flex:1;margin-right:8px;padding:8px;text-align:center}.rocket-promo-countdown>.rocket-countdown-item>.rocket-countdown-value{display:block;font-size:1.5rem;line-height:1;font-weight:bold}.rocket-promo-cta{background:#172153;border-radius:44px;color:#fff;font-weight:bold;padding:16px 32px}.rocket-renewal-banner{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;justify-content:space-evenly;margin-top:16px;padding:8px 8px 16px}.rocket-renewal-expired-banner{background:#ffd147;margin-top:16px;padding:24px;position:relative;display:flex}.banner-copy{width:75%}.revoked-website-banner .banner-copy{width:72%}@media(max-width: 783px){.rocket-renewal-expired-banner-container{flex-flow:column}}.rocket-renewal-expired-banner-container>div{display:flex;flex-flow:column}@media(max-width: 783px){.rocket-renewal-expired-banner-container>div{width:100%}}.rocket-renewal-expired-banner-container>div{width:70%}.rocket-renew-message{margin:0 16px}.rocket-renew-message>p{font-size:0.875rem;line-height:1.5}.rocket-expired-message>p{font-size:0.875rem;line-height:1.5;padding-left:80px}.rocket-expired-title{font-size:1.375rem;line-height:1.5;font-weight:bold}.rocket-expired-title::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle}.rocket-expired-cta-container{align-self:center}.rocket-renew-cta{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.rocket-renew-cta:hover,.rocket-renew-cta:active,.rocket-renew-cta:focus{color:#fff}.rocket-renew-cta::after{content:"→";font-weight:normal;margin-left:8px}.wpr-field-speed-radar{margin-top:20px}.wpr-speed-radar-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid #e8ebee;border-radius:3px;margin-bottom:20px}.wpr-menuItem{position:relative;display:block;padding:16px 44px 18px 20px;text-decoration:none;color:#121116;border-top:1px solid #e0e4e9;border-left:2px solid rgba(0,0,0,0);overflow:hidden;transition:all 100ms ease-out;-webkit-transition:all 100ms ease-out}@media(max-width: 783px){.wpr-menuItem{width:57px;height:50px;padding:0}}.wpr-menuItem:before{position:absolute;top:calc(50% - 12px);right:18px;text-align:center;font-size:1.4375rem;line-height:1;color:#121116;opacity:.4;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-menuItem:hover,.wpr-menuItem.isActive{color:#121116;background:#fff;border-left:2px solid #f56640}.wpr-menuItem:hover .wpr-menuItem-title,.wpr-menuItem.isActive .wpr-menuItem-title{color:#f56640}.wpr-menuItem:hover:before,.wpr-menuItem.isActive:before{color:#f56640;opacity:1}.wpr-menuItem:focus{color:#121116}.wpr-menuItem:focus:before{color:#121116}.wpr-menuItem-title{font-size:0.8125rem;line-height:1.4615384615;font-weight:bold;letter-spacing:-0.08px;text-transform:uppercase;color:#121116}@media(max-width: 783px){.wpr-menuItem-title{display:none !important}}.wpr-menuItem-description{margin-top:2px;color:#72777c;font-size:0.8125rem;line-height:1.2307692308;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}@media(max-width: 783px){.wpr-menuItem-description{display:none}}.wpr-menuItem.wpr-subMenuItem{display:none;padding:10px 20px 8px 25px}@media(max-width: 783px){.wpr-menuItem.wpr-subMenuItem{padding:8px 20px 8px 23px;height:35px}}.wpr-menuItem.wpr-subMenuItem .wpr-menuItem-title{display:inline-block;font-size:0.8125rem;line-height:1.8461538462;text-transform:inherit;font-weight:600}.wpr-menuItem.wpr-subMenuItem:before{position:relative;display:inline-block;top:2px;right:2px;margin-right:8px;font-size:1rem;line-height:1}#wpr-nav-cache:before{right:20px}#wpr-nav-tools:before{right:20px}.wpr-sectionHeader{position:relative;border-bottom:1px solid #e0e4e9;padding-bottom:24px}.wpr-sectionHeader:before{content:"";position:absolute;display:block;width:48px;height:2px;bottom:-1px;left:0;background-color:#f56640}.wpr-sectionHeader .wpr-title1{line-height:48px}.wpr-sectionHeader .wpr-title1:before{display:inline-block;width:48px;height:48px;margin-right:24px;background-color:#fde0d9;background-size:65%;color:#f56640;text-align:center;border-radius:3px;vertical-align:middle}.wpr-sectionHeader-title{margin-top:8px;padding-left:72px}.wpr-sectionHeader-description{color:#666;margin-top:8px;padding-left:72px}.wpr-sectionHeader-logo{vertical-align:top;margin-right:24px}.wpr-optionHeader{position:relative;display:flex;justify-content:space-between;margin-top:48px;padding-bottom:9px;border-bottom:1px solid #e0e4e9}.wpr-optionHeader .wpr-title2{line-height:24px;color:#f56640;padding-right:40px}.wpr-optionHeader .wpr-infoAction{margin-right:8px}.wpr-optionHeader.wpr-isHidden{display:none}.wpr-fieldsContainer{margin-top:8px}.wpr-fieldsContainer-description{color:#666}.wpr-fieldsContainer-description a:hover,.wpr-fieldsContainer-description a:focus{color:#1eadbf}.wpr-fieldsContainer-fieldset{margin-top:16px;background:#f9fafb;padding:16px;border:1px solid #e8ebee;border-radius:2px}.wpr-fieldsContainer-fieldset--split{display:flex}.wpr-fieldsContainer-fieldset--split .wpr-field+.wpr-field{border:none}.wpr-fieldsContainer-fieldset--split .wpr-field{flex:0 0 50%;padding:0}.wpr-fieldsContainer-fieldset--split .wpr-field:first-child{padding-right:15px}.wpr-fieldsContainer-fieldset--split .wpr-field:last-child{padding-left:15px}.wpr-fieldsContainer-helper{margin-top:16px;color:#d60e5b;font-weight:500}.wpr-fieldsContainer-helper:before{position:relative;top:3px;font-size:1.125rem;line-height:1;margin-right:4px}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-field{border:none;padding:0}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-fieldsContainer-fieldset{display:flex;padding:15px}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-fieldsContainer-fieldset .wpr-field--checkbox{flex:0 0 50%;display:flex;flex-direction:column}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-fieldsContainer-fieldset .wpr-field--select{flex:0 0 50%;display:flex;justify-content:flex-end}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-fieldsContainer-fieldset .wpr-field--select select{border-radius:4px;text-align:center}.wpr-fieldsContainer.wpr-isHidden{display:none}.wpr-infoAction{position:relative;height:24px;font-size:0.8125rem;line-height:1.8461538462;vertical-align:middle;letter-spacing:-0.03em;font-weight:500;color:#666;white-space:nowrap;text-decoration:none;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out}.wpr-infoAction:before{position:absolute;margin-left:-26px;font-size:1.125rem;line-height:1.3333333333;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-infoAction--help{text-transform:uppercase;color:#02707f;font-weight:bold;font-size:0.75rem;line-height:2;letter-spacing:0}@media(max-width: 783px){.wpr-infoAction--help{display:none}}.wpr-infoAction--help:before{color:#1eadbf}.wpr-infoAction:hover,.wpr-infoAction:focus{color:#f56640;outline:none}.wpr-infoAction:hover:before,.wpr-infoAction:focus:before{color:#ffa58b}.wpr-button{position:relative;display:inline-block;width:auto;padding:8px 24px;text-align:center;background:#f56640;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);text-transform:uppercase;text-decoration:none;letter-spacing:-0.08px;font-weight:bold;border-radius:4px;color:#fff !important;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out;font-size:0.8125rem;line-height:1.5384615385}.wpr-button:hover,.wpr-button:focus{color:#fff !important;transform:translateY(-2px);box-shadow:0 7px 14px rgba(50,50,93,.25),0 3px 6px rgba(0,0,0,.2)}.wpr-button--disabled{opacity:.5;pointer-events:none}.wpr-button--small{padding:5px 0;letter-spacing:-0.08px;font-size:0.6875rem;line-height:1.8181818182}.wpr-button--no-min-width{min-width:auto !important}.wpr-button--icon{min-width:160px;padding-left:8px;padding-right:40px;text-align:left}.wpr-button--icon:before{position:absolute;right:8px;font-size:0.9375rem;line-height:1.3333333333}.wpr-button--fixed{position:fixed;display:flex;padding:8px 16px;right:24px;bottom:32px;border-radius:16px}.wpr-button--fixed:before{font-size:1.125rem;line-height:1;margin-right:8px}.wpr-button--purple{background:#2d1656}.wpr-button--blue{min-width:inherit;background:#1eadbf}.wpr-button--lightBlue{min-width:inherit;background:#40bacb}.wpr-button--red{background:#d33f49}.wpr-button--gray{background:#e0e4e9;color:#121116 !important}.wpr-button--gray:hover,.wpr-button--gray:active,.wpr-button--gray:focus{color:#121116 !important}.wpr-button--gray.radio-active{background:#2d1656 !important;color:#fff !important}.wpr-button--gray.radio-active:hover,.wpr-button--gray.radio-active:active,.wpr-button--gray.radio-active:focus{color:#fff !important}.wpr-button--blueDark{background:#02707f}.wpr-button:focus{outline:none;color:#fff !important}.wpr-button--black{background:#121116;color:#fff}.wpr-btn-with-tool-tip{position:relative;display:inline-block}.wpr-btn-with-tool-tip .wpr-tooltip{position:absolute;right:auto;top:auto;font-weight:400}.wpr-btn-with-tool-tip:hover .wpr-tooltip{visibility:visible;opacity:1;z-index:99}.wpr-field{padding:16px 0;transition:opacity 150ms ease-out;-webkit-transition:opacity 150ms ease-out}.wpr-field+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9}.wpr-field:first-child{padding-top:0}.wpr-field:last-child{padding-bottom:0}.wpr-field-description{margin-top:4px;color:#666;font-size:0.8125rem;line-height:1.5384615385}.wpr-field-description .wpr-js-popin{color:#444;text-decoration:underline}.wpr-field-description .wpr-js-popin:hover,.wpr-field-description .wpr-js-popin:focus{color:#1eadbf}.wpr-field-description a:hover,.wpr-field-description a:focus{color:#1eadbf}.wpr-field-description-helper{color:#00a66b}.wpr-field-description-label{font-size:0.875rem;line-height:1.4285714286;font-weight:500;color:#666}.wpr-field-list{margin:0;color:#666;font-weight:500}.wpr-field-list li+li{margin-top:16px}.wpr-field-list li:before{position:relative;top:3px;margin-right:8px;color:#02707f;font-size:1.125rem;line-height:1.1111111111}.wpr-field-list a{text-decoration:none}.wpr-field-list a:hover,.wpr-field-list a:focus{color:#1eadbf}.wpr-field-betweenText{margin:0 16px;font-weight:bold}.wpr-field .wpr-button{margin:8px 0}.wpr-field .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-field .wpr-flex{text-align:left;flex-direction:column}}.wpr-field .wpr-flex--egal>div{flex:0 0 50%}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div{width:100%}}.wpr-field .wpr-flex--egal>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div:last-child{text-align:left}}.wpr-field .wpr-flex--egal>div .wpr-field-description{font-style:normal;color:#666}.wpr-field p{margin-bottom:0}.wpr-field label{font-weight:500}.wpr-field h4{font-size:0.875rem;line-height:1.7142857143}.wpr-field.wpr-isDisabled label{color:#8a8b8d}.wpr-field.wpr-isParent{padding-bottom:0;margin-bottom:16px}.wpr-field.wpr-Delayjs{margin-top:16px}.wpr-field.wpr-RemoveUnUsedCss{margin-bottom:0}.wpr-field.wpr-NoPaddingBottom{padding-bottom:0}.wpr-field.wpr-isLastElem{margin-top:16px}.wpr-field.wpr-isHidden{display:none}.wpr-field .wpr-isHidden{display:none}.wpr-field--children{display:none;padding-left:32px}.wpr-field--children.wpr-isOpen{display:block}.wpr-field--children.wpr-field--textarea{padding-right:80px}@media(max-width: 1239px){.wpr-field--children.wpr-field--textarea{padding-right:32px}}@media(max-width: 783px){.wpr-field--children.wpr-field--textarea{padding-right:0}}.wpr-field--children.no-space{padding-left:0}.wpr-field--checkbox .wpr-field-description{margin-left:32px}.wpr-field--checkbox.wpr-isDisabled .wpr-field-description{color:#b0b0b1}.wpr-field--radio{padding:24px 16px}.wpr-field--radio:first-child{padding-top:8px}.wpr-field--radio:last-child{padding-bottom:8px}.wpr-field--radio .wpr-field-description{margin-left:88px}.wpr-field--radio .wpr-field-description button{color:#666}.wpr-field--split{display:inline-block;width:50%;padding-right:16px;padding-bottom:0}.wpr-field--split+.wpr-field--split{padding-left:16px;padding-right:0}.wpr-field--split+.wpr-field--split:nth-child(2){padding-top:0;border-top:none}.wpr-field--cache .wpr-field--number,.wpr-field--cache .wpr-field--select{display:inline-block;padding-top:0;width:auto;padding-bottom:0;font-weight:bold}.wpr-field--cache .wpr-field--select{position:relative;padding-left:8px;top:-2px;border-top:none}.wpr-field--cache .wpr-field--number .wpr-text input[type=number]{background:#f2f3f6;height:35px;border:1px solid #e0e4e9;font-family:inherit;font-size:1em}.wpr-field--cache .wpr-field-description{margin:8px 0;color:#00a66b}.wpr-field--cache .wpr-field-description-label{color:#121116}.wpr-field--textarea .wpr-field-description pre{background:rgba(0,0,0,.07);padding:1em;margin:1em 0 0;white-space:normal}.wpr-field--textarea .wpr-field-description pre code{background:rgba(0,0,0,0);-webkit-touch-callout:all;-webkit-user-select:all;-khtml-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;color:#121116}.wpr-fieldWarning{display:none;position:relative;padding:16px 16px 24px 56px;background:#19073b;margin:8px 0 0;color:#fff}.wpr-fieldWarning.wpr-isOpen{display:block}.wpr-fieldWarning:after{content:"";position:absolute;display:block;top:-8px;left:20px;width:0;height:0;border-style:solid;border-width:0 12px 8px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #19073b rgba(0,0,0,0)}.wpr-fieldWarning:before{content:"";position:absolute;display:block;width:calc(100% + 32px);height:100%;top:0;left:-16px;background:#19073b}.wpr-fieldWarning-title{position:relative;color:#f56640;font-size:0.875rem;line-height:1.4285714286;font-weight:bold}.wpr-fieldWarning-title:before{position:absolute;left:-36px;font-size:1.5rem;line-height:.8333333333}.wpr-fieldWarning-description{position:relative;margin-top:8px}.wpr-fieldWarning .wpr-button{margin-top:16px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning:after{left:40px}.wpr-warningContainer+.wpr-warningContainer,.wpr-warningContainer+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9;padding-top:16px}.wpr-warningContainer+.wpr-warningContainer,.wpr-field+.wpr-warningContainer{padding-bottom:16px}@media only screen and (max-width: 400px){.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning .wpr-button{white-space:normal;padding-right:32px}}@media only screen and (max-width: 350px){.wpr-radio-buttons{padding-left:24px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-24px;padding-left:30px;padding-right:0}.wpr-fieldWarning.wpr-radio-warning .wpr-button{padding-right:24px}}.wpr-documentation{padding:24px 16px;border-radius:4px;color:#fff;text-align:center;background:#40bacb}.wpr-documentation p{margin:8px 0 16px;font-weight:500}.wpr-documentation i{display:block;font-size:2.25rem;line-height:1;margin-bottom:8px}.wpr-documentation .wpr-button{padding-left:16px;padding-right:16px}.wpr-addon{padding:24px 0}.wpr-addon .wpr-flex{align-items:flex-start}@media(max-width: 783px){.wpr-addon .wpr-flex{align-items:center}}.wpr-addon .wpr-flex>div{text-align:left}.wpr-addon .wpr-addon-title{margin-bottom:16px;font-weight:500}.wpr-addon .wpr-field-description{font-style:normal}.wpr-addon .wpr-field-helper{font-size:0.8125rem;line-height:1.5384615385;color:#666;background-color:#e0e4e9;padding:8px;margin:8px 0}.wpr-addon .wpr-field-helper span.wpr-helper-title{font-weight:600}.wpr-addon .wpr-field-helper span.wpr-helper-title::after{content:"\a";white-space:pre}.wpr-addon .wpr-addon-logo{text-align:center;flex:0 0 160px}@media(max-width: 1239px){.wpr-addon .wpr-addon-logo{max-width:100px}.wpr-addon .wpr-addon-logo img{width:100%;height:auto}}@media(max-width: 1083px){.wpr-addon .wpr-addon-logo{max-width:160px}}@media(max-width: 783px){.wpr-addon .wpr-addon-logo{flex:0 0 auto;margin-bottom:16px}}.wpr-addon .wpr-addon-text{margin-left:32px;flex:1 1 auto}@media(max-width: 1239px){.wpr-addon .wpr-addon-text{margin-left:16px}}@media(max-width: 1083px){.wpr-addon .wpr-addon-text{margin-left:32px}}@media(max-width: 783px){.wpr-addon .wpr-addon-text{margin-left:0}}.wpr-addon .wpr-addon-text a{display:inline-block;margin-top:24px}.wpr-addon .wpr-addon-text .button{margin-top:24px}.wpr-addon .wpr-addon-text .wpr-add-on-helper{font-weight:normal;color:#1eadbf}.wpr-addon .wpr-addon-text .wpr-add-on-helper a{margin-top:0}.wpr-webp-addon .wpr-addon .wpr-addon-text a{margin-top:0px}.notice-wpr-warning{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;margin-top:16px;padding:8px 32px;border:0}.notice-wpr-warning p:first-child{font-size:1rem;line-height:1.125;margin-left:80px}.notice-wpr-warning p:first-child::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle;margin-left:-80px}@media(max-width: 1239px){.notice-wpr-warning p:first-child::before{margin-bottom:-30px}}.notice-wpr-warning p:last-child{margin-left:63px;flex-basis:100%;align-items:center;justify-content:flex-start;display:flex}@media(max-width: 783px){.notice-wpr-warning p:last-child{align-content:center;flex-direction:column;margin-left:0}}.notice-wpr-warning p:last-child a{margin:0 16px}@media(max-width: 783px){.notice-wpr-warning p:last-child a{margin:8px 16px}}.notice-wpr-warning p:last-child a:first-child{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.notice-wpr-warning p:last-child a:first-child:hover,.notice-wpr-warning p:last-child a:first-child:active,.notice-wpr-warning p:last-child a:first-child:focus{color:#fff}.notice-wpr-warning p:last-child a:first-child::after{content:"→";font-weight:normal;margin-left:8px}.wpr-notice{position:relative;color:#444;background:#ebfaf5 url("../img/bg-activated.svg") no-repeat 90% bottom;background-size:350px;margin-top:24px;border-radius:4px;overflow:hidden}.wpr-notice-container{padding:24px 25% 24px 40px}.wpr-notice-supTitle{font-size:1rem;line-height:1.375;font-weight:bold}.wpr-notice-title{font-size:1.5rem;line-height:1.3333333333;color:#3ece9d;margin-top:16px;font-weight:bold}.wpr-notice-description{font-size:0.875rem;line-height:1.5714285714;margin:16px 0 24px}.wpr-notice-continue{color:#666}.wpr-notice-close{position:absolute;top:24px;right:24px;color:#666;text-decoration:none;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-notice-close:hover{color:#444}.wpr-notice-close:focus{outline:none}.wpr-tools{position:relative;display:flex;flex-direction:row;padding:32px 0}@media(max-width: 1239px){.wpr-tools{flex-direction:column}}@media(max-width: 1083px){.wpr-tools{flex-direction:row}}@media(max-width: 783px){.wpr-tools{flex-direction:column}}.wpr-tools:nth-child(2){margin-top:16px}.wpr-tools+.wpr-tools{border-top:1px solid #e0e4e9}.wpr-tools-label{display:block}.wpr-tools-label:before{position:absolute;left:0;margin-top:5px;font-size:2.25rem;line-height:1;color:#f56640}@media(max-width: 783px){.wpr-tools-label:before{display:block;position:initial}}.wpr-tools-col{flex:1 1 auto}.wpr-tools-col:first-child{padding-left:72px;padding-right:24px;min-width:340px}@media(max-width: 783px){.wpr-tools-col:first-child{padding-left:0;padding-right:0;min-width:auto}}.wpr-tools-col:last-child{text-align:right}@media(max-width: 783px){.wpr-tools-col:last-child{text-align:left}}.wpr-tools .wpr-button{margin-top:24px;white-space:normal}.wpr-tools .wpr-field-description{font-style:normal;color:#666}.wpr-tools #wpr-update-exclusion-msg{min-height:20px}.wpr-imagify{display:flex;justify-content:space-between;flex-wrap:wrap;margin-top:30px}.wpr-imagify-description{width:40%;padding-right:60px}@media(max-width: 1239px){.wpr-imagify-description{width:auto;padding-right:0}}.wpr-imagify-screenshot{width:60%}@media(max-width: 1239px){.wpr-imagify-screenshot{margin-top:60px;width:auto}}.wpr-imagify-screenshot img{max-width:100%;height:auto}.wpr-imagify-more,.wpr-imagify-name{color:#00a8dc;font-weight:700;margin-bottom:0}.wpr-imagify-more::before{content:"✓";color:#000;font-size:2rem;margin-right:5px}.wpr-imagify p{font-size:1rem}.wpr-imagify p:first-child{margin-top:0}.wpr-imagify ul{margin-top:40px}.wpr-imagify li{display:flex;align-items:flex-start;margin-bottom:35px}.wpr-imagify li:before{width:24px;height:24px;margin-right:10px;flex-shrink:0}.wpr-imagify li .text{flex-grow:1;display:inline-block}.wpr-imagify a{text-decoration:none}.wpr-imagify a:hover{color:#00a8dc}.wpr-imagify .button-primary{background:#2abb9b;border:1px solid #bebebe;box-shadow:none;font-size:1rem;font-weight:700;height:auto;line-height:1;margin-top:60px;padding:20px 45px;text-shadow:none;text-transform:uppercase}.wpr-imagify-plugin-tile{display:flex;align-items:center;width:100%;padding:20px;background-color:#f9fafb;margin-top:20px;border:1px solid #ebe9e9}.wpr-imagify-plugin-tile-info{margin-left:20px}.wpr-imagify-plugin-tile-info .wpr-star-rating{display:flex;align-items:center}.wpr-imagify-plugin-tile-info .star-rating .star{font-size:16px;width:16px;height:13px}.wpr-imagify-plugin-tile-info .num-ratings{font-size:13px;margin-left:10px}.wpr-imagify-plugin-tile-title{margin-bottom:5px}.wpr-imagify-plugin-tile .wpr-button{margin-left:auto}.wpr-imagify-plugin-tile .wpr-button:before{margin-right:5px}.wpr-tutorials-section{display:flex;flex-flow:row wrap}div.wpr-tutorial-item{width:32%;margin-bottom:10px;margin-right:1%}.wpr-tutorial-link{cursor:pointer;transition:color 200ms ease-out}.wpr-tutorial-link:hover{color:#1eadbf}@media(max-width: 1083px){div.wpr-tutorial-item{width:48%}}@media(max-width: 783px){div.wpr-tutorial-item{width:100%}}.wpr-rocketcdn-modal{display:none}.wpr-rocketcdn-modal.is-open{display:block}.wpr-rocketcdn-modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;justify-content:center;align-items:center;z-index:100000}.wpr-rocketcdn-modal__container{max-width:674px;max-height:100vh;overflow-y:auto;box-sizing:border-box;z-index:1}.wpr-rocketcdn-modal iframe{max-width:100%}.wpr-plugins{gap:25px}.wpr-plugins--box{background:#f9fafb;color:#121116;padding:10px;border:1px solid #eff1f3;margin:20px 0 15px;display:grid}.wpr-plugins--logo{border-bottom:1px solid #edeff2;padding:10px 0 5px;margin-bottom:15px}.wpr-plugins--meta{display:flex;flex-direction:row;align-items:center;gap:15px;align-self:end}.wpr-plugins--meta span{color:#00a66b}#dashboard .wpr-global-score-widget-wrapper{margin-top:34px;background:#f9fafb}#dashboard .wpr-global-score-widget-wrapper .wpr-ri-score-widget__metrics{background:#f9fafb}#dashboard .wpr-global-score-widget-wrapper .wpr-ri-score-widget__metrics .wpr-ri-score-widget__metrics-row{gap:24px}#dashboard .wpr-global-score-widget-wrapper .wpr-fieldsContainer-fieldset{background:#f9fafb}.wpr-global-score-widget-wrapper{margin-bottom:16px;background:#fff;border-radius:2px;padding:16px}.wpr-global-score-widget-wrapper[data-context=dashboard]{display:none}.wpr-global-score-widget-wrapper .wpr-optionHeader{margin-top:0;border-bottom:1px solid #e2e5e9}.wpr-global-score-widget-wrapper .wpr-optionHeader .wpr-title2{font-family:"Roboto",sans-serif;font-size:16px;font-weight:600;line-height:1.3;color:#0c0f1f;padding:0}.wpr-global-score-widget-wrapper .wpr-fieldsContainer{margin-top:0}.wpr-global-score-widget-wrapper .wpr-fieldsContainer-fieldset{margin-top:0;border:none;padding:0;background:#fff}.wpr-Page#dashboard .wpr-global-score-widget-wrapper[data-context=dashboard]{display:block;border:1px solid #e8ebee}.wpr-Page#dashboard .wpr-global-score-widget-wrapper[data-context=sidebar]{display:none}.wpr-global-score-widget-wrapper[data-context=dashboard] .wpr-global-score-widget-btn-wrapper{display:block}.wpr-global-score-widget-wrapper[data-context=sidebar] .wpr-global-score-widget-btn-wrapper{display:none}.wpr-ri-score-widget{display:flex;flex-direction:column;gap:8px;width:100%;border-radius:8px}.wpr-ri-score-widget__score-section{display:flex;flex-direction:column;gap:4px;align-items:center;width:100%}.wpr-ri-score-widget__metrics{display:flex;flex-direction:column;gap:4px;width:100%;padding:8px;background:#f6f7f8;border-radius:4px;align-self:stretch;align-items:center;justify-content:center}.wpr-ri-score-widget__metrics-row{display:flex;gap:16px;align-items:center;justify-content:center}.wpr-ri-score-widget__metric-column{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px}.wpr-ri-score-widget__metric-column:last-child .wpr-ri-score-widget__metric-info .wpr-tooltip,.wpr-ri-score-widget__metric-column:nth-child(3) .wpr-ri-score-widget__metric-info .wpr-tooltip{left:auto;right:16px}.wpr-ri-score-widget__metric-column:last-child .wpr-ri-score-widget__metric-info .wpr-tooltip:before,.wpr-ri-score-widget__metric-column:nth-child(3) .wpr-ri-score-widget__metric-info .wpr-tooltip:before{left:auto;right:-8px;border-right:none;border-left:8px solid #0e1428}.wpr-ri-score-widget__metric-label-row{display:flex;gap:2px;align-items:center}.wpr-ri-score-widget__metric-label{font-family:"Roboto",sans-serif;font-size:11px;font-weight:600;color:#464f59}.wpr-ri-score-widget__metric-info{position:relative;display:inline-flex;align-items:center;justify-content:center;width:10px;height:11px;cursor:pointer;margin-top:-2px}.wpr-ri-score-widget__metric-info-icon{width:10px;height:10px;display:block;background-image:url(../img/ri-info.svg);background-size:10px 10px;background-repeat:no-repeat;background-position:center}.wpr-ri-score-widget__metric-info .wpr-tooltip{top:-16px;left:18px;min-width:180px;max-width:200px;z-index:1000}.wpr-ri-score-widget__metric-info .wpr-tooltip:before{top:5px;left:-14px;border-top:8px solid rgba(0,0,0,0);border-bottom:8px solid rgba(0,0,0,0);border-right:8px solid #0e1428}.wpr-ri-score-widget__metric-info:hover .wpr-tooltip{visibility:visible;opacity:1}.wpr-ri-score-widget__metric-value{font-family:"Roboto",sans-serif;font-size:11px;font-weight:600;line-height:1.3}.wpr-ri-score-widget__metric-value--error{color:#c01b1b}.wpr-ri-score-widget__metric-value--warning{color:#e9aa01}.wpr-ri-score-widget__metric-value--success{color:#2e8f44}.wpr-global-score-widget-btn-wrapper{display:flex;justify-content:center;margin-top:8px}.wpr-global-score-widget-btn-wrapper .wpr-ri-global-score-add-url-button{padding:10px 30px 10px 16px;font-family:Roboto,Arial,sans-serif;font-size:11px;font-style:normal;font-weight:600;line-height:1.3;margin:0}.wpr-global-score-widget-btn-wrapper .wpr-ri-global-score-add-url-button:before{bottom:6px}.wpr-global-score-widget-btn-wrapper.wpr-isHidden{display:none}.wpr-percentage-score-widget{text-align:center;margin-top:10px}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-percentage-circle{border-width:3.83px;font-size:42.17px;font-weight:600}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score{width:50px;height:50px}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score:before{width:50px;height:50px;background-size:contain;display:inline-block}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-percentage-circle.wpr-centralize-100-score{text-indent:-1px}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-tooltip{display:none}.wpr-percentage-score-widget .wpr-page-num-txt{margin:4px 0 0 0;font-size:11px;font-weight:400;line-height:1.3;color:#738191}.wpr-percentage-score-widget .wpr-page-num-txt span{font-weight:600}.wpr-percentage-score-widget .wpr-score-no-urls{background-image:url(../img/pma-light-pulp.svg);background-repeat:no-repeat;background-position:center;background-size:contain;width:92px;height:92px;margin:0 auto;display:block;margin-bottom:10px}.wpr-percentage-score-widget .wpr-ri-global-score-add-url-button{padding:10px 30px 10px 16px;font-family:Roboto,Arial,sans-serif;font-size:11px;font-style:normal;font-weight:600;line-height:1.3;margin:0}.wpr-percentage-score-widget .wpr-ri-global-score-add-url-button:before{bottom:6px}.wpr-percentage-indicator{display:flex;justify-content:center;align-items:center;position:relative}.wpr-percentage-indicator .wpr-percentage-circle{display:flex;justify-content:center;align-items:center;width:92px;height:92px;font-family:Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;border-radius:50%;border:3.83px solid;line-height:0}.wpr-percentage-indicator .wpr-percentage-circle-sm{width:32px;height:32px;font-size:14px}.wpr-percentage-indicator .wpr-percentage-circle.status-red{border-color:#c01b1b;color:#c01b1b;background-color:#fbe4e4}.wpr-percentage-indicator .wpr-percentage-circle.status-yellow{border-color:#e9aa01;color:#e9aa01;background-color:#fff7ea}.wpr-percentage-indicator .wpr-percentage-circle.status-green{border-color:#2e8f44;color:#2e8f44;background-color:#e8f8eb}.wpr-percentage-indicator .wpr-percentage-circle.blurred{filter:blur(10px);user-select:none;-webkit-user-select:none;-moz-user-select:none;pointer-events:none}.wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score{width:21.333px;height:21.333px}.wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score:before{width:21.333px;height:21.333px;background-size:contain;display:inline-block}.wpr-percentage-indicator a{text-decoration:none}.wpr-percentage-indicator .wpr-loading-img{width:78px;height:82px}.wpr-percentage-indicator .wpr-loading-img-sm{width:32px;height:32px}.wpr-percentage-indicator .wpr-tooltip{left:6px;top:30px;min-width:max-content}.wpr-percentage-indicator .wpr-tooltip:before{top:-6px;left:17.6px}.wpr-percentage-indicator:hover .wpr-tooltip{visibility:visible;opacity:1}.wpr-ri-license-banner{background-color:#f9f9f9;border-radius:2px;padding:32px;margin:20px 0;max-width:100%;border:1px solid #e2e5e9}.wpr-ri-license-banner .wpr-ri-banner-header{font-family:Roboto,Arial,sans-serif}.wpr-ri-license-banner .wpr-ri-banner-header h2{font-size:18px;font-weight:600;margin:0 0 10px;color:#0c0f1f}.wpr-ri-license-banner .wpr-ri-banner-header p{font-size:14px;color:#0c0f1f;margin:0;line-height:1.5;margin:0 0 20px}.wpr-ri-license-banner .wpr-ri-banner-content{display:flex;justify-content:space-between;gap:30px}@media(max-width: 768px){.wpr-ri-license-banner .wpr-ri-banner-content{flex-direction:column}}.wpr-ri-license-banner .wpr-ri-benefits-list-container{flex:1;padding:0;margin:0;max-width:60%}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list{list-style:none;margin:0}@media(max-width: 768px){.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list{max-width:100%}}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list li{font-family:Roboto,Arial,sans-serif;position:relative;padding-left:35px;margin-bottom:20px;font-size:14px;font-weight:400;line-height:1.3;color:#0c0f1f;display:flex;align-items:center}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list li:last-child{margin-bottom:0}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list li:before{font-family:"wpr-icomoon";content:"";position:absolute;left:0;color:#1a1a1a;font-size:13px;display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:#99d1de;padding:2px;border-radius:50%}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list li strong{font-weight:600}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-terms{margin-top:15px;font-size:11px;color:#738191;line-height:1.3}@media(max-width: 768px){.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-terms{margin-top:20px}}.wpr-ri-license-banner .wpr-ri-price-box{background-color:#fff;border-radius:5px;padding:32px 32px 20px 32px;display:flex;flex-direction:column;align-items:center;min-width:280px;box-shadow:0 2px 4px rgba(0,0,0,.05);position:relative;height:fit-content}@media(max-width: 768px){.wpr-ri-license-banner .wpr-ri-price-box{min-width:auto;width:100%}}.wpr-ri-license-banner .wpr-ri-price-box .wpr-ri-offer{font-family:Roboto,Arial,sans-serif;position:absolute;top:-14px;left:50%;transform:translateX(-50%);background-color:#fed055;color:#0c0f1f;padding:4px 12px;font-size:14px;font-weight:600;line-height:1.3;border-radius:4px}.wpr-ri-license-banner .wpr-ri-price-before-discount{color:#a9b2bc;text-decoration:line-through;font-size:16px;margin:0 0 5px}.wpr-ri-license-banner .wpr-ri-price{display:flex;align-items:baseline;justify-content:center;margin:0 0 5px;line-height:1}.wpr-ri-license-banner .wpr-ri-price .wpr-currency{font-size:20px;color:#738191;margin-right:2px;position:relative;top:-16px}.wpr-ri-license-banner .wpr-ri-price .wpr-price-number{font-size:46px;font-weight:700;color:#0c0f1f}.wpr-ri-license-banner .wpr-ri-price .wpr-price-decimal{color:#0c0f1f;font-size:30px;font-weight:700;position:relative;top:-16px}.wpr-ri-license-banner .wpr-ri-price .wpr-period{font-size:16px;color:#738191;margin-left:1px;position:relative;top:-24px}.wpr-ri-license-banner .wpr-ri-vat{font-size:12px;color:#738191;margin:0 0 20px}.wpr-ri-license-banner .wpr-ri-cta-button{font-family:Roboto,Arial,sans-serif;background-color:#f3704d;border:1px solid #f3704d;line-height:1.3;color:#fff;border-radius:4px;padding:12px 16px;width:100%;font-size:14px;font-weight:600;text-align:center;display:block;cursor:pointer;text-decoration:none;text-transform:uppercase;letter-spacing:.5px;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);transition:all 200ms ease;-webkit-backface-visibility:hidden;backface-visibility:hidden}.wpr-ri-license-banner .wpr-ri-cta-button:hover{background-color:rgb(244.725,102.0166666667,59.775);transform:translateY(-2px);box-shadow:0 7px 14px rgba(50,50,93,.25),0 3px 6px rgba(0,0,0,.2)}.wpr-ri-notice{background-image:none;border-radius:0;border-left:4px solid #3ece9d;margin:15px 0 0 0}.wpr-ri-notice .wpr-notice-container,.wpr-ri-notice p:first-child{padding:16px}.wpr-ri-notice .wpr-notice-70{max-width:70%}.wpr-ri-notice .wpr-notice-description,.wpr-ri-notice p{margin:0}.wpr-ri-notice p:first-child{font-size:0.875rem;line-height:1.5714285714}.wpr-ri-notice .wpr-notice-close{top:16px}.wpr-ri-notice.wpr-error-notice,.wpr-ri-notice.wpr-ri-free-limit-notice{font-family:Roboto,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:130%}.wpr-ri-notice.wpr-error-notice .wpr-notice-close,.wpr-ri-notice.wpr-ri-free-limit-notice .wpr-notice-close{font-size:14px;text-decoration:underline;font-weight:600;top:20px;line-height:130%}.wpr-ri-notice.wpr-error-notice{color:#ac2b15;border-left:4px solid #f56640;background:#fde0d9}.wpr-ri-notice.wpr-error-notice .wpr-notice-close{color:#0c0f1f}.wpr-ri-notice.wpr-ri-free-limit-notice{color:#000}.wpr-ri-notice.wpr-ri-free-limit-notice .wpr-notice-close{color:#000}.wpr-ri-summary-info{font-family:Roboto,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:130%;color:#0c0f1f;margin:15px 0}.wpr-ri-summary-info a{color:#f3704d;font-weight:600}.wpr-ri-summary-info strong{font-weight:600}.wpr-ri-urls-table.widefat{border:none;border-collapse:separate;border-spacing:0;border-radius:5px}.wpr-ri-urls-table.widefat td,.wpr-ri-urls-table.widefat th{border:1px solid #e2e5e9;border-bottom:none}.wpr-ri-urls-table.widefat td:not(:first-child):not(:last-child),.wpr-ri-urls-table.widefat th:not(:first-child):not(:last-child){border-left:none;border-right:none}.wpr-ri-urls-table.widefat td:first-child{border-right:none}.wpr-ri-urls-table.widefat td:last-child{border-left:none}.wpr-ri-urls-table.widefat tr:last-child th{border-bottom:1px solid #e2e5e9}.wpr-ri-urls-table.widefat tr:last-child td{border-top:0}.wpr-ri-urls-table.widefat td{border-radius:0}.wpr-ri-urls-table.widefat tr.wpr-ri-item-result td{border-top:1px solid #e2e5e9}.wpr-ri-urls-table.widefat tr.wpr-ri-item-result td.border-bottom{border-bottom:1px solid #e2e5e9}.wpr-ri-urls-table.widefat tr.wpr-global-score+tr.wpr-ri-item-result td:first-child{border-top-left-radius:5px}.wpr-ri-urls-table.widefat tr.wpr-global-score+tr.wpr-ri-item-result td:last-child{border-top-right-radius:5px}.wpr-ri-urls-table.widefat tbody>tr:last-child td{border-bottom:1px solid #e2e5e9}.wpr-ri-urls-table.widefat tbody>tr.wpr-ri-item-result:last-child td:first-child{border-bottom-left-radius:5px}.wpr-ri-urls-table.widefat tbody>tr.wpr-ri-item-result:last-child td:last-child{border-bottom-right-radius:5px}.wpr-ri-urls-table.widefat .details-section-td:last-child{border-left:1px solid #e2e5e9}.wpr-ri-urls-table.widefat .details-section-td:first-child{border-right:1px solid #e2e5e9}.wpr-ri-urls-table.widefat .wpr-ri-item-toggle.wpr-last-expanded{border-bottom-left-radius:0}.wpr-ri-urls-table.widefat .wpr-ri-item-actions.wpr-last-expanded{border-bottom-right-radius:0}.wpr-ri-urls-table.widefat .wpr-ri-item-toggle.wpr-last-collapsed{border-bottom-left-radius:5px}.wpr-ri-urls-table.widefat .wpr-ri-item-actions.wpr-last-collapsed{border-bottom-right-radius:5px}.wpr-ri-urls-table.widefat .details-section-td.wpr-last-expanded{border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-bottom:1px solid #e2e5e9}.wpr-ri-urls-table.widefat .details-section-td.wpr-last-collapsed{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:0}.wpr-ri-urls-table .wpr-percentage-indicator .wpr-percentage-circle{width:32px;height:32px;font-size:14.67px;border-width:1.33px;font-weight:600;line-height:0}.wpr-ri-urls-table .wpr-percentage-indicator .wpr-loading-img{width:32px;height:32px}.wpr-ri-urls-table .wpr-percentage-indicator .wpr-percentage-circle.wpr-centralize-100-score{text-indent:-1px}.wpr-ri-urls-table .wpr-ri-item{background:#f9fafb}.wpr-ri-urls-table .wpr-ri-item .wpr-ri-item-toggle-single:after{content:"";width:14px;height:14px;background:url("../img/ri-caret-right.svg") no-repeat center center;display:block}.wpr-ri-urls-table .wpr-ri-item--expanded .wpr-ri-item-toggle-single:after{background-image:url("../img/ri-caret-down.svg")}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score{background:#fff}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score td,.wpr-ri-urls-table .wpr-ri-item.wpr-global-score th{border:none}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score .wpr-ri-item-actions{min-height:60px;position:relative;display:block}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score .wpr-ri-item-toggle-all{content:"";width:14px;height:14px;background:url("../img/ri-caret-all-collapsed.svg") no-repeat center center;display:block}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score .wpr-ri-item-toggle-all--expanded{background-image:url("../img/ri-caret-all-expanded.svg")}.wpr-ri-urls-table .wpr-ri-item-score{vertical-align:middle;padding:0 8px}.wpr-ri-urls-table .wpr-ri-item-title{font-size:14px;color:#121116;vertical-align:middle;padding-left:25px;width:65%}.wpr-ri-urls-table .wpr-ri-item-title a{display:block;vertical-align:middle;box-sizing:border-box}.wpr-ri-urls-table .wpr-ri-item-title a.wpr-btn-with-tool-tip .wpr-tooltip{left:0;top:100%;margin-top:4px}.wpr-ri-urls-table .wpr-ri-item-title a.wpr-btn-with-tool-tip .wpr-tooltip:before{top:-6px;left:17.6px}.wpr-ri-urls-table .wpr-ri-item-title a.wpr-btn-with-tool-tip:hover .wpr-tooltip{visibility:visible;opacity:1}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-title{display:inline-block}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-title .wpr-ri-title-truncate{max-width:260px;white-space:nowrap;overflow-x:clip;text-overflow:ellipsis;display:inline-block;line-height:100%;position:relative;text-decoration:underline}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-title .wpr-ri-title{text-decoration:underline}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-title:before{position:relative;content:"";top:4px;left:-16px;height:18px;display:inline-block;border-left:1px solid #d4d9dd}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-dot{color:#738191;display:inline-block;position:relative;margin:0 8px}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-date{color:#738191;position:relative}.wpr-ri-urls-table .wpr-ri-item-actions{text-align:right;vertical-align:middle}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action{font-family:Roboto,Arial,sans-serif;display:inline-block;font-size:14px;font-weight:600;line-height:1.5;padding:0 14px;margin:8px 0;color:#121116}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:after{position:relative;content:"";top:4px;left:16px;height:18px;display:inline-block;border-left:1px solid #d4d9dd}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:first-child{margin-left:0;border-left:none}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:last-child:after{display:none}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action.wpr-confirm-delete:before{font-size:12px;top:0;margin-right:0}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:before{position:relative;top:2px;margin-right:6px}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action--disabled,.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:disabled{color:rgb(134.5094339623,150.0566037736,169.4905660377) !important;cursor:not-allowed;box-shadow:none}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action--disabled:focus,.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:disabled:focus{transform:none;box-shadow:none}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action.wpr-icon-bold-refresh:before{font-size:15px}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action.wpr-icon-trash{width:8%}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action.wpr-icon-trash:before{font-size:14px}.wpr-ri-urls-table .wpr-ri-item-actions.wpr-btn-with-tool-tip .wpr-tooltip{left:0}.wpr-ri-urls-table .wpr-ri-item-actions.wpr-btn-with-tool-tip .wpr-tooltip:before{left:50%;transform:translateX(-50%)}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-tooltip{width:280px}@media screen and (max-width: 600px){.wpr-ri-urls-table .wpr-ri-item-actions .wpr-tooltip{width:auto}}.wpr-ri-urls-table .wpr-ri-item-toggle{vertical-align:middle;padding-right:0}.wpr-ri-urls-table .wpr-ri-item-toggle-single,.wpr-ri-urls-table .wpr-ri-item-toggle-all{cursor:pointer}.wpr-ri-urls-table .wpr-ri-item-toggle-single.hide,.wpr-ri-urls-table .wpr-ri-item-toggle-all.hide{display:none}.wpr-ri-urls-table .icon-frame{width:14px;height:14px;margin:0 auto 0}.wpr-ri-urls-table .icon-frame img{width:100%;height:100%}.wpr-ri-urls-table .wpr-ri-details .details-section{max-height:0;transition:max-height .5s ease-in-out .2s,opacity .3s ease-in-out 0s;opacity:0;visibility:hidden}.wpr-ri-urls-table .wpr-ri-details .details-section-td{border-top:0}.wpr-ri-urls-table .wpr-ri-details--expanded .details-section{max-height:80px;opacity:1;transition:max-height .5s ease-in-out 0s,opacity .3s ease-in-out .2s;visibility:visible}.wpr-ri-urls-table .wpr-ri-details--expanded .details-section-td{border-top:1px solid #e2e5e9}.wpr-ri-urls-table .wpr-ri-details tr.wpr-ri-details--expanded:last-of-type .details-section-td:last-of-type{border-top:0}.wpr-ri-urls-table .details-section .report-link.wpr-ri-action--disabled,.wpr-ri-urls-table .details-section .report-link .wpr-ri-action--disabled{color:rgb(134.5094339623,150.0566037736,169.4905660377) !important;cursor:not-allowed;box-shadow:none}.wpr-ri-urls-table .details-section .report-link.wpr-ri-action--disabled:focus,.wpr-ri-urls-table .details-section .report-link .wpr-ri-action--disabled:focus{transform:none;box-shadow:none}.wpr-ri-add-section{margin:16px 0;display:flex}.wpr-ri-add-section .wpr-speed-radar-input{display:flex;width:80%;margin-right:16px;border:2px solid #c2cad4}.wpr-ri-add-section .wpr-button{display:flex;text-align:center;justify-content:center;padding:8px;width:20%}.wpr-ri-add-url-button{font-family:"Segoe UI ",Tahoma,Geneva,Verdana,sans-serif;font-size:12px;font-style:normal;font-weight:700;line-height:normal;text-transform:uppercase}.wpr-ri-add-url-button.disabled{cursor:not-allowed;border-radius:4px;background:#a199b1;box-shadow:0 1px 3px 0 rgba(0,0,0,.2)}.wpr-ri-add-url-button.disabled:focus{transform:none;box-shadow:none}.wpr-ri-add-url-button .wpr-tooltip{font-size:14px;font-weight:normal;left:50%;transform:translateX(-50%);bottom:-40px;text-transform:none}.wpr-ri-add-url-button .wpr-tooltip:before{top:-6px;left:50%;transform:translateX(-50%)}.wpr-ri-report.wpr-btn-with-tool-tip .wpr-tooltip{transform:translateX(-32%);width:260px}.wpr-ri-report.wpr-btn-with-tool-tip .wpr-tooltip:before{left:50%}.wpr-ri-report.wpr-btn-with-tool-tip .wpr-tooltip .wpr-tooltip-content{text-align:center}.widefat .details-section-td{padding:0}.widefat .details-section-td p{margin:0}.details-section{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;width:100%}.details-section .details-header{grid-column:1;grid-row:1;padding:16px 0 12px 50px;display:flex;align-items:center;justify-content:flex-start}.details-section .details-header .details-label{font-family:"Roboto",sans-serif;font-weight:600;font-size:11px;color:#464f59;line-height:1.3}.details-section .details-header .metrics-header{display:flex;gap:32px;align-items:center}.details-section .details-header .metrics-header .metric-label{display:flex;gap:2px;align-items:center;width:32px;justify-content:flex-start}.details-section .details-header .metrics-header .metric-label p{font-family:"Roboto",sans-serif;font-weight:600;font-size:11px;color:#464f59;line-height:1.3}.details-section .details-header .metrics-header .metric-label .info-icon{width:12px;height:12px;flex-shrink:0;position:relative}.details-section .details-header .metrics-header .metric-label .info-icon img{width:100%;height:100%;display:block}.details-section .details-header .metrics-header .metric-label .info-icon .wpr-tooltip{top:-16px;left:20px;min-width:200px;max-width:230px}.details-section .details-header .metrics-header .metric-label .info-icon .wpr-tooltip:before{top:7px;left:-15px;border-top:8px solid rgba(0,0,0,0);border-bottom:8px solid rgba(0,0,0,0);border-right:8px solid #0e1428}.details-section .details-header .metrics-header .metric-label .info-icon:hover .wpr-tooltip{visibility:visible;opacity:1}.details-section .details-content{grid-column:1;grid-row:2;padding:0 0 16px 50px;display:flex;flex-direction:column;gap:8px}.details-section .details-content .detail-row{display:flex;align-items:center;justify-content:flex-start}.details-section .details-content .detail-row .row-right.blurred{filter:blur(2.667px)}.details-section .details-content .detail-row .row-right .metric-values{display:flex;gap:32px;align-items:center}.details-section .details-content .detail-row .row-right .metric-values .metric-value{display:flex;flex-direction:column;width:32px;align-items:flex-start;justify-content:center;position:relative}.details-section .details-content .detail-row .row-right .metric-values .metric-value p{font-family:"Roboto",sans-serif;font-weight:600;font-size:11px;line-height:1.3}.details-section .details-content .detail-row .row-right .metric-values .metric-value.ri-error p{color:#c01b1b}.details-section .details-content .detail-row .row-right .metric-values .metric-value.ri-warning p{color:#e9aa01}.details-section .details-content .detail-row .row-right .metric-values .metric-value.ri-success p{color:#2e8f44}.details-section .details-content .detail-row .row-right .metric-values .metric-value .wpr-tooltip{top:14px;left:-84px;min-width:200px;max-width:230px}.details-section .details-content .detail-row .row-right .metric-values .metric-value .wpr-tooltip:before{top:-6px;left:89px;border-left:8px solid rgba(0,0,0,0);border-right:8px solid rgba(0,0,0,0);border-bottom:8px solid #0e1428}.details-section .details-content .detail-row .row-right .metric-values .metric-value:hover .wpr-tooltip{visibility:visible;opacity:1}.details-section .details-content .detail-row .row-right .metric-values.blurred .metric-value p{filter:blur(3px);user-select:none;-webkit-user-select:none;-moz-user-select:none;pointer-events:none}.details-section .row-left{grid-column:2;grid-row:1/3;display:flex;gap:8px;align-items:center;padding:16px 50px 16px 0}.details-section .row-left.disabled{opacity:.5}.details-section .row-left .report-link{display:flex;gap:4px}.details-section .row-left .report-link a{font-family:"Roboto",sans-serif;font-weight:600;font-size:11px;color:#0c0f1f;line-height:1.3}.details-section .row-left .report-link .icon-frame{width:12px;height:12px;flex-shrink:0;background-color:currentColor;-webkit-mask-image:url("../img/ri-report-url.svg");mask-image:url("../img/ri-report-url.svg");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.wpr-recommendations{display:flex;flex-direction:column;gap:16px;padding:16px;background:#fff;border-radius:2px;width:290px}.wpr-recommendations__header{display:flex;align-items:center;justify-content:center;padding-bottom:9px;border-bottom:1px solid #e2e5e9;width:100%}.wpr-recommendations__title{flex:1 0 0;font-size:16px;font-weight:600;color:#121116;font-family:"Roboto",sans-serif;line-height:1.3}.wpr-recommendations__content{display:flex;flex-direction:column;gap:8px;width:100%;border-radius:4px}.wpr-recommendations__list{display:flex;flex-direction:column;gap:16px;width:100%}.wpr-recommendations__list .wpr-recommendation-item:nth-child(n+4){display:none}.wpr-recommendations__list .wpr-recommendation-item:nth-child(3){border-bottom:none}.wpr-recommendations__list.is-expanded .wpr-recommendation-item:nth-child(3){border-bottom:1px solid #e2e5e9;padding-bottom:16px}.wpr-recommendations__list .wpr-recommendation-item:last-child{border-bottom:none}.wpr-recommendations__loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px;background:#fff;border-radius:2px;text-align:center}.wpr-recommendations__loading:before{display:block;content:"";background:url("../img/orange-loading.svg") no-repeat center center;background-size:contain;width:22.857px;height:24px;aspect-ratio:20/21}.wpr-recommendations__loading-spinner{display:flex;align-items:center;justify-content:center}.wpr-recommendations__loading-text{font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#738191;margin:0}.wpr-recommendations__success{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding:8px 16px;background:#ebfaf5;border-left:4px solid #2e8f44;border-radius:0}.wpr-recommendations__success-title{font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;margin:0}.wpr-recommendations__success-message{font-size:0.875rem;line-height:1.2857142857;font-weight:400;color:#121116;margin:0}.wpr-recommendations__failed{display:flex;flex-direction:column;gap:8px;align-items:flex-start;justify-content:center;padding:8px 16px;background:#fbe4e4;border-left:4px solid #c01b1b;border-radius:0}.wpr-recommendations__failed-title{font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;margin:0}.wpr-recommendations__failed-message{font-size:0.875rem;line-height:1.2857142857;font-weight:400;color:#121116;margin:0}.wpr-recommendations__failed-link{display:inline-flex;align-items:center;gap:4px;font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;text-decoration:underline}.wpr-recommendations__failed-link:hover{color:#02707f}.wpr-recommendations__failed-link .wpr-icon-external-link{width:18px;height:18px}@keyframes wpr-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.wpr-recommendation-item{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding-bottom:16px;border-bottom:1px solid #e2e5e9;background:#fff;width:100%}.wpr-recommendation-item__inner{display:flex;flex-direction:column;align-items:flex-end;width:100%}.wpr-recommendation-item__wrapper{display:flex;flex-direction:column;gap:4px;align-items:flex-start;justify-content:center;width:100%}.wpr-recommendation-item__header{display:flex;flex-direction:column;gap:4px;align-items:flex-start;justify-content:center;width:100%}.wpr-recommendation-item__title-row{display:flex;gap:8px;align-items:center;width:100%;font-size:0.875rem;line-height:1.2857142857;font-weight:600}.wpr-recommendation-item__title{flex:1 0 0;color:#121116;margin:0}.wpr-recommendation-item__activate{flex-shrink:0;color:#f56f46;text-align:center;font-weight:600;background:none;border:none;padding:0;cursor:pointer;text-transform:uppercase;font-size:0.875rem;line-height:1.2857142857;transition:color .2s ease-out;-webkit-transition:color .2s ease-out;text-decoration:none}.wpr-recommendation-item__activate:hover{color:#ac2b15}.wpr-recommendation-item__impact{display:flex;gap:4px;align-items:center}.wpr-recommendation-item__impact-label{font-size:0.6875rem;line-height:1.2727272727;font-weight:400;color:#738191}.wpr-recommendation-item__impact-tags{display:flex;gap:6px;align-items:center}.wpr-recommendation-item__description{font-size:0.875rem;line-height:1.2857142857;font-weight:400;color:#121116;width:100%;margin:0}.wpr-recommendation-item__more-info{font-weight:600;text-decoration:underline;color:#121116;cursor:pointer}.wpr-recommendation-item__more-info:hover{color:#02707f}.wpr-impact-tag{display:flex;align-items:center;padding:2px 4px;background:#f2f3f6;border-radius:2px;font-size:0.6875rem;line-height:1.2727272727;font-weight:600;color:#738191;text-transform:uppercase}.wpr-recommendations__load-more{display:flex;flex-direction:column;align-items:center;padding:12px 16px;border:1px solid #d4d9dd;border-radius:4px;width:100%;overflow:hidden;background:#fff;cursor:pointer;transition:all .2s ease-out;-webkit-transition:all .2s ease-out}.wpr-recommendations__load-more:hover{background:#f9fafb;border-color:#738191}.wpr-recommendations__load-more-text{display:flex;gap:16px;align-items:center;overflow:hidden;font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;text-transform:uppercase}.wpr-recommendations__load-more span:nth-child(2){display:none}.wpr-recommendations__load-more.is-expanded span:first-child{display:none}.wpr-recommendations__load-more.is-expanded span:nth-child(2){display:flex}.wpr-checkbox{position:relative;padding-left:32px}.wpr-checkbox label{user-select:none}.wpr-checkbox [type=checkbox]:not(:checked),.wpr-checkbox [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-checkbox [type=checkbox]:not(:checked)+label:before,.wpr-checkbox [type=checkbox]:checked+label:before{content:"";position:absolute;left:0;top:4px;width:14px;height:14px;border:2px solid #444;border-radius:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after,.wpr-checkbox [type=checkbox]:checked+label:after{content:"";position:absolute;top:5px;left:2px;color:#fff;font-family:"wpr-icomoon";speak:none;font-size:0.875rem;line-height:1.2857142857;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after{opacity:0;transform:scale(2)}.wpr-checkbox [type=checkbox]:checked+label:after{opacity:1;transform:scale(1)}.wpr-checkbox [type=checkbox]:checked+label:before{background:#19073b;border-color:#19073b}.wpr-checkbox [type=checkbox]:checked:focus+label:before{background:#665090;border:2px dotted #665090}.wpr-checkbox [type=checkbox]:focus+label:before{border:2px dotted #444}.wpr-checkbox-warning{color:#d33f49;margin-left:16px}.wpr-checkbox-warning::before{margin-right:8px}.wpr-isDisabled .wpr-checkbox [type=checkbox]:not(:checked)+label:before,.wpr-isDisabled .wpr-checkbox [type=checkbox]:checked+label:before{border:2px solid #9d9e9e}.wpr-radio{position:relative;padding-left:88px}.wpr-radio label{user-select:none;font-weight:bold}.wpr-radio [type=checkbox]:not(:checked),.wpr-radio [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before,.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{content:"";position:absolute}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before{left:0;width:52px;height:22px;background:#fff;border-radius:12px;border:1px solid #444;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{width:18px;height:18px;border-radius:100%;background:#444;top:3px;left:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:disabled+label:after,.wpr-radio [type=checkbox]:disabled+label:after{background:#e0e4e9}.wpr-radio [type=checkbox]:disabled+label:before,.wpr-radio [type=checkbox]:disabled+label:before{border:1px solid #e0e4e9}.wpr-radio [type=checkbox]:checked+label:before{border-color:#1eadbf}.wpr-radio [type=checkbox]:checked+label:after{background:#1eadbf;left:33px}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{position:absolute;left:4px;width:52px;text-transform:uppercase;letter-spacing:-0.01em;font-weight:bold;font-size:0.6875rem;line-height:2.1818181818;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{content:attr(data-l10n-inactive);left:27px;color:#666}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{content:attr(data-l10n-active);color:#02707f}.wpr-radio--reverse{padding-right:72px;padding-left:0}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:before,.wpr-radio--reverse [type=checkbox]:checked+label:before{right:0;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:after,.wpr-radio--reverse [type=checkbox]:checked+label:after{right:33px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label:after{right:3px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui:after{right:-2px;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{right:-25px;left:inherit}.wpr-radio [type=checkbox]:not(:checked):focus+label:before{border:1px dashed #444}.wpr-radio [type=checkbox]:checked:focus+label:before{border:1px dashed #1eadbf}.wpr-radio--tips [type=checkbox]:checked+label:before{border-color:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label:after{background:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label .wpr-radio-ui:after{color:#00a66b}.wpr-radio--tips [type=checkbox]:checked:focus+label:before{border:1px dashed #3ece9d}.wpr-select{position:relative}.wpr-select select{margin:0;padding:0 8px;height:36px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;box-shadow:none;border-radius:0;letter-spacing:.011em}.wpr-select select:focus{outline:none;border-color:#444;box-shadow:none}.wpr-select select:disabled{background-image:none}.wpr-select label{font-weight:bold;margin-left:8px}.wpr-textarea{margin-top:8px}.wpr-textarea textarea{padding:8px;width:100%;height:100px;font-family:Monaco;color:#121116;background:#fff;border:2px solid rgb(194.1698113208,202.0188679245,211.8301886792);border-radius:3px;font-size:0.8125rem;line-height:1.2307692308;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-textarea textarea:focus{outline:none;border-color:#444;box-shadow:none}.wpr-textarea+.wpr-field-description{color:#00a66b}.wpr-text label{color:#666}.wpr-text input[type=text],.wpr-text input[type=number]{margin-top:8px;padding:0 8px;width:100%;height:32px;color:#121116;background:#fff;border:2px solid rgb(194.1698113208,202.0188679245,211.8301886792);border-radius:3px;font-family:Monaco;font-size:0.75rem;line-height:1.3333333333;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-text input[type=text]:focus,.wpr-text input[type=number]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-text input[type=text].wpr-isError,.wpr-text input[type=number].wpr-isError{border-color:#d33f49}.wpr-text input[type=number]{width:80px}.wpr-text--number label{margin-right:8px}.wpr-upload input[type=file]{display:block;width:252px;margin:8px 8px 8px 0;padding:8px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;font-size:0.6875rem;line-height:1.4545454545}.wpr-upload input[type=file]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-multiple{display:flex;align-items:center;flex-wrap:wrap}@media(max-width: 783px){.wpr-multiple{align-items:center;flex-direction:column}}.wpr-multiple .wpr-text{flex:1 1 auto;position:relative;top:-2px}@media(max-width: 783px){.wpr-multiple .wpr-text{width:100%}}.wpr-multiple .wpr-button{margin-left:16px;width:auto;min-width:inherit;padding-right:30px}@media(max-width: 783px){.wpr-multiple .wpr-button{margin-left:0}}.wpr-multiple input[type=text]{flex-grow:2}.wpr-multiple select{height:30px}.wpr-multiple-default{margin-right:20px}.wpr-multiple-list{display:none;padding:8px 0;margin:16px 0 0;background:#f2f3f6;border-radius:2px}.wpr-multiple-list li{margin-bottom:0;padding:4px 16px;font-size:0.8125rem;line-height:1.2307692308;font-family:Monaco}.wpr-multiple-list li span{display:inline-block;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-multiple-close{position:relative;top:3px;font-size:1rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-multiple-close:focus{outline:none}.wpr-multiple-close:hover,.wpr-multiple-close:focus{color:#d33f49}.wpr-multiple-close:hover+span,.wpr-multiple-close:focus+span{color:#d33f49}.wpr-multiple-select .wpr-list{border:2px solid #c2cad4;background-color:#fff;border-radius:5px;padding:10px;margin:8px 0}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_ads:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_plugins:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_themes:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header{display:flex;justify-content:space-between}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-list-header-arrow{width:15px;cursor:pointer;display:flex;transform:rotate(180deg)}.wpr-multiple-select .wpr-list .wpr-list-header h3{font-weight:500;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-multiple-select .wpr-list .wpr-list-body{display:none}.wpr-multiple-select .wpr-list .wpr-list-body li{padding-left:30px}.wpr-multiple-select .wpr-list .wpr-list-body li .wpr-checkbox img{width:15px}.wpr-multiple-select .wpr-list.open .wpr-list-body{display:block}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox label{color:#72777c}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox input[checked=checked]+label{color:#121116}.wpr-multiple-select .wpr-list.open .wpr-list-header{border-bottom:1px solid #c2cad4;margin-bottom:10px;padding-bottom:5px}.wpr-multiple-select .wpr-list.open .wpr-list-header-arrow{transform:rotate(0deg)}.wpr-field--categorizedmultiselect .wpr-list{padding-right:15px;padding-left:15px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{padding-bottom:9px;margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{max-height:32px;cursor:pointer}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header{max-height:32px;cursor:pointer}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header .wpr-badge-counter{display:inline-block;vertical-align:top;box-sizing:border-box;margin:2px 0 0px 2px;padding:0 7px;min-width:18px;height:18px;border-radius:9px;background-color:#eb714a;color:#fff;font-size:11px;font-weight:bold;line-height:1.6;text-align:center}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header .wpr-list-header-data{display:flex;align-items:center;justify-content:space-between;gap:8px}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header .wpr-list-header-data img{width:16px;height:16px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]+label:before{top:4px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]:checked+label:after{top:4px}.wpr-field--categorizedmultiselect .wpr-list-header .wpr-checkbox{padding-left:29px}.wpr-field--categorizedmultiselect .wpr-list-body{display:block;max-height:250px;overflow-y:auto}.wpr-field--categorizedmultiselect .wpr-list-body ul{margin:0}.wpr-field--categorizedmultiselect .wpr-list-body ul li{margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox{padding-left:25px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox label{color:#121116 !important;font-weight:normal}.wpr-field--categorizedmultiselect .dashicons{color:#72777c}.wpr-field--categorizedmultiselect .wpr-multiple-select-title{cursor:pointer;font-weight:bold}.wpr-field--categorizedmultiselect .wpr-subsection{padding-left:30px}.wpr-field--categorizedmultiselect .wpr-select-all{border-bottom:2px solid #e9e9e9;width:150px;padding-bottom:10px}[data-parent=delay_js].wpr-field--children{margin-left:32px;padding-left:0}@media only screen and (min-width: 782px){.wpr-field--categorizedmultiselect{padding-right:80px}}.custom-select{position:relative;width:60%;max-width:100%;color:#000;margin:0 auto !important}.select-button{width:100%;background-color:#fff;padding:.65rem;border:1px solid #caced1;border-radius:1rem;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.selected-value{text-align:center;flex:1}.custom-select-arrow{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:6px solid #000;transition:transform ease-in-out .3s}.select-dropdown{position:absolute;z-index:1;list-style:none;width:100%;border:1px solid #caced1;padding:10px 0;margin-top:10px;max-height:200px;overflow-y:auto;opacity:0;visibility:hidden;border-radius:16px;background-color:#fff;transition:all .5s ease;transform:translateY(-20px);box-shadow:0px 24px 40px rgba(0,0,0,.15);font-weight:normal}.select-dropdown:focus-within{box-shadow:0 10px 25px rgba(94,108,233,.6)}.select-dropdown li{position:relative;cursor:pointer;display:flex;gap:1rem;align-items:center;justify-content:center}.select-dropdown li:last-child{margin-bottom:0}.select-dropdown li label{width:100%;padding:8px 10px;cursor:pointer;display:flex;gap:1rem;align-items:center;text-align:center;flex:1;justify-content:center}.select-dropdown::-webkit-scrollbar{width:7px}.select-dropdown::-webkit-scrollbar-track{background:#f1f1f1;border-radius:25px}.select-dropdown::-webkit-scrollbar-thumb{background:#ccc;border-radius:25px}.select-dropdown li:hover,.select-dropdown li.active,.select-dropdown input:checked~label{background-color:#f2f2f2}.select-dropdown input:focus~label{background-color:#dfdfdf}.select-dropdown input[type=radio]{position:absolute;left:0;opacity:0}.custom-select.active .custom-select-arrow{transform:rotate(180deg)}.custom-select.active .select-dropdown{opacity:1;visibility:visible;transform:translateY(0)} \ No newline at end of file +h1,h2,h3,h4{color:currentColor;margin:0;font-weight:normal}button{padding:0;border:none;background:none;cursor:pointer}a{color:currentColor;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}a:hover{color:currentColor}input[type=submit]{cursor:pointer;border:none}a:active,button:active{outline:none}a:focus,button:focus{color:currentColor;box-shadow:none}.wpr-wrap{padding:16px;margin:0 0 0 -20px}@media(max-width: 783px){.wpr-wrap{padding:0;margin:0 0 0 -10px}}.wpr-body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeQuality;text-rendering:optimizeLegibility;display:flex;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-body *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media(max-width: 783px){#hs-beacon{display:none !important}}.wpr-u-flex{display:flex;align-items:center;justify-content:center}.wpr-mt-2{margin-top:20px}.wpr-fs-sm{font-size:.9em}.wpr-fs-md{font-size:1em}.wpr-loader{position:fixed;top:50%;left:50%;transform:translate(-50%, -50%);margin:0 auto;width:60px;aspect-ratio:2;--_g: no-repeat radial-gradient(circle closest-side,#ffffff 90%,#0000);background:var(--_g) 0% 50%,var(--_g) 50% 50%,var(--_g) 100% 50%;background-size:33.3333333333% 50%;animation:l3 1s infinite linear}@keyframes l3{20%{background-position:0% 0%,50% 50%,100% 50%}40%{background-position:0% 100%,50% 0%,100% 50%}60%{background-position:0% 50%,50% 100%,100% 0%}80%{background-position:0% 50%,50% 50%,100% 100%}}.wpr-tooltip{visibility:hidden;position:absolute;border-radius:4px;background-color:#0e1428;color:#fff;padding:8px 16px;margin-top:8px;font-size:14px;line-height:1.3;z-index:100;width:auto;opacity:0;box-shadow:0 2px 10px rgba(0,0,0,.1)}.wpr-tooltip:before{content:"";position:absolute;top:-6px;left:17.6px;width:0;height:0;border-left:8px solid rgba(0,0,0,0);border-right:8px solid rgba(0,0,0,0);border-bottom:8px solid #0e1428}.wpr-checkbox{position:relative}.wpr-checkbox .wpr-tooltip{left:-16px;top:20px}.wpr-checkbox .wpr-tooltip:before{top:-6px;left:17.6px}.wpr-checkbox:hover .wpr-tooltip{visibility:visible;opacity:1}@font-face{font-family:"wpr-icomoon";src:url("../fonts/icomoon.eot");src:url("../fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon.woff") format("woff"),url("../fonts/icomoon.ttf") format("truetype"),url("../fonts/icomoon.svg#icomoon") format("svg");font-weight:normal;font-style:normal}[class^=wpr-icon-]:before,[class*=" wpr-icon-"]:after,[class^=wpr-icon-]:after,[class*=" wpr-icon-"]:before,[id^=wpr-nav-]:before,[id*=" wpr-nav-"]:after,[id^=wpr-nav-]:after,[id*=" wpr-nav-"]:before{font-family:"wpr-icomoon";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=wpr-icon-] span.hidden,[class*=" wpr-icon-"] span.hidden{display:inline-block;height:0;width:0;overflow:hidden}.wpr-icon-chevron-right:before{content:""}.wpr-icon-chevron-left:before{content:"";transform:rotate(180deg)}.wpr-icon-chevron-down:before{content:"";transform:scale(0.6)}.wpr-icon-chevron-up:before{content:"";top:50%;transform:translateY(-50%) scale(0.6)}.wpr-icon-rollback:before{content:""}.wpr-icon-addon:before,.wpr-addonSubMenuItem:before{content:""}.wpr-icon-addons:before,#wpr-nav-addons:before{content:""}.wpr-icon-book:before{content:""}.wpr-icon-cdn:before,#wpr-nav-page_cdn:before{content:""}.wpr-icon-database:before,#wpr-nav-database:before{content:""}.wpr-icon-export:before{content:""}.wpr-icon-files:before,#wpr-nav-cache:before{content:""}.wpr-icon-help:before{content:""}.wpr-icon-home:before,#wpr-nav-dashboard:before{content:""}.wpr-icon-import:before{content:""}.wpr-icon-important:before{content:""}.wpr-icon-information:before{content:""}.wpr-icon-information2:before{content:""}.wpr-icon-interrogation:before{content:""}.wpr-icon-media:before,#wpr-nav-media:before{content:""}.wpr-icon-plus:before{content:""}.wpr-icon-refresh:before,#wpr-nav-preload:before{content:""}.wpr-icon-rules:before,#wpr-nav-advanced_cache:before{content:""}.wpr-icon-stack:before,#wpr-nav-file_optimization:before{content:""}.wpr-icon-tools:before,#wpr-nav-tools:before{content:""}.wpr-icon-trash:before{content:""}.wpr-icon-user:before{content:""}.wpr-icon-check:before{content:""}.wpr-icon-check2:before{content:""}.wpr-icon-close:before{content:""}.wpr-icon-heartbeat:before,#wpr-nav-heartbeat:before{content:url("../img/heartbeat.svg")}.wpr-icon-heartbeat-hover:before,#wpr-nav-heartbeat.isActive:before,#wpr-nav-heartbeat:hover:before{content:url("../img/heartbeat-hover.svg")}.wpr-icon-imagify:before,#wpr-nav-imagify:before{content:url("../img/imagify.svg")}.wpr-icon-imagify-hover:before,#wpr-nav-imagify.isActive:before,#wpr-nav-imagify:hover:before{content:url("../img/imagify-hover.svg")}.wpr-icon-tutorial:before,#wpr-nav-tutorials:before{content:url("../img/play.svg")}.wpr-icon-tutorial-hover:before,#wpr-nav-tutorials.isActive:before,#wpr-nav-tutorials:hover:before{content:url("../img/play-hover.svg")}.wpr-icon-tutorial-alt:before{content:url("../img/play-alt.svg")}.wpr-imagify-info:before{content:url("../img/imagify-info.svg")}.wpr-imagify-install:before{content:url("../img/imagify-install.svg")}.wpr-icons-plugins:before,#wpr-nav-plugins:before{content:url("../img/plugins.png")}.wpr-icons-plugins-hover:before,#wpr-nav-plugins.isActive:before,#wpr-nav-plugins:hover:before{content:url("../img/plugins-hover.png")}.wpr-icon-rocket-insights:before,#wpr-nav-rocket_insights:before{content:"";background-image:url("../img/rocket-insights.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-rocket-insights-hover:before,#wpr-nav-rocket_insights.isActive:before,#wpr-nav-rocket_insights:hover:before{content:"";background-image:url("../img/rocket-insights-hover.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-bold-refresh:before{content:""}.wpr-icon-report:before{content:""}.wpr-Header-nav .wpr-icon-rocket-insights:before,.wpr-Header-nav #wpr-nav-rocket_insights:before{width:30px;height:24px;right:15px}.wpr-icon-exclamation:before{content:"";background-image:url("../img/exclamation.svg");background-repeat:no-repeat;background-position:center center}.wpr-icon-orange-loader:before{display:block;content:"";background:url("../img/orange-loading.svg") no-repeat center center;background-size:contain;width:22.857px;height:24px;aspect-ratio:20/21}.wpr-icon-mcp:before{display:block;content:"";background:url("../img/mcp.svg") no-repeat center center;background-size:contain;width:45px;height:45px}.wpr-title1{font-size:1.625rem;line-height:1;font-weight:600;letter-spacing:.01em}.wpr-title2{font-size:1rem;line-height:1.5;font-weight:bold;letter-spacing:-0.02em}.wpr-title3,.wpr-select label,.wpr-select select,.wpr-field--radio label{font-size:0.875rem;line-height:1.7142857143;font-weight:bold;letter-spacing:-0.011em}.wpr-Header{display:flex;flex-direction:column;flex:0 0 225px}@media(max-width: 783px){.wpr-Header{flex:0 0 50px}}.wpr-Header-logo{padding:32px 0 24px;text-align:center}@media(max-width: 783px){.wpr-Header-logo{padding:16px 0 8px}}@media(max-width: 783px){.wpr-Header-logo-desktop{display:none}}.wpr-Header-logo-mobile{display:none}@media(max-width: 783px){.wpr-Header-logo-mobile{display:inline-block}}.wpr-Header-footer{margin-top:auto;padding:48px 20px 0;font-size:0.6875rem;line-height:4.3636363636;color:#666;opacity:.6;font-weight:bold}@media(max-width: 783px){.wpr-Header-footer{display:none}}.wpr-Sidebar{position:relative;display:none;flex:0 0 290px;padding:0 16px;flex-direction:column;gap:16px}@media(max-width: 1239px){.wpr-Sidebar{flex:0 0 260px}}@media(max-width: 1083px){.wpr-Sidebar{display:none !important}}.wpr-Sidebar-title{margin-bottom:32px}.wpr-Sidebar-notice{padding:8px 16px;margin-bottom:16px;background:#fff;border:1px solid #e8ebee;border-left:2px solid #1eadbf;border-radius:0 3px 3px 0;color:#666}.wpr-Sidebar-notice p{margin:0}.wpr-Sidebar-notice-link{display:inline-block;margin-top:8px;font-size:0.6875rem;line-height:1.8181818182;color:#02707f;letter-spacing:-0.05em;text-transform:uppercase;text-decoration:none;font-weight:bold}.wpr-Sidebar-notice-link:hover,.wpr-Sidebar-notice-link:focus{color:#40bacb}.wpr-Sidebar-info{padding:16px;background:#ebfaf5;margin-bottom:16px;border-radius:3px}.wpr-Sidebar-info h4{padding-left:48px;font-weight:500}.wpr-Sidebar-info p{margin:8px 0 0;font-size:0.6875rem;line-height:1.4545454545;color:#666}.wpr-Sidebar-info i{position:absolute;display:block;margin-top:-1px;width:40px;height:40px;color:#00a66b;font-size:1.0625rem;line-height:2.3529411765;background:#c6f0de;border-radius:3px;text-align:center}.wpr-Content{position:relative;background:#fff;padding:32px 24px;flex:1 1 auto;max-width:1230px}@media(max-width: 783px){.wpr-Content{padding:24px 16px}}.wpr-Content form>input:last-child{margin-top:24px;color:#fff !important}.wpr-Content.isNotFull{max-width:960px;z-index:1000}.wpr-Content-tips{position:absolute;top:48px;right:24px;font-weight:bold;color:#666}@media(max-width: 1083px){.wpr-Content-tips{display:none !important}}.wpr-Page{margin-bottom:32px}.wpr-Page-row{display:flex;flex-direction:row}@media(max-width: 1239px){.wpr-Page-row{flex-direction:column}}.wpr-Page-col{flex:1 1 auto}.wpr-Page-col-half{flex:0 1 50%}.wpr-Page-col--fixed{margin-left:24px;flex:0 0 325px}@media(max-width: 1239px){.wpr-Page-col--fixed{margin-left:0}}.wpr-Page#dashboard #wpr-action-refresh_account:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isHidden:before{opacity:0}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isShown:before{opacity:1}@keyframes loading{from{transform:rotate(0)}to{transform:rotate(360deg)}}.wpr-Page#dashboard .wpr-documentation{margin-top:48px;padding:43px 16px}@media(max-width: 1239px){.wpr-Page#dashboard .wpr-documentation{margin-top:40px}}.wpr-Page#dashboard .wpr-documentation .wpr-button{margin-top:8px}.wpr-Page#dashboard .wpr-documentation i{font-size:3.375rem;line-height:1}.wpr-Page#dashboard .wpr-radio{padding-left:72px}.wpr-Page#dashboard .wpr-field--radio{padding:16px 8px}.wpr-Page#dashboard .wpr-field--radio:first-child{padding-top:0}.wpr-Page#dashboard .wpr-field--radio:last-child{padding-bottom:0}.wpr-Page#dashboard .wpr-field--radio .wpr-field-description{font-style:normal;color:#666;margin-left:72px}.wpr-Page#dashboard .wpr-field-account{padding-bottom:0}.wpr-Page#dashboard .wpr-dashboard-plans>div{margin-bottom:10px;text-align:left}.wpr-Page#dashboard .wpr-infoAccount{font-weight:bold;margin-left:8px;color:#444}.wpr-Page#dashboard .wpr-infoAccount:before{content:"";position:relative;display:inline-block;width:13px;height:13px;background:#e0e4e9;border-radius:50%;color:#fff;margin-right:6px;text-align:center;top:2px;font-size:0.5rem;line-height:1.625}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid{color:#00a66b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid:before{content:"";font-family:"wpr-icomoon";speak:none;background:#3ece9d;top:-1px}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid.wpr-no-icon:before{content:"";background:none;width:0;height:0;margin-right:0}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid{color:#d60e5b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid:before{content:"!";font-weight:bold;font-size:0.625rem;line-height:1.3;speak:none;background:#d33f49;top:-1px}.wpr-Page#dashboard #wpr-account-data:before{content:none}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Popin{display:none;position:fixed;width:772px;height:auto;top:50%;left:50%;background:#fff;border-radius:3px;transform:translateX(-50%) translateY(-50%);z-index:100000}.wpr-Popin-overlay{display:none;position:fixed;opacity:0;width:100%;height:100%;top:0;left:0;background:rgba(0,0,0,.8);z-index:99999}.wpr-Popin-header{display:flex;align-items:center;justify-content:space-between;height:64px;padding:0 32px;background:#2d1656;color:#fff;font-weight:600}.wpr-Popin-close{color:#665090;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-Popin-close:hover,.wpr-Popin-close:focus{color:#fff;outline:none}.wpr-Popin-content{padding:8px 32px;color:#666}.wpr-Popin-flex{display:flex;flex-direction:row;align-items:center}.wpr-Popin-flex div{margin-left:32px}.wpr-Popin p{margin:16px 0}.wpr-Popin .wp-rocket-data-table{padding:12px 24px;background:#f2f3f6 !important;border:none}.wpr-Popin .wp-rocket-data-table td{width:50%;color:#121116;padding:8px 0;padding-left:4px;border-bottom:1px solid rgb(194.1698113208,202.0188679245,211.8301886792)}.wpr-Popin .wp-rocket-data-table td:not(.column-primary){font-family:"Monaco";font-size:0.75rem;line-height:1.6666666667;color:#666;letter-spacing:-0.01em}.wpr-Popin .wp-rocket-data-table tr{background:#f2f3f6;border-bottom:1px solid #e0e4e9}.wpr-Popin .wp-rocket-data-table tr:last-child td{border-bottom:none}.wpr-Popin .wp-rocket-data-table strong{font-weight:500}.wpr-Popin .wp-rocket-data-table em{font-style:normal}.wpr-Popin .wp-rocket-data-table code{padding:0;margin:0;background:rgba(0,0,0,0)}.wpr-rocketcdn-cta-small{border-radius:5px;margin:24px 0;padding:16px}.wpr-rocketcdn-cta-small.wpr-isHidden{display:none}.wpr-rocketcdn-cta-small .notice-title{font-weight:700}.wpr-rocketcdn-cta-small .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta-small .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta{margin:10px 0;position:relative;background:#f9fafb;border:1px solid #e2e5e9;border-radius:4px;padding:16px;display:flex;flex-direction:column;gap:16px}.wpr-rocketcdn-cta-toggle{display:flex;align-items:flex-start;gap:8px;width:100%;cursor:pointer}.wpr-rocketcdn-cta-toggle__check{width:16px;height:16px;flex-shrink:0;margin-top:4px;background-image:url("../img/rocketcdn-check.svg");background-size:contain;background-repeat:no-repeat}.wpr-rocketcdn-cta-toggle__text{margin:0;flex:1;font-size:0.875rem;line-height:1.7142857143;color:#0c0f1f}.wpr-rocketcdn-cta-toggle__text strong{font-weight:700}.wpr-rocketcdn-cta-toggle__text span{font-size:14px;color:#464f59}.wpr-rocketcdn-cta-toggle__icon{position:relative;width:24px;height:24px;flex-shrink:0;align-self:center}.wpr-rocketcdn-cta-toggle__icon:before{content:"";position:absolute;top:6px;left:7px;width:9px;height:9px;border-right:2px solid #121116;border-bottom:2px solid #121116;transform:rotate(45deg);transition:transform .2s ease}.wpr-rocketcdn-cta-toggle--max-limit{display:none}.wpr-rocketcdn-cta.wpr-rocketcdn-cta---max-limit .wpr-rocketcdn-cta-toggle--default{display:none}.wpr-rocketcdn-cta.wpr-rocketcdn-cta---max-limit .wpr-rocketcdn-cta-toggle--max-limit{display:flex}.wpr-rocketcdn-cta-separator{width:100%;height:1px;background:#e2e5e9}.wpr-rocketcdn-cta-expandable{display:block}.wpr-rocketcdn-cta--collapsed .wpr-rocketcdn-cta-separator,.wpr-rocketcdn-cta--collapsed .wpr-rocketcdn-cta-expandable{display:none}.wpr-rocketcdn-cta--collapsed .wpr-rocketcdn-cta-toggle__icon:before{transform:rotate(-45deg)}.wpr-rocketcdn-cta--collapsed .wpr-rocketcdn-cta-close{display:none}.wpr-rocketcdn-cta.wpr-isHidden{display:none}.wpr-rocketcdn-cta-close{position:absolute;top:16px;right:16px;background:rgba(0,0,0,0);border:0;color:hsla(0,0%,100%,.5)}.wpr-rocketcdn-cta-close--no-promo{position:absolute;top:16px;right:16px;background:rgba(0,0,0,0);border:0;color:rgba(0,0,0,.5)}.wpr-rocketcdn-cta-close--no-promo:before{content:"✕";font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta-close:before{content:"✕";color:#121116;font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo{background:#ffd147;border-top-left-radius:2px;border-top-right-radius:2px;padding:16px 48px 16px 16px}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-title{font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-date{margin:0;font-weight:500;font-size:1rem;line-height:1.5}.wpr-rocketcdn-cta-subtitle{color:#444;margin-top:0;font-size:0.875rem;line-height:1.7142857143}.wpr-rocketcdn-cta-content{background:#f9fafb;padding:16px}.wpr-rocketcdn-cta-content--no-promo{border-top-left-radius:2px;border-top-right-radius:2px;background:#f9fafb}.wpr-rocketcdn-cta .wpr-flex{display:flex;justify-content:space-between}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta .wpr-rocketcdn-features{margin:0;padding-right:16px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-features{border-right:none}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{background-color:#fff;align-items:center;display:flex;flex-direction:column;width:40%;max-width:310px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{width:auto}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing-regular{color:#72777c;margin-bottom:8px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-billing-detail{margin-bottom:16px;font-size:1rem;line-height:1.375}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-major{font-weight:700;font-size:3rem;line-height:1.1666666667}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-minor{font-weight:700;vertical-align:top;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--content{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;gap:20px;width:100%;padding:24px;box-sizing:border-box;position:relative}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle{position:relative;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;gap:8px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input{opacity:0;width:0;height:0;margin:0;position:absolute}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input:checked+.wpr-rocketcdn-toggle .wpr-rocketcdn-toggle--slider::before{transform:translateX(26px)}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input:checked+.wpr-rocketcdn-toggle .wpr-rocketcdn-pricing--toggle-label--inactive{color:#a9b2bc}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input:checked+.wpr-rocketcdn-toggle .wpr-rocketcdn-pricing--toggle-label--active{color:#0c0f1f}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--input:checked~.wpr-rocketcdn-pricing--badge{background-color:#a4caf9;color:#0d5ec3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle{position:relative;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:8px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--slider{position:relative;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#f3704d;transition:all .3s ease;border-radius:16px;order:2;width:47px;height:20px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle .wpr-rocketcdn-toggle--slider::before{content:"";position:absolute;height:13px;width:13px;left:3px;bottom:3.5px;background-color:#fff;transition:all .3s ease;border-radius:50%}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle-label{font-family:"Roboto",sans-serif;font-size:14px;font-weight:600;line-height:1.3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle-label--inactive{color:#0c0f1f;order:1}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--toggle-label--active{color:#a9b2bc;order:3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--badge{font-family:"Roboto",sans-serif;font-size:11px;font-weight:600;line-height:1.3;background-color:#e2e5e9;color:#a9b2bc;padding:4px 8px;border-radius:4px;white-space:nowrap;flex-shrink:0;align-self:flex-end}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--price{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;color:#0c0f1f;font-weight:600}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--price-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;gap:5px;width:100%}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--currency{font-size:34px;line-height:1.2}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--amount{font-size:46px;line-height:1.2}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--amount.wpr-isHidden{display:none}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--cents{font-size:29.67px;line-height:1.2}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--cents.wpr-isHidden{display:none}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--billing{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;color:#0c0f1f;opacity:.8;text-align:center}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--billing-period{font-family:"Roboto",sans-serif;font-size:14px;font-weight:600;line-height:1.3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--billing-period span.wpr-isHidden{display:none}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--billing-vat{font-family:"Roboto",sans-serif;font-size:14px;font-weight:400;line-height:1.3}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--cta{font-family:"Roboto",sans-serif;font-size:14px;font-weight:600;line-height:1.3;width:100%;padding:12px 16px;background-color:#f3704d;border:1px solid #f3704d;border-radius:4px;color:#fff;cursor:pointer;transition:all .3s ease;text-transform:uppercase}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing--cta:active{transform:translateY(1px)}.wpr-rocketcdn-cta .wpr-rocketcdn-feature{margin:24px 0;min-height:30px;padding-left:55px;position:relative}.wpr-rocketcdn-cta .wpr-rocketcdn-feature:before{position:absolute;top:50%;left:5px;transform:translateY(-50%)}.wpr-rocketcdn-cta .wpr-rocketcdn-bandwidth:before{content:url(../img/rocketcdn-speed.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-configuration:before{left:0;content:url(../img/rocketcdn-bandwidth.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-automatic:before{left:0;content:url(../img/rocketcdn-location.svg)}.wpr-rocketcdn-cta-footer{color:#121116;font-weight:600;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-cta-footer a{position:relative;padding-left:22px}.wpr-rocketcdn-cta-footer a:before{content:"";position:absolute;width:14px;height:15px;background:url("../img/icon-i-circle.svg") no-repeat center center;top:3px;left:0}.wpr-rocketcdn-cta-promo-footer{color:#121116;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-subscription{text-align:end}.wpr-rocketcdn-subscription .wpr-rocketcdn-open{color:#666;text-decoration:underline}.wpr-rocket-analytics-cta.wpr-isHidden{display:none}.wpr-license-upgrade-button{font-weight:bold;text-decoration:underline}.wpr-license-upgrade-button:hover{text-decoration:none}.wpr-field.wpr-field-account .wpr-flex{align-items:flex-start}.wpr-infoAccount-License{flex:1 0 60%;margin-right:16px}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div{width:100%}}.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:left}}.wpr-Popin-Upgrade .wpr-Popin-content{padding-bottom:32px}.wpr-Popin-Upgrade .wpr-Popin-flex{justify-content:space-between;display:grid;grid-template-columns:1fr 1fr;grid-gap:15px}.wpr-Popin-Upgrade .wpr-Popin-flex>div{align-items:center;border:1px solid #dadada;border-radius:24px;display:flex;flex-direction:column;padding:24px;text-align:center;flex:.5;margin:0}@media(max-width: 783px){.wpr-Popin-Upgrade .wpr-Popin-flex>div{margin:0;width:100%}}.wpr-upgrade-item:first-child .wpr-upgrade-title::before{content:url(../img/plus.svg);display:block;width:117px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}.wpr-upgrade-item:nth-child(2) .wpr-upgrade-title::before{content:url(../img/infinite.svg);display:block;width:48px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}div.wpr-upgrade-saving{background:#ffd147;border-radius:44px;color:#121116;font-weight:bold;margin:0 0 24px 0;padding:8px 16px;text-align:center}.wpr-upgrade-title{color:#f56f46;font-size:1.875rem;line-height:1.2;margin-bottom:16px;padding-top:55px;position:relative}div.wpr-upgrade-prices{color:#121116;font-size:3rem;line-height:1;font-weight:bold;margin:0 0 16px 0;padding-right:8%;padding-left:0}div.wpr-upgrade-prices.wpr-with-euro{padding-right:0;padding-left:10%}div.wpr-upgrade-prices.wpr-with-promo{padding-right:0;padding-left:6%}div.wpr-upgrade-prices.wpr-with-euro.wpr-with-promo{padding-right:0;padding-left:25%}span.price-tax__info{font-size:13px;color:#464f59;margin-bottom:13px}span.renewal-tax__info{color:#464f59;font-size:14px;font-weight:400}.wpr-upgrade-price-symbol{font-size:1.875rem;line-height:1;vertical-align:super}.wpr-upgrade-price-regular{color:#72777c;font-size:1rem;line-height:1;vertical-align:bottom}div.wpr-upgrade-websites{color:#121116;font-size:0.875rem;line-height:1;font-weight:bold;margin:0 0 24px 0;width:100%}div.wpr-upgrade-websites.notstacked{padding:16px 0;margin:0 0 16px}.wpr-upgrade-link{background:#fff;border:1px solid #f56f46;border-radius:800px;color:#f56f46;display:flex;align-items:center;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.wpr-upgrade-link:hover{background:#f56f46;color:#fff}.wpr-upgrade-link:hover:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M11.2 2.8a.8.8 0 00-1.3 1L12.6 7h-11a.8.8 0 100 1.7h11L10 12a.8.8 0 101.3 1L15 8.6a.8.8 0 000-1.2l-3.8-4.5z'/%3E%3C/svg%3E")}.wpr-upgrade-link::after{content:"";display:inline-block;margin:0 0 0 .89em;height:16px;width:16px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23F56F46'%3E%3Cpath d='M11.2 2.8a.8.8 0 00-1.3 1L12.6 7h-11a.8.8 0 100 1.7h11L10 12a.8.8 0 101.3 1L15 8.6a.8.8 0 000-1.2l-3.8-4.5z'/%3E%3C/svg%3E");vertical-align:-10%}.rocket-promo-banner{background:#ffd147;display:flex;justify-content:space-around;margin-top:16px;padding:24px;position:relative}@media(max-width: 783px){.rocket-promo-banner{flex-flow:column}}.rocket-promo-banner>div{display:flex;flex-flow:column}@media(max-width: 783px){.rocket-promo-banner>div{width:100%}}.rocket-promo-banner>div{width:50%}.rocket-promo-title{font-weight:bold;margin-bottom:24px}.rocket-promo-discount{background:#fff;border-radius:44px;display:inline-block;margin-right:8px;padding:8px 16px;text-transform:uppercase}.rocket-promo-message,.rocket-promo-deal{font-size:1rem;line-height:1.5;margin-bottom:0}.rocket-promo-deal{margin-top:8px}.rocket-promo-cta-block{align-items:center;margin-right:24px}.rocket-promo-countdown{display:flex;flex-flow:row wrap;width:66%}.rocket-promo-countdown>.rocket-countdown-item{background:#fff;border-radius:8px;flex:1;margin-right:8px;padding:8px;text-align:center}.rocket-promo-countdown>.rocket-countdown-item>.rocket-countdown-value{display:block;font-size:1.5rem;line-height:1;font-weight:bold}.rocket-promo-cta{background:#172153;border-radius:44px;color:#fff;font-weight:bold;padding:16px 32px}.rocket-renewal-banner{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;justify-content:space-evenly;margin-top:16px;padding:8px 8px 16px}.rocket-renewal-expired-banner{background:#ffd147;margin-top:16px;padding:24px;position:relative;display:flex}.banner-copy{width:75%}.revoked-website-banner .banner-copy{width:72%}@media(max-width: 783px){.rocket-renewal-expired-banner-container{flex-flow:column}}.rocket-renewal-expired-banner-container>div{display:flex;flex-flow:column}@media(max-width: 783px){.rocket-renewal-expired-banner-container>div{width:100%}}.rocket-renewal-expired-banner-container>div{width:70%}.rocket-renew-message{margin:0 16px}.rocket-renew-message>p{font-size:0.875rem;line-height:1.5}.rocket-expired-message>p{font-size:0.875rem;line-height:1.5;padding-left:80px}.rocket-expired-title{font-size:1.375rem;line-height:1.5;font-weight:bold}.rocket-expired-title::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle}.rocket-expired-cta-container{align-self:center}.rocket-renew-cta{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.rocket-renew-cta:hover,.rocket-renew-cta:active,.rocket-renew-cta:focus{color:#fff}.rocket-renew-cta::after{content:"→";font-weight:normal;margin-left:8px}.wpr-field-speed-radar{margin-top:20px}.wpr-speed-radar-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid #e8ebee;border-radius:3px;margin-bottom:20px}.wpr-menuItem{position:relative;display:flex;flex-direction:column;padding:16px 44px 18px 20px;text-decoration:none;color:#121116;border-top:1px solid #e0e4e9;border-left:2px solid rgba(0,0,0,0);position:relative;transition:all 100ms ease-out;-webkit-transition:all 100ms ease-out}@media(max-width: 783px){.wpr-menuItem{width:57px;height:50px;padding:0}}.wpr-menuItem:before{position:absolute;top:calc(50% - 12px);right:18px;text-align:center;font-size:1.4375rem;line-height:1;color:#121116;opacity:.4;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-menuItem:hover,.wpr-menuItem.isActive{color:#121116;background:#fff;border-left:2px solid #f56640}.wpr-menuItem:hover .wpr-menuItem-title,.wpr-menuItem.isActive .wpr-menuItem-title{color:#f56640}.wpr-menuItem:hover:before,.wpr-menuItem.isActive:before{color:#f56640;opacity:1}.wpr-menuItem:focus{color:#121116}.wpr-menuItem:focus:before{color:#121116}.wpr-menuItem-title{display:flex;align-items:center;gap:6px;font-size:0.8125rem;line-height:1.4615384615;font-weight:bold;letter-spacing:-0.08px;text-transform:uppercase;color:#121116}@media(max-width: 783px){.wpr-menuItem-title{display:none !important}}.wpr-menuItem-description{margin-top:2px;color:#72777c;font-size:0.8125rem;line-height:1.2307692308;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}@media(max-width: 783px){.wpr-menuItem-description{display:none}}.wpr-menuItem.wpr-subMenuItem{display:none;padding:10px 20px 8px 25px}@media(max-width: 783px){.wpr-menuItem.wpr-subMenuItem{padding:8px 20px 8px 23px;height:35px}}.wpr-menuItem.wpr-subMenuItem .wpr-menuItem-title{display:inline-block;font-size:0.8125rem;line-height:1.8461538462;text-transform:inherit;font-weight:600}.wpr-menuItem.wpr-subMenuItem:before{position:relative;display:inline-block;top:2px;right:2px;margin-right:8px;font-size:1rem;line-height:1}#wpr-nav-cache:before{right:20px}#wpr-nav-tools:before{right:20px}.wpr-sectionHeader{position:relative;border-bottom:1px solid #e0e4e9;padding-bottom:24px}.wpr-sectionHeader:before{content:"";position:absolute;display:block;width:48px;height:2px;bottom:-1px;left:0;background-color:#f56640}.wpr-sectionHeader .wpr-title1{line-height:48px}.wpr-sectionHeader .wpr-title1:before{display:inline-block;width:48px;height:48px;margin-right:24px;background-color:#fde0d9;background-size:65%;color:#f56640;text-align:center;border-radius:3px;vertical-align:middle}.wpr-sectionHeader-title{margin-top:8px;padding-left:72px}.wpr-sectionHeader-description{color:#666;margin-top:8px;padding-left:72px}.wpr-sectionHeader-logo{vertical-align:top;margin-right:24px}.wpr-without-padding{padding:0}.wpr-optionHeader{position:relative;display:flex;justify-content:space-between;margin-top:48px;padding-bottom:9px;border-bottom:1px solid #e0e4e9}.wpr-optionHeader .wpr-title2{line-height:24px;color:#f56640;padding-right:40px}.wpr-optionHeader .wpr-infoAction{margin-right:8px}.wpr-optionHeader.wpr-isHidden{display:none}.wpr-fieldsContainer{margin-top:8px}.wpr-fieldsContainer-description{color:#666}.wpr-fieldsContainer-description a:hover,.wpr-fieldsContainer-description a:focus{color:#1eadbf}.wpr-fieldsContainer-fieldset{margin-top:16px;background:#f9fafb;padding:16px;border:1px solid #e8ebee;border-radius:2px}.wpr-fieldsContainer-fieldset--split{display:flex}.wpr-fieldsContainer-fieldset--split .wpr-field+.wpr-field{border:none}.wpr-fieldsContainer-fieldset--split .wpr-field{flex:0 0 50%;padding:0}.wpr-fieldsContainer-fieldset--split .wpr-field:first-child{padding-right:15px}.wpr-fieldsContainer-fieldset--split .wpr-field:last-child{padding-left:15px}.wpr-fieldsContainer-helper{margin-top:16px;color:#d60e5b;font-weight:500}.wpr-fieldsContainer-helper:before{position:relative;top:3px;font-size:1.125rem;line-height:1;margin-right:4px}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-field{border:none;padding:0}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-fieldsContainer-fieldset{display:flex;padding:15px}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-fieldsContainer-fieldset .wpr-field--checkbox{flex:0 0 50%;display:flex;flex-direction:column}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-fieldsContainer-fieldset .wpr-field--select{flex:0 0 50%;display:flex;justify-content:flex-end}.wpr-fieldsContainer.rocket-insights-settings-container .wpr-fieldsContainer-fieldset .wpr-field--select select{border-radius:4px;text-align:center}.wpr-fieldsContainer.wpr-isHidden{display:none}.wpr-infoAction{position:relative;height:24px;font-size:0.8125rem;line-height:1.8461538462;vertical-align:middle;letter-spacing:-0.03em;font-weight:500;color:#666;white-space:nowrap;text-decoration:none;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out}.wpr-infoAction:before{position:absolute;margin-left:-26px;font-size:1.125rem;line-height:1.3333333333;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-infoAction--help{text-transform:uppercase;color:#02707f;font-weight:bold;font-size:0.75rem;line-height:2;letter-spacing:0}@media(max-width: 783px){.wpr-infoAction--help{display:none}}.wpr-infoAction--help:before{color:#1eadbf}.wpr-infoAction:hover,.wpr-infoAction:focus{color:#f56640;outline:none}.wpr-infoAction:hover:before,.wpr-infoAction:focus:before{color:#ffa58b}.wpr-button{position:relative;display:inline-block;width:auto;padding:8px 24px;text-align:center;background:#f56640;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);text-transform:uppercase;text-decoration:none;letter-spacing:-0.08px;font-weight:bold;border-radius:4px;color:#fff !important;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out;font-size:0.8125rem;line-height:1.5384615385}.wpr-button:hover,.wpr-button:focus{color:#fff !important;transform:translateY(-2px);box-shadow:0 7px 14px rgba(50,50,93,.25),0 3px 6px rgba(0,0,0,.2)}.wpr-button--disabled,.wpr-button:disabled{opacity:.5;pointer-events:none;background:#f56640}.wpr-button--small{padding:5px 0;letter-spacing:-0.08px;font-size:0.6875rem;line-height:1.8181818182}.wpr-button--no-min-width{min-width:auto !important}.wpr-button--icon{min-width:160px;padding-left:8px;padding-right:40px;text-align:left}.wpr-button--icon:before{position:absolute;right:8px;font-size:0.9375rem;line-height:1.3333333333}.wpr-button--fixed{position:fixed;display:flex;padding:8px 16px;right:24px;bottom:32px;border-radius:16px}.wpr-button--fixed:before{font-size:1.125rem;line-height:1;margin-right:8px}.wpr-button--purple{background:#2d1656}.wpr-button--blue{min-width:inherit;background:#1eadbf}.wpr-button--lightBlue{min-width:inherit;background:#40bacb}.wpr-button--red{background:#d33f49}.wpr-button--gray{background:#e0e4e9;color:#121116 !important}.wpr-button--gray:hover,.wpr-button--gray:active,.wpr-button--gray:focus{color:#121116 !important}.wpr-button--gray.radio-active{background:#2d1656 !important;color:#fff !important}.wpr-button--gray.radio-active:hover,.wpr-button--gray.radio-active:active,.wpr-button--gray.radio-active:focus{color:#fff !important}.wpr-button--blueDark{background:#02707f}.wpr-button:focus{outline:none;color:#fff !important}.wpr-button--black{background:#121116;color:#fff}.wpr-btn-with-tool-tip{position:relative;display:inline-block}.wpr-btn-with-tool-tip .wpr-tooltip{position:absolute;right:auto;top:auto;font-weight:400}.wpr-btn-with-tool-tip:hover .wpr-tooltip{visibility:visible;opacity:1;z-index:99}.wpr-field{padding:16px 0;transition:opacity 150ms ease-out;-webkit-transition:opacity 150ms ease-out}.wpr-field+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9}.wpr-field:first-child{padding-top:0}.wpr-field:last-child{padding-bottom:0}.wpr-field-description{margin-top:4px;color:#666;font-size:0.8125rem;line-height:1.5384615385}.wpr-field-description .wpr-js-popin{color:#444;text-decoration:underline}.wpr-field-description .wpr-js-popin:hover,.wpr-field-description .wpr-js-popin:focus{color:#1eadbf}.wpr-field-description a:hover,.wpr-field-description a:focus{color:#1eadbf}.wpr-field-description-helper{color:#00a66b}.wpr-field-description-label{font-size:0.875rem;line-height:1.4285714286;font-weight:500;color:#666}.wpr-field-list{margin:0;color:#666;font-weight:500}.wpr-field-list li+li{margin-top:16px}.wpr-field-list li:before{position:relative;top:3px;margin-right:8px;color:#02707f;font-size:1.125rem;line-height:1.1111111111}.wpr-field-list a{text-decoration:none}.wpr-field-list a:hover,.wpr-field-list a:focus{color:#1eadbf}.wpr-field-betweenText{margin:0 16px;font-weight:bold}.wpr-field .wpr-button{margin:8px 0}.wpr-field .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-field .wpr-flex{text-align:left;flex-direction:column}}.wpr-field .wpr-flex--egal>div{flex:0 0 50%}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div{width:100%}}.wpr-field .wpr-flex--egal>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div:last-child{text-align:left}}.wpr-field .wpr-flex--egal>div .wpr-field-description{font-style:normal;color:#666}.wpr-field p{margin-bottom:0}.wpr-field label{font-weight:500}.wpr-field h4{font-size:0.875rem;line-height:1.7142857143}.wpr-field.wpr-isDisabled label{color:#8a8b8d}.wpr-field.wpr-isParent{padding-bottom:0;margin-bottom:16px}.wpr-field.wpr-Delayjs{margin-top:16px}.wpr-field.wpr-RemoveUnUsedCss{margin-bottom:0}.wpr-field.wpr-NoPaddingBottom{padding-bottom:0}.wpr-field.wpr-isLastElem{margin-top:16px}.wpr-field.wpr-isHidden{display:none}.wpr-field .wpr-isHidden{display:none}.wpr-field--children{display:none;padding-left:32px}.wpr-field--children.wpr-isOpen{display:block}.wpr-field--children.wpr-field--textarea{padding-right:80px}@media(max-width: 1239px){.wpr-field--children.wpr-field--textarea{padding-right:32px}}@media(max-width: 783px){.wpr-field--children.wpr-field--textarea{padding-right:0}}.wpr-field--children.no-space{padding-left:0}.wpr-field--checkbox .wpr-field-description{margin-left:32px}.wpr-field--checkbox.wpr-isDisabled .wpr-field-description{color:#b0b0b1}.wpr-field--radio{padding:24px 16px}.wpr-field--radio:first-child{padding-top:8px}.wpr-field--radio:last-child{padding-bottom:8px}.wpr-field--radio .wpr-field-description{margin-left:88px}.wpr-field--radio .wpr-field-description button{color:#666}.wpr-field--split{display:inline-block;width:50%;padding-right:16px;padding-bottom:0}.wpr-field--split+.wpr-field--split{padding-left:16px;padding-right:0}.wpr-field--split+.wpr-field--split:nth-child(2){padding-top:0;border-top:none}.wpr-field--cache .wpr-field--number,.wpr-field--cache .wpr-field--select{display:inline-block;padding-top:0;width:auto;padding-bottom:0;font-weight:bold}.wpr-field--cache .wpr-field--select{position:relative;padding-left:8px;top:-2px;border-top:none}.wpr-field--cache .wpr-field--number .wpr-text input[type=number]{background:#f2f3f6;height:35px;border:1px solid #e0e4e9;font-family:inherit;font-size:1em}.wpr-field--cache .wpr-field-description{margin:8px 0;color:#00a66b}.wpr-field--cache .wpr-field-description-label{color:#121116}.wpr-field--textarea .wpr-field-description pre{background:rgba(0,0,0,.07);padding:1em;margin:1em 0 0;white-space:normal}.wpr-field--textarea .wpr-field-description pre code{background:rgba(0,0,0,0);-webkit-touch-callout:all;-webkit-user-select:all;-khtml-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;color:#121116}.wpr-fieldWarning{display:none;position:relative;padding:16px 16px 24px 56px;background:#19073b;margin:8px 0 0;color:#fff}.wpr-fieldWarning.wpr-isOpen{display:block}.wpr-fieldWarning:after{content:"";position:absolute;display:block;top:-8px;left:20px;width:0;height:0;border-style:solid;border-width:0 12px 8px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #19073b rgba(0,0,0,0)}.wpr-fieldWarning:before{content:"";position:absolute;display:block;width:calc(100% + 32px);height:100%;top:0;left:-16px;background:#19073b}.wpr-fieldWarning-title{position:relative;color:#f56640;font-size:0.875rem;line-height:1.4285714286;font-weight:bold}.wpr-fieldWarning-title:before{position:absolute;left:-36px;font-size:1.5rem;line-height:.8333333333}.wpr-fieldWarning-description{position:relative;margin-top:8px}.wpr-fieldWarning .wpr-button{margin-top:16px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning:after{left:40px}.wpr-warningContainer+.wpr-warningContainer,.wpr-warningContainer+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9;padding-top:16px}.wpr-warningContainer+.wpr-warningContainer,.wpr-field+.wpr-warningContainer{padding-bottom:16px}@media only screen and (max-width: 400px){.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning .wpr-button{white-space:normal;padding-right:32px}}@media only screen and (max-width: 350px){.wpr-radio-buttons{padding-left:24px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-24px;padding-left:30px;padding-right:0}.wpr-fieldWarning.wpr-radio-warning .wpr-button{padding-right:24px}}.wpr-documentation{padding:24px 16px;border-radius:4px;color:#fff;text-align:center;background:#40bacb}.wpr-documentation p{margin:8px 0 16px;font-weight:500}.wpr-documentation i{display:block;font-size:2.25rem;line-height:1;margin-bottom:8px}.wpr-documentation .wpr-button{padding-left:16px;padding-right:16px}.wpr-addon{padding:24px 0}.wpr-addon .wpr-flex{align-items:flex-start}@media(max-width: 783px){.wpr-addon .wpr-flex{align-items:center}}.wpr-addon .wpr-flex>div{text-align:left}.wpr-addon .wpr-addon-title{margin-bottom:16px;font-weight:500}.wpr-addon .wpr-field-description{font-style:normal}.wpr-addon .wpr-field-helper{font-size:0.8125rem;line-height:1.5384615385;color:#666;background-color:#e0e4e9;padding:8px;margin:8px 0}.wpr-addon .wpr-field-helper span.wpr-helper-title{font-weight:600}.wpr-addon .wpr-field-helper span.wpr-helper-title::after{content:"\a";white-space:pre}.wpr-addon .wpr-addon-logo{text-align:center;flex:0 0 160px}@media(max-width: 1239px){.wpr-addon .wpr-addon-logo{max-width:100px}.wpr-addon .wpr-addon-logo img{width:100%;height:auto}}@media(max-width: 1083px){.wpr-addon .wpr-addon-logo{max-width:160px}}@media(max-width: 783px){.wpr-addon .wpr-addon-logo{flex:0 0 auto;margin-bottom:16px}}.wpr-addon .wpr-addon-text{margin-left:32px;flex:1 1 auto}@media(max-width: 1239px){.wpr-addon .wpr-addon-text{margin-left:16px}}@media(max-width: 1083px){.wpr-addon .wpr-addon-text{margin-left:32px}}@media(max-width: 783px){.wpr-addon .wpr-addon-text{margin-left:0}}.wpr-addon .wpr-addon-text a{display:inline-block;margin-top:24px}.wpr-addon .wpr-addon-text .button{margin-top:24px}.wpr-addon .wpr-addon-text .wpr-add-on-helper{font-weight:normal;color:#1eadbf}.wpr-addon .wpr-addon-text .wpr-add-on-helper a{margin-top:0}.wpr-webp-addon .wpr-addon .wpr-addon-text a{margin-top:0px}.notice-wpr-warning{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;margin-top:16px;padding:8px 32px;border:0}.notice-wpr-warning p:first-child{font-size:1rem;line-height:1.125;margin-left:80px}.notice-wpr-warning p:first-child::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle;margin-left:-80px}@media(max-width: 1239px){.notice-wpr-warning p:first-child::before{margin-bottom:-30px}}.notice-wpr-warning p:last-child{margin-left:63px;flex-basis:100%;align-items:center;justify-content:flex-start;display:flex}@media(max-width: 783px){.notice-wpr-warning p:last-child{align-content:center;flex-direction:column;margin-left:0}}.notice-wpr-warning p:last-child a{margin:0 16px}@media(max-width: 783px){.notice-wpr-warning p:last-child a{margin:8px 16px}}.notice-wpr-warning p:last-child a:first-child{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.notice-wpr-warning p:last-child a:first-child:hover,.notice-wpr-warning p:last-child a:first-child:active,.notice-wpr-warning p:last-child a:first-child:focus{color:#fff}.notice-wpr-warning p:last-child a:first-child::after{content:"→";font-weight:normal;margin-left:8px}.wpr-notice{position:relative;color:#444;background:#ebfaf5 url("../img/bg-activated.svg") no-repeat 90% bottom;background-size:350px;margin-top:24px;border-radius:4px;overflow:hidden}.wpr-notice-container{padding:24px 25% 24px 40px}.wpr-notice-supTitle{font-size:1rem;line-height:1.375;font-weight:bold}.wpr-notice-title{font-size:1.5rem;line-height:1.3333333333;color:#3ece9d;margin-top:16px;font-weight:bold}.wpr-notice-description{font-size:0.875rem;line-height:1.5714285714;margin:16px 0 24px}.wpr-notice-continue{color:#666}.wpr-notice-close{position:absolute;top:24px;right:24px;color:#666;text-decoration:none;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-notice-close:hover{color:#444}.wpr-notice-close:focus{outline:none}.wpr-tools{position:relative;display:flex;flex-direction:row;padding:32px 0}@media(max-width: 1239px){.wpr-tools{flex-direction:column}}@media(max-width: 1083px){.wpr-tools{flex-direction:row}}@media(max-width: 783px){.wpr-tools{flex-direction:column}}.wpr-tools:nth-child(2){margin-top:16px}.wpr-tools+.wpr-tools{border-top:1px solid #e0e4e9}.wpr-tools-label{display:block}.wpr-tools-label:before{position:absolute;left:0;margin-top:5px;font-size:2.25rem;line-height:1;color:#f56640}@media(max-width: 783px){.wpr-tools-label:before{display:block;position:initial}}.wpr-tools-col{flex:1 1 auto;align-self:center}.wpr-tools-col:first-child{padding-left:72px;padding-right:24px;min-width:340px}@media(max-width: 783px){.wpr-tools-col:first-child{padding-left:0;padding-right:0;min-width:auto}}.wpr-tools-col:last-child{text-align:right}@media(max-width: 783px){.wpr-tools-col:last-child{text-align:left}}.wpr-tools .wpr-button{margin-top:0;white-space:normal}.wpr-tools .wpr-field-description{font-style:normal;color:#666}.wpr-tools #wpr-update-exclusion-msg{min-height:20px}.wpr-imagify{display:flex;justify-content:space-between;flex-wrap:wrap;margin-top:30px}.wpr-imagify-description{width:40%;padding-right:60px}@media(max-width: 1239px){.wpr-imagify-description{width:auto;padding-right:0}}.wpr-imagify-screenshot{width:60%}@media(max-width: 1239px){.wpr-imagify-screenshot{margin-top:60px;width:auto}}.wpr-imagify-screenshot img{max-width:100%;height:auto}.wpr-imagify-more,.wpr-imagify-name{color:#00a8dc;font-weight:700;margin-bottom:0}.wpr-imagify-more::before{content:"✓";color:#000;font-size:2rem;margin-right:5px}.wpr-imagify p{font-size:1rem}.wpr-imagify p:first-child{margin-top:0}.wpr-imagify ul{margin-top:40px}.wpr-imagify li{display:flex;align-items:flex-start;margin-bottom:35px}.wpr-imagify li:before{width:24px;height:24px;margin-right:10px;flex-shrink:0}.wpr-imagify li .text{flex-grow:1;display:inline-block}.wpr-imagify a{text-decoration:none}.wpr-imagify a:hover{color:#00a8dc}.wpr-imagify .button-primary{background:#2abb9b;border:1px solid #bebebe;box-shadow:none;font-size:1rem;font-weight:700;height:auto;line-height:1;margin-top:60px;padding:20px 45px;text-shadow:none;text-transform:uppercase}.wpr-imagify-plugin-tile{display:flex;align-items:center;width:100%;padding:20px;background-color:#f9fafb;margin-top:20px;border:1px solid #ebe9e9}.wpr-imagify-plugin-tile-info{margin-left:20px}.wpr-imagify-plugin-tile-info .wpr-star-rating{display:flex;align-items:center}.wpr-imagify-plugin-tile-info .star-rating .star{font-size:16px;width:16px;height:13px}.wpr-imagify-plugin-tile-info .num-ratings{font-size:13px;margin-left:10px}.wpr-imagify-plugin-tile-title{margin-bottom:5px}.wpr-imagify-plugin-tile .wpr-button{margin-left:auto}.wpr-imagify-plugin-tile .wpr-button:before{margin-right:5px}.wpr-tutorials-section{display:flex;flex-flow:row wrap}div.wpr-tutorial-item{width:32%;margin-bottom:10px;margin-right:1%}.wpr-tutorial-link{cursor:pointer;transition:color 200ms ease-out}.wpr-tutorial-link:hover{color:#1eadbf}@media(max-width: 1083px){div.wpr-tutorial-item{width:48%}}@media(max-width: 783px){div.wpr-tutorial-item{width:100%}}.wpr-rocketcdn-modal{display:none}.wpr-rocketcdn-modal.is-open{display:block}.wpr-rocketcdn-modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;justify-content:center;align-items:center;z-index:100000}.wpr-rocketcdn-modal__container{max-width:674px;max-height:100vh;overflow-y:auto;box-sizing:border-box;z-index:1}.wpr-rocketcdn-modal iframe{max-width:100%}.wpr-plugins{gap:25px}.wpr-plugins--box{background:#f9fafb;color:#121116;padding:10px;border:1px solid #eff1f3;margin:20px 0 15px;display:grid}.wpr-plugins--logo{border-bottom:1px solid #edeff2;padding:10px 0 5px;margin-bottom:15px}.wpr-plugins--meta{display:flex;flex-direction:row;align-items:center;gap:15px;align-self:end}.wpr-plugins--meta span{color:#00a66b}#dashboard .wpr-global-score-widget-wrapper{margin-top:34px;background:#f9fafb}#dashboard .wpr-global-score-widget-wrapper .wpr-ri-score-widget__metrics{background:#f9fafb}#dashboard .wpr-global-score-widget-wrapper .wpr-ri-score-widget__metrics .wpr-ri-score-widget__metrics-row{gap:24px}#dashboard .wpr-global-score-widget-wrapper .wpr-fieldsContainer-fieldset{background:#f9fafb}.wpr-global-score-widget-wrapper{margin-bottom:16px;background:#fff;border-radius:2px;padding:16px}.wpr-global-score-widget-wrapper[data-context=dashboard]{display:none}.wpr-global-score-widget-wrapper .wpr-optionHeader{margin-top:0;border-bottom:1px solid #e2e5e9}.wpr-global-score-widget-wrapper .wpr-optionHeader .wpr-title2{font-family:"Roboto",sans-serif;font-size:16px;font-weight:600;line-height:1.3;color:#0c0f1f;padding:0}.wpr-global-score-widget-wrapper .wpr-fieldsContainer{margin-top:0}.wpr-global-score-widget-wrapper .wpr-fieldsContainer-fieldset{margin-top:0;border:none;padding:0;background:#fff}.wpr-Page#dashboard .wpr-global-score-widget-wrapper[data-context=dashboard]{display:block;border:1px solid #e8ebee}.wpr-Page#dashboard .wpr-global-score-widget-wrapper[data-context=sidebar]{display:none}.wpr-global-score-widget-wrapper[data-context=dashboard] .wpr-global-score-widget-btn-wrapper{display:block}.wpr-global-score-widget-wrapper[data-context=sidebar] .wpr-global-score-widget-btn-wrapper{display:none}.wpr-ri-score-widget{display:flex;flex-direction:column;gap:8px;width:100%;border-radius:8px}.wpr-ri-score-widget__score-section{display:flex;flex-direction:column;gap:4px;align-items:center;width:100%}.wpr-ri-score-widget__metrics{display:flex;flex-direction:column;gap:4px;width:100%;padding:8px;background:#f6f7f8;border-radius:4px;align-self:stretch;align-items:center;justify-content:center}.wpr-ri-score-widget__metrics-row{display:flex;gap:16px;align-items:center;justify-content:center}.wpr-ri-score-widget__metric-column{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px}.wpr-ri-score-widget__metric-column:last-child .wpr-ri-score-widget__metric-info .wpr-tooltip,.wpr-ri-score-widget__metric-column:nth-child(3) .wpr-ri-score-widget__metric-info .wpr-tooltip{left:auto;right:16px}.wpr-ri-score-widget__metric-column:last-child .wpr-ri-score-widget__metric-info .wpr-tooltip:before,.wpr-ri-score-widget__metric-column:nth-child(3) .wpr-ri-score-widget__metric-info .wpr-tooltip:before{left:auto;right:-8px;border-right:none;border-left:8px solid #0e1428}.wpr-ri-score-widget__metric-label-row{display:flex;gap:2px;align-items:center}.wpr-ri-score-widget__metric-label{font-family:"Roboto",sans-serif;font-size:11px;font-weight:600;color:#464f59}.wpr-ri-score-widget__metric-info{position:relative;display:inline-flex;align-items:center;justify-content:center;width:10px;height:11px;cursor:pointer;margin-top:-2px}.wpr-ri-score-widget__metric-info-icon{width:10px;height:10px;display:block;background-image:url(../img/ri-info.svg);background-size:10px 10px;background-repeat:no-repeat;background-position:center}.wpr-ri-score-widget__metric-info .wpr-tooltip{top:-16px;left:18px;min-width:180px;max-width:200px;z-index:1000}.wpr-ri-score-widget__metric-info .wpr-tooltip:before{top:5px;left:-14px;border-top:8px solid rgba(0,0,0,0);border-bottom:8px solid rgba(0,0,0,0);border-right:8px solid #0e1428}.wpr-ri-score-widget__metric-info:hover .wpr-tooltip{visibility:visible;opacity:1}.wpr-ri-score-widget__metric-value{font-family:"Roboto",sans-serif;font-size:11px;font-weight:600;line-height:1.3}.wpr-ri-score-widget__metric-value--error{color:#c01b1b}.wpr-ri-score-widget__metric-value--warning{color:#e9aa01}.wpr-ri-score-widget__metric-value--success{color:#2e8f44}.wpr-global-score-widget-btn-wrapper{display:flex;justify-content:center;margin-top:8px}.wpr-global-score-widget-btn-wrapper .wpr-ri-global-score-add-url-button{padding:10px 30px 10px 16px;font-family:Roboto,Arial,sans-serif;font-size:11px;font-style:normal;font-weight:600;line-height:1.3;margin:0}.wpr-global-score-widget-btn-wrapper .wpr-ri-global-score-add-url-button:before{bottom:6px}.wpr-global-score-widget-btn-wrapper.wpr-isHidden{display:none}.wpr-percentage-score-widget{text-align:center;margin-top:10px}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-percentage-circle{border-width:3.83px;font-size:42.17px;font-weight:600}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score{width:50px;height:50px}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score:before{width:50px;height:50px;background-size:contain;display:inline-block}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-percentage-circle.wpr-centralize-100-score{text-indent:-1px}.wpr-percentage-score-widget .wpr-percentage-indicator .wpr-tooltip{display:none}.wpr-percentage-score-widget .wpr-page-num-txt{margin:4px 0 0 0;font-size:11px;font-weight:400;line-height:1.3;color:#738191}.wpr-percentage-score-widget .wpr-page-num-txt span{font-weight:600}.wpr-percentage-score-widget .wpr-score-no-urls{background-image:url(../img/pma-light-pulp.svg);background-repeat:no-repeat;background-position:center;background-size:contain;width:92px;height:92px;margin:0 auto;display:block;margin-bottom:10px}.wpr-percentage-score-widget .wpr-ri-global-score-add-url-button{padding:10px 30px 10px 16px;font-family:Roboto,Arial,sans-serif;font-size:11px;font-style:normal;font-weight:600;line-height:1.3;margin:0}.wpr-percentage-score-widget .wpr-ri-global-score-add-url-button:before{bottom:6px}.wpr-percentage-indicator{display:flex;justify-content:center;align-items:center;position:relative}.wpr-percentage-indicator .wpr-percentage-circle{display:flex;justify-content:center;align-items:center;width:92px;height:92px;font-family:Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;border-radius:50%;border:3.83px solid;line-height:0}.wpr-percentage-indicator .wpr-percentage-circle-sm{width:32px;height:32px;font-size:14px}.wpr-percentage-indicator .wpr-percentage-circle.status-red{border-color:#c01b1b;color:#c01b1b;background-color:#fbe4e4}.wpr-percentage-indicator .wpr-percentage-circle.status-yellow{border-color:#e9aa01;color:#e9aa01;background-color:#fff7ea}.wpr-percentage-indicator .wpr-percentage-circle.status-green{border-color:#2e8f44;color:#2e8f44;background-color:#e8f8eb}.wpr-percentage-indicator .wpr-percentage-circle.blurred{filter:blur(10px);user-select:none;-webkit-user-select:none;-moz-user-select:none;pointer-events:none}.wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score{width:21.333px;height:21.333px}.wpr-percentage-indicator .wpr-percentage-circle .wpr-failed-score:before{width:21.333px;height:21.333px;background-size:contain;display:inline-block}.wpr-percentage-indicator a{text-decoration:none}.wpr-percentage-indicator .wpr-loading-img{width:78px;height:82px}.wpr-percentage-indicator .wpr-loading-img-sm{width:32px;height:32px}.wpr-percentage-indicator .wpr-tooltip{left:6px;top:30px;min-width:max-content}.wpr-percentage-indicator .wpr-tooltip:before{top:-6px;left:17.6px}.wpr-percentage-indicator:hover .wpr-tooltip{visibility:visible;opacity:1}.wpr-ri-license-banner{background-color:#f9f9f9;border-radius:2px;padding:32px;margin:20px 0;max-width:100%;border:1px solid #e2e5e9}.wpr-ri-license-banner .wpr-ri-banner-header{font-family:Roboto,Arial,sans-serif}.wpr-ri-license-banner .wpr-ri-banner-header h2{font-size:18px;font-weight:600;margin:0 0 10px;color:#0c0f1f}.wpr-ri-license-banner .wpr-ri-banner-header p{font-size:14px;color:#0c0f1f;margin:0;line-height:1.5;margin:0 0 20px}.wpr-ri-license-banner .wpr-ri-banner-content{display:flex;justify-content:space-between;gap:30px}@media(max-width: 768px){.wpr-ri-license-banner .wpr-ri-banner-content{flex-direction:column}}.wpr-ri-license-banner .wpr-ri-benefits-list-container{flex:1;padding:0;margin:0;max-width:60%}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list{list-style:none;margin:0}@media(max-width: 768px){.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list{max-width:100%}}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list li{font-family:Roboto,Arial,sans-serif;position:relative;padding-left:35px;margin-bottom:20px;font-size:14px;font-weight:400;line-height:1.3;color:#0c0f1f;display:flex;align-items:center}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list li:last-child{margin-bottom:0}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list li:before{font-family:"wpr-icomoon";content:"";position:absolute;left:0;color:#1a1a1a;font-size:13px;display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:#99d1de;padding:2px;border-radius:50%}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-benefits-list li strong{font-weight:600}.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-terms{margin-top:15px;font-size:11px;color:#738191;line-height:1.3}@media(max-width: 768px){.wpr-ri-license-banner .wpr-ri-benefits-list-container .wpr-ri-terms{margin-top:20px}}.wpr-ri-license-banner .wpr-ri-price-box{background-color:#fff;border-radius:5px;padding:32px 32px 20px 32px;display:flex;flex-direction:column;align-items:center;min-width:280px;box-shadow:0 2px 4px rgba(0,0,0,.05);position:relative;height:fit-content}@media(max-width: 768px){.wpr-ri-license-banner .wpr-ri-price-box{min-width:auto;width:100%}}.wpr-ri-license-banner .wpr-ri-price-box .wpr-ri-offer{font-family:Roboto,Arial,sans-serif;position:absolute;top:-14px;left:50%;transform:translateX(-50%);background-color:#fed055;color:#0c0f1f;padding:4px 12px;font-size:14px;font-weight:600;line-height:1.3;border-radius:4px}.wpr-ri-license-banner .wpr-ri-price-before-discount{color:#a9b2bc;text-decoration:line-through;font-size:16px;margin:0 0 5px}.wpr-ri-license-banner .wpr-ri-price{display:flex;align-items:baseline;justify-content:center;margin:0 0 5px;line-height:1}.wpr-ri-license-banner .wpr-ri-price .wpr-currency{font-size:20px;color:#738191;margin-right:2px;position:relative;top:-16px}.wpr-ri-license-banner .wpr-ri-price .wpr-price-number{font-size:46px;font-weight:700;color:#0c0f1f}.wpr-ri-license-banner .wpr-ri-price .wpr-price-decimal{color:#0c0f1f;font-size:30px;font-weight:700;position:relative;top:-16px}.wpr-ri-license-banner .wpr-ri-price .wpr-period{font-size:16px;color:#738191;margin-left:1px;position:relative;top:-24px}.wpr-ri-license-banner .wpr-ri-vat{font-size:12px;color:#738191;margin:0 0 20px}.wpr-ri-license-banner .wpr-ri-cta-button{font-family:Roboto,Arial,sans-serif;background-color:#f3704d;border:1px solid #f3704d;line-height:1.3;color:#fff;border-radius:4px;padding:12px 16px;width:100%;font-size:14px;font-weight:600;text-align:center;display:block;cursor:pointer;text-decoration:none;text-transform:uppercase;letter-spacing:.5px;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);transition:all 200ms ease;-webkit-backface-visibility:hidden;backface-visibility:hidden}.wpr-ri-license-banner .wpr-ri-cta-button:hover{background-color:rgb(244.725,102.0166666667,59.775);transform:translateY(-2px);box-shadow:0 7px 14px rgba(50,50,93,.25),0 3px 6px rgba(0,0,0,.2)}.wpr-ri-notice{background-image:none;border-radius:0;border-left:4px solid #3ece9d;margin:15px 0 0 0}.wpr-ri-notice .wpr-notice-container,.wpr-ri-notice p:first-child{padding:16px}.wpr-ri-notice .wpr-notice-70{max-width:70%}.wpr-ri-notice .wpr-notice-description,.wpr-ri-notice p{margin:0}.wpr-ri-notice p:first-child{font-size:0.875rem;line-height:1.5714285714}.wpr-ri-notice .wpr-notice-close{top:16px}.wpr-ri-notice.wpr-error-notice,.wpr-ri-notice.wpr-ri-free-limit-notice{font-family:Roboto,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:130%}.wpr-ri-notice.wpr-error-notice .wpr-notice-close,.wpr-ri-notice.wpr-ri-free-limit-notice .wpr-notice-close{font-size:14px;text-decoration:underline;font-weight:600;top:20px;line-height:130%}.wpr-ri-notice.wpr-error-notice{color:#ac2b15;border-left:4px solid #f56640;background:#fde0d9}.wpr-ri-notice.wpr-error-notice .wpr-notice-close{color:#0c0f1f}.wpr-ri-notice.wpr-ri-free-limit-notice{color:#000}.wpr-ri-notice.wpr-ri-free-limit-notice .wpr-notice-close{color:#000}.wpr-ri-summary-info{font-family:Roboto,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:130%;color:#0c0f1f;margin:15px 0}.wpr-ri-summary-info a{color:#f3704d;font-weight:600}.wpr-ri-summary-info strong{font-weight:600}.wpr-ri-urls-table.widefat{border:none;border-collapse:separate;border-spacing:0;border-radius:5px}.wpr-ri-urls-table.widefat td,.wpr-ri-urls-table.widefat th{border:1px solid #e2e5e9;border-bottom:none}.wpr-ri-urls-table.widefat td:not(:first-child):not(:last-child),.wpr-ri-urls-table.widefat th:not(:first-child):not(:last-child){border-left:none;border-right:none}.wpr-ri-urls-table.widefat td:first-child{border-right:none}.wpr-ri-urls-table.widefat td:last-child{border-left:none}.wpr-ri-urls-table.widefat tr:last-child th{border-bottom:1px solid #e2e5e9}.wpr-ri-urls-table.widefat tr:last-child td{border-top:0}.wpr-ri-urls-table.widefat td{border-radius:0}.wpr-ri-urls-table.widefat tr.wpr-ri-item-result td{border-top:1px solid #e2e5e9}.wpr-ri-urls-table.widefat tr.wpr-ri-item-result td.border-bottom{border-bottom:1px solid #e2e5e9}.wpr-ri-urls-table.widefat tr.wpr-global-score+tr.wpr-ri-item-result td:first-child{border-top-left-radius:5px}.wpr-ri-urls-table.widefat tr.wpr-global-score+tr.wpr-ri-item-result td:last-child{border-top-right-radius:5px}.wpr-ri-urls-table.widefat tbody>tr:last-child td{border-bottom:1px solid #e2e5e9}.wpr-ri-urls-table.widefat tbody>tr.wpr-ri-item-result:last-child td:first-child{border-bottom-left-radius:5px}.wpr-ri-urls-table.widefat tbody>tr.wpr-ri-item-result:last-child td:last-child{border-bottom-right-radius:5px}.wpr-ri-urls-table.widefat .details-section-td:last-child{border-left:1px solid #e2e5e9}.wpr-ri-urls-table.widefat .details-section-td:first-child{border-right:1px solid #e2e5e9}.wpr-ri-urls-table.widefat .wpr-ri-item-toggle.wpr-last-expanded{border-bottom-left-radius:0}.wpr-ri-urls-table.widefat .wpr-ri-item-actions.wpr-last-expanded{border-bottom-right-radius:0}.wpr-ri-urls-table.widefat .wpr-ri-item-toggle.wpr-last-collapsed{border-bottom-left-radius:5px}.wpr-ri-urls-table.widefat .wpr-ri-item-actions.wpr-last-collapsed{border-bottom-right-radius:5px}.wpr-ri-urls-table.widefat .details-section-td.wpr-last-expanded{border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-bottom:1px solid #e2e5e9}.wpr-ri-urls-table.widefat .details-section-td.wpr-last-collapsed{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:0}.wpr-ri-urls-table .wpr-percentage-indicator .wpr-percentage-circle{width:32px;height:32px;font-size:14.67px;border-width:1.33px;font-weight:600;line-height:0}.wpr-ri-urls-table .wpr-percentage-indicator .wpr-loading-img{width:32px;height:32px}.wpr-ri-urls-table .wpr-percentage-indicator .wpr-percentage-circle.wpr-centralize-100-score{text-indent:-1px}.wpr-ri-urls-table .wpr-ri-item{background:#f9fafb}.wpr-ri-urls-table .wpr-ri-item .wpr-ri-item-toggle-single:after{content:"";width:14px;height:14px;background:url("../img/ri-caret-right.svg") no-repeat center center;display:block}.wpr-ri-urls-table .wpr-ri-item--expanded .wpr-ri-item-toggle-single:after{background-image:url("../img/ri-caret-down.svg")}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score{background:#fff}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score td,.wpr-ri-urls-table .wpr-ri-item.wpr-global-score th{border:none}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score .wpr-ri-item-actions{min-height:60px;position:relative;display:block}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score .wpr-ri-item-toggle-all{content:"";width:14px;height:14px;background:url("../img/ri-caret-all-collapsed.svg") no-repeat center center;display:block}.wpr-ri-urls-table .wpr-ri-item.wpr-global-score .wpr-ri-item-toggle-all--expanded{background-image:url("../img/ri-caret-all-expanded.svg")}.wpr-ri-urls-table .wpr-ri-item-score{vertical-align:middle;padding:0 8px}.wpr-ri-urls-table .wpr-ri-item-title{font-size:14px;color:#121116;vertical-align:middle;padding-left:25px;width:65%}.wpr-ri-urls-table .wpr-ri-item-title a{display:block;vertical-align:middle;box-sizing:border-box}.wpr-ri-urls-table .wpr-ri-item-title a.wpr-btn-with-tool-tip .wpr-tooltip{left:0;top:100%;margin-top:4px}.wpr-ri-urls-table .wpr-ri-item-title a.wpr-btn-with-tool-tip .wpr-tooltip:before{top:-6px;left:17.6px}.wpr-ri-urls-table .wpr-ri-item-title a.wpr-btn-with-tool-tip:hover .wpr-tooltip{visibility:visible;opacity:1}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-title{display:inline-block}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-title .wpr-ri-title-truncate{max-width:260px;white-space:nowrap;overflow-x:clip;text-overflow:ellipsis;display:inline-block;line-height:100%;position:relative;text-decoration:underline}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-title .wpr-ri-title{text-decoration:underline}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-title:before{position:relative;content:"";top:4px;left:-16px;height:18px;display:inline-block;border-left:1px solid #d4d9dd}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-dot{color:#738191;display:inline-block;position:relative;margin:0 8px}.wpr-ri-urls-table .wpr-ri-item-title .wpr-ri-date{color:#738191;position:relative}.wpr-ri-urls-table .wpr-ri-item-actions{text-align:right;vertical-align:middle}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action{font-family:Roboto,Arial,sans-serif;display:inline-block;font-size:14px;font-weight:600;line-height:1.5;padding:0 14px;margin:8px 0;color:#121116}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:after{position:relative;content:"";top:4px;left:16px;height:18px;display:inline-block;border-left:1px solid #d4d9dd}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:first-child{margin-left:0;border-left:none}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:last-child:after{display:none}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action.wpr-confirm-delete:before{font-size:12px;top:0;margin-right:0}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:before{position:relative;top:2px;margin-right:6px}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action--disabled,.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:disabled{color:rgb(134.5094339623,150.0566037736,169.4905660377) !important;cursor:not-allowed;box-shadow:none}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action--disabled:focus,.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action:disabled:focus{transform:none;box-shadow:none}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action.wpr-icon-bold-refresh:before{font-size:15px}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action.wpr-icon-trash{width:8%}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-ri-action.wpr-icon-trash:before{font-size:14px}.wpr-ri-urls-table .wpr-ri-item-actions.wpr-btn-with-tool-tip .wpr-tooltip{left:0}.wpr-ri-urls-table .wpr-ri-item-actions.wpr-btn-with-tool-tip .wpr-tooltip:before{left:50%;transform:translateX(-50%)}.wpr-ri-urls-table .wpr-ri-item-actions .wpr-tooltip{width:280px}@media screen and (max-width: 600px){.wpr-ri-urls-table .wpr-ri-item-actions .wpr-tooltip{width:auto}}.wpr-ri-urls-table .wpr-ri-item-toggle{vertical-align:middle;padding-right:0}.wpr-ri-urls-table .wpr-ri-item-toggle-single,.wpr-ri-urls-table .wpr-ri-item-toggle-all{cursor:pointer}.wpr-ri-urls-table .wpr-ri-item-toggle-single.hide,.wpr-ri-urls-table .wpr-ri-item-toggle-all.hide{display:none}.wpr-ri-urls-table .icon-frame{width:14px;height:14px;margin:0 auto 0}.wpr-ri-urls-table .icon-frame img{width:100%;height:100%}.wpr-ri-urls-table .wpr-ri-details .details-section{max-height:0;transition:max-height .5s ease-in-out .2s,opacity .3s ease-in-out 0s;opacity:0;visibility:hidden}.wpr-ri-urls-table .wpr-ri-details .details-section-td{border-top:0}.wpr-ri-urls-table .wpr-ri-details--expanded .details-section{max-height:80px;opacity:1;transition:max-height .5s ease-in-out 0s,opacity .3s ease-in-out .2s;visibility:visible}.wpr-ri-urls-table .wpr-ri-details--expanded .details-section-td{border-top:1px solid #e2e5e9}.wpr-ri-urls-table .wpr-ri-details tr.wpr-ri-details--expanded:last-of-type .details-section-td:last-of-type{border-top:0}.wpr-ri-urls-table .details-section .report-link.wpr-ri-action--disabled,.wpr-ri-urls-table .details-section .report-link .wpr-ri-action--disabled{color:rgb(134.5094339623,150.0566037736,169.4905660377) !important;cursor:not-allowed;box-shadow:none}.wpr-ri-urls-table .details-section .report-link.wpr-ri-action--disabled:focus,.wpr-ri-urls-table .details-section .report-link .wpr-ri-action--disabled:focus{transform:none;box-shadow:none}.wpr-ri-add-section{margin:16px 0;display:flex;gap:8px}.wpr-ri-add-section .wpr-speed-radar-input{display:flex;width:80%;border-radius:4px;border:1px solid #e2e5e9;padding:6px 8px 6px 16px;height:50px}.wpr-ri-add-section .wpr-button{display:flex;text-align:center;justify-content:center;padding:16px;width:20%;height:50px;align-items:center;gap:8px;border-radius:4px;background:#2d1656;box-shadow:0 1px 3px 0 rgba(0,0,0,.2)}.wpr-ri-add-url-button{font-size:14px;font-style:normal;font-weight:600;line-height:normal;text-transform:uppercase}.wpr-ri-add-url-button.disabled{cursor:not-allowed;border-radius:4px;background:#a199b1;box-shadow:0 1px 3px 0 rgba(0,0,0,.2)}.wpr-ri-add-url-button.disabled:focus{transform:none;box-shadow:none}.wpr-ri-add-url-button .wpr-tooltip{font-size:14px;font-weight:normal;left:50%;transform:translateX(-50%);bottom:-40px;text-transform:none}.wpr-ri-add-url-button .wpr-tooltip:before{top:-6px;left:50%;transform:translateX(-50%)}.wpr-ri-report.wpr-btn-with-tool-tip .wpr-tooltip{transform:translateX(-32%);width:260px}.wpr-ri-report.wpr-btn-with-tool-tip .wpr-tooltip:before{left:50%}.wpr-ri-report.wpr-btn-with-tool-tip .wpr-tooltip .wpr-tooltip-content{text-align:center}.widefat .details-section-td{padding:0}.widefat .details-section-td p{margin:0}.details-section{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;width:100%}.details-section .details-header{grid-column:1;grid-row:1;padding:16px 0 12px 50px;display:flex;align-items:center;justify-content:flex-start}.details-section .details-header .details-label{font-family:"Roboto",sans-serif;font-weight:600;font-size:11px;color:#464f59;line-height:1.3}.details-section .details-header .metrics-header{display:flex;gap:32px;align-items:center}.details-section .details-header .metrics-header .metric-label{display:flex;gap:2px;align-items:center;width:32px;justify-content:flex-start}.details-section .details-header .metrics-header .metric-label p{font-family:"Roboto",sans-serif;font-weight:600;font-size:11px;color:#464f59;line-height:1.3}.details-section .details-header .metrics-header .metric-label .info-icon{width:12px;height:12px;flex-shrink:0;position:relative}.details-section .details-header .metrics-header .metric-label .info-icon img{width:100%;height:100%;display:block}.details-section .details-header .metrics-header .metric-label .info-icon .wpr-tooltip{top:-16px;left:20px;min-width:200px;max-width:230px}.details-section .details-header .metrics-header .metric-label .info-icon .wpr-tooltip:before{top:7px;left:-15px;border-top:8px solid rgba(0,0,0,0);border-bottom:8px solid rgba(0,0,0,0);border-right:8px solid #0e1428}.details-section .details-header .metrics-header .metric-label .info-icon:hover .wpr-tooltip{visibility:visible;opacity:1}.details-section .details-content{grid-column:1;grid-row:2;padding:0 0 16px 50px;display:flex;flex-direction:column;gap:8px}.details-section .details-content .detail-row{display:flex;align-items:center;justify-content:flex-start}.details-section .details-content .detail-row .row-right.blurred{filter:blur(2.667px)}.details-section .details-content .detail-row .row-right .metric-values{display:flex;gap:32px;align-items:center}.details-section .details-content .detail-row .row-right .metric-values .metric-value{display:flex;flex-direction:column;width:32px;align-items:flex-start;justify-content:center;position:relative}.details-section .details-content .detail-row .row-right .metric-values .metric-value p{font-family:"Roboto",sans-serif;font-weight:600;font-size:11px;line-height:1.3}.details-section .details-content .detail-row .row-right .metric-values .metric-value.ri-error p{color:#c01b1b}.details-section .details-content .detail-row .row-right .metric-values .metric-value.ri-warning p{color:#e9aa01}.details-section .details-content .detail-row .row-right .metric-values .metric-value.ri-success p{color:#2e8f44}.details-section .details-content .detail-row .row-right .metric-values .metric-value .wpr-tooltip{top:14px;left:-84px;min-width:200px;max-width:230px}.details-section .details-content .detail-row .row-right .metric-values .metric-value .wpr-tooltip:before{top:-6px;left:89px;border-left:8px solid rgba(0,0,0,0);border-right:8px solid rgba(0,0,0,0);border-bottom:8px solid #0e1428}.details-section .details-content .detail-row .row-right .metric-values .metric-value:hover .wpr-tooltip{visibility:visible;opacity:1}.details-section .details-content .detail-row .row-right .metric-values.blurred .metric-value p{filter:blur(3px);user-select:none;-webkit-user-select:none;-moz-user-select:none;pointer-events:none}.details-section .row-left{grid-column:2;grid-row:1/3;display:flex;gap:8px;align-items:center;padding:16px 50px 16px 0}.details-section .row-left.disabled{opacity:.5}.details-section .row-left .report-link{display:flex;gap:4px}.details-section .row-left .report-link a{font-family:"Roboto",sans-serif;font-weight:600;font-size:11px;color:#0c0f1f;line-height:1.3}.details-section .row-left .report-link .icon-frame{width:12px;height:12px;flex-shrink:0;background-color:currentColor;-webkit-mask-image:url("../img/ri-report-url.svg");mask-image:url("../img/ri-report-url.svg");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.wpr-recommendations{display:flex;flex-direction:column;gap:16px;padding:16px;background:#fff;border-radius:2px;width:290px}.wpr-recommendations__header{display:flex;align-items:center;justify-content:center;padding-bottom:9px;border-bottom:1px solid #e2e5e9;width:100%}.wpr-recommendations__title{flex:1 0 0;font-size:16px;font-weight:600;color:#121116;font-family:"Roboto",sans-serif;line-height:1.3}.wpr-recommendations__content{display:flex;flex-direction:column;gap:8px;width:100%;border-radius:4px}.wpr-recommendations__list{display:flex;flex-direction:column;gap:16px;width:100%}.wpr-recommendations__list .wpr-recommendation-item:nth-child(n+4){display:none}.wpr-recommendations__list .wpr-recommendation-item:nth-child(3){border-bottom:none}.wpr-recommendations__list.is-expanded .wpr-recommendation-item:nth-child(3){border-bottom:1px solid #e2e5e9;padding-bottom:16px}.wpr-recommendations__list .wpr-recommendation-item:last-child{border-bottom:none}.wpr-recommendations__loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px;background:#fff;border-radius:2px;text-align:center}.wpr-recommendations__loading:before{display:block;content:"";background:url("../img/orange-loading.svg") no-repeat center center;background-size:contain;width:22.857px;height:24px;aspect-ratio:20/21}.wpr-recommendations__loading-spinner{display:flex;align-items:center;justify-content:center}.wpr-recommendations__loading-text{font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#738191;margin:0}.wpr-recommendations__success{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding:8px 16px;background:#ebfaf5;border-left:4px solid #2e8f44;border-radius:0}.wpr-recommendations__success-title{font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;margin:0}.wpr-recommendations__success-message{font-size:0.875rem;line-height:1.2857142857;font-weight:400;color:#121116;margin:0}.wpr-recommendations__failed{display:flex;flex-direction:column;gap:8px;align-items:flex-start;justify-content:center;padding:8px 16px;background:#fbe4e4;border-left:4px solid #c01b1b;border-radius:0}.wpr-recommendations__failed-title{font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;margin:0}.wpr-recommendations__failed-message{font-size:0.875rem;line-height:1.2857142857;font-weight:400;color:#121116;margin:0}.wpr-recommendations__failed-link{display:inline-flex;align-items:center;gap:4px;font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;text-decoration:underline}.wpr-recommendations__failed-link:hover{color:#02707f}.wpr-recommendations__failed-link .wpr-icon-external-link{width:18px;height:18px}@keyframes wpr-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.wpr-recommendation-item{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding-bottom:16px;border-bottom:1px solid #e2e5e9;background:#fff;width:100%}.wpr-recommendation-item__inner{display:flex;flex-direction:column;align-items:flex-end;width:100%}.wpr-recommendation-item__wrapper{display:flex;flex-direction:column;gap:4px;align-items:flex-start;justify-content:center;width:100%}.wpr-recommendation-item__header{display:flex;flex-direction:column;gap:4px;align-items:flex-start;justify-content:center;width:100%}.wpr-recommendation-item__title-row{display:flex;gap:8px;align-items:center;width:100%;font-size:0.875rem;line-height:1.2857142857;font-weight:600}.wpr-recommendation-item__title{flex:1 0 0;color:#121116;margin:0}.wpr-recommendation-item__activate{flex-shrink:0;color:#f56f46;text-align:center;font-weight:600;background:none;border:none;padding:0;cursor:pointer;text-transform:uppercase;font-size:0.875rem;line-height:1.2857142857;transition:color .2s ease-out;-webkit-transition:color .2s ease-out;text-decoration:none}.wpr-recommendation-item__activate:hover{color:#ac2b15}.wpr-recommendation-item__impact{display:flex;gap:4px;align-items:center}.wpr-recommendation-item__impact-label{font-size:0.6875rem;line-height:1.2727272727;font-weight:400;color:#738191}.wpr-recommendation-item__impact-tags{display:flex;gap:6px;align-items:center}.wpr-recommendation-item__description{font-size:0.875rem;line-height:1.2857142857;font-weight:400;color:#121116;width:100%;margin:0}.wpr-recommendation-item__more-info{font-weight:600;text-decoration:underline;color:#121116;cursor:pointer}.wpr-recommendation-item__more-info:hover{color:#02707f}.wpr-impact-tag{display:flex;align-items:center;padding:2px 4px;background:#f2f3f6;border-radius:2px;font-size:0.6875rem;line-height:1.2727272727;font-weight:600;color:#738191;text-transform:uppercase}.wpr-recommendations__load-more{display:flex;flex-direction:column;align-items:center;padding:12px 16px;border:1px solid #d4d9dd;border-radius:4px;width:100%;overflow:hidden;background:#fff;cursor:pointer;transition:all .2s ease-out;-webkit-transition:all .2s ease-out}.wpr-recommendations__load-more:hover{background:#f9fafb;border-color:#738191}.wpr-recommendations__load-more-text{display:flex;gap:16px;align-items:center;overflow:hidden;font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;text-transform:uppercase}.wpr-recommendations__load-more span:nth-child(2){display:none}.wpr-recommendations__load-more.is-expanded span:first-child{display:none}.wpr-recommendations__load-more.is-expanded span:nth-child(2){display:flex}.wpr-optionHeader--cdn-driver{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:16px}.wpr-optionHeader__title-group{display:flex;flex:1;align-items:center;gap:12px}.wpr-title2--orange{color:#f56640;text-transform:capitalize;padding-right:0}.wpr-optionHeader .wpr-title2--orange{padding-right:0}.wpr-badge{display:inline-flex;align-items:center;padding:4px 8px;border-radius:2px;font-size:0.875rem;line-height:1.2857142857;font-weight:600;white-space:nowrap}.wpr-badge--grey{background:#f6f7f8;color:#738191}.wpr-badge--blue{background:#d4e6fc;color:#0d5ec3}.wpr-badge--new{background:#0d5ec3;color:#fff;padding:4px 2px;border-radius:4px;font-size:0.5625rem;line-height:1.3333333333;font-weight:600;text-transform:uppercase;letter-spacing:.02em;writing-mode:vertical-rl;transform:rotate(180deg);left:-11px;position:absolute;top:50%;translate:0 -50%}.wpr-cdn-tabs{display:flex;gap:8px;align-items:center;padding:8px;border:1px solid #e2e5e9;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,.1)}.wpr-cdn-tabs__tab{display:flex;align-items:center;padding:6px 8px;border:0;border-radius:2px;background:rgba(0,0,0,0);cursor:pointer;font-size:0.875rem;line-height:1.2857142857;font-family:"Roboto",sans-serif;color:#738191}.wpr-cdn-tabs__tab--active{background:#f9fafb;color:#121116;font-weight:600}.wpr-cdn-tabs__tab:hover:not(.wpr-cdn-tabs__tab--active){background:#f2f3f6}.wpr-cdn-tabs__tab:disabled{opacity:.5;cursor:not-allowed}.wpr-cdn-tabs__tab:disabled:hover{background:none;color:#738191;cursor:not-allowed}.wpr-cdn-tabs__tab-wrapper{position:relative;display:flex;align-items:center}.wpr-cdn-tabs__tooltip{position:absolute;top:9px;right:95px;transform:translateX(-50%);padding:8px 12px;background:#0c0f1f;border-radius:4px;color:#fff;font-size:0.875rem;line-height:1.2857142857;font-weight:400;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease;z-index:3}.wpr-cdn-tabs__tooltip::after{content:"";position:absolute;top:34%;right:-9px;transform:translateX(-50%);width:0;height:0;border-top:6px solid rgba(0,0,0,0);border-bottom:6px solid rgba(0,0,0,0);border-left:6px solid #0c0f1f}.wpr-cdn-tabs:hover .wpr-cdn-tabs__tooltip,.wpr-cdn-tabs:focus-within .wpr-cdn-tabs__tooltip,.wpr-cdn-tabs__tab-wrapper:hover .wpr-cdn-tabs__tooltip,.wpr-cdn-tabs__tab-wrapper:focus-within .wpr-cdn-tabs__tooltip{opacity:1;visibility:visible}.wpr-cdn-tabs.wpr-isHidden{display:none}.wpr-cdn-tabs__divider{width:1px;align-self:stretch;background:#e2e5e9}.wpr-sectionHeader--cdn{display:flex;align-items:center;justify-content:space-between;gap:24px}.wpr-sectionHeader--cdn .wpr-title1{flex:1}.wpr-cdn-status{display:flex;align-items:center;overflow:hidden;width:100%}.wpr-cdn-status.wpr-cdn-status-pronounced{gap:12px;padding:16px;background:#f9fafb;border:1px solid #e2e5e9;border-radius:4px;margin-top:16px}.wpr-cdn-indicator{flex:1}.wpr-cdn-indicator__status{display:flex;align-items:center;gap:8px}.wpr-cdn-indicator__info{display:flex;justify-content:space-between}.wpr-cdn-indicator__dot{width:8px;height:8px;border-radius:50%;background:#00a66b;flex-shrink:0}.wpr-cdn-indicator__text{font-size:0.875rem;line-height:1.7142857143;font-weight:700;color:#121116}.wpr-cdn-indicator__details{font-size:0.875rem;line-height:1.2857142857;color:#666;margin:0}.wpr-cdn-indicator .wpr-icon-orange-loader:before{width:15.238px;height:16px;aspect-ratio:20/21}.wpr-cdn-status--paused .wpr-cdn-indicator__dot{background:#e5a800}.wpr-cdn-status--paused .wpr-cdn-pause{opacity:.5}.wpr-cdn-status--long-details{align-items:flex-start;position:relative}.wpr-cdn-status--long-details .wpr-cdn-indicator{width:100%}.wpr-cdn-status--long-details .wpr-cdn-indicator__details{max-width:none}.wpr-cdn-status--long-details .wpr-cdn-pause{position:absolute;top:2px;right:0}.wpr-cdn-status--expired .wpr-cdn-pause{opacity:.5;pointer-events:none}.wpr-cdn-expired__notice{color:#0c0f1f;background:#fff7e1;border-left:4px solid #fed055;font-size:14px;margin-bottom:15px}.wpr-cdn-expired__notice-title{font-weight:600;font-size:14px}.wpr-cdn-expired__notice .wpr-notice-close{font-size:14px;color:#0c0f1f;font-weight:600}.wpr-cdn-pause{display:flex;align-items:center;gap:2px;border:0;border-radius:4px;cursor:pointer;flex-shrink:0;padding:0}.wpr-cdn-pause:disabled{opacity:.5;pointer-events:none}.wpr-cdn-pause__icon{display:inline-block;width:14px;height:14px;background-color:currentColor;-webkit-mask-image:url("../img/wpr-pause.svg");mask-image:url("../img/wpr-pause.svg");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.wpr-cdn-pause--paused .wpr-cdn-pause__icon{-webkit-mask-image:url("../img/wpr-resume.svg");mask-image:url("../img/wpr-resume.svg")}.wpr-cdn-pause__text{font-size:0.6875rem;line-height:1.2727272727;font-weight:600;color:#121116;white-space:nowrap}.wpr-cdn-pause__text--resume{display:none}.wpr-cdn-pause--paused .wpr-cdn-pause__text--pause{display:none}.wpr-cdn-pause--paused .wpr-cdn-pause__text--resume{display:inline}.wpr-cdn-pause--disabled{opacity:.5;pointer-events:none}.wpr-cdn-built-in{display:flex;flex-direction:column;gap:16px;width:100%;padding:16px;background:#f9fafb;border:1px solid #e2e5e9;border-radius:4px}.wpr-cdn-built-in__separator{width:100%;height:1px;background:#e2e5e9}.wpr-cdn-built-in--paused .wpr-cdn-add-page,.wpr-cdn-built-in--disabled .wpr-cdn-add-page{pointer-events:none}.wpr-cdn-built-in--paused .wpr-cdn-add-page .wpr-cdn-add-page__input-wrap,.wpr-cdn-built-in--disabled .wpr-cdn-add-page .wpr-cdn-add-page__input-wrap{border:1px solid #eceef1}.wpr-cdn-built-in--paused .wpr-cdn-add-page input[type=text]::placeholder,.wpr-cdn-built-in--disabled .wpr-cdn-add-page input[type=text]::placeholder{color:#b4b7ba}.wpr-cdn-built-in--paused .wpr-cdn-add-page__button,.wpr-cdn-built-in--disabled .wpr-cdn-add-page__button{background:#9186a7}.wpr-cdn-built-in .wpr-table-list__row{background:#fff}.wpr-cdn-add-page{display:flex;gap:8px;align-items:center}.wpr-cdn-add-page__input-wrap{display:flex;align-items:center;justify-content:space-between;flex:1;min-width:0;height:49.56px;padding:6px 6px 6px 16px;border:1px solid #e2e5e9;border-radius:4px;background:#fff}.wpr-cdn-add-page input[type=text]{flex:1;min-width:0;border:0;padding:0;background:rgba(0,0,0,0);font-size:0.875rem;line-height:1.2857142857;color:#121116;outline:none;box-shadow:none}.wpr-cdn-add-page input[type=text]:focus{box-shadow:none;outline:none}.wpr-cdn-add-page input[type=text]::placeholder{color:#72777c}.wpr-cdn-add-page__homepage{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#f9fafb;color:#050710;border:1px solid rgba(47,69,162,.1);border-radius:2px;cursor:pointer;font-size:0.875rem;line-height:1.2857142857;font-weight:600;white-space:nowrap;flex-shrink:0}.wpr-cdn-add-page__homepage:hover{background:rgb(233.7,237.25,240.8)}.wpr-cdn-add-page__homepage.wpr-isHidden{display:none}.wpr-cdn-add-page__icon{display:inline-block;width:16px;height:16px;background-color:currentColor;-webkit-mask-image:url("../img/wpr-add-homepage.svg");mask-image:url("../img/wpr-add-homepage.svg");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.wpr-cdn-add-page__button{display:flex;align-items:center;gap:8px;padding:14px;background:#2d1656;color:#fff;border:0;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:box-shadow .2s ease;cursor:pointer;font-size:0.875rem;line-height:1.2857142857;font-weight:600;white-space:nowrap}.wpr-cdn-add-page__button:hover,.wpr-cdn-add-page__button:focus-visible,.wpr-cdn-add-page__button:focus{background:#2d1656;color:#fff;box-shadow:0 6px 18px rgba(45,22,86,.25)}.wpr-cdn-add-page__button:active{background:#2d1656;color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.2)}.wpr-cdn-add-page__button [class^=wpr-icon-]{font-size:16px}.wpr-cdn-add-page__button-wrapper{position:relative;display:inline-flex}.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip{pointer-events:auto}.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip .wpr-cdn-add-page__button{cursor:not-allowed;opacity:.5;pointer-events:none}.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip .wpr-tooltip{bottom:-40px;top:auto;left:50%;transform:translateX(-50%);white-space:nowrap;font-size:14px;font-weight:normal;text-transform:none}.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip .wpr-tooltip.wpr-isHidden{display:none}.wpr-cdn-add-page__button-wrapper.wpr-btn-with-tool-tip .wpr-tooltip:before{top:auto;bottom:33px;left:50%;transform:translateX(-50%) rotate(180deg);border-bottom:none;border-top:8px solid #0e1428}.wpr-cdn-upsell__text{font-size:0.875rem;line-height:1.2857142857;color:#121116;margin:0}.wpr-cdn-upsell__link{font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#f56f46;text-decoration:underline;white-space:nowrap}.wpr-cdn-upsell__link:hover{color:#f56640}.wpr-cdn-purge{display:flex;align-items:center;justify-content:space-between;padding:16px;background:#f9fafb;border:1px solid #e2e5e9;border-radius:4px;margin-top:16px}.wpr-cdn-purge__content{display:flex;flex-direction:column;gap:16px;max-width:400px}.wpr-cdn-purge__title{font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;margin:0}.wpr-cdn-purge__description{font-size:0.875rem;line-height:1.2857142857;color:#666;margin:0}.wpr-cdn-purge__learn-more{display:flex;align-items:center;gap:8px;font-size:0.875rem;line-height:1.5714285714;font-weight:600;color:#121116;text-decoration:underline}.wpr-cdn-purge__learn-more:hover{color:#121116}.wpr-cdn-purge__info-icon{width:14px;height:14px;background-color:currentColor;-webkit-mask-image:url("../img/wpr-info-circle.svg");mask-image:url("../img/wpr-info-circle.svg");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;flex-shrink:0}.wpr-cdn-purge__button{display:inline-flex;align-items:center;gap:8px;padding:16px;border:1px solid #e2e5e9;border-radius:4px;box-shadow:0 1px 1.5px rgba(0,0,0,.1);background:#fff;color:#121116;font-size:0.875rem;line-height:1.2857142857;font-weight:600;text-decoration:none;cursor:pointer;text-transform:uppercase;white-space:nowrap;flex-shrink:0}.wpr-cdn-purge__button:hover{background:rgb(239.82,242.35,244.88);color:#121116;text-decoration:none}.wpr-cdn-purge__button-icon{display:inline-block;width:16px;height:16px;background-color:currentColor;-webkit-mask-image:url("../img/wpr-purge.svg");mask-image:url("../img/wpr-purge.svg");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.wpr-cdn-exclusions .wpr-field-description-label{color:#0c0f1f;font-weight:600}.rocketcdn.wpr-isHidden,.your-own-cdn.wpr-isHidden,.your-own-cdn.wpr-fieldsContainer-fieldset.wpr-isHidden{display:none}.your-own-cdn.wpr-fieldsContainer-fieldset{display:flex;flex-direction:column;gap:16px}.your-own-cdn .wpr-field-description-label{color:#0c0f1f}.your-own-cdn .wpr-field-description{margin-top:4px}.your-own-cdn .wpr-field{padding:0;border:0}.your-own-cdn .wpr-multiple{gap:16px;margin-top:6px}.your-own-cdn .wpr-multiple .wpr-text{top:0}.your-own-cdn .wpr-multiple .wpr-text input[type=text]{height:50px;border-radius:4px;border:1px solid #e2e5e9;background:#fff;margin-top:0}.your-own-cdn .wpr-multiple .wpr-select::after{content:"";position:absolute;top:50%;right:12px;width:10px;height:6px;transform:translateY(-50%);background-image:url("../img/ri-caret-down.svg");background-size:contain;background-repeat:no-repeat;pointer-events:none}.your-own-cdn .wpr-multiple select{height:50px;border-radius:4px;border:1px solid #e2e5e9;background:#fff;font-weight:bold;appearance:none;-webkit-appearance:none;padding-right:32px}.your-own-cdn .wpr-multiple .wpr-multiple-close::after{content:url(../img/wpr-close.svg)}.your-own-cdn .wpr-button{padding:16px;font-size:14px;font-weight:600;line-height:normal;margin:9px 0}.wpr-cdn-disabled,.wpr-cdn-disabled a{opacity:.5;pointer-events:none}.wpr-table-list{display:flex;flex-direction:column;width:100%}.wpr-table-list__row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px;background:#f9fafb;border:1px solid #e2e5e9;font-size:0.875rem;line-height:1.2857142857;color:#121116}.wpr-table-list__row:first-child{border-radius:4px 4px 0 0}.wpr-table-list__row:last-child{border-radius:0 0 4px 4px}.wpr-table-list__row:only-child{border-radius:4px}.wpr-table-list__row+.wpr-table-list__row{border-top:0}.wpr-table-list__cell{flex:1;min-width:0}.wpr-table-list__cell a{font-size:0.875rem;line-height:1.2857142857;color:#121116;text-decoration:underline}.wpr-table-list__cell a:hover{color:#121116}.wpr-table-list__actions{display:flex;align-items:center;flex-shrink:0}.wpr-table-list__retest{display:flex;align-items:center;gap:4px;padding:0 16px;border:0;border-right:1px solid #d4d9dd;background:none;cursor:pointer;font-size:0.875rem;line-height:1.2857142857;font-weight:600;color:#121116;white-space:nowrap}.wpr-table-list__retest:hover{color:#72777c}.wpr-table-list__retest .dashicons{width:14px;height:14px;font-size:14px}.wpr-table-list__delete{display:flex;align-items:center;justify-content:center;padding-left:16px;background:none;border:0;cursor:pointer;color:#121116}.wpr-table-list__delete:hover{color:#d33f49}.wpr-table-list__delete .dashicons{width:14px;height:14px;font-size:14px}.wpr-checkbox{position:relative;padding-left:32px}.wpr-checkbox label{user-select:none}.wpr-checkbox [type=checkbox]:not(:checked),.wpr-checkbox [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-checkbox [type=checkbox]:not(:checked)+label:before,.wpr-checkbox [type=checkbox]:checked+label:before{content:"";position:absolute;left:0;top:4px;width:14px;height:14px;border:2px solid #444;border-radius:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after,.wpr-checkbox [type=checkbox]:checked+label:after{content:"";position:absolute;top:5px;left:2px;color:#fff;font-family:"wpr-icomoon";speak:none;font-size:0.875rem;line-height:1.2857142857;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after{opacity:0;transform:scale(2)}.wpr-checkbox [type=checkbox]:checked+label:after{opacity:1;transform:scale(1)}.wpr-checkbox [type=checkbox]:checked+label:before{background:#19073b;border-color:#19073b}.wpr-checkbox [type=checkbox]:checked:focus+label:before{background:#665090;border:2px dotted #665090}.wpr-checkbox [type=checkbox]:focus+label:before{border:2px dotted #444}.wpr-checkbox-warning{color:#d33f49;margin-left:16px}.wpr-checkbox-warning::before{margin-right:8px}.wpr-isDisabled .wpr-checkbox [type=checkbox]:not(:checked)+label:before,.wpr-isDisabled .wpr-checkbox [type=checkbox]:checked+label:before{border:2px solid #9d9e9e}.wpr-radio{position:relative;padding-left:88px}.wpr-radio label{user-select:none;font-weight:bold}.wpr-radio [type=checkbox]:not(:checked),.wpr-radio [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before,.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{content:"";position:absolute}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before{left:0;width:52px;height:22px;background:#fff;border-radius:12px;border:1px solid #444;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{width:18px;height:18px;border-radius:100%;background:#444;top:3px;left:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:disabled+label:after,.wpr-radio [type=checkbox]:disabled+label:after{background:#e0e4e9}.wpr-radio [type=checkbox]:disabled+label:before,.wpr-radio [type=checkbox]:disabled+label:before{border:1px solid #e0e4e9}.wpr-radio [type=checkbox]:checked+label:before{border-color:#1eadbf}.wpr-radio [type=checkbox]:checked+label:after{background:#1eadbf;left:33px}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{position:absolute;left:4px;width:52px;text-transform:uppercase;letter-spacing:-0.01em;font-weight:bold;font-size:0.6875rem;line-height:2.1818181818;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{content:attr(data-l10n-inactive);left:27px;color:#666}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{content:attr(data-l10n-active);color:#02707f}.wpr-radio--reverse{padding-right:72px;padding-left:0}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:before,.wpr-radio--reverse [type=checkbox]:checked+label:before{right:0;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:after,.wpr-radio--reverse [type=checkbox]:checked+label:after{right:33px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label:after{right:3px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui:after{right:-2px;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{right:-25px;left:inherit}.wpr-radio [type=checkbox]:not(:checked):focus+label:before{border:1px dashed #444}.wpr-radio [type=checkbox]:checked:focus+label:before{border:1px dashed #1eadbf}.wpr-radio--tips [type=checkbox]:checked+label:before{border-color:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label:after{background:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label .wpr-radio-ui:after{color:#00a66b}.wpr-radio--tips [type=checkbox]:checked:focus+label:before{border:1px dashed #3ece9d}.wpr-select{position:relative}.wpr-select select{margin:0;padding:0 8px;height:36px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;box-shadow:none;border-radius:0;letter-spacing:.011em}.wpr-select select:focus{outline:none;border-color:#444;box-shadow:none}.wpr-select select:disabled{background-image:none}.wpr-select label{font-weight:bold;margin-left:8px}.wpr-textarea{margin-top:8px}.wpr-textarea textarea{padding:8px;width:100%;height:100px;font-family:Monaco;color:#121116;background:#fff;border:2px solid rgb(194.1698113208,202.0188679245,211.8301886792);border-radius:3px;font-size:0.8125rem;line-height:1.2307692308;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-textarea textarea:focus{outline:none;border-color:#444;box-shadow:none}.wpr-textarea+.wpr-field-description{color:#00a66b}.wpr-text label{color:#666}.wpr-text input[type=text],.wpr-text input[type=number]{margin-top:8px;padding:0 8px;width:100%;height:32px;color:#121116;background:#fff;border:2px solid rgb(194.1698113208,202.0188679245,211.8301886792);border-radius:3px;font-family:Monaco;font-size:0.75rem;line-height:1.3333333333;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-text input[type=text]:focus,.wpr-text input[type=number]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-text input[type=text].wpr-isError,.wpr-text input[type=number].wpr-isError{border-color:#d33f49}.wpr-text input[type=number]{width:80px}.wpr-text--number label{margin-right:8px}.wpr-upload input[type=file]{display:block;width:252px;margin:8px 8px 8px 0;padding:8px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;font-size:0.6875rem;line-height:1.4545454545}.wpr-upload input[type=file]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-multiple{display:flex;align-items:center;flex-wrap:wrap}@media(max-width: 783px){.wpr-multiple{align-items:center;flex-direction:column}}.wpr-multiple .wpr-text{flex:1 1 auto;position:relative;top:-2px}@media(max-width: 783px){.wpr-multiple .wpr-text{width:100%}}.wpr-multiple .wpr-button{margin-left:16px;width:auto;min-width:inherit;padding-right:30px}@media(max-width: 783px){.wpr-multiple .wpr-button{margin-left:0}}.wpr-multiple input[type=text]{flex-grow:2}.wpr-multiple select{height:30px}.wpr-multiple-default{margin-right:30px}.wpr-multiple-list{display:none;padding:8px 0;margin:16px 0 0;background:#f2f3f6;border-radius:2px}.wpr-multiple-list li{margin-bottom:0;padding:4px 16px;font-size:0.8125rem;line-height:1.2307692308;font-family:Monaco}.wpr-multiple-list li span{display:inline-block;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-multiple-close{position:relative;top:3px;font-size:1rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-multiple-close:focus{outline:none}.wpr-multiple-close:hover,.wpr-multiple-close:focus{color:#d33f49}.wpr-multiple-close:hover+span,.wpr-multiple-close:focus+span{color:#d33f49}.wpr-multiple-select .wpr-list{border:2px solid #c2cad4;background-color:#fff;border-radius:5px;padding:10px;margin:8px 0}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_ads:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_plugins:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_themes:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header{display:flex;justify-content:space-between}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-list-header-arrow{width:15px;cursor:pointer;display:flex;transform:rotate(180deg)}.wpr-multiple-select .wpr-list .wpr-list-header h3{font-weight:500;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-multiple-select .wpr-list .wpr-list-body{display:none}.wpr-multiple-select .wpr-list .wpr-list-body li{padding-left:30px}.wpr-multiple-select .wpr-list .wpr-list-body li .wpr-checkbox img{width:15px}.wpr-multiple-select .wpr-list.open .wpr-list-body{display:block}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox label{color:#72777c}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox input[checked=checked]+label{color:#121116}.wpr-multiple-select .wpr-list.open .wpr-list-header{border-bottom:1px solid #c2cad4;margin-bottom:10px;padding-bottom:5px}.wpr-multiple-select .wpr-list.open .wpr-list-header-arrow{transform:rotate(0deg)}.wpr-field--categorizedmultiselect .wpr-list{padding-right:15px;padding-left:15px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{padding-bottom:9px;margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{max-height:32px;cursor:pointer}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header{max-height:32px;cursor:pointer}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header .wpr-badge-counter{display:inline-block;vertical-align:top;box-sizing:border-box;margin:2px 0 0px 2px;padding:0 7px;min-width:18px;height:18px;border-radius:9px;background-color:#eb714a;color:#fff;font-size:11px;font-weight:bold;line-height:1.6;text-align:center}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header .wpr-list-header-data{display:flex;align-items:center;justify-content:space-between;gap:8px}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header .wpr-list-header-data img{width:16px;height:16px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]+label:before{top:4px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]:checked+label:after{top:4px}.wpr-field--categorizedmultiselect .wpr-list-header .wpr-checkbox{padding-left:29px}.wpr-field--categorizedmultiselect .wpr-list-body{display:block;max-height:250px;overflow-y:auto}.wpr-field--categorizedmultiselect .wpr-list-body ul{margin:0}.wpr-field--categorizedmultiselect .wpr-list-body ul li{margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox{padding-left:25px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox label{color:#121116 !important;font-weight:normal}.wpr-field--categorizedmultiselect .dashicons{color:#72777c}.wpr-field--categorizedmultiselect .wpr-multiple-select-title{cursor:pointer;font-weight:bold}.wpr-field--categorizedmultiselect .wpr-subsection{padding-left:30px}.wpr-field--categorizedmultiselect .wpr-select-all{border-bottom:2px solid #e9e9e9;width:150px;padding-bottom:10px}[data-parent=delay_js].wpr-field--children{margin-left:32px;padding-left:0}@media only screen and (min-width: 782px){.wpr-field--categorizedmultiselect{padding-right:80px}}.custom-select{position:relative;width:60%;max-width:100%;color:#000;margin:0 auto !important}.select-button{width:100%;background-color:#fff;padding:.65rem;border:1px solid #caced1;border-radius:1rem;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.selected-value{text-align:center;flex:1}.custom-select-arrow{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:6px solid #000;transition:transform ease-in-out .3s}.select-dropdown{position:absolute;z-index:1;list-style:none;width:100%;border:1px solid #caced1;padding:10px 0;margin-top:10px;max-height:200px;overflow-y:auto;opacity:0;visibility:hidden;border-radius:16px;background-color:#fff;transition:all .5s ease;transform:translateY(-20px);box-shadow:0px 24px 40px rgba(0,0,0,.15);font-weight:normal}.select-dropdown:focus-within{box-shadow:0 10px 25px rgba(94,108,233,.6)}.select-dropdown li{position:relative;cursor:pointer;display:flex;gap:1rem;align-items:center;justify-content:center}.select-dropdown li:last-child{margin-bottom:0}.select-dropdown li label{width:100%;padding:8px 10px;cursor:pointer;display:flex;gap:1rem;align-items:center;text-align:center;flex:1;justify-content:center}.select-dropdown::-webkit-scrollbar{width:7px}.select-dropdown::-webkit-scrollbar-track{background:#f1f1f1;border-radius:25px}.select-dropdown::-webkit-scrollbar-thumb{background:#ccc;border-radius:25px}.select-dropdown li:hover,.select-dropdown li.active,.select-dropdown input:checked~label{background-color:#f2f2f2}.select-dropdown input:focus~label{background-color:#dfdfdf}.select-dropdown input[type=radio]{position:absolute;left:0;opacity:0}.custom-select.active .custom-select-arrow{transform:rotate(180deg)}.custom-select.active .select-dropdown{opacity:1;visibility:visible;transform:translateY(0)} \ No newline at end of file diff --git a/web/app/plugins/wp-rocket/assets/img/mcp.svg b/web/app/plugins/wp-rocket/assets/img/mcp.svg new file mode 100644 index 000000000..fa5f74f72 --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/mcp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/web/app/plugins/wp-rocket/assets/img/rocketcdn-bandwidth.svg b/web/app/plugins/wp-rocket/assets/img/rocketcdn-bandwidth.svg new file mode 100644 index 000000000..f66fbb1d2 --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/rocketcdn-bandwidth.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/web/app/plugins/wp-rocket/assets/img/rocketcdn-check.svg b/web/app/plugins/wp-rocket/assets/img/rocketcdn-check.svg new file mode 100644 index 000000000..a0531af1a --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/rocketcdn-check.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/web/app/plugins/wp-rocket/assets/img/rocketcdn-location.svg b/web/app/plugins/wp-rocket/assets/img/rocketcdn-location.svg new file mode 100644 index 000000000..8110e2c14 --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/rocketcdn-location.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/web/app/plugins/wp-rocket/assets/img/rocketcdn-speed.svg b/web/app/plugins/wp-rocket/assets/img/rocketcdn-speed.svg new file mode 100644 index 000000000..1a65a706c --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/rocketcdn-speed.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/web/app/plugins/wp-rocket/assets/img/wpr-add-homepage.svg b/web/app/plugins/wp-rocket/assets/img/wpr-add-homepage.svg new file mode 100644 index 000000000..e59577b38 --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/wpr-add-homepage.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/web/app/plugins/wp-rocket/assets/img/wpr-info-circle.svg b/web/app/plugins/wp-rocket/assets/img/wpr-info-circle.svg new file mode 100644 index 000000000..85feb5557 --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/wpr-info-circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/app/plugins/wp-rocket/assets/img/wpr-pause.svg b/web/app/plugins/wp-rocket/assets/img/wpr-pause.svg new file mode 100644 index 000000000..ef1cc1bd8 --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/wpr-pause.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/web/app/plugins/wp-rocket/assets/img/wpr-purge.svg b/web/app/plugins/wp-rocket/assets/img/wpr-purge.svg new file mode 100644 index 000000000..51e37a9d9 --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/wpr-purge.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/web/app/plugins/wp-rocket/assets/img/wpr-resume.svg b/web/app/plugins/wp-rocket/assets/img/wpr-resume.svg new file mode 100644 index 000000000..dc992f742 --- /dev/null +++ b/web/app/plugins/wp-rocket/assets/img/wpr-resume.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/web/app/plugins/wp-rocket/assets/js/lazyload-css.min.js b/web/app/plugins/wp-rocket/assets/js/lazyload-css.min.js index 65a8a9858..890aeda6b 100644 --- a/web/app/plugins/wp-rocket/assets/js/lazyload-css.min.js +++ b/web/app/plugins/wp-rocket/assets/js/lazyload-css.min.js @@ -1 +1 @@ -!function o(n,c,a){function u(t,e){if(!c[t]){if(!n[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(s)return s(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}r=c[t]={exports:{}},n[t][0].call(r.exports,function(e){return u(n[t][1][e]||e)},r,r.exports,o,n,c,a)}return c[t].exports}for(var s="function"==typeof require&&require,e=0;e{var e=t.selector;document.querySelectorAll(e).forEach(e=>{e.setAttribute("data-rocket-lazy-bg-"+t.hash,"excluded")})}),document.querySelector("#wpr-lazyload-bg-container"));var o=rocket_lazyload_css_data.threshold||300;const u=new IntersectionObserver(e=>{e.forEach(t=>{t.isIntersecting&&c.filter(e=>t.target.matches(e.selector)).map(t=>{var e;t&&((e=document.createElement("style")).textContent=t.style,a.insertAdjacentElement("afterend",e),t.elements.forEach(e=>{u.unobserve(e),e.setAttribute("data-rocket-lazy-bg-"+t.hash,"loaded")}))})})},{rootMargin:o+"px"});function n(){0<(0{try{document.querySelectorAll(t.selector).forEach(e=>{"loaded"!==e.getAttribute("data-rocket-lazy-bg-"+t.hash)&&"excluded"!==e.getAttribute("data-rocket-lazy-bg-"+t.hash)&&(u.observe(e),(t.elements||=[]).push(e))})}catch(e){console.error(e)}})}n(),function(){const r=window.MutationObserver;return function(e,t){if(e&&1===e.nodeType)return(t=new r(t)).observe(e,{attributes:!0,childList:!0,subtree:!0}),t}}()(document.querySelector("body"),n)}},{}]},{},[1]); \ No newline at end of file +!function o(n,a,c){function l(t,e){if(!a[t]){if(!n[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(u)return u(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}r=a[t]={exports:{}},n[t][0].call(r.exports,function(e){return l(n[t][1][e]||e)},r,r.exports,o,n,a,c)}return a[t].exports}for(var u="function"==typeof require&&require,e=0;e{var e=t.selector;document.querySelectorAll(e).forEach(e=>{e.setAttribute("data-rocket-lazy-bg-"+t.hash,"excluded")})}),document.querySelector("#wpr-lazyload-bg-container"));var a=rocket_lazyload_css_data.threshold||300;let n=new IntersectionObserver(e=>{e.forEach(t=>{t.isIntersecting&&r.filter(e=>t.target.matches(e.selector)).map(t=>{var e;t&&((e=document.createElement("style")).textContent=t.style,o.insertAdjacentElement("afterend",e),t.elements.forEach(e=>{n.unobserve(e),e.setAttribute("data-rocket-lazy-bg-"+t.hash,"loaded")}))})})},{rootMargin:a+"px"});function c(){0<(0{try{document.querySelectorAll(t.selector).forEach(e=>{"loaded"!==e.getAttribute("data-rocket-lazy-bg-"+t.hash)&&"excluded"!==e.getAttribute("data-rocket-lazy-bg-"+t.hash)&&(n.observe(e),(t.elements||=[]).push(e))})}catch(e){console.error(e)}})}c(),(()=>{let r=window.MutationObserver;return function(e,t){if(e&&1===e.nodeType)return(t=new r(t)).observe(e,{attributes:!0,childList:!0,subtree:!0}),t}})()(document.querySelector("body"),c)}},{}]},{},[1]); \ No newline at end of file diff --git a/web/app/plugins/wp-rocket/assets/js/wpr-admin.js b/web/app/plugins/wp-rocket/assets/js/wpr-admin.js index b370bb299..dd04025b9 100644 --- a/web/app/plugins/wp-rocket/assets/js/wpr-admin.js +++ b/web/app/plugins/wp-rocket/assets/js/wpr-admin.js @@ -746,7 +746,7 @@ document.addEventListener('DOMContentLoaded', function () { handleMetricActionTracking('expand', 'all', 'global_expand'); }); - // Track "See Report" clicks in Rocket Insights. + // Track "See GTmetrix Report" clicks in Rocket Insights. $(document).on('click', '.wpr-ri-report', function (e) { // Only track if link is not disabled and mixpanel is available. if ($(this).hasClass('wpr-ri-action--disabled')) { @@ -829,6 +829,7 @@ require("../lib/greensock/TimelineLite.min.js"); require("../lib/greensock/easing/EasePack.min.js"); require("../lib/greensock/plugins/CSSPlugin.min.js"); require("../lib/greensock/plugins/ScrollToPlugin.min.js"); +require("../global/cdn-driver.js"); require("../global/pageManager.js"); require("../global/main.js"); require("../global/fields.js"); @@ -836,10 +837,11 @@ require("../global/beacon.js"); require("../global/ajax.js"); require("../global/recommendations-widget.js"); require("../global/rocketcdn.js"); +require("../global/rocketcdn-subscription-polling.js"); require("../global/countdown.js"); require("../global/mixpanel.js"); -},{"../global/ajax.js":2,"../global/beacon.js":4,"../global/countdown.js":5,"../global/fields.js":6,"../global/main.js":7,"../global/mixpanel.js":8,"../global/pageManager.js":9,"../global/recommendations-widget.js":10,"../global/rocketcdn.js":11,"../lib/greensock/TimelineLite.min.js":12,"../lib/greensock/TweenLite.min.js":13,"../lib/greensock/easing/EasePack.min.js":14,"../lib/greensock/plugins/CSSPlugin.min.js":15,"../lib/greensock/plugins/ScrollToPlugin.min.js":16}],4:[function(require,module,exports){ +},{"../global/ajax.js":2,"../global/beacon.js":4,"../global/cdn-driver.js":5,"../global/countdown.js":6,"../global/fields.js":7,"../global/main.js":8,"../global/mixpanel.js":9,"../global/pageManager.js":10,"../global/recommendations-widget.js":11,"../global/rocketcdn-subscription-polling.js":12,"../global/rocketcdn.js":13,"../lib/greensock/TimelineLite.min.js":14,"../lib/greensock/TweenLite.min.js":15,"../lib/greensock/easing/EasePack.min.js":16,"../lib/greensock/plugins/CSSPlugin.min.js":17,"../lib/greensock/plugins/ScrollToPlugin.min.js":18}],4:[function(require,module,exports){ "use strict"; var $ = jQuery; @@ -850,7 +852,7 @@ $(document).ready(function () { */ var $help = $('.wpr-infoAction--help'); $help.on('click', function (e) { - var ids = $(this).data('beacon-id'); + var ids = $(this).attr('data-beacon-id'); var button = $(this).data('wpr_track_button') || 'Beacon Help'; var context = $(this).data('wpr_track_context') || 'Settings'; @@ -877,7 +879,7 @@ $(document).ready(function () { } } $('.wpr-ri-report').on('click', function () { - wprTrackHelpButton('rocket insights see report', 'performance summary'); + wprTrackHelpButton('rocket insights see gtmetrix report', 'performance summary'); }); // MixPanel tracking function @@ -911,6 +913,637 @@ $(document).ready(function () { },{}],5:[function(require,module,exports){ "use strict"; +(document => { + 'use strict'; + + function notifyCdnStateChange() { + document.dispatchEvent(new CustomEvent('wpr-cdn-state-change')); + } + document.addEventListener('DOMContentLoaded', () => { + initCdnDriverTabs(); + initCdnPauseToggle(); + initAddHomepage(); + initAddPage(); + initDeletePage(); + updateSubmitButtonStateOnSubscriptionLoading(); + }); + const addHomeButton = document.querySelector('#wpr_add_page_component .wpr-cdn-add-page__homepage'); + + /** + * Updates the status indicator component with new HTML content. + * + * @param {string} html - The HTML string to replace the status indicator with. + * @returns {void} + */ + function updateStatusIndicatorComponent(html) { + const statusIndicator = document.querySelector('.wpr-cdn-built-in .wpr-cdn-status'); + if (statusIndicator && html) { + statusIndicator.outerHTML = html; + } + } + + /** + * Toggles the disabled state of CDN-related UI elements based on the active driver. + * + * For the 'rocketcdn' driver, targets both shared CDN and RocketCDN sections. + * For all other drivers, only targets the shared CDN section and always enables it. + * + * @param {string} driver The CDN driver identifier (e.g. 'rocketcdn'). + * @param {boolean} disabled Whether to disable the CDN UI elements. + */ + function updateRocketCDNElementsState(driver, disabled) { + if ('rocketcdn' === driver) { + if (!disabled) { + document.querySelectorAll('.cdn-shared-section, .rocketcdn-shared-section').forEach(el => { + el.classList.remove('wpr-cdn-disabled'); + }); + return; + } + document.querySelectorAll('.cdn-shared-section, .rocketcdn-shared-section').forEach(el => { + el.classList.add('wpr-cdn-disabled'); + }); + return; + } + document.querySelectorAll('.cdn-shared-section').forEach(el => { + el.classList.remove('wpr-cdn-disabled'); + }); + } + + /** + * Shows or hides the limit-reached tooltip on the ADD PAGE button. + * + * @param {boolean} limitReached Whether the free-tier page limit has been reached. + * @returns {void} + */ + function updateTooltipState(limitReached) { + const tooltip = document.querySelector('.wpr-cdn-add-page__button-wrapper .wpr-tooltip'); + if (tooltip) { + tooltip.classList.toggle('wpr-isHidden', !limitReached); + } + } + + /** Pending banner auto-expand timer ID, or null when no timer is active. */ + let autoExpandTimer = null; + + /** + * Updates the RocketCDN CTA visibility and expansion state. + * + * When the page count reaches the limit, expansion is deferred by 15 seconds so the + * user has time to react before the upsell banner opens. Any in-flight timer is + * cancelled whenever this function is called (e.g. on page deletion), ensuring stale + * expands never fire after the state has changed. + * + * @param {number} count Current number of free-tier pages. + * @param {number} limit Free-tier page limit. + * @returns {void} + */ + function updateRocketCtaState(count, limit) { + const cta = document.getElementById('wpr-rocketcdn-cta'); + const resellerBanner = document.getElementById('wpr-rocketcdn-reseller-limit-cta'); + if (!cta && !resellerBanner) { + return; + } + + // Cancel any pending expand — state has changed. + if (autoExpandTimer !== null) { + clearTimeout(autoExpandTimer); + autoExpandTimer = null; + } + const atLimit = count >= limit; + if (cta) { + cta.classList.toggle('wpr-isHidden', count === 0); + } + if (resellerBanner) { + resellerBanner.classList.toggle('wpr-isHidden', !atLimit); + } + if (cta) { + if (atLimit) { + // Always show "Nice work!" text immediately. + cta.classList.add('wpr-rocketcdn-cta---max-limit'); + if (!cta.classList.contains('wpr-rocketcdn-cta--expanded')) { + // Banner is collapsed — keep it collapsed for 15s then expand. + cta.classList.add('wpr-rocketcdn-cta--collapsed'); + cta.classList.remove('wpr-rocketcdn-cta--expanded'); + autoExpandTimer = setTimeout(() => { + autoExpandTimer = null; + cta.classList.remove('wpr-rocketcdn-cta--collapsed'); + cta.classList.add('wpr-rocketcdn-cta--expanded'); + document.dispatchEvent(new CustomEvent('rocketCDNBannerAutoExpanded')); + }, 15000); + } + } else { + cta.classList.toggle('wpr-rocketcdn-cta--collapsed', count > 0); + cta.classList.remove('wpr-rocketcdn-cta--expanded', 'wpr-rocketcdn-cta---max-limit'); + } + } + } + + // Cancel any pending banner expand when the user navigates away from the CDN tab. + document.addEventListener('rocketJsAfterPageNavigation', e => { + if (e.detail.pageId !== 'page_cdn' && autoExpandTimer !== null) { + clearTimeout(autoExpandTimer); + autoExpandTimer = null; + } + }); + + /** + * Listens for custom 'rocketJsAfterPageNavigation' event to update the state of the submit button + * based on the presence of a CDN subscription loading indicator on the CDN settings page. + * + * Disables the submit button when navigating to the CDN page if a subscription loading indicator is present, + * and re-enables it when navigating away from the CDN page. + */ + function updateSubmitButtonStateOnSubscriptionLoading() { + document.addEventListener('rocketJsAfterPageNavigation', e => { + // Bail out if submit button is not visible for the current page. + if (getComputedStyle(e.detail.submitButton).display === 'none') { + return; + } + const classes = ['.wpr-icon-orange-loader', '.wpr-cdn-built-in--disabled']; + const allPresent = classes.every(cls => document.querySelector(cls) !== null); + + // Re-enable submit button when page is not cdn and bail out. + if (e.detail.pageId !== 'page_cdn') { + if (e.detail.submitButton.classList.contains('wpr-cdn-disabled')) { + e.detail.submitButton.classList.remove('wpr-cdn-disabled'); + } + return; + } + + // Bail out if no cdn subscription loader is present. + if (!allPresent) { + return; + } + + // Disable submit button when on cdn page and subscription loader is present. + e.detail.submitButton.classList.add('wpr-cdn-disabled'); + }); + } + + /** + * Sets the subscription loading state on the CDN UI. + * + * Disables the built-in CDN section, purge and exclude sections. + */ + function setSubscriptionLoadingState() { + const builtIn = document.querySelector('.wpr-cdn-built-in'); + if (builtIn) { + builtIn.classList.add('wpr-cdn-built-in--disabled'); + } + + // Disable purge CDN cache section. + const purgeSection = document.querySelector('.wpr-cdn-purge.rocketcdn'); + if (purgeSection) { + purgeSection.classList.add('wpr-cdn-disabled'); + } + + // Disable exclusion fields and section header. + document.querySelectorAll('.wpr-cdn-exclusions').forEach(el => { + el.classList.add('wpr-cdn-disabled'); + const textarea = el.querySelector('textarea'); + if (textarea) { + textarea.disabled = true; + } + }); + const submitButton = document.querySelector('#wpr-options-submit'); + if (submitButton) { + submitButton.classList.add('wpr-cdn-disabled'); + } + + // Create polling mechanism to send a request every 10 seconds to get the subscription status and once the subscription is active, we will refresh the page for now. + document.dispatchEvent(new CustomEvent('rocketCDNSubscriptionLoading', {})); + } + + /** + * Initializes CDN driver tab switching behavior. + * + * Toggles visibility of CDN driver sections (built-in-cdn / your-own-cdn) + * based on which tab is clicked. + */ + function initCdnDriverTabs() { + const tabs = document.querySelectorAll('.wpr-cdn-tabs__tab'); + const driverSections = document.querySelectorAll('.rocketcdn, .your-own-cdn'); + if (!tabs.length) { + return; + } + + /** + * Toggles visibility of CDN driver sections using the hidden utility class. + * + * @param {string} activeDriver Active CDN driver slug. + */ + function toggleDriverSections(activeDriver) { + driverSections.forEach(section => { + section.classList.toggle('wpr-isHidden', !section.classList.contains(activeDriver)); + }); + } + + /** + * Updates all .rocketcdn-driver-js spans to reflect the active driver label. + * The label is read from the active tab's data-title attribute, preserving + * the original capitalisation set by the PHP translation. + * + * @param {HTMLElement} activeTab The currently active tab element. + */ + function updateDriverLabel(activeTab) { + const label = activeTab.getAttribute('data-title'); + if (!label) { + return; + } + document.querySelectorAll('.rocketcdn-driver-js').forEach(span => { + // Preserve the original text-transform (uppercase spans stay uppercase via CSS). + span.textContent = label; + }); + } + + /** + * Updates the "Need Help?" link href for the CDN Exclusions section + * to point to the correct docs article for the active driver. + * + * @param {string} driver Active CDN driver slug ('rocketcdn' or 'your-own-cdn'). + */ + function updateExcludeCdnHelpUrl(driver) { + const link = document.querySelector('.exclude-cdn-help-js'); + if (!link) { + return; + } + const isRocketCdn = 'rocketcdn' === driver; + const url = isRocketCdn ? link.dataset.rocketcdnUrl : link.dataset.otherCdnUrl; + const id = isRocketCdn ? link.dataset.rocketcdnId : link.dataset.otherCdnId; + if (url) { + link.href = url; + } + if (id) { + link.dataset.beaconId = id; + } + } + tabs.forEach(tab => { + tab.addEventListener('click', () => { + const driver = tab.getAttribute('data-cdn-driver'); + if (!driver) { + return; + } + + // Update active tab. + tabs.forEach(t => t.classList.remove('wpr-cdn-tabs__tab--active')); + tab.classList.add('wpr-cdn-tabs__tab--active'); + + // Toggle sections: show matching driver, hide others. + toggleDriverSections(driver); + + // Update dynamic driver label spans. + updateDriverLabel(tab); + updateExcludeCdnHelpUrl(driver); + notifyCdnStateChange(); + + // Initial value of the hidden input is set on page load by PHP based on the active driver. + const cdnTypeInput = document.getElementById('cdn_type'); + let currentValue = cdnTypeInput.value; + + // Persist the active driver selection. + const driverValue = 'your-own-cdn' === driver ? 'byocdn' : 'rocketcdn'; + window.wp.apiFetch({ + path: '/wp-rocket/v1/rocketcdn/driver', + method: 'POST', + data: { + driver: driverValue + } + }).then(response => { + // Updated hidden input value on success. + cdnTypeInput.value = driverValue; + + // Update the state of RocketCDN specific elements based on the selected driver and response from the server. + updateRocketCDNElementsState(driverValue, response.disable_rocket_cdn_elements); + }).catch(() => { + // Revert active tab and sections on failure. + cdnTypeInput.value = currentValue; + }); + }); + }); + + // Set initial state from active tab, fallback to rocketcdn. + const activeTab = document.querySelector('.wpr-cdn-tabs__tab--active'); + const activeDriver = activeTab ? activeTab.getAttribute('data-cdn-driver') : 'rocketcdn'; + if (activeDriver) { + toggleDriverSections(activeDriver); + notifyCdnStateChange(); + } + + // Set initial label from the active tab. + if (activeTab) { + updateDriverLabel(activeTab); + updateExcludeCdnHelpUrl(activeDriver); + } + } + + /** + * Initializes the CDN pause/resume toggle buttons. + * + * Toggles between "PAUSE CDN" and "RESUME CDN" states, + * swapping the icon via a CSS modifier class. + */ + function initCdnPauseToggle() { + document.addEventListener('click', event => { + const button = event.target.closest('.wpr-cdn-pause'); + if (!button) { + return; + } + const isPaused = button.classList.toggle('wpr-cdn-pause--paused'); + button.setAttribute('aria-pressed', isPaused ? 'true' : 'false'); + button.disabled = true; + const statusDot = document.querySelector('.rocketcdn .wpr-cdn-indicator__dot'); + if (statusDot) { + statusDot.className = 'wpr-icon-orange-loader'; + } + window.wp.apiFetch({ + path: '/wp-rocket/v1/rocketcdn/pause', + method: 'POST', + data: { + paused: isPaused ? 0 : 1 + } + }).then(() => { + // Remove the loader. + if (statusDot) { + statusDot.className = 'wpr-cdn-indicator__dot'; + } + button.disabled = false; + + // Simulate real click to prepare checkbox state for form submission. + document.querySelector('label[for="cdn"]').click(); + updateRocketCDNElementsState('rocketcdn', isPaused); + const statusContainer = button.closest('.wpr-cdn-status'); + if (!statusContainer) { + return; + } + statusContainer.classList.toggle('wpr-cdn-status--paused', isPaused); + statusContainer.classList.toggle('wpr-cdn-status--long-details', isPaused && '1' === statusContainer.dataset.longDetails); + const builtIn = statusContainer.closest('.wpr-cdn-built-in'); + if (builtIn) { + builtIn.classList.toggle('wpr-cdn-built-in--paused', isPaused); + } + notifyCdnStateChange(); + const textKey = isPaused ? 'pausedText' : 'activeText'; + const statusText = statusContainer.querySelector('.wpr-cdn-indicator__text'); + if (statusText && statusContainer.dataset[textKey]) { + statusText.textContent = statusContainer.dataset[textKey]; + } + const detailsKey = isPaused ? 'pausedDetails' : 'activeDetails'; + const detailsEl = statusContainer.querySelector('.wpr-cdn-indicator__details'); + if (detailsEl && statusContainer.dataset[detailsKey]) { + detailsEl.textContent = statusContainer.dataset[detailsKey]; + } + }).catch(() => { + // Revert toggle on failure. + button.classList.toggle('wpr-cdn-pause--paused', !isPaused); + button.setAttribute('aria-pressed', !isPaused ? 'true' : 'false'); + button.disabled = false; + + // Remove the loader. + if (statusDot) { + statusDot.className = 'wpr-cdn-indicator__dot'; + } + }); + }); + } + /** + * Initializes the "ADD HOMEPAGE" button. + * + * Sends a POST request to the RocketCDN REST endpoint to add + * the site homepage as a free-tier CDN page. + */ + function initAddHomepage() { + document.addEventListener('click', event => { + const button = event.target.closest('#wpr_add_page_component .wpr-cdn-add-page__homepage'); + if (!button) { + return; + } + button.disabled = true; + const builtIn = document.querySelector('.wpr-cdn-built-in'); + if (builtIn) { + builtIn.classList.add('wpr-cdn-built-in--disabled'); + } + window.wp.apiFetch({ + path: '/wp-rocket/v1/rocketcdn/pages/homepage', + method: 'POST' + }).then(response => { + button.classList.add('wpr-isHidden'); + updateRocketCtaState(response.count, response.limit); + if (builtIn) { + builtIn.classList.remove('wpr-cdn-built-in--disabled'); + } + if (response.items_html) { + const existing = document.querySelector('.wpr-cdn-built-in .wpr-table-list'); + if (existing) { + existing.remove(); + } + const addPageSection = document.querySelector('.wpr-cdn-add-page'); + if (addPageSection) { + addPageSection.insertAdjacentHTML('beforebegin', response.items_html); + } + } + + // Track banner view when first page is added and banner becomes visible. + if (1 === response.count) { + document.dispatchEvent(new CustomEvent('rocketCDNBannerFirstVisible')); + } + + // Set subscription loading state when first page is added. + if (response.is_subscription_creation_loading) { + setSubscriptionLoadingState(); + } + + // Update status indicator component. + updateStatusIndicatorComponent(response.status_indicator_html); + }).catch(() => { + button.disabled = false; + if (builtIn) { + builtIn.classList.remove('wpr-cdn-built-in--disabled'); + } + }); + }); + } + /** + * Initializes the "ADD PAGE" input and button. + * + * Sends a POST request to the RocketCDN REST endpoint to add + * a page URL to the free-tier CDN page list. + */ + function initAddPage() { + const input = document.getElementById('wpr_cdn_add_page_input'); + const button = document.querySelector('.wpr-cdn-add-page__button'); + if (!input || !button) { + return; + } + function isValidUrl(input) { + try { + const url = new URL(input); + return url.hostname.includes('.') && url.hostname.split('.').pop().length > 0; + } catch { + return false; + } + } + function submitPage() { + const url = input.value.trim(); + if (!isValidUrl(url)) { + alert('Please enter a valid URL'); + return; + } + + // Prevent duplicate request while request is in flight. + input.disabled = true; + button.disabled = true; + const builtIn = document.querySelector('.wpr-cdn-built-in'); + if (builtIn) { + builtIn.classList.add('wpr-cdn-built-in--disabled'); + } + window.wp.apiFetch({ + path: '/wp-rocket/v1/rocketcdn/pages', + method: 'POST', + data: { + url + } + }).then(response => { + input.value = ''; + input.disabled = false; + button.disabled = false; + addHomeButton.classList.add('wpr-isHidden'); + updateRocketCtaState(response.count, response.limit); + if (builtIn) { + builtIn.classList.remove('wpr-cdn-built-in--disabled'); + } + + // Update page list with response. + if (response.items_html) { + const existing = document.querySelector('.wpr-cdn-built-in .wpr-table-list'); + if (existing) { + existing.remove(); + } + const addPageSection = document.querySelector('.wpr-cdn-add-page'); + if (addPageSection) { + addPageSection.insertAdjacentHTML('beforebegin', response.items_html); + } + } + + // Track banner view when first page is added and banner becomes visible. + if (1 === response.count) { + document.dispatchEvent(new CustomEvent('rocketCDNBannerFirstVisible')); + } + if (response.limit === response.count) { + // Disable input and button when page limit is reached. + document.querySelector('.wpr-cdn-built-in').classList.add('wpr-cdn-built-in--disabled'); + const addPageWrapper = document.querySelector('.wpr-cdn-add-page__button-wrapper'); + if (addPageWrapper) { + addPageWrapper.classList.add('wpr-btn-with-tool-tip'); + } + const addPageBtn = document.querySelector('.wpr-cdn-add-page__button'); + if (addPageBtn) { + addPageBtn.disabled = true; + } + updateTooltipState(true); + } + + // Set subscription loading state when first page is added. + if (response.is_subscription_creation_loading) { + setSubscriptionLoadingState(); + } + + // Update status indicator component. + updateStatusIndicatorComponent(response.status_indicator_html); + }).catch(() => { + input.disabled = false; + button.disabled = false; + if (builtIn) { + builtIn.classList.remove('wpr-cdn-built-in--disabled'); + } + }); + } + button.addEventListener('click', submitPage); + input.addEventListener('keydown', e => { + if ('Enter' === e.key) { + e.preventDefault(); + submitPage(); + } + }); + } + + /** + * Initializes delete buttons for CDN page rows. + * + * Uses event delegation on the built-in CDN container to handle + * clicks on dynamically added delete buttons. + */ + function initDeletePage() { + const container = document.querySelector('#wpr_add_page_component'); + if (!container) { + return; + } + container.parentElement.addEventListener('click', e => { + const button = e.target.closest('.wpr-table-list__delete'); + if (!button) { + return; + } + const id = button.dataset.id; + if (!id) { + return; + } + button.disabled = true; + window.wp.apiFetch({ + path: `/wp-rocket/v1/rocketcdn/pages/${id}`, + method: 'DELETE' + }).then(response => { + updateRocketCtaState(response.count, response.limit); + if (response.items_html) { + const existing = container.parentElement.querySelector('.wpr-cdn-built-in .wpr-table-list'); + if (existing) { + existing.remove(); + } + const addPageSection = container.parentElement.querySelector('.wpr-cdn-add-page'); + if (addPageSection) { + addPageSection.insertAdjacentHTML('beforebegin', response.items_html); + } + } + + // Show re-add HOMEPAGE button when all pages are deleted. + if (0 === response.count) { + // Remove table list component. + document.querySelector('.wpr-cdn-built-in .wpr-table-list').remove(); + const homepageBtn = container.querySelector('.wpr-cdn-add-page__homepage'); + if (homepageBtn) { + homepageBtn.classList.remove('wpr-isHidden'); + homepageBtn.disabled = false; + } + } + if (response.limit > response.count) { + // Re-enable input and button when page limit is not reached. + document.querySelector('.wpr-cdn-built-in').classList.remove('wpr-cdn-built-in--disabled'); + const addPageWrapper = document.querySelector('.wpr-cdn-add-page__button-wrapper'); + if (addPageWrapper) { + addPageWrapper.classList.remove('wpr-btn-with-tool-tip'); + } + const addPageBtn = document.querySelector('.wpr-cdn-add-page__button'); + if (addPageBtn) { + addPageBtn.disabled = false; + } + updateTooltipState(false); + + // Track auto-collapse when deletion drops count just below the limit. + if (response.count === response.limit - 1) { + document.dispatchEvent(new CustomEvent('rocketCDNBannerAutoCollapsed')); + } + } + + // Update status indicator component. + updateStatusIndicatorComponent(response.status_indicator_html); + }).catch(() => { + button.disabled = false; + }); + }); + } +})(document); + +},{}],6:[function(require,module,exports){ +"use strict"; + function getTimeRemaining(endtime) { const start = Date.now(); const total = endtime * 1000 - start; @@ -1000,7 +1633,7 @@ if (typeof rocket_ajax_data.notice_end_time !== 'undefined') { rucssTimer('rocket-rucss-timer', rocket_ajax_data.notice_end_time); } -},{}],6:[function(require,module,exports){ +},{}],7:[function(require,module,exports){ "use strict"; require("../custom/custom-select.js"); @@ -1196,9 +1829,7 @@ $(document).ready(function () { */ $(document).on('click', '.wpr-multiple-close', function (e) { e.preventDefault(); - $(this).parent().slideUp('slow', function () { - $(this).remove(); - }); + $(this).parent().remove(); }); $('.wpr-button--addMulti').on('click', function (e) { e.preventDefault(); @@ -1372,7 +2003,7 @@ $(document).ready(function () { }); }); -},{"../custom/custom-select.js":1}],7:[function(require,module,exports){ +},{"../custom/custom-select.js":1}],8:[function(require,module,exports){ "use strict"; var $ = jQuery; @@ -1725,9 +2356,38 @@ $(document).ready(function () { } } }); + + // Track CTA clicks for Rocket Insights in the settings saved notice. + $(document).on('click', '#rocket_ri_new_test_save_settings_link', function () { + // Track directly with Mixpanel + if (typeof mixpanel === 'undefined' || !mixpanel.track) { + return; + } + + // Check if user has opted in + if (typeof rocket_mixpanel_data === 'undefined' || !rocket_mixpanel_data.optin_enabled || rocket_mixpanel_data.optin_enabled === '0') { + return; + } + + // Identify user if available + if (rocket_mixpanel_data.user_id && typeof mixpanel.identify === 'function') { + mixpanel.identify(rocket_mixpanel_data.user_id); + } + + // Track the Button Clicked event + mixpanel.track('Rocket Insights CTA click from settings notice', { + 'button': 'CTA on save settings notice', + 'source': 'Settings Saved Notice', + 'plugin': rocket_mixpanel_data.plugin, + 'brand': rocket_mixpanel_data.brand, + 'application': rocket_mixpanel_data.app, + 'context': rocket_mixpanel_data.context, + 'path': rocket_mixpanel_data.path + }); + }); }); -},{}],8:[function(require,module,exports){ +},{}],9:[function(require,module,exports){ "use strict"; function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } @@ -1735,7 +2395,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } class RocketMixpanel { constructor(config) { - _defineProperty(this, "trackedTabs", ['dashboard', 'rocket_insights']); + _defineProperty(this, "trackedTabs", ['dashboard', 'rocket_insights', 'page_cdn', 'file_optimization', 'media', 'preload', 'advanced_cache', 'database', 'heartbeat', 'addons', 'imagify', 'tutorials', 'plugins', 'tools']); this.config = config; } @@ -1860,7 +2520,7 @@ class RocketMixpanel { } RocketMixpanel.run(); -},{}],9:[function(require,module,exports){ +},{}],10:[function(require,module,exports){ "use strict"; document.addEventListener('DOMContentLoaded', function () { @@ -1941,6 +2601,9 @@ function PageManager(aElem) { localStorage.setItem('wpr-hash', ''); }; } + document.addEventListener('wpr-cdn-state-change', function () { + refThis.updateSubmitDisabledState(); + }); } /* @@ -1995,23 +2658,46 @@ PageManager.prototype.change = function () { this.$submitButton.value = this.buttonText; this.$content.classList.add('isNotFull'); const pagesWithoutSubmit = ['dashboard', 'addons', 'database', 'tools', 'addons', 'imagify', 'tutorials', 'plugins']; + const pagesWithoutSidebarToggle = ['dashboard', 'imagify', 'page_cdn']; // Exception for dashboard if (this.pageId == "dashboard") { this.$sidebar.style.display = 'none'; - this.$tips.style.display = 'none'; this.$content.classList.remove('isNotFull'); } if (this.pageId == "imagify") { this.$sidebar.style.display = 'none'; + } + if (pagesWithoutSidebarToggle.includes(this.pageId)) { this.$tips.style.display = 'none'; } if (pagesWithoutSubmit.includes(this.pageId)) { this.$submitButton.style.display = 'none'; } + this.updateSubmitDisabledState(); + + // Dispatch custom event after page navigation for other scripts to hook into. + document.dispatchEvent(new CustomEvent('rocketJsAfterPageNavigation', { + detail: { + pageId: this.pageId, + submitButton: this.$submitButton + } + })); +}; + +/* +* Update submit button disabled state +*/ +PageManager.prototype.updateSubmitDisabledState = function () { + if (!this.$submitButton || 'none' === this.$submitButton.style.display) { + return; + } + var isCdnPage = 'page_cdn' === this.pageId; + var pausedRocketCdnBlock = document.querySelector('.wpr-Page#page_cdn .wpr-notice.wpr-ri-notice.wpr-cdn-expired__notice'); + this.$submitButton.disabled = isCdnPage && !!pausedRocketCdnBlock; }; -},{}],10:[function(require,module,exports){ +},{}],11:[function(require,module,exports){ "use strict"; /** @@ -2079,7 +2765,81 @@ $(document).ready(function () { }); }); -},{}],11:[function(require,module,exports){ +},{}],12:[function(require,module,exports){ +"use strict"; + +(document => { + 'use strict'; + + /** + * Polls the RocketCDN subscription endpoint until is_loading becomes false. + */ + class RocketCDNSubscriptionPoller { + constructor() { + this.path = '/wp-rocket/v1/rocketcdn/subscription'; + this.pollInterval = 10000; // 10 seconds. + this.maxRetries = 60; // 10 minutes total. + this.timerId = null; + this.retryCount = 0; + document.addEventListener('rocketCDNSubscriptionLoading', () => this.start()); + + // Re-trigger polling after page refresh. + const classes = ['.wpr-icon-orange-loader', '.wpr-cdn-built-in--disabled']; + const allPresent = classes.every(cls => document.querySelector(cls) !== null); + if (allPresent) { + this.start(); + } + } + + /** + * Starts polling. + */ + start() { + if (this.timerId) { + return; + } + this.retryCount = 0; + this.poll(); + } + + /** + * Stops polling. + */ + stop() { + if (this.timerId) { + clearTimeout(this.timerId); + this.timerId = null; + } + } + + /** + * Performs a single poll and schedules the next one if still loading. + */ + poll() { + if (this.retryCount >= this.maxRetries) { + this.stop(); + return; + } + this.retryCount++; + window.wp.apiFetch({ + path: this.path, + method: 'GET' + }).then(response => { + if (!response || !response.is_loading) { + this.stop(); + window.location.reload(); + return; + } + this.timerId = setTimeout(() => this.poll(), this.pollInterval); + }).catch(() => { + this.timerId = setTimeout(() => this.poll(), this.pollInterval); + }); + } + } + new RocketCDNSubscriptionPoller(); +})(document); + +},{}],13:[function(require,module,exports){ "use strict"; /*eslint-env es6, browser*/ @@ -2087,6 +2847,17 @@ $(document).ready(function () { ((document, window) => { 'use strict'; + const BANNER_STATE = { + OPENED: false, + // Big CTA - opened state + COLLAPSED: true // Small CTA - collapsed state + }; + + // Register early so we catch the wpr-cdn-state-change event. + document.addEventListener('wpr-cdn-state-change', trackCDNModeSelection); + document.addEventListener('rocketCDNBannerAutoExpanded', () => trackRocketCDNUpsellBannerExpanded('auto_limit_reached')); + document.addEventListener('rocketCDNBannerAutoCollapsed', () => trackRocketCDNUpsellBannerCollapsed('auto_limit_released')); + document.addEventListener('rocketCDNBannerFirstVisible', () => trackRocketCDNUpsellBannerViewed(BANNER_STATE.COLLAPSED)); document.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('.wpr-rocketcdn-open').forEach(el => { el.addEventListener('click', e => { @@ -2100,11 +2871,11 @@ $(document).ready(function () { MicroModal.init({ disableScroll: true }); + maybeOpenModalFromURL(); // Only auto-open modal if there's no direct button URL if (!window.rocketcdnButtonUrl || window.rocketcdnButtonUrl === '') { maybeOpenModal(); - maybeOpenModalFromURL(); const iframe = document.getElementById('rocketcdn-iframe'); const loader = document.getElementById('wpr-rocketcdn-modal-loader'); if (iframe && loader) { @@ -2123,26 +2894,15 @@ $(document).ready(function () { function isOnCDNTab() { return window.location.hash === '#page_cdn'; } - - /** - * Tracks when a visible RocketCDN upsell banner is viewed. - * Only tracks once per page session. - */ - let bannerViewTracked = false; function maybeTrackBannerView() { - if (bannerViewTracked || !isOnCDNTab()) { - return; - } const smallCTA = document.querySelector('#wpr-rocketcdn-cta-small'); const bigCTA = document.querySelector('#wpr-rocketcdn-cta'); // Only track if one of the banners is visible. if (bigCTA && !bigCTA.classList.contains('wpr-isHidden')) { - trackRocketCDNUpsellBannerViewed(); - bannerViewTracked = true; + trackRocketCDNUpsellBannerViewed(BANNER_STATE.OPENED); } else if (smallCTA && !smallCTA.classList.contains('wpr-isHidden')) { - trackRocketCDNUpsellBannerViewed(); - bannerViewTracked = true; + trackRocketCDNUpsellBannerViewed(BANNER_STATE.COLLAPSED); } } window.addEventListener('load', () => { @@ -2151,6 +2911,39 @@ $(document).ready(function () { smallCTA = document.querySelector('#wpr-rocketcdn-cta-small'), bigCTA = document.querySelector('#wpr-rocketcdn-cta'), inputToggle = document.querySelector('.wpr-rocketcdn-toggle--input'); + const ctaToggle = document.querySelectorAll('.wpr-rocketcdn-cta-toggle'); + + /** + * Toggles RocketCDN CTA internal collapsed/expanded state. + * + * @return {void} + */ + function toggleBigCTAState() { + if (!bigCTA || !ctaToggle.length) { + return; + } + const isCollapsed = bigCTA.classList.toggle('wpr-rocketcdn-cta--collapsed'); + bigCTA.classList.toggle('wpr-rocketcdn-cta--expanded', !isCollapsed); + ctaToggle.forEach(el => { + el.setAttribute('aria-expanded', isCollapsed ? 'false' : 'true'); + }); + if (!isCollapsed) { + trackRocketCDNUpsellBannerExpanded('manual'); + } else { + trackRocketCDNUpsellBannerCollapsed(); + } + } + if (ctaToggle.length && bigCTA) { + ctaToggle.forEach(el => { + el.addEventListener('click', toggleBigCTAState); + el.addEventListener('keydown', event => { + if ('Enter' === event.key || ' ' === event.key) { + event.preventDefault(); + toggleBigCTAState(); + } + }); + }); + } // Track banner view on page load if banner is visible and user is on CDN tab. maybeTrackBannerView(); @@ -2158,6 +2951,7 @@ $(document).ready(function () { // Track banner view when user navigates to CDN tab. window.addEventListener('hashchange', () => { maybeTrackBannerView(); + trackCDNModeSelection(); }); // Prices selectors for toggling visibility based on the billing cycle toggle state. @@ -2173,50 +2967,23 @@ $(document).ready(function () { period: document.querySelectorAll('.wpr-rocketcdn-pricing--billing-period--yearly') } }; - if (null !== openCTA && null !== smallCTA && null !== bigCTA) { - openCTA.addEventListener('click', e => { - e.preventDefault(); - smallCTA.classList.add('wpr-isHidden'); - bigCTA.classList.remove('wpr-isHidden'); - // Track upsell banner view only if on CDN tab. - if (isOnCDNTab() && !bannerViewTracked) { - trackRocketCDNUpsellBannerViewed(); - bannerViewTracked = true; + // Display the correct prices on page based on billing cycle toggle state. + if (inputToggle) { + inputToggle.addEventListener('change', function () { + const isYearly = this.checked; + if (isYearly) { + Object.values(prices.monthly).forEach(list => list.forEach(el => el.classList.add('wpr-isHidden'))); + Object.values(prices.yearly).forEach(list => list.forEach(el => el.classList.remove('wpr-isHidden'))); + } else { + Object.values(prices.monthly).forEach(list => list.forEach(el => el.classList.remove('wpr-isHidden'))); + Object.values(prices.yearly).forEach(list => list.forEach(el => el.classList.add('wpr-isHidden'))); } - sendHTTPRequest(getPostData('big')); - }); - } - if (null !== closeCTA && null !== smallCTA && null !== bigCTA) { - closeCTA.addEventListener('click', e => { - e.preventDefault(); - smallCTA.classList.remove('wpr-isHidden'); - bigCTA.classList.add('wpr-isHidden'); - sendHTTPRequest(getPostData('small')); + + // Update the button URL with the correct is_monthly parameter. + updateButtonUrlBillingCycle(isYearly); }); } - function getPostData(status) { - let postData = ''; - postData += 'action=toggle_rocketcdn_cta'; - postData += '&status=' + status; - postData += '&nonce=' + rocket_ajax_data.nonce; - return postData; - } - - // Display the correct prices on page based on billing cycle toggle state. - inputToggle.addEventListener('change', function () { - const isYearly = this.checked; - if (isYearly) { - Object.values(prices.monthly).forEach(list => list.forEach(el => el.classList.add('wpr-isHidden'))); - Object.values(prices.yearly).forEach(list => list.forEach(el => el.classList.remove('wpr-isHidden'))); - } else { - Object.values(prices.monthly).forEach(list => list.forEach(el => el.classList.remove('wpr-isHidden'))); - Object.values(prices.yearly).forEach(list => list.forEach(el => el.classList.add('wpr-isHidden'))); - } - - // Update the button URL with the correct is_monthly parameter. - updateButtonUrlBillingCycle(isYearly); - }); // Track RocketCDN activation failed CTA click const activationCTA = document.querySelector('#wpr-rocketcdn-activation-cta'); @@ -2239,21 +3006,30 @@ $(document).ready(function () { disableCDN(e.data, iframeURL); validateTokenAndCNAME(e.data); }; + function openRocketCDNModal() { + const rocketcdnIframe = document.getElementById('rocketcdn-iframe'); + if (!rocketcdnIframe || !rocketcdnIframe.dataset || !rocketcdnIframe.dataset.src || rocketcdnIframe.dataset.src === rocketcdnIframe.src) { + return; + } + rocketcdnIframe.src = rocketcdnIframe.dataset.src; + MicroModal.show('wpr-rocketcdn-modal'); + } function checkButtonUrlAndOpen(isCTA) { + let iframeVisit = !window.rocketcdnButtonUrl; // Track CTA click if this is the pricing CTA button. if (isCTA) { - trackRocketCDNUpsellCTAClicked(); + trackRocketCDNUpsellCTAClicked(iframeVisit); } // Check if button URL was injected by PHP - if (window.rocketcdnButtonUrl && window.rocketcdnButtonUrl !== '') { + if (!iframeVisit) { // Small delay to ensure Mixpanel event is sent before navigation setTimeout(function () { window.location.href = window.rocketcdnButtonUrl; }, 100); } else { // Show iframe modal as usual - MicroModal.show('wpr-rocketcdn-modal'); + openRocketCDNModal(); } } @@ -2277,7 +3053,7 @@ $(document).ready(function () { if (request.readyState === XMLHttpRequest.DONE && 200 === request.status) { let responseTxt = JSON.parse(request.responseText); if (true === responseTxt.success) { - MicroModal.show('wpr-rocketcdn-modal'); + openRocketCDNModal(); } } }; @@ -2287,7 +3063,7 @@ $(document).ready(function () { if (urlParams.has('rocketcdn_open_iframe') && '1' === urlParams.get('rocketcdn_open_iframe')) { // Set hash to page_cdn to show CDN tab behind modal window.location.hash = '#page_cdn'; - MicroModal.show('wpr-rocketcdn-modal'); + openRocketCDNModal(); // Clean up the URL to prevent re-triggering on refresh urlParams.delete('rocketcdn_open_iframe'); @@ -2426,6 +3202,43 @@ $(document).ready(function () { const request = sendHTTPRequest(postData); } + /** + * Tracks CDN mode selection with Mixpanel. + */ + function trackCDNModeSelection() { + if (!isOnCDNTab()) { + return; + } + const activeTab = document.querySelector('.wpr-cdn-tabs__tab--active'); + if (!activeTab) { + return; + } + const cdnMode = activeTab.getAttribute('data-cdn-mode'); + if (!cdnMode) { + return; + } + if (typeof mixpanel === 'undefined' || !mixpanel.track) { + return; + } + + // Check if user has opted in + if (typeof rocket_mixpanel_data === 'undefined' || !rocket_mixpanel_data.optin_enabled || rocket_mixpanel_data.optin_enabled === '0') { + return; + } + + // Identify user if available + if (rocket_mixpanel_data.user_id && typeof mixpanel.identify === 'function') { + mixpanel.identify(rocket_mixpanel_data.user_id); + } + mixpanel.track('RocketCDN Mode', { + context: rocket_mixpanel_data.context, + plugin: rocket_mixpanel_data.plugin, + brand: rocket_mixpanel_data.brand, + application: rocket_mixpanel_data.app, + cdn_mode: cdnMode + }); + } + /** * Tracks RocketCDN activation failed CTA click with Mixpanel. */ @@ -2493,20 +3306,60 @@ $(document).ready(function () { /** * Tracks RocketCDN upsell banner view with Mixpanel. + * + * @param {boolean} [is_collapsed=false] Whether the small banner variant is displayed, Sends `collapsed` when true, otherwise `opened`. */ - function trackRocketCDNUpsellBannerViewed() { - trackRocketCDNUpsellMixpanelEvent('RocketCDN Upsell Banner Viewed'); + function trackRocketCDNUpsellBannerViewed(is_collapsed = false) { + if (!isOnCDNTab()) { + return; + } + const hash = window.location.hash; + const basePath = typeof rocket_mixpanel_data !== 'undefined' && rocket_mixpanel_data.path ? rocket_mixpanel_data.path : ''; + trackRocketCDNUpsellMixpanelEvent('RocketCDN Upsell Banner Viewed', { + state: is_collapsed ? 'collapsed' : 'opened', + page_name: hash, + path: basePath + hash + }); + } + + /** + * Tracks RocketCDN upsell banner expanded with Mixpanel. + * + * @param {string} trigger 'manual' by default. + */ + function trackRocketCDNUpsellBannerExpanded(trigger) { + trackRocketCDNUpsellMixpanelEvent('RocketCDN Upsell Banner Expanded', { + location: window.location.hash, + trigger: trigger + }); + } + + /** + * Tracks RocketCDN upsell banner collapsed with Mixpanel. + * + * @param {string} [trigger='manual'] 'manual' when user clicks toggle, 'auto_limit_released' when a page deletion drops count below limit. + */ + function trackRocketCDNUpsellBannerCollapsed(trigger = 'manual') { + trackRocketCDNUpsellMixpanelEvent('RocketCDN Upsell Banner Collapsed', { + location: window.location.hash, + trigger: trigger + }); } /** * Tracks RocketCDN upsell CTA click with Mixpanel. */ - function trackRocketCDNUpsellCTAClicked() { - trackRocketCDNUpsellMixpanelEvent('RocketCDN Upsell CTA Clicked'); + function trackRocketCDNUpsellCTAClicked(iframeVisit = false) { + const tableList = document.querySelector('.wpr-cdn-built-in .wpr-table-list'); + const pagesCount = tableList ? tableList.querySelectorAll('[data-id]').length : 0; + trackRocketCDNUpsellMixpanelEvent('RocketCDN Upsell CTA Clicked', { + destination: iframeVisit ? 'iframe' : 'express-checkout', + pages_count: pagesCount + }); } })(document, window); -},{}],12:[function(require,module,exports){ +},{}],14:[function(require,module,exports){ "use strict"; /*! @@ -2719,7 +3572,7 @@ $(document).ready(function () { }, !0); }), window._gsDefine && window._gsQueue.pop()(); -},{}],13:[function(require,module,exports){ +},{}],15:[function(require,module,exports){ "use strict"; /*! @@ -3325,7 +4178,7 @@ $(document).ready(function () { } })(window); -},{}],14:[function(require,module,exports){ +},{}],16:[function(require,module,exports){ "use strict"; /*! @@ -3465,7 +4318,7 @@ $(document).ready(function () { }, !0); }), window._gsDefine && window._gsQueue.pop()(); -},{}],15:[function(require,module,exports){ +},{}],17:[function(require,module,exports){ "use strict"; /*! @@ -4302,7 +5155,7 @@ $(document).ready(function () { }, !0); }), window._gsDefine && window._gsQueue.pop()(); -},{}],16:[function(require,module,exports){ +},{}],18:[function(require,module,exports){ "use strict"; /*! @@ -4357,4 +5210,4 @@ $(document).ready(function () { }), window._gsDefine && window._gsQueue.pop()(); },{}]},{},[3]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvanMvY3VzdG9tL2N1c3RvbS1zZWxlY3QuanMiLCJzcmMvanMvZ2xvYmFsL2FqYXguanMiLCJzcmMvanMvZ2xvYmFsL2FwcC5qcyIsInNyYy9qcy9nbG9iYWwvYmVhY29uLmpzIiwic3JjL2pzL2dsb2JhbC9jb3VudGRvd24uanMiLCJzcmMvanMvZ2xvYmFsL2ZpZWxkcy5qcyIsInNyYy9qcy9nbG9iYWwvbWFpbi5qcyIsInNyYy9qcy9nbG9iYWwvbWl4cGFuZWwuanMiLCJzcmMvanMvZ2xvYmFsL3BhZ2VNYW5hZ2VyLmpzIiwic3JjL2pzL2dsb2JhbC9yZWNvbW1lbmRhdGlvbnMtd2lkZ2V0LmpzIiwic3JjL2pzL2dsb2JhbC9yb2NrZXRjZG4uanMiLCJzcmMvanMvbGliL2dyZWVuc29jay9UaW1lbGluZUxpdGUubWluLmpzIiwic3JjL2pzL2xpYi9ncmVlbnNvY2svVHdlZW5MaXRlLm1pbi5qcyIsInNyYy9qcy9saWIvZ3JlZW5zb2NrL2Vhc2luZy9FYXNlUGFjay5taW4uanMiLCJzcmMvanMvbGliL2dyZWVuc29jay9wbHVnaW5zL0NTU1BsdWdpbi5taW4uanMiLCJzcmMvanMvbGliL2dyZWVuc29jay9wbHVnaW5zL1Njcm9sbFRvUGx1Z2luLm1pbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0FDQUEsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSTtFQUNuRSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDO0VBQzlELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUM7RUFDbkUsTUFBTSxPQUFPLEdBQUcsU0FBQSxDQUFTLEdBQUcsRUFBRTtJQUM3QixNQUFNLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLHNCQUFzQixFQUFF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QUMsSUFBSSxDQUFDLGlCQUFpQixHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEtBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLGFBQWEsR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUk7UUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7TUFBQSxDQUFDO01BQUMsQ0FBQyxHQUFDLEtBQUs7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTztNQUFDLENBQUMsR0FBQyxFQUFFO01BQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLE9BQU8sQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxDQUFELENBQUM7SUFBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEdBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUM7TUFBQyxPQUFPLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQztNQUFDLE9BQU8sQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDO1VBQUMsVUFBVSxFQUFDLENBQUM7VUFBQyxnQkFBZ0IsRUFBQyxDQUFDO1VBQUMsZUFBZSxFQUFDLENBQUM7VUFBQyxpQkFBaUIsRUFBQyxJQUFJLENBQUM7UUFBaUIsQ0FBQyxDQUFDO01BQUMsS0FBSSxRQUFRLElBQUUsT0FBTyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBRyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsYUFBYSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxlQUFlLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLGVBQWUsS0FBRyxDQUFDLENBQUMsZUFBZSxHQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsS0FBSyxJQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksSUFBRSxDQUFDLENBQUMsaUJBQWlCLEtBQUcsQ0FBQyxDQUFDLGlCQUFpQixHQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVM7TUFBQyxLQUFJLElBQUksSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLElBQUUsQ0FBQyxZQUFZLENBQUMsSUFBRSxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDO01BQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQztNQUFDLElBQUcsUUFBUSxJQUFFLE9BQU8sQ0FBQyxLQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBRyxDQUFDLFlBQVksS0FBSyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztVQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsSUFBRSxRQUFRLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNLEVBQUM7VUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsSUFBRSxVQUFVLElBQUUsT0FBTyxDQUFDLEtBQUcsVUFBVSxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLE9BQU8sS0FBRyxDQUFDLEtBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUM7VUFBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQTtRQUFDLElBQUcsUUFBUSxJQUFFLE9BQU8sQ0FBQyxFQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQUMsSUFBRyxVQUFVLElBQUUsT0FBTyxDQUFDLEVBQUMsTUFBSyxhQUFhLEdBQUMsQ0FBQyxHQUFDLHVFQUF1RTtRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQTtNQUFDLElBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLElBQUksQ0FBQyxLQUFLLEtBQUcsSUFBSSxDQUFDLFNBQVMsS0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUUsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxLQUFJLENBQUMsR0FBQyxJQUFJLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxJQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVM7TUFBQyxPQUFPLElBQUk7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUcsQ0FBQyxZQUFZLENBQUMsRUFBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsSUFBRyxDQUFDLFlBQVksS0FBSyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztRQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLE9BQU8sSUFBSTtNQUFBO01BQUMsT0FBTSxRQUFRLElBQUUsT0FBTyxDQUFDLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSztNQUFDLE9BQU8sQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsY0FBYyxHQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLENBQUMsRUFBQyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsY0FBYyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7TUFBQyxJQUFHLENBQUMsWUFBWSxDQUFDLElBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBRyxJQUFJLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUcsQ0FBQyxLQUFHLENBQUMsWUFBWSxLQUFLLElBQUUsQ0FBQyxDQUFDLElBQUksSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBVyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBRyxJQUFJLElBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxJQUFHLFFBQVEsSUFBRSxPQUFPLENBQUMsRUFBQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLFFBQVEsSUFBRSxPQUFPLENBQUMsSUFBRSxJQUFJLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksSUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSTtRQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxFQUFDLE9BQU8sSUFBSSxJQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7TUFBQTtNQUFDLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsWUFBVTtNQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEdBQUcsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxHQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxjQUFjO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxPQUFPO01BQUMsSUFBRyxDQUFDLElBQUUsQ0FBQyxJQUFFLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsSUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLFlBQVksRUFBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLFNBQVMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsWUFBWSxJQUFFLElBQUksQ0FBQyxZQUFZLEtBQUcsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFlBQVksS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLE1BQU0sS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFlBQVksR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLFlBQVksS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksSUFBRSxJQUFJLEdBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxZQUFZLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxZQUFZLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFlBQVksSUFBRSxDQUFDLENBQUMsTUFBSSxDQUFDLEdBQUMsbUJBQW1CLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxTQUFTLElBQUUsSUFBSSxDQUFDLFlBQVksSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLE1BQU0sS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsWUFBWSxHQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsWUFBWSxHQUFDLElBQUksQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLElBQUksQ0FBQyxZQUFZLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxZQUFZLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxNQUFNLElBQUUsQ0FBQyxJQUFFLENBQUMsRUFBQztRQUFDLElBQUcsSUFBSSxDQUFDLFFBQVEsS0FBRyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUUsSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFFLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsQ0FBQyxFQUFDLEtBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRSxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBRSxJQUFJLENBQUMsS0FBSyxJQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQUksQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsY0FBYyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRSxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBSSxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxjQUFjLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQztRQUFDLElBQUksQ0FBQyxTQUFTLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFFLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsR0FBRyxJQUFFLENBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxVQUFVLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxVQUFVLE1BQUksQ0FBQyxLQUFHLElBQUksQ0FBQyxLQUFLLElBQUUsQ0FBQyxJQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxJQUFFLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxRQUFRLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUE7SUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBQyxZQUFVO01BQUMsS0FBSSxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBRTtRQUFDLElBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFDLE9BQU0sQ0FBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO01BQUE7TUFBQyxPQUFNLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLFVBQVU7TUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLEVBQUUsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO01BQUMsT0FBTyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRztRQUFDLENBQUMsR0FBQyxFQUFFO1FBQUMsQ0FBQyxHQUFDLENBQUM7TUFBQyxLQUFJLENBQUMsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFHLElBQUksSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxPQUFPLENBQUMsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsR0FBRTtRQUFDLElBQUcsQ0FBQyxLQUFHLElBQUksRUFBQyxPQUFNLENBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUTtNQUFBO01BQUMsT0FBTSxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDO01BQUMsS0FBSSxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLEtBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7TUFBQyxJQUFHLENBQUMsRUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBRyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsT0FBTyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNO01BQUMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxPQUFPLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxHQUFDLFlBQVU7TUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLE9BQU8sSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxHQUFHLEVBQUMsS0FBSSxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksS0FBRyxJQUFJLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFDO1FBQUMsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUFDO1VBQUMsS0FBSSxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLEdBQUMsWUFBWSxFQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxhQUFhLElBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixLQUFHLElBQUksQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxVQUFVLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBQyxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDO1VBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQztRQUFBO1FBQUMsT0FBTyxJQUFJLENBQUMsY0FBYztNQUFBO01BQUMsT0FBTyxDQUFDLEtBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxHQUFDLFlBQVU7TUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVM7TUFBQyxPQUFPLENBQUMsS0FBRyxDQUFDLENBQUMsbUJBQW1CO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsWUFBVTtNQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVLElBQUUsSUFBSSxDQUFDLFVBQVU7SUFBQSxDQUFDLEVBQUMsQ0FBQztFQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztBQUFBLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0FDWHhyVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxVQUFTLENBQUMsRUFBQztFQUFDLFlBQVk7O0VBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFFLENBQUM7RUFBQyxJQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQztJQUFDLElBQUksQ0FBQztNQUFDLENBQUM7TUFBQyxDQUFDO01BQUMsQ0FBQztNQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDO1FBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQztRQUFDLE9BQU8sQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztNQUFDLENBQUMsR0FBQyxLQUFLO01BQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBQSxFQUFVLENBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxZQUFVO1FBQUMsSUFBSSxDQUFDLEdBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxVQUFTLENBQUMsRUFBQztVQUFDLE9BQU8sSUFBSSxJQUFFLENBQUMsS0FBRyxDQUFDLFlBQVksS0FBSyxJQUFFLFFBQVEsSUFBRSxPQUFPLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQztRQUFBLENBQUM7TUFBQSxDQUFDLENBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxDQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsRUFBRTtRQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUM7VUFBQyxLQUFJLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxFQUFFLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztVQUFDLElBQUcsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEVBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxnQkFBZ0IsR0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLFVBQVUsSUFBRSxPQUFPLE1BQU0sSUFBRSxNQUFNLENBQUMsR0FBRyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUMsR0FBRyxHQUFDLEVBQUUsSUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsWUFBVTtZQUFDLE9BQU8sQ0FBQztVQUFBLENBQUMsQ0FBQyxHQUFDLFdBQVcsSUFBRSxPQUFPLE1BQU0sSUFBRSxNQUFNLENBQUMsT0FBTyxLQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQUEsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxJQUFFLFlBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsWUFBVTtVQUFDLE9BQU8sQ0FBQztRQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDO01BQUEsQ0FBQztJQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQztJQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLEVBQUU7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDO01BQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxLQUFJLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSwwQkFBMEIsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsQ0FBRCxDQUFDO01BQUEsQ0FBQztJQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBRyxJQUFJLENBQUMsS0FBSyxFQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7TUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTTtRQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDO01BQUMsT0FBTyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsY0FBYyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxRQUFRLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxRQUFRLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxXQUFXLEdBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLFdBQVcsQ0FBQztJQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUztJQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyx3QkFBd0IsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFlBQVksR0FBQyxDQUFDLElBQUUsSUFBSTtJQUFBLENBQUMsQ0FBQztJQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUM7TUFBQyxLQUFJLElBQUksSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsQ0FBQyxFQUFDLENBQUM7UUFBQyxDQUFDLEVBQUMsQ0FBQztRQUFDLEVBQUUsRUFBQyxDQUFDO1FBQUMsRUFBRSxFQUFDO01BQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxLQUFHLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxtQkFBbUIsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFBQyxJQUFHLENBQUMsRUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxLQUFLLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQUMsSUFBRyxDQUFDLEVBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFlBQVksRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUM7UUFBQyxJQUFJLEVBQUMsQ0FBQztRQUFDLE1BQU0sRUFBQztNQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxxQkFBcUI7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLG9CQUFvQjtNQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLFlBQVU7UUFBQyxPQUFPLElBQUksSUFBSSxDQUFELENBQUMsQ0FBRSxPQUFPLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLHVCQUF1QixDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsc0JBQXNCLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLDZCQUE2QixDQUFDO0lBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUk7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFFLENBQUM7UUFBQyxDQUFDLEdBQUMsR0FBRztRQUFDLENBQUMsR0FBQyxFQUFFO1FBQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUM7VUFBQyxJQUFJLENBQUM7WUFBQyxDQUFDO1lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLEdBQUcsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsTUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFBQSxDQUFDO01BQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsWUFBVTtRQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLFlBQVU7UUFBQyxJQUFJLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLEVBQUMsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLFlBQVU7UUFBQyxJQUFJLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsRUFBRSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsVUFBUyxDQUFDLEVBQUM7VUFBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUFBLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxVQUFTLENBQUMsRUFBQztRQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBRSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsSUFBRSxDQUFDO01BQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUM7UUFBQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQyxJQUFFLENBQUM7TUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLENBQUMsWUFBVTtRQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDLEVBQUMsSUFBSSxDQUFDO0lBQUEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUQsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLE1BQU07SUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBRyxJQUFJLENBQUMsSUFBSSxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxlQUFlLEtBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBO0lBQUMsQ0FBQyxDQUFDO0lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFELENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFlBQVksR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBSSxDQUFDLEdBQUMsU0FBQSxDQUFBLEVBQVU7TUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsR0FBRyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDO0lBQUEsQ0FBQztJQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxJQUFFLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLElBQUUsQ0FBQyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFlBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxZQUFVO01BQUMsT0FBTyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsWUFBVTtNQUFDLElBQUksQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsU0FBUztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsVUFBVTtNQUFDLE9BQU0sQ0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFFBQVEsSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLFlBQVU7TUFBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUk7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksR0FBQyxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUTtNQUFDLE9BQU8sSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLFFBQVEsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQztNQUFDLE9BQU8sQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsYUFBYSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBRyxJQUFJLEtBQUcsQ0FBQyxDQUFDLElBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSTtRQUFDLElBQUcsQ0FBQyxLQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsSUFBSSxJQUFFLENBQUMsR0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxPQUFPLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDO01BQUE7TUFBQyxPQUFPLElBQUk7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLElBQUksSUFBRSxJQUFJLENBQUMsTUFBTTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLGNBQWMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLElBQUUsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsU0FBUyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEtBQUcsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEVBQUMsU0FBUyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxjQUFjO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsS0FBSztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUMsT0FBTyxJQUFJLENBQUMsVUFBVTtNQUFDLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBQztRQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFDO1VBQUMsSUFBSSxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7VUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsY0FBYztZQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsU0FBUztVQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsS0FBSyxJQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsT0FBSyxDQUFDLENBQUMsU0FBUyxHQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTO1FBQUE7UUFBQyxJQUFJLENBQUMsR0FBRyxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsU0FBUyxNQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBO01BQUMsT0FBTyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLFVBQVUsS0FBRyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsSUFBSSxJQUFFLElBQUksQ0FBQyxVQUFVO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxJQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBQyxPQUFPLElBQUksQ0FBQyxVQUFVO01BQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsVUFBVTtVQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVLElBQUUsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDO01BQUE7TUFBQyxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLFNBQVMsS0FBRyxJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxJQUFFLElBQUksQ0FBQyxTQUFTO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxJQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBQyxPQUFPLElBQUksQ0FBQyxPQUFPO01BQUMsSUFBRyxDQUFDLElBQUUsSUFBSSxDQUFDLE9BQU8sSUFBRSxJQUFJLENBQUMsU0FBUyxFQUFDO1FBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsU0FBUztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVO1FBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLGlCQUFpQixLQUFHLElBQUksQ0FBQyxVQUFVLElBQUUsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxRQUFRLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsVUFBVSxJQUFFLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQTtNQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsSUFBRSxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSTtJQUFBLENBQUM7SUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLENBQUM7SUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBRCxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQztNQUFDLElBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBRSxJQUFJLEtBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBRyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLEVBQUMsSUFBSSxDQUFDLGFBQWEsRUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7TUFBQyxPQUFPLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBRyxJQUFJLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLElBQUksRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLE1BQU0sS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxLQUFLLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU07TUFBQyxLQUFJLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsWUFBWSxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sTUFBSSxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxjQUFjLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxHQUFDLFlBQVU7TUFBQyxPQUFPLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVTtJQUFBLENBQUM7SUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsV0FBVyxFQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFDLElBQUksSUFBRSxDQUFDLEVBQUMsTUFBSyw2QkFBNkI7UUFBQyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1FBQUMsSUFBRyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsR0FBQyxJQUFJLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxZQUFZLEtBQUssSUFBRSxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxRQUFRLElBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSSxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsV0FBVyxHQUFDLEVBQUUsRUFBQyxJQUFJLENBQUMsU0FBUyxHQUFDLEVBQUUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsSUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxLQUFHLENBQUMsQ0FBQyxNQUFJLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUksQ0FBQyxJQUFFLFdBQVcsS0FBRyxDQUFDLElBQUUsR0FBRyxLQUFHLENBQUMsSUFBRSxHQUFHLEtBQUcsQ0FBQyxJQUFFLE9BQU8sS0FBRyxDQUFDLElBQUUsUUFBUSxLQUFHLENBQUMsSUFBRSxXQUFXLEtBQUcsQ0FBQyxJQUFFLFFBQVEsS0FBRyxDQUFDLElBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUM7TUFBQSxDQUFDO0lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLENBQUQsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyx1QkFBdUIsR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFlBQVksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLElBQUUsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsSUFBSSxDQUFDLEdBQUMsRUFBRTtNQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQztRQUFDLE9BQU8sRUFBQyxDQUFDO1FBQUMsVUFBVSxFQUFDLENBQUM7UUFBQyxVQUFVLEVBQUM7TUFBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBQztRQUFDLElBQUksRUFBQyxDQUFDO1FBQUMsS0FBSyxFQUFDLENBQUM7UUFBQyxTQUFTLEVBQUMsQ0FBQztRQUFDLFVBQVUsRUFBQyxDQUFDO1FBQUMsZ0JBQWdCLEVBQUMsQ0FBQztRQUFDLGVBQWUsRUFBQyxDQUFDO1FBQUMsU0FBUyxFQUFDLENBQUM7UUFBQyxZQUFZLEVBQUMsQ0FBQztRQUFDLE9BQU8sRUFBQyxDQUFDO1FBQUMsUUFBUSxFQUFDLENBQUM7UUFBQyxjQUFjLEVBQUMsQ0FBQztRQUFDLGFBQWEsRUFBQyxDQUFDO1FBQUMsT0FBTyxFQUFDLENBQUM7UUFBQyxhQUFhLEVBQUMsQ0FBQztRQUFDLFlBQVksRUFBQyxDQUFDO1FBQUMsaUJBQWlCLEVBQUMsQ0FBQztRQUFDLHVCQUF1QixFQUFDLENBQUM7UUFBQyxzQkFBc0IsRUFBQyxDQUFDO1FBQUMsUUFBUSxFQUFDLENBQUM7UUFBQyxjQUFjLEVBQUMsQ0FBQztRQUFDLGFBQWEsRUFBQyxDQUFDO1FBQUMsVUFBVSxFQUFDLENBQUM7UUFBQyxJQUFJLEVBQUMsQ0FBQztRQUFDLGVBQWUsRUFBQyxDQUFDO1FBQUMsTUFBTSxFQUFDLENBQUM7UUFBQyxXQUFXLEVBQUMsQ0FBQztRQUFDLElBQUksRUFBQyxDQUFDO1FBQUMsTUFBTSxFQUFDLENBQUM7UUFBQyxRQUFRLEVBQUMsQ0FBQztRQUFDLE9BQU8sRUFBQyxDQUFDO1FBQUMsSUFBSSxFQUFDO01BQUMsQ0FBQztNQUFDLENBQUMsR0FBQztRQUFDLElBQUksRUFBQyxDQUFDO1FBQUMsR0FBRyxFQUFDLENBQUM7UUFBQyxJQUFJLEVBQUMsQ0FBQztRQUFDLFVBQVUsRUFBQyxDQUFDO1FBQUMsVUFBVSxFQUFDLENBQUM7UUFBQyxXQUFXLEVBQUMsQ0FBQztRQUFDLE1BQU0sRUFBQyxDQUFDO1FBQUMsT0FBTyxFQUFDO01BQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsbUJBQW1CLEdBQUMsSUFBSSxDQUFDLENBQUQsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsYUFBYSxHQUFDLElBQUksQ0FBQyxDQUFELENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFBLEVBQVU7UUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTTtRQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQztNQUFBLENBQUM7SUFBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxZQUFVO01BQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQyxJQUFHLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFDLEdBQUcsQ0FBQyxFQUFDO1FBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDO1VBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztVQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsTUFBTSxJQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFBO1FBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBQztVQUFDLE9BQUssQ0FBQyxJQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1VBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUFBO01BQUM7SUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQUMsSUFBSSxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVTtRQUFDLElBQUcsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQztVQUFDLE1BQU0sRUFBQyxDQUFDO1VBQUMsTUFBTSxFQUFDO1FBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxPQUFLLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7UUFBQyxJQUFHLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsRUFBQztVQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLElBQUcsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxJQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUcsQ0FBQyxLQUFHLENBQUMsRUFBQztVQUFNLE9BQU8sQ0FBQztRQUFBO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxFQUFFO1VBQUMsQ0FBQyxHQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxTQUFTO1FBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUksQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFHLElBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBRyxDQUFDLENBQUMsU0FBUyxLQUFHLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUcsS0FBSyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxLQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRTtVQUFDLElBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBQyxPQUFNLENBQUMsR0FBRztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUztRQUFBO1FBQUMsT0FBTyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUM7TUFBQSxDQUFDO0lBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxZQUFVO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSTtRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsaUJBQWlCO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZTtRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSTtNQUFDLElBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBQztRQUFDLElBQUksQ0FBQyxRQUFRLEtBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFBQyxJQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxLQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxJQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUssSUFBRyxDQUFDLEtBQUcsQ0FBQyxFQUFDO01BQU0sQ0FBQyxNQUFLLElBQUcsQ0FBQyxDQUFDLFlBQVksSUFBRSxDQUFDLEtBQUcsQ0FBQyxFQUFDLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLElBQUksQ0FBQyxLQUFJO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsU0FBUyxLQUFHLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsSUFBRyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLGFBQWEsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxLQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7VUFBQyxJQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsS0FBSyxFQUFDO1FBQU0sQ0FBQyxNQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBO01BQUMsSUFBRyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsR0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLFlBQVksS0FBSyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUMsQ0FBQyxHQUFDLFVBQVUsSUFBRSxPQUFPLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsS0FBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDO01BQUMsSUFBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLFFBQVEsSUFBRSxVQUFVLElBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUMsS0FBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQyxJQUFHLElBQUksSUFBRSxDQUFDLEVBQUMsT0FBTSxDQUFDLENBQUM7TUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsQ0FBQyxDQUFDLEtBQUssSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBRyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7TUFBQyxLQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFDO1FBQUMsSUFBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsWUFBWSxLQUFLLElBQUUsQ0FBQyxDQUFDLElBQUksSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBRCxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxFQUFDO1VBQUMsS0FBSSxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsR0FBQztZQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsUUFBUTtZQUFDLENBQUMsRUFBQyxDQUFDO1lBQUMsQ0FBQyxFQUFDLFVBQVU7WUFBQyxDQUFDLEVBQUMsQ0FBQztZQUFDLENBQUMsRUFBQyxDQUFDO1lBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUFDLENBQUMsRUFBQyxDQUFDO1lBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztZQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7VUFBUyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVE7VUFBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLGVBQWUsTUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFNBQVMsTUFBSSxJQUFJLENBQUMsdUJBQXVCLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQSxDQUFDLE1BQUssSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDO1VBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxRQUFRO1VBQUMsQ0FBQyxFQUFDLENBQUM7VUFBQyxDQUFDLEVBQUMsQ0FBQztVQUFDLENBQUMsRUFBQyxVQUFVLElBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxFQUFDLENBQUM7VUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1VBQUMsRUFBRSxFQUFDO1FBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBRSxVQUFVLElBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUM7UUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUM7TUFBQTtNQUFDLE9BQU8sQ0FBQyxJQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxRQUFRLEtBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUcsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFNBQVMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsU0FBUztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsWUFBWTtNQUFDLElBQUcsQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxZQUFZLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxRQUFRLElBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxDQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsVUFBVSxLQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsWUFBWSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFHLElBQUksR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLE1BQUksQ0FBQyxHQUFDLG1CQUFtQixFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLFFBQVEsSUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFlBQVksR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxRQUFRLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFHLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQztRQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVO1FBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxJQUFFLEVBQUUsTUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDO01BQUEsQ0FBQyxNQUFLLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztNQUFDLElBQUcsSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLElBQUUsQ0FBQyxFQUFDO1FBQUMsSUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUM7VUFBQyxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO1VBQU8sSUFBRyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsUUFBUSxLQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFHLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxTQUFTLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxZQUFZLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsS0FBSyxDQUFDO1VBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUE7UUFBQyxLQUFJLElBQUksQ0FBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxPQUFPLElBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFFLElBQUksQ0FBQyxLQUFLLEtBQUcsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLFFBQVEsS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsS0FBSyxJQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFFLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7UUFBQyxJQUFJLENBQUMsU0FBUyxLQUFHLENBQUMsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFFBQVEsSUFBRSxJQUFJLENBQUMsVUFBVSxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFFLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsR0FBRyxLQUFHLENBQUMsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFFBQVEsSUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUUsSUFBSSxDQUFDLFVBQVUsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxPQUFPLENBQUMsSUFBRSxJQUFJLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsWUFBWSxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxZQUFZLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBO0lBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBRyxLQUFLLEtBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLElBQUUsQ0FBQyxLQUFHLElBQUksSUFBRSxDQUFDLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEdBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxRQUFRLElBQUUsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUM7TUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO01BQUMsSUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsUUFBUSxJQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSTtRQUFDLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQztVQUFDLEtBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLElBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUM7WUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFFLEVBQUUsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsS0FBSztZQUFDO1VBQUs7UUFBQyxDQUFDLE1BQUk7VUFBQyxJQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsTUFBTSxFQUFDLE9BQU0sQ0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFFLENBQUMsQ0FBQyxHQUFDLEtBQUs7UUFBQTtRQUFDLElBQUcsQ0FBQyxFQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsS0FBSyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxLQUFHLFFBQVEsSUFBRSxPQUFPLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7VUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFJLENBQUMsQ0FBQyxFQUFFLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBRSxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxLQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLFFBQVEsS0FBRyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxLQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztVQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBRSxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQTtNQUFDO01BQUMsT0FBTyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsWUFBVTtNQUFDLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixJQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQyx1QkFBdUIsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLEVBQUMsSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRO1FBQUMsSUFBRyxDQUFDLEVBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztNQUFBO01BQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsdUJBQXVCLElBQUUsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBQyxXQUFXLEdBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsZUFBZSxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsZUFBZSxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxlQUFlLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxLQUFLLEVBQUMsQ0FBQztRQUFDLFVBQVUsRUFBQyxDQUFDO1FBQUMsZ0JBQWdCLEVBQUMsQ0FBQztRQUFDLGVBQWUsRUFBQyxDQUFDO1FBQUMsaUJBQWlCLEVBQUMsQ0FBQztRQUFDLHVCQUF1QixFQUFDLENBQUM7UUFBQyxzQkFBc0IsRUFBQyxDQUFDO1FBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQztRQUFDLFNBQVMsRUFBQyxDQUFDO1FBQUMsU0FBUyxFQUFDO01BQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUcsSUFBSSxJQUFFLENBQUMsRUFBQyxPQUFNLEVBQUU7TUFBQyxDQUFDLEdBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUM7TUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQyxJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxRQUFRLElBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7UUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQyxNQUFLLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQyxPQUFPLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFlBQVksR0FBQyxDQUFDLENBQUMsa0JBQWtCLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztNQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsZUFBZSxHQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxTQUFTO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsT0FBTyxHQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLElBQUksRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDO01BQUMsT0FBTyxJQUFJLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLElBQUUsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDO1FBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxRQUFRO1FBQUMsQ0FBQyxFQUFDLENBQUM7UUFBQyxDQUFDLEVBQUMsQ0FBQztRQUFDLENBQUMsRUFBQyxDQUFDO1FBQUMsQ0FBQyxFQUFDLENBQUM7UUFBQyxDQUFDLEVBQUMsVUFBVSxJQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQztRQUFDLENBQUMsRUFBQztNQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxLQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxLQUFLLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLEtBQUksSUFBSSxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxHQUFDLElBQUksRUFBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLGVBQWU7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVE7TUFBQyxJQUFHLElBQUksSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksQ0FBQyxlQUFlLEdBQUMsRUFBRSxDQUFDLEtBQUssS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxJQUFJLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFDLE9BQUssQ0FBQyxHQUFFLElBQUksSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLElBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksSUFBRSxJQUFJLENBQUMsUUFBUSxLQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLE9BQU0sQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsS0FBSSxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUUsSUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQUksQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRO01BQUMsSUFBRyxpQkFBaUIsS0FBRyxDQUFDLEVBQUM7UUFBQyxPQUFLLENBQUMsR0FBRTtVQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztVQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDO1FBQUE7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDO01BQUE7TUFBQyxPQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsRUFBRSxJQUFFLFVBQVUsSUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO01BQUMsT0FBTyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBRyxDQUFDLENBQUMsR0FBRyxLQUFHLENBQUMsQ0FBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBRCxDQUFDLENBQUUsU0FBUyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsT0FBTSxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUcsRUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxNQUFLLDRCQUE0QjtNQUFDLElBQUksQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUTtRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGNBQWM7UUFBQyxDQUFDLEdBQUM7VUFBQyxJQUFJLEVBQUMsY0FBYztVQUFDLEdBQUcsRUFBQyxVQUFVO1VBQUMsSUFBSSxFQUFDLE9BQU87VUFBQyxLQUFLLEVBQUMsYUFBYTtVQUFDLE9BQU8sRUFBQztRQUFpQixDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsUUFBUSxFQUFDLFlBQVU7VUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLGVBQWUsR0FBQyxDQUFDLElBQUUsRUFBRTtRQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRztNQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFVLElBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUM7TUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxREFBcUQsR0FBQyxDQUFDLENBQUM7SUFBQTtJQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7RUFBQTtBQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7Ozs7O0FDWDE0dkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBRyxNQUFNLENBQUMsUUFBUSxHQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFVO0VBQUMsWUFBWTs7RUFBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBQyxDQUFDLGFBQWEsQ0FBQyxFQUFDLFVBQVMsQ0FBQyxFQUFDO0lBQUMsSUFBSSxDQUFDO01BQUMsQ0FBQztNQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFFLE1BQU07TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTO01BQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsRUFBRTtNQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU07TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQyxZQUFVLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLENBQUQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLEVBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxZQUFVLENBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEVBQUM7VUFBQyxPQUFPLEVBQUMsSUFBSSxDQUFDLENBQUQsQ0FBQztVQUFDLE1BQU0sRUFBQyxJQUFJLENBQUMsQ0FBRCxDQUFDO1VBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxDQUFEO1FBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsSUFBSSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLElBQUksRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEVBQUMsVUFBUyxDQUFDLEVBQUM7WUFBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxPQUFPLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLEdBQUc7VUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBRCxDQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDO1VBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQSxDQUFDLEVBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsU0FBUyxFQUFDLFVBQVMsQ0FBQyxFQUFDO1FBQUMsT0FBTSxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBQyxDQUFDO01BQUEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQyxVQUFTLENBQUMsRUFBQztRQUFDLE9BQU8sQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO01BQUEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBQyxVQUFTLENBQUMsRUFBQztRQUFDLE9BQU8sQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUMsRUFBRSxJQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQztNQUFBLENBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxFQUFDLElBQUksSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsRUFBRSxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDO01BQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLENBQUQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLEVBQUU7TUFBQyxPQUFPLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsSUFBRSxJQUFJLENBQUMsR0FBRyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsR0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLG9CQUFvQixFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBRCxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLElBQUksQ0FBQyxHQUFHO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQztNQUFDLEtBQUksSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRSxNQUFNLEVBQUMsQ0FBQyxHQUFDLEVBQUUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBRSxFQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxLQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxLQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxZQUFZLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLElBQUksRUFBQyxDQUFDLEdBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLE1BQU0sS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxLQUFLLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxJQUFJLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsRUFBRSxHQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUM7UUFBQyxDQUFDLEVBQUMsQ0FBQztRQUFDLENBQUMsRUFBQztNQUFDLENBQUM7TUFBQyxLQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLENBQUQsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSztNQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7UUFBQyxPQUFLLENBQUMsQ0FBQyxJQUFJLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJO01BQUEsQ0FBQyxNQUFLLE9BQUssQ0FBQyxDQUFDLElBQUksSUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUk7TUFBQyxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLElBQUksQ0FBQyxDQUFELENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLENBQUMsR0FBQyxJQUFJLEdBQUMsQ0FBQyxHQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEdBQUMsQ0FBQyxHQUFDLE1BQU0sSUFBRSxDQUFDLElBQUUsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsR0FBRyxHQUFDLElBQUksR0FBQyxDQUFDLEdBQUMsTUFBTSxJQUFFLENBQUMsSUFBRSxJQUFJLEdBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLEtBQUssR0FBQyxNQUFNLElBQUUsQ0FBQyxJQUFFLEtBQUssR0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLEdBQUMsT0FBTztJQUFBLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLENBQUMsR0FBQyxJQUFJLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsTUFBTSxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLE1BQU0sSUFBRSxDQUFDLElBQUUsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsR0FBQyxHQUFHLEdBQUMsSUFBSSxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsTUFBTSxJQUFFLENBQUMsSUFBRSxJQUFJLEdBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLEtBQUssQ0FBQyxHQUFDLENBQUMsSUFBRSxNQUFNLElBQUUsQ0FBQyxJQUFFLEtBQUssR0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLEdBQUMsT0FBTyxDQUFDO0lBQUEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDO01BQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLENBQUMsR0FBQyxNQUFNLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLENBQUMsR0FBQyxNQUFNLElBQUUsQ0FBQyxJQUFFLEdBQUcsR0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLEdBQUcsR0FBQyxJQUFJLEdBQUMsQ0FBQyxHQUFDLE1BQU0sSUFBRSxDQUFDLElBQUUsSUFBSSxHQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsR0FBQyxLQUFLLEdBQUMsTUFBTSxJQUFFLENBQUMsSUFBRSxLQUFLLEdBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLE9BQU8sRUFBQyxDQUFDLEdBQUMsRUFBRSxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDLEVBQUU7SUFBQSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQztJQUFBLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEVBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1VBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBRSxDQUFDLENBQUM7UUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBRCxDQUFDO01BQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFBLENBQUMsRUFBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLFlBQVksRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsR0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBQyxFQUFFLEdBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsU0FBUyxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUk7SUFBQSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxJQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsU0FBUyxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUM7SUFBQSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTSxDQUFDLEVBQUUsSUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUM7TUFBQyxJQUFJLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFBQTtJQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLGFBQWEsRUFBQyxPQUFPLENBQUMsRUFBQyxDQUFDO0VBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLFNBQVMsSUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7QUNYdGxKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUcsTUFBTSxDQUFDLFFBQVEsR0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBVTtFQUFDLFlBQVk7O0VBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBQyxDQUFDLHFCQUFxQixFQUFDLFdBQVcsQ0FBQyxFQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztJQUFDLElBQUksQ0FBQztNQUFDLENBQUM7TUFBQyxDQUFDO01BQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQUEsRUFBVTtRQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUTtNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLDJCQUEyQixHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsZUFBZSxHQUFDLGFBQWEsRUFBQyxDQUFDLEdBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUM7TUFBQyxHQUFHLEVBQUMsQ0FBQztNQUFDLEtBQUssRUFBQyxDQUFDO01BQUMsTUFBTSxFQUFDLENBQUM7TUFBQyxJQUFJLEVBQUMsQ0FBQztNQUFDLEtBQUssRUFBQyxDQUFDO01BQUMsTUFBTSxFQUFDLENBQUM7TUFBQyxRQUFRLEVBQUMsQ0FBQztNQUFDLE9BQU8sRUFBQyxDQUFDO01BQUMsTUFBTSxFQUFDLENBQUM7TUFBQyxXQUFXLEVBQUMsQ0FBQztNQUFDLFVBQVUsRUFBQztJQUFFLENBQUM7SUFBQyxJQUFJLENBQUM7TUFBQyxDQUFDO01BQUMsQ0FBQztNQUFDLENBQUM7TUFBQyxDQUFDO01BQUMsQ0FBQztNQUFDLENBQUMsR0FBQywyQkFBMkI7TUFBQyxDQUFDLEdBQUMsc0RBQXNEO01BQUMsQ0FBQyxHQUFDLGtEQUFrRDtNQUFDLENBQUMsR0FBQyxZQUFZO01BQUMsQ0FBQyxHQUFDLHVCQUF1QjtNQUFDLENBQUMsR0FBQyxzQkFBc0I7TUFBQyxDQUFDLEdBQUMsa0JBQWtCO01BQUMsQ0FBQyxHQUFDLHlCQUF5QjtNQUFDLENBQUMsR0FBQyxZQUFZO01BQUMsQ0FBQyxHQUFDLFVBQVU7TUFBQyxDQUFDLEdBQUMsWUFBWTtNQUFDLENBQUMsR0FBQyx3Q0FBd0M7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsdUJBQXVCO01BQUMsQ0FBQyxHQUFDLGdDQUFnQztNQUFDLENBQUMsR0FBQyxxREFBcUQ7TUFBQyxDQUFDLEdBQUMsdUJBQXVCO01BQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsR0FBRztNQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLEVBQUU7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLFFBQVE7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQztRQUFDLGFBQWEsRUFBQztNQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBUyxDQUFDLFNBQVM7TUFBQyxDQUFDLEdBQUMsWUFBVTtRQUFDLElBQUksQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUFDLE9BQU8sQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyx1Q0FBdUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBRyxFQUFFLENBQUMsR0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsTUFBTSxDQUFDLE9BQU8sSUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsRUFBRTtNQUFDLENBQUMsR0FBQyxFQUFFO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztRQUFDLElBQUcsS0FBSyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLE9BQU8sQ0FBQztRQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxRQUFRLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLEtBQUssQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUU7UUFBQyxPQUFPLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLElBQUk7TUFBQSxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBQyxZQUFVLENBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztRQUFDLE9BQU8sQ0FBQyxJQUFFLFNBQVMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFlBQVksS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksSUFBRSxDQUFDLElBQUUsQ0FBQyxJQUFFLE1BQU0sS0FBRyxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsSUFBRSxXQUFXLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFHLElBQUksS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDO1FBQUMsSUFBRyxNQUFNLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLE9BQU8sQ0FBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7VUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQyxJQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUk7VUFBQyxJQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUMsOEJBQThCLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLENBQUMsR0FBQyxpQkFBaUIsRUFBQyxHQUFHLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxpQkFBaUIsR0FBQyxnQkFBZ0IsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSTtZQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxLQUFHLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxHQUFDLEdBQUc7WUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLE9BQU8sR0FBQyxRQUFRLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQztVQUFBO1VBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsYUFBYSxHQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsR0FBRyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsV0FBVyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFBO1FBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBRyxVQUFVLEtBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsTUFBTSxLQUFHLENBQUMsR0FBQyxNQUFNLEdBQUMsS0FBSztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFFBQVEsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQztVQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsT0FBSyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxPQUFLLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxZQUFZLElBQUUsQ0FBQyxDQUFDLEtBQUssRUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLEtBQUssQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxPQUFPLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsS0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxJQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztRQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxTQUFTLEtBQUcsQ0FBQyxJQUFFLFFBQVEsS0FBRyxDQUFDLElBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUcsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLFFBQVEsSUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLEtBQUcsQ0FBQyxJQUFFLE1BQU0sS0FBRyxDQUFDLElBQUUsS0FBSyxLQUFHLENBQUMsR0FBQyxFQUFFLEtBQUcsQ0FBQyxJQUFFLE1BQU0sS0FBRyxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsSUFBRSxRQUFRLElBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxJQUFHLENBQUMsRUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsV0FBVyxLQUFHLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTTtVQUFDLElBQUksRUFBQyxDQUFDO1VBQUMsUUFBUSxFQUFDO1FBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUM7UUFBQyxLQUFLLEVBQUMsQ0FBQyxNQUFNLEVBQUMsT0FBTyxDQUFDO1FBQUMsTUFBTSxFQUFDLENBQUMsS0FBSyxFQUFDLFFBQVE7TUFBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsWUFBWSxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsY0FBYyxDQUFDO01BQUMsRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxHQUFDLFVBQVUsQ0FBQyxPQUFPLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNO1FBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxJQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxDQUFDLElBQUksSUFBRSxDQUFDLElBQUUsRUFBRSxLQUFHLENBQUMsSUFBRSxNQUFNLEtBQUcsQ0FBQyxJQUFFLFdBQVcsS0FBRyxDQUFDLE1BQUksQ0FBQyxHQUFDLEtBQUssQ0FBQztRQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLE9BQU8sSUFBSSxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLFFBQVEsS0FBRyxDQUFDLEtBQUcsQ0FBQyxHQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsUUFBUSxLQUFHLENBQUMsSUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEdBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBSSxDQUFDLEdBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLE9BQU0sUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLE9BQU8sSUFBSSxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLElBQUk7UUFBQyxPQUFPLElBQUksSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsR0FBRyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBRyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLFVBQVUsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsVUFBVSxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsRUFBRSxHQUFDO1FBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7UUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztRQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDO1FBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7UUFBQyxNQUFNLEVBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUFDLElBQUksRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDO1FBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxHQUFHLENBQUM7UUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQztRQUFDLEtBQUssRUFBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDO1FBQUMsT0FBTyxFQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxHQUFHLENBQUM7UUFBQyxLQUFLLEVBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztRQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO1FBQUMsTUFBTSxFQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFBQyxJQUFJLEVBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQztRQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsR0FBRyxDQUFDO1FBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFBQyxHQUFHLEVBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUFDLElBQUksRUFBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDO1FBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7UUFBQyxXQUFXLEVBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxDQUFDO01BQUMsQ0FBQztNQUFDLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxPQUFPLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUU7TUFBQSxDQUFDO01BQUMsRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxJQUFFLEVBQUUsS0FBRyxDQUFDLEdBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsRUFBQyxHQUFHLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLElBQUUsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxFQUFFLEVBQUMsR0FBRyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxJQUFFLEtBQUssS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLEVBQUUsSUFBRSxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUs7TUFBQSxDQUFDO01BQUMsRUFBRSxHQUFDLHFEQUFxRDtJQUFDLEtBQUksQ0FBQyxJQUFJLEVBQUUsRUFBQyxFQUFFLElBQUUsR0FBRyxHQUFDLENBQUMsR0FBQyxLQUFLO0lBQUMsRUFBRSxHQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUMsR0FBRyxFQUFDLElBQUksQ0FBQztJQUFDLElBQUksRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFHLElBQUksSUFBRSxDQUFDLEVBQUMsT0FBTyxVQUFTLENBQUMsRUFBQztVQUFDLE9BQU8sQ0FBQztRQUFBLENBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDLEVBQUU7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUU7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxFQUFFO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUMsR0FBRyxHQUFDLEdBQUc7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU07VUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBQyxFQUFFO1FBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxVQUFTLENBQUMsRUFBQztVQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQztVQUFDLElBQUcsUUFBUSxJQUFFLE9BQU8sQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxJQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO1lBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1VBQUE7VUFBQyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLEVBQUMsT0FBSyxDQUFDLEdBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFDLFFBQVEsR0FBQyxFQUFFLENBQUM7UUFBQSxDQUFDLEdBQUMsVUFBUyxDQUFDLEVBQUM7VUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQztVQUFDLElBQUcsUUFBUSxJQUFFLE9BQU8sQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxJQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO1lBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1VBQUE7VUFBQyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLEVBQUMsT0FBSyxDQUFDLEdBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDO1FBQUEsQ0FBQyxHQUFDLFVBQVMsQ0FBQyxFQUFDO1VBQUMsT0FBTyxDQUFDO1FBQUEsQ0FBQztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLE9BQU8sQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7VUFBQyxJQUFJLENBQUM7WUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7VUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDO1VBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUFBLENBQUM7TUFBQSxDQUFDO01BQUMsRUFBRSxJQUFFLENBQUMsQ0FBQyxlQUFlLEdBQUMsVUFBUyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFBQyxLQUFJLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsR0FBQyxJQUFJLEVBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7UUFBQyxJQUFHLENBQUMsQ0FBQyxVQUFVLEtBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEVBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLEdBQUU7VUFBQyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7WUFBQyxJQUFHLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSSxFQUFDO2NBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztjQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztZQUFBO1VBQUMsQ0FBQyxNQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztRQUFBO01BQUMsQ0FBQyxFQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksRUFBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQztNQUFBLENBQUMsQ0FBQztNQUFDLEVBQUUsSUFBRSxDQUFDLENBQUMsYUFBYSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVTtVQUFDLENBQUMsR0FBQyxDQUFDO1FBQUMsS0FBSSxDQUFDLENBQUMsVUFBVSxHQUFDLElBQUksRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUU7VUFBQyxJQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsSUFBSSxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1FBQUE7UUFBQyxPQUFNO1VBQUMsS0FBSyxFQUFDLENBQUM7VUFBQyxHQUFHLEVBQUMsQ0FBQztVQUFDLFFBQVEsRUFBQyxDQUFDO1VBQUMsRUFBRSxFQUFDO1FBQUMsQ0FBQztNQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBRSxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxJQUFJLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLEVBQUUsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxLQUFLLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLEtBQUssQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUM7TUFBQSxDQUFDLENBQUM7TUFBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLFlBQVksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLEVBQUUsRUFBQyxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsRUFBRTtRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTTtVQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDO1FBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUcsQ0FBQyxLQUFHLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxjQUFjLEdBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBQyxPQUFPLEdBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO1VBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUMsT0FBTyxDQUFDO1VBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsSUFBRSxJQUFJLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTTtVQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQUEsQ0FBQyxNQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDO1FBQUMsSUFBRyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUM7VUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUM7UUFBQTtRQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMsQ0FBQztJQUFDLEtBQUksQ0FBQyxHQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxHQUFDLENBQUMsRUFBQyxFQUFFLEVBQUUsR0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUksR0FBQyxFQUFFLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxFQUFFLENBQUMsR0FBQyxFQUFFO0lBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEdBQUMsSUFBSTtRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztNQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLEVBQUUsRUFBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBRyxDQUFDLENBQUMsTUFBTSxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLElBQUksR0FBQztRQUFDLENBQUMsRUFBQyxDQUFDLEdBQUM7TUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUFDLElBQUksRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsMkJBQTJCLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsS0FBRyxDQUFDLEdBQUM7VUFBQyxNQUFNLEVBQUM7UUFBQyxDQUFDLENBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxZQUFZO1FBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUM7UUFBQyxJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO1VBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsUUFBUTtVQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUM7WUFBQyxNQUFNLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztjQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Y0FBQyxPQUFPLENBQUMsSUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxHQUFDLHNCQUFzQixDQUFDLEVBQUMsQ0FBQyxDQUFDO1lBQUE7VUFBQyxDQUFDLENBQUM7UUFBQTtNQUFDLENBQUM7SUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTztNQUFDLElBQUcsSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO01BQUE7TUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDO1FBQUMsTUFBTSxFQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztVQUFDLElBQUksQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7VUFBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDO1FBQUEsQ0FBQztRQUFDLFFBQVEsRUFBQztNQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFBQyxJQUFJLEVBQUUsR0FBQyxpRkFBaUYsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO01BQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7TUFBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDLFdBQVc7TUFBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO01BQUMsRUFBRSxHQUFDLElBQUksS0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO01BQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsWUFBVTtRQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLFlBQVksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUcsQ0FBQyxDQUFDLFlBQVksSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUMsWUFBWTtRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFlBQVksSUFBRSxJQUFJLEVBQUUsQ0FBRCxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUQsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU07VUFBQyxDQUFDLEdBQUMsSUFBSTtVQUFDLENBQUMsR0FBQyxHQUFHO1VBQUMsQ0FBQyxHQUFDLE1BQU07VUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsRUFBRSxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBRSxDQUFDLEdBQUMsQ0FBQztRQUFDLEtBQUksRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsWUFBWSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMseUJBQXlCLENBQUMsSUFBRSxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLEdBQUMsRUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDO1FBQUMsSUFBRyxFQUFFLEtBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBQztVQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1VBQUMsSUFBRyxDQUFDLENBQUMsT0FBTyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxJQUFJLElBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBQztZQUFDLElBQUksQ0FBQztjQUFDLENBQUM7Y0FBQyxDQUFDO2NBQUMsQ0FBQztjQUFDLENBQUM7Y0FBQyxDQUFDO2NBQUMsQ0FBQztjQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztjQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDO1lBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxFQUFFLElBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEVBQUUsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztVQUFBO1FBQUMsQ0FBQyxNQUFLLElBQUcsRUFBRSxFQUFFLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBRSxLQUFLLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFFLE1BQU0sS0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO1VBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDO1lBQUMsRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztZQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQztZQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQztZQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUM7VUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBQyxFQUFFLEdBQUMsRUFBRSxHQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBQyxFQUFFLEdBQUMsRUFBRSxHQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxFQUFFLElBQUUsRUFBRSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsRUFBRSxJQUFFLEVBQUUsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLElBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxJQUFFLEdBQUcsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUcsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxHQUFHLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLElBQUUsR0FBRyxFQUFDLENBQUMsS0FBSyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUssSUFBRSxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsSUFBRSxLQUFLLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsSUFBRSxLQUFLLEdBQUMsQ0FBQyxHQUFDLENBQUMsTUFBSSxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsS0FBRyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDO1FBQUE7UUFBQyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUM7UUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxLQUFHLENBQUMsQ0FBQyxZQUFZLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUk7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxHQUFHO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLElBQUUsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxJQUFFLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxJQUFFLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsSUFBRSxDQUFDO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztVQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVk7UUFBQyxJQUFHLENBQUMsRUFBQztVQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLEVBQUU7VUFBQyxJQUFJLENBQUM7WUFBQyxDQUFDO1lBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVztZQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFBQyxDQUFDLEdBQUMsVUFBVSxLQUFHLENBQUMsQ0FBQyxRQUFRO1lBQUMsQ0FBQyxHQUFDLCtDQUErQyxHQUFDLENBQUMsR0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDLFFBQVEsR0FBQyxDQUFDLEdBQUMsUUFBUSxHQUFDLENBQUM7WUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQyxJQUFHLElBQUksSUFBRSxDQUFDLENBQUMsRUFBRSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUUsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFFLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxPQUFPLElBQUUsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLE9BQU8sSUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxJQUFFLENBQUMsSUFBRSwrQkFBK0IsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUUsR0FBRyxLQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQztZQUFDLElBQUksQ0FBQztjQUFDLENBQUM7Y0FBQyxDQUFDO2NBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztZQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsRUFBRSxJQUFFLENBQUMsS0FBRyxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSTtVQUFBO1FBQUM7TUFBQyxDQUFDO01BQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxtQkFBbUIsR0FBQyxVQUFTLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUk7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTTtVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTTtVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTTtVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsV0FBVztRQUFDLElBQUcsRUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsQ0FBQyxPQUFPLElBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQztRQUFDLElBQUcsQ0FBQyxFQUFDO1VBQUMsSUFBSSxDQUFDLEdBQUMsSUFBSTtVQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQUE7UUFBQyxJQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxRQUFRLEtBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFJO1VBQUMsSUFBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLGNBQWMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEtBQUssSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsU0FBUyxHQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQTtRQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxHQUFDLEVBQUUsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLEdBQUMsRUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsR0FBQyxFQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLEdBQUc7TUFBQSxDQUFDO01BQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxtQkFBbUIsR0FBQyxVQUFTLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUk7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7UUFBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUcsQ0FBQyxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsQ0FBQyxPQUFPLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxRQUFRLEdBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQyxLQUFHLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDLEtBQUssSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLElBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxLQUFLLENBQUMsQ0FBQztNQUFBLENBQUM7SUFBQyxFQUFFLENBQUMsbVBBQW1QLEVBQUM7TUFBQyxNQUFNLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBQyxPQUFPLENBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1VBQUMsQ0FBQyxHQUFDLElBQUk7VUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLE1BQU07VUFBQyxDQUFDLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7UUFBQyxJQUFHLFFBQVEsSUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLElBQUUsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRyxRQUFRLElBQUUsT0FBTyxDQUFDLEVBQUM7VUFBQyxJQUFHLENBQUMsR0FBQztZQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLElBQUksSUFBRSxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxXQUFXLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBQyxDQUFDLENBQUMsV0FBVztVQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUFDLElBQUksSUFBRSxDQUFDLEVBQUMsSUFBRyxRQUFRLElBQUUsT0FBTyxDQUFDLEVBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUM7VUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLEVBQUUsQ0FBQyxVQUFVLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsZUFBZSxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsYUFBYSxHQUFDLFFBQVEsR0FBQyxXQUFXLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEtBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBQyxFQUFFLENBQUMsV0FBVyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLGdCQUFnQixJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsY0FBYyxHQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLEVBQUUsQ0FBQyxXQUFXLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsZ0JBQWdCLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksSUFBRSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssTUFBSSxDQUFDLENBQUMsS0FBSyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQztRQUFBO1FBQUMsS0FBSSxFQUFFLElBQUUsSUFBSSxJQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLElBQUUsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBQyxDQUFDLElBQUUsSUFBSSxJQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsSUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBQyxDQUFDLENBQUMsSUFBRSxFQUFFLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxPQUFPLE1BQUksRUFBRSxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsU0FBUyxDQUFDLElBQUUsRUFBRSxFQUFDLENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLGlCQUFpQixDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsRUFBRSxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLEtBQUssS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsS0FBSyxDQUFDLEdBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBRSxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxjQUFjLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsY0FBYyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO01BQUEsQ0FBQztNQUFDLE1BQU0sRUFBQyxDQUFDO0lBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFdBQVcsRUFBQztNQUFDLFlBQVksRUFBQyxzQkFBc0I7TUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO01BQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztNQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7TUFBQyxPQUFPLEVBQUM7SUFBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsY0FBYyxFQUFDO01BQUMsWUFBWSxFQUFDLEtBQUs7TUFBQyxNQUFNLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxxQkFBcUIsRUFBQyxzQkFBc0IsRUFBQyx5QkFBeUIsRUFBQyx3QkFBd0IsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztRQUFDLEtBQUksQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLEVBQUUsTUFBTSxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxLQUFHLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUMsRUFBRSxLQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLENBQUMsR0FBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsSUFBRSxJQUFJLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUFDLE9BQU8sQ0FBQztNQUFBLENBQUM7TUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO01BQUMsU0FBUyxFQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUM7TUFBQyxZQUFZLEVBQUMsS0FBSztNQUFDLE1BQU0sRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxxQkFBcUI7VUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEtBQUcsS0FBSyxDQUFDO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQUMsSUFBRyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLE1BQU0sS0FBRyxDQUFDLENBQUMsRUFBQztVQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsTUFBSSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLElBQUksR0FBQyxHQUFHLElBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUFBO1FBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLFNBQVMsRUFBQztJQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBQztNQUFDLFlBQVksRUFBQyxLQUFLO01BQUMsU0FBUyxFQUFDO0lBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLGFBQWEsRUFBQztNQUFDLFlBQVksRUFBQyxLQUFLO01BQUMsTUFBTSxFQUFDLENBQUM7SUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUM7TUFBQyxZQUFZLEVBQUMsU0FBUztNQUFDLE1BQU0sRUFBQyxDQUFDO0lBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDO01BQUMsTUFBTSxFQUFDLENBQUM7SUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUM7TUFBQyxNQUFNLEVBQUMsQ0FBQztJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUM7TUFBQyxNQUFNLEVBQUMsQ0FBQztJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUM7TUFBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLCtDQUErQztJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUM7TUFBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLG1EQUFtRDtJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUM7TUFBQyxZQUFZLEVBQUMsdUJBQXVCO01BQUMsTUFBTSxFQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsWUFBWSxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUE7SUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsWUFBWSxFQUFDO01BQUMsWUFBWSxFQUFDLGtCQUFrQjtNQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7TUFBQyxLQUFLLEVBQUMsQ0FBQztJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyx1QkFBdUIsRUFBQztNQUFDLE1BQU0sRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLE9BQU8sQ0FBQztNQUFBO0lBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQztNQUFDLFlBQVksRUFBQyxnQkFBZ0I7TUFBQyxNQUFNLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLGdCQUFnQixFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7TUFBQyxTQUFTLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxPQUFPLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQUE7SUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsYUFBYSxFQUFDO01BQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxtRUFBbUU7SUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsMkJBQTJCLEVBQUM7TUFBQyxNQUFNLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztVQUFDLENBQUMsR0FBQyxVQUFVLElBQUcsQ0FBQyxHQUFDLFVBQVUsR0FBQyxZQUFZO1FBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFBO0lBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBSSxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLFFBQVEsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUM7TUFBQyxHQUFHLEtBQUcsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsUUFBUSxDQUFDLEtBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxnQkFBZ0IsR0FBQyxDQUFDLEdBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsaUJBQWlCLEdBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUFDLEVBQUUsQ0FBQyx5QkFBeUIsRUFBQztNQUFDLFlBQVksRUFBQyxHQUFHO01BQUMsTUFBTSxFQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7VUFBQyxDQUFDLEdBQUMsV0FBVyxLQUFHLENBQUM7UUFBQyxPQUFNLFFBQVEsSUFBRSxPQUFPLENBQUMsSUFBRSxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxRQUFRLEtBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUMsR0FBRyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsZ0JBQWdCLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxnQkFBZ0IsSUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLFNBQVMsR0FBQyxRQUFRLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxRQUFRLEdBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztNQUFBO0lBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBSSxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLGNBQWMsSUFBRSxJQUFJLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLElBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsSUFBSSxFQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsRUFBQztVQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztVQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUcsSUFBSSxLQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQztRQUFBLENBQUMsTUFBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQztJQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUM7TUFBQyxNQUFNLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBRSxFQUFFO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztRQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxHQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBQztVQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7VUFBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUFBO1FBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLENBQUMsSUFBRSxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQTtJQUFDLENBQUMsQ0FBQztJQUFDLElBQUksRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUM7TUFBQyxJQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFFLGFBQWEsS0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLO1FBQUMsSUFBRyxLQUFLLEtBQUcsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxHQUFDLEVBQUUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLGlCQUFpQixLQUFHLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztNQUFBO0lBQUMsQ0FBQztJQUFDLEtBQUksRUFBRSxDQUFDLFlBQVksRUFBQztNQUFDLE1BQU0sRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLE9BQU8sQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQTtJQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQywwQ0FBMEMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLE9BQU0sQ0FBQyxDQUFDO01BQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxlQUFlO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7TUFBQyxJQUFHLENBQUMsSUFBRSxFQUFFLEtBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxJQUFFLEVBQUUsS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxDQUFDLGNBQWMsRUFBQztRQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsY0FBYyxFQUFDLEVBQUUsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsS0FBRyxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU0sS0FBRyxDQUFDLElBQUUsRUFBRSxLQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsMEJBQTBCLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsS0FBRyxDQUFDLEdBQUMsU0FBUyxHQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztRQUFDLENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsSUFBRSxFQUFFLEdBQUMsRUFBRSxHQUFDLEVBQUUsR0FBQyxFQUFFLEdBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLFVBQVUsSUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUFBO01BQUMsSUFBRyxDQUFDLEVBQUM7UUFBQyxPQUFLLENBQUMsR0FBRTtVQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztVQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDO1FBQUE7UUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUM7TUFBQTtNQUFDLE9BQU0sQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7TUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxFQUFDLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEVBQUMsT0FBTyxLQUFHLENBQUMsSUFBRSxNQUFNLEtBQUcsQ0FBQyxJQUFFLFFBQVEsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsR0FBQyxPQUFPLEdBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsS0FBRyxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsTUFBSSxPQUFPLEtBQUcsQ0FBQyxJQUFFLFFBQVEsS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLElBQUUsTUFBTSxLQUFHLENBQUMsSUFBRSxLQUFLLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxLQUFHLENBQUMsR0FBQyxTQUFTLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUUsRUFBRSxHQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsS0FBRyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsRUFBRSxLQUFHLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsS0FBRyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBRyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxJQUFFLElBQUksS0FBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLEtBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxLQUFLLElBQUUsQ0FBQyxHQUFDLEVBQUUsSUFBRSxJQUFJLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLE1BQU0sS0FBRyxDQUFDLElBQUUsU0FBUyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLEdBQUMsZ0JBQWdCLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLElBQUksS0FBRyxDQUFDLElBQUUsUUFBUSxLQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDO01BQUMsT0FBTyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUTtRQUFDLENBQUMsR0FBQyxJQUFJO01BQUMsSUFBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7UUFBQyxJQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUcsQ0FBQyxJQUFJLEVBQUMsT0FBSyxDQUFDLEdBQUU7VUFBQyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJO1lBQUMsSUFBRyxDQUFDLEtBQUcsQ0FBQyxDQUFDLElBQUk7Y0FBQyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFHLENBQUMsS0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBRyxDQUFDLEtBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFHLENBQUMsS0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSTtnQkFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztjQUFBO1lBQUMsT0FBSSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztVQUFDLE9BQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1FBQUEsQ0FBQyxNQUFLLE9BQUssQ0FBQyxHQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7TUFBQyxPQUFLLE9BQUssQ0FBQyxHQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLGNBQWMsR0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxjQUFjLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxVQUFVLElBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUFDLElBQUksRUFBRSxHQUFDLFNBQUEsQ0FBQSxFQUFVO01BQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7TUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLElBQUk7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsUUFBUSxLQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxJQUFJLEtBQUcsSUFBSSxDQUFDLFFBQVEsS0FBRyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQztNQUFDLElBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsS0FBSyxFQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUM7TUFBQTtNQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxRQUFRLEtBQUcsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLElBQUksQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsSUFBSSxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO01BQUMsSUFBRyxDQUFDLENBQUMsS0FBSyxFQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLEVBQUUsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLEVBQUU7UUFBQyxDQUFDLEdBQUMsRUFBRTtRQUFDLENBQUMsR0FBQyxFQUFFO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYTtNQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSTtRQUNseCtCLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO01BQUE7TUFBQyxPQUFPLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztFQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztBQUFBLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0FDWmhJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUcsTUFBTSxDQUFDLFFBQVEsR0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBVTtFQUFDLFlBQVk7O0VBQUMsSUFBSSxDQUFDLEdBQUMsUUFBUSxDQUFDLGVBQWU7SUFBQyxDQUFDLEdBQUMsTUFBTTtJQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxHQUFDLEdBQUcsS0FBRyxDQUFDLEdBQUMsT0FBTyxHQUFDLFFBQVE7UUFBQyxDQUFDLEdBQUMsUUFBUSxHQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsUUFBUSxHQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLElBQUk7TUFBQyxPQUFPLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO01BQUMsUUFBUSxFQUFDLFVBQVU7TUFBQyxHQUFHLEVBQUMsQ0FBQztNQUFDLE9BQU8sRUFBQyxPQUFPO01BQUMsSUFBSSxFQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBQyxDQUFDLEtBQUcsQ0FBQyxFQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsS0FBRyxDQUFDLEdBQUM7VUFBQyxDQUFDLEVBQUM7UUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUUsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUUsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsR0FBRyxFQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUFDLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLO1VBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSztVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUs7UUFBQyxJQUFJLENBQUMsU0FBUyxLQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFHLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsR0FBRyxDQUFDLEdBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsS0FBSyxJQUFFLElBQUksQ0FBQyxLQUFLLElBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxLQUFLLEtBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLEtBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLENBQUM7TUFBQTtJQUFDLENBQUMsQ0FBQztJQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUztFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsWUFBVTtJQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsV0FBVyxHQUFDLElBQUksSUFBRSxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO0VBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsWUFBVTtJQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsV0FBVyxHQUFDLElBQUksSUFBRSxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO0VBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUM7SUFBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO0VBQUEsQ0FBQztBQUFBLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmN1c3RvbS1zZWxlY3RcIikuZm9yRWFjaChjdXN0b21TZWxlY3QgPT4ge1xuXHRjb25zdCBzZWxlY3RCdG4gPSBjdXN0b21TZWxlY3QucXVlcnlTZWxlY3RvcihcIi5zZWxlY3QtYnV0dG9uXCIpO1xuXHRjb25zdCBzZWxlY3RlZFZhbHVlID0gY3VzdG9tU2VsZWN0LnF1ZXJ5U2VsZWN0b3IoXCIuc2VsZWN0ZWQtdmFsdWVcIik7XG5cdGNvbnN0IGhhbmRsZXIgPSBmdW5jdGlvbihlbG0pIHtcblx0XHRjb25zdCBjdXN0b21DaGFuZ2VFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY3VzdG9tLXNlbGVjdC1jaGFuZ2UnLCB7XG5cdFx0XHRkZXRhaWw6IHtcblx0XHRcdFx0c2VsZWN0ZWRPcHRpb246IGVsbVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNlbGVjdGVkVmFsdWUudGV4dENvbnRlbnQgPSBlbG0udGV4dENvbnRlbnQ7XG5cdFx0Y3VzdG9tU2VsZWN0LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0Y3VzdG9tU2VsZWN0LmRpc3BhdGNoRXZlbnQoY3VzdG9tQ2hhbmdlRXZlbnQpO1xuXG5cdH1cblx0c2VsZWN0QnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG5cdFx0Y3VzdG9tU2VsZWN0LmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XG5cdFx0c2VsZWN0QnRuLnNldEF0dHJpYnV0ZShcblx0XHRcdFwiYXJpYS1leHBhbmRlZFwiLFxuXHRcdFx0c2VsZWN0QnRuLmdldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIikgPT09IFwidHJ1ZVwiID8gXCJmYWxzZVwiIDogXCJ0cnVlXCJcblx0XHQpO1xuXHR9KTtcblxuXHRjdXN0b21TZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0aWYgKGUudGFyZ2V0Lm1hdGNoZXMoJ2xhYmVsJykpIHtcblxuXHRcdFx0Y29uc3QgYWxsSXRlbXMgPSBjdXN0b21TZWxlY3QucXVlcnlTZWxlY3RvckFsbCgnbGknKTtcblx0XHRcdGFsbEl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcblx0XHRcdGNvbnN0IGNsaWNrZWRQbGFuID0gZS50YXJnZXQuY2xvc2VzdCgnbGknKTtcblxuXHRcdFx0aWYgKGNsaWNrZWRQbGFuKSB7XG5cdFx0XHRcdGNsaWNrZWRQbGFuLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuXHRcdFx0XHRoYW5kbGVyKGNsaWNrZWRQbGFuKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcblx0XHRpZiAoIWN1c3RvbVNlbGVjdC5jb250YWlucyhlLnRhcmdldCkpIHtcblx0XHRcdGN1c3RvbVNlbGVjdC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdFx0c2VsZWN0QnRuLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgXCJmYWxzZVwiKTtcblx0XHR9XG5cdH0pO1xufSk7IiwidmFyICQgPSBqUXVlcnk7XG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe1xuICAgIC8qKlxuICAgICAqIFJlZnJlc2ggTGljZW5zZSBkYXRhXG4gICAgICovXG4gICAgdmFyIF9pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAkKCcjd3ByLWFjdGlvbi1yZWZyZXNoX2FjY291bnQnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmKCFfaXNSZWZyZXNoaW5nKXtcbiAgICAgICAgICAgIHZhciBidXR0b24gPSAkKHRoaXMpO1xuICAgICAgICAgICAgdmFyIGFjY291bnQgPSAkKCcjd3ByLWFjY291bnQtZGF0YScpO1xuICAgICAgICAgICAgdmFyIGV4cGlyZSA9ICQoJyN3cHItZXhwaXJhdGlvbi1kYXRhJyk7XG5cbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIF9pc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYnV0dG9uLnRyaWdnZXIoICdibHVyJyApO1xuXG5cdFx0XHQvLyBTdGFydCBwb2xsaW5nIGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmcuYWRkQ2xhc3MoJ3dwci1pc0xvYWRpbmcnKTtcbiAgICAgICAgICAgIGV4cGlyZS5yZW1vdmVDbGFzcygnd3ByLWlzVmFsaWQgd3ByLWlzSW52YWxpZCcpO1xuXG4gICAgICAgICAgICAkLnBvc3QoXG4gICAgICAgICAgICAgICAgYWpheHVybCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3JvY2tldF9yZWZyZXNoX2N1c3RvbWVyX2RhdGEnLFxuICAgICAgICAgICAgICAgICAgICBfYWpheF9ub25jZTogcm9ja2V0X2FqYXhfZGF0YS5ub25jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5yZW1vdmVDbGFzcygnd3ByLWlzTG9hZGluZycpO1xuICAgICAgICAgICAgICAgICAgICBidXR0b24uYWRkQ2xhc3MoJ3dwci1pc0hpZGRlbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuaHRtbChyZXNwb25zZS5kYXRhLmxpY2Vuc2VfdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBpcmUuYWRkQ2xhc3MocmVzcG9uc2UuZGF0YS5saWNlbnNlX2NsYXNzKS5odG1sKHJlc3BvbnNlLmRhdGEubGljZW5zZV9leHBpcmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUNsYXNzKCd3cHItaWNvbi1yZWZyZXNoIHdwci1pc0hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5hZGRDbGFzcygnd3ByLWljb24tY2hlY2snKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUNsYXNzKCd3cHItaWNvbi1yZWZyZXNoIHdwci1pc0hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5hZGRDbGFzcygnd3ByLWljb24tY2xvc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZUTCA9IG5ldyBUaW1lbGluZUxpdGUoe29uQ29tcGxldGU6ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldChidXR0b24sIHtjc3M6e2NsYXNzTmFtZTonKz13cHItaXNIaWRkZW4nfX0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXQoYnV0dG9uLCB7Y3NzOntjbGFzc05hbWU6Jy09d3ByLWljb24tY2hlY2snfX0sIDAuMjUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXQoYnV0dG9uLCB7Y3NzOntjbGFzc05hbWU6Jy09d3ByLWljb24tY2xvc2UnfX0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXQoYnV0dG9uLCB7Y3NzOntjbGFzc05hbWU6Jys9d3ByLWljb24tcmVmcmVzaCd9fSwgMC4yNSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldChidXR0b24sIHtjc3M6e2NsYXNzTmFtZTonLT13cHItaXNIaWRkZW4nfX0pXG4gICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU2F2ZSBUb2dnbGUgb3B0aW9uIHZhbHVlcyBvbiBjaGFuZ2VcbiAgICAgKi9cbiAgICAkKCcud3ByLXJhZGlvIGlucHV0W3R5cGU9Y2hlY2tib3hdJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB2YXIgbmFtZSAgPSAkKHRoaXMpLmF0dHIoJ2lkJyk7XG4gICAgICAgIHZhciB2YWx1ZSA9ICQodGhpcykucHJvcCgnY2hlY2tlZCcpID8gMSA6IDA7XG5cblx0XHR2YXIgZXhjbHVkZWQgPSBbICdjbG91ZGZsYXJlX2F1dG9fc2V0dGluZ3MnLCAnY2xvdWRmbGFyZV9kZXZtb2RlJywgJ2FuYWx5dGljc19lbmFibGVkJyBdO1xuXHRcdGlmICggZXhjbHVkZWQuaW5kZXhPZiggbmFtZSApID49IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG4gICAgICAgICQucG9zdChcbiAgICAgICAgICAgIGFqYXh1cmwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAncm9ja2V0X3RvZ2dsZV9vcHRpb24nLFxuICAgICAgICAgICAgICAgIF9hamF4X25vbmNlOiByb2NrZXRfYWpheF9kYXRhLm5vbmNlLFxuICAgICAgICAgICAgICAgIG9wdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24ocmVzcG9uc2UpIHt9XG4gICAgICAgICk7XG5cdH0pO1xuXG5cdC8qKlxuICAgICAqIFNhdmUgZW5hYmxlIENQQ1NTIGZvciBtb2JpbGVzIG9wdGlvbi5cbiAgICAgKi9cbiAgICAkKCcjd3ByLWFjdGlvbi1yb2NrZXRfZW5hYmxlX21vYmlsZV9jcGNzcycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0JCgnI3dwci1hY3Rpb24tcm9ja2V0X2VuYWJsZV9tb2JpbGVfY3Bjc3MnKS5hZGRDbGFzcygnd3ByLWlzTG9hZGluZycpO1xuXG4gICAgICAgICQucG9zdChcbiAgICAgICAgICAgIGFqYXh1cmwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAncm9ja2V0X2VuYWJsZV9tb2JpbGVfY3Bjc3MnLFxuICAgICAgICAgICAgICAgIF9hamF4X25vbmNlOiByb2NrZXRfYWpheF9kYXRhLm5vbmNlXG4gICAgICAgICAgICB9LFxuXHRcdFx0ZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdFx0aWYgKCByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdC8vIEhpZGUgTW9iaWxlIENQQ1NTIGJ0biBvbiBzdWNjZXNzLlxuXHRcdFx0XHRcdCQoJyN3cHItYWN0aW9uLXJvY2tldF9lbmFibGVfbW9iaWxlX2NwY3NzJykuaGlkZSgpO1xuXHRcdFx0XHRcdCQoJy53cHItaGlkZS1vbi1jbGljaycpLmhpZGUoKTtcblx0XHRcdFx0XHQkKCcud3ByLXNob3ctb24tY2xpY2snKS5zaG93KCk7XG5cdFx0XHRcdFx0JCgnI3dwci1hY3Rpb24tcm9ja2V0X2VuYWJsZV9tb2JpbGVfY3Bjc3MnKS5yZW1vdmVDbGFzcygnd3ByLWlzTG9hZGluZycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTYXZlIGVuYWJsZSBHb29nbGUgRm9udHMgT3B0aW1pemF0aW9uIG9wdGlvbi5cbiAgICAgKi9cbiAgICAkKCcjd3ByLWFjdGlvbi1yb2NrZXRfZW5hYmxlX2dvb2dsZV9mb250cycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0JCgnI3dwci1hY3Rpb24tcm9ja2V0X2VuYWJsZV9nb29nbGVfZm9udHMnKS5hZGRDbGFzcygnd3ByLWlzTG9hZGluZycpO1xuXG4gICAgICAgICQucG9zdChcbiAgICAgICAgICAgIGFqYXh1cmwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAncm9ja2V0X2VuYWJsZV9nb29nbGVfZm9udHMnLFxuICAgICAgICAgICAgICAgIF9hamF4X25vbmNlOiByb2NrZXRfYWpheF9kYXRhLm5vbmNlXG4gICAgICAgICAgICB9LFxuXHRcdFx0ZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdFx0aWYgKCByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdC8vIEhpZGUgTW9iaWxlIENQQ1NTIGJ0biBvbiBzdWNjZXNzLlxuXHRcdFx0XHRcdCQoJyN3cHItYWN0aW9uLXJvY2tldF9lbmFibGVfZ29vZ2xlX2ZvbnRzJykuaGlkZSgpO1xuXHRcdFx0XHRcdCQoJy53cHItaGlkZS1vbi1jbGljaycpLmhpZGUoKTtcblx0XHRcdFx0XHQkKCcud3ByLXNob3ctb24tY2xpY2snKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICQoJyN3cHItYWN0aW9uLXJvY2tldF9lbmFibGVfZ29vZ2xlX2ZvbnRzJykucmVtb3ZlQ2xhc3MoJ3dwci1pc0xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgJCgnI21pbmlmeV9nb29nbGVfZm9udHMnKS52YWwoMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgICQoICcjcm9ja2V0LWRpc21pc3MtcHJvbW90aW9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbiggZSApIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICQucG9zdChcbiAgICAgICAgICAgIGFqYXh1cmwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAncm9ja2V0X2Rpc21pc3NfcHJvbW8nLFxuICAgICAgICAgICAgICAgIG5vbmNlOiByb2NrZXRfYWpheF9kYXRhLm5vbmNlXG4gICAgICAgICAgICB9LFxuXHRcdFx0ZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdFx0aWYgKCByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdCQoJyNyb2NrZXQtcHJvbW8tYmFubmVyJykuaGlkZSggJ3Nsb3cnICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cbiAgICAgICAgKTtcbiAgICB9ICk7XG5cbiAgICAkKCAnI3JvY2tldC1kaXNtaXNzLXJlbmV3YWwnICkub24oICdjbGljaycsIGZ1bmN0aW9uKCBlICkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgJC5wb3N0KFxuICAgICAgICAgICAgYWpheHVybCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdyb2NrZXRfZGlzbWlzc19yZW5ld2FsJyxcbiAgICAgICAgICAgICAgICBub25jZTogcm9ja2V0X2FqYXhfZGF0YS5ub25jZVxuICAgICAgICAgICAgfSxcblx0XHRcdGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG5cdFx0XHRcdGlmICggcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHQkKCcjcm9ja2V0LXJlbmV3YWwtYmFubmVyJykuaGlkZSggJ3Nsb3cnICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cbiAgICAgICAgKTtcbiAgICB9ICk7XG5cdCQoICcjd3ByLXVwZGF0ZS1leGNsdXNpb24tbGlzdCcgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdCQoJyN3cHItdXBkYXRlLWV4Y2x1c2lvbi1tc2cnKS5odG1sKCcnKTtcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiByb2NrZXRfYWpheF9kYXRhLnJlc3RfdXJsLFxuXHRcdFx0YmVmb3JlU2VuZDogZnVuY3Rpb24gKCB4aHIgKSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCAnWC1XUC1Ob25jZScsIHJvY2tldF9hamF4X2RhdGEucmVzdF9ub25jZSApO1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uLCAqLyo7cT0wLjEnICk7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCAnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nICk7XG5cdFx0XHR9LFxuXHRcdFx0bWV0aG9kOiBcIlBVVFwiLFxuXHRcdFx0c3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VzKSB7XG5cdFx0XHRcdGxldCBleGNsdXNpb25fbXNnX2NvbnRhaW5lciA9ICQoJyN3cHItdXBkYXRlLWV4Y2x1c2lvbi1tc2cnKTtcblx0XHRcdFx0ZXhjbHVzaW9uX21zZ19jb250YWluZXIuaHRtbCgnJyk7XG5cdFx0XHRcdGlmICggdW5kZWZpbmVkICE9PSByZXNwb25zZXNbJ3N1Y2Nlc3MnXSApIHtcblx0XHRcdFx0XHRleGNsdXNpb25fbXNnX2NvbnRhaW5lci5hcHBlbmQoICc8ZGl2IGNsYXNzPVwibm90aWNlIG5vdGljZS1lcnJvclwiPicgKyByZXNwb25zZXNbJ21lc3NhZ2UnXSArICc8L2Rpdj4nICk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdE9iamVjdC5rZXlzKCByZXNwb25zZXMgKS5mb3JFYWNoKCggcmVzcG9uc2Vfa2V5ICkgPT4ge1xuXHRcdFx0XHRcdGV4Y2x1c2lvbl9tc2dfY29udGFpbmVyLmFwcGVuZCggJzxzdHJvbmc+JyArIHJlc3BvbnNlX2tleSArICc6IDwvc3Ryb25nPicgKTtcblx0XHRcdFx0XHRleGNsdXNpb25fbXNnX2NvbnRhaW5lci5hcHBlbmQoIHJlc3BvbnNlc1tyZXNwb25zZV9rZXldWydtZXNzYWdlJ10gKTtcblx0XHRcdFx0XHRleGNsdXNpb25fbXNnX2NvbnRhaW5lci5hcHBlbmQoICc8YnI+JyApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSApO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIG1vYmlsZSBjYWNoZSBvcHRpb24uXG4gICAgICovXG4gICAgJCgnI3dwcl9lbmFibGVfbW9iaWxlX2NhY2hlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHQkKCcjd3ByX2VuYWJsZV9tb2JpbGVfY2FjaGUnKS5hZGRDbGFzcygnd3ByLWlzTG9hZGluZycpO1xuXG4gICAgICAgICQucG9zdChcbiAgICAgICAgICAgIGFqYXh1cmwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAncm9ja2V0X2VuYWJsZV9tb2JpbGVfY2FjaGUnLFxuICAgICAgICAgICAgICAgIF9hamF4X25vbmNlOiByb2NrZXRfYWpheF9kYXRhLm5vbmNlXG4gICAgICAgICAgICB9LFxuXHRcdFx0ZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdFx0aWYgKCByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdC8vIEhpZGUgTW9iaWxlIGNhY2hlIGVuYWJsZSBidXR0b24gb24gc3VjY2Vzcy5cblx0XHRcdFx0XHQkKCcjd3ByX2VuYWJsZV9tb2JpbGVfY2FjaGUnKS5oaWRlKCk7XG5cdFx0XHRcdFx0JCgnI3dwcl9tb2JpbGVfY2FjaGVfZGVmYXVsdCcpLmhpZGUoKTtcblx0XHRcdFx0XHQkKCcjd3ByX21vYmlsZV9jYWNoZV9yZXNwb25zZScpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgJCgnI3dwcl9lbmFibGVfbW9iaWxlX2NhY2hlJykucmVtb3ZlQ2xhc3MoJ3dwci1pc0xvYWRpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdmFsdWVzIG9mIG1vYmlsZSBjYWNoZSBhbmQgc2VwYXJhdGUgY2FjaGUgZmlsZXMgZm9yIG1vYmlsZXMgb3B0aW9uIHRvIDEuXG4gICAgICAgICAgICAgICAgICAgICQoJyNjYWNoZV9tb2JpbGUnKS52YWwoMSk7XG4gICAgICAgICAgICAgICAgICAgICQoJyNkb19jYWNoaW5nX21vYmlsZV9maWxlcycpLnZhbCgxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuICAgICAgICApO1xuICAgIH0pO1xufSk7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHtcblx0Y29uc3QgYW5hbHl0aWNzQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5hbHl0aWNzX2VuYWJsZWQnKTtcblxuXHRpZiAoYW5hbHl0aWNzQ2hlY2tib3gpIHtcblx0XHRhbmFseXRpY3NDaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IGlzQ2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcblxuXHRcdFx0Ly8gVXBkYXRlIHRoZSBnbG9iYWwgbWl4cGFuZWwgZGF0YSBvcHRpbiBzdGF0ZSBpbW1lZGlhdGVseVxuXHRcdFx0aWYgKHR5cGVvZiByb2NrZXRfbWl4cGFuZWxfZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0cm9ja2V0X21peHBhbmVsX2RhdGEub3B0aW5fZW5hYmxlZCA9IGlzQ2hlY2tlZCA/ICcxJyA6ICcwJztcblx0XHRcdH1cblxuXHRcdFx0ZmV0Y2goYWpheHVybCwge1xuXHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdCdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ym9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG5cdFx0XHRcdFx0YWN0aW9uOiAncm9ja2V0X3RvZ2dsZV9vcHRpbicsXG5cdFx0XHRcdFx0dmFsdWU6IGlzQ2hlY2tlZCA/IDEgOiAwLFxuXHRcdFx0XHRcdF9hamF4X25vbmNlOiByb2NrZXRfYWpheF9kYXRhLm5vbmNlLFxuXHRcdFx0XHR9KVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn0pO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKSB7XG5cdC8qKlxuXHQgKiBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIHdpdGggUHJvZ3Jlc3NpdmUgUG9sbGluZy5cblx0ICovXG5cblx0XHQvLyA9PT09IENvbmZpZ3VyYXRpb24gPT09PVxuXHRjb25zdCBQT0xMX0JBU0VfSU5URVJWQUwgPSAyMDAwOyAgIC8vIFN0YXJ0IHBvbGxpbmcgYXQgMiBzZWNvbmRzXG5cdGNvbnN0IFBPTExfTUFYX0lOVEVSVkFMID0gNTAwMDsgICAvLyBNYXggcG9sbGluZyBpbnRlcnZhbCAoNSBzZWNvbmRzKVxuXG5cdC8vID09PT0gU3RhdGUgPT09PVxuXHRsZXQgcm9ja2V0SW5zaWdodHNJZHMgPSBBcnJheS5pc0FycmF5KHdpbmRvdy5yb2NrZXRfYWpheF9kYXRhPy5yb2NrZXRfaW5zaWdodHNfaWRzKSA/IHdpbmRvdy5yb2NrZXRfYWpheF9kYXRhLnJvY2tldF9pbnNpZ2h0c19pZHMuc2xpY2UoKSA6IFtdO1xuXHRsZXQgcG9sbEludGVydmFsID0gUE9MTF9CQVNFX0lOVEVSVkFMO1xuXHRsZXQgcG9sbFRpbWVyID0gbnVsbDtcblx0bGV0IGhhc0NyZWRpdCA9IHRydWU7IC8vIFRyYWNrIGNyZWRpdCBzdGF0dXNcbiAgICBsZXQgZ2xvYmFsU2NvcmVEYXRhID0ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBzdGF0dXM6ICcnLFxuICAgICAgICAgICAgc2NvcmU6IDAsXG4gICAgICAgICAgICBwYWdlc19udW06IDBcbiAgICAgICAgfSxcbiAgICAgICAgaHRtbDogJycsXG4gICAgICAgIHJvd19odG1sOiAnJyxcblx0XHRkaXNhYmxlZF9idG5faHRtbDoge1xuXHRcdFx0Z2xvYmFsX3Njb3JlX3dpZGdldDogJycsXG5cdFx0XHRyb2NrZXRfaW5zaWdodHM6ICcnXG5cdFx0fVxuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXplIGdsb2JhbFNjb3JlRGF0YSBmcm9tIGxvY2FsaXplZCBzY3JpcHQgZGF0YSBpZiBhdmFpbGFibGVcbiAgICBpZiAod2luZG93LnJvY2tldF9hamF4X2RhdGE/Lmdsb2JhbF9zY29yZV9kYXRhKSB7XG4gICAgICAgIGdsb2JhbFNjb3JlRGF0YSA9IHdpbmRvdy5yb2NrZXRfYWpheF9kYXRhLmdsb2JhbF9zY29yZV9kYXRhO1xuICAgIH1cblxuXHQvLyA9PT09IERPTSBTZWxlY3RvcnMgPT09PVxuXHRjb25zdCAkcGFnZVVybElucHV0ID0gJCgnI3dwci1zcGVlZC1yYWRhci11cmwtaW5wdXQnKTtcblx0Y29uc3QgJHRhYmxlQm9keSA9ICQoJy53cHItcmktdXJscy10YWJsZSB0Ym9keScpO1xuXHRjb25zdCAkdGFibGUgPSAkKCcud3ByLXJpLXVybHMtdGFibGUnKTtcblxuXHQvLyA9PT09IFV0aWxpdHkgRnVuY3Rpb25zID09PT1cblx0ZnVuY3Rpb24gaXNWYWxpZFVybChpbnB1dCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB1cmwgPSBuZXcgVVJMKGlucHV0KTtcblx0XHRcdHJldHVybiB1cmwuaG9zdG5hbWUuaW5jbHVkZXMoJy4nKSAmJiB1cmwuaG9zdG5hbWUuc3BsaXQoJy4nKS5wb3AoKS5sZW5ndGggPiAwO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFkZElkcyhuZXdJZCkge1xuXHRcdGlmICghcm9ja2V0SW5zaWdodHNJZHMuaW5jbHVkZXMobmV3SWQpKSB7XG5cdFx0XHRyb2NrZXRJbnNpZ2h0c0lkcy5wdXNoKG5ld0lkKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBoYXNJZChpZCkge1xuXHRcdHJldHVybiByb2NrZXRJbnNpZ2h0c0lkcy5pbmNsdWRlcyhpZCk7XG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmVJZChpZCkge1xuXHRcdC8vIEVuc3VyZSB0aGF0IHRoZSBpZCB0byBiZSByZW1vdmVkIGlzIGFuIGludGVnZXIgZm9yIGFjY3VyYXRlIGNvbXBhcmlzb24uXG5cdFx0Y29uc3QgaWRUb1JlbW92ZSA9IHBhcnNlSW50KGlkLCAxMCk7XG5cdFx0cm9ja2V0SW5zaWdodHNJZHMgPSByb2NrZXRJbnNpZ2h0c0lkcy5maWx0ZXIoeCA9PiBwYXJzZUludCh4LCAxMCkgIT09IGlkVG9SZW1vdmUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlUXVvdGFCYW5uZXIoY2FuQWRkUGFnZXMpIHtcblx0XHRjb25zdCAkc3VtbWFyeUluZm8gICAgPSAkKCcud3ByLXJpLXN1bW1hcnktaW5mbycpO1xuXHRcdGNvbnN0IGlzRnJlZSAgPSB3aW5kb3cucm9ja2V0X2FqYXhfZGF0YT8uaXNfZnJlZSA9PT0gJzEnO1xuXHRcdGNvbnN0ICRxdW90YUJhbm5lciA9IGlzRnJlZSA/ICQoJyN3cHItcmktcXVvdGEtYmFubmVyJykgOiAkKCcjcm9ja2V0X2luc2lnaHRzX3N1cnZleScpO1xuXG5cdFx0Ly8gU2hvdyBiYW5uZXIgaWYgVVJMIGxpbWl0IHJlYWNoZWQgT1Igbm8gY3JlZGl0cyBsZWZ0IChtYXRjaGluZyBQSFAgbG9naWMgaW4gU3Vic2NyaWJlci5waHAgbGluZSAzOTgpLlxuXHRcdGNvbnN0IHNob3VsZFNob3dCYW5uZXIgPSBjYW5BZGRQYWdlcyA9PT0gZmFsc2UgfHwgIWhhc0NyZWRpdDtcblxuXHRcdGlmIChzaG91bGRTaG93QmFubmVyKSB7XG5cdFx0XHQkc3VtbWFyeUluZm8uaGlkZSgpO1xuXHRcdFx0JHF1b3RhQmFubmVyLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN1bW1hcnlJbmZvLnNob3coKTtcblx0XHRcdCRxdW90YUJhbm5lci5hZGRDbGFzcygnaGlkZGVuJyk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlQ3JlZGl0U3RhdGUocmVzcG9uc2VIYXNDcmVkaXQpIHtcblx0XHRpZiAocmVzcG9uc2VIYXNDcmVkaXQgIT09IHVuZGVmaW5lZCAmJiBoYXNDcmVkaXQgIT09IHJlc3BvbnNlSGFzQ3JlZGl0KSB7XG5cdFx0XHRoYXNDcmVkaXQgPSByZXNwb25zZUhhc0NyZWRpdDtcblxuXHRcdFx0Ly8gVXBkYXRlIGFsbCByZXRlc3QgYnV0dG9ucyB3aGVuIGNyZWRpdCBzdGF0dXMgY2hhbmdlc1xuXHRcdFx0dXBkYXRlQWxsUmV0ZXN0QnV0dG9ucygpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZUFsbFJldGVzdEJ1dHRvbnMoKSB7XG5cdFx0Y29uc3QgcmV0ZXN0QnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy53cHItYWN0aW9uLXNwZWVkX3JhZGFyX3JlZnJlc2gnKTtcblxuXHRcdHJldGVzdEJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuXHRcdFx0Y29uc3Qgcm93ID0gYnV0dG9uLmNsb3Nlc3QoJy53cHItcmktaXRlbScpO1xuXHRcdFx0aWYgKCFyb3cpIHJldHVybjtcblxuXHRcdFx0Ly8gR2V0IHRoZSByb3cgSUQgYW5kIGNoZWNrIGlmIGl0J3MgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZFxuXHRcdFx0Y29uc3Qgcm93SWQgPSBwYXJzZUludChyb3cuZGF0YXNldC5yb2NrZXRJbnNpZ2h0c0lkLCAxMCk7XG5cdFx0XHRjb25zdCBpc1J1bm5pbmcgPSByb2NrZXRJbnNpZ2h0c0lkcy5pbmNsdWRlcyhyb3dJZCk7XG5cblx0XHRcdGlmICghaGFzQ3JlZGl0IHx8IGlzUnVubmluZykge1xuXHRcdFx0XHQvLyBEaXNhYmxlIGJ1dHRvblxuXHRcdFx0XHRidXR0b24uY2xhc3NMaXN0LmFkZCgnd3ByLXJpLWFjdGlvbi0tZGlzYWJsZWQnKTtcblx0XHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAndHJ1ZScpO1xuXG5cdFx0XHRcdGlmICghaGFzQ3JlZGl0KSB7XG5cdFx0XHRcdFx0Ly8gQWRkIHRvb2x0aXAgZm9yIG5vIGNyZWRpdFxuXHRcdFx0XHRcdGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCd3cHItYnRuLXdpdGgtdG9vbC10aXAnKTtcblx0XHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCd0aXRsZScsIHdpbmRvdy5yb2NrZXRfYWpheF9kYXRhPy5yb2NrZXRfaW5zaWdodHNfbm9fY3JlZGl0X3Rvb2x0aXAgfHwgJ1VwZ3JhZGUgeW91ciBwbGFuIHRvIGdldCBhY2Nlc3MgdG8gcmUtdGVzdCBwZXJmb3JtYW5jZSBvciBydW4gbmV3IHRlc3RzJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEVuYWJsZSBidXR0b25cblx0XHRcdFx0YnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ3dwci1yaS1hY3Rpb24tLWRpc2FibGVkJywgJ3dwci1idG4td2l0aC10b29sLXRpcCcpO1xuXHRcdFx0XHRidXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuXHRcdFx0XHRidXR0b24ucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXRQb2xsaW5nKCkge1xuXHRcdGlmIChwb2xsVGltZXIpIHtcblx0XHRcdGNsZWFyVGltZW91dChwb2xsVGltZXIpO1xuXHRcdFx0cG9sbFRpbWVyID0gbnVsbDtcblx0XHR9XG5cdFx0cG9sbEludGVydmFsID0gUE9MTF9CQVNFX0lOVEVSVkFMO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2NoZWR1bGVQb2xsaW5nKCkge1xuXHRcdGlmIChyb2NrZXRJbnNpZ2h0c0lkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRwb2xsVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0Z2V0UmVzdWx0cygpO1xuXHRcdFx0fSwgcG9sbEludGVydmFsKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbmNyZW1lbnRQb2xsaW5nKCkge1xuXHRcdHBvbGxJbnRlcnZhbCA9IE1hdGgubWluKHBvbGxJbnRlcnZhbCAqIDEuMywgUE9MTF9NQVhfSU5URVJWQUwpOyAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmXG5cdH1cblxuICAgIGZ1bmN0aW9uIGlzT25EYXNoYm9hcmQoKSB7XG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgIHJldHVybiB1cmxQYXJhbXMuZ2V0KCdwYWdlJykgPT09ICd3cHJvY2tldCcgJiYgd2luZG93LmxvY2F0aW9uLmhhc2ggPT09ICcjZGFzaGJvYXJkJztcbiAgICB9XG5cblx0ZnVuY3Rpb24gaXNPblJvY2tldEluc2lnaHRzKCkge1xuXHRcdGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdFx0cmV0dXJuIHVybFBhcmFtcy5nZXQoJ3BhZ2UnKSA9PT0gJ3dwcm9ja2V0JyAmJiB3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gJyNyb2NrZXRfaW5zaWdodHMnO1xuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlR2xvYmFsU2NvcmVSb3coZ2xvYmFsU2NvcmVEYXRhKXtcblx0XHRjb25zdCAkdGFibGVHbG9iYWxTY29yZSA9ICQoJy53cHItcmktdXJscy10YWJsZSAud3ByLWdsb2JhbC1zY29yZScpO1xuXHRcdGlmICgkdGFibGVHbG9iYWxTY29yZS5sZW5ndGggPiAwKXtcblx0XHRcdCR0YWJsZUdsb2JhbFNjb3JlLnJlcGxhY2VXaXRoKGdsb2JhbFNjb3JlRGF0YS5yb3dfaHRtbCk7XG5cdFx0fWVsc2UgaWYgKCR0YWJsZUJvZHkubGVuZ3RoID4gMCkge1xuXHRcdFx0JHRhYmxlQm9keS5wcmVwZW5kKGdsb2JhbFNjb3JlRGF0YS5yb3dfaHRtbCk7XG5cdFx0fVxuXHRcdGRlY2lkZUdsb2JhbFNjb3JlVG9VcGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBnbG9iYWwgc2NvcmUgVUkgd2lkZ2V0IG9yIHRhYmxlIHJvdyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgbWVudS5cblx0ICogV2hlbiB0aGUgZGFzaGJvYXJkIG9yIHJvY2tldCBpbnNpZ2h0cyBtZW51IGlzIGNsaWNrZWQsIHRoaXMgZnVuY3Rpb24gdXBkYXRlc1xuXHQgKiB0aGUgY29ycmVzcG9uZGluZyBnbG9iYWwgc2NvcmUgZGlzcGxheSBhZnRlciBhIHNob3J0IGRlbGF5LlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjaWRlR2xvYmFsU2NvcmVUb1VwZGF0ZSgpIHtcblx0XHRpZiAoJycgPT09IGdsb2JhbFNjb3JlRGF0YS5odG1sKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCBnbG9iYWxTY29yZVdpZGdldHMgPSAkKCcud3ByLWdsb2JhbC1zY29yZS13aWRnZXQnKTtcblxuXHRcdGlmIChnbG9iYWxTY29yZVdpZGdldHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gVXBkYXRlIGFsbCBnbG9iYWwgc2NvcmUgd2lkZ2V0IGluc3RhbmNlcy5cblx0XHRnbG9iYWxTY29yZVdpZGdldHMuaHRtbChnbG9iYWxTY29yZURhdGEuaHRtbCk7XG5cblx0XHQvLyBEaXNhYmxlIFwiQWRkIFBhZ2VzXCIgYnV0dG9uIG9uIGdsb2JhbCBzY29yZSB3aWRnZXQuXG5cdFx0aWYgKCEoJ2Rpc2FibGVkX2J0bl9odG1sJyBpbiBnbG9iYWxTY29yZURhdGEpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JCgnLndwci1nbG9iYWwtc2NvcmUtd2lkZ2V0IC53cHItZ2xvYmFsLXNjb3JlLXdpZGdldC1idG4td3JhcHBlcicpLmh0bWwoZ2xvYmFsU2NvcmVEYXRhLmRpc2FibGVkX2J0bl9odG1sLmdsb2JhbF9zY29yZV93aWRnZXQpO1xuXHR9XG5cblx0Ly8gPT09PSBBSkFYIEhhbmRsZXJzID09PT1cblx0ZnVuY3Rpb24gZ2V0UmVzdWx0cygpIHtcblx0XHRpZiAocm9ja2V0SW5zaWdodHNJZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXNldFBvbGxpbmcoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR3aW5kb3cud3AuYXBpRmV0Y2goXG5cdFx0XHR7XG5cdFx0XHRcdHBhdGg6IHdpbmRvdy53cC51cmwuYWRkUXVlcnlBcmdzKCAnL3dwLXJvY2tldC92MS9yb2NrZXQtaW5zaWdodHMvcGFnZXMvcHJvZ3Jlc3MnLCB7IGlkczogcm9ja2V0SW5zaWdodHNJZHMgfSApLFxuXHRcdFx0fVxuXHRcdCkudGhlbiggKCByZXNwb25zZSApID0+IHtcblx0XHRcdGlmIChyZXNwb25zZS5zdWNjZXNzICYmIEFycmF5LmlzQXJyYXkocmVzcG9uc2UucmVzdWx0cykpIHtcblx0XHRcdFx0Ly8gVXBkYXRlIGNyZWRpdCBzdGF0dXNcblx0XHRcdFx0dXBkYXRlQ3JlZGl0U3RhdGUocmVzcG9uc2UuaGFzX2NyZWRpdCk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHF1b3RhIGJhbm5lciB2aXNpYmlsaXR5XG5cdFx0XHRcdHVwZGF0ZVF1b3RhQmFubmVyKHJlc3BvbnNlLmNhbl9hZGRfcGFnZXMpO1xuXG5cdFx0XHRcdC8vIFVwZGF0ZSBnbG9iYWwgc2NvcmUgZGF0YSBhbmQgd2lkZ2V0IHdoZW4gc3RhdHVzIHx8IHBhZ2UgY291bnQgY2hhbmdlcy5cblx0XHRcdFx0aWYgKGdsb2JhbFNjb3JlRGF0YS5kYXRhLnN0YXR1cyAhPT0gcmVzcG9uc2UuZ2xvYmFsX3Njb3JlX2RhdGEuZGF0YS5zdGF0dXMgfHwgZ2xvYmFsU2NvcmVEYXRhLmRhdGEucGFnZXNfbnVtICE9PSByZXNwb25zZS5nbG9iYWxfc2NvcmVfZGF0YS5kYXRhLnBhZ2VzX251bSkge1xuXHRcdFx0XHRcdC8vIFVwZGF0ZSBnbG9iYWwgc2NvcmUgZGF0YS5cblx0XHRcdFx0XHRnbG9iYWxTY29yZURhdGEgPSByZXNwb25zZS5nbG9iYWxfc2NvcmVfZGF0YTtcblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBhbGwgZ2xvYmFsIHNjb3JlIHdpZGdldCBpbnN0YW5jZXMuXG5cdFx0XHRcdFx0JCgnLndwci1nbG9iYWwtc2NvcmUtd2lkZ2V0JykuaHRtbChyZXNwb25zZS5nbG9iYWxfc2NvcmVfZGF0YS5odG1sKTtcblx0XHRcdFx0XHQvLyBVcGRhdGUgZ2xvYmFsIHNjb3JlIHJvdyBpbiB0YWJsZSBpZiBvbiBSb2NrZXQgSW5zaWdodHMgcGFnZS5cblx0XHRcdFx0XHR1cGRhdGVHbG9iYWxTY29yZVJvdyhnbG9iYWxTY29yZURhdGEpO1xuXG5cdFx0XHRcdFx0Ly8gRmlyZSBjdXN0b20gZXZlbnQgZm9yIG90aGVyIHdpZGdldHMgKGxpa2UgcmVjb21tZW5kYXRpb25zKVxuXHRcdFx0XHRcdGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCd3cHJHbG9iYWxTY29yZVVwZGF0ZWQnLCB7IGRldGFpbDogZ2xvYmFsU2NvcmVEYXRhLmRhdGEgfSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc3BvbnNlLnJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0ICRyb3cgPSAkKGAud3ByLXJpLWl0ZW1bZGF0YS1yb2NrZXQtaW5zaWdodHMtaWQ9XCIke3Jlc3VsdC5pZH1cIl1gKTtcblx0XHRcdFx0XHQkcm93LnJlcGxhY2VXaXRoKHJlc3VsdC5odG1sKTtcblxuXHRcdFx0XHRcdCQoZG9jdW1lbnQpLnRyaWdnZXIoJ3JvY2tldC1pbnNpZ2h0cy1wYWdlLXRlc3QtcG9sbGluZycsIFtyZXN1bHQuaWRdKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgY3VzdG9tIGV2ZW50IG9ubHkgd2hlbiB0ZXN0IGlzIGNvbXBsZXRlZCBhbmQgbm90IGZhaWxlZCwgc28gd2UgZG9uJ3QgdGFyZ2V0IGFuIGVsZW1lbnQgdGhhdCBtaWdodCBiZSByZW1vdmVkIGZyb20gdGhlIERPTSBhZnRlciB0ZXN0IGNvbXBsZXRpb24uXG5cdFx0XHRcdFx0aWYgKHJlc3VsdC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG5cdFx0XHRcdFx0XHQkKGRvY3VtZW50KS50cmlnZ2VyKCdyb2NrZXQtaW5zaWdodHMtcGFnZS10ZXN0LWNvbXBsZXRlZCcsIFtyZXN1bHQuaWRdKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgfHwgcmVzdWx0LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcblx0XHRcdFx0XHRcdHJlbW92ZUlkKHJlc3VsdC5pZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpbmNyZW1lbnRQb2xsaW5nKCk7XG5cdFx0XHRcdHNjaGVkdWxlUG9sbGluZygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gT24gZXJyb3IsIGNsZWFyIElEcyBhbmQgc3RvcCBwb2xsaW5nXG5cdFx0XHRcdHJvY2tldEluc2lnaHRzSWRzID0gW107XG5cdFx0XHRcdHJlc2V0UG9sbGluZygpO1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdQb2xsaW5nIGVycm9yOicsIHJlc3BvbnNlLnJlc3VsdHMgfHwgcmVzcG9uc2UpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGhhbmRsZUFkZFBhZ2UoZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdC8vIGNoZWNrIGlmIGhhcyBhdHRyIGRpc2FibGVkXG5cdFx0aWYgKCQodGhpcykuYXR0cignZGlzYWJsZWQnKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhZ2VVcmwgPSAkcGFnZVVybElucHV0LnZhbCgpLnRyaW0oKTtcblxuXHRcdGlmICghaXNWYWxpZFVybChwYWdlVXJsKSkge1xuXHRcdFx0YWxlcnQoJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFVSTCcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNvdXJjZSA9ICQodGhpcykuZGF0YSgnc291cmNlJyk7XG5cblx0XHR3aW5kb3cud3AuYXBpRmV0Y2goXG5cdFx0XHR7XG5cdFx0XHRcdHBhdGg6ICcvd3Atcm9ja2V0L3YxL3JvY2tldC1pbnNpZ2h0cy9wYWdlcy8nLFxuXHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdHBhZ2VfdXJsOiBwYWdlVXJsLFxuXHRcdFx0XHRcdHNvdXJjZTogc291cmNlXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0KS50aGVuKCAoIHJlc3BvbnNlICkgPT4ge1xuXHRcdFx0aWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcblx0XHRcdFx0aWYgKCAhIGhhc0lkKHJlc3BvbnNlLmlkKSApIHtcblx0XHRcdFx0XHQkcGFnZVVybElucHV0LnZhbCgnJyk7XG5cdFx0XHRcdFx0JHRhYmxlQm9keS5hcHBlbmQocmVzcG9uc2UuaHRtbCk7XG5cblx0XHRcdFx0XHQvLyBDdXN0b20gZXZlbnQgd2hlbiBuZXcgcGFnZSBpcyBhZGRlZC5cblx0XHRcdFx0XHQkKGRvY3VtZW50KS50cmlnZ2VyKCdyb2NrZXQtaW5zaWdodHMtcGFnZS1hZGRlZCcpO1xuXG5cdFx0XHRcdFx0JHRhYmxlLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcblx0XHRcdFx0XHRhZGRJZHMocmVzcG9uc2UuaWQpO1xuXHRcdFx0XHRcdGxldCBwYWdlc19udW1fY29udGFpbmVyID0gJCgnI3JvY2tldF9yb2NrZXRfaW5zaWdodHNfcGFnZXNfbnVtJyk7XG5cdFx0XHRcdFx0cGFnZXNfbnVtX2NvbnRhaW5lci50ZXh0KCBwYXJzZUludCggcGFnZXNfbnVtX2NvbnRhaW5lci50ZXh0KCkgKSArIDEgKTtcblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBjcmVkaXQgc3RhdHVzXG5cdFx0XHRcdFx0dXBkYXRlQ3JlZGl0U3RhdGUocmVzcG9uc2UuaGFzX2NyZWRpdCk7XG5cblx0XHRcdFx0XHQvLyBVcGRhdGUgZ2xvYmFsIHNjb3JlIGRhdGEuXG5cdFx0XHRcdFx0Z2xvYmFsU2NvcmVEYXRhID0gcmVzcG9uc2UuZ2xvYmFsX3Njb3JlX2RhdGE7XG5cblx0XHRcdFx0XHQvLyBVcGRhdGUgZ2xvYmFsIHNjb3JlIHJvdyBpbiB0YWJsZSBpZiBvbiBSb2NrZXQgSW5zaWdodHMgcGFnZS5cblx0XHRcdFx0XHR1cGRhdGVHbG9iYWxTY29yZVJvdyhnbG9iYWxTY29yZURhdGEpO1xuXG5cdFx0XHRcdFx0aWYgKCdkaXNhYmxlZF9idG5faHRtbCcgaW4gZ2xvYmFsU2NvcmVEYXRhKSB7XG5cdFx0XHRcdFx0XHQkKCcjd3ByX3JvY2tldF9pbnNpZ2h0c19hZGRfcGFnZV9idG5fd3JhcHBlcicpLmh0bWwoZ2xvYmFsU2NvcmVEYXRhLmRpc2FibGVkX2J0bl9odG1sLnJvY2tldF9pbnNpZ2h0cyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU2hvdy9oaWRlIHF1b3RhIGJhbm5lciBiYXNlZCBvbiBjYW5fYWRkX3BhZ2VzXG5cdFx0XHRcdFx0dXBkYXRlUXVvdGFCYW5uZXIocmVzcG9uc2UuY2FuX2FkZF9wYWdlcyk7XG5cblx0XHRcdFx0XHRpZiAocG9sbFRpbWVyKSB7XG5cdFx0XHRcdFx0XHRyZXNldFBvbGxpbmcoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2NoZWR1bGVQb2xsaW5nKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ2xlYXIgdGhlIGlucHV0IGZpZWxkIG9uIGVycm9yXG5cdFx0XHRcdCRwYWdlVXJsSW5wdXQudmFsKCcnKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgVVJMIGxpbWl0IHJlYWNoZWQgZXJyb3Jcblx0XHRcdFx0aWYgKHJlc3BvbnNlPy5tZXNzYWdlICYmIHJlc3BvbnNlLm1lc3NhZ2UuaW5jbHVkZXMoJ01heGltdW0gbnVtYmVyIG9mIFVSTHMgcmVhY2hlZCcpKSB7XG5cdFx0XHRcdFx0Ly8gVXBkYXRlIFVJIHN0YXRlIHRvIHJlZmxlY3QgVVJMIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWRcblx0XHRcdFx0XHRkaXNhYmxlQWRkVXJsRWxlbWVudHMoKTtcblx0XHRcdFx0XHQvLyBTaG93IHF1b3RhIGJhbm5lciAoY2FuX2FkZF9wYWdlcyA9IGZhbHNlKVxuXHRcdFx0XHRcdHVwZGF0ZVF1b3RhQmFubmVyKHJlc3BvbnNlLmNhbl9hZGRfcGFnZXMgIT09IHVuZGVmaW5lZCA/IHJlc3BvbnNlLmNhbl9hZGRfcGFnZXMgOiBmYWxzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zb2xlLmVycm9yKHJlc3BvbnNlPy5tZXNzYWdlIHx8IHJlc3BvbnNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGhhbmRsZVJlc2V0UGFnZShlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0Y29uc3QgJGJ1dHRvbiA9ICQodGhpcyk7XG5cdFx0bGV0IGlkID0gJGJ1dHRvbi5wYXJlbnRzKCcud3ByLXJpLWl0ZW0nKS5kYXRhKCdyb2NrZXQtaW5zaWdodHMtaWQnKTtcblx0XHRpZiAoICEgaWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc291cmNlID0gJGJ1dHRvbi5kYXRhKCdzb3VyY2UnKTtcblxuXHRcdHdpbmRvdy53cC5hcGlGZXRjaChcblx0XHRcdHtcblx0XHRcdFx0cGF0aDogJy93cC1yb2NrZXQvdjEvcm9ja2V0LWluc2lnaHRzL3BhZ2VzLycgKyBpZCxcblx0XHRcdFx0bWV0aG9kOiAnUEFUQ0gnLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0c291cmNlOiBzb3VyY2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCkudGhlbiggKCByZXNwb25zZSApID0+IHtcblx0XHRcdGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG5cdFx0XHRcdGFkZElkcyhyZXNwb25zZS5pZCk7XG5cblx0XHRcdFx0JChgI3JpX2RldGFpbHNfJHtyZXNwb25zZS5pZH0gLmRldGFpbHMtc2VjdGlvbi10ZGApLnJlbW92ZSgpO1xuXHRcdFx0XHRjb25zdCAkcm93ID0gJChgW2RhdGEtcm9ja2V0LWluc2lnaHRzLWlkPVwiJHtyZXNwb25zZS5pZH1cIl1gKTtcblx0XHRcdFx0JHJvdy5yZXBsYWNlV2l0aChyZXNwb25zZS5odG1sKTtcblxuXHRcdFx0XHQvLyBDdXN0b20gZXZlbnQgd2hlbiBwYWdlIGlzIHJldGVzdGVkLlxuICAgICAgICBcdFx0JChkb2N1bWVudCkudHJpZ2dlcigncm9ja2V0LWluc2lnaHRzLXBhZ2UtcmV0ZXN0JywgW3Jlc3BvbnNlLmlkXSk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIGNyZWRpdCBzdGF0dXNcblx0XHRcdFx0dXBkYXRlQ3JlZGl0U3RhdGUocmVzcG9uc2UuaGFzX2NyZWRpdCk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHF1b3RhIGJhbm5lciB2aXNpYmlsaXR5XG5cdFx0XHRcdHVwZGF0ZVF1b3RhQmFubmVyKHJlc3BvbnNlLmNhbl9hZGRfcGFnZXMpO1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGdsb2JhbCBzY29yZSBkYXRhLlxuICAgICAgICAgICAgICAgIGdsb2JhbFNjb3JlRGF0YSA9IHJlc3BvbnNlLmdsb2JhbF9zY29yZV9kYXRhO1xuXG5cdFx0XHRcdC8vIFVwZGF0ZSBnbG9iYWwgc2NvcmUgcm93IGluIHRhYmxlIGlmIG9uIFJvY2tldCBJbnNpZ2h0cyBwYWdlLlxuXHRcdFx0XHR1cGRhdGVHbG9iYWxTY29yZVJvdyhnbG9iYWxTY29yZURhdGEpO1xuXG5cdFx0XHRcdGlmIChwb2xsVGltZXIpIHtcblx0XHRcdFx0XHRyZXNldFBvbGxpbmcoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzY2hlZHVsZVBvbGxpbmcoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IocmVzcG9uc2U/Lm1lc3NhZ2UgfHwgcmVzcG9uc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gPT09PSBJbml0aWFsaXphdGlvbiA9PT09XG5cdC8vIEJpbmQgZXZlbnRcblx0JChkb2N1bWVudCkub24oICdjbGljaycsICcjd3ByLWFjdGlvbi1hZGRfcGFnZV9zcGVlZF9yYWRhcicsIGhhbmRsZUFkZFBhZ2UgKTtcblx0JChkb2N1bWVudCkub24oICdjbGljaycsICcud3ByLWFjdGlvbi1zcGVlZF9yYWRhcl9yZWZyZXNoJywgaGFuZGxlUmVzZXRQYWdlICk7XG5cdC8vIEhhbmRsZSBFbnRlciBrZXkgcHJlc3Mgb24gcGFnZSB1cmwgaW5wdXQuXG5cdCQoZG9jdW1lbnQpLm9uKCAna2V5cHJlc3MnLCAnI3dwci1zcGVlZC1yYWRhci11cmwtaW5wdXQnLCBmdW5jdGlvbihlKSB7XG5cdFx0aWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG5cdFx0ICBlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ICAkKCcjd3ByLWFjdGlvbi1hZGRfcGFnZV9zcGVlZF9yYWRhcicpLmNsaWNrKCk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBPbmx5IHBvbGwgaWYgb24gYSB3cHIgc2VjdGlvbiB0aGF0IHJlcXVpcmVzIHBvbGxpbmcoZGFzaGJvYXJkfHJvY2tldF9pbnNpZ2h0cykgKG1vcmUgcm9idXN0IGNoZWNrKVxuICAgIGZ1bmN0aW9uIGlzVmFsaWRQYWdlRm9yUG9sbGluZygpIHtcbiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0XHRyZXR1cm4gJ3dwcm9ja2V0JyA9PT0gdXJsUGFyYW1zLmdldCgncGFnZScpO1xuICAgIH1cblxuXHQvLyBSZXN1bWUgcG9sbGluZyBpZiBuZWVkZWRcblx0aWYgKGlzVmFsaWRQYWdlRm9yUG9sbGluZygpICYmIHJvY2tldEluc2lnaHRzSWRzLmxlbmd0aCA+IDApIHtcblx0XHRpZiAocG9sbFRpbWVyKSB7XG5cdFx0XHRyZXNldFBvbGxpbmcoKTtcblx0XHR9XG5cdFx0c2NoZWR1bGVQb2xsaW5nKCk7XG5cdH1cblxuXHQvLyBIYW5kbGUgVUkgdXBkYXRlIG9uIHRoZSByb2NrZXQgaW5zaWdodHMgdGFiIHdoZW4gXCJBZGQgUGFnZXNcIiBidXR0b24gb24gdGhlIGdsb2JhbCBzY29yZSB3aWRnZXQgaXMgY2xpY2tlZC5cblx0JChkb2N1bWVudCkub24oJ2NsaWNrJywgJy53cHItcGVyY2VudGFnZS1zY29yZS13aWRnZXQgLndwci1yaS1hZGQtdXJsLWJ1dHRvbicsIGZ1bmN0aW9uKCkge1xuXHRcdGlmICghdGhpcy50ZXh0Q29udGVudC5pbmNsdWRlcygnQWRkIFBhZ2VzJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZWxheSBVSSB1cGRhdGUgYSBiaXQgdGlsbCBlbGVtZW50IGlzIHZpc2libGUuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR1cGRhdGVHbG9iYWxTY29yZVJvdyhnbG9iYWxTY29yZURhdGEpO1xuXHRcdH0sIDMwKTtcblx0fSk7XG5cblx0Ly8gSGFuZGxlIGNvbGxhcHNlZWQgc3R5bGluZyBmb3IgZmlyc3QgbG9hZCBvciBkeW5hbWljIHJvdyBhZGRpdGlvbi5cblx0ZnVuY3Rpb24gYWRkQ29sbGFwc2VkU3R5bGluZ1RvTGFzdFJvdyhvbkxvYWQgPSBmYWxzZSkge1xuXHRcdCQoJy53cHItcmktaXRlbScpLmxhc3QoKS5maW5kKCd0ZCcpLmFkZENsYXNzKCdib3JkZXItYm90dG9tJyk7XG5cblx0XHRpZiAob25Mb2FkKSB7XG5cdFx0XHQvLyBPbiBsb2FkLCByZW1vdmUgd3ByLWxhc3QtZXhwYW5kZWQgZnJvbSBlbGVtZW50cyB0aGF0IGFyZSBub3QgdGhlIGxhc3QgYWZ0ZXIgYmVpbmcgYWRkZWQgZnJvbSBiYWNrZW5kLlxuXHRcdFx0JCgnLndwci1yaS1pdGVtLXRvZ2dsZScpLm5vdCgnOmxhc3QnKS5yZW1vdmVDbGFzcygnd3ByLWxhc3QtZXhwYW5kZWQnKTtcblx0XHRcdCQoJy53cHItcmktaXRlbS1hY3Rpb25zJykubm90KCc6bGFzdCcpLnJlbW92ZUNsYXNzKCd3cHItbGFzdC1leHBhbmRlZCcpO1xuXHRcdFx0JCgnLmRldGFpbHMtc2VjdGlvbi10ZCcpLm5vdCgnOmxhc3QnKS5yZW1vdmVDbGFzcygnd3ByLWxhc3QtZXhwYW5kZWQnKTtcblxuXHRcdFx0Ly8gQmFpbCBlYXJseSBpZiBsYXN0IGl0ZW0gaXMgYWxyZWFkeSBleHBhbmRlZCBvbiBsb2FkIHNvIGFzIG5vdCB0byBoYXZlIGNvbmZsaWN0aW5nIHN0eWxlcy5cblx0XHRcdGlmKCQoJy5kZXRhaWxzLXNlY3Rpb24tdGQnKS5sYXN0KCkuaGFzQ2xhc3MoJ3dwci1sYXN0LWV4cGFuZGVkJykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQkKCcud3ByLXJpLWl0ZW0tdG9nZ2xlJykubGFzdCgpLmFkZENsYXNzKCd3cHItbGFzdC1jb2xsYXBzZWQnKTtcblx0XHQkKCcud3ByLXJpLWl0ZW0tYWN0aW9ucycpLmxhc3QoKS5hZGRDbGFzcygnd3ByLWxhc3QtY29sbGFwc2VkJyk7XG5cdFx0JCgnLmRldGFpbHMtc2VjdGlvbi10ZCcpLmxhc3QoKS5hZGRDbGFzcygnd3ByLWxhc3QtY29sbGFwc2VkJyk7XG5cdH1cblxuXHQvLyBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIGEgc2luZ2xlIHRlc3QgZGV0YWlscyByb3csIHN3aXRjaGVzIHRoZSBjYXJldCBpY29uLCBhbmQgdXBkYXRlcyBzdHlsaW5nIGZvciB0aGUgbGFzdCBpdGVtLlxuXHRmdW5jdGlvbiB0b2dnbGVTaW5nbGVSb3dWaXNpYmlsaXR5KGluc2lnaHRzSWQsIHNvdXJjZSkge1xuXHRcdGxldCAkZWxlbWVudCA9ICQoYCNyaV9kZXRhaWxzXyR7aW5zaWdodHNJZH1gKTtcblx0XHRsZXQgaXNWaXNpYmxlID0gJGVsZW1lbnQuaGFzQ2xhc3MoJ3dwci1yaS1kZXRhaWxzLS1leHBhbmRlZCcpO1xuXHRcdGxldCBpc0xhc3QgPSAkKGBbZGF0YS1yb2NrZXQtaW5zaWdodHMtaWQ9XCIke2luc2lnaHRzSWR9XCJdIC53cHItcmktaXRlbS10b2dnbGUtc2luZ2xlYCkuaXMoJCgnLndwci1yaS1pdGVtLXRvZ2dsZS1zaW5nbGUnKS5sYXN0KCkpO1xuXG5cdFx0aWYgKCBpc1Zpc2libGUgKSB7XG5cdFx0XHQkZWxlbWVudC5yZW1vdmVDbGFzcygnd3ByLXJpLWRldGFpbHMtLWV4cGFuZGVkJyk7XG5cdFx0XHQkKGBbZGF0YS1yb2NrZXQtaW5zaWdodHMtaWQ9XCIke2luc2lnaHRzSWR9XCJdYCkucmVtb3ZlQ2xhc3MoJ3dwci1yaS1pdGVtLS1leHBhbmRlZCcpO1xuXHRcdFx0Ly8gTWFuaXB1bGF0ZSBzdHlsaW5nIGZvciBsYXN0IGVsZW1lbnRzIHdoZW4gZGV0YWlscyBjZWxsIGlzIG5vdCB2aXNpYmxlLlxuXHRcdFx0aWYgKGlzTGFzdCkge1xuXHRcdFx0XHR1cGRhdGVSb3dTdHlsaW5nRm9yTGFzdEl0ZW0oZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JGVsZW1lbnQuYWRkQ2xhc3MoJ3dwci1yaS1kZXRhaWxzLS1leHBhbmRlZCcpO1xuXHRcdCQoYFtkYXRhLXJvY2tldC1pbnNpZ2h0cy1pZD1cIiR7aW5zaWdodHNJZH1cIl1gKS5hZGRDbGFzcygnd3ByLXJpLWl0ZW0tLWV4cGFuZGVkJyk7XG5cblx0XHQvLyBUcmFjayBleHBhbmQgb25seSBleHBhbmQgbWV0cmljIGFjdGlvbi5cblx0XHRoYW5kbGVNZXRyaWNBY3Rpb25UcmFja2luZygnZXhwYW5kJywgaW5zaWdodHNJZCwgc291cmNlKTtcblxuXHRcdGlmIChpc0xhc3QpIHtcblx0XHRcdHVwZGF0ZVJvd1N0eWxpbmdGb3JMYXN0SXRlbSgpO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRyYWNrcyB1c2VyIGludGVyYWN0aW9ucyB3aXRoIG1ldHJpYyBhY3Rpb25zIGluIFJvY2tldCBJbnNpZ2h0cyB2aWEgQUpBWC5cblx0ZnVuY3Rpb24gaGFuZGxlTWV0cmljQWN0aW9uVHJhY2tpbmcoZXZlbnQsIHJvd0lkLCBzb3VyY2UpIHtcblx0XHQkLnBvc3QoXG5cdFx0XHRhamF4dXJsLFxuXHRcdFx0e1xuXHRcdFx0XHRhY3Rpb246ICdyb2NrZXRfaW5zaWdodF90cmFja19tZXRyaWNfYWN0aW9ucycsXG5cdFx0XHRcdF9hamF4X25vbmNlOiByb2NrZXRfYWpheF9kYXRhLm5vbmNlLFxuXHRcdFx0XHRldmVudDogZXZlbnQsXG5cdFx0XHRcdHJvd19pZDogcm93SWQsXG5cdFx0XHRcdHNvdXJjZTogc291cmNlXG5cdFx0XHR9LFxuXHRcdFx0ZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdFx0aWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignTWV0cmljIGFjdGlvbiB0cmFja2luZyBmYWlsZWQ6JywgcmVzcG9uc2U/LmRhdGEgfHwgcmVzcG9uc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBib3JkZXIgc3R5bGluZyBmb3IgdGhlIGxhc3Qgcm93IGl0ZW0gaW4gdGhlIFJvY2tldCBJbnNpZ2h0cyB0YWJsZS5cblx0ICpcblx0ICogTWFuYWdlcyBib3JkZXIgcmFkaXVzIGFuZCBib3R0b20gYm9yZGVyIHN0eWxpbmcgYmFzZWQgb24gd2hldGhlciB0aGUgZGV0YWlsc1xuXHQgKiBjZWxsIGlzIGV4cGFuZGVkIG9yIGNvbGxhcHNlZCB0byBtYWludGFpbiBwcm9wZXIgdmlzdWFsIGFwcGVhcmFuY2UuXG5cdCAqL1xuXHRmdW5jdGlvbiB1cGRhdGVSb3dTdHlsaW5nRm9yTGFzdEl0ZW0oaXNFeHBhbmRlZCA9IHRydWUpIHtcblx0XHRjb25zdCBhZGRTdGF0ZSA9IGlzRXhwYW5kZWQgPyAnd3ByLWxhc3QtZXhwYW5kZWQnIDogJ3dwci1sYXN0LWNvbGxhcHNlZCc7XG5cdFx0Y29uc3QgcmVtb3ZlU3RhdGUgPSBpc0V4cGFuZGVkID8gJ3dwci1sYXN0LWNvbGxhcHNlZCcgOiAnd3ByLWxhc3QtZXhwYW5kZWQnO1xuXG5cdFx0dmFyICRzZWxlY3RvcnMgPSB7XG5cdFx0XHRsYXN0VG9nZ2xlOiAkKCcud3ByLXJpLWl0ZW0tdG9nZ2xlJykubGFzdCgpLFxuXHRcdFx0bGFzdEFjdGlvbnM6ICQoJy53cHItcmktaXRlbS1hY3Rpb25zJykubGFzdCgpXG5cdFx0fTtcblxuXHRcdCRzZWxlY3RvcnMubGFzdFRvZ2dsZVxuXHRcdFx0LnJlbW92ZUNsYXNzKHJlbW92ZVN0YXRlKVxuXHRcdFx0LmFkZENsYXNzKGFkZFN0YXRlKTtcblxuXHRcdCRzZWxlY3RvcnMubGFzdEFjdGlvbnNcblx0XHRcdC5yZW1vdmVDbGFzcyhyZW1vdmVTdGF0ZSlcblx0XHRcdC5hZGRDbGFzcyhhZGRTdGF0ZSk7XG5cblxuXHRcdC8vIENoZWNrIGlmIGxhc3QgZGV0YWlsIHJvdyBpcyBub3QgdGhlIGxhc3Qgcm93IGluIHRoZSB0YWJsZSBzbyBhcyBub3QgdG8gYXBwbHkgaW1wcm9wZXIgc3R5bGluZyB3aXRoIGJvcmRlciByYWRpdXMgYmV0d2VlbiByb3dzLlxuXHRcdHZhciAkbGFzdERldGFpbHNDZWxsID0gJCgnLmRldGFpbHMtc2VjdGlvbi10ZCcpLmxhc3QoKTtcblx0XHRpZiAoJGxhc3REZXRhaWxzQ2VsbC5jbG9zZXN0KCd0cicpLm5leHQoJ3RyJykubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JGxhc3REZXRhaWxzQ2VsbC5yZW1vdmVDbGFzcyhyZW1vdmVTdGF0ZSlcblx0XHQuYWRkQ2xhc3MoYWRkU3RhdGUpO1xuXHR9XG5cblx0Ly8gVG9nZ2xlIHNpbmdsZSBpdGVtLlxuXHQkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLndwci1yaS1pdGVtLXRvZ2dsZS1zaW5nbGUnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zaWdodHNJZCA9ICQodGhpcykuY2xvc2VzdCgnLndwci1yaS1pdGVtJykuZGF0YSgncm9ja2V0LWluc2lnaHRzLWlkJyk7XG5cdFx0dG9nZ2xlU2luZ2xlUm93VmlzaWJpbGl0eShpbnNpZ2h0c0lkLCAndXJsX2V4cGFuZCcpO1xuXHR9KTtcblxuXHQvLyBUb2dnbGUgYWxsIGl0ZW1zLlxuXHQkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLndwci1yaS1pdGVtLXRvZ2dsZS1hbGwnLCBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCQoJy53cHItcmktZGV0YWlscy0tZXhwYW5kZWQnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHQkKCcud3ByLXJpLWRldGFpbHMnKS5yZW1vdmVDbGFzcygnd3ByLXJpLWRldGFpbHMtLWV4cGFuZGVkJyk7XG5cdFx0XHQkKCcud3ByLXJpLWl0ZW0nKS5yZW1vdmVDbGFzcygnd3ByLXJpLWl0ZW0tLWV4cGFuZGVkJyk7XG5cdFx0XHQkKHRoaXMpLnJlbW92ZUNsYXNzKCd3cHItcmktaXRlbS10b2dnbGUtYWxsLS1leHBhbmRlZCcpO1xuXHRcdFx0dXBkYXRlUm93U3R5bGluZ0Zvckxhc3RJdGVtKGZhbHNlKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdCQoJy53cHItcmktZGV0YWlscycpLmFkZENsYXNzKCd3cHItcmktZGV0YWlscy0tZXhwYW5kZWQnKTtcblx0XHQkKCcud3ByLXJpLWl0ZW0nKS5hZGRDbGFzcygnd3ByLXJpLWl0ZW0tLWV4cGFuZGVkJyk7XG5cdFx0JCh0aGlzKS5hZGRDbGFzcygnd3ByLXJpLWl0ZW0tdG9nZ2xlLWFsbC0tZXhwYW5kZWQnKTtcblx0XHR1cGRhdGVSb3dTdHlsaW5nRm9yTGFzdEl0ZW0oKTtcblxuXHRcdC8vIFRyYWNrIHNpbmdsZSBleHBhbmQgZXZlbnQgZm9yIFwiRXhwYW5kIEFsbFwiIGFjdGlvbiB3aXRoIHRlc3RfaWQgYXMgJ2FsbCcuXG5cdFx0aGFuZGxlTWV0cmljQWN0aW9uVHJhY2tpbmcoJ2V4cGFuZCcsICdhbGwnLCAnZ2xvYmFsX2V4cGFuZCcpO1xuXHR9KTtcblxuXHQvLyBUcmFjayBcIlNlZSBSZXBvcnRcIiBjbGlja3MgaW4gUm9ja2V0IEluc2lnaHRzLlxuXHQkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLndwci1yaS1yZXBvcnQnLCBmdW5jdGlvbihlKSB7XHQvLyBPbmx5IHRyYWNrIGlmIGxpbmsgaXMgbm90IGRpc2FibGVkIGFuZCBtaXhwYW5lbCBpcyBhdmFpbGFibGUuXG5cdFx0aWYgKCQodGhpcykuaGFzQ2xhc3MoJ3dwci1yaS1hY3Rpb24tLWRpc2FibGVkJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgaW5zaWdodHNJZCA9ICQodGhpcykuZGF0YSgncm9ja2V0LWluc2lnaHRzLXJvdy1pZCcpO1xuXHRcdGhhbmRsZU1ldHJpY0FjdGlvblRyYWNraW5nKCdzZWVfcmVwb3J0JywgaW5zaWdodHNJZCwgJ3NlZV9yZXBvcnRfYnV0dG9uJyk7XG5cdH0pO1xuXG5cdC8vIFVwZGF0ZSB0YWJsZSBzdHlsaW5nIGFmdGVyIG5ldyBwYWdlIGlzIGFkZGVkLlxuXHQkKGRvY3VtZW50KS5vbigncm9ja2V0LWluc2lnaHRzLXBhZ2UtdGVzdC1jb21wbGV0ZWQnLCBmdW5jdGlvbiAoZSwgaW5zaWdodHNJZCkge1xuXHRcdC8vIEJhaWwgb3V0IGlmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlc3VsdC5cblx0XHRpZiAoJCgnLndwci1yaS1pdGVtLXJlc3VsdCcpLmxlbmd0aCA+IDEpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZHluYW1pYyBjbGFzcyB3aGVuIG9ubHkgb25lIGl0ZW0gZXhpc3QgaW4gdGFibGUuXG5cdFx0JCgnLndwci1sYXN0LWNvbGxhcHNlZCcpLnJlbW92ZUNsYXNzKCd3cHItbGFzdC1jb2xsYXBzZWQnKTtcblx0fSk7XG5cblx0Ly8gVXBkYXRlIHRhYmxlIHN0eWxpbmcgYWZ0ZXIgbmV3IHBhZ2UgaXMgYWRkZWQuXG5cdCQoZG9jdW1lbnQpLm9uKCdyb2NrZXQtaW5zaWdodHMtcGFnZS1hZGRlZCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0Ly8gUmVtb3ZlIGR5bmFtaWMgY2xhc3MgZm9yIGxhc3QgaXRlbSBpZiBleGlzdHMgd2hlbiBuZXcgcGFnZSBpcyBhZGRlZC5cblx0XHQkKCcud3ByLWxhc3QtY29sbGFwc2VkJykucmVtb3ZlQ2xhc3MoJ3dwci1sYXN0LWNvbGxhcHNlZCcpO1xuXHRcdCQoJy53cHItbGFzdC1leHBhbmRlZCcpLnJlbW92ZUNsYXNzKCd3cHItbGFzdC1leHBhbmRlZCcpO1xuXHRcdCQoJy5ib3JkZXItYm90dG9tJykucmVtb3ZlQ2xhc3MoJ2JvcmRlci1ib3R0b20nKTtcblx0fSk7XG5cblx0Ly8gVXBkYXRlIHRhYmxlIHN0eWxpbmcgYWZ0ZXIgcmV0ZXN0IG9yIHBvbGxpbmcgdXBkYXRlIGZvciBsYXN0IHJvdy5cblx0JChkb2N1bWVudCkub24oJ3JvY2tldC1pbnNpZ2h0cy1wYWdlLXJldGVzdCByb2NrZXQtaW5zaWdodHMtcGFnZS10ZXN0LXBvbGxpbmcnLCBmdW5jdGlvbiAoZSwgaW5zaWdodHNJZCkge1xuXHRcdC8vIENoZWNrIGlmIGl0ZW0gaXMgdGhlIGxhc3QuXG5cdFx0dmFyIGlzTGFzdCA9ICQoYFtkYXRhLXJvY2tldC1pbnNpZ2h0cy1pZD1cIiR7aW5zaWdodHNJZH1cIl1gKS5pcygkKCcud3ByLXJpLWl0ZW0tcmVzdWx0JykubGFzdCgpKTtcblxuXHRcdGlmIChpc0xhc3QpIHtcblx0XHRcdGFkZENvbGxhcHNlZFN0eWxpbmdUb0xhc3RSb3coKTtcblx0XHR9XG5cdH0pO1xuXG5cdCQoZG9jdW1lbnQpLm9uKCdyb2NrZXQtaW5zaWdodHMtcGFnZS1yZXRlc3QnLCBmdW5jdGlvbiAoZSwgaW5zaWdodHNJZCkge1xuXHRcdCQoYCNyaV9kZXRhaWxzXyR7aW5zaWdodHNJZH1gKS5yZW1vdmVDbGFzcygnd3ByLXJpLWRldGFpbHMtLWV4cGFuZGVkJyk7XG5cdFx0JChgW2RhdGEtcm9ja2V0LWluc2lnaHRzLWlkPVwiJHtpbnNpZ2h0c0lkfVwiXWApLnJlbW92ZUNsYXNzKCd3cHItcmktaXRlbS0tZXhwYW5kZWQnKTtcblx0fSk7XG5cblx0JCh3aW5kb3cpLmxvYWQoKCkgPT4ge1xuXHRcdGlmICggISBpc09uUm9ja2V0SW5zaWdodHMoKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBBZGQgY29sbGFwc2VkIHN0eWxpbmcgdG8gdGhlIGxhc3Qgcm93IG9uIGluaXRpYWwgbG9hZC5cblx0XHRhZGRDb2xsYXBzZWRTdHlsaW5nVG9MYXN0Um93KHRydWUpO1xuXG5cdFx0Ly8gU2V0IGluaXRpYWwgZXhwYW5kL2NvbGxhcHNlIHN0YXRlLlxuXHRcdGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdFx0Y29uc3QgdGVzdElkID0gdXJsUGFyYW1zLmdldCgncmlfaWQnKTtcblxuXHRcdC8vIFNlbmQgbWl4cGFuZWwgZXZlbnQgZm9yIGF1dG8gZXhwYW5kZWQgcm93LlxuXHRcdGxldCBmaXJzdFJvd0lkID0gJCgnLndwci1yaS1pdGVtLS1leHBhbmRlZCcpPy5maXJzdCgpPy5kYXRhKCdyb2NrZXQtaW5zaWdodHMtaWQnKTtcblxuXHRcdC8vIENoZWNrIGlmIHJpX2lkIHdhcyBwYXNzZWQgaW4gcXVlcnkgc3RyaW5nIHRvIG9wZW4gc3BlY2lmaWMgdGVzdC5cblx0XHRpZiAoIXRlc3RJZCB8fCB0ZXN0SWQgPT09ICcnKSB7XG5cdFx0XHRpZiAoZmlyc3RSb3dJZCkge1xuXHRcdFx0XHRoYW5kbGVNZXRyaWNBY3Rpb25UcmFja2luZygnZXhwYW5kJywgZmlyc3RSb3dJZCwgJ2F1dG9fZXhwYW5kX3VybCcpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGhhbmRsZU1ldHJpY0FjdGlvblRyYWNraW5nKCdleHBhbmQnLCB0ZXN0SWQsICdwb3N0IHR5cGUgbGlzdGluZycpO1xuXG5cdFx0JCgnaHRtbCwgYm9keScpLmFuaW1hdGUoe1xuXHRcdFx0c2Nyb2xsVG9wOiAkKGBbZGF0YS1yb2NrZXQtaW5zaWdodHMtaWQ9XCIke3Rlc3RJZH1cIl1gKS5vZmZzZXQoKS50b3AgLSAxMDBcblx0XHR9LCA1MDApO1xuXG5cdFx0Ly8gUmVtb3ZlIHJpX2lkIGZyb20gVVJMIHdpdGhvdXQgcGFnZSByZWxvYWRcblx0XHR1cmxQYXJhbXMuZGVsZXRlKCdyaV9pZCcpO1xuXHRcdGNvbnN0IG5ld1VybCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICc/JyArIHVybFBhcmFtcy50b1N0cmluZygpICsgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgbmV3VXJsKTtcblx0fSk7XG59KTtcbiIsIi8vIEFkZCBncmVlbnNvY2sgbGliIGZvciBhbmltYXRpb25zXHJcbmltcG9ydCAnLi4vbGliL2dyZWVuc29jay9Ud2VlbkxpdGUubWluLmpzJztcclxuaW1wb3J0ICcuLi9saWIvZ3JlZW5zb2NrL1RpbWVsaW5lTGl0ZS5taW4uanMnO1xyXG5pbXBvcnQgJy4uL2xpYi9ncmVlbnNvY2svZWFzaW5nL0Vhc2VQYWNrLm1pbi5qcyc7XHJcbmltcG9ydCAnLi4vbGliL2dyZWVuc29jay9wbHVnaW5zL0NTU1BsdWdpbi5taW4uanMnO1xyXG5pbXBvcnQgJy4uL2xpYi9ncmVlbnNvY2svcGx1Z2lucy9TY3JvbGxUb1BsdWdpbi5taW4uanMnO1xyXG5cclxuLy8gQWRkIHNjcmlwdHNcclxuaW1wb3J0ICcuLi9nbG9iYWwvcGFnZU1hbmFnZXIuanMnO1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9tYWluLmpzJztcclxuaW1wb3J0ICcuLi9nbG9iYWwvZmllbGRzLmpzJztcclxuaW1wb3J0ICcuLi9nbG9iYWwvYmVhY29uLmpzJztcclxuaW1wb3J0ICcuLi9nbG9iYWwvYWpheC5qcyc7XHJcbmltcG9ydCAnLi4vZ2xvYmFsL3JlY29tbWVuZGF0aW9ucy13aWRnZXQuanMnO1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9yb2NrZXRjZG4uanMnO1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9jb3VudGRvd24uanMnO1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9taXhwYW5lbC5qcyciLCJ2YXIgJCA9IGpRdWVyeTtcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XG4gICAgaWYgKCdCZWFjb24nIGluIHdpbmRvdykge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2hvdyBiZWFjb25zIG9uIGJ1dHRvbiBcImhlbHBcIiBjbGlja1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyICRoZWxwID0gJCgnLndwci1pbmZvQWN0aW9uLS1oZWxwJyk7XG4gICAgICAgICRoZWxwLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgICAgdmFyIGlkcyA9ICQodGhpcykuZGF0YSgnYmVhY29uLWlkJyk7XG4gICAgICAgICAgICB2YXIgYnV0dG9uID0gJCh0aGlzKS5kYXRhKCd3cHJfdHJhY2tfYnV0dG9uJykgfHwgJ0JlYWNvbiBIZWxwJztcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gJCh0aGlzKS5kYXRhKCd3cHJfdHJhY2tfY29udGV4dCcpIHx8ICdTZXR0aW5ncyc7XG5cbiAgICAgICAgICAgIC8vIFRyYWNrIHdpdGggTWl4UGFuZWwgSlMgU0RLXG4gICAgICAgICAgICB3cHJUcmFja0hlbHBCdXR0b24oYnV0dG9uLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgLy8gQ29udGludWUgd2l0aCBleGlzdGluZyBiZWFjb24gZnVuY3Rpb25hbGl0eVxuICAgICAgICAgICAgd3ByQ2FsbEJlYWNvbihpZHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiB3cHJDYWxsQmVhY29uKGFJRCl7XG4gICAgICAgICAgICBhSUQgPSBhSUQuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGlmICggYUlELmxlbmd0aCA9PT0gMCApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIGFJRC5sZW5ndGggPiAxICkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuQmVhY29uKFwic3VnZ2VzdFwiLCBhSUQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuQmVhY29uKFwib3BlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuQmVhY29uKFwiYXJ0aWNsZVwiLCBhSUQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICB9XG5cblx0JCggJy53cHItcmktcmVwb3J0JyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHR3cHJUcmFja0hlbHBCdXR0b24oICdyb2NrZXQgaW5zaWdodHMgc2VlIHJlcG9ydCcsICdwZXJmb3JtYW5jZSBzdW1tYXJ5JyApO1xuXHR9ICk7XG5cbiAgICAvLyBNaXhQYW5lbCB0cmFja2luZyBmdW5jdGlvblxuICAgIGZ1bmN0aW9uIHdwclRyYWNrSGVscEJ1dHRvbihidXR0b24sIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtaXhwYW5lbCAhPT0gJ3VuZGVmaW5lZCcgJiYgbWl4cGFuZWwudHJhY2spIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHVzZXIgaGFzIG9wdGVkIGluIHVzaW5nIGxvY2FsaXplZCBkYXRhXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvY2tldF9taXhwYW5lbF9kYXRhID09PSAndW5kZWZpbmVkJyB8fCAhcm9ja2V0X21peHBhbmVsX2RhdGEub3B0aW5fZW5hYmxlZCB8fCByb2NrZXRfbWl4cGFuZWxfZGF0YS5vcHRpbl9lbmFibGVkID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElkZW50aWZ5IHVzZXIgd2l0aCBoYXNoZWQgbGljZW5zZSBlbWFpbCBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgIGlmIChyb2NrZXRfbWl4cGFuZWxfZGF0YS51c2VyX2lkICYmIHR5cGVvZiBtaXhwYW5lbC5pZGVudGlmeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIG1peHBhbmVsLmlkZW50aWZ5KHJvY2tldF9taXhwYW5lbF9kYXRhLnVzZXJfaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtaXhwYW5lbC50cmFjaygnQnV0dG9uIENsaWNrZWQnLCB7XG4gICAgICAgICAgICAgICAgJ2J1dHRvbic6IGJ1dHRvbixcblx0XHRcdFx0J2J1dHRvbl9jb250ZXh0JzogY29udGV4dCxcblx0XHRcdFx0J3BsdWdpbic6IHJvY2tldF9taXhwYW5lbF9kYXRhLnBsdWdpbixcbiAgICAgICAgICAgICAgICAnYnJhbmQnOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5icmFuZCxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24nOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5hcHAsXG4gICAgICAgICAgICAgICAgJ2NvbnRleHQnOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICdwYXRoJzogcm9ja2V0X21peHBhbmVsX2RhdGEucGF0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYWtlIGZ1bmN0aW9uIGdsb2JhbGx5IGF2YWlsYWJsZVxuICAgIHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24gPSB3cHJUcmFja0hlbHBCdXR0b247XG59KTtcbiIsImZ1bmN0aW9uIGdldFRpbWVSZW1haW5pbmcoZW5kdGltZSl7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRvdGFsID0gKGVuZHRpbWUgKiAxMDAwKSAtIHN0YXJ0O1xuICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLmZsb29yKCAodG90YWwvMTAwMCkgJSA2MCApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCAodG90YWwvMTAwMC82MCkgJSA2MCApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vciggKHRvdGFsLygxMDAwKjYwKjYwKSkgJSAyNCApO1xuICAgIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKCB0b3RhbC8oMTAwMCo2MCo2MCoyNCkgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHRvdGFsLFxuICAgICAgICBkYXlzLFxuICAgICAgICBob3VycyxcbiAgICAgICAgbWludXRlcyxcbiAgICAgICAgc2Vjb25kc1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVDbG9jayhpZCwgZW5kdGltZSkge1xuICAgIGNvbnN0IGNsb2NrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgaWYgKGNsb2NrID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXlzU3BhbiA9IGNsb2NrLnF1ZXJ5U2VsZWN0b3IoJy5yb2NrZXQtY291bnRkb3duLWRheXMnKTtcbiAgICBjb25zdCBob3Vyc1NwYW4gPSBjbG9jay5xdWVyeVNlbGVjdG9yKCcucm9ja2V0LWNvdW50ZG93bi1ob3VycycpO1xuICAgIGNvbnN0IG1pbnV0ZXNTcGFuID0gY2xvY2sucXVlcnlTZWxlY3RvcignLnJvY2tldC1jb3VudGRvd24tbWludXRlcycpO1xuICAgIGNvbnN0IHNlY29uZHNTcGFuID0gY2xvY2sucXVlcnlTZWxlY3RvcignLnJvY2tldC1jb3VudGRvd24tc2Vjb25kcycpO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlQ2xvY2soKSB7XG4gICAgICAgIGNvbnN0IHQgPSBnZXRUaW1lUmVtYWluaW5nKGVuZHRpbWUpO1xuXG4gICAgICAgIGlmICh0LnRvdGFsIDwgMCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1laW50ZXJ2YWwpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBkYXlzU3Bhbi5pbm5lckhUTUwgPSB0LmRheXM7XG4gICAgICAgIGhvdXJzU3Bhbi5pbm5lckhUTUwgPSAoJzAnICsgdC5ob3Vycykuc2xpY2UoLTIpO1xuICAgICAgICBtaW51dGVzU3Bhbi5pbm5lckhUTUwgPSAoJzAnICsgdC5taW51dGVzKS5zbGljZSgtMik7XG4gICAgICAgIHNlY29uZHNTcGFuLmlubmVySFRNTCA9ICgnMCcgKyB0LnNlY29uZHMpLnNsaWNlKC0yKTtcbiAgICB9XG5cbiAgICB1cGRhdGVDbG9jaygpO1xuICAgIGNvbnN0IHRpbWVpbnRlcnZhbCA9IHNldEludGVydmFsKHVwZGF0ZUNsb2NrLCAxMDAwKTtcbn1cblxuZnVuY3Rpb24gcnVjc3NUaW1lcihpZCwgZW5kdGltZSkge1xuXHRjb25zdCB0aW1lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0Y29uc3Qgbm90aWNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JvY2tldC1ub3RpY2Utc2Fhcy1wcm9jZXNzaW5nJyk7XG5cdGNvbnN0IHN1Y2Nlc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9ja2V0LW5vdGljZS1zYWFzLXN1Y2Nlc3MnKTtcblxuXHRpZiAodGltZXIgPT09IG51bGwpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVUaW1lcigpIHtcblx0XHRjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG5cdFx0Y29uc3QgcmVtYWluaW5nID0gTWF0aC5mbG9vciggKCAoZW5kdGltZSAqIDEwMDApIC0gc3RhcnQgKSAvIDEwMDAgKTtcblxuXHRcdGlmIChyZW1haW5pbmcgPD0gMCkge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aW1lckludGVydmFsKTtcblxuXHRcdFx0aWYgKG5vdGljZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRub3RpY2UuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdWNjZXNzICE9PSBudWxsKSB7XG5cdFx0XHRcdHN1Y2Nlc3MuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggcm9ja2V0X2FqYXhfZGF0YS5jcm9uX2Rpc2FibGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuXHRcdFx0ZGF0YS5hcHBlbmQoICdhY3Rpb24nLCAncm9ja2V0X3NwYXduX2Nyb24nICk7XG5cdFx0XHRkYXRhLmFwcGVuZCggJ25vbmNlJywgcm9ja2V0X2FqYXhfZGF0YS5ub25jZSApO1xuXG5cdFx0XHRmZXRjaCggYWpheHVybCwge1xuXHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdFx0Y3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG5cdFx0XHRcdGJvZHk6IGRhdGFcblx0XHRcdH0gKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRpbWVyLmlubmVySFRNTCA9IHJlbWFpbmluZztcblx0fVxuXG5cdHVwZGF0ZVRpbWVyKCk7XG5cdGNvbnN0IHRpbWVySW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggdXBkYXRlVGltZXIsIDEwMDApO1xufVxuXG5pZiAoIURhdGUubm93KSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuaWYgKHR5cGVvZiByb2NrZXRfYWpheF9kYXRhLnByb21vX2VuZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpbml0aWFsaXplQ2xvY2soJ3JvY2tldC1wcm9tby1jb3VudGRvd24nLCByb2NrZXRfYWpheF9kYXRhLnByb21vX2VuZCk7XG59XG5cbmlmICh0eXBlb2Ygcm9ja2V0X2FqYXhfZGF0YS5saWNlbnNlX2V4cGlyYXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaW5pdGlhbGl6ZUNsb2NrKCdyb2NrZXQtcmVuZXctY291bnRkb3duJywgcm9ja2V0X2FqYXhfZGF0YS5saWNlbnNlX2V4cGlyYXRpb24pO1xufVxuXG5pZiAodHlwZW9mIHJvY2tldF9hamF4X2RhdGEubm90aWNlX2VuZF90aW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJ1Y3NzVGltZXIoJ3JvY2tldC1ydWNzcy10aW1lcicsIHJvY2tldF9hamF4X2RhdGEubm90aWNlX2VuZF90aW1lKTtcbn0iLCJpbXBvcnQgJy4uL2N1c3RvbS9jdXN0b20tc2VsZWN0LmpzJztcblxudmFyICQgPSBqUXVlcnk7XG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe1xuXG5cbiAgICAvKioqXG4gICAgKiBDaGVjayBwYXJlbnQgLyBzaG93IGNoaWxkcmVuXG4gICAgKioqL1xuXG5cdGZ1bmN0aW9uIHdwclNob3dDaGlsZHJlbihhRWxlbSl7XG5cdFx0dmFyIHBhcmVudElkLCAkY2hpbGRyZW47XG5cblx0XHRhRWxlbSAgICAgPSAkKCBhRWxlbSApO1xuXHRcdHBhcmVudElkICA9IGFFbGVtLmF0dHIoJ2lkJyk7XG5cdFx0JGNoaWxkcmVuID0gJCgnW2RhdGEtcGFyZW50PVwiJyArIHBhcmVudElkICsgJ1wiXScpO1xuXG5cdFx0Ly8gVGVzdCBjaGVjayBmb3Igc3dpdGNoXG5cdFx0aWYoYUVsZW0uaXMoJzpjaGVja2VkJykpe1xuXHRcdFx0JGNoaWxkcmVuLmFkZENsYXNzKCd3cHItaXNPcGVuJyk7XG5cblx0XHRcdCRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICQodGhpcykuZmluZCgnaW5wdXRbdHlwZT1jaGVja2JveF0nKS5pcygnOmNoZWNrZWQnKSkge1xuXHRcdFx0XHRcdHZhciBpZCA9ICQodGhpcykuZmluZCgnaW5wdXRbdHlwZT1jaGVja2JveF0nKS5hdHRyKCdpZCcpO1xuXG5cdFx0XHRcdFx0JCgnW2RhdGEtcGFyZW50PVwiJyArIGlkICsgJ1wiXScpLmFkZENsYXNzKCd3cHItaXNPcGVuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0JGNoaWxkcmVuLnJlbW92ZUNsYXNzKCd3cHItaXNPcGVuJyk7XG5cblx0XHRcdCRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgaWQgPSAkKHRoaXMpLmZpbmQoJ2lucHV0W3R5cGU9Y2hlY2tib3hdJykuYXR0cignaWQnKTtcblxuXHRcdFx0XHQkKCdbZGF0YS1wYXJlbnQ9XCInICsgaWQgKyAnXCJdJykucmVtb3ZlQ2xhc3MoJ3dwci1pc09wZW4nKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG4gICAgLyoqXG4gICAgICogVGVsbCBpZiB0aGUgZ2l2ZW4gY2hpbGQgZmllbGQgaGFzIGFuIGFjdGl2ZSBwYXJlbnQgZmllbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIG9iamVjdCAkZmllbGQgQSBqUXVlcnkgb2JqZWN0IG9mIGEgXCIud3ByLWZpZWxkXCIgZmllbGQuXG4gICAgICogQHJldHVybiBib29sfG51bGxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cHJJc1BhcmVudEFjdGl2ZSggJGZpZWxkICkge1xuICAgICAgICB2YXIgJHBhcmVudDtcblxuICAgICAgICBpZiAoICEgJGZpZWxkLmxlbmd0aCApIHtcbiAgICAgICAgICAgIC8vIMKvXFxfKOODhClfL8KvXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgICRwYXJlbnQgPSAkZmllbGQuZGF0YSggJ3BhcmVudCcgKTtcblxuICAgICAgICBpZiAoIHR5cGVvZiAkcGFyZW50ICE9PSAnc3RyaW5nJyApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgZmllbGQgaGFzIG5vIHBhcmVudCBmaWVsZDogdGhlbiB3ZSBjYW4gZGlzcGxheSBpdC5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgJHBhcmVudCA9ICRwYXJlbnQucmVwbGFjZSggL15cXHMrfFxccyskL2csICcnICk7XG5cbiAgICAgICAgaWYgKCAnJyA9PT0gJHBhcmVudCApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgZmllbGQgaGFzIG5vIHBhcmVudCBmaWVsZDogdGhlbiB3ZSBjYW4gZGlzcGxheSBpdC5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgJHBhcmVudCA9ICQoICcjJyArICRwYXJlbnQgKTtcblxuICAgICAgICBpZiAoICEgJHBhcmVudC5sZW5ndGggKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGZpZWxkJ3MgcGFyZW50IGlzIG1pc3Npbmc6IGxldCdzIGNvbnNpZGVyIGl0J3Mgbm90IGFjdGl2ZSB0aGVuLlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCAhICRwYXJlbnQuaXMoICc6Y2hlY2tlZCcgKSAmJiAkcGFyZW50LmlzKCdpbnB1dCcpKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGZpZWxkJ3MgcGFyZW50IGlzIGNoZWNrYm94IGFuZCBub3QgY2hlY2tlZDogZG9uJ3QgZGlzcGxheSB0aGUgZmllbGQgdGhlbi5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG5cdFx0aWYgKCAhJHBhcmVudC5oYXNDbGFzcygncmFkaW8tYWN0aXZlJykgJiYgJHBhcmVudC5pcygnYnV0dG9uJykpIHtcblx0XHRcdC8vIFRoaXMgZmllbGQncyBwYXJlbnQgYnV0dG9uIGFuZCBpcyBub3QgYWN0aXZlOiBkb24ndCBkaXNwbGF5IHRoZSBmaWVsZCB0aGVuLlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cbiAgICAgICAgLy8gR28gcmVjdXJzaXZlIHRvIHRoZSBsYXN0IHBhcmVudC5cbiAgICAgICAgcmV0dXJuIHdwcklzUGFyZW50QWN0aXZlKCAkcGFyZW50LmNsb3Nlc3QoICcud3ByLWZpZWxkJyApICk7XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBNYXNrcyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gYW4gaW5wdXQgZmllbGQgYnkgcmVwbGFjaW5nIGFsbCBidXQgdGhlIGxhc3QgNCBjaGFyYWN0ZXJzIHdpdGggYXN0ZXJpc2tzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRfc2VsZWN0b3IgLSBUaGUgSUQgb2YgdGhlIGlucHV0IGZpZWxkIHRvIGJlIG1hc2tlZC5cblx0ICogQHJldHVybnMge3ZvaWR9IC0gTW9kaWZpZXMgdGhlIGlucHV0IGZpZWxkIHZhbHVlIGluLXBsYWNlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiAvLyBIVE1MOiA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImNyZWRpdENhcmRJbnB1dFwiIHZhbHVlPVwiMTIzNDU2Nzg5MDEyMzQ1NlwiPlxuXHQgKiBtYXNrRmllbGQoJ2NyZWRpdENhcmRJbnB1dCcpO1xuXHQgKiAvLyBSZXN1bHQ6IFVwZGF0ZXMgdGhlIGlucHV0IGZpZWxkIHZhbHVlIHRvICcqKioqKioqKioqKiozNDU2Jy5cblx0ICovXG5cdGZ1bmN0aW9uIG1hc2tGaWVsZChwcm94eV9zZWxlY3RvciwgY29uY3JldGVfc2VsZWN0b3IpIHtcblx0XHR2YXIgY29uY3JldGUgPSB7XG5cdFx0XHQndmFsJzogY29uY3JldGVfc2VsZWN0b3IudmFsKCksXG5cdFx0XHQnbGVuZ3RoJzogY29uY3JldGVfc2VsZWN0b3IudmFsKCkubGVuZ3RoXG5cdFx0fVxuXG5cdFx0aWYgKGNvbmNyZXRlLmxlbmd0aCA+IDQpIHtcblxuXHRcdFx0dmFyIGhpZGRlblBhcnQgPSAnXFx1MjAyMicucmVwZWF0KE1hdGgubWF4KDAsIGNvbmNyZXRlLmxlbmd0aCAtIDQpKTtcblx0XHRcdHZhciB2aXNpYmxlUGFydCA9IGNvbmNyZXRlLnZhbC5zbGljZSgtNCk7XG5cblx0XHRcdC8vIENvbWJpbmUgdGhlIGhpZGRlbiBhbmQgdmlzaWJsZSBwYXJ0c1xuXHRcdFx0dmFyIG1hc2tlZFZhbHVlID0gaGlkZGVuUGFydCArIHZpc2libGVQYXJ0O1xuXG5cdFx0XHRwcm94eV9zZWxlY3Rvci52YWwobWFza2VkVmFsdWUpO1xuXHRcdH1cblx0XHQvLyBFbnN1cmUgZXZlbnRzIGFyZSBub3QgYWRkZWQgbW9yZSB0aGFuIG9uY2Vcblx0XHRpZiAoIXByb3h5X3NlbGVjdG9yLmRhdGEoJ2V2ZW50c0F0dGFjaGVkJykpIHtcblx0XHRcdHByb3h5X3NlbGVjdG9yLm9uKCdpbnB1dCcsIGhhbmRsZUlucHV0KTtcblx0XHRcdHByb3h5X3NlbGVjdG9yLm9uKCdmb2N1cycsIGhhbmRsZUZvY3VzKTtcblx0XHRcdHByb3h5X3NlbGVjdG9yLmRhdGEoJ2V2ZW50c0F0dGFjaGVkJywgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogSGFuZGxlIHRoZSBpbnB1dCBldmVudFxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGhhbmRsZUlucHV0KCkge1xuXHRcdFx0dmFyIHByb3h5VmFsdWUgPSBwcm94eV9zZWxlY3Rvci52YWwoKTtcblx0XHRcdGlmIChwcm94eVZhbHVlLmluZGV4T2YoJ1xcdTIwMjInKSA9PT0gLTEpIHtcblx0XHRcdFx0Y29uY3JldGVfc2VsZWN0b3IudmFsKHByb3h5VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEhhbmRsZSB0aGUgZm9jdXMgZXZlbnRcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcblx0XHRcdHZhciBjb25jcmV0ZV92YWx1ZSA9IGNvbmNyZXRlX3NlbGVjdG9yLnZhbCgpO1xuXHRcdFx0cHJveHlfc2VsZWN0b3IudmFsKGNvbmNyZXRlX3ZhbHVlKTtcblx0XHR9XG5cblx0fVxuXG5cdFx0Ly8gVXBkYXRlIHRoZSBjb25jcmV0ZSBmaWVsZCB3aGVuIHRoZSBwcm94eSBpcyB1cGRhdGVkLlxuXG5cblx0bWFza0ZpZWxkKCQoJyNjbG91ZGZsYXJlX2FwaV9rZXlfbWFzaycpLCAkKCcjY2xvdWRmbGFyZV9hcGlfa2V5JykpO1xuXHRtYXNrRmllbGQoJCgnI2Nsb3VkZmxhcmVfem9uZV9pZF9tYXNrJyksICQoJyNjbG91ZGZsYXJlX3pvbmVfaWQnKSk7XG5cblx0Ly8gRGlzcGxheS9IaWRlIGNoaWxkcmVuIGZpZWxkcyBvbiBjaGVja2JveCBjaGFuZ2UuXG4gICAgJCggJy53cHItaXNQYXJlbnQgaW5wdXRbdHlwZT1jaGVja2JveF0nICkub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB3cHJTaG93Q2hpbGRyZW4oJCh0aGlzKSk7XG4gICAgfSk7XG5cbiAgICAvLyBPbiBwYWdlIGxvYWQsIGRpc3BsYXkgdGhlIGFjdGl2ZSBmaWVsZHMuXG4gICAgJCggJy53cHItZmllbGQtLWNoaWxkcmVuJyApLmVhY2goIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGZpZWxkID0gJCggdGhpcyApO1xuXG4gICAgICAgIGlmICggd3BySXNQYXJlbnRBY3RpdmUoICRmaWVsZCApICkge1xuICAgICAgICAgICAgJGZpZWxkLmFkZENsYXNzKCAnd3ByLWlzT3BlbicgKTtcbiAgICAgICAgfVxuICAgIH0gKTtcblxuXG5cblxuICAgIC8qKipcbiAgICAqIFdhcm5pbmcgZmllbGRzXG4gICAgKioqL1xuXG4gICAgdmFyICR3YXJuaW5nUGFyZW50ID0gJCgnLndwci1maWVsZC0tcGFyZW50Jyk7XG4gICAgdmFyICR3YXJuaW5nUGFyZW50SW5wdXQgPSAkKCcud3ByLWZpZWxkLS1wYXJlbnQgaW5wdXRbdHlwZT1jaGVja2JveF0nKTtcblxuICAgIC8vIElmIGFscmVhZHkgY2hlY2tlZFxuICAgICR3YXJuaW5nUGFyZW50SW5wdXQuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICB3cHJTaG93Q2hpbGRyZW4oJCh0aGlzKSk7XG4gICAgfSk7XG5cbiAgICAkd2FybmluZ1BhcmVudC5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHdwclNob3dXYXJuaW5nKCQodGhpcykpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gd3ByU2hvd1dhcm5pbmcoYUVsZW0pe1xuICAgICAgICB2YXIgJHdhcm5pbmdGaWVsZCA9IGFFbGVtLm5leHQoJy53cHItZmllbGRXYXJuaW5nJyksXG4gICAgICAgICAgICAkdGhpc0NoZWNrYm94ID0gYUVsZW0uZmluZCgnaW5wdXRbdHlwZT1jaGVja2JveF0nKSxcbiAgICAgICAgICAgICRuZXh0V2FybmluZyA9IGFFbGVtLnBhcmVudCgpLm5leHQoJy53cHItd2FybmluZ0NvbnRhaW5lcicpLFxuICAgICAgICAgICAgJG5leHRGaWVsZHMgPSAkbmV4dFdhcm5pbmcuZmluZCgnLndwci1maWVsZCcpLFxuICAgICAgICAgICAgcGFyZW50SWQgPSBhRWxlbS5maW5kKCdpbnB1dFt0eXBlPWNoZWNrYm94XScpLmF0dHIoJ2lkJyksXG4gICAgICAgICAgICAkY2hpbGRyZW4gPSAkKCdbZGF0YS1wYXJlbnQ9XCInICsgcGFyZW50SWQgKyAnXCJdJylcbiAgICAgICAgO1xuXG4gICAgICAgIC8vIENoZWNrIHdhcm5pbmcgcGFyZW50XG4gICAgICAgIGlmKCR0aGlzQ2hlY2tib3guaXMoJzpjaGVja2VkJykpe1xuICAgICAgICAgICAgJHdhcm5pbmdGaWVsZC5hZGRDbGFzcygnd3ByLWlzT3BlbicpO1xuICAgICAgICAgICAgJHRoaXNDaGVja2JveC5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgYUVsZW0udHJpZ2dlcignY2hhbmdlJyk7XG5cblxuICAgICAgICAgICAgdmFyICR3YXJuaW5nQnV0dG9uID0gJHdhcm5pbmdGaWVsZC5maW5kKCcud3ByLWJ1dHRvbicpO1xuXG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgd2FybmluZ1xuICAgICAgICAgICAgJHdhcm5pbmdCdXR0b24ub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAkdGhpc0NoZWNrYm94LnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAkd2FybmluZ0ZpZWxkLnJlbW92ZUNsYXNzKCd3cHItaXNPcGVuJyk7XG4gICAgICAgICAgICAgICAgJGNoaWxkcmVuLmFkZENsYXNzKCd3cHItaXNPcGVuJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBuZXh0IGVsZW0gPSBkaXNhYmxlZFxuICAgICAgICAgICAgICAgIGlmKCRuZXh0V2FybmluZy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgJG5leHRGaWVsZHMucmVtb3ZlQ2xhc3MoJ3dwci1pc0Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICRuZXh0RmllbGRzLmZpbmQoJ2lucHV0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICRuZXh0RmllbGRzLmFkZENsYXNzKCd3cHItaXNEaXNhYmxlZCcpO1xuICAgICAgICAgICAgJG5leHRGaWVsZHMuZmluZCgnaW5wdXQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgJG5leHRGaWVsZHMuZmluZCgnaW5wdXRbdHlwZT1jaGVja2JveF0nKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgJGNoaWxkcmVuLnJlbW92ZUNsYXNzKCd3cHItaXNPcGVuJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDTkFNRVMgYWRkL3JlbW92ZSBsaW5lc1xuICAgICAqL1xuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcud3ByLW11bHRpcGxlLWNsb3NlJywgZnVuY3Rpb24oZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHQkKHRoaXMpLnBhcmVudCgpLnNsaWRlVXAoICdzbG93JyAsIGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmUoKTsgfSApO1xuXHR9ICk7XG5cblx0JCgnLndwci1idXR0b24tLWFkZE11bHRpJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJCgkKCcjd3ByLWNuYW1lLW1vZGVsJykuaHRtbCgpKS5hcHBlbmRUbygnI3dwci1jbmFtZXMtbGlzdCcpO1xuICAgIH0pO1xuXG5cdC8qKipcblx0ICogV3ByIFJhZGlvIGJ1dHRvblxuXHQgKioqL1xuXHR2YXIgZGlzYWJsZV9yYWRpb193YXJuaW5nID0gZmFsc2U7XG5cblx0JChkb2N1bWVudCkub24oJ2NsaWNrJywgJy53cHItcmFkaW8tYnV0dG9ucy1jb250YWluZXIgYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRpZigkKHRoaXMpLmhhc0NsYXNzKCdyYWRpby1hY3RpdmUnKSl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHZhciAkcGFyZW50ID0gJCh0aGlzKS5wYXJlbnRzKCcud3ByLXJhZGlvLWJ1dHRvbnMnKTtcblx0XHQkcGFyZW50LmZpbmQoJy53cHItcmFkaW8tYnV0dG9ucy1jb250YWluZXIgYnV0dG9uJykucmVtb3ZlQ2xhc3MoJ3JhZGlvLWFjdGl2ZScpO1xuXHRcdCRwYXJlbnQuZmluZCgnLndwci1leHRyYS1maWVsZHMtY29udGFpbmVyJykucmVtb3ZlQ2xhc3MoJ3dwci1pc09wZW4nKTtcblx0XHQkcGFyZW50LmZpbmQoJy53cHItZmllbGRXYXJuaW5nJykucmVtb3ZlQ2xhc3MoJ3dwci1pc09wZW4nKTtcblx0XHQkKHRoaXMpLmFkZENsYXNzKCdyYWRpby1hY3RpdmUnKTtcblx0XHR3cHJTaG93UmFkaW9XYXJuaW5nKCQodGhpcykpO1xuXG5cdH0gKTtcblxuXG5cdGZ1bmN0aW9uIHdwclNob3dSYWRpb1dhcm5pbmcoJGVsbSl7XG5cdFx0ZGlzYWJsZV9yYWRpb193YXJuaW5nID0gZmFsc2U7XG5cdFx0JGVsbS50cmlnZ2VyKCBcImJlZm9yZV9zaG93X3JhZGlvX3dhcm5pbmdcIiwgWyAkZWxtIF0gKTtcblx0XHRpZiAoISRlbG0uaGFzQ2xhc3MoJ2hhcy13YXJuaW5nJykgfHwgZGlzYWJsZV9yYWRpb193YXJuaW5nKSB7XG5cdFx0XHR3cHJTaG93UmFkaW9CdXR0b25DaGlsZHJlbigkZWxtKTtcblx0XHRcdCRlbG0udHJpZ2dlciggXCJyYWRpb19idXR0b25fc2VsZWN0ZWRcIiwgWyAkZWxtIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dmFyICR3YXJuaW5nRmllbGQgPSAkKCdbZGF0YS1wYXJlbnQ9XCInICsgJGVsbS5hdHRyKCdpZCcpICsgJ1wiXS53cHItZmllbGRXYXJuaW5nJyk7XG5cdFx0JHdhcm5pbmdGaWVsZC5hZGRDbGFzcygnd3ByLWlzT3BlbicpO1xuXHRcdHZhciAkd2FybmluZ0J1dHRvbiA9ICR3YXJuaW5nRmllbGQuZmluZCgnLndwci1idXR0b24nKTtcblxuXHRcdC8vIFZhbGlkYXRlIHRoZSB3YXJuaW5nXG5cdFx0JHdhcm5pbmdCdXR0b24ub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcblx0XHRcdCR3YXJuaW5nRmllbGQucmVtb3ZlQ2xhc3MoJ3dwci1pc09wZW4nKTtcblx0XHRcdHdwclNob3dSYWRpb0J1dHRvbkNoaWxkcmVuKCRlbG0pO1xuXHRcdFx0JGVsbS50cmlnZ2VyKCBcInJhZGlvX2J1dHRvbl9zZWxlY3RlZFwiLCBbICRlbG0gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3ByU2hvd1JhZGlvQnV0dG9uQ2hpbGRyZW4oJGVsbSkge1xuXHRcdHZhciAkcGFyZW50ID0gJGVsbS5wYXJlbnRzKCcud3ByLXJhZGlvLWJ1dHRvbnMnKTtcblx0XHR2YXIgJGNoaWxkcmVuID0gJCgnLndwci1leHRyYS1maWVsZHMtY29udGFpbmVyW2RhdGEtcGFyZW50PVwiJyArICRlbG0uYXR0cignaWQnKSArICdcIl0nKTtcblx0XHQkY2hpbGRyZW4uYWRkQ2xhc3MoJ3dwci1pc09wZW4nKTtcblx0fVxuXG5cdC8qKipcblx0ICogV3ByIE9wdGltaXplIENzcyBEZWxpdmVyeSBGaWVsZFxuXHQgKioqL1xuXHR2YXIgcnVjc3NBY3RpdmUgPSBwYXJzZUludCgkKCcjcmVtb3ZlX3VudXNlZF9jc3MnKS52YWwoKSk7XG5cblx0JCggXCIjb3B0aW1pemVfY3NzX2RlbGl2ZXJ5X21ldGhvZCAud3ByLXJhZGlvLWJ1dHRvbnMtY29udGFpbmVyIGJ1dHRvblwiIClcblx0XHQub24oIFwicmFkaW9fYnV0dG9uX3NlbGVjdGVkXCIsIGZ1bmN0aW9uKCBldmVudCwgJGVsbSApIHtcblx0XHRcdHRvZ2dsZUFjdGl2ZU9wdGltaXplQ3NzRGVsaXZlcnlNZXRob2QoJGVsbSk7XG5cdFx0fSk7XG5cblx0JChcIiNvcHRpbWl6ZV9jc3NfZGVsaXZlcnlcIikub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24oKXtcblx0XHRpZiggJCh0aGlzKS5pcyhcIjpub3QoOmNoZWNrZWQpXCIpICl7XG5cdFx0XHRkaXNhYmxlT3B0aW1pemVDc3NEZWxpdmVyeSgpO1xuXHRcdH1lbHNle1xuXHRcdFx0dmFyIGRlZmF1bHRfcmFkaW9fYnV0dG9uX2lkID0gJyMnKyQoJyNvcHRpbWl6ZV9jc3NfZGVsaXZlcnlfbWV0aG9kJykuZGF0YSggJ2RlZmF1bHQnICk7XG5cdFx0XHQkKGRlZmF1bHRfcmFkaW9fYnV0dG9uX2lkKS50cmlnZ2VyKCdjbGljaycpO1xuXHRcdH1cblx0fSk7XG5cblx0ZnVuY3Rpb24gdG9nZ2xlQWN0aXZlT3B0aW1pemVDc3NEZWxpdmVyeU1ldGhvZCgkZWxtKSB7XG5cdFx0dmFyIG9wdGltaXplX21ldGhvZCA9ICRlbG0uZGF0YSgndmFsdWUnKTtcblx0XHRpZigncmVtb3ZlX3VudXNlZF9jc3MnID09PSBvcHRpbWl6ZV9tZXRob2Qpe1xuXHRcdFx0JCgnI3JlbW92ZV91bnVzZWRfY3NzJykudmFsKDEpO1xuXHRcdFx0JCgnI2FzeW5jX2NzcycpLnZhbCgwKTtcblx0XHR9ZWxzZXtcblx0XHRcdCQoJyNyZW1vdmVfdW51c2VkX2NzcycpLnZhbCgwKTtcblx0XHRcdCQoJyNhc3luY19jc3MnKS52YWwoMSk7XG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBkaXNhYmxlT3B0aW1pemVDc3NEZWxpdmVyeSgpIHtcblx0XHQkKCcjcmVtb3ZlX3VudXNlZF9jc3MnKS52YWwoMCk7XG5cdFx0JCgnI2FzeW5jX2NzcycpLnZhbCgwKTtcblx0fVxuXG5cdCQoIFwiI29wdGltaXplX2Nzc19kZWxpdmVyeV9tZXRob2QgLndwci1yYWRpby1idXR0b25zLWNvbnRhaW5lciBidXR0b25cIiApXG5cdFx0Lm9uKCBcImJlZm9yZV9zaG93X3JhZGlvX3dhcm5pbmdcIiwgZnVuY3Rpb24oIGV2ZW50LCAkZWxtICkge1xuXHRcdFx0ZGlzYWJsZV9yYWRpb193YXJuaW5nID0gKCdyZW1vdmVfdW51c2VkX2NzcycgPT09ICRlbG0uZGF0YSgndmFsdWUnKSAmJiAxID09PSBydWNzc0FjdGl2ZSlcblx0XHR9KTtcblxuXHQkKCBcIi53cHItbXVsdGlwbGUtc2VsZWN0IC53cHItbGlzdC1oZWFkZXJcIiApLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG5cdFx0JChlLnRhcmdldCkuY2xvc2VzdCgnLndwci1tdWx0aXBsZS1zZWxlY3QgLndwci1saXN0JykudG9nZ2xlQ2xhc3MoJ29wZW4nKTtcblx0fSk7XG5cblx0JCgnLndwci1tdWx0aXBsZS1zZWxlY3QgLndwci1jaGVja2JveCcpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG5cdFx0Y29uc3QgY2hlY2tib3ggPSAkKHRoaXMpLmZpbmQoJ2lucHV0Jyk7XG5cdFx0Y29uc3QgaXNfY2hlY2tlZCA9IGNoZWNrYm94LmF0dHIoJ2NoZWNrZWQnKSAhPT0gdW5kZWZpbmVkO1xuXHRcdGNoZWNrYm94LmF0dHIoJ2NoZWNrZWQnLCBpc19jaGVja2VkID8gbnVsbCA6ICdjaGVja2VkJyApO1xuXHRcdGNvbnN0IHN1Yl9jaGVja2JveGVzID0gJChjaGVja2JveCkuY2xvc2VzdCgnLndwci1saXN0JykuZmluZCgnLndwci1saXN0LWJvZHkgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG5cdFx0aWYoY2hlY2tib3guaGFzQ2xhc3MoJ3dwci1tYWluLWNoZWNrYm94JykpIHtcblx0XHRcdCQubWFwKHN1Yl9jaGVja2JveGVzLCBjaGVja2JveCA9PiB7XG5cdFx0XHRcdCQoY2hlY2tib3gpLmF0dHIoJ2NoZWNrZWQnLCBpc19jaGVja2VkID8gbnVsbCA6ICdjaGVja2VkJyApO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1haW5fY2hlY2tib3ggPSAkKGNoZWNrYm94KS5jbG9zZXN0KCcud3ByLWxpc3QnKS5maW5kKCcud3ByLW1haW4tY2hlY2tib3gnKTtcblxuXHRcdGNvbnN0IHN1Yl9jaGVja2VkID0gICQubWFwKHN1Yl9jaGVja2JveGVzLCBjaGVja2JveCA9PiB7XG5cdFx0XHRpZigkKGNoZWNrYm94KS5hdHRyKCdjaGVja2VkJykgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNoZWNrYm94O1xuXHRcdH0pO1xuXHRcdG1haW5fY2hlY2tib3guYXR0cignY2hlY2tlZCcsIHN1Yl9jaGVja2VkLmxlbmd0aCA9PT0gc3ViX2NoZWNrYm94ZXMubGVuZ3RoID8gJ2NoZWNrZWQnIDogbnVsbCApO1xuXHR9KTtcblxuXHRpZiAoICQoICcud3ByLW1haW4tY2hlY2tib3gnICkubGVuZ3RoID4gMCApIHtcblx0XHQkKCcud3ByLW1haW4tY2hlY2tib3gnKS5lYWNoKChjaGVja2JveF9rZXksIGNoZWNrYm94KSA9PiB7XG5cdFx0XHRsZXQgcGFyZW50X2xpc3QgPSAkKGNoZWNrYm94KS5wYXJlbnRzKCcud3ByLWxpc3QnKTtcblx0XHRcdGxldCBub3RfY2hlY2tlZCA9IHBhcmVudF9saXN0LmZpbmQoICcud3ByLWxpc3QtYm9keSBpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmNoZWNrZWQpJyApLmxlbmd0aDtcblx0XHRcdCQoY2hlY2tib3gpLmF0dHIoJ2NoZWNrZWQnLCBub3RfY2hlY2tlZCA8PSAwID8gJ2NoZWNrZWQnIDogbnVsbCApO1xuXHRcdH0pO1xuXHR9XG5cblx0bGV0IGNoZWNrQm94Q291bnRlciA9IHtcblx0XHRjaGVja2VkOiB7fSxcblx0XHR0b3RhbDoge31cblx0fTtcblx0JCgnLndwci1maWVsZC0tY2F0ZWdvcml6ZWRtdWx0aXNlbGVjdCAud3ByLWxpc3QnKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHQvLyBHZXQgdGhlIElEIG9mIHRoZSBjdXJyZW50IGVsZW1lbnRcblx0XHRsZXQgaWQgPSAkKHRoaXMpLmF0dHIoJ2lkJyk7XG5cdFx0aWYgKGlkKSB7XG5cdFx0XHRjaGVja0JveENvdW50ZXIuY2hlY2tlZFtpZF0gPSAkKGAjJHtpZH0gaW5wdXRbdHlwZT0nY2hlY2tib3gnXTpjaGVja2VkYCkubGVuZ3RoO1xuXHRcdFx0Y2hlY2tCb3hDb3VudGVyLnRvdGFsW2lkXSA9ICQoYCMke2lkfSBpbnB1dFt0eXBlPSdjaGVja2JveCddOm5vdCgud3ByLW1haW4tY2hlY2tib3gpYCkubGVuZ3RoO1xuXHRcdFx0Ly8gVXBkYXRlIHRoZSBjb3VudGVyIHRleHRcblx0XHRcdCQoYCMke2lkfSAud3ByLWJhZGdlLWNvdW50ZXIgc3BhbmApLnRleHQoY2hlY2tCb3hDb3VudGVyLmNoZWNrZWRbaWRdKTtcblx0XHRcdC8vIFNob3cgb3IgaGlkZSB0aGUgY291bnRlciBiYWRnZSBiYXNlZCBvbiB0aGUgY291bnRcblx0XHRcdCQoYCMke2lkfSAud3ByLWJhZGdlLWNvdW50ZXJgKS50b2dnbGUoY2hlY2tCb3hDb3VudGVyLmNoZWNrZWRbaWRdID4gMCk7XG5cblx0XHRcdC8vIENoZWNrIHRoZSBzZWxlY3QgYWxsIG9wdGlvbiBpZiBhbGwgZXhjbHVzaW9ucyBhcmUgY2hlY2tlZCBpbiBhIHNlY3Rpb24uXG5cdFx0XHRpZiAoY2hlY2tCb3hDb3VudGVyLmNoZWNrZWRbaWRdID09PSBjaGVja0JveENvdW50ZXIudG90YWxbaWRdKSB7XG5cdFx0XHRcdCQoYCMke2lkfSAud3ByLW1haW4tY2hlY2tib3hgKS5hdHRyKCdjaGVja2VkJywgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvKipcblx0ICogRGVsYXkgSlMgRXhlY3V0aW9uIFNhZmUgTW9kZSBGaWVsZFxuXHQgKi9cblx0dmFyICRkamVfc2FmZV9tb2RlX2NoZWNrYm94ID0gJCgnI2RlbGF5X2pzX2V4ZWN1dGlvbl9zYWZlX21vZGUnKTtcblx0JCgnI2RlbGF5X2pzJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoJCh0aGlzKS5pcygnOm5vdCg6Y2hlY2tlZCknKSAmJiAkZGplX3NhZmVfbW9kZV9jaGVja2JveC5pcygnOmNoZWNrZWQnKSkge1xuXHRcdFx0JGRqZV9zYWZlX21vZGVfY2hlY2tib3gudHJpZ2dlcignY2xpY2snKTtcblx0XHR9XG5cdH0pO1xuXG5cdGxldCBzdGFja2VkX3NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAncm9ja2V0X3N0YWNrZWRfc2VsZWN0JyApO1xuXHRpZiAoIHN0YWNrZWRfc2VsZWN0ICkge1xuXHRcdHN0YWNrZWRfc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2N1c3RvbS1zZWxlY3QtY2hhbmdlJyxmdW5jdGlvbihldmVudCl7XG5cblx0XHRcdGxldCBzZWxlY3RlZF9vcHRpb24gPSAkKCBldmVudC5kZXRhaWwuc2VsZWN0ZWRPcHRpb24gKTtcblxuXHRcdFx0bGV0IG5hbWUgPSBzZWxlY3RlZF9vcHRpb24uZGF0YSgnbmFtZScpO1xuXG5cdFx0XHRsZXQgc2F2aW5nID0gc2VsZWN0ZWRfb3B0aW9uLmRhdGEoJ3NhdmluZycpO1xuXHRcdFx0bGV0IHJlZ3VsYXJfcHJpY2UgID0gc2VsZWN0ZWRfb3B0aW9uLmRhdGEoJ3JlZ3VsYXItcHJpY2UnKTtcblx0XHRcdGxldCBwcmljZSAgPSBzZWxlY3RlZF9vcHRpb24uZGF0YSgncHJpY2UnKTtcblx0XHRcdGxldCB1cmwgICAgPSBzZWxlY3RlZF9vcHRpb24uZGF0YSgndXJsJyk7XG5cblx0XHRcdGxldCBwYXJlbnRfaXRlbSA9ICQodGhpcykucGFyZW50cyggJy53cHItdXBncmFkZS1pdGVtJyApO1xuXG5cdFx0XHRpZiAoIHNhdmluZyApIHtcblx0XHRcdFx0cGFyZW50X2l0ZW0uZmluZCggJy53cHItdXBncmFkZS1zYXZpbmcgc3BhbicgKS5odG1sKCBzYXZpbmcgKTtcblx0XHRcdH1cblx0XHRcdGlmICggbmFtZSApIHtcblx0XHRcdFx0cGFyZW50X2l0ZW0uZmluZCggJy53cHItdXBncmFkZS10aXRsZScgKS5odG1sKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIHJlZ3VsYXJfcHJpY2UgKSB7XG5cdFx0XHRcdHBhcmVudF9pdGVtLmZpbmQoICcud3ByLXVwZ3JhZGUtcHJpY2UtcmVndWxhciBzcGFuJyApLmh0bWwoIHJlZ3VsYXJfcHJpY2UgKTtcblx0XHRcdH1cblx0XHRcdGlmICggcHJpY2UgKSB7XG5cdFx0XHRcdHBhcmVudF9pdGVtLmZpbmQoICcud3ByLXVwZ3JhZGUtcHJpY2UtdmFsdWUnICkuaHRtbCggcHJpY2UgKTtcblx0XHRcdH1cblx0XHRcdGlmICggdXJsICkge1xuXHRcdFx0XHRwYXJlbnRfaXRlbS5maW5kKCAnLndwci11cGdyYWRlLWxpbmsnICkuYXR0ciggJ2hyZWYnLCB1cmwgKTtcblx0XHRcdH1cblxuXHRcdH0gKTtcblx0fVxuXG5cdCQoZG9jdW1lbnQpLm9uKCAnY2xpY2snLCAnLndwci1jb25maXJtLWRlbGV0ZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0cmV0dXJuIGNvbmZpcm0oICQodGhpcykuZGF0YSgnd3ByX2NvbmZpcm1fbXNnJykgKTtcblx0fSApO1xuXG59KTtcbiIsInZhciAkID0galF1ZXJ5O1xuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcblxuXG5cdC8qKipcblx0KiBEYXNoYm9hcmQgbm90aWNlXG5cdCoqKi9cblxuXHR2YXIgJG5vdGljZSA9ICQoJy53cHItbm90aWNlJyk7XG5cdHZhciAkbm90aWNlQ2xvc2UgPSAkKCcjd3ByLWNvbmdyYXR1bGF0aW9ucy1ub3RpY2UnKTtcblxuXHQkbm90aWNlQ2xvc2Uub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0d3ByQ2xvc2VEYXNoYm9hcmROb3RpY2UoKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIHdwckNsb3NlRGFzaGJvYXJkTm90aWNlKCl7XG5cdFx0dmFyIHZUTCA9IG5ldyBUaW1lbGluZUxpdGUoKVxuXHRcdCAgLnRvKCRub3RpY2UsIDEsIHthdXRvQWxwaGE6MCwgeDo0MCwgZWFzZTpQb3dlcjQuZWFzZU91dH0pXG5cdFx0ICAudG8oJG5vdGljZSwgMC42LCB7aGVpZ2h0OiAwLCBtYXJnaW5Ub3A6MCwgZWFzZTpQb3dlcjQuZWFzZU91dH0sICc9LS40Jylcblx0XHQgIC5zZXQoJG5vdGljZSwgeydkaXNwbGF5Jzonbm9uZSd9KVxuXHRcdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSb2NrZXQgQW5hbHl0aWNzIG5vdGljZSBpbmZvIGNvbGxlY3Rcblx0ICovXG5cdCQoICcucm9ja2V0LWFuYWx5dGljcy1kYXRhLWNvbnRhaW5lcicgKS5oaWRlKCk7XG5cdCQoICcucm9ja2V0LXByZXZpZXctYW5hbHl0aWNzLWRhdGEnICkub24oICdjbGljaycsIGZ1bmN0aW9uKCBlICkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdCQodGhpcykucGFyZW50KCkubmV4dCggJy5yb2NrZXQtYW5hbHl0aWNzLWRhdGEtY29udGFpbmVyJyApLnRvZ2dsZSgpO1xuXHR9ICk7XG5cblx0LyoqKlxuXHQqIEhpZGUgLyBzaG93IFJvY2tldCBhZGRvbiB0YWJzLlxuXHQqKiovXG5cblx0JCggJy53cHItdG9nZ2xlLWJ1dHRvbicgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgJGJ1dHRvbiAgID0gJCggdGhpcyApO1xuXHRcdHZhciAkY2hlY2tib3ggPSAkYnV0dG9uLmNsb3Nlc3QoICcud3ByLWZpZWxkc0NvbnRhaW5lci1maWVsZHNldCcgKS5maW5kKCAnLndwci1yYWRpbyA6Y2hlY2tib3gnICk7XG5cdFx0dmFyICRtZW51SXRlbSA9ICQoICdbaHJlZj1cIicgKyAkYnV0dG9uLmF0dHIoICdocmVmJyApICsgJ1wiXS53cHItbWVudUl0ZW0nICk7XG5cblx0XHQkY2hlY2tib3gub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAkY2hlY2tib3guaXMoICc6Y2hlY2tlZCcgKSApIHtcblx0XHRcdFx0JG1lbnVJdGVtLmNzcyggJ2Rpc3BsYXknLCAnYmxvY2snICk7XG5cdFx0XHRcdCRidXR0b24uY3NzKCAnZGlzcGxheScsICdpbmxpbmUtYmxvY2snICk7XG5cdFx0XHR9IGVsc2V7XG5cdFx0XHRcdCRtZW51SXRlbS5jc3MoICdkaXNwbGF5JywgJ25vbmUnICk7XG5cdFx0XHRcdCRidXR0b24uY3NzKCAnZGlzcGxheScsICdub25lJyApO1xuXHRcdFx0fVxuXHRcdH0gKS50cmlnZ2VyKCAnY2hhbmdlJyApO1xuXHR9ICk7XG5cblx0LyoqKlxuXHQqIEhlbHAgQnV0dG9uIFRyYWNraW5nXG5cdCoqKi9cblxuXHQvLyBUcmFjayBjbGlja3Mgb24gdmFyaW91cyBoZWxwIGVsZW1lbnRzIHdpdGggZGF0YSBhdHRyaWJ1dGVzXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS13cHJfdHJhY2tfaGVscF0nLCBmdW5jdGlvbihlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cud3ByVHJhY2tIZWxwQnV0dG9uID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR2YXIgJGVsID0gJCh0aGlzKTtcblx0XHRcdHZhciBidXR0b24gPSAkZWwuZGF0YSgnd3ByX3RyYWNrX2hlbHAnKTtcblx0XHRcdHZhciBjb250ZXh0ID0gJGVsLmRhdGEoJ3dwcl90cmFja19jb250ZXh0JykgfHwgJyc7XG5cblx0XHRcdHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24oYnV0dG9uLCBjb250ZXh0KTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRyYWNrIHNwZWNpZmljIGhlbHAgcmVzb3VyY2UgY2xpY2tzIHdpdGggZXhwbGljaXQgc2VsZWN0b3JzXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcud2lzdGlhX2VtYmVkJywgZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cud3ByVHJhY2tIZWxwQnV0dG9uID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR2YXIgdGl0bGUgPSAkKHRoaXMpLnRleHQoKSB8fCAnR2V0dGluZyBTdGFydGVkIFZpZGVvJztcblx0XHRcdHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24odGl0bGUsICdHZXR0aW5nIFN0YXJ0ZWQnKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRyYWNrIEZBUSBsaW5rc1xuXHQkKGRvY3VtZW50KS5vbignY2xpY2snLCAnYVtkYXRhLWJlYWNvbi1hcnRpY2xlXScsIGZ1bmN0aW9uKCkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93LndwclRyYWNrSGVscEJ1dHRvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dmFyIGhyZWYgPSAkKHRoaXMpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdHZhciB0ZXh0ID0gJCh0aGlzKS50ZXh0KCk7XG5cblx0XHRcdC8vIENoZWNrIGlmIGl0J3MgaW4gRkFRIHNlY3Rpb24gb3Igc2lkZWJhciBkb2N1bWVudGF0aW9uXG5cdFx0XHRpZiAoJCh0aGlzKS5jbG9zZXN0KCcud3ByLWZpZWxkc0NvbnRhaW5lci1maWVsZHNldCcpLnByZXYoJy53cHItb3B0aW9uSGVhZGVyJykuZmluZCgnLndwci10aXRsZTInKS50ZXh0KCkuaW5jbHVkZXMoJ0ZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zJykpIHtcblx0XHRcdFx0d2luZG93LndwclRyYWNrSGVscEJ1dHRvbignRkFRIC0gJyArIHRleHQsICdEYXNoYm9hcmQnKTtcblx0XHRcdH0gZWxzZSBpZiAoJCh0aGlzKS5jbG9zZXN0KCcud3ByLWRvY3VtZW50YXRpb24nKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24oJ0RvY3VtZW50YXRpb24nLCAnU2lkZWJhcicpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93LndwclRyYWNrSGVscEJ1dHRvbignRG9jdW1lbnRhdGlvbiBMaW5rJywgJ0dlbmVyYWwnKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRyYWNrIFwiSG93IHRvIG1lYXN1cmUgbG9hZGluZyB0aW1lXCIgbGlua1xuXHQkKGRvY3VtZW50KS5vbignY2xpY2snLCAnYVtocmVmKj1cImhvdy10by10ZXN0LXdvcmRwcmVzcy1zaXRlLXBlcmZvcm1hbmNlXCJdJywgZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cud3ByVHJhY2tIZWxwQnV0dG9uID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR3aW5kb3cud3ByVHJhY2tIZWxwQnV0dG9uKCdMb2FkaW5nIFRpbWUgR3VpZGUnLCAnU2lkZWJhcicpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gVHJhY2sgXCJOZWVkIGhlbHA/XCIgbGlua3MgKGV4aXN0aW5nIGhlbHAgYnV0dG9ucylcblx0JChkb2N1bWVudCkub24oJ2NsaWNrJywgJy53cHItaW5mb0FjdGlvbi0taGVscDpub3QoW2RhdGEtYmVhY29uLWlkXSknLCBmdW5jdGlvbigpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24oJ05lZWQgSGVscCcsICdHZW5lcmFsJyk7XG5cdFx0fVxuXHR9KTtcblxuXG5cdC8qKipcblx0KiBTaG93IHBvcGluIGFuYWx5dGljc1xuXHQqKiovXG5cblx0dmFyICR3cHJBbmFseXRpY3NQb3BpbiA9ICQoJy53cHItUG9waW4tQW5hbHl0aWNzJyksXG5cdFx0JHdwclBvcGluT3ZlcmxheSA9ICQoJy53cHItUG9waW4tb3ZlcmxheScpLFxuXHRcdCR3cHJBbmFseXRpY3NDbG9zZVBvcGluID0gJCgnLndwci1Qb3Bpbi1BbmFseXRpY3MtY2xvc2UnKSxcblx0XHQkd3ByQW5hbHl0aWNzUG9waW5CdXR0b24gPSAkKCcud3ByLVBvcGluLUFuYWx5dGljcyAud3ByLWJ1dHRvbicpLFxuXHRcdCR3cHJBbmFseXRpY3NPcGVuUG9waW4gPSAkKCcud3ByLWpzLXBvcGluJylcblx0O1xuXG5cdCR3cHJBbmFseXRpY3NPcGVuUG9waW4ub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR3cHJPcGVuQW5hbHl0aWNzKCk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcblxuXHQkd3ByQW5hbHl0aWNzQ2xvc2VQb3Bpbi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdHdwckNsb3NlQW5hbHl0aWNzKCk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcblxuXHQkd3ByQW5hbHl0aWNzUG9waW5CdXR0b24ub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR3cHJBY3RpdmF0ZUFuYWx5dGljcygpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG5cblx0ZnVuY3Rpb24gd3ByT3BlbkFuYWx5dGljcygpe1xuXHRcdHZhciB2VEwgPSBuZXcgVGltZWxpbmVMaXRlKClcblx0XHQgIC5zZXQoJHdwckFuYWx5dGljc1BvcGluLCB7J2Rpc3BsYXknOidibG9jayd9KVxuXHRcdCAgLnNldCgkd3ByUG9waW5PdmVybGF5LCB7J2Rpc3BsYXknOidibG9jayd9KVxuXHRcdCAgLmZyb21Ubygkd3ByUG9waW5PdmVybGF5LCAwLjYsIHthdXRvQWxwaGE6MH0se2F1dG9BbHBoYToxLCBlYXNlOlBvd2VyNC5lYXNlT3V0fSlcblx0XHQgIC5mcm9tVG8oJHdwckFuYWx5dGljc1BvcGluLCAwLjYsIHthdXRvQWxwaGE6MCwgbWFyZ2luVG9wOiAtMjR9LCB7YXV0b0FscGhhOjEsIG1hcmdpblRvcDowLCBlYXNlOlBvd2VyNC5lYXNlT3V0fSwgJz0tLjUnKVxuXHRcdDtcblx0fVxuXG5cdGZ1bmN0aW9uIHdwckNsb3NlQW5hbHl0aWNzKCl7XG5cdFx0dmFyIHZUTCA9IG5ldyBUaW1lbGluZUxpdGUoKVxuXHRcdCAgLmZyb21Ubygkd3ByQW5hbHl0aWNzUG9waW4sIDAuNiwge2F1dG9BbHBoYToxLCBtYXJnaW5Ub3A6IDB9LCB7YXV0b0FscGhhOjAsIG1hcmdpblRvcDotMjQsIGVhc2U6UG93ZXI0LmVhc2VPdXR9KVxuXHRcdCAgLmZyb21Ubygkd3ByUG9waW5PdmVybGF5LCAwLjYsIHthdXRvQWxwaGE6MX0se2F1dG9BbHBoYTowLCBlYXNlOlBvd2VyNC5lYXNlT3V0fSwgJz0tLjUnKVxuXHRcdCAgLnNldCgkd3ByQW5hbHl0aWNzUG9waW4sIHsnZGlzcGxheSc6J25vbmUnfSlcblx0XHQgIC5zZXQoJHdwclBvcGluT3ZlcmxheSwgeydkaXNwbGF5Jzonbm9uZSd9KVxuXHRcdDtcblx0fVxuXG5cdGZ1bmN0aW9uIHdwckFjdGl2YXRlQW5hbHl0aWNzKCl7XG5cdFx0d3ByQ2xvc2VBbmFseXRpY3MoKTtcblx0XHQkKCcjYW5hbHl0aWNzX2VuYWJsZWQnKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG5cblx0XHR2YXIgYW5hbHl0aWNzRW5hYmxlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbmFseXRpY3NfZW5hYmxlZCcpO1xuXG5cdFx0aWYgKCBhbmFseXRpY3NFbmFibGVkICkge1xuXHRcdFx0dmFyIGNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSk7XG5cdFx0XHRhbmFseXRpY3NFbmFibGVkLmRpc3BhdGNoRXZlbnQoY2hhbmdlRXZlbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIERpc3BsYXkgQ1RBIHdpdGhpbiB0aGUgcG9waW4gYFdoYXQgaW5mbyB3aWxsIHdlIGNvbGxlY3Q/YFxuXHQkKCcjYW5hbHl0aWNzX2VuYWJsZWQnKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuXHRcdCQoJy53cHItcm9ja2V0LWFuYWx5dGljcy1jdGEnKS50b2dnbGVDbGFzcygnd3ByLWlzSGlkZGVuJyk7XG5cdH0pO1xuXG5cdC8qKipcblx0KiBTaG93IHBvcGluIHVwZ3JhZGVcblx0KioqL1xuXG5cdHZhciAkd3ByVXBncmFkZVBvcGluID0gJCgnLndwci1Qb3Bpbi1VcGdyYWRlJyksXG5cdCR3cHJVcGdyYWRlQ2xvc2VQb3BpbiA9ICQoJy53cHItUG9waW4tVXBncmFkZS1jbG9zZScpLFxuXHQkd3ByVXBncmFkZU9wZW5Qb3BpbiA9ICQoJy53cHItcG9waW4tdXBncmFkZS10b2dnbGUnKTtcblxuXHQkd3ByVXBncmFkZU9wZW5Qb3Bpbi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdHdwck9wZW5VcGdyYWRlUG9waW4oKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xuXG5cdCR3cHJVcGdyYWRlQ2xvc2VQb3Bpbi5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHR3cHJDbG9zZVVwZ3JhZGVQb3BpbigpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG5cblx0ZnVuY3Rpb24gd3ByT3BlblVwZ3JhZGVQb3Bpbigpe1xuXHRcdHZhciB2VEwgPSBuZXcgVGltZWxpbmVMaXRlKCk7XG5cblx0XHR2VEwuc2V0KCR3cHJVcGdyYWRlUG9waW4sIHsnZGlzcGxheSc6J2Jsb2NrJ30pXG5cdFx0XHQuc2V0KCR3cHJQb3Bpbk92ZXJsYXksIHsnZGlzcGxheSc6J2Jsb2NrJ30pXG5cdFx0XHQuZnJvbVRvKCR3cHJQb3Bpbk92ZXJsYXksIDAuNiwge2F1dG9BbHBoYTowfSx7YXV0b0FscGhhOjEsIGVhc2U6UG93ZXI0LmVhc2VPdXR9KVxuXHRcdFx0LmZyb21Ubygkd3ByVXBncmFkZVBvcGluLCAwLjYsIHthdXRvQWxwaGE6MCwgbWFyZ2luVG9wOiAtMjR9LCB7YXV0b0FscGhhOjEsIG1hcmdpblRvcDowLCBlYXNlOlBvd2VyNC5lYXNlT3V0fSwgJz0tLjUnKVxuXHRcdDtcblx0fVxuXG5cdGZ1bmN0aW9uIHdwckNsb3NlVXBncmFkZVBvcGluKCl7XG5cdFx0dmFyIHZUTCA9IG5ldyBUaW1lbGluZUxpdGUoKTtcblxuXHRcdHZUTC5mcm9tVG8oJHdwclVwZ3JhZGVQb3BpbiwgMC42LCB7YXV0b0FscGhhOjEsIG1hcmdpblRvcDogMH0sIHthdXRvQWxwaGE6MCwgbWFyZ2luVG9wOi0yNCwgZWFzZTpQb3dlcjQuZWFzZU91dH0pXG5cdFx0XHQuZnJvbVRvKCR3cHJQb3Bpbk92ZXJsYXksIDAuNiwge2F1dG9BbHBoYToxfSx7YXV0b0FscGhhOjAsIGVhc2U6UG93ZXI0LmVhc2VPdXR9LCAnPS0uNScpXG5cdFx0XHQuc2V0KCR3cHJVcGdyYWRlUG9waW4sIHsnZGlzcGxheSc6J25vbmUnfSlcblx0XHRcdC5zZXQoJHdwclBvcGluT3ZlcmxheSwgeydkaXNwbGF5Jzonbm9uZSd9KVxuXHRcdDtcblx0fVxuXG5cdC8qKipcblx0KiBTaWRlYmFyIG9uL29mZlxuXHQqKiovXG5cdHZhciAkd3ByU2lkZWJhciAgICA9ICQoICcud3ByLVNpZGViYXInICk7XG5cdHZhciAkd3ByQnV0dG9uVGlwcyA9ICQoJy53cHItanMtdGlwcycpO1xuXG5cdCR3cHJCdXR0b25UaXBzLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHR3cHJEZXRlY3RUaXBzKCQodGhpcykpO1xuXHR9KTtcblxuXHRmdW5jdGlvbiB3cHJEZXRlY3RUaXBzKGFFbGVtKXtcblx0XHRpZihhRWxlbS5pcygnOmNoZWNrZWQnKSl7XG5cdFx0XHQkd3ByU2lkZWJhci5jc3MoJ2Rpc3BsYXknLCdibG9jaycpO1xuXHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oICd3cHItc2hvdy1zaWRlYmFyJywgJ29uJyApO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0JHdwclNpZGViYXIuY3NzKCdkaXNwbGF5Jywnbm9uZScpO1xuXHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oICd3cHItc2hvdy1zaWRlYmFyJywgJ29mZicgKTtcblx0XHR9XG5cdH1cblxuXG5cblx0LyoqKlxuXHQqIERldGVjdCBBZGJsb2NrXG5cdCoqKi9cblxuXHRpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTEtnT2NDUnB3bUFqJykpe1xuXHRcdCQoJy53cHItYWRibG9jaycpLmNzcygnZGlzcGxheScsICdub25lJyk7XG5cdH0gZWxzZSB7XG5cdFx0JCgnLndwci1hZGJsb2NrJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG5cdH1cblxuXHR2YXIgJGFkYmxvY2sgPSAkKCcud3ByLWFkYmxvY2snKTtcblx0dmFyICRhZGJsb2NrQ2xvc2UgPSAkKCcud3ByLWFkYmxvY2stY2xvc2UnKTtcblxuXHQkYWRibG9ja0Nsb3NlLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdHdwckNsb3NlQWRibG9ja05vdGljZSgpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG5cblx0ZnVuY3Rpb24gd3ByQ2xvc2VBZGJsb2NrTm90aWNlKCl7XG5cdFx0dmFyIHZUTCA9IG5ldyBUaW1lbGluZUxpdGUoKVxuXHRcdCAgLnRvKCRhZGJsb2NrLCAxLCB7YXV0b0FscGhhOjAsIHg6NDAsIGVhc2U6UG93ZXI0LmVhc2VPdXR9KVxuXHRcdCAgLnRvKCRhZGJsb2NrLCAwLjQsIHtoZWlnaHQ6IDAsIG1hcmdpblRvcDowLCBlYXNlOlBvd2VyNC5lYXNlT3V0fSwgJz0tLjQnKVxuXHRcdCAgLnNldCgkYWRibG9jaywgeydkaXNwbGF5Jzonbm9uZSd9KVxuXHRcdDtcblx0fVxuXG5cdC8vIEhhbmRsZSBleHBhbmQvY29sbGFwc2Ugb2YgcmVjb21tZW5kYXRpb25zIGxpc3QuXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcjd3ByLXJlY29tbWVuZGF0aW9ucy1sb2FkLW1vcmUnLCBmdW5jdGlvbigpIHtcblx0XHRsZXQgJGxpc3QgPSAkKCcud3ByLXJlY29tbWVuZGF0aW9uc19fbGlzdCcpO1xuXHRcdGxldCAkaGlkZGVuSXRlbXMgPSAkbGlzdC5maW5kKCcud3ByLXJlY29tbWVuZGF0aW9uLWl0ZW06Z3QoMiknKTtcblxuXHRcdC8vIFRyYWNrIExvYWQgTW9yZSBidXR0b24gY2xpY2tcblx0XHRpZiAodHlwZW9mIHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24oJ3JvY2tldCBpbnNpZ2h0cyByZWNvbW1lbmRhdGlvbnMgbG9hZCBtb3JlJywgJ2xvYWRfbW9yZScpO1xuXHRcdH1cblxuXHRcdGlmICgkbGlzdC5oYXNDbGFzcygnaXMtZXhwYW5kZWQnKSkge1xuXHRcdFx0JGhpZGRlbkl0ZW1zLnNsaWRlVXAoMzAwLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0JGxpc3QucmVtb3ZlQ2xhc3MoJ2lzLWV4cGFuZGVkJyk7XG5cdFx0XHR9KTtcblx0XHRcdCQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWV4cGFuZGVkJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JGxpc3QuYWRkQ2xhc3MoJ2lzLWV4cGFuZGVkJyk7XG5cdFx0JGhpZGRlbkl0ZW1zLnNsaWRlRG93bigzMDApO1xuXHRcdCQodGhpcykuYWRkQ2xhc3MoJ2lzLWV4cGFuZGVkJyk7XG5cdH0pO1xuXG5cdC8vIFRyYWNrIFJvY2tldCBJbnNpZ2h0cyBSZWNvbW1lbmRhdGlvbiBBY3RpdmF0ZSBidXR0b24gY2xpY2tzXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcud3ByLXJlY29tbWVuZGF0aW9uLWl0ZW1fX2FjdGl2YXRlJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHJlY29tbWVuZGF0aW9uID0gJCh0aGlzKS5kYXRhKCdyZWNvbW1lbmRhdGlvbicpIHx8ICd1bmtub3duJztcblxuXHRcdC8vIElmIHRoZSBlbGVtZW50IGlzIHZpc2libGUsIHNjcm9sbCB0byB0aGUgZWxlbWVudCB3aXRoIGlkIG1hdGNoaW5nIHRoZSByZWNvbW1lbmRhdGlvbiB2YWx1ZS5cblx0XHQvLyBEZWxheSBzY3JvbGwgYnkgMTAwbXMgdG8gYWxsb3cgbmF2aWdhdGlvbiB0byB0aGUgc2VjdGlvbiB0byBjb21wbGV0ZSBhbmQgZW5zdXJlIHRoZSB0YXJnZXQgZWxlbWVudCBpcyBpbiB2aWV3LlxuXHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgJHRhcmdldCA9ICQoYCMke3JlY29tbWVuZGF0aW9ufWApO1xuXHRcdFx0XG5cdFx0XHRpZiAoISR0YXJnZXQubGVuZ3RoICYmICEkdGFyZ2V0LmlzKCc6dmlzaWJsZScpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0JHRhcmdldFswXS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuXHRcdH0sIDEwMCk7XG5cdFx0XG5cdFx0Ly8gVHJhY2sgZGlyZWN0bHkgd2l0aCBNaXhwYW5lbFxuXHRcdGlmICh0eXBlb2YgbWl4cGFuZWwgIT09ICd1bmRlZmluZWQnICYmIG1peHBhbmVsLnRyYWNrKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB1c2VyIGhhcyBvcHRlZCBpblxuXHRcdFx0aWYgKHR5cGVvZiByb2NrZXRfbWl4cGFuZWxfZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgcm9ja2V0X21peHBhbmVsX2RhdGEub3B0aW5fZW5hYmxlZCAmJiByb2NrZXRfbWl4cGFuZWxfZGF0YS5vcHRpbl9lbmFibGVkICE9PSAnMCcpIHtcblx0XHRcdFx0Ly8gSWRlbnRpZnkgdXNlciBpZiBhdmFpbGFibGVcblx0XHRcdFx0aWYgKHJvY2tldF9taXhwYW5lbF9kYXRhLnVzZXJfaWQgJiYgdHlwZW9mIG1peHBhbmVsLmlkZW50aWZ5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0bWl4cGFuZWwuaWRlbnRpZnkocm9ja2V0X21peHBhbmVsX2RhdGEudXNlcl9pZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdC8vIFRyYWNrIHRoZSBCdXR0b24gQ2xpY2tlZCBldmVudFxuXHRcdFx0XHRtaXhwYW5lbC50cmFjaygnQnV0dG9uIENsaWNrZWQnLCB7XG5cdFx0XHRcdFx0J2J1dHRvbic6ICdyb2NrZXQgaW5zaWdodHMgcmVjb21tZW5kYXRpb24nLFxuXHRcdFx0XHRcdCdyZWNvbW1lbmRhdGlvbic6IHJlY29tbWVuZGF0aW9uLFxuXHRcdFx0XHRcdCdwbHVnaW4nOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5wbHVnaW4sXG5cdFx0XHRcdFx0J2JyYW5kJzogcm9ja2V0X21peHBhbmVsX2RhdGEuYnJhbmQsXG5cdFx0XHRcdFx0J2FwcGxpY2F0aW9uJzogcm9ja2V0X21peHBhbmVsX2RhdGEuYXBwLFxuXHRcdFx0XHRcdCdjb250ZXh0Jzogcm9ja2V0X21peHBhbmVsX2RhdGEuY29udGV4dCxcblx0XHRcdFx0XHQncGF0aCc6IHJvY2tldF9taXhwYW5lbF9kYXRhLnBhdGhcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn0pO1xuIiwiY2xhc3MgUm9ja2V0TWl4cGFuZWwge1xuXG5cdHRyYWNrZWRUYWJzID0gW1xuXHRcdCdkYXNoYm9hcmQnLFxuXHRcdCdyb2NrZXRfaW5zaWdodHMnXG5cdF07XG5cblx0Y29uc3RydWN0b3IoIGNvbmZpZyApIHtcblx0XHR0aGlzLmNvbmZpZyA9IGNvbmZpZztcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgaGFuZGxlci5cblx0ICovXG5cdGluaXQoKSB7XG5cdFx0aWYgKCB0eXBlb2YgbWl4cGFuZWwgPT09ICd1bmRlZmluZWQnIHx8ICFtaXhwYW5lbC50cmFjayApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCAhdGhpcy5jb25maWcub3B0aW5fZW5hYmxlZCB8fCB0aGlzLmNvbmZpZy5vcHRpbl9lbmFibGVkID09PSAnMCcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bWl4cGFuZWwuaWRlbnRpZnkodGhpcy5jb25maWcudXNlcl9pZCk7XG5cdFx0dGhpcy5faW5pdExpc3RlbmVycyggdGhpcyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBldmVudCBsaXN0ZW5lcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzZWxmIGluc3RhbmNlIG9mIHRoaXMgb2JqZWN0LCB1c2VkIGZvciBiaW5kaW5nIFwidGhpc1wiIHRvIHRoZSBsaXN0ZW5lcnMuXG5cdCAqL1xuXHRfaW5pdExpc3RlbmVycyggc2VsZiApIHtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ2hhc2hjaGFuZ2UnLCBzZWxmLl9vbkhhc2hDaGFuZ2UuYmluZCggc2VsZiApICk7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdsb2FkJywgc2VsZi5fb25QYWdlTG9hZC5iaW5kKCBzZWxmICkgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBsaXN0ZW5lciB3aGVuIHRoZSBoYXNoIGNoYW5nZWQgaW4gYSBwYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0gRXZlbnQgZXZlbnQgRXZlbnQgaW5zdGFuY2UuXG5cdCAqL1xuXHRfb25IYXNoQ2hhbmdlKCBldmVudCApIHtcblx0XHRjb25zdCBvbGRIYXNoID0gdGhpcy5fY2xlYW5IYXNoKG5ldyBVUkwoZXZlbnQub2xkVVJMKS5oYXNoKTtcblx0XHRjb25zdCBuZXdIYXNoID0gdGhpcy5fY2xlYW5IYXNoKG5ldyBVUkwoZXZlbnQubmV3VVJMKS5oYXNoKTtcblxuXHRcdGlmICggIXRoaXMuX2NhblRyYWNrVGFiKG5ld0hhc2gpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX3NlbmRQYWdlVmlld2VkRXZlbnQodGhpcy5fZ2V0U291cmNlKCBvbGRIYXNoICksIG5ld0hhc2gpO1xuXHR9XG5cblx0X29uUGFnZUxvYWQoKSB7XG5cdFx0Y29uc3QgbmV3SGFzaCA9IHRoaXMuX2NsZWFuSGFzaCh3aW5kb3cubG9jYXRpb24uaGFzaCk7XG5cdFx0aWYgKCAhdGhpcy5fY2FuVHJhY2tUYWIobmV3SGFzaCkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fc2VuZFBhZ2VWaWV3ZWRFdmVudCh0aGlzLl9nZXRTb3VyY2UoKSwgbmV3SGFzaCk7XG5cdH1cblxuXHRfY2xlYW5IYXNoKCB0YWJIYXNoICkge1xuXHRcdGlmICghdGFiSGFzaCB8fCAhdGFiSGFzaC5zdGFydHNXaXRoKCcjJykpIHtcblx0XHRcdHJldHVybiB0YWJIYXNoO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFiSGFzaC5zdWJzdHJpbmcoMSk7XG5cdH1cblxuXHRfY2FuVHJhY2tUYWIodGFiSGFzaCkge1xuXHRcdHJldHVybiB0aGlzLnRyYWNrZWRUYWJzLmluY2x1ZGVzKHRhYkhhc2gpO1xuXHR9XG5cblx0X2dldFNvdXJjZSggb2xkSGFzaCA9ICcnICkge1xuXHRcdGlmICggb2xkSGFzaCApIHtcblx0XHRcdHJldHVybiBgc2V0dGluZ3NfJHtvbGRIYXNofWA7XG5cdFx0fVxuXG5cdFx0bGV0IHNvdXJjZSA9IHRoaXMuX2dldFNvdXJjZUZyb21RdWVyeVN0cmluZ0FuZFJlbW92ZUl0KCk7XG5cdFx0aWYgKCBzb3VyY2UgKSB7XG5cdFx0XHRyZXR1cm4gc291cmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9nZXRTb3VyY2VGcm9tUmVmZXJyZXIoKTtcblx0fVxuXG5cdF9nZXRTb3VyY2VGcm9tUXVlcnlTdHJpbmdBbmRSZW1vdmVJdCgpIHtcblx0XHRjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblx0XHRjb25zdCB1cmxQYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuXG5cdFx0Ly8gMS4gQ2hlY2sgZm9yIGV4cGxpY2l0IHNvdXJjZSBwYXJhbVxuXHRcdGlmICghdXJsUGFyYW1zLmhhcygncm9ja2V0X3NvdXJjZScpKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0Ly8gMi4gR2V0IHRoZSB2YWx1ZVxuXHRcdGNvbnN0IHNvdXJjZVZhbHVlID0gdXJsUGFyYW1zLmdldCgncm9ja2V0X3NvdXJjZScpO1xuXG5cdFx0Ly8gMy4gRGVsZXRlIHRoZSBwYXJhbWV0ZXIgZnJvbSB0aGUgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuXHRcdHVybFBhcmFtcy5kZWxldGUoJ3JvY2tldF9zb3VyY2UnKTtcblxuXHRcdC8vIDQuIFVwZGF0ZSB0aGUgYnJvd3NlcidzIFVSTCB1c2luZyB0aGUgSGlzdG9yeSBBUElcblx0XHQvLyBUaGlzIHJlbW92ZXMgdGhlIHBhcmFtZXRlciBmcm9tIHRoZSBVUkwgYmFyIHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBwYWdlLlxuXHRcdHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgdXJsLnNlYXJjaCA/IHVybC5ocmVmIDogdXJsLnBhdGhuYW1lKTtcblxuXHRcdC8vIDUuIFJldHVybiB0aGUgcmV0cmlldmVkIHZhbHVlXG5cdFx0cmV0dXJuIHNvdXJjZVZhbHVlO1xuXHR9XG5cblx0X2dldFNvdXJjZUZyb21SZWZlcnJlcigpIHtcblx0XHRjb25zdCByZWZlcnJlciA9IGRvY3VtZW50LnJlZmVycmVyO1xuXHRcdGlmICghcmVmZXJyZXIpIHtcblx0XHRcdHJldHVybiAnbm9yZWZlcnJlcic7XG5cdFx0fVxuXHRcdGlmICghcmVmZXJyZXIuaW5jbHVkZXMod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKSkge1xuXHRcdFx0cmV0dXJuICdleHRlcm5hbCc7XG5cdFx0fVxuXHRcdHJldHVybiAnaW50ZXJuYWwnO1xuXHR9XG5cblx0X3NlbmRQYWdlVmlld2VkRXZlbnQoc291cmNlLCBuZXdIYXNoKSB7XG5cdFx0bWl4cGFuZWwudHJhY2soJ1BhZ2UgVmlld2VkJywge1xuXHRcdFx0cGF0aDogYC93cC1hZG1pbi9vcHRpb25zLWdlbmVyYWwucGhwP3BhZ2U9d3Byb2NrZXQjJHtuZXdIYXNofWAsXG5cdFx0XHRwYWdlX25hbWU6IG5ld0hhc2gucmVwbGFjZSgnXycsICcgJyksXG5cdFx0XHRzb3VyY2U6IHNvdXJjZSxcblx0XHRcdHBsdWdpbjogcm9ja2V0X21peHBhbmVsX2RhdGEucGx1Z2luLFxuXHRcdFx0YnJhbmQ6IHJvY2tldF9taXhwYW5lbF9kYXRhLmJyYW5kLFxuXHRcdFx0YXBwbGljYXRpb246IHJvY2tldF9taXhwYW5lbF9kYXRhLmFwcCxcblx0XHRcdGNvbnRleHQ6IHJvY2tldF9taXhwYW5lbF9kYXRhLmNvbnRleHRcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYW1lZCBzdGF0aWMgY29uc3RydWN0b3IgdG8gZW5jYXBzdWxhdGUgaG93IHRvIGNyZWF0ZSB0aGUgb2JqZWN0LlxuXHQgKi9cblx0c3RhdGljIHJ1bigpIHtcblx0XHQvLyBCYWlsIG91dCBpZiB0aGUgY29uZmlndXJhdGlvbiBub3QgcGFzc2VkIGZyb20gdGhlIHNlcnZlci5cblx0XHRpZiAoIHR5cGVvZiByb2NrZXRfbWl4cGFuZWxfZGF0YSA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5zdGFuY2UgPSBuZXcgUm9ja2V0TWl4cGFuZWwoIHJvY2tldF9taXhwYW5lbF9kYXRhICk7XG5cdFx0aW5zdGFuY2UuaW5pdCgpO1xuXHR9XG59XG5cblJvY2tldE1peHBhbmVsLnJ1bigpO1xuIiwiZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgJHBhZ2VNYW5hZ2VyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi53cHItQ29udGVudFwiKTtcbiAgICBpZigkcGFnZU1hbmFnZXIpe1xuICAgICAgICBuZXcgUGFnZU1hbmFnZXIoJHBhZ2VNYW5hZ2VyKTtcbiAgICB9XG5cbn0pO1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcblx0XHRDTEFTUyBQQUdFTUFOQUdFUlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBNYW5hZ2VzIHRoZSBkaXNwbGF5IG9mIHBhZ2VzIC8gc2VjdGlvbiBmb3IgV1AgUm9ja2V0IHBsdWdpblxuICpcbiAqIFB1YmxpYyBtZXRob2QgOlxuICAgICBkZXRlY3RJRCAtIERldGVjdCBJRCB3aXRoIGhhc2hcbiAgICAgZ2V0Qm9keVRvcCAtIEdldCBib2R5IHRvcCBwb3NpdGlvblxuXHQgY2hhbmdlIC0gRGlzcGxheXMgdGhlIGNvcnJlc3BvbmRpbmcgcGFnZVxuICpcbiAqL1xuXG5mdW5jdGlvbiBQYWdlTWFuYWdlcihhRWxlbSkge1xuXG4gICAgdmFyIHJlZlRoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53cHItYm9keScpO1xuICAgIHRoaXMuJG1lbnVJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy53cHItbWVudUl0ZW0nKTtcbiAgICB0aGlzLiRzdWJtaXRCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud3ByLUNvbnRlbnQgPiBmb3JtID4gI3dwci1vcHRpb25zLXN1Ym1pdCcpO1xuICAgIHRoaXMuJHBhZ2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1QYWdlJyk7XG4gICAgdGhpcy4kc2lkZWJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53cHItU2lkZWJhcicpO1xuICAgIHRoaXMuJGNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud3ByLUNvbnRlbnQnKTtcbiAgICB0aGlzLiR0aXBzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLndwci1Db250ZW50LXRpcHMnKTtcbiAgICB0aGlzLiRsaW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy53cHItYm9keSBhJyk7XG4gICAgdGhpcy4kbWVudUl0ZW0gPSBudWxsO1xuICAgIHRoaXMuJHBhZ2UgPSBudWxsO1xuICAgIHRoaXMucGFnZUlkID0gbnVsbDtcbiAgICB0aGlzLmJvZHlUb3AgPSAwO1xuICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMuJHN1Ym1pdEJ1dHRvbi52YWx1ZTtcblxuICAgIHJlZlRoaXMuZ2V0Qm9keVRvcCgpO1xuXG4gICAgLy8gSWYgdXJsIHBhZ2UgY2hhbmdlXG4gICAgd2luZG93Lm9uaGFzaGNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWZUaGlzLmRldGVjdElEKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgaGFzaCBhbHJlYWR5IGV4aXN0IChhZnRlciByZWZyZXNoIHBhZ2UgZm9yIGV4YW1wbGUpXG4gICAgaWYod2luZG93LmxvY2F0aW9uLmhhc2gpe1xuICAgICAgICB0aGlzLmJvZHlUb3AgPSAwO1xuICAgICAgICB0aGlzLmRldGVjdElEKCk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAgIHZhciBzZXNzaW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dwci1oYXNoJyk7XG4gICAgICAgIHRoaXMuYm9keVRvcCA9IDA7XG5cbiAgICAgICAgaWYoc2Vzc2lvbil7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHNlc3Npb247XG4gICAgICAgICAgICB0aGlzLmRldGVjdElEKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHRoaXMuJG1lbnVJdGVtc1swXS5jbGFzc0xpc3QuYWRkKCdpc0FjdGl2ZScpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3dwci1oYXNoJywgJ2Rhc2hib2FyZCcpO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnI2Rhc2hib2FyZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGljayBsaW5rIHNhbWUgaGFzaFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kbGlua3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy4kbGlua3NbaV0ub25jbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmVmVGhpcy5nZXRCb2R5VG9wKCk7XG4gICAgICAgICAgICB2YXIgaHJlZlNwbGl0ID0gdGhpcy5ocmVmLnNwbGl0KCcjJylbMV07XG4gICAgICAgICAgICBpZihocmVmU3BsaXQgPT0gcmVmVGhpcy5wYWdlSWQgJiYgaHJlZlNwbGl0ICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVmVGhpcy5kZXRlY3RJRCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDbGljayBsaW5rcyBub3QgV1Agcm9ja2V0IHRvIHJlc2V0IGhhc2hcbiAgICB2YXIgJG90aGVybGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjYWRtaW5tZW51bWFpbiBhLCAjd3BhZG1pbmJhciBhJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAkb3RoZXJsaW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAkb3RoZXJsaW5rc1tpXS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnd3ByLWhhc2gnLCAnJyk7XG4gICAgICAgIH07XG4gICAgfVxuXG59XG5cblxuLypcbiogUGFnZSBkZXRlY3QgSURcbiovXG5QYWdlTWFuYWdlci5wcm90b3R5cGUuZGV0ZWN0SUQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBhZ2VJZCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNwbGl0KCcjJylbMV07XG4gICAgdGhpcy5wYWdlSWQgPSB0aGlzLnBhZ2VJZC5pbmNsdWRlcygnPScpID8gdGhpcy5wYWdlSWQuc3BsaXQoJz0nKVswXSA6IHRoaXMucGFnZUlkO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3cHItaGFzaCcsIHRoaXMucGFnZUlkKTtcblxuICAgIHRoaXMuJHBhZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud3ByLVBhZ2UjJyArIHRoaXMucGFnZUlkKTtcbiAgICB0aGlzLiRtZW51SXRlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3cHItbmF2LScgKyB0aGlzLnBhZ2VJZCk7XG5cbiAgICB0aGlzLmNoYW5nZSgpO1xufVxuXG5cblxuLypcbiogR2V0IGJvZHkgdG9wIHBvc2l0aW9uXG4qL1xuUGFnZU1hbmFnZXIucHJvdG90eXBlLmdldEJvZHlUb3AgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYm9keVBvcyA9IHRoaXMuJGJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5ib2R5VG9wID0gYm9keVBvcy50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQgLSA0NzsgLy8gI3dwYWRtaW5iYXIgKyBwYWRkaW5nLXRvcCAud3ByLXdyYXAgLSAxIC0gNDdcbn1cblxuXG5cbi8qXG4qIFBhZ2UgY2hhbmdlXG4qL1xuUGFnZU1hbmFnZXIucHJvdG90eXBlLmNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIHJlZlRoaXMgPSB0aGlzO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPSByZWZUaGlzLmJvZHlUb3A7XG5cbiAgICAvLyBIaWRlIG90aGVyIHBhZ2VzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRwYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLiRwYWdlc1tpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLiRtZW51SXRlbXNbaV0uY2xhc3NMaXN0LnJlbW92ZSgnaXNBY3RpdmUnKTtcbiAgICB9XG5cbiAgICAvLyBTaG93IGN1cnJlbnQgZGVmYXVsdCBwYWdlXG4gICAgdGhpcy4kcGFnZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLiRzdWJtaXRCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICBpZiAoIG51bGwgPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCAnd3ByLXNob3ctc2lkZWJhcicgKSApIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oICd3cHItc2hvdy1zaWRlYmFyJywgJ29uJyApO1xuICAgIH1cblxuICAgIGlmICggJ29uJyA9PT0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dwci1zaG93LXNpZGViYXInKSApIHtcbiAgICAgICAgdGhpcy4kc2lkZWJhci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIH0gZWxzZSBpZiAoICdvZmYnID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd3ByLXNob3ctc2lkZWJhcicpICkge1xuICAgICAgICB0aGlzLiRzaWRlYmFyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN3cHItanMtdGlwcycpLnJlbW92ZUF0dHJpYnV0ZSggJ2NoZWNrZWQnICk7XG4gICAgfVxuXG4gICAgdGhpcy4kdGlwcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLiRtZW51SXRlbS5jbGFzc0xpc3QuYWRkKCdpc0FjdGl2ZScpO1xuICAgIHRoaXMuJHN1Ym1pdEJ1dHRvbi52YWx1ZSA9IHRoaXMuYnV0dG9uVGV4dDtcbiAgICB0aGlzLiRjb250ZW50LmNsYXNzTGlzdC5hZGQoJ2lzTm90RnVsbCcpO1xuXG4gICAgY29uc3QgcGFnZXNXaXRob3V0U3VibWl0ID0gW1xuICAgICAgICAnZGFzaGJvYXJkJyxcbiAgICAgICAgJ2FkZG9ucycsXG4gICAgICAgICdkYXRhYmFzZScsXG4gICAgICAgICd0b29scycsXG4gICAgICAgICdhZGRvbnMnLFxuICAgICAgICAnaW1hZ2lmeScsXG4gICAgICAgICd0dXRvcmlhbHMnLFxuICAgICAgICAncGx1Z2lucycsXG4gICAgXTtcblxuICAgIC8vIEV4Y2VwdGlvbiBmb3IgZGFzaGJvYXJkXG4gICAgaWYodGhpcy5wYWdlSWQgPT0gXCJkYXNoYm9hcmRcIil7XG4gICAgICAgIHRoaXMuJHNpZGViYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgdGhpcy4kdGlwcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB0aGlzLiRjb250ZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzTm90RnVsbCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2VJZCA9PSBcImltYWdpZnlcIikge1xuICAgICAgICB0aGlzLiRzaWRlYmFyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuJHRpcHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBpZiAocGFnZXNXaXRob3V0U3VibWl0LmluY2x1ZGVzKHRoaXMucGFnZUlkKSkge1xuICAgICAgICB0aGlzLiRzdWJtaXRCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG59O1xuIiwiLyoqXG4gKiBSZWNvbW1lbmRhdGlvbnMgV2lkZ2V0IEhhbmRsZXJcbiAqXG4gKiBMaXN0ZW5zIGZvciBHbG9iYWwgU2NvcmUgdXBkYXRlcyBhbmQgZmV0Y2hlcy91cGRhdGVzIHJlY29tbWVuZGF0aW9ucyBkeW5hbWljYWxseS5cbiAqL1xudmFyICQgPSBqUXVlcnk7XG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe1xuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgcmVjb21tZW5kYXRpb25zIHdpZGdldCBVSSBiYXNlZCBvbiB0aGUgZmV0Y2hlZCBkYXRhLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIFRoZSByZWNvbW1lbmRhdGlvbnMgZGF0YSBmcm9tIHRoZSBBUEkuXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGRhdGEucmVjb21tZW5kYXRpb25zIC0gQXJyYXkgb2YgcmVjb21tZW5kYXRpb25zIGRldGFpbHMuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLnJlY29tbWVuZGF0aW9ucy5odG1sIC0gUmVjb21tZW5kYXRpb25zIEhUTUwuXG5cdCAqL1xuXHRmdW5jdGlvbiB1cGRhdGVSZWNvbW1lbmRhdGlvbnNXaWRnZXQoZGF0YSkge1xuXHRcdGNvbnN0IHdpZGdldCA9ICQoJy53cHItcmVjb21tZW5kYXRpb25zJyk7XG5cblx0XHRpZiAoIXdpZGdldCB8fCAhZGF0YT8ucmVjb21tZW5kYXRpb25zPy5odG1sKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gVXBkYXRlIHRoZSB3aWRnZXQgY29udGVudCB3aXRoIHRoZSBuZXcgcmVjb21tZW5kYXRpb25zIEhUTUxcblx0XHR3aWRnZXQucmVwbGFjZVdpdGgoZGF0YT8ucmVjb21tZW5kYXRpb25zPy5odG1sKTtcblx0fVxuXG5cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgY3VycmVudCByZWNvbW1lbmRhdGlvbnMgc3RhdHVzIGZyb20gdGhlIFJFU1QgQVBJLlxuXHQgKi9cblx0ZnVuY3Rpb24gZmV0Y2hSZWNvbW1lbmRhdGlvbnNTdGF0dXMoKSB7XG5cdFx0Ly8gVXNlIFdvcmRQcmVzcyBSRVNUIEFQSSBjbGllbnQgaWYgYXZhaWxhYmxlXG5cdFx0aWYgKHdpbmRvdy53cCAmJiB3aW5kb3cud3AuYXBpRmV0Y2gpIHtcblx0XHRcdHdpbmRvdy53cC5hcGlGZXRjaCh7XG5cdFx0XHRcdHBhdGg6ICcvd3Atcm9ja2V0L3YxL3JlY29tbWVuZGF0aW9ucydcblx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG5cdFx0XHRcdFx0dXBkYXRlUmVjb21tZW5kYXRpb25zV2lkZ2V0KGRhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHJlY29tbWVuZGF0aW9ucyBzdGF0dXM6JywgZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRmFsbGJhY2sgdG8gZmV0Y2ggQVBJXG5cdFx0XHRmZXRjaCh3aW5kb3cud3BBcGlTZXR0aW5ncz8ucm9vdCArICd3cC1yb2NrZXQvdjEvcmVjb21tZW5kYXRpb25zJywge1xuXHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0J1gtV1AtTm9uY2UnOiB3aW5kb3cud3BBcGlTZXR0aW5ncz8ubm9uY2UgfHwgJydcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cdFx0XHRcdFx0aWYgKCFyZXNwb25zZS5vaykge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdOZXR3b3JrIHJlc3BvbnNlIHdhcyBub3Qgb2snKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcblx0XHRcdFx0XHR1cGRhdGVSZWNvbW1lbmRhdGlvbnNXaWRnZXQoZGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcmVjb21tZW5kYXRpb25zIHN0YXR1czonLCBlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMaXN0ZW4gZm9yIEdsb2JhbCBTY29yZSB1cGRhdGUgZXZlbnQuXG5cdCAqIFRoaXMgaXMgZmlyZWQgYnkgYWpheC5qcyB3aGVuIHRoZSBHbG9iYWwgU2NvcmUgcG9sbGluZyBkZXRlY3RzIGEgY2hhbmdlLlxuXHQgKi9cblx0JChkb2N1bWVudCkub24oJ3dwckdsb2JhbFNjb3JlVXBkYXRlZCByb2NrZXQtaW5zaWdodHMtcGFnZS1hZGRlZCByb2NrZXQtaW5zaWdodHMtcGFnZS1yZXRlc3QnLCAoKSA9PiB7XG5cdFx0ZmV0Y2hSZWNvbW1lbmRhdGlvbnNTdGF0dXMoKTtcblx0fSlcbn0pO1xuIiwiLyplc2xpbnQtZW52IGVzNiwgYnJvd3NlciovXG4vKiBnbG9iYWwgTWljcm9Nb2RhbCwgbWl4cGFuZWwsIHJvY2tldF9taXhwYW5lbF9kYXRhLCByb2NrZXRfYWpheF9kYXRhLCBhamF4dXJsICovXG4oICggZG9jdW1lbnQsIHdpbmRvdyApID0+IHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3ByLXJvY2tldGNkbi1vcGVuJyApLmZvckVhY2goICggZWwgKSA9PiB7XG5cdFx0XHRlbC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoIGUgKSA9PiB7XG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0Y29uc3QgaXNDVEEgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cHItcm9ja2V0Y2RuLXByaWNpbmctLWN0YScgKTtcblx0XHRcdFx0Y2hlY2tCdXR0b25VcmxBbmRPcGVuKCBpc0NUQSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdC8vIEFsd2F5cyBpbml0aWFsaXplIE1pY3JvTW9kYWwgdG8gc2V0IHVwIGNsb3NlIGhhbmRsZXJzXG5cdFx0TWljcm9Nb2RhbC5pbml0KCB7XG5cdFx0XHRkaXNhYmxlU2Nyb2xsOiB0cnVlXG5cdFx0fSApO1xuXG5cdFx0Ly8gT25seSBhdXRvLW9wZW4gbW9kYWwgaWYgdGhlcmUncyBubyBkaXJlY3QgYnV0dG9uIFVSTFxuXHRcdGlmICggISB3aW5kb3cucm9ja2V0Y2RuQnV0dG9uVXJsIHx8IHdpbmRvdy5yb2NrZXRjZG5CdXR0b25VcmwgPT09ICcnICkge1xuXHRcdFx0bWF5YmVPcGVuTW9kYWwoKTtcblx0XHRcdG1heWJlT3Blbk1vZGFsRnJvbVVSTCgpO1xuXG5cdFx0XHRjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9ja2V0Y2RuLWlmcmFtZScpO1xuXHRcdFx0Y29uc3QgbG9hZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dwci1yb2NrZXRjZG4tbW9kYWwtbG9hZGVyJyk7XG5cdFx0XHRpZiAoIGlmcmFtZSAmJiBsb2FkZXIgKSB7XG5cdFx0XHRcdGlmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0bG9hZGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IG9uIHRoZSBDRE4gdGFiLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG9uIENETiB0YWIsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGZ1bmN0aW9uIGlzT25DRE5UYWIoKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAnI3BhZ2VfY2RuJztcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmFja3Mgd2hlbiBhIHZpc2libGUgUm9ja2V0Q0ROIHVwc2VsbCBiYW5uZXIgaXMgdmlld2VkLlxuXHQgKiBPbmx5IHRyYWNrcyBvbmNlIHBlciBwYWdlIHNlc3Npb24uXG5cdCAqL1xuXHRsZXQgYmFubmVyVmlld1RyYWNrZWQgPSBmYWxzZTtcblxuXHRmdW5jdGlvbiBtYXliZVRyYWNrQmFubmVyVmlldygpIHtcblx0XHRpZiAoIGJhbm5lclZpZXdUcmFja2VkIHx8ICEgaXNPbkNETlRhYigpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNtYWxsQ1RBID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJyN3cHItcm9ja2V0Y2RuLWN0YS1zbWFsbCcgKTtcblx0XHRjb25zdCBiaWdDVEEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnI3dwci1yb2NrZXRjZG4tY3RhJyApO1xuXG5cdFx0Ly8gT25seSB0cmFjayBpZiBvbmUgb2YgdGhlIGJhbm5lcnMgaXMgdmlzaWJsZS5cblx0XHRpZiAoIGJpZ0NUQSAmJiAhIGJpZ0NUQS5jbGFzc0xpc3QuY29udGFpbnMoICd3cHItaXNIaWRkZW4nICkgKSB7XG5cdFx0XHR0cmFja1JvY2tldENETlVwc2VsbEJhbm5lclZpZXdlZCgpO1xuXHRcdFx0YmFubmVyVmlld1RyYWNrZWQgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoIHNtYWxsQ1RBICYmICEgc21hbGxDVEEuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3ByLWlzSGlkZGVuJyApICkge1xuXHRcdFx0dHJhY2tSb2NrZXRDRE5VcHNlbGxCYW5uZXJWaWV3ZWQoKTtcblx0XHRcdGJhbm5lclZpZXdUcmFja2VkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCAoKSA9PiB7XG5cdFx0bGV0IG9wZW5DVEEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnI3dwci1yb2NrZXRjZG4tb3Blbi1jdGEnICksXG5cdFx0XHRjbG9zZUNUQSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjd3ByLXJvY2tldGNkbi1jbG9zZS1jdGEnICksXG5cdFx0XHRzbWFsbENUQSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjd3ByLXJvY2tldGNkbi1jdGEtc21hbGwnICksXG5cdFx0XHRiaWdDVEEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnI3dwci1yb2NrZXRjZG4tY3RhJyApLFxuXHRcdFx0aW5wdXRUb2dnbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud3ByLXJvY2tldGNkbi10b2dnbGUtLWlucHV0Jyk7XG5cblx0XHQvLyBUcmFjayBiYW5uZXIgdmlldyBvbiBwYWdlIGxvYWQgaWYgYmFubmVyIGlzIHZpc2libGUgYW5kIHVzZXIgaXMgb24gQ0ROIHRhYi5cblx0XHRtYXliZVRyYWNrQmFubmVyVmlldygpO1xuXG5cdFx0Ly8gVHJhY2sgYmFubmVyIHZpZXcgd2hlbiB1c2VyIG5hdmlnYXRlcyB0byBDRE4gdGFiLlxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAnaGFzaGNoYW5nZScsICgpID0+IHtcblx0XHRcdG1heWJlVHJhY2tCYW5uZXJWaWV3KCk7XG5cdFx0fSApO1xuXG5cdFx0Ly8gUHJpY2VzIHNlbGVjdG9ycyBmb3IgdG9nZ2xpbmcgdmlzaWJpbGl0eSBiYXNlZCBvbiB0aGUgYmlsbGluZyBjeWNsZSB0b2dnbGUgc3RhdGUuXG5cdFx0Y29uc3QgcHJpY2VzID0ge1xuXHRcdFx0bW9udGhseToge1xuXHRcdFx0XHRyZWd1bGFyOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud3ByLXJvY2tldGNkbi1wcmljaW5nLXJlZ3VsYXItcHJpY2UtLW1vbnRobHknKSxcblx0XHRcdFx0Y3VycmVudDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1yb2NrZXRjZG4tcHJpY2luZy0tbW9udGhseScpLFxuXHRcdFx0XHRwZXJpb2Q6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy53cHItcm9ja2V0Y2RuLXByaWNpbmctLWJpbGxpbmctcGVyaW9kLS1tb250aGx5Jylcblx0XHRcdH0sXG5cdFx0XHR5ZWFybHk6IHtcblx0XHRcdFx0cmVndWxhcjogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1yb2NrZXRjZG4tcHJpY2luZy1yZWd1bGFyLXByaWNlLS15ZWFybHknKSxcblx0XHRcdFx0Y3VycmVudDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1yb2NrZXRjZG4tcHJpY2luZy0tYW5udWFsJyksXG5cdFx0XHRcdHBlcmlvZDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1yb2NrZXRjZG4tcHJpY2luZy0tYmlsbGluZy1wZXJpb2QtLXllYXJseScpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBudWxsICE9PSBvcGVuQ1RBICYmIG51bGwgIT09IHNtYWxsQ1RBICYmIG51bGwgIT09IGJpZ0NUQSApIHtcblx0XHRcdG9wZW5DVEEuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgKCBlICkgPT4ge1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0c21hbGxDVEEuY2xhc3NMaXN0LmFkZCggJ3dwci1pc0hpZGRlbicgKTtcblx0XHRcdFx0YmlnQ1RBLmNsYXNzTGlzdC5yZW1vdmUoICd3cHItaXNIaWRkZW4nICk7XG5cblx0XHRcdFx0Ly8gVHJhY2sgdXBzZWxsIGJhbm5lciB2aWV3IG9ubHkgaWYgb24gQ0ROIHRhYi5cblx0XHRcdFx0aWYgKCBpc09uQ0ROVGFiKCkgJiYgISBiYW5uZXJWaWV3VHJhY2tlZCApIHtcblx0XHRcdFx0XHR0cmFja1JvY2tldENETlVwc2VsbEJhbm5lclZpZXdlZCgpO1xuXHRcdFx0XHRcdGJhbm5lclZpZXdUcmFja2VkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbmRIVFRQUmVxdWVzdCggZ2V0UG9zdERhdGEoICdiaWcnICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIG51bGwgIT09IGNsb3NlQ1RBICYmIG51bGwgIT09IHNtYWxsQ1RBICYmIG51bGwgIT09IGJpZ0NUQSApIHtcblx0XHRcdGNsb3NlQ1RBLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsICggZSApID0+IHtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdHNtYWxsQ1RBLmNsYXNzTGlzdC5yZW1vdmUoICd3cHItaXNIaWRkZW4nICk7XG5cdFx0XHRcdGJpZ0NUQS5jbGFzc0xpc3QuYWRkKCAnd3ByLWlzSGlkZGVuJyApO1xuXG5cdFx0XHRcdHNlbmRIVFRQUmVxdWVzdCggZ2V0UG9zdERhdGEoICdzbWFsbCcgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFBvc3REYXRhKCBzdGF0dXMgKSB7XG5cdFx0XHRsZXQgcG9zdERhdGEgPSAnJztcblxuXHRcdFx0cG9zdERhdGEgKz0gJ2FjdGlvbj10b2dnbGVfcm9ja2V0Y2RuX2N0YSc7XG5cdFx0XHRwb3N0RGF0YSArPSAnJnN0YXR1cz0nICsgc3RhdHVzO1xuXHRcdFx0cG9zdERhdGEgKz0gJyZub25jZT0nICsgcm9ja2V0X2FqYXhfZGF0YS5ub25jZTtcblxuXHRcdFx0cmV0dXJuIHBvc3REYXRhO1xuXHRcdH1cblxuXHRcdC8vIERpc3BsYXkgdGhlIGNvcnJlY3QgcHJpY2VzIG9uIHBhZ2UgYmFzZWQgb24gYmlsbGluZyBjeWNsZSB0b2dnbGUgc3RhdGUuXG5cdFx0aW5wdXRUb2dnbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBpc1llYXJseSA9IHRoaXMuY2hlY2tlZDtcblxuXHRcdFx0aWYgKGlzWWVhcmx5KSB7XG5cdFx0XHRcdE9iamVjdC52YWx1ZXMocHJpY2VzLm1vbnRobHkpLmZvckVhY2gobGlzdCA9PiBsaXN0LmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LmFkZCgnd3ByLWlzSGlkZGVuJykpKTtcblx0XHRcdFx0T2JqZWN0LnZhbHVlcyhwcmljZXMueWVhcmx5KS5mb3JFYWNoKGxpc3QgPT4gbGlzdC5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoJ3dwci1pc0hpZGRlbicpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRPYmplY3QudmFsdWVzKHByaWNlcy5tb250aGx5KS5mb3JFYWNoKGxpc3QgPT4gbGlzdC5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoJ3dwci1pc0hpZGRlbicpKSk7XG5cdFx0XHRcdE9iamVjdC52YWx1ZXMocHJpY2VzLnllYXJseSkuZm9yRWFjaChsaXN0ID0+IGxpc3QuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QuYWRkKCd3cHItaXNIaWRkZW4nKSkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVcGRhdGUgdGhlIGJ1dHRvbiBVUkwgd2l0aCB0aGUgY29ycmVjdCBpc19tb250aGx5IHBhcmFtZXRlci5cblx0XHRcdHVwZGF0ZUJ1dHRvblVybEJpbGxpbmdDeWNsZShpc1llYXJseSk7XG5cdFx0fSk7XG5cblx0XHQvLyBUcmFjayBSb2NrZXRDRE4gYWN0aXZhdGlvbiBmYWlsZWQgQ1RBIGNsaWNrXG5cdFx0Y29uc3QgYWN0aXZhdGlvbkNUQSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN3cHItcm9ja2V0Y2RuLWFjdGl2YXRpb24tY3RhJyk7XG5cdFx0aWYgKGFjdGl2YXRpb25DVEEpIHtcblx0XHRcdGFjdGl2YXRpb25DVEEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdHRyYWNrUm9ja2V0Q0ROQWN0aXZhdGlvbkNUQSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdH0gKTtcblxuXHR3aW5kb3cub25tZXNzYWdlID0gKCBlICkgPT4ge1xuXHRcdGNvbnN0IGlmcmFtZVVSTCA9IHJvY2tldF9hamF4X2RhdGEub3JpZ2luX3VybDtcblxuXHRcdGlmICggZS5vcmlnaW4gIT09IGlmcmFtZVVSTCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzZXRDRE5GcmFtZUhlaWdodCggZS5kYXRhICk7XG5cdFx0Y2xvc2VNb2RhbCggZS5kYXRhICk7XG5cdFx0dG9rZW5IYW5kbGVyKCBlLmRhdGEsIGlmcmFtZVVSTCApO1xuXHRcdHByb2Nlc3NTdGF0dXMoIGUuZGF0YSApO1xuXHRcdGVuYWJsZUNETiggZS5kYXRhLCBpZnJhbWVVUkwgKTtcblx0XHRkaXNhYmxlQ0ROKCBlLmRhdGEsIGlmcmFtZVVSTCApO1xuXHRcdHZhbGlkYXRlVG9rZW5BbmRDTkFNRSggZS5kYXRhICk7XG5cdH07XG5cblx0ZnVuY3Rpb24gY2hlY2tCdXR0b25VcmxBbmRPcGVuKCBpc0NUQSApIHtcblx0XHQvLyBUcmFjayBDVEEgY2xpY2sgaWYgdGhpcyBpcyB0aGUgcHJpY2luZyBDVEEgYnV0dG9uLlxuXHRcdGlmICggaXNDVEEgKSB7XG5cdFx0XHR0cmFja1JvY2tldENETlVwc2VsbENUQUNsaWNrZWQoKTtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiBidXR0b24gVVJMIHdhcyBpbmplY3RlZCBieSBQSFBcblx0XHRpZiAoIHdpbmRvdy5yb2NrZXRjZG5CdXR0b25VcmwgJiYgd2luZG93LnJvY2tldGNkbkJ1dHRvblVybCAhPT0gJycgKSB7XG5cdFx0XHQvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgTWl4cGFuZWwgZXZlbnQgaXMgc2VudCBiZWZvcmUgbmF2aWdhdGlvblxuXHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2luZG93LnJvY2tldGNkbkJ1dHRvblVybDtcblx0XHRcdH0sIDEwMCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBTaG93IGlmcmFtZSBtb2RhbCBhcyB1c3VhbFxuXHRcdFx0TWljcm9Nb2RhbC5zaG93KCAnd3ByLXJvY2tldGNkbi1tb2RhbCcgKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgYnV0dG9uIFVSTCB3aXRoIHRoZSBjb3JyZWN0IGlzX21vbnRobHkgcGFyYW1ldGVyIGJhc2VkIG9uIGJpbGxpbmcgY3ljbGUgdG9nZ2xlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzWWVhcmx5IC0gVHJ1ZSBpZiB5ZWFybHkgYmlsbGluZyBpcyBzZWxlY3RlZCwgZmFsc2UgZm9yIG1vbnRobHkuXG5cdCAqL1xuXHRmdW5jdGlvbiB1cGRhdGVCdXR0b25VcmxCaWxsaW5nQ3ljbGUoIGlzWWVhcmx5ICkge1xuXHRcdGlmICggISB3aW5kb3cucm9ja2V0Y2RuQnV0dG9uVXJsIHx8IHdpbmRvdy5yb2NrZXRjZG5CdXR0b25VcmwgPT09ICcnICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5yb2NrZXRjZG5CdXR0b25VcmwgPSBzZXRJc01vbnRobHlQYXJhbSh3aW5kb3cucm9ja2V0Y2RuQnV0dG9uVXJsLCBpc1llYXJseSk7XG5cdH1cblxuXHRmdW5jdGlvbiBtYXliZU9wZW5Nb2RhbCgpIHtcblx0XHRsZXQgcG9zdERhdGEgPSAnJztcblxuXHRcdHBvc3REYXRhICs9ICdhY3Rpb249cm9ja2V0Y2RuX3Byb2Nlc3Nfc3RhdHVzJztcblx0XHRwb3N0RGF0YSArPSAnJm5vbmNlPScgKyByb2NrZXRfYWpheF9kYXRhLm5vbmNlO1xuXG5cdFx0Y29uc3QgcmVxdWVzdCA9IHNlbmRIVFRQUmVxdWVzdCggcG9zdERhdGEgKTtcblxuXHRcdHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuXHRcdFx0aWYgKCByZXF1ZXN0LnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUgJiYgMjAwID09PSByZXF1ZXN0LnN0YXR1cyApIHtcblx0XHRcdFx0bGV0IHJlc3BvbnNlVHh0ID0gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCk7XG5cblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZVR4dC5zdWNjZXNzICkge1xuXHRcdFx0XHRcdE1pY3JvTW9kYWwuc2hvdyggJ3dwci1yb2NrZXRjZG4tbW9kYWwnICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gbWF5YmVPcGVuTW9kYWxGcm9tVVJMKCkge1xuXHRcdGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggKTtcblxuXHRcdGlmICggdXJsUGFyYW1zLmhhcyggJ3JvY2tldGNkbl9vcGVuX2lmcmFtZScgKSAmJiAnMScgPT09IHVybFBhcmFtcy5nZXQoICdyb2NrZXRjZG5fb3Blbl9pZnJhbWUnICkgKSB7XG5cdFx0XHQvLyBTZXQgaGFzaCB0byBwYWdlX2NkbiB0byBzaG93IENETiB0YWIgYmVoaW5kIG1vZGFsXG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcjcGFnZV9jZG4nO1xuXG5cdFx0XHRNaWNyb01vZGFsLnNob3coICd3cHItcm9ja2V0Y2RuLW1vZGFsJyApO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCB0aGUgVVJMIHRvIHByZXZlbnQgcmUtdHJpZ2dlcmluZyBvbiByZWZyZXNoXG5cdFx0XHR1cmxQYXJhbXMuZGVsZXRlKCAncm9ja2V0Y2RuX29wZW5faWZyYW1lJyApO1xuXHRcdFx0Y29uc3Qgc2VhcmNoID0gdXJsUGFyYW1zLnRvU3RyaW5nKCk7XG5cdFx0XHRjb25zdCBuZXdVUkwgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAoIHNlYXJjaCA/ICc/JyArIHNlYXJjaCA6ICcnICkgKyB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSgge30sICcnLCBuZXdVUkwgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjbG9zZU1vZGFsKCBkYXRhICkge1xuXHRcdGlmICggISBkYXRhLmhhc093blByb3BlcnR5KCAnY2RuRnJhbWVDbG9zZScgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRNaWNyb01vZGFsLmNsb3NlKCAnd3ByLXJvY2tldGNkbi1tb2RhbCcgKTtcblx0XHQvLyBFbnN1cmUgc2Nyb2xsIGlzIHJlc3RvcmVkXG5cdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICcnO1xuXG5cdFx0bGV0IHBhZ2VzID0gWyAnaWZyYW1lLXBheW1lbnQtc3VjY2VzcycsICdpZnJhbWUtdW5zdWJzY3JpYmUtc3VjY2VzcycgXTtcblxuXHRcdGlmICggISBkYXRhLmhhc093blByb3BlcnR5KCAnY2RuX3BhZ2VfbWVzc2FnZScgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHBhZ2VzLmluZGV4T2YoIGRhdGEuY2RuX3BhZ2VfbWVzc2FnZSApID09PSAtMSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRkb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHByb2Nlc3NTdGF0dXMoIGRhdGEgKSB7XG5cdFx0aWYgKCAhIGRhdGEuaGFzT3duUHJvcGVydHkoICdyb2NrZXRjZG5fcHJvY2VzcycgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcG9zdERhdGEgPSAnJztcblxuXHRcdHBvc3REYXRhICs9ICdhY3Rpb249cm9ja2V0Y2RuX3Byb2Nlc3Nfc2V0Jztcblx0XHRwb3N0RGF0YSArPSAnJnN0YXR1cz0nICsgZGF0YS5yb2NrZXRjZG5fcHJvY2Vzcztcblx0XHRwb3N0RGF0YSArPSAnJm5vbmNlPScgKyByb2NrZXRfYWpheF9kYXRhLm5vbmNlO1xuXG5cdFx0c2VuZEhUVFBSZXF1ZXN0KCBwb3N0RGF0YSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gZW5hYmxlQ0ROKCBkYXRhLCBpZnJhbWVVUkwgKSB7XG5cdFx0bGV0IGlmcmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjcm9ja2V0Y2RuLWlmcmFtZScgKS5jb250ZW50V2luZG93O1xuXG5cdFx0aWYgKCAhIGRhdGEuaGFzT3duUHJvcGVydHkoICdyb2NrZXRjZG5fdXJsJyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBwb3N0RGF0YSA9ICcnO1xuXG5cdFx0cG9zdERhdGEgKz0gJ2FjdGlvbj1yb2NrZXRjZG5fZW5hYmxlJztcblx0XHRwb3N0RGF0YSArPSAnJmNkbl91cmw9JyArIGRhdGEucm9ja2V0Y2RuX3VybDtcblx0XHRwb3N0RGF0YSArPSAnJm5vbmNlPScgKyByb2NrZXRfYWpheF9kYXRhLm5vbmNlO1xuXG5cdFx0Y29uc3QgcmVxdWVzdCA9IHNlbmRIVFRQUmVxdWVzdCggcG9zdERhdGEgKTtcblxuXHRcdHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuXHRcdFx0aWYgKCByZXF1ZXN0LnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUgJiYgMjAwID09PSByZXF1ZXN0LnN0YXR1cyApIHtcblx0XHRcdFx0bGV0IHJlc3BvbnNlVHh0ID0gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCk7XG5cdFx0XHRcdGlmcmFtZS5wb3N0TWVzc2FnZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQnc3VjY2Vzcyc6IHJlc3BvbnNlVHh0LnN1Y2Nlc3MsXG5cdFx0XHRcdFx0XHQnZGF0YSc6IHJlc3BvbnNlVHh0LmRhdGEsXG5cdFx0XHRcdFx0XHQncm9ja2V0Y2RuJzogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0aWZyYW1lVVJMXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldElzTW9udGhseVBhcmFtKHVybCwgaXNZZWFybHkpIHtcblx0XHQvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGlzX21vbnRobHkgcGFyYW1cblx0XHRsZXQgbmV3VXJsID0gdXJsLnJlcGxhY2UoLyhbPyZdKWlzX21vbnRobHk9W14mXSovZywgJycpO1xuXHRcdC8vIEFkZCB0aGUgbmV3IHBhcmFtXG5cdFx0Y29uc3Qgc2VwID0gbmV3VXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyc7XG5cdFx0bmV3VXJsICs9IHNlcCArICdpc19tb250aGx5PScgKyAoaXNZZWFybHkgPyAnMCcgOiAnMScpO1xuXHRcdHJldHVybiBuZXdVcmw7XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNhYmxlQ0ROKCBkYXRhLCBpZnJhbWVVUkwgKSB7XG5cdFx0bGV0IGlmcmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjcm9ja2V0Y2RuLWlmcmFtZScgKS5jb250ZW50V2luZG93O1xuXG5cdFx0aWYgKCAhIGRhdGEuaGFzT3duUHJvcGVydHkoICdyb2NrZXRjZG5fZGlzYWJsZScgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcG9zdERhdGEgPSAnJztcblxuXHRcdHBvc3REYXRhICs9ICdhY3Rpb249cm9ja2V0Y2RuX2Rpc2FibGUnO1xuXHRcdHBvc3REYXRhICs9ICcmbm9uY2U9JyArIHJvY2tldF9hamF4X2RhdGEubm9uY2U7XG5cblx0XHRjb25zdCByZXF1ZXN0ID0gc2VuZEhUVFBSZXF1ZXN0KCBwb3N0RGF0YSApO1xuXG5cdFx0cmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIHJlcXVlc3QucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSAmJiAyMDAgPT09IHJlcXVlc3Quc3RhdHVzICkge1xuXHRcdFx0XHRsZXQgcmVzcG9uc2VUeHQgPSBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTtcblx0XHRcdFx0aWZyYW1lLnBvc3RNZXNzYWdlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCdzdWNjZXNzJzogcmVzcG9uc2VUeHQuc3VjY2Vzcyxcblx0XHRcdFx0XHRcdCdkYXRhJzogcmVzcG9uc2VUeHQuZGF0YSxcblx0XHRcdFx0XHRcdCdyb2NrZXRjZG4nOiB0cnVlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRpZnJhbWVVUkxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gc2VuZEhUVFBSZXF1ZXN0KCBwb3N0RGF0YSApIHtcblx0XHRjb25zdCBodHRwUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG5cdFx0aHR0cFJlcXVlc3Qub3BlbiggJ1BPU1QnLCBhamF4dXJsICk7XG5cdFx0aHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlciggJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnICk7XG5cdFx0aHR0cFJlcXVlc3Quc2VuZCggcG9zdERhdGEgKTtcblxuXHRcdHJldHVybiBodHRwUmVxdWVzdDtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldENETkZyYW1lSGVpZ2h0KCBkYXRhICkge1xuXHRcdGlmICggISBkYXRhLmhhc093blByb3BlcnR5KCAnY2RuRnJhbWVIZWlnaHQnICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdyb2NrZXRjZG4taWZyYW1lJyApLnN0eWxlLmhlaWdodCA9IGAkeyBkYXRhLmNkbkZyYW1lSGVpZ2h0IH1weGA7XG5cdH1cblxuXHRmdW5jdGlvbiB0b2tlbkhhbmRsZXIoIGRhdGEsIGlmcmFtZVVSTCApIHtcblx0XHRsZXQgaWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJyNyb2NrZXRjZG4taWZyYW1lJyApLmNvbnRlbnRXaW5kb3c7XG5cblx0XHRpZiAoICEgZGF0YS5oYXNPd25Qcm9wZXJ0eSggJ3JvY2tldGNkbl90b2tlbicgKSApIHtcblx0XHRcdGxldCBkYXRhID0ge3Byb2Nlc3M6XCJzdWJzY3JpYmVcIiwgbWVzc2FnZTpcInRva2VuX25vdF9yZWNlaXZlZFwifTtcblx0XHRcdGlmcmFtZS5wb3N0TWVzc2FnZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdCdzdWNjZXNzJzogZmFsc2UsXG5cdFx0XHRcdFx0J2RhdGEnOiBkYXRhLFxuXHRcdFx0XHRcdCdyb2NrZXRjZG4nOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlmcmFtZVVSTFxuXHRcdFx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcG9zdERhdGEgPSAnJztcblxuXHRcdHBvc3REYXRhICs9ICdhY3Rpb249c2F2ZV9yb2NrZXRjZG5fdG9rZW4nO1xuXHRcdHBvc3REYXRhICs9ICcmdmFsdWU9JyArIGRhdGEucm9ja2V0Y2RuX3Rva2VuO1xuXHRcdHBvc3REYXRhICs9ICcmbm9uY2U9JyArIHJvY2tldF9hamF4X2RhdGEubm9uY2U7XG5cblx0XHRjb25zdCByZXF1ZXN0ID0gc2VuZEhUVFBSZXF1ZXN0KCBwb3N0RGF0YSApO1xuXG5cdFx0cmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIHJlcXVlc3QucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSAmJiAyMDAgPT09IHJlcXVlc3Quc3RhdHVzICkge1xuXHRcdFx0XHRsZXQgcmVzcG9uc2VUeHQgPSBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTtcblx0XHRcdFx0aWZyYW1lLnBvc3RNZXNzYWdlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCdzdWNjZXNzJzogcmVzcG9uc2VUeHQuc3VjY2Vzcyxcblx0XHRcdFx0XHRcdCdkYXRhJzogcmVzcG9uc2VUeHQuZGF0YSxcblx0XHRcdFx0XHRcdCdyb2NrZXRjZG4nOiB0cnVlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRpZnJhbWVVUkxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gdmFsaWRhdGVUb2tlbkFuZENOQU1FKCBkYXRhICkge1xuXHRcdGlmICggISBkYXRhLmhhc093blByb3BlcnR5KCAncm9ja2V0Y2RuX3ZhbGlkYXRlX3Rva2VuJyApIHx8ICEgZGF0YS5oYXNPd25Qcm9wZXJ0eSggJ3JvY2tldGNkbl92YWxpZGF0ZV9jbmFtZScgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcG9zdERhdGEgPSAnJztcblxuXHRcdHBvc3REYXRhICs9ICdhY3Rpb249cm9ja2V0Y2RuX3ZhbGlkYXRlX3Rva2VuX2NuYW1lJztcblx0XHRwb3N0RGF0YSArPSAnJmNkbl91cmw9JyArIGRhdGEucm9ja2V0Y2RuX3ZhbGlkYXRlX2NuYW1lO1xuXHRcdHBvc3REYXRhICs9ICcmY2RuX3Rva2VuPScgKyBkYXRhLnJvY2tldGNkbl92YWxpZGF0ZV90b2tlbjtcblx0XHRwb3N0RGF0YSArPSAnJm5vbmNlPScgKyByb2NrZXRfYWpheF9kYXRhLm5vbmNlO1xuXG5cdFx0Y29uc3QgcmVxdWVzdCA9IHNlbmRIVFRQUmVxdWVzdCggcG9zdERhdGEgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmFja3MgUm9ja2V0Q0ROIGFjdGl2YXRpb24gZmFpbGVkIENUQSBjbGljayB3aXRoIE1peHBhbmVsLlxuXHQgKi9cblx0ZnVuY3Rpb24gdHJhY2tSb2NrZXRDRE5BY3RpdmF0aW9uQ1RBKCkge1xuXHRcdGlmICh0eXBlb2YgbWl4cGFuZWwgPT09ICd1bmRlZmluZWQnIHx8ICFtaXhwYW5lbC50cmFjaykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGlmIHVzZXIgaGFzIG9wdGVkIGluXG5cdFx0aWYgKHR5cGVvZiByb2NrZXRfbWl4cGFuZWxfZGF0YSA9PT0gJ3VuZGVmaW5lZCcgfHwgIXJvY2tldF9taXhwYW5lbF9kYXRhLm9wdGluX2VuYWJsZWQgfHwgcm9ja2V0X21peHBhbmVsX2RhdGEub3B0aW5fZW5hYmxlZCA9PT0gJzAnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWRlbnRpZnkgdXNlciBpZiBhdmFpbGFibGVcblx0XHRpZiAocm9ja2V0X21peHBhbmVsX2RhdGEudXNlcl9pZCAmJiB0eXBlb2YgbWl4cGFuZWwuaWRlbnRpZnkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdG1peHBhbmVsLmlkZW50aWZ5KHJvY2tldF9taXhwYW5lbF9kYXRhLnVzZXJfaWQpO1xuXHRcdH1cblxuXHRcdG1peHBhbmVsLnRyYWNrKCdSb2NrZXRDRE4gQWN0aXZhdGlvbiBGYWlsZWQgQ1RBIENsaWNrZWQnLCB7XG5cdFx0XHRjb250ZXh0OiByb2NrZXRfbWl4cGFuZWxfZGF0YS5jb250ZXh0LFxuXHRcdFx0cGx1Z2luOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5wbHVnaW4sXG5cdFx0XHRicmFuZDogcm9ja2V0X21peHBhbmVsX2RhdGEuYnJhbmQsXG5cdFx0XHRhcHBsaWNhdGlvbjogcm9ja2V0X21peHBhbmVsX2RhdGEuYXBwXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVHJhY2tzIGEgUm9ja2V0Q0ROIHVwc2VsbCBldmVudCB3aXRoIE1peHBhbmVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lICAgVGhlIE1peHBhbmVsIGV2ZW50IG5hbWUuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbZXh0cmFQcm9wc10gT3B0aW9uYWwgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIG1lcmdlLlxuXHQgKi9cblx0ZnVuY3Rpb24gdHJhY2tSb2NrZXRDRE5VcHNlbGxNaXhwYW5lbEV2ZW50KCBldmVudE5hbWUsIGV4dHJhUHJvcHMgKSB7XG5cdFx0aWYgKCB0eXBlb2YgbWl4cGFuZWwgPT09ICd1bmRlZmluZWQnIHx8ICEgbWl4cGFuZWwudHJhY2sgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgaWYgdXNlciBoYXMgb3B0ZWQgaW4uXG5cdFx0aWYgKCB0eXBlb2Ygcm9ja2V0X21peHBhbmVsX2RhdGEgPT09ICd1bmRlZmluZWQnIHx8ICEgcm9ja2V0X21peHBhbmVsX2RhdGEub3B0aW5fZW5hYmxlZCB8fCByb2NrZXRfbWl4cGFuZWxfZGF0YS5vcHRpbl9lbmFibGVkID09PSAnMCcgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWRlbnRpZnkgdXNlciBpZiBhdmFpbGFibGUuXG5cdFx0aWYgKCAhIHJvY2tldF9taXhwYW5lbF9kYXRhLnVzZXJfaWQgfHwgdHlwZW9mIG1peHBhbmVsLmlkZW50aWZ5ICE9PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG1peHBhbmVsLmlkZW50aWZ5KCByb2NrZXRfbWl4cGFuZWxfZGF0YS51c2VyX2lkICk7XG5cblx0XHR2YXIgcHJvcHMgPSB7XG5cdFx0XHRjb250ZXh0OiByb2NrZXRfbWl4cGFuZWxfZGF0YS5jb250ZXh0LFxuXHRcdFx0cGx1Z2luOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5wbHVnaW4sXG5cdFx0XHRicmFuZDogcm9ja2V0X21peHBhbmVsX2RhdGEuYnJhbmQsXG5cdFx0XHRhcHBsaWNhdGlvbjogcm9ja2V0X21peHBhbmVsX2RhdGEuYXBwLFxuXHRcdFx0cGF0aDogcm9ja2V0X21peHBhbmVsX2RhdGEucGF0aFxuXHRcdH07XG5cblx0XHQvLyBNZXJnZSBleHRyYSBwcm9wZXJ0aWVzIGlmIHByb3ZpZGVkIGFuZCB2YWxpZC5cblx0XHRpZiAoIGV4dHJhUHJvcHMgJiYgdHlwZW9mIGV4dHJhUHJvcHMgPT09ICdvYmplY3QnICkge1xuXHRcdFx0Zm9yICggdmFyIGtleSBpbiBleHRyYVByb3BzICkge1xuXHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZXh0cmFQcm9wcywga2V5ICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGtleSBdID0gZXh0cmFQcm9wc1sga2V5IF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRtaXhwYW5lbC50cmFjayggZXZlbnROYW1lLCBwcm9wcyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYWNrcyBSb2NrZXRDRE4gdXBzZWxsIGJhbm5lciB2aWV3IHdpdGggTWl4cGFuZWwuXG5cdCAqL1xuXHRmdW5jdGlvbiB0cmFja1JvY2tldENETlVwc2VsbEJhbm5lclZpZXdlZCgpIHtcblx0XHR0cmFja1JvY2tldENETlVwc2VsbE1peHBhbmVsRXZlbnQoICdSb2NrZXRDRE4gVXBzZWxsIEJhbm5lciBWaWV3ZWQnICk7XG5cdH1cblxuXHQvKipcblx0ICogVHJhY2tzIFJvY2tldENETiB1cHNlbGwgQ1RBIGNsaWNrIHdpdGggTWl4cGFuZWwuXG5cdCAqL1xuXHRmdW5jdGlvbiB0cmFja1JvY2tldENETlVwc2VsbENUQUNsaWNrZWQoKSB7XG5cdFx0dHJhY2tSb2NrZXRDRE5VcHNlbGxNaXhwYW5lbEV2ZW50KCAnUm9ja2V0Q0ROIFVwc2VsbCBDVEEgQ2xpY2tlZCcgKTtcblx0fVxufSApKCBkb2N1bWVudCwgd2luZG93ICk7XG4iLCIvKiFcclxuICogVkVSU0lPTjogMS4xMi4xXHJcbiAqIERBVEU6IDIwMTQtMDYtMjZcclxuICogVVBEQVRFUyBBTkQgRE9DUyBBVDogaHR0cDovL3d3dy5ncmVlbnNvY2suY29tXHJcbiAqXHJcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwOC0yMDE0LCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIFRoaXMgd29yayBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwOi8vd3d3LmdyZWVuc29jay5jb20vdGVybXNfb2ZfdXNlLmh0bWwgb3IgZm9yXHJcbiAqIENsdWIgR3JlZW5Tb2NrIG1lbWJlcnMsIHRoZSBzb2Z0d2FyZSBhZ3JlZW1lbnQgdGhhdCB3YXMgaXNzdWVkIHdpdGggeW91ciBtZW1iZXJzaGlwLlxyXG4gKiBcclxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXHJcbiAqL1xyXG4od2luZG93Ll9nc1F1ZXVlfHwod2luZG93Ll9nc1F1ZXVlPVtdKSkucHVzaChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3dpbmRvdy5fZ3NEZWZpbmUoXCJUaW1lbGluZUxpdGVcIixbXCJjb3JlLkFuaW1hdGlvblwiLFwiY29yZS5TaW1wbGVUaW1lbGluZVwiLFwiVHdlZW5MaXRlXCJdLGZ1bmN0aW9uKHQsZSxpKXt2YXIgcz1mdW5jdGlvbih0KXtlLmNhbGwodGhpcyx0KSx0aGlzLl9sYWJlbHM9e30sdGhpcy5hdXRvUmVtb3ZlQ2hpbGRyZW49dGhpcy52YXJzLmF1dG9SZW1vdmVDaGlsZHJlbj09PSEwLHRoaXMuc21vb3RoQ2hpbGRUaW1pbmc9dGhpcy52YXJzLnNtb290aENoaWxkVGltaW5nPT09ITAsdGhpcy5fc29ydENoaWxkcmVuPSEwLHRoaXMuX29uVXBkYXRlPXRoaXMudmFycy5vblVwZGF0ZTt2YXIgaSxzLHI9dGhpcy52YXJzO2ZvcihzIGluIHIpaT1yW3NdLGEoaSkmJi0xIT09aS5qb2luKFwiXCIpLmluZGV4T2YoXCJ7c2VsZn1cIikmJihyW3NdPXRoaXMuX3N3YXBTZWxmSW5QYXJhbXMoaSkpO2Eoci50d2VlbnMpJiZ0aGlzLmFkZChyLnR3ZWVucywwLHIuYWxpZ24sci5zdGFnZ2VyKX0scj0xZS0xMCxuPWkuX2ludGVybmFscy5pc1NlbGVjdG9yLGE9aS5faW50ZXJuYWxzLmlzQXJyYXksbz1bXSxoPXdpbmRvdy5fZ3NEZWZpbmUuZ2xvYmFscyxsPWZ1bmN0aW9uKHQpe3ZhciBlLGk9e307Zm9yKGUgaW4gdClpW2VdPXRbZV07cmV0dXJuIGl9LF89ZnVuY3Rpb24odCxlLGkscyl7dC5fdGltZWxpbmUucGF1c2UodC5fc3RhcnRUaW1lKSxlJiZlLmFwcGx5KHN8fHQuX3RpbWVsaW5lLGl8fG8pfSx1PW8uc2xpY2UsZj1zLnByb3RvdHlwZT1uZXcgZTtyZXR1cm4gcy52ZXJzaW9uPVwiMS4xMi4xXCIsZi5jb25zdHJ1Y3Rvcj1zLGYua2lsbCgpLl9nYz0hMSxmLnRvPWZ1bmN0aW9uKHQsZSxzLHIpe3ZhciBuPXMucmVwZWF0JiZoLlR3ZWVuTWF4fHxpO3JldHVybiBlP3RoaXMuYWRkKG5ldyBuKHQsZSxzKSxyKTp0aGlzLnNldCh0LHMscil9LGYuZnJvbT1mdW5jdGlvbih0LGUscyxyKXtyZXR1cm4gdGhpcy5hZGQoKHMucmVwZWF0JiZoLlR3ZWVuTWF4fHxpKS5mcm9tKHQsZSxzKSxyKX0sZi5mcm9tVG89ZnVuY3Rpb24odCxlLHMscixuKXt2YXIgYT1yLnJlcGVhdCYmaC5Ud2Vlbk1heHx8aTtyZXR1cm4gZT90aGlzLmFkZChhLmZyb21Ubyh0LGUscyxyKSxuKTp0aGlzLnNldCh0LHIsbil9LGYuc3RhZ2dlclRvPWZ1bmN0aW9uKHQsZSxyLGEsbyxoLF8sZil7dmFyIHAsYz1uZXcgcyh7b25Db21wbGV0ZTpoLG9uQ29tcGxldGVQYXJhbXM6XyxvbkNvbXBsZXRlU2NvcGU6ZixzbW9vdGhDaGlsZFRpbWluZzp0aGlzLnNtb290aENoaWxkVGltaW5nfSk7Zm9yKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1pLnNlbGVjdG9yKHQpfHx0KSxuKHQpJiYodD11LmNhbGwodCwwKSksYT1hfHwwLHA9MDt0Lmxlbmd0aD5wO3ArKylyLnN0YXJ0QXQmJihyLnN0YXJ0QXQ9bChyLnN0YXJ0QXQpKSxjLnRvKHRbcF0sZSxsKHIpLHAqYSk7cmV0dXJuIHRoaXMuYWRkKGMsbyl9LGYuc3RhZ2dlckZyb209ZnVuY3Rpb24odCxlLGkscyxyLG4sYSxvKXtyZXR1cm4gaS5pbW1lZGlhdGVSZW5kZXI9MCE9aS5pbW1lZGlhdGVSZW5kZXIsaS5ydW5CYWNrd2FyZHM9ITAsdGhpcy5zdGFnZ2VyVG8odCxlLGkscyxyLG4sYSxvKX0sZi5zdGFnZ2VyRnJvbVRvPWZ1bmN0aW9uKHQsZSxpLHMscixuLGEsbyxoKXtyZXR1cm4gcy5zdGFydEF0PWkscy5pbW1lZGlhdGVSZW5kZXI9MCE9cy5pbW1lZGlhdGVSZW5kZXImJjAhPWkuaW1tZWRpYXRlUmVuZGVyLHRoaXMuc3RhZ2dlclRvKHQsZSxzLHIsbixhLG8saCl9LGYuY2FsbD1mdW5jdGlvbih0LGUscyxyKXtyZXR1cm4gdGhpcy5hZGQoaS5kZWxheWVkQ2FsbCgwLHQsZSxzKSxyKX0sZi5zZXQ9ZnVuY3Rpb24odCxlLHMpe3JldHVybiBzPXRoaXMuX3BhcnNlVGltZU9yTGFiZWwocywwLCEwKSxudWxsPT1lLmltbWVkaWF0ZVJlbmRlciYmKGUuaW1tZWRpYXRlUmVuZGVyPXM9PT10aGlzLl90aW1lJiYhdGhpcy5fcGF1c2VkKSx0aGlzLmFkZChuZXcgaSh0LDAsZSkscyl9LHMuZXhwb3J0Um9vdD1mdW5jdGlvbih0LGUpe3Q9dHx8e30sbnVsbD09dC5zbW9vdGhDaGlsZFRpbWluZyYmKHQuc21vb3RoQ2hpbGRUaW1pbmc9ITApO3ZhciByLG4sYT1uZXcgcyh0KSxvPWEuX3RpbWVsaW5lO2ZvcihudWxsPT1lJiYoZT0hMCksby5fcmVtb3ZlKGEsITApLGEuX3N0YXJ0VGltZT0wLGEuX3Jhd1ByZXZUaW1lPWEuX3RpbWU9YS5fdG90YWxUaW1lPW8uX3RpbWUscj1vLl9maXJzdDtyOyluPXIuX25leHQsZSYmciBpbnN0YW5jZW9mIGkmJnIudGFyZ2V0PT09ci52YXJzLm9uQ29tcGxldGV8fGEuYWRkKHIsci5fc3RhcnRUaW1lLXIuX2RlbGF5KSxyPW47cmV0dXJuIG8uYWRkKGEsMCksYX0sZi5hZGQ9ZnVuY3Rpb24ocixuLG8saCl7dmFyIGwsXyx1LGYscCxjO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBuJiYobj10aGlzLl9wYXJzZVRpbWVPckxhYmVsKG4sMCwhMCxyKSksIShyIGluc3RhbmNlb2YgdCkpe2lmKHIgaW5zdGFuY2VvZiBBcnJheXx8ciYmci5wdXNoJiZhKHIpKXtmb3Iobz1vfHxcIm5vcm1hbFwiLGg9aHx8MCxsPW4sXz1yLmxlbmd0aCx1PTA7Xz51O3UrKylhKGY9clt1XSkmJihmPW5ldyBzKHt0d2VlbnM6Zn0pKSx0aGlzLmFkZChmLGwpLFwic3RyaW5nXCIhPXR5cGVvZiBmJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBmJiYoXCJzZXF1ZW5jZVwiPT09bz9sPWYuX3N0YXJ0VGltZStmLnRvdGFsRHVyYXRpb24oKS9mLl90aW1lU2NhbGU6XCJzdGFydFwiPT09byYmKGYuX3N0YXJ0VGltZS09Zi5kZWxheSgpKSksbCs9aDtyZXR1cm4gdGhpcy5fdW5jYWNoZSghMCl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpcmV0dXJuIHRoaXMuYWRkTGFiZWwocixuKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiByKXRocm93XCJDYW5ub3QgYWRkIFwiK3IrXCIgaW50byB0aGUgdGltZWxpbmU7IGl0IGlzIG5vdCBhIHR3ZWVuLCB0aW1lbGluZSwgZnVuY3Rpb24sIG9yIHN0cmluZy5cIjtyPWkuZGVsYXllZENhbGwoMCxyKX1pZihlLnByb3RvdHlwZS5hZGQuY2FsbCh0aGlzLHIsbiksKHRoaXMuX2djfHx0aGlzLl90aW1lPT09dGhpcy5fZHVyYXRpb24pJiYhdGhpcy5fcGF1c2VkJiZ0aGlzLl9kdXJhdGlvbjx0aGlzLmR1cmF0aW9uKCkpZm9yKHA9dGhpcyxjPXAucmF3VGltZSgpPnIuX3N0YXJ0VGltZTtwLl90aW1lbGluZTspYyYmcC5fdGltZWxpbmUuc21vb3RoQ2hpbGRUaW1pbmc/cC50b3RhbFRpbWUocC5fdG90YWxUaW1lLCEwKTpwLl9nYyYmcC5fZW5hYmxlZCghMCwhMSkscD1wLl90aW1lbGluZTtyZXR1cm4gdGhpc30sZi5yZW1vdmU9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQpcmV0dXJuIHRoaXMuX3JlbW92ZShlLCExKTtpZihlIGluc3RhbmNlb2YgQXJyYXl8fGUmJmUucHVzaCYmYShlKSl7Zm9yKHZhciBpPWUubGVuZ3RoOy0taT4tMTspdGhpcy5yZW1vdmUoZVtpXSk7cmV0dXJuIHRoaXN9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/dGhpcy5yZW1vdmVMYWJlbChlKTp0aGlzLmtpbGwobnVsbCxlKX0sZi5fcmVtb3ZlPWZ1bmN0aW9uKHQsaSl7ZS5wcm90b3R5cGUuX3JlbW92ZS5jYWxsKHRoaXMsdCxpKTt2YXIgcz10aGlzLl9sYXN0O3JldHVybiBzP3RoaXMuX3RpbWU+cy5fc3RhcnRUaW1lK3MuX3RvdGFsRHVyYXRpb24vcy5fdGltZVNjYWxlJiYodGhpcy5fdGltZT10aGlzLmR1cmF0aW9uKCksdGhpcy5fdG90YWxUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb24pOnRoaXMuX3RpbWU9dGhpcy5fdG90YWxUaW1lPXRoaXMuX2R1cmF0aW9uPXRoaXMuX3RvdGFsRHVyYXRpb249MCx0aGlzfSxmLmFwcGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZCh0LHRoaXMuX3BhcnNlVGltZU9yTGFiZWwobnVsbCxlLCEwLHQpKX0sZi5pbnNlcnQ9Zi5pbnNlcnRNdWx0aXBsZT1mdW5jdGlvbih0LGUsaSxzKXtyZXR1cm4gdGhpcy5hZGQodCxlfHwwLGkscyl9LGYuYXBwZW5kTXVsdGlwbGU9ZnVuY3Rpb24odCxlLGkscyl7cmV0dXJuIHRoaXMuYWRkKHQsdGhpcy5fcGFyc2VUaW1lT3JMYWJlbChudWxsLGUsITAsdCksaSxzKX0sZi5hZGRMYWJlbD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sYWJlbHNbdF09dGhpcy5fcGFyc2VUaW1lT3JMYWJlbChlKSx0aGlzfSxmLmFkZFBhdXNlPWZ1bmN0aW9uKHQsZSxpLHMpe3JldHVybiB0aGlzLmNhbGwoXyxbXCJ7c2VsZn1cIixlLGksc10sdGhpcyx0KX0sZi5yZW1vdmVMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMuX2xhYmVsc1t0XSx0aGlzfSxmLmdldExhYmVsVGltZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dGhpcy5fbGFiZWxzW3RdP3RoaXMuX2xhYmVsc1t0XTotMX0sZi5fcGFyc2VUaW1lT3JMYWJlbD1mdW5jdGlvbihlLGkscyxyKXt2YXIgbjtpZihyIGluc3RhbmNlb2YgdCYmci50aW1lbGluZT09PXRoaXMpdGhpcy5yZW1vdmUocik7ZWxzZSBpZihyJiYociBpbnN0YW5jZW9mIEFycmF5fHxyLnB1c2gmJmEocikpKWZvcihuPXIubGVuZ3RoOy0tbj4tMTspcltuXWluc3RhbmNlb2YgdCYmcltuXS50aW1lbGluZT09PXRoaXMmJnRoaXMucmVtb3ZlKHJbbl0pO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpKXJldHVybiB0aGlzLl9wYXJzZVRpbWVPckxhYmVsKGkscyYmXCJudW1iZXJcIj09dHlwZW9mIGUmJm51bGw9PXRoaXMuX2xhYmVsc1tpXT9lLXRoaXMuZHVyYXRpb24oKTowLHMpO2lmKGk9aXx8MCxcInN0cmluZ1wiIT10eXBlb2YgZXx8IWlzTmFOKGUpJiZudWxsPT10aGlzLl9sYWJlbHNbZV0pbnVsbD09ZSYmKGU9dGhpcy5kdXJhdGlvbigpKTtlbHNle2lmKG49ZS5pbmRleE9mKFwiPVwiKSwtMT09PW4pcmV0dXJuIG51bGw9PXRoaXMuX2xhYmVsc1tlXT9zP3RoaXMuX2xhYmVsc1tlXT10aGlzLmR1cmF0aW9uKCkraTppOnRoaXMuX2xhYmVsc1tlXStpO2k9cGFyc2VJbnQoZS5jaGFyQXQobi0xKStcIjFcIiwxMCkqTnVtYmVyKGUuc3Vic3RyKG4rMSkpLGU9bj4xP3RoaXMuX3BhcnNlVGltZU9yTGFiZWwoZS5zdWJzdHIoMCxuLTEpLDAscyk6dGhpcy5kdXJhdGlvbigpfXJldHVybiBOdW1iZXIoZSkraX0sZi5zZWVrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG90YWxUaW1lKFwibnVtYmVyXCI9PXR5cGVvZiB0P3Q6dGhpcy5fcGFyc2VUaW1lT3JMYWJlbCh0KSxlIT09ITEpfSxmLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXVzZWQoITApfSxmLmdvdG9BbmRQbGF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucGxheSh0LGUpfSxmLmdvdG9BbmRTdG9wPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucGF1c2UodCxlKX0sZi5yZW5kZXI9ZnVuY3Rpb24odCxlLGkpe3RoaXMuX2djJiZ0aGlzLl9lbmFibGVkKCEwLCExKTt2YXIgcyxuLGEsaCxsLF89dGhpcy5fZGlydHk/dGhpcy50b3RhbER1cmF0aW9uKCk6dGhpcy5fdG90YWxEdXJhdGlvbix1PXRoaXMuX3RpbWUsZj10aGlzLl9zdGFydFRpbWUscD10aGlzLl90aW1lU2NhbGUsYz10aGlzLl9wYXVzZWQ7aWYodD49Xz8odGhpcy5fdG90YWxUaW1lPXRoaXMuX3RpbWU9Xyx0aGlzLl9yZXZlcnNlZHx8dGhpcy5faGFzUGF1c2VkQ2hpbGQoKXx8KG49ITAsaD1cIm9uQ29tcGxldGVcIiwwPT09dGhpcy5fZHVyYXRpb24mJigwPT09dHx8MD50aGlzLl9yYXdQcmV2VGltZXx8dGhpcy5fcmF3UHJldlRpbWU9PT1yKSYmdGhpcy5fcmF3UHJldlRpbWUhPT10JiZ0aGlzLl9maXJzdCYmKGw9ITAsdGhpcy5fcmF3UHJldlRpbWU+ciYmKGg9XCJvblJldmVyc2VDb21wbGV0ZVwiKSkpLHRoaXMuX3Jhd1ByZXZUaW1lPXRoaXMuX2R1cmF0aW9ufHwhZXx8dHx8dGhpcy5fcmF3UHJldlRpbWU9PT10P3Q6cix0PV8rMWUtNCk6MWUtNz50Pyh0aGlzLl90b3RhbFRpbWU9dGhpcy5fdGltZT0wLCgwIT09dXx8MD09PXRoaXMuX2R1cmF0aW9uJiZ0aGlzLl9yYXdQcmV2VGltZSE9PXImJih0aGlzLl9yYXdQcmV2VGltZT4wfHwwPnQmJnRoaXMuX3Jhd1ByZXZUaW1lPj0wKSkmJihoPVwib25SZXZlcnNlQ29tcGxldGVcIixuPXRoaXMuX3JldmVyc2VkKSwwPnQ/KHRoaXMuX2FjdGl2ZT0hMSwwPT09dGhpcy5fZHVyYXRpb24mJnRoaXMuX3Jhd1ByZXZUaW1lPj0wJiZ0aGlzLl9maXJzdCYmKGw9ITApLHRoaXMuX3Jhd1ByZXZUaW1lPXQpOih0aGlzLl9yYXdQcmV2VGltZT10aGlzLl9kdXJhdGlvbnx8IWV8fHR8fHRoaXMuX3Jhd1ByZXZUaW1lPT09dD90OnIsdD0wLHRoaXMuX2luaXR0ZWR8fChsPSEwKSkpOnRoaXMuX3RvdGFsVGltZT10aGlzLl90aW1lPXRoaXMuX3Jhd1ByZXZUaW1lPXQsdGhpcy5fdGltZSE9PXUmJnRoaXMuX2ZpcnN0fHxpfHxsKXtpZih0aGlzLl9pbml0dGVkfHwodGhpcy5faW5pdHRlZD0hMCksdGhpcy5fYWN0aXZlfHwhdGhpcy5fcGF1c2VkJiZ0aGlzLl90aW1lIT09dSYmdD4wJiYodGhpcy5fYWN0aXZlPSEwKSwwPT09dSYmdGhpcy52YXJzLm9uU3RhcnQmJjAhPT10aGlzLl90aW1lJiYoZXx8dGhpcy52YXJzLm9uU3RhcnQuYXBwbHkodGhpcy52YXJzLm9uU3RhcnRTY29wZXx8dGhpcyx0aGlzLnZhcnMub25TdGFydFBhcmFtc3x8bykpLHRoaXMuX3RpbWU+PXUpZm9yKHM9dGhpcy5fZmlyc3Q7cyYmKGE9cy5fbmV4dCwhdGhpcy5fcGF1c2VkfHxjKTspKHMuX2FjdGl2ZXx8cy5fc3RhcnRUaW1lPD10aGlzLl90aW1lJiYhcy5fcGF1c2VkJiYhcy5fZ2MpJiYocy5fcmV2ZXJzZWQ/cy5yZW5kZXIoKHMuX2RpcnR5P3MudG90YWxEdXJhdGlvbigpOnMuX3RvdGFsRHVyYXRpb24pLSh0LXMuX3N0YXJ0VGltZSkqcy5fdGltZVNjYWxlLGUsaSk6cy5yZW5kZXIoKHQtcy5fc3RhcnRUaW1lKSpzLl90aW1lU2NhbGUsZSxpKSkscz1hO2Vsc2UgZm9yKHM9dGhpcy5fbGFzdDtzJiYoYT1zLl9wcmV2LCF0aGlzLl9wYXVzZWR8fGMpOykocy5fYWN0aXZlfHx1Pj1zLl9zdGFydFRpbWUmJiFzLl9wYXVzZWQmJiFzLl9nYykmJihzLl9yZXZlcnNlZD9zLnJlbmRlcigocy5fZGlydHk/cy50b3RhbER1cmF0aW9uKCk6cy5fdG90YWxEdXJhdGlvbiktKHQtcy5fc3RhcnRUaW1lKSpzLl90aW1lU2NhbGUsZSxpKTpzLnJlbmRlcigodC1zLl9zdGFydFRpbWUpKnMuX3RpbWVTY2FsZSxlLGkpKSxzPWE7dGhpcy5fb25VcGRhdGUmJihlfHx0aGlzLl9vblVwZGF0ZS5hcHBseSh0aGlzLnZhcnMub25VcGRhdGVTY29wZXx8dGhpcyx0aGlzLnZhcnMub25VcGRhdGVQYXJhbXN8fG8pKSxoJiYodGhpcy5fZ2N8fChmPT09dGhpcy5fc3RhcnRUaW1lfHxwIT09dGhpcy5fdGltZVNjYWxlKSYmKDA9PT10aGlzLl90aW1lfHxfPj10aGlzLnRvdGFsRHVyYXRpb24oKSkmJihuJiYodGhpcy5fdGltZWxpbmUuYXV0b1JlbW92ZUNoaWxkcmVuJiZ0aGlzLl9lbmFibGVkKCExLCExKSx0aGlzLl9hY3RpdmU9ITEpLCFlJiZ0aGlzLnZhcnNbaF0mJnRoaXMudmFyc1toXS5hcHBseSh0aGlzLnZhcnNbaCtcIlNjb3BlXCJdfHx0aGlzLHRoaXMudmFyc1toK1wiUGFyYW1zXCJdfHxvKSkpfX0sZi5faGFzUGF1c2VkQ2hpbGQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZmlyc3Q7dDspe2lmKHQuX3BhdXNlZHx8dCBpbnN0YW5jZW9mIHMmJnQuX2hhc1BhdXNlZENoaWxkKCkpcmV0dXJuITA7dD10Ll9uZXh0fXJldHVybiExfSxmLmdldENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxzLHIpe3I9cnx8LTk5OTk5OTk5OTk7Zm9yKHZhciBuPVtdLGE9dGhpcy5fZmlyc3Qsbz0wO2E7KXI+YS5fc3RhcnRUaW1lfHwoYSBpbnN0YW5jZW9mIGk/ZSE9PSExJiYobltvKytdPWEpOihzIT09ITEmJihuW28rK109YSksdCE9PSExJiYobj1uLmNvbmNhdChhLmdldENoaWxkcmVuKCEwLGUscykpLG89bi5sZW5ndGgpKSksYT1hLl9uZXh0O3JldHVybiBufSxmLmdldFR3ZWVuc09mPWZ1bmN0aW9uKHQsZSl7dmFyIHMscixuPXRoaXMuX2djLGE9W10sbz0wO2ZvcihuJiZ0aGlzLl9lbmFibGVkKCEwLCEwKSxzPWkuZ2V0VHdlZW5zT2YodCkscj1zLmxlbmd0aDstLXI+LTE7KShzW3JdLnRpbWVsaW5lPT09dGhpc3x8ZSYmdGhpcy5fY29udGFpbnMoc1tyXSkpJiYoYVtvKytdPXNbcl0pO3JldHVybiBuJiZ0aGlzLl9lbmFibGVkKCExLCEwKSxhfSxmLl9jb250YWlucz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC50aW1lbGluZTtlOyl7aWYoZT09PXRoaXMpcmV0dXJuITA7ZT1lLnRpbWVsaW5lfXJldHVybiExfSxmLnNoaWZ0Q2hpbGRyZW49ZnVuY3Rpb24odCxlLGkpe2k9aXx8MDtmb3IodmFyIHMscj10aGlzLl9maXJzdCxuPXRoaXMuX2xhYmVscztyOylyLl9zdGFydFRpbWU+PWkmJihyLl9zdGFydFRpbWUrPXQpLHI9ci5fbmV4dDtpZihlKWZvcihzIGluIG4pbltzXT49aSYmKG5bc10rPXQpO3JldHVybiB0aGlzLl91bmNhY2hlKCEwKX0sZi5fa2lsbD1mdW5jdGlvbih0LGUpe2lmKCF0JiYhZSlyZXR1cm4gdGhpcy5fZW5hYmxlZCghMSwhMSk7Zm9yKHZhciBpPWU/dGhpcy5nZXRUd2VlbnNPZihlKTp0aGlzLmdldENoaWxkcmVuKCEwLCEwLCExKSxzPWkubGVuZ3RoLHI9ITE7LS1zPi0xOylpW3NdLl9raWxsKHQsZSkmJihyPSEwKTtyZXR1cm4gcn0sZi5jbGVhcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENoaWxkcmVuKCExLCEwLCEwKSxpPWUubGVuZ3RoO2Zvcih0aGlzLl90aW1lPXRoaXMuX3RvdGFsVGltZT0wOy0taT4tMTspZVtpXS5fZW5hYmxlZCghMSwhMSk7cmV0dXJuIHQhPT0hMSYmKHRoaXMuX2xhYmVscz17fSksdGhpcy5fdW5jYWNoZSghMCl9LGYuaW52YWxpZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9maXJzdDt0Oyl0LmludmFsaWRhdGUoKSx0PXQuX25leHQ7cmV0dXJuIHRoaXN9LGYuX2VuYWJsZWQ9ZnVuY3Rpb24odCxpKXtpZih0PT09dGhpcy5fZ2MpZm9yKHZhciBzPXRoaXMuX2ZpcnN0O3M7KXMuX2VuYWJsZWQodCwhMCkscz1zLl9uZXh0O3JldHVybiBlLnByb3RvdHlwZS5fZW5hYmxlZC5jYWxsKHRoaXMsdCxpKX0sZi5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oMCE9PXRoaXMuZHVyYXRpb24oKSYmMCE9PXQmJnRoaXMudGltZVNjYWxlKHRoaXMuX2R1cmF0aW9uL3QpLHRoaXMpOih0aGlzLl9kaXJ0eSYmdGhpcy50b3RhbER1cmF0aW9uKCksdGhpcy5fZHVyYXRpb24pfSxmLnRvdGFsRHVyYXRpb249ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2lmKHRoaXMuX2RpcnR5KXtmb3IodmFyIGUsaSxzPTAscj10aGlzLl9sYXN0LG49OTk5OTk5OTk5OTk5O3I7KWU9ci5fcHJldixyLl9kaXJ0eSYmci50b3RhbER1cmF0aW9uKCksci5fc3RhcnRUaW1lPm4mJnRoaXMuX3NvcnRDaGlsZHJlbiYmIXIuX3BhdXNlZD90aGlzLmFkZChyLHIuX3N0YXJ0VGltZS1yLl9kZWxheSk6bj1yLl9zdGFydFRpbWUsMD5yLl9zdGFydFRpbWUmJiFyLl9wYXVzZWQmJihzLT1yLl9zdGFydFRpbWUsdGhpcy5fdGltZWxpbmUuc21vb3RoQ2hpbGRUaW1pbmcmJih0aGlzLl9zdGFydFRpbWUrPXIuX3N0YXJ0VGltZS90aGlzLl90aW1lU2NhbGUpLHRoaXMuc2hpZnRDaGlsZHJlbigtci5fc3RhcnRUaW1lLCExLC05OTk5OTk5OTk5KSxuPTApLGk9ci5fc3RhcnRUaW1lK3IuX3RvdGFsRHVyYXRpb24vci5fdGltZVNjYWxlLGk+cyYmKHM9aSkscj1lO3RoaXMuX2R1cmF0aW9uPXRoaXMuX3RvdGFsRHVyYXRpb249cyx0aGlzLl9kaXJ0eT0hMX1yZXR1cm4gdGhpcy5fdG90YWxEdXJhdGlvbn1yZXR1cm4gMCE9PXRoaXMudG90YWxEdXJhdGlvbigpJiYwIT09dCYmdGhpcy50aW1lU2NhbGUodGhpcy5fdG90YWxEdXJhdGlvbi90KSx0aGlzfSxmLnVzZXNGcmFtZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5fdGltZWxpbmU7ZS5fdGltZWxpbmU7KWU9ZS5fdGltZWxpbmU7cmV0dXJuIGU9PT10Ll9yb290RnJhbWVzVGltZWxpbmV9LGYucmF3VGltZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXVzZWQ/dGhpcy5fdG90YWxUaW1lOih0aGlzLl90aW1lbGluZS5yYXdUaW1lKCktdGhpcy5fc3RhcnRUaW1lKSp0aGlzLl90aW1lU2NhbGV9LHN9LCEwKX0pLHdpbmRvdy5fZ3NEZWZpbmUmJndpbmRvdy5fZ3NRdWV1ZS5wb3AoKSgpOyIsIi8qIVxyXG4gKiBWRVJTSU9OOiAxLjEyLjFcclxuICogREFURTogMjAxNC0wNi0yNlxyXG4gKiBVUERBVEVTIEFORCBET0NTIEFUOiBodHRwOi8vd3d3LmdyZWVuc29jay5jb21cclxuICpcclxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDA4LTIwMTQsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogVGhpcyB3b3JrIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHA6Ly93d3cuZ3JlZW5zb2NrLmNvbS90ZXJtc19vZl91c2UuaHRtbCBvciBmb3JcclxuICogQ2x1YiBHcmVlblNvY2sgbWVtYmVycywgdGhlIHNvZnR3YXJlIGFncmVlbWVudCB0aGF0IHdhcyBpc3N1ZWQgd2l0aCB5b3VyIG1lbWJlcnNoaXAuXHJcbiAqIFxyXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cclxuICovXHJcbihmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT10LkdyZWVuU29ja0dsb2JhbHN8fHQ7aWYoIWUuVHdlZW5MaXRlKXt2YXIgaSxzLG4scixhLG89ZnVuY3Rpb24odCl7dmFyIGkscz10LnNwbGl0KFwiLlwiKSxuPWU7Zm9yKGk9MDtzLmxlbmd0aD5pO2krKyluW3NbaV1dPW49bltzW2ldXXx8e307cmV0dXJuIG59LGw9byhcImNvbS5ncmVlbnNvY2tcIiksaD0xZS0xMCxfPVtdLnNsaWNlLHU9ZnVuY3Rpb24oKXt9LG09ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGU9dC5jYWxsKFtdKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIG51bGwhPWkmJihpIGluc3RhbmNlb2YgQXJyYXl8fFwib2JqZWN0XCI9PXR5cGVvZiBpJiYhIWkucHVzaCYmdC5jYWxsKGkpPT09ZSl9fSgpLGY9e30scD1mdW5jdGlvbihpLHMsbixyKXt0aGlzLnNjPWZbaV0/ZltpXS5zYzpbXSxmW2ldPXRoaXMsdGhpcy5nc0NsYXNzPW51bGwsdGhpcy5mdW5jPW47dmFyIGE9W107dGhpcy5jaGVjaz1mdW5jdGlvbihsKXtmb3IodmFyIGgsXyx1LG0sYz1zLmxlbmd0aCxkPWM7LS1jPi0xOykoaD1mW3NbY11dfHxuZXcgcChzW2NdLFtdKSkuZ3NDbGFzcz8oYVtjXT1oLmdzQ2xhc3MsZC0tKTpsJiZoLnNjLnB1c2godGhpcyk7aWYoMD09PWQmJm4pZm9yKF89KFwiY29tLmdyZWVuc29jay5cIitpKS5zcGxpdChcIi5cIiksdT1fLnBvcCgpLG09byhfLmpvaW4oXCIuXCIpKVt1XT10aGlzLmdzQ2xhc3M9bi5hcHBseShuLGEpLHImJihlW3VdPW0sXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgodC5HcmVlblNvY2tBTURQYXRoP3QuR3JlZW5Tb2NrQU1EUGF0aCtcIi9cIjpcIlwiKStpLnNwbGl0KFwiLlwiKS5qb2luKFwiL1wiKSxbXSxmdW5jdGlvbigpe3JldHVybiBtfSk6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1tKSksYz0wO3RoaXMuc2MubGVuZ3RoPmM7YysrKXRoaXMuc2NbY10uY2hlY2soKX0sdGhpcy5jaGVjayghMCl9LGM9dC5fZ3NEZWZpbmU9ZnVuY3Rpb24odCxlLGkscyl7cmV0dXJuIG5ldyBwKHQsZSxpLHMpfSxkPWwuX2NsYXNzPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZT1lfHxmdW5jdGlvbigpe30sYyh0LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGV9LGkpLGV9O2MuZ2xvYmFscz1lO3ZhciB2PVswLDAsMSwxXSxnPVtdLFQ9ZChcImVhc2luZy5FYXNlXCIsZnVuY3Rpb24odCxlLGkscyl7dGhpcy5fZnVuYz10LHRoaXMuX3R5cGU9aXx8MCx0aGlzLl9wb3dlcj1zfHwwLHRoaXMuX3BhcmFtcz1lP3YuY29uY2F0KGUpOnZ9LCEwKSx5PVQubWFwPXt9LHc9VC5yZWdpc3Rlcj1mdW5jdGlvbih0LGUsaSxzKXtmb3IodmFyIG4scixhLG8saD1lLnNwbGl0KFwiLFwiKSxfPWgubGVuZ3RoLHU9KGl8fFwiZWFzZUluLGVhc2VPdXQsZWFzZUluT3V0XCIpLnNwbGl0KFwiLFwiKTstLV8+LTE7KWZvcihyPWhbX10sbj1zP2QoXCJlYXNpbmcuXCIrcixudWxsLCEwKTpsLmVhc2luZ1tyXXx8e30sYT11Lmxlbmd0aDstLWE+LTE7KW89dVthXSx5W3IrXCIuXCIrb109eVtvK3JdPW5bb109dC5nZXRSYXRpbz90OnRbb118fG5ldyB0fTtmb3Iobj1ULnByb3RvdHlwZSxuLl9jYWxjRW5kPSExLG4uZ2V0UmF0aW89ZnVuY3Rpb24odCl7aWYodGhpcy5fZnVuYylyZXR1cm4gdGhpcy5fcGFyYW1zWzBdPXQsdGhpcy5fZnVuYy5hcHBseShudWxsLHRoaXMuX3BhcmFtcyk7dmFyIGU9dGhpcy5fdHlwZSxpPXRoaXMuX3Bvd2VyLHM9MT09PWU/MS10OjI9PT1lP3Q6LjU+dD8yKnQ6MiooMS10KTtyZXR1cm4gMT09PWk/cyo9czoyPT09aT9zKj1zKnM6Mz09PWk/cyo9cypzKnM6ND09PWkmJihzKj1zKnMqcypzKSwxPT09ZT8xLXM6Mj09PWU/czouNT50P3MvMjoxLXMvMn0saT1bXCJMaW5lYXJcIixcIlF1YWRcIixcIkN1YmljXCIsXCJRdWFydFwiLFwiUXVpbnQsU3Ryb25nXCJdLHM9aS5sZW5ndGg7LS1zPi0xOyluPWlbc10rXCIsUG93ZXJcIitzLHcobmV3IFQobnVsbCxudWxsLDEscyksbixcImVhc2VPdXRcIiwhMCksdyhuZXcgVChudWxsLG51bGwsMixzKSxuLFwiZWFzZUluXCIrKDA9PT1zP1wiLGVhc2VOb25lXCI6XCJcIikpLHcobmV3IFQobnVsbCxudWxsLDMscyksbixcImVhc2VJbk91dFwiKTt5LmxpbmVhcj1sLmVhc2luZy5MaW5lYXIuZWFzZUluLHkuc3dpbmc9bC5lYXNpbmcuUXVhZC5lYXNlSW5PdXQ7dmFyIFA9ZChcImV2ZW50cy5FdmVudERpc3BhdGNoZXJcIixmdW5jdGlvbih0KXt0aGlzLl9saXN0ZW5lcnM9e30sdGhpcy5fZXZlbnRUYXJnZXQ9dHx8dGhpc30pO249UC5wcm90b3R5cGUsbi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxpLHMsbil7bj1ufHwwO3ZhciBvLGwsaD10aGlzLl9saXN0ZW5lcnNbdF0sXz0wO2ZvcihudWxsPT1oJiYodGhpcy5fbGlzdGVuZXJzW3RdPWg9W10pLGw9aC5sZW5ndGg7LS1sPi0xOylvPWhbbF0sby5jPT09ZSYmby5zPT09aT9oLnNwbGljZShsLDEpOjA9PT1fJiZuPm8ucHImJihfPWwrMSk7aC5zcGxpY2UoXywwLHtjOmUsczppLHVwOnMscHI6bn0pLHRoaXMhPT1yfHxhfHxyLndha2UoKX0sbi5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIGkscz10aGlzLl9saXN0ZW5lcnNbdF07aWYocylmb3IoaT1zLmxlbmd0aDstLWk+LTE7KWlmKHNbaV0uYz09PWUpcmV0dXJuIHMuc3BsaWNlKGksMSksdm9pZCAwfSxuLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGUsaSxzLG49dGhpcy5fbGlzdGVuZXJzW3RdO2lmKG4pZm9yKGU9bi5sZW5ndGgsaT10aGlzLl9ldmVudFRhcmdldDstLWU+LTE7KXM9bltlXSxzLnVwP3MuYy5jYWxsKHMuc3x8aSx7dHlwZTp0LHRhcmdldDppfSk6cy5jLmNhbGwocy5zfHxpKX07dmFyIGs9dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYj10LmNhbmNlbEFuaW1hdGlvbkZyYW1lLEE9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LFM9QSgpO2ZvcihpPVtcIm1zXCIsXCJtb3pcIixcIndlYmtpdFwiLFwib1wiXSxzPWkubGVuZ3RoOy0tcz4tMSYmIWs7KWs9dFtpW3NdK1wiUmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJdLGI9dFtpW3NdK1wiQ2FuY2VsQW5pbWF0aW9uRnJhbWVcIl18fHRbaVtzXStcIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZVwiXTtkKFwiVGlja2VyXCIsZnVuY3Rpb24odCxlKXt2YXIgaSxzLG4sbyxsLF89dGhpcyxtPUEoKSxmPWUhPT0hMSYmayxwPTUwMCxjPTMzLGQ9ZnVuY3Rpb24odCl7dmFyIGUscixhPUEoKS1TO2E+cCYmKG0rPWEtYyksUys9YSxfLnRpbWU9KFMtbSkvMWUzLGU9Xy50aW1lLWwsKCFpfHxlPjB8fHQ9PT0hMCkmJihfLmZyYW1lKyssbCs9ZSsoZT49bz8uMDA0Om8tZSkscj0hMCksdCE9PSEwJiYobj1zKGQpKSxyJiZfLmRpc3BhdGNoRXZlbnQoXCJ0aWNrXCIpfTtQLmNhbGwoXyksXy50aW1lPV8uZnJhbWU9MCxfLnRpY2s9ZnVuY3Rpb24oKXtkKCEwKX0sXy5sYWdTbW9vdGhpbmc9ZnVuY3Rpb24odCxlKXtwPXR8fDEvaCxjPU1hdGgubWluKGUscCwwKX0sXy5zbGVlcD1mdW5jdGlvbigpe251bGwhPW4mJihmJiZiP2Iobik6Y2xlYXJUaW1lb3V0KG4pLHM9dSxuPW51bGwsXz09PXImJihhPSExKSl9LF8ud2FrZT1mdW5jdGlvbigpe251bGwhPT1uP18uc2xlZXAoKTpfLmZyYW1lPjEwJiYoUz1BKCktcCs1KSxzPTA9PT1pP3U6ZiYmaz9rOmZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsMHwxZTMqKGwtXy50aW1lKSsxKX0sXz09PXImJihhPSEwKSxkKDIpfSxfLmZwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG89MS8oaXx8NjApLGw9dGhpcy50aW1lK28sXy53YWtlKCksdm9pZCAwKTppfSxfLnVzZVJBRj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXy5zbGVlcCgpLGY9dCxfLmZwcyhpKSx2b2lkIDApOmZ9LF8uZnBzKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtmJiYoIW58fDU+Xy5mcmFtZSkmJl8udXNlUkFGKCExKX0sMTUwMCl9KSxuPWwuVGlja2VyLnByb3RvdHlwZT1uZXcgbC5ldmVudHMuRXZlbnREaXNwYXRjaGVyLG4uY29uc3RydWN0b3I9bC5UaWNrZXI7dmFyIHg9ZChcImNvcmUuQW5pbWF0aW9uXCIsZnVuY3Rpb24odCxlKXtpZih0aGlzLnZhcnM9ZT1lfHx7fSx0aGlzLl9kdXJhdGlvbj10aGlzLl90b3RhbER1cmF0aW9uPXR8fDAsdGhpcy5fZGVsYXk9TnVtYmVyKGUuZGVsYXkpfHwwLHRoaXMuX3RpbWVTY2FsZT0xLHRoaXMuX2FjdGl2ZT1lLmltbWVkaWF0ZVJlbmRlcj09PSEwLHRoaXMuZGF0YT1lLmRhdGEsdGhpcy5fcmV2ZXJzZWQ9ZS5yZXZlcnNlZD09PSEwLEIpe2F8fHIud2FrZSgpO3ZhciBpPXRoaXMudmFycy51c2VGcmFtZXM/UTpCO2kuYWRkKHRoaXMsaS5fdGltZSksdGhpcy52YXJzLnBhdXNlZCYmdGhpcy5wYXVzZWQoITApfX0pO3I9eC50aWNrZXI9bmV3IGwuVGlja2VyLG49eC5wcm90b3R5cGUsbi5fZGlydHk9bi5fZ2M9bi5faW5pdHRlZD1uLl9wYXVzZWQ9ITEsbi5fdG90YWxUaW1lPW4uX3RpbWU9MCxuLl9yYXdQcmV2VGltZT0tMSxuLl9uZXh0PW4uX2xhc3Q9bi5fb25VcGRhdGU9bi5fdGltZWxpbmU9bi50aW1lbGluZT1udWxsLG4uX3BhdXNlZD0hMTt2YXIgQz1mdW5jdGlvbigpe2EmJkEoKS1TPjJlMyYmci53YWtlKCksc2V0VGltZW91dChDLDJlMyl9O0MoKSxuLnBsYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmdGhpcy5zZWVrKHQsZSksdGhpcy5yZXZlcnNlZCghMSkucGF1c2VkKCExKX0sbi5wYXVzZT1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZ0aGlzLnNlZWsodCxlKSx0aGlzLnBhdXNlZCghMCl9LG4ucmVzdW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJnRoaXMuc2Vlayh0LGUpLHRoaXMucGF1c2VkKCExKX0sbi5zZWVrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG90YWxUaW1lKE51bWJlcih0KSxlIT09ITEpfSxuLnJlc3RhcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXZlcnNlZCghMSkucGF1c2VkKCExKS50b3RhbFRpbWUodD8tdGhpcy5fZGVsYXk6MCxlIT09ITEsITApfSxuLnJldmVyc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmdGhpcy5zZWVrKHR8fHRoaXMudG90YWxEdXJhdGlvbigpLGUpLHRoaXMucmV2ZXJzZWQoITApLnBhdXNlZCghMSl9LG4ucmVuZGVyPWZ1bmN0aW9uKCl7fSxuLmludmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbi5pc0FjdGl2ZT1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fdGltZWxpbmUsaT10aGlzLl9zdGFydFRpbWU7cmV0dXJuIWV8fCF0aGlzLl9nYyYmIXRoaXMuX3BhdXNlZCYmZS5pc0FjdGl2ZSgpJiYodD1lLnJhd1RpbWUoKSk+PWkmJmkrdGhpcy50b3RhbER1cmF0aW9uKCkvdGhpcy5fdGltZVNjYWxlPnR9LG4uX2VuYWJsZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXx8ci53YWtlKCksdGhpcy5fZ2M9IXQsdGhpcy5fYWN0aXZlPXRoaXMuaXNBY3RpdmUoKSxlIT09ITAmJih0JiYhdGhpcy50aW1lbGluZT90aGlzLl90aW1lbGluZS5hZGQodGhpcyx0aGlzLl9zdGFydFRpbWUtdGhpcy5fZGVsYXkpOiF0JiZ0aGlzLnRpbWVsaW5lJiZ0aGlzLl90aW1lbGluZS5fcmVtb3ZlKHRoaXMsITApKSwhMX0sbi5fa2lsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkKCExLCExKX0sbi5raWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2tpbGwodCxlKSx0aGlzfSxuLl91bmNhY2hlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10P3RoaXM6dGhpcy50aW1lbGluZTtlOyllLl9kaXJ0eT0hMCxlPWUudGltZWxpbmU7cmV0dXJuIHRoaXN9LG4uX3N3YXBTZWxmSW5QYXJhbXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLGk9dC5jb25jYXQoKTstLWU+LTE7KVwie3NlbGZ9XCI9PT10W2VdJiYoaVtlXT10aGlzKTtyZXR1cm4gaX0sbi5ldmVudENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxpLHMpe2lmKFwib25cIj09PSh0fHxcIlwiKS5zdWJzdHIoMCwyKSl7dmFyIG49dGhpcy52YXJzO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBuW3RdO251bGw9PWU/ZGVsZXRlIG5bdF06KG5bdF09ZSxuW3QrXCJQYXJhbXNcIl09bShpKSYmLTEhPT1pLmpvaW4oXCJcIikuaW5kZXhPZihcIntzZWxmfVwiKT90aGlzLl9zd2FwU2VsZkluUGFyYW1zKGkpOmksblt0K1wiU2NvcGVcIl09cyksXCJvblVwZGF0ZVwiPT09dCYmKHRoaXMuX29uVXBkYXRlPWUpfXJldHVybiB0aGlzfSxuLmRlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl90aW1lbGluZS5zbW9vdGhDaGlsZFRpbWluZyYmdGhpcy5zdGFydFRpbWUodGhpcy5fc3RhcnRUaW1lK3QtdGhpcy5fZGVsYXkpLHRoaXMuX2RlbGF5PXQsdGhpcyk6dGhpcy5fZGVsYXl9LG4uZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2R1cmF0aW9uPXRoaXMuX3RvdGFsRHVyYXRpb249dCx0aGlzLl91bmNhY2hlKCEwKSx0aGlzLl90aW1lbGluZS5zbW9vdGhDaGlsZFRpbWluZyYmdGhpcy5fdGltZT4wJiZ0aGlzLl90aW1lPHRoaXMuX2R1cmF0aW9uJiYwIT09dCYmdGhpcy50b3RhbFRpbWUodGhpcy5fdG90YWxUaW1lKih0L3RoaXMuX2R1cmF0aW9uKSwhMCksdGhpcyk6KHRoaXMuX2RpcnR5PSExLHRoaXMuX2R1cmF0aW9uKX0sbi50b3RhbER1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXJ0eT0hMSxhcmd1bWVudHMubGVuZ3RoP3RoaXMuZHVyYXRpb24odCk6dGhpcy5fdG90YWxEdXJhdGlvbn0sbi50aW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2RpcnR5JiZ0aGlzLnRvdGFsRHVyYXRpb24oKSx0aGlzLnRvdGFsVGltZSh0PnRoaXMuX2R1cmF0aW9uP3RoaXMuX2R1cmF0aW9uOnQsZSkpOnRoaXMuX3RpbWV9LG4udG90YWxUaW1lPWZ1bmN0aW9uKHQsZSxpKXtpZihhfHxyLndha2UoKSwhYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdG90YWxUaW1lO2lmKHRoaXMuX3RpbWVsaW5lKXtpZigwPnQmJiFpJiYodCs9dGhpcy50b3RhbER1cmF0aW9uKCkpLHRoaXMuX3RpbWVsaW5lLnNtb290aENoaWxkVGltaW5nKXt0aGlzLl9kaXJ0eSYmdGhpcy50b3RhbER1cmF0aW9uKCk7dmFyIHM9dGhpcy5fdG90YWxEdXJhdGlvbixuPXRoaXMuX3RpbWVsaW5lO2lmKHQ+cyYmIWkmJih0PXMpLHRoaXMuX3N0YXJ0VGltZT0odGhpcy5fcGF1c2VkP3RoaXMuX3BhdXNlVGltZTpuLl90aW1lKS0odGhpcy5fcmV2ZXJzZWQ/cy10OnQpL3RoaXMuX3RpbWVTY2FsZSxuLl9kaXJ0eXx8dGhpcy5fdW5jYWNoZSghMSksbi5fdGltZWxpbmUpZm9yKDtuLl90aW1lbGluZTspbi5fdGltZWxpbmUuX3RpbWUhPT0obi5fc3RhcnRUaW1lK24uX3RvdGFsVGltZSkvbi5fdGltZVNjYWxlJiZuLnRvdGFsVGltZShuLl90b3RhbFRpbWUsITApLG49bi5fdGltZWxpbmV9dGhpcy5fZ2MmJnRoaXMuX2VuYWJsZWQoITAsITEpLCh0aGlzLl90b3RhbFRpbWUhPT10fHwwPT09dGhpcy5fZHVyYXRpb24pJiYodGhpcy5yZW5kZXIodCxlLCExKSx6Lmxlbmd0aCYmcSgpKX1yZXR1cm4gdGhpc30sbi5wcm9ncmVzcz1uLnRvdGFsUHJvZ3Jlc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnRvdGFsVGltZSh0aGlzLmR1cmF0aW9uKCkqdCxlKTp0aGlzLl90aW1lL3RoaXMuZHVyYXRpb24oKX0sbi5zdGFydFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQhPT10aGlzLl9zdGFydFRpbWUmJih0aGlzLl9zdGFydFRpbWU9dCx0aGlzLnRpbWVsaW5lJiZ0aGlzLnRpbWVsaW5lLl9zb3J0Q2hpbGRyZW4mJnRoaXMudGltZWxpbmUuYWRkKHRoaXMsdC10aGlzLl9kZWxheSkpLHRoaXMpOnRoaXMuX3N0YXJ0VGltZX0sbi50aW1lU2NhbGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3RpbWVTY2FsZTtpZih0PXR8fGgsdGhpcy5fdGltZWxpbmUmJnRoaXMuX3RpbWVsaW5lLnNtb290aENoaWxkVGltaW5nKXt2YXIgZT10aGlzLl9wYXVzZVRpbWUsaT1lfHwwPT09ZT9lOnRoaXMuX3RpbWVsaW5lLnRvdGFsVGltZSgpO3RoaXMuX3N0YXJ0VGltZT1pLShpLXRoaXMuX3N0YXJ0VGltZSkqdGhpcy5fdGltZVNjYWxlL3R9cmV0dXJuIHRoaXMuX3RpbWVTY2FsZT10LHRoaXMuX3VuY2FjaGUoITEpfSxuLnJldmVyc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0IT10aGlzLl9yZXZlcnNlZCYmKHRoaXMuX3JldmVyc2VkPXQsdGhpcy50b3RhbFRpbWUodGhpcy5fdGltZWxpbmUmJiF0aGlzLl90aW1lbGluZS5zbW9vdGhDaGlsZFRpbWluZz90aGlzLnRvdGFsRHVyYXRpb24oKS10aGlzLl90b3RhbFRpbWU6dGhpcy5fdG90YWxUaW1lLCEwKSksdGhpcyk6dGhpcy5fcmV2ZXJzZWR9LG4ucGF1c2VkPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9wYXVzZWQ7aWYodCE9dGhpcy5fcGF1c2VkJiZ0aGlzLl90aW1lbGluZSl7YXx8dHx8ci53YWtlKCk7dmFyIGU9dGhpcy5fdGltZWxpbmUsaT1lLnJhd1RpbWUoKSxzPWktdGhpcy5fcGF1c2VUaW1lOyF0JiZlLnNtb290aENoaWxkVGltaW5nJiYodGhpcy5fc3RhcnRUaW1lKz1zLHRoaXMuX3VuY2FjaGUoITEpKSx0aGlzLl9wYXVzZVRpbWU9dD9pOm51bGwsdGhpcy5fcGF1c2VkPXQsdGhpcy5fYWN0aXZlPXRoaXMuaXNBY3RpdmUoKSwhdCYmMCE9PXMmJnRoaXMuX2luaXR0ZWQmJnRoaXMuZHVyYXRpb24oKSYmdGhpcy5yZW5kZXIoZS5zbW9vdGhDaGlsZFRpbWluZz90aGlzLl90b3RhbFRpbWU6KGktdGhpcy5fc3RhcnRUaW1lKS90aGlzLl90aW1lU2NhbGUsITAsITApfXJldHVybiB0aGlzLl9nYyYmIXQmJnRoaXMuX2VuYWJsZWQoITAsITEpLHRoaXN9O3ZhciBSPWQoXCJjb3JlLlNpbXBsZVRpbWVsaW5lXCIsZnVuY3Rpb24odCl7eC5jYWxsKHRoaXMsMCx0KSx0aGlzLmF1dG9SZW1vdmVDaGlsZHJlbj10aGlzLnNtb290aENoaWxkVGltaW5nPSEwfSk7bj1SLnByb3RvdHlwZT1uZXcgeCxuLmNvbnN0cnVjdG9yPVIsbi5raWxsKCkuX2djPSExLG4uX2ZpcnN0PW4uX2xhc3Q9bnVsbCxuLl9zb3J0Q2hpbGRyZW49ITEsbi5hZGQ9bi5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgaSxzO2lmKHQuX3N0YXJ0VGltZT1OdW1iZXIoZXx8MCkrdC5fZGVsYXksdC5fcGF1c2VkJiZ0aGlzIT09dC5fdGltZWxpbmUmJih0Ll9wYXVzZVRpbWU9dC5fc3RhcnRUaW1lKyh0aGlzLnJhd1RpbWUoKS10Ll9zdGFydFRpbWUpL3QuX3RpbWVTY2FsZSksdC50aW1lbGluZSYmdC50aW1lbGluZS5fcmVtb3ZlKHQsITApLHQudGltZWxpbmU9dC5fdGltZWxpbmU9dGhpcyx0Ll9nYyYmdC5fZW5hYmxlZCghMCwhMCksaT10aGlzLl9sYXN0LHRoaXMuX3NvcnRDaGlsZHJlbilmb3Iocz10Ll9zdGFydFRpbWU7aSYmaS5fc3RhcnRUaW1lPnM7KWk9aS5fcHJldjtyZXR1cm4gaT8odC5fbmV4dD1pLl9uZXh0LGkuX25leHQ9dCk6KHQuX25leHQ9dGhpcy5fZmlyc3QsdGhpcy5fZmlyc3Q9dCksdC5fbmV4dD90Ll9uZXh0Ll9wcmV2PXQ6dGhpcy5fbGFzdD10LHQuX3ByZXY9aSx0aGlzLl90aW1lbGluZSYmdGhpcy5fdW5jYWNoZSghMCksdGhpc30sbi5fcmVtb3ZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudGltZWxpbmU9PT10aGlzJiYoZXx8dC5fZW5hYmxlZCghMSwhMCksdC50aW1lbGluZT1udWxsLHQuX3ByZXY/dC5fcHJldi5fbmV4dD10Ll9uZXh0OnRoaXMuX2ZpcnN0PT09dCYmKHRoaXMuX2ZpcnN0PXQuX25leHQpLHQuX25leHQ/dC5fbmV4dC5fcHJldj10Ll9wcmV2OnRoaXMuX2xhc3Q9PT10JiYodGhpcy5fbGFzdD10Ll9wcmV2KSx0aGlzLl90aW1lbGluZSYmdGhpcy5fdW5jYWNoZSghMCkpLHRoaXN9LG4ucmVuZGVyPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcyxuPXRoaXMuX2ZpcnN0O2Zvcih0aGlzLl90b3RhbFRpbWU9dGhpcy5fdGltZT10aGlzLl9yYXdQcmV2VGltZT10O247KXM9bi5fbmV4dCwobi5fYWN0aXZlfHx0Pj1uLl9zdGFydFRpbWUmJiFuLl9wYXVzZWQpJiYobi5fcmV2ZXJzZWQ/bi5yZW5kZXIoKG4uX2RpcnR5P24udG90YWxEdXJhdGlvbigpOm4uX3RvdGFsRHVyYXRpb24pLSh0LW4uX3N0YXJ0VGltZSkqbi5fdGltZVNjYWxlLGUsaSk6bi5yZW5kZXIoKHQtbi5fc3RhcnRUaW1lKSpuLl90aW1lU2NhbGUsZSxpKSksbj1zfSxuLnJhd1RpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gYXx8ci53YWtlKCksdGhpcy5fdG90YWxUaW1lfTt2YXIgRD1kKFwiVHdlZW5MaXRlXCIsZnVuY3Rpb24oZSxpLHMpe2lmKHguY2FsbCh0aGlzLGkscyksdGhpcy5yZW5kZXI9RC5wcm90b3R5cGUucmVuZGVyLG51bGw9PWUpdGhyb3dcIkNhbm5vdCB0d2VlbiBhIG51bGwgdGFyZ2V0LlwiO3RoaXMudGFyZ2V0PWU9XCJzdHJpbmdcIiE9dHlwZW9mIGU/ZTpELnNlbGVjdG9yKGUpfHxlO3ZhciBuLHIsYSxvPWUuanF1ZXJ5fHxlLmxlbmd0aCYmZSE9PXQmJmVbMF0mJihlWzBdPT09dHx8ZVswXS5ub2RlVHlwZSYmZVswXS5zdHlsZSYmIWUubm9kZVR5cGUpLGw9dGhpcy52YXJzLm92ZXJ3cml0ZTtpZih0aGlzLl9vdmVyd3JpdGU9bD1udWxsPT1sP0dbRC5kZWZhdWx0T3ZlcndyaXRlXTpcIm51bWJlclwiPT10eXBlb2YgbD9sPj4wOkdbbF0sKG98fGUgaW5zdGFuY2VvZiBBcnJheXx8ZS5wdXNoJiZtKGUpKSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF0pZm9yKHRoaXMuX3RhcmdldHM9YT1fLmNhbGwoZSwwKSx0aGlzLl9wcm9wTG9va3VwPVtdLHRoaXMuX3NpYmxpbmdzPVtdLG49MDthLmxlbmd0aD5uO24rKylyPWFbbl0scj9cInN0cmluZ1wiIT10eXBlb2Ygcj9yLmxlbmd0aCYmciE9PXQmJnJbMF0mJihyWzBdPT09dHx8clswXS5ub2RlVHlwZSYmclswXS5zdHlsZSYmIXIubm9kZVR5cGUpPyhhLnNwbGljZShuLS0sMSksdGhpcy5fdGFyZ2V0cz1hPWEuY29uY2F0KF8uY2FsbChyLDApKSk6KHRoaXMuX3NpYmxpbmdzW25dPU0ocix0aGlzLCExKSwxPT09bCYmdGhpcy5fc2libGluZ3Nbbl0ubGVuZ3RoPjEmJiQocix0aGlzLG51bGwsMSx0aGlzLl9zaWJsaW5nc1tuXSkpOihyPWFbbi0tXT1ELnNlbGVjdG9yKHIpLFwic3RyaW5nXCI9PXR5cGVvZiByJiZhLnNwbGljZShuKzEsMSkpOmEuc3BsaWNlKG4tLSwxKTtlbHNlIHRoaXMuX3Byb3BMb29rdXA9e30sdGhpcy5fc2libGluZ3M9TShlLHRoaXMsITEpLDE9PT1sJiZ0aGlzLl9zaWJsaW5ncy5sZW5ndGg+MSYmJChlLHRoaXMsbnVsbCwxLHRoaXMuX3NpYmxpbmdzKTsodGhpcy52YXJzLmltbWVkaWF0ZVJlbmRlcnx8MD09PWkmJjA9PT10aGlzLl9kZWxheSYmdGhpcy52YXJzLmltbWVkaWF0ZVJlbmRlciE9PSExKSYmKHRoaXMuX3RpbWU9LWgsdGhpcy5yZW5kZXIoLXRoaXMuX2RlbGF5KSl9LCEwKSxJPWZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aCYmZSE9PXQmJmVbMF0mJihlWzBdPT09dHx8ZVswXS5ub2RlVHlwZSYmZVswXS5zdHlsZSYmIWUubm9kZVR5cGUpfSxFPWZ1bmN0aW9uKHQsZSl7dmFyIGkscz17fTtmb3IoaSBpbiB0KWpbaV18fGkgaW4gZSYmXCJ0cmFuc2Zvcm1cIiE9PWkmJlwieFwiIT09aSYmXCJ5XCIhPT1pJiZcIndpZHRoXCIhPT1pJiZcImhlaWdodFwiIT09aSYmXCJjbGFzc05hbWVcIiE9PWkmJlwiYm9yZGVyXCIhPT1pfHwhKCFMW2ldfHxMW2ldJiZMW2ldLl9hdXRvQ1NTKXx8KHNbaV09dFtpXSxkZWxldGUgdFtpXSk7dC5jc3M9c307bj1ELnByb3RvdHlwZT1uZXcgeCxuLmNvbnN0cnVjdG9yPUQsbi5raWxsKCkuX2djPSExLG4ucmF0aW89MCxuLl9maXJzdFBUPW4uX3RhcmdldHM9bi5fb3ZlcndyaXR0ZW5Qcm9wcz1uLl9zdGFydEF0PW51bGwsbi5fbm90aWZ5UGx1Z2luc09mRW5hYmxlZD1uLl9sYXp5PSExLEQudmVyc2lvbj1cIjEuMTIuMVwiLEQuZGVmYXVsdEVhc2U9bi5fZWFzZT1uZXcgVChudWxsLG51bGwsMSwxKSxELmRlZmF1bHRPdmVyd3JpdGU9XCJhdXRvXCIsRC50aWNrZXI9cixELmF1dG9TbGVlcD0hMCxELmxhZ1Ntb290aGluZz1mdW5jdGlvbih0LGUpe3IubGFnU21vb3RoaW5nKHQsZSl9LEQuc2VsZWN0b3I9dC4kfHx0LmpRdWVyeXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQuJD8oRC5zZWxlY3Rvcj10LiQsdC4kKGUpKTp0LmRvY3VtZW50P3QuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjXCI9PT1lLmNoYXJBdCgwKT9lLnN1YnN0cigxKTplKTplfTt2YXIgej1bXSxPPXt9LE49RC5faW50ZXJuYWxzPXtpc0FycmF5Om0saXNTZWxlY3RvcjpJLGxhenlUd2VlbnM6en0sTD1ELl9wbHVnaW5zPXt9LFU9Ti50d2Vlbkxvb2t1cD17fSxGPTAsaj1OLnJlc2VydmVkUHJvcHM9e2Vhc2U6MSxkZWxheToxLG92ZXJ3cml0ZToxLG9uQ29tcGxldGU6MSxvbkNvbXBsZXRlUGFyYW1zOjEsb25Db21wbGV0ZVNjb3BlOjEsdXNlRnJhbWVzOjEscnVuQmFja3dhcmRzOjEsc3RhcnRBdDoxLG9uVXBkYXRlOjEsb25VcGRhdGVQYXJhbXM6MSxvblVwZGF0ZVNjb3BlOjEsb25TdGFydDoxLG9uU3RhcnRQYXJhbXM6MSxvblN0YXJ0U2NvcGU6MSxvblJldmVyc2VDb21wbGV0ZToxLG9uUmV2ZXJzZUNvbXBsZXRlUGFyYW1zOjEsb25SZXZlcnNlQ29tcGxldGVTY29wZToxLG9uUmVwZWF0OjEsb25SZXBlYXRQYXJhbXM6MSxvblJlcGVhdFNjb3BlOjEsZWFzZVBhcmFtczoxLHlveW86MSxpbW1lZGlhdGVSZW5kZXI6MSxyZXBlYXQ6MSxyZXBlYXREZWxheToxLGRhdGE6MSxwYXVzZWQ6MSxyZXZlcnNlZDoxLGF1dG9DU1M6MSxsYXp5OjF9LEc9e25vbmU6MCxhbGw6MSxhdXRvOjIsY29uY3VycmVudDozLGFsbE9uU3RhcnQ6NCxwcmVleGlzdGluZzo1LFwidHJ1ZVwiOjEsXCJmYWxzZVwiOjB9LFE9eC5fcm9vdEZyYW1lc1RpbWVsaW5lPW5ldyBSLEI9eC5fcm9vdFRpbWVsaW5lPW5ldyBSLHE9ZnVuY3Rpb24oKXt2YXIgdD16Lmxlbmd0aDtmb3IoTz17fTstLXQ+LTE7KWk9elt0XSxpJiZpLl9sYXp5IT09ITEmJihpLnJlbmRlcihpLl9sYXp5LCExLCEwKSxpLl9sYXp5PSExKTt6Lmxlbmd0aD0wfTtCLl9zdGFydFRpbWU9ci50aW1lLFEuX3N0YXJ0VGltZT1yLmZyYW1lLEIuX2FjdGl2ZT1RLl9hY3RpdmU9ITAsc2V0VGltZW91dChxLDEpLHguX3VwZGF0ZVJvb3Q9RC5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdCxlLGk7aWYoei5sZW5ndGgmJnEoKSxCLnJlbmRlcigoci50aW1lLUIuX3N0YXJ0VGltZSkqQi5fdGltZVNjYWxlLCExLCExKSxRLnJlbmRlcigoci5mcmFtZS1RLl9zdGFydFRpbWUpKlEuX3RpbWVTY2FsZSwhMSwhMSksei5sZW5ndGgmJnEoKSwhKHIuZnJhbWUlMTIwKSl7Zm9yKGkgaW4gVSl7Zm9yKGU9VVtpXS50d2VlbnMsdD1lLmxlbmd0aDstLXQ+LTE7KWVbdF0uX2djJiZlLnNwbGljZSh0LDEpOzA9PT1lLmxlbmd0aCYmZGVsZXRlIFVbaV19aWYoaT1CLl9maXJzdCwoIWl8fGkuX3BhdXNlZCkmJkQuYXV0b1NsZWVwJiYhUS5fZmlyc3QmJjE9PT1yLl9saXN0ZW5lcnMudGljay5sZW5ndGgpe2Zvcig7aSYmaS5fcGF1c2VkOylpPWkuX25leHQ7aXx8ci5zbGVlcCgpfX19LHIuYWRkRXZlbnRMaXN0ZW5lcihcInRpY2tcIix4Ll91cGRhdGVSb290KTt2YXIgTT1mdW5jdGlvbih0LGUsaSl7dmFyIHMsbixyPXQuX2dzVHdlZW5JRDtpZihVW3J8fCh0Ll9nc1R3ZWVuSUQ9cj1cInRcIitGKyspXXx8KFVbcl09e3RhcmdldDp0LHR3ZWVuczpbXX0pLGUmJihzPVVbcl0udHdlZW5zLHNbbj1zLmxlbmd0aF09ZSxpKSlmb3IoOy0tbj4tMTspc1tuXT09PWUmJnMuc3BsaWNlKG4sMSk7cmV0dXJuIFVbcl0udHdlZW5zfSwkPWZ1bmN0aW9uKHQsZSxpLHMsbil7dmFyIHIsYSxvLGw7aWYoMT09PXN8fHM+PTQpe2ZvcihsPW4ubGVuZ3RoLHI9MDtsPnI7cisrKWlmKChvPW5bcl0pIT09ZSlvLl9nY3x8by5fZW5hYmxlZCghMSwhMSkmJihhPSEwKTtlbHNlIGlmKDU9PT1zKWJyZWFrO3JldHVybiBhfXZhciBfLHU9ZS5fc3RhcnRUaW1lK2gsbT1bXSxmPTAscD0wPT09ZS5fZHVyYXRpb247Zm9yKHI9bi5sZW5ndGg7LS1yPi0xOykobz1uW3JdKT09PWV8fG8uX2djfHxvLl9wYXVzZWR8fChvLl90aW1lbGluZSE9PWUuX3RpbWVsaW5lPyhfPV98fEsoZSwwLHApLDA9PT1LKG8sXyxwKSYmKG1bZisrXT1vKSk6dT49by5fc3RhcnRUaW1lJiZvLl9zdGFydFRpbWUrby50b3RhbER1cmF0aW9uKCkvby5fdGltZVNjYWxlPnUmJigocHx8IW8uX2luaXR0ZWQpJiYyZS0xMD49dS1vLl9zdGFydFRpbWV8fChtW2YrK109bykpKTtmb3Iocj1mOy0tcj4tMTspbz1tW3JdLDI9PT1zJiZvLl9raWxsKGksdCkmJihhPSEwKSwoMiE9PXN8fCFvLl9maXJzdFBUJiZvLl9pbml0dGVkKSYmby5fZW5hYmxlZCghMSwhMSkmJihhPSEwKTtyZXR1cm4gYX0sSz1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBzPXQuX3RpbWVsaW5lLG49cy5fdGltZVNjYWxlLHI9dC5fc3RhcnRUaW1lO3MuX3RpbWVsaW5lOyl7aWYocis9cy5fc3RhcnRUaW1lLG4qPXMuX3RpbWVTY2FsZSxzLl9wYXVzZWQpcmV0dXJuLTEwMDtzPXMuX3RpbWVsaW5lfXJldHVybiByLz1uLHI+ZT9yLWU6aSYmcj09PWV8fCF0Ll9pbml0dGVkJiYyKmg+ci1lP2g6KHIrPXQudG90YWxEdXJhdGlvbigpL3QuX3RpbWVTY2FsZS9uKT5lK2g/MDpyLWUtaH07bi5faW5pdD1mdW5jdGlvbigpe3ZhciB0LGUsaSxzLG4scj10aGlzLnZhcnMsYT10aGlzLl9vdmVyd3JpdHRlblByb3BzLG89dGhpcy5fZHVyYXRpb24sbD0hIXIuaW1tZWRpYXRlUmVuZGVyLGg9ci5lYXNlO2lmKHIuc3RhcnRBdCl7dGhpcy5fc3RhcnRBdCYmKHRoaXMuX3N0YXJ0QXQucmVuZGVyKC0xLCEwKSx0aGlzLl9zdGFydEF0LmtpbGwoKSksbj17fTtmb3IocyBpbiByLnN0YXJ0QXQpbltzXT1yLnN0YXJ0QXRbc107aWYobi5vdmVyd3JpdGU9ITEsbi5pbW1lZGlhdGVSZW5kZXI9ITAsbi5sYXp5PWwmJnIubGF6eSE9PSExLG4uc3RhcnRBdD1uLmRlbGF5PW51bGwsdGhpcy5fc3RhcnRBdD1ELnRvKHRoaXMudGFyZ2V0LDAsbiksbClpZih0aGlzLl90aW1lPjApdGhpcy5fc3RhcnRBdD1udWxsO2Vsc2UgaWYoMCE9PW8pcmV0dXJufWVsc2UgaWYoci5ydW5CYWNrd2FyZHMmJjAhPT1vKWlmKHRoaXMuX3N0YXJ0QXQpdGhpcy5fc3RhcnRBdC5yZW5kZXIoLTEsITApLHRoaXMuX3N0YXJ0QXQua2lsbCgpLHRoaXMuX3N0YXJ0QXQ9bnVsbDtlbHNle2k9e307Zm9yKHMgaW4gcilqW3NdJiZcImF1dG9DU1NcIiE9PXN8fChpW3NdPXJbc10pO2lmKGkub3ZlcndyaXRlPTAsaS5kYXRhPVwiaXNGcm9tU3RhcnRcIixpLmxhenk9bCYmci5sYXp5IT09ITEsaS5pbW1lZGlhdGVSZW5kZXI9bCx0aGlzLl9zdGFydEF0PUQudG8odGhpcy50YXJnZXQsMCxpKSxsKXtpZigwPT09dGhpcy5fdGltZSlyZXR1cm59ZWxzZSB0aGlzLl9zdGFydEF0Ll9pbml0KCksdGhpcy5fc3RhcnRBdC5fZW5hYmxlZCghMSl9aWYodGhpcy5fZWFzZT1oP2ggaW5zdGFuY2VvZiBUP3IuZWFzZVBhcmFtcyBpbnN0YW5jZW9mIEFycmF5P2guY29uZmlnLmFwcGx5KGgsci5lYXNlUGFyYW1zKTpoOlwiZnVuY3Rpb25cIj09dHlwZW9mIGg/bmV3IFQoaCxyLmVhc2VQYXJhbXMpOnlbaF18fEQuZGVmYXVsdEVhc2U6RC5kZWZhdWx0RWFzZSx0aGlzLl9lYXNlVHlwZT10aGlzLl9lYXNlLl90eXBlLHRoaXMuX2Vhc2VQb3dlcj10aGlzLl9lYXNlLl9wb3dlcix0aGlzLl9maXJzdFBUPW51bGwsdGhpcy5fdGFyZ2V0cylmb3IodD10aGlzLl90YXJnZXRzLmxlbmd0aDstLXQ+LTE7KXRoaXMuX2luaXRQcm9wcyh0aGlzLl90YXJnZXRzW3RdLHRoaXMuX3Byb3BMb29rdXBbdF09e30sdGhpcy5fc2libGluZ3NbdF0sYT9hW3RdOm51bGwpJiYoZT0hMCk7ZWxzZSBlPXRoaXMuX2luaXRQcm9wcyh0aGlzLnRhcmdldCx0aGlzLl9wcm9wTG9va3VwLHRoaXMuX3NpYmxpbmdzLGEpO2lmKGUmJkQuX29uUGx1Z2luRXZlbnQoXCJfb25Jbml0QWxsUHJvcHNcIix0aGlzKSxhJiYodGhpcy5fZmlyc3RQVHx8XCJmdW5jdGlvblwiIT10eXBlb2YgdGhpcy50YXJnZXQmJnRoaXMuX2VuYWJsZWQoITEsITEpKSxyLnJ1bkJhY2t3YXJkcylmb3IoaT10aGlzLl9maXJzdFBUO2k7KWkucys9aS5jLGkuYz0taS5jLGk9aS5fbmV4dDt0aGlzLl9vblVwZGF0ZT1yLm9uVXBkYXRlLHRoaXMuX2luaXR0ZWQ9ITB9LG4uX2luaXRQcm9wcz1mdW5jdGlvbihlLGkscyxuKXt2YXIgcixhLG8sbCxoLF87aWYobnVsbD09ZSlyZXR1cm4hMTtPW2UuX2dzVHdlZW5JRF0mJnEoKSx0aGlzLnZhcnMuY3NzfHxlLnN0eWxlJiZlIT09dCYmZS5ub2RlVHlwZSYmTC5jc3MmJnRoaXMudmFycy5hdXRvQ1NTIT09ITEmJkUodGhpcy52YXJzLGUpO2ZvcihyIGluIHRoaXMudmFycyl7aWYoXz10aGlzLnZhcnNbcl0saltyXSlfJiYoXyBpbnN0YW5jZW9mIEFycmF5fHxfLnB1c2gmJm0oXykpJiYtMSE9PV8uam9pbihcIlwiKS5pbmRleE9mKFwie3NlbGZ9XCIpJiYodGhpcy52YXJzW3JdPV89dGhpcy5fc3dhcFNlbGZJblBhcmFtcyhfLHRoaXMpKTtlbHNlIGlmKExbcl0mJihsPW5ldyBMW3JdKS5fb25Jbml0VHdlZW4oZSx0aGlzLnZhcnNbcl0sdGhpcykpe2Zvcih0aGlzLl9maXJzdFBUPWg9e19uZXh0OnRoaXMuX2ZpcnN0UFQsdDpsLHA6XCJzZXRSYXRpb1wiLHM6MCxjOjEsZjohMCxuOnIscGc6ITAscHI6bC5fcHJpb3JpdHl9LGE9bC5fb3ZlcndyaXRlUHJvcHMubGVuZ3RoOy0tYT4tMTspaVtsLl9vdmVyd3JpdGVQcm9wc1thXV09dGhpcy5fZmlyc3RQVDsobC5fcHJpb3JpdHl8fGwuX29uSW5pdEFsbFByb3BzKSYmKG89ITApLChsLl9vbkRpc2FibGV8fGwuX29uRW5hYmxlKSYmKHRoaXMuX25vdGlmeVBsdWdpbnNPZkVuYWJsZWQ9ITApfWVsc2UgdGhpcy5fZmlyc3RQVD1pW3JdPWg9e19uZXh0OnRoaXMuX2ZpcnN0UFQsdDplLHA6cixmOlwiZnVuY3Rpb25cIj09dHlwZW9mIGVbcl0sbjpyLHBnOiExLHByOjB9LGgucz1oLmY/ZVtyLmluZGV4T2YoXCJzZXRcIil8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbXCJnZXRcIityLnN1YnN0cigzKV0/cjpcImdldFwiK3Iuc3Vic3RyKDMpXSgpOnBhcnNlRmxvYXQoZVtyXSksaC5jPVwic3RyaW5nXCI9PXR5cGVvZiBfJiZcIj1cIj09PV8uY2hhckF0KDEpP3BhcnNlSW50KF8uY2hhckF0KDApK1wiMVwiLDEwKSpOdW1iZXIoXy5zdWJzdHIoMikpOk51bWJlcihfKS1oLnN8fDA7aCYmaC5fbmV4dCYmKGguX25leHQuX3ByZXY9aCl9cmV0dXJuIG4mJnRoaXMuX2tpbGwobixlKT90aGlzLl9pbml0UHJvcHMoZSxpLHMsbik6dGhpcy5fb3ZlcndyaXRlPjEmJnRoaXMuX2ZpcnN0UFQmJnMubGVuZ3RoPjEmJiQoZSx0aGlzLGksdGhpcy5fb3ZlcndyaXRlLHMpPyh0aGlzLl9raWxsKGksZSksdGhpcy5faW5pdFByb3BzKGUsaSxzLG4pKToodGhpcy5fZmlyc3RQVCYmKHRoaXMudmFycy5sYXp5IT09ITEmJnRoaXMuX2R1cmF0aW9ufHx0aGlzLnZhcnMubGF6eSYmIXRoaXMuX2R1cmF0aW9uKSYmKE9bZS5fZ3NUd2VlbklEXT0hMCksbyl9LG4ucmVuZGVyPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcyxuLHIsYSxvPXRoaXMuX3RpbWUsbD10aGlzLl9kdXJhdGlvbixfPXRoaXMuX3Jhd1ByZXZUaW1lO2lmKHQ+PWwpdGhpcy5fdG90YWxUaW1lPXRoaXMuX3RpbWU9bCx0aGlzLnJhdGlvPXRoaXMuX2Vhc2UuX2NhbGNFbmQ/dGhpcy5fZWFzZS5nZXRSYXRpbygxKToxLHRoaXMuX3JldmVyc2VkfHwocz0hMCxuPVwib25Db21wbGV0ZVwiKSwwPT09bCYmKHRoaXMuX2luaXR0ZWR8fCF0aGlzLnZhcnMubGF6eXx8aSkmJih0aGlzLl9zdGFydFRpbWU9PT10aGlzLl90aW1lbGluZS5fZHVyYXRpb24mJih0PTApLCgwPT09dHx8MD5ffHxfPT09aCkmJl8hPT10JiYoaT0hMCxfPmgmJihuPVwib25SZXZlcnNlQ29tcGxldGVcIikpLHRoaXMuX3Jhd1ByZXZUaW1lPWE9IWV8fHR8fF89PT10P3Q6aCk7ZWxzZSBpZigxZS03PnQpdGhpcy5fdG90YWxUaW1lPXRoaXMuX3RpbWU9MCx0aGlzLnJhdGlvPXRoaXMuX2Vhc2UuX2NhbGNFbmQ/dGhpcy5fZWFzZS5nZXRSYXRpbygwKTowLCgwIT09b3x8MD09PWwmJl8+MCYmXyE9PWgpJiYobj1cIm9uUmV2ZXJzZUNvbXBsZXRlXCIscz10aGlzLl9yZXZlcnNlZCksMD50Pyh0aGlzLl9hY3RpdmU9ITEsMD09PWwmJih0aGlzLl9pbml0dGVkfHwhdGhpcy52YXJzLmxhenl8fGkpJiYoXz49MCYmKGk9ITApLHRoaXMuX3Jhd1ByZXZUaW1lPWE9IWV8fHR8fF89PT10P3Q6aCkpOnRoaXMuX2luaXR0ZWR8fChpPSEwKTtlbHNlIGlmKHRoaXMuX3RvdGFsVGltZT10aGlzLl90aW1lPXQsdGhpcy5fZWFzZVR5cGUpe3ZhciB1PXQvbCxtPXRoaXMuX2Vhc2VUeXBlLGY9dGhpcy5fZWFzZVBvd2VyOygxPT09bXx8Mz09PW0mJnU+PS41KSYmKHU9MS11KSwzPT09bSYmKHUqPTIpLDE9PT1mP3UqPXU6Mj09PWY/dSo9dSp1OjM9PT1mP3UqPXUqdSp1OjQ9PT1mJiYodSo9dSp1KnUqdSksdGhpcy5yYXRpbz0xPT09bT8xLXU6Mj09PW0/dTouNT50L2w/dS8yOjEtdS8yfWVsc2UgdGhpcy5yYXRpbz10aGlzLl9lYXNlLmdldFJhdGlvKHQvbCk7aWYodGhpcy5fdGltZSE9PW98fGkpe2lmKCF0aGlzLl9pbml0dGVkKXtpZih0aGlzLl9pbml0KCksIXRoaXMuX2luaXR0ZWR8fHRoaXMuX2djKXJldHVybjtpZighaSYmdGhpcy5fZmlyc3RQVCYmKHRoaXMudmFycy5sYXp5IT09ITEmJnRoaXMuX2R1cmF0aW9ufHx0aGlzLnZhcnMubGF6eSYmIXRoaXMuX2R1cmF0aW9uKSlyZXR1cm4gdGhpcy5fdGltZT10aGlzLl90b3RhbFRpbWU9byx0aGlzLl9yYXdQcmV2VGltZT1fLHoucHVzaCh0aGlzKSx0aGlzLl9sYXp5PXQsdm9pZCAwO3RoaXMuX3RpbWUmJiFzP3RoaXMucmF0aW89dGhpcy5fZWFzZS5nZXRSYXRpbyh0aGlzLl90aW1lL2wpOnMmJnRoaXMuX2Vhc2UuX2NhbGNFbmQmJih0aGlzLnJhdGlvPXRoaXMuX2Vhc2UuZ2V0UmF0aW8oMD09PXRoaXMuX3RpbWU/MDoxKSl9Zm9yKHRoaXMuX2xhenkhPT0hMSYmKHRoaXMuX2xhenk9ITEpLHRoaXMuX2FjdGl2ZXx8IXRoaXMuX3BhdXNlZCYmdGhpcy5fdGltZSE9PW8mJnQ+PTAmJih0aGlzLl9hY3RpdmU9ITApLDA9PT1vJiYodGhpcy5fc3RhcnRBdCYmKHQ+PTA/dGhpcy5fc3RhcnRBdC5yZW5kZXIodCxlLGkpOm58fChuPVwiX2R1bW15R1NcIikpLHRoaXMudmFycy5vblN0YXJ0JiYoMCE9PXRoaXMuX3RpbWV8fDA9PT1sKSYmKGV8fHRoaXMudmFycy5vblN0YXJ0LmFwcGx5KHRoaXMudmFycy5vblN0YXJ0U2NvcGV8fHRoaXMsdGhpcy52YXJzLm9uU3RhcnRQYXJhbXN8fGcpKSkscj10aGlzLl9maXJzdFBUO3I7KXIuZj9yLnRbci5wXShyLmMqdGhpcy5yYXRpbytyLnMpOnIudFtyLnBdPXIuYyp0aGlzLnJhdGlvK3IucyxyPXIuX25leHQ7dGhpcy5fb25VcGRhdGUmJigwPnQmJnRoaXMuX3N0YXJ0QXQmJnRoaXMuX3N0YXJ0VGltZSYmdGhpcy5fc3RhcnRBdC5yZW5kZXIodCxlLGkpLGV8fCh0aGlzLl90aW1lIT09b3x8cykmJnRoaXMuX29uVXBkYXRlLmFwcGx5KHRoaXMudmFycy5vblVwZGF0ZVNjb3BlfHx0aGlzLHRoaXMudmFycy5vblVwZGF0ZVBhcmFtc3x8ZykpLG4mJih0aGlzLl9nY3x8KDA+dCYmdGhpcy5fc3RhcnRBdCYmIXRoaXMuX29uVXBkYXRlJiZ0aGlzLl9zdGFydFRpbWUmJnRoaXMuX3N0YXJ0QXQucmVuZGVyKHQsZSxpKSxzJiYodGhpcy5fdGltZWxpbmUuYXV0b1JlbW92ZUNoaWxkcmVuJiZ0aGlzLl9lbmFibGVkKCExLCExKSx0aGlzLl9hY3RpdmU9ITEpLCFlJiZ0aGlzLnZhcnNbbl0mJnRoaXMudmFyc1tuXS5hcHBseSh0aGlzLnZhcnNbbitcIlNjb3BlXCJdfHx0aGlzLHRoaXMudmFyc1tuK1wiUGFyYW1zXCJdfHxnKSwwPT09bCYmdGhpcy5fcmF3UHJldlRpbWU9PT1oJiZhIT09aCYmKHRoaXMuX3Jhd1ByZXZUaW1lPTApKSl9fSxuLl9raWxsPWZ1bmN0aW9uKHQsZSl7aWYoXCJhbGxcIj09PXQmJih0PW51bGwpLG51bGw9PXQmJihudWxsPT1lfHxlPT09dGhpcy50YXJnZXQpKXJldHVybiB0aGlzLl9sYXp5PSExLHRoaXMuX2VuYWJsZWQoITEsITEpO2U9XCJzdHJpbmdcIiE9dHlwZW9mIGU/ZXx8dGhpcy5fdGFyZ2V0c3x8dGhpcy50YXJnZXQ6RC5zZWxlY3RvcihlKXx8ZTt2YXIgaSxzLG4scixhLG8sbCxoO2lmKChtKGUpfHxJKGUpKSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF0pZm9yKGk9ZS5sZW5ndGg7LS1pPi0xOyl0aGlzLl9raWxsKHQsZVtpXSkmJihvPSEwKTtlbHNle2lmKHRoaXMuX3RhcmdldHMpe2ZvcihpPXRoaXMuX3RhcmdldHMubGVuZ3RoOy0taT4tMTspaWYoZT09PXRoaXMuX3RhcmdldHNbaV0pe2E9dGhpcy5fcHJvcExvb2t1cFtpXXx8e30sdGhpcy5fb3ZlcndyaXR0ZW5Qcm9wcz10aGlzLl9vdmVyd3JpdHRlblByb3BzfHxbXSxzPXRoaXMuX292ZXJ3cml0dGVuUHJvcHNbaV09dD90aGlzLl9vdmVyd3JpdHRlblByb3BzW2ldfHx7fTpcImFsbFwiO2JyZWFrfX1lbHNle2lmKGUhPT10aGlzLnRhcmdldClyZXR1cm4hMTthPXRoaXMuX3Byb3BMb29rdXAscz10aGlzLl9vdmVyd3JpdHRlblByb3BzPXQ/dGhpcy5fb3ZlcndyaXR0ZW5Qcm9wc3x8e306XCJhbGxcIn1pZihhKXtsPXR8fGEsaD10IT09cyYmXCJhbGxcIiE9PXMmJnQhPT1hJiYoXCJvYmplY3RcIiE9dHlwZW9mIHR8fCF0Ll90ZW1wS2lsbCk7Zm9yKG4gaW4gbCkocj1hW25dKSYmKHIucGcmJnIudC5fa2lsbChsKSYmKG89ITApLHIucGcmJjAhPT1yLnQuX292ZXJ3cml0ZVByb3BzLmxlbmd0aHx8KHIuX3ByZXY/ci5fcHJldi5fbmV4dD1yLl9uZXh0OnI9PT10aGlzLl9maXJzdFBUJiYodGhpcy5fZmlyc3RQVD1yLl9uZXh0KSxyLl9uZXh0JiYoci5fbmV4dC5fcHJldj1yLl9wcmV2KSxyLl9uZXh0PXIuX3ByZXY9bnVsbCksZGVsZXRlIGFbbl0pLGgmJihzW25dPTEpOyF0aGlzLl9maXJzdFBUJiZ0aGlzLl9pbml0dGVkJiZ0aGlzLl9lbmFibGVkKCExLCExKX19cmV0dXJuIG99LG4uaW52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub3RpZnlQbHVnaW5zT2ZFbmFibGVkJiZELl9vblBsdWdpbkV2ZW50KFwiX29uRGlzYWJsZVwiLHRoaXMpLHRoaXMuX2ZpcnN0UFQ9bnVsbCx0aGlzLl9vdmVyd3JpdHRlblByb3BzPW51bGwsdGhpcy5fb25VcGRhdGU9bnVsbCx0aGlzLl9zdGFydEF0PW51bGwsdGhpcy5faW5pdHRlZD10aGlzLl9hY3RpdmU9dGhpcy5fbm90aWZ5UGx1Z2luc09mRW5hYmxlZD10aGlzLl9sYXp5PSExLHRoaXMuX3Byb3BMb29rdXA9dGhpcy5fdGFyZ2V0cz97fTpbXSx0aGlzfSxuLl9lbmFibGVkPWZ1bmN0aW9uKHQsZSl7aWYoYXx8ci53YWtlKCksdCYmdGhpcy5fZ2Mpe3ZhciBpLHM9dGhpcy5fdGFyZ2V0cztpZihzKWZvcihpPXMubGVuZ3RoOy0taT4tMTspdGhpcy5fc2libGluZ3NbaV09TShzW2ldLHRoaXMsITApO2Vsc2UgdGhpcy5fc2libGluZ3M9TSh0aGlzLnRhcmdldCx0aGlzLCEwKX1yZXR1cm4geC5wcm90b3R5cGUuX2VuYWJsZWQuY2FsbCh0aGlzLHQsZSksdGhpcy5fbm90aWZ5UGx1Z2luc09mRW5hYmxlZCYmdGhpcy5fZmlyc3RQVD9ELl9vblBsdWdpbkV2ZW50KHQ/XCJfb25FbmFibGVcIjpcIl9vbkRpc2FibGVcIix0aGlzKTohMX0sRC50bz1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBEKHQsZSxpKX0sRC5mcm9tPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gaS5ydW5CYWNrd2FyZHM9ITAsaS5pbW1lZGlhdGVSZW5kZXI9MCE9aS5pbW1lZGlhdGVSZW5kZXIsbmV3IEQodCxlLGkpfSxELmZyb21Ubz1mdW5jdGlvbih0LGUsaSxzKXtyZXR1cm4gcy5zdGFydEF0PWkscy5pbW1lZGlhdGVSZW5kZXI9MCE9cy5pbW1lZGlhdGVSZW5kZXImJjAhPWkuaW1tZWRpYXRlUmVuZGVyLG5ldyBEKHQsZSxzKX0sRC5kZWxheWVkQ2FsbD1mdW5jdGlvbih0LGUsaSxzLG4pe3JldHVybiBuZXcgRChlLDAse2RlbGF5OnQsb25Db21wbGV0ZTplLG9uQ29tcGxldGVQYXJhbXM6aSxvbkNvbXBsZXRlU2NvcGU6cyxvblJldmVyc2VDb21wbGV0ZTplLG9uUmV2ZXJzZUNvbXBsZXRlUGFyYW1zOmksb25SZXZlcnNlQ29tcGxldGVTY29wZTpzLGltbWVkaWF0ZVJlbmRlcjohMSx1c2VGcmFtZXM6bixvdmVyd3JpdGU6MH0pfSxELnNldD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRCh0LDAsZSl9LEQuZ2V0VHdlZW5zT2Y9ZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybltdO3Q9XCJzdHJpbmdcIiE9dHlwZW9mIHQ/dDpELnNlbGVjdG9yKHQpfHx0O3ZhciBpLHMsbixyO2lmKChtKHQpfHxJKHQpKSYmXCJudW1iZXJcIiE9dHlwZW9mIHRbMF0pe2ZvcihpPXQubGVuZ3RoLHM9W107LS1pPi0xOylzPXMuY29uY2F0KEQuZ2V0VHdlZW5zT2YodFtpXSxlKSk7Zm9yKGk9cy5sZW5ndGg7LS1pPi0xOylmb3Iocj1zW2ldLG49aTstLW4+LTE7KXI9PT1zW25dJiZzLnNwbGljZShpLDEpfWVsc2UgZm9yKHM9TSh0KS5jb25jYXQoKSxpPXMubGVuZ3RoOy0taT4tMTspKHNbaV0uX2djfHxlJiYhc1tpXS5pc0FjdGl2ZSgpKSYmcy5zcGxpY2UoaSwxKTtyZXR1cm4gc30sRC5raWxsVHdlZW5zT2Y9RC5raWxsRGVsYXllZENhbGxzVG89ZnVuY3Rpb24odCxlLGkpe1wib2JqZWN0XCI9PXR5cGVvZiBlJiYoaT1lLGU9ITEpO2Zvcih2YXIgcz1ELmdldFR3ZWVuc09mKHQsZSksbj1zLmxlbmd0aDstLW4+LTE7KXNbbl0uX2tpbGwoaSx0KX07dmFyIEg9ZChcInBsdWdpbnMuVHdlZW5QbHVnaW5cIixmdW5jdGlvbih0LGUpe3RoaXMuX292ZXJ3cml0ZVByb3BzPSh0fHxcIlwiKS5zcGxpdChcIixcIiksdGhpcy5fcHJvcE5hbWU9dGhpcy5fb3ZlcndyaXRlUHJvcHNbMF0sdGhpcy5fcHJpb3JpdHk9ZXx8MCx0aGlzLl9zdXBlcj1ILnByb3RvdHlwZX0sITApO2lmKG49SC5wcm90b3R5cGUsSC52ZXJzaW9uPVwiMS4xMC4xXCIsSC5BUEk9MixuLl9maXJzdFBUPW51bGwsbi5fYWRkVHdlZW49ZnVuY3Rpb24odCxlLGkscyxuLHIpe3ZhciBhLG87cmV0dXJuIG51bGwhPXMmJihhPVwibnVtYmVyXCI9PXR5cGVvZiBzfHxcIj1cIiE9PXMuY2hhckF0KDEpP051bWJlcihzKS1pOnBhcnNlSW50KHMuY2hhckF0KDApK1wiMVwiLDEwKSpOdW1iZXIocy5zdWJzdHIoMikpKT8odGhpcy5fZmlyc3RQVD1vPXtfbmV4dDp0aGlzLl9maXJzdFBULHQ6dCxwOmUsczppLGM6YSxmOlwiZnVuY3Rpb25cIj09dHlwZW9mIHRbZV0sbjpufHxlLHI6cn0sby5fbmV4dCYmKG8uX25leHQuX3ByZXY9byksbyk6dm9pZCAwfSxuLnNldFJhdGlvPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpPXRoaXMuX2ZpcnN0UFQscz0xZS02O2k7KWU9aS5jKnQraS5zLGkucj9lPU1hdGgucm91bmQoZSk6cz5lJiZlPi1zJiYoZT0wKSxpLmY/aS50W2kucF0oZSk6aS50W2kucF09ZSxpPWkuX25leHR9LG4uX2tpbGw9ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLl9vdmVyd3JpdGVQcm9wcyxzPXRoaXMuX2ZpcnN0UFQ7aWYobnVsbCE9dFt0aGlzLl9wcm9wTmFtZV0pdGhpcy5fb3ZlcndyaXRlUHJvcHM9W107ZWxzZSBmb3IoZT1pLmxlbmd0aDstLWU+LTE7KW51bGwhPXRbaVtlXV0mJmkuc3BsaWNlKGUsMSk7Zm9yKDtzOyludWxsIT10W3Mubl0mJihzLl9uZXh0JiYocy5fbmV4dC5fcHJldj1zLl9wcmV2KSxzLl9wcmV2PyhzLl9wcmV2Ll9uZXh0PXMuX25leHQscy5fcHJldj1udWxsKTp0aGlzLl9maXJzdFBUPT09cyYmKHRoaXMuX2ZpcnN0UFQ9cy5fbmV4dCkpLHM9cy5fbmV4dDtyZXR1cm4hMX0sbi5fcm91bmRQcm9wcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10aGlzLl9maXJzdFBUO2k7KSh0W3RoaXMuX3Byb3BOYW1lXXx8bnVsbCE9aS5uJiZ0W2kubi5zcGxpdCh0aGlzLl9wcm9wTmFtZStcIl9cIikuam9pbihcIlwiKV0pJiYoaS5yPWUpLGk9aS5fbmV4dH0sRC5fb25QbHVnaW5FdmVudD1mdW5jdGlvbih0LGUpe3ZhciBpLHMsbixyLGEsbz1lLl9maXJzdFBUO2lmKFwiX29uSW5pdEFsbFByb3BzXCI9PT10KXtmb3IoO287KXtmb3IoYT1vLl9uZXh0LHM9bjtzJiZzLnByPm8ucHI7KXM9cy5fbmV4dDsoby5fcHJldj1zP3MuX3ByZXY6cik/by5fcHJldi5fbmV4dD1vOm49bywoby5fbmV4dD1zKT9zLl9wcmV2PW86cj1vLG89YX1vPWUuX2ZpcnN0UFQ9bn1mb3IoO287KW8ucGcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG8udFt0XSYmby50W3RdKCkmJihpPSEwKSxvPW8uX25leHQ7cmV0dXJuIGl9LEguYWN0aXZhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoOy0tZT4tMTspdFtlXS5BUEk9PT1ILkFQSSYmKExbKG5ldyB0W2VdKS5fcHJvcE5hbWVdPXRbZV0pO3JldHVybiEwfSxjLnBsdWdpbj1mdW5jdGlvbih0KXtpZighKHQmJnQucHJvcE5hbWUmJnQuaW5pdCYmdC5BUEkpKXRocm93XCJpbGxlZ2FsIHBsdWdpbiBkZWZpbml0aW9uLlwiO3ZhciBlLGk9dC5wcm9wTmFtZSxzPXQucHJpb3JpdHl8fDAsbj10Lm92ZXJ3cml0ZVByb3BzLHI9e2luaXQ6XCJfb25Jbml0VHdlZW5cIixzZXQ6XCJzZXRSYXRpb1wiLGtpbGw6XCJfa2lsbFwiLHJvdW5kOlwiX3JvdW5kUHJvcHNcIixpbml0QWxsOlwiX29uSW5pdEFsbFByb3BzXCJ9LGE9ZChcInBsdWdpbnMuXCIraS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnN1YnN0cigxKStcIlBsdWdpblwiLGZ1bmN0aW9uKCl7SC5jYWxsKHRoaXMsaSxzKSx0aGlzLl9vdmVyd3JpdGVQcm9wcz1ufHxbXX0sdC5nbG9iYWw9PT0hMCksbz1hLnByb3RvdHlwZT1uZXcgSChpKTtvLmNvbnN0cnVjdG9yPWEsYS5BUEk9dC5BUEk7Zm9yKGUgaW4gcilcImZ1bmN0aW9uXCI9PXR5cGVvZiB0W2VdJiYob1tyW2VdXT10W2VdKTtyZXR1cm4gYS52ZXJzaW9uPXQudmVyc2lvbixILmFjdGl2YXRlKFthXSksYX0saT10Ll9nc1F1ZXVlKXtmb3Iocz0wO2kubGVuZ3RoPnM7cysrKWlbc10oKTtmb3IobiBpbiBmKWZbbl0uZnVuY3x8dC5jb25zb2xlLmxvZyhcIkdTQVAgZW5jb3VudGVyZWQgbWlzc2luZyBkZXBlbmRlbmN5OiBjb20uZ3JlZW5zb2NrLlwiK24pfWE9ITF9fSkod2luZG93KTsiLCIvKiFcclxuICogVkVSU0lPTjogYmV0YSAxLjkuM1xyXG4gKiBEQVRFOiAyMDEzLTA0LTAyXHJcbiAqIFVQREFURVMgQU5EIERPQ1MgQVQ6IGh0dHA6Ly93d3cuZ3JlZW5zb2NrLmNvbVxyXG4gKlxyXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxNCwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBUaGlzIHdvcmsgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYXQgaHR0cDovL3d3dy5ncmVlbnNvY2suY29tL3Rlcm1zX29mX3VzZS5odG1sIG9yIGZvclxyXG4gKiBDbHViIEdyZWVuU29jayBtZW1iZXJzLCB0aGUgc29mdHdhcmUgYWdyZWVtZW50IHRoYXQgd2FzIGlzc3VlZCB3aXRoIHlvdXIgbWVtYmVyc2hpcC5cclxuICogXHJcbiAqIEBhdXRob3I6IEphY2sgRG95bGUsIGphY2tAZ3JlZW5zb2NrLmNvbVxyXG4gKiovXHJcbih3aW5kb3cuX2dzUXVldWV8fCh3aW5kb3cuX2dzUXVldWU9W10pKS5wdXNoKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7d2luZG93Ll9nc0RlZmluZShcImVhc2luZy5CYWNrXCIsW1wiZWFzaW5nLkVhc2VcIl0sZnVuY3Rpb24odCl7dmFyIGUsaSxzLHI9d2luZG93LkdyZWVuU29ja0dsb2JhbHN8fHdpbmRvdyxuPXIuY29tLmdyZWVuc29jayxhPTIqTWF0aC5QSSxvPU1hdGguUEkvMixoPW4uX2NsYXNzLGw9ZnVuY3Rpb24oZSxpKXt2YXIgcz1oKFwiZWFzaW5nLlwiK2UsZnVuY3Rpb24oKXt9LCEwKSxyPXMucHJvdG90eXBlPW5ldyB0O3JldHVybiByLmNvbnN0cnVjdG9yPXMsci5nZXRSYXRpbz1pLHN9LF89dC5yZWdpc3Rlcnx8ZnVuY3Rpb24oKXt9LHU9ZnVuY3Rpb24odCxlLGkscyl7dmFyIHI9aChcImVhc2luZy5cIit0LHtlYXNlT3V0Om5ldyBlLGVhc2VJbjpuZXcgaSxlYXNlSW5PdXQ6bmV3IHN9LCEwKTtyZXR1cm4gXyhyLHQpLHJ9LGM9ZnVuY3Rpb24odCxlLGkpe3RoaXMudD10LHRoaXMudj1lLGkmJih0aGlzLm5leHQ9aSxpLnByZXY9dGhpcyx0aGlzLmM9aS52LWUsdGhpcy5nYXA9aS50LXQpfSxmPWZ1bmN0aW9uKGUsaSl7dmFyIHM9aChcImVhc2luZy5cIitlLGZ1bmN0aW9uKHQpe3RoaXMuX3AxPXR8fDA9PT10P3Q6MS43MDE1OCx0aGlzLl9wMj0xLjUyNSp0aGlzLl9wMX0sITApLHI9cy5wcm90b3R5cGU9bmV3IHQ7cmV0dXJuIHIuY29uc3RydWN0b3I9cyxyLmdldFJhdGlvPWksci5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHQpfSxzfSxwPXUoXCJCYWNrXCIsZihcIkJhY2tPdXRcIixmdW5jdGlvbih0KXtyZXR1cm4odC09MSkqdCooKHRoaXMuX3AxKzEpKnQrdGhpcy5fcDEpKzF9KSxmKFwiQmFja0luXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooKHRoaXMuX3AxKzEpKnQtdGhpcy5fcDEpfSksZihcIkJhY2tJbk91dFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxPih0Kj0yKT8uNSp0KnQqKCh0aGlzLl9wMisxKSp0LXRoaXMuX3AyKTouNSooKHQtPTIpKnQqKCh0aGlzLl9wMisxKSp0K3RoaXMuX3AyKSsyKX0pKSxtPWgoXCJlYXNpbmcuU2xvd01vXCIsZnVuY3Rpb24odCxlLGkpe2U9ZXx8MD09PWU/ZTouNyxudWxsPT10P3Q9Ljc6dD4xJiYodD0xKSx0aGlzLl9wPTEhPT10P2U6MCx0aGlzLl9wMT0oMS10KS8yLHRoaXMuX3AyPXQsdGhpcy5fcDM9dGhpcy5fcDErdGhpcy5fcDIsdGhpcy5fY2FsY0VuZD1pPT09ITB9LCEwKSxkPW0ucHJvdG90eXBlPW5ldyB0O3JldHVybiBkLmNvbnN0cnVjdG9yPW0sZC5nZXRSYXRpbz1mdW5jdGlvbih0KXt2YXIgZT10KyguNS10KSp0aGlzLl9wO3JldHVybiB0aGlzLl9wMT50P3RoaXMuX2NhbGNFbmQ/MS0odD0xLXQvdGhpcy5fcDEpKnQ6ZS0odD0xLXQvdGhpcy5fcDEpKnQqdCp0KmU6dD50aGlzLl9wMz90aGlzLl9jYWxjRW5kPzEtKHQ9KHQtdGhpcy5fcDMpL3RoaXMuX3AxKSp0OmUrKHQtZSkqKHQ9KHQtdGhpcy5fcDMpL3RoaXMuX3AxKSp0KnQqdDp0aGlzLl9jYWxjRW5kPzE6ZX0sbS5lYXNlPW5ldyBtKC43LC43KSxkLmNvbmZpZz1tLmNvbmZpZz1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBtKHQsZSxpKX0sZT1oKFwiZWFzaW5nLlN0ZXBwZWRFYXNlXCIsZnVuY3Rpb24odCl7dD10fHwxLHRoaXMuX3AxPTEvdCx0aGlzLl9wMj10KzF9LCEwKSxkPWUucHJvdG90eXBlPW5ldyB0LGQuY29uc3RydWN0b3I9ZSxkLmdldFJhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiAwPnQ/dD0wOnQ+PTEmJih0PS45OTk5OTk5OTkpLCh0aGlzLl9wMip0Pj4wKSp0aGlzLl9wMX0sZC5jb25maWc9ZS5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKHQpfSxpPWgoXCJlYXNpbmcuUm91Z2hFYXNlXCIsZnVuY3Rpb24oZSl7ZT1lfHx7fTtmb3IodmFyIGkscyxyLG4sYSxvLGg9ZS50YXBlcnx8XCJub25lXCIsbD1bXSxfPTAsdT0wfChlLnBvaW50c3x8MjApLGY9dSxwPWUucmFuZG9taXplIT09ITEsbT1lLmNsYW1wPT09ITAsZD1lLnRlbXBsYXRlIGluc3RhbmNlb2YgdD9lLnRlbXBsYXRlOm51bGwsZz1cIm51bWJlclwiPT10eXBlb2YgZS5zdHJlbmd0aD8uNCplLnN0cmVuZ3RoOi40Oy0tZj4tMTspaT1wP01hdGgucmFuZG9tKCk6MS91KmYscz1kP2QuZ2V0UmF0aW8oaSk6aSxcIm5vbmVcIj09PWg/cj1nOlwib3V0XCI9PT1oPyhuPTEtaSxyPW4qbipnKTpcImluXCI9PT1oP3I9aSppKmc6LjU+aT8obj0yKmkscj0uNSpuKm4qZyk6KG49MiooMS1pKSxyPS41Km4qbipnKSxwP3MrPU1hdGgucmFuZG9tKCkqci0uNSpyOmYlMj9zKz0uNSpyOnMtPS41KnIsbSYmKHM+MT9zPTE6MD5zJiYocz0wKSksbFtfKytdPXt4OmkseTpzfTtmb3IobC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KSxvPW5ldyBjKDEsMSxudWxsKSxmPXU7LS1mPi0xOylhPWxbZl0sbz1uZXcgYyhhLngsYS55LG8pO3RoaXMuX3ByZXY9bmV3IGMoMCwwLDAhPT1vLnQ/bzpvLm5leHQpfSwhMCksZD1pLnByb3RvdHlwZT1uZXcgdCxkLmNvbnN0cnVjdG9yPWksZC5nZXRSYXRpbz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcmV2O2lmKHQ+ZS50KXtmb3IoO2UubmV4dCYmdD49ZS50OyllPWUubmV4dDtlPWUucHJldn1lbHNlIGZvcig7ZS5wcmV2JiZlLnQ+PXQ7KWU9ZS5wcmV2O3JldHVybiB0aGlzLl9wcmV2PWUsZS52Kyh0LWUudCkvZS5nYXAqZS5jfSxkLmNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9LGkuZWFzZT1uZXcgaSx1KFwiQm91bmNlXCIsbChcIkJvdW5jZU91dFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxLzIuNzU+dD83LjU2MjUqdCp0OjIvMi43NT50PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OjIuNS8yLjc1PnQ/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzV9KSxsKFwiQm91bmNlSW5cIixmdW5jdGlvbih0KXtyZXR1cm4gMS8yLjc1Pih0PTEtdCk/MS03LjU2MjUqdCp0OjIvMi43NT50PzEtKDcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1KToyLjUvMi43NT50PzEtKDcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1KToxLSg3LjU2MjUqKHQtPTIuNjI1LzIuNzUpKnQrLjk4NDM3NSl9KSxsKFwiQm91bmNlSW5PdXRcIixmdW5jdGlvbih0KXt2YXIgZT0uNT50O3JldHVybiB0PWU/MS0yKnQ6Mip0LTEsdD0xLzIuNzU+dD83LjU2MjUqdCp0OjIvMi43NT50PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OjIuNS8yLjc1PnQ/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzUsZT8uNSooMS10KTouNSp0Ky41fSkpLHUoXCJDaXJjXCIsbChcIkNpcmNPdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDEtKHQtPTEpKnQpfSksbChcIkNpcmNJblwiLGZ1bmN0aW9uKHQpe3JldHVybi0oTWF0aC5zcXJ0KDEtdCp0KS0xKX0pLGwoXCJDaXJjSW5PdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gMT4odCo9Mik/LS41KihNYXRoLnNxcnQoMS10KnQpLTEpOi41KihNYXRoLnNxcnQoMS0odC09MikqdCkrMSl9KSkscz1mdW5jdGlvbihlLGkscyl7dmFyIHI9aChcImVhc2luZy5cIitlLGZ1bmN0aW9uKHQsZSl7dGhpcy5fcDE9dHx8MSx0aGlzLl9wMj1lfHxzLHRoaXMuX3AzPXRoaXMuX3AyL2EqKE1hdGguYXNpbigxL3RoaXMuX3AxKXx8MCl9LCEwKSxuPXIucHJvdG90eXBlPW5ldyB0O3JldHVybiBuLmNvbnN0cnVjdG9yPXIsbi5nZXRSYXRpbz1pLG4uY29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyByKHQsZSl9LHJ9LHUoXCJFbGFzdGljXCIscyhcIkVsYXN0aWNPdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcDEqTWF0aC5wb3coMiwtMTAqdCkqTWF0aC5zaW4oKHQtdGhpcy5fcDMpKmEvdGhpcy5fcDIpKzF9LC4zKSxzKFwiRWxhc3RpY0luXCIsZnVuY3Rpb24odCl7cmV0dXJuLSh0aGlzLl9wMSpNYXRoLnBvdygyLDEwKih0LT0xKSkqTWF0aC5zaW4oKHQtdGhpcy5fcDMpKmEvdGhpcy5fcDIpKX0sLjMpLHMoXCJFbGFzdGljSW5PdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gMT4odCo9Mik/LS41KnRoaXMuX3AxKk1hdGgucG93KDIsMTAqKHQtPTEpKSpNYXRoLnNpbigodC10aGlzLl9wMykqYS90aGlzLl9wMik6LjUqdGhpcy5fcDEqTWF0aC5wb3coMiwtMTAqKHQtPTEpKSpNYXRoLnNpbigodC10aGlzLl9wMykqYS90aGlzLl9wMikrMX0sLjQ1KSksdShcIkV4cG9cIixsKFwiRXhwb091dFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKnQpfSksbChcIkV4cG9JblwiLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKih0LTEpKS0uMDAxfSksbChcIkV4cG9Jbk91dFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxPih0Kj0yKT8uNSpNYXRoLnBvdygyLDEwKih0LTEpKTouNSooMi1NYXRoLnBvdygyLC0xMCoodC0xKSkpfSkpLHUoXCJTaW5lXCIsbChcIlNpbmVPdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zaW4odCpvKX0pLGwoXCJTaW5lSW5cIixmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5jb3ModCpvKSsxfSksbChcIlNpbmVJbk91dFwiLGZ1bmN0aW9uKHQpe3JldHVybi0uNSooTWF0aC5jb3MoTWF0aC5QSSp0KS0xKX0pKSxoKFwiZWFzaW5nLkVhc2VMb29rdXBcIix7ZmluZDpmdW5jdGlvbihlKXtyZXR1cm4gdC5tYXBbZV19fSwhMCksXyhyLlNsb3dNbyxcIlNsb3dNb1wiLFwiZWFzZSxcIiksXyhpLFwiUm91Z2hFYXNlXCIsXCJlYXNlLFwiKSxfKGUsXCJTdGVwcGVkRWFzZVwiLFwiZWFzZSxcIikscH0sITApfSksd2luZG93Ll9nc0RlZmluZSYmd2luZG93Ll9nc1F1ZXVlLnBvcCgpKCk7IiwiLyohXHJcbiAqIFZFUlNJT046IDEuMTIuMVxyXG4gKiBEQVRFOiAyMDE0LTA2LTI2XHJcbiAqIFVQREFURVMgQU5EIERPQ1MgQVQ6IGh0dHA6Ly93d3cuZ3JlZW5zb2NrLmNvbVxyXG4gKlxyXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxNCwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBUaGlzIHdvcmsgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYXQgaHR0cDovL3d3dy5ncmVlbnNvY2suY29tL3Rlcm1zX29mX3VzZS5odG1sIG9yIGZvclxyXG4gKiBDbHViIEdyZWVuU29jayBtZW1iZXJzLCB0aGUgc29mdHdhcmUgYWdyZWVtZW50IHRoYXQgd2FzIGlzc3VlZCB3aXRoIHlvdXIgbWVtYmVyc2hpcC5cclxuICogXHJcbiAqIEBhdXRob3I6IEphY2sgRG95bGUsIGphY2tAZ3JlZW5zb2NrLmNvbVxyXG4gKi9cclxuKHdpbmRvdy5fZ3NRdWV1ZXx8KHdpbmRvdy5fZ3NRdWV1ZT1bXSkpLnB1c2goZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt3aW5kb3cuX2dzRGVmaW5lKFwicGx1Z2lucy5DU1NQbHVnaW5cIixbXCJwbHVnaW5zLlR3ZWVuUGx1Z2luXCIsXCJUd2VlbkxpdGVcIl0sZnVuY3Rpb24odCxlKXt2YXIgaSxyLHMsbixhPWZ1bmN0aW9uKCl7dC5jYWxsKHRoaXMsXCJjc3NcIiksdGhpcy5fb3ZlcndyaXRlUHJvcHMubGVuZ3RoPTAsdGhpcy5zZXRSYXRpbz1hLnByb3RvdHlwZS5zZXRSYXRpb30sbz17fSxsPWEucHJvdG90eXBlPW5ldyB0KFwiY3NzXCIpO2wuY29uc3RydWN0b3I9YSxhLnZlcnNpb249XCIxLjEyLjFcIixhLkFQST0yLGEuZGVmYXVsdFRyYW5zZm9ybVBlcnNwZWN0aXZlPTAsYS5kZWZhdWx0U2tld1R5cGU9XCJjb21wZW5zYXRlZFwiLGw9XCJweFwiLGEuc3VmZml4TWFwPXt0b3A6bCxyaWdodDpsLGJvdHRvbTpsLGxlZnQ6bCx3aWR0aDpsLGhlaWdodDpsLGZvbnRTaXplOmwscGFkZGluZzpsLG1hcmdpbjpsLHBlcnNwZWN0aXZlOmwsbGluZUhlaWdodDpcIlwifTt2YXIgaCx1LGYsXyxwLGMsZD0vKD86XFxkfFxcLVxcZHxcXC5cXGR8XFwtXFwuXFxkKSsvZyxtPS8oPzpcXGR8XFwtXFxkfFxcLlxcZHxcXC1cXC5cXGR8XFwrPVxcZHxcXC09XFxkfFxcKz0uXFxkfFxcLT1cXC5cXGQpKy9nLGc9Lyg/OlxcKz18XFwtPXxcXC18XFxiKVtcXGRcXC1cXC5dK1thLXpBLVowLTldKig/OiV8XFxiKS9naSx2PS9bXlxcZFxcLVxcLl0vZyx5PS8oPzpcXGR8XFwtfFxcK3w9fCN8XFwuKSovZyxUPS9vcGFjaXR5ICo9ICooW14pXSopL2ksdz0vb3BhY2l0eTooW147XSopL2kseD0vYWxwaGFcXChvcGFjaXR5ICo9Lis/XFwpL2ksYj0vXihyZ2J8aHNsKS8sUD0vKFtBLVpdKS9nLFM9Ly0oW2Etel0pL2dpLEM9LyheKD86dXJsXFwoXFxcInx1cmxcXCgpKXwoPzooXFxcIlxcKSkkfFxcKSQpL2dpLFI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpfSxrPS8oPzpMZWZ0fFJpZ2h0fFdpZHRoKS9pLEE9LyhNMTF8TTEyfE0yMXxNMjIpPVtcXGRcXC1cXC5lXSsvZ2ksTz0vcHJvZ2lkXFw6RFhJbWFnZVRyYW5zZm9ybVxcLk1pY3Jvc29mdFxcLk1hdHJpeFxcKC4rP1xcKS9pLEQ9LywoPz1bXlxcKV0qKD86XFwofCQpKS9naSxNPU1hdGguUEkvMTgwLEw9MTgwL01hdGguUEksTj17fSxYPWRvY3VtZW50LHo9WC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLEk9WC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpLEU9YS5faW50ZXJuYWxzPXtfc3BlY2lhbFByb3BzOm99LEY9bmF2aWdhdG9yLnVzZXJBZ2VudCxZPWZ1bmN0aW9uKCl7dmFyIHQsZT1GLmluZGV4T2YoXCJBbmRyb2lkXCIpLGk9WC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBmPS0xIT09Ri5pbmRleE9mKFwiU2FmYXJpXCIpJiYtMT09PUYuaW5kZXhPZihcIkNocm9tZVwiKSYmKC0xPT09ZXx8TnVtYmVyKEYuc3Vic3RyKGUrOCwxKSk+MykscD1mJiY2Pk51bWJlcihGLnN1YnN0cihGLmluZGV4T2YoXCJWZXJzaW9uL1wiKSs4LDEpKSxfPS0xIT09Ri5pbmRleE9mKFwiRmlyZWZveFwiKSwvTVNJRSAoWzAtOV17MSx9W1xcLjAtOV17MCx9KS8uZXhlYyhGKSYmKGM9cGFyc2VGbG9hdChSZWdFeHAuJDEpKSxpLmlubmVySFRNTD1cIjxhIHN0eWxlPSd0b3A6MXB4O29wYWNpdHk6LjU1Oyc+YTwvYT5cIix0PWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJhXCIpWzBdLHQ/L14wLjU1Ly50ZXN0KHQuc3R5bGUub3BhY2l0eSk6ITF9KCksQj1mdW5jdGlvbih0KXtyZXR1cm4gVC50ZXN0KFwic3RyaW5nXCI9PXR5cGVvZiB0P3Q6KHQuY3VycmVudFN0eWxlP3QuY3VycmVudFN0eWxlLmZpbHRlcjp0LnN0eWxlLmZpbHRlcil8fFwiXCIpP3BhcnNlRmxvYXQoUmVnRXhwLiQxKS8xMDA6MX0sVT1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2codCl9LFc9XCJcIixqPVwiXCIsVj1mdW5jdGlvbih0LGUpe2U9ZXx8ejt2YXIgaSxyLHM9ZS5zdHlsZTtpZih2b2lkIDAhPT1zW3RdKXJldHVybiB0O2Zvcih0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSksaT1bXCJPXCIsXCJNb3pcIixcIm1zXCIsXCJNc1wiLFwiV2Via2l0XCJdLHI9NTstLXI+LTEmJnZvaWQgMD09PXNbaVtyXSt0XTspO3JldHVybiByPj0wPyhqPTM9PT1yP1wibXNcIjppW3JdLFc9XCItXCIrai50b0xvd2VyQ2FzZSgpK1wiLVwiLGordCk6bnVsbH0sSD1YLmRlZmF1bHRWaWV3P1guZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe30scT1hLmdldFN0eWxlPWZ1bmN0aW9uKHQsZSxpLHIscyl7dmFyIG47cmV0dXJuIFl8fFwib3BhY2l0eVwiIT09ZT8oIXImJnQuc3R5bGVbZV0/bj10LnN0eWxlW2VdOihpPWl8fEgodCkpP249aVtlXXx8aS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxpLmdldFByb3BlcnR5VmFsdWUoZS5yZXBsYWNlKFAsXCItJDFcIikudG9Mb3dlckNhc2UoKSk6dC5jdXJyZW50U3R5bGUmJihuPXQuY3VycmVudFN0eWxlW2VdKSxudWxsPT1zfHxuJiZcIm5vbmVcIiE9PW4mJlwiYXV0b1wiIT09biYmXCJhdXRvIGF1dG9cIiE9PW4/bjpzKTpCKHQpfSxRPUUuY29udmVydFRvUGl4ZWxzPWZ1bmN0aW9uKHQsaSxyLHMsbil7aWYoXCJweFwiPT09c3x8IXMpcmV0dXJuIHI7aWYoXCJhdXRvXCI9PT1zfHwhcilyZXR1cm4gMDt2YXIgbyxsLGgsdT1rLnRlc3QoaSksZj10LF89ei5zdHlsZSxwPTA+cjtpZihwJiYocj0tciksXCIlXCI9PT1zJiYtMSE9PWkuaW5kZXhPZihcImJvcmRlclwiKSlvPXIvMTAwKih1P3QuY2xpZW50V2lkdGg6dC5jbGllbnRIZWlnaHQpO2Vsc2V7aWYoXy5jc3NUZXh0PVwiYm9yZGVyOjAgc29saWQgcmVkO3Bvc2l0aW9uOlwiK3EodCxcInBvc2l0aW9uXCIpK1wiO2xpbmUtaGVpZ2h0OjA7XCIsXCIlXCIhPT1zJiZmLmFwcGVuZENoaWxkKV9bdT9cImJvcmRlckxlZnRXaWR0aFwiOlwiYm9yZGVyVG9wV2lkdGhcIl09citzO2Vsc2V7aWYoZj10LnBhcmVudE5vZGV8fFguYm9keSxsPWYuX2dzQ2FjaGUsaD1lLnRpY2tlci5mcmFtZSxsJiZ1JiZsLnRpbWU9PT1oKXJldHVybiBsLndpZHRoKnIvMTAwO19bdT9cIndpZHRoXCI6XCJoZWlnaHRcIl09citzfWYuYXBwZW5kQ2hpbGQoeiksbz1wYXJzZUZsb2F0KHpbdT9cIm9mZnNldFdpZHRoXCI6XCJvZmZzZXRIZWlnaHRcIl0pLGYucmVtb3ZlQ2hpbGQoeiksdSYmXCIlXCI9PT1zJiZhLmNhY2hlV2lkdGhzIT09ITEmJihsPWYuX2dzQ2FjaGU9Zi5fZ3NDYWNoZXx8e30sbC50aW1lPWgsbC53aWR0aD0xMDAqKG8vcikpLDAhPT1vfHxufHwobz1RKHQsaSxyLHMsITApKX1yZXR1cm4gcD8tbzpvfSxaPUUuY2FsY3VsYXRlT2Zmc2V0PWZ1bmN0aW9uKHQsZSxpKXtpZihcImFic29sdXRlXCIhPT1xKHQsXCJwb3NpdGlvblwiLGkpKXJldHVybiAwO3ZhciByPVwibGVmdFwiPT09ZT9cIkxlZnRcIjpcIlRvcFwiLHM9cSh0LFwibWFyZ2luXCIrcixpKTtyZXR1cm4gdFtcIm9mZnNldFwiK3JdLShRKHQsZSxwYXJzZUZsb2F0KHMpLHMucmVwbGFjZSh5LFwiXCIpKXx8MCl9LCQ9ZnVuY3Rpb24odCxlKXt2YXIgaSxyLHM9e307aWYoZT1lfHxIKHQsbnVsbCkpaWYoaT1lLmxlbmd0aClmb3IoOy0taT4tMTspc1tlW2ldLnJlcGxhY2UoUyxSKV09ZS5nZXRQcm9wZXJ0eVZhbHVlKGVbaV0pO2Vsc2UgZm9yKGkgaW4gZSlzW2ldPWVbaV07ZWxzZSBpZihlPXQuY3VycmVudFN0eWxlfHx0LnN0eWxlKWZvcihpIGluIGUpXCJzdHJpbmdcIj09dHlwZW9mIGkmJnZvaWQgMD09PXNbaV0mJihzW2kucmVwbGFjZShTLFIpXT1lW2ldKTtyZXR1cm4gWXx8KHMub3BhY2l0eT1CKHQpKSxyPVBlKHQsZSwhMSkscy5yb3RhdGlvbj1yLnJvdGF0aW9uLHMuc2tld1g9ci5za2V3WCxzLnNjYWxlWD1yLnNjYWxlWCxzLnNjYWxlWT1yLnNjYWxlWSxzLng9ci54LHMueT1yLnkseGUmJihzLno9ci56LHMucm90YXRpb25YPXIucm90YXRpb25YLHMucm90YXRpb25ZPXIucm90YXRpb25ZLHMuc2NhbGVaPXIuc2NhbGVaKSxzLmZpbHRlcnMmJmRlbGV0ZSBzLmZpbHRlcnMsc30sRz1mdW5jdGlvbih0LGUsaSxyLHMpe3ZhciBuLGEsbyxsPXt9LGg9dC5zdHlsZTtmb3IoYSBpbiBpKVwiY3NzVGV4dFwiIT09YSYmXCJsZW5ndGhcIiE9PWEmJmlzTmFOKGEpJiYoZVthXSE9PShuPWlbYV0pfHxzJiZzW2FdKSYmLTE9PT1hLmluZGV4T2YoXCJPcmlnaW5cIikmJihcIm51bWJlclwiPT10eXBlb2Ygbnx8XCJzdHJpbmdcIj09dHlwZW9mIG4pJiYobFthXT1cImF1dG9cIiE9PW58fFwibGVmdFwiIT09YSYmXCJ0b3BcIiE9PWE/XCJcIiE9PW4mJlwiYXV0b1wiIT09biYmXCJub25lXCIhPT1ufHxcInN0cmluZ1wiIT10eXBlb2YgZVthXXx8XCJcIj09PWVbYV0ucmVwbGFjZSh2LFwiXCIpP246MDpaKHQsYSksdm9pZCAwIT09aFthXSYmKG89bmV3IGZlKGgsYSxoW2FdLG8pKSk7aWYocilmb3IoYSBpbiByKVwiY2xhc3NOYW1lXCIhPT1hJiYobFthXT1yW2FdKTtyZXR1cm57ZGlmczpsLGZpcnN0TVBUOm99fSxLPXt3aWR0aDpbXCJMZWZ0XCIsXCJSaWdodFwiXSxoZWlnaHQ6W1wiVG9wXCIsXCJCb3R0b21cIl19LEo9W1wibWFyZ2luTGVmdFwiLFwibWFyZ2luUmlnaHRcIixcIm1hcmdpblRvcFwiLFwibWFyZ2luQm90dG9tXCJdLHRlPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcj1wYXJzZUZsb2F0KFwid2lkdGhcIj09PWU/dC5vZmZzZXRXaWR0aDp0Lm9mZnNldEhlaWdodCkscz1LW2VdLG49cy5sZW5ndGg7Zm9yKGk9aXx8SCh0LG51bGwpOy0tbj4tMTspci09cGFyc2VGbG9hdChxKHQsXCJwYWRkaW5nXCIrc1tuXSxpLCEwKSl8fDAsci09cGFyc2VGbG9hdChxKHQsXCJib3JkZXJcIitzW25dK1wiV2lkdGhcIixpLCEwKSl8fDA7cmV0dXJuIHJ9LGVlPWZ1bmN0aW9uKHQsZSl7KG51bGw9PXR8fFwiXCI9PT10fHxcImF1dG9cIj09PXR8fFwiYXV0byBhdXRvXCI9PT10KSYmKHQ9XCIwIDBcIik7dmFyIGk9dC5zcGxpdChcIiBcIikscj0tMSE9PXQuaW5kZXhPZihcImxlZnRcIik/XCIwJVwiOi0xIT09dC5pbmRleE9mKFwicmlnaHRcIik/XCIxMDAlXCI6aVswXSxzPS0xIT09dC5pbmRleE9mKFwidG9wXCIpP1wiMCVcIjotMSE9PXQuaW5kZXhPZihcImJvdHRvbVwiKT9cIjEwMCVcIjppWzFdO3JldHVybiBudWxsPT1zP3M9XCIwXCI6XCJjZW50ZXJcIj09PXMmJihzPVwiNTAlXCIpLChcImNlbnRlclwiPT09cnx8aXNOYU4ocGFyc2VGbG9hdChyKSkmJi0xPT09KHIrXCJcIikuaW5kZXhPZihcIj1cIikpJiYocj1cIjUwJVwiKSxlJiYoZS5veHA9LTEhPT1yLmluZGV4T2YoXCIlXCIpLGUub3lwPS0xIT09cy5pbmRleE9mKFwiJVwiKSxlLm94cj1cIj1cIj09PXIuY2hhckF0KDEpLGUub3lyPVwiPVwiPT09cy5jaGFyQXQoMSksZS5veD1wYXJzZUZsb2F0KHIucmVwbGFjZSh2LFwiXCIpKSxlLm95PXBhcnNlRmxvYXQocy5yZXBsYWNlKHYsXCJcIikpKSxyK1wiIFwiK3MrKGkubGVuZ3RoPjI/XCIgXCIraVsyXTpcIlwiKX0saWU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCI9XCI9PT10LmNoYXJBdCgxKT9wYXJzZUludCh0LmNoYXJBdCgwKStcIjFcIiwxMCkqcGFyc2VGbG9hdCh0LnN1YnN0cigyKSk6cGFyc2VGbG9hdCh0KS1wYXJzZUZsb2F0KGUpfSxyZT1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P2U6XCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiPVwiPT09dC5jaGFyQXQoMSk/cGFyc2VJbnQodC5jaGFyQXQoMCkrXCIxXCIsMTApKk51bWJlcih0LnN1YnN0cigyKSkrZTpwYXJzZUZsb2F0KHQpfSxzZT1mdW5jdGlvbih0LGUsaSxyKXt2YXIgcyxuLGEsbyxsPTFlLTY7cmV0dXJuIG51bGw9PXQ/bz1lOlwibnVtYmVyXCI9PXR5cGVvZiB0P289dDoocz0zNjAsbj10LnNwbGl0KFwiX1wiKSxhPU51bWJlcihuWzBdLnJlcGxhY2UodixcIlwiKSkqKC0xPT09dC5pbmRleE9mKFwicmFkXCIpPzE6TCktKFwiPVwiPT09dC5jaGFyQXQoMSk/MDplKSxuLmxlbmd0aCYmKHImJihyW2ldPWUrYSksLTEhPT10LmluZGV4T2YoXCJzaG9ydFwiKSYmKGElPXMsYSE9PWElKHMvMikmJihhPTA+YT9hK3M6YS1zKSksLTEhPT10LmluZGV4T2YoXCJfY3dcIikmJjA+YT9hPShhKzk5OTk5OTk5OTkqcyklcy0oMHxhL3MpKnM6LTEhPT10LmluZGV4T2YoXCJjY3dcIikmJmE+MCYmKGE9KGEtOTk5OTk5OTk5OSpzKSVzLSgwfGEvcykqcykpLG89ZSthKSxsPm8mJm8+LWwmJihvPTApLG99LG5lPXthcXVhOlswLDI1NSwyNTVdLGxpbWU6WzAsMjU1LDBdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLGJsYWNrOlswLDAsMF0sbWFyb29uOlsxMjgsMCwwXSx0ZWFsOlswLDEyOCwxMjhdLGJsdWU6WzAsMCwyNTVdLG5hdnk6WzAsMCwxMjhdLHdoaXRlOlsyNTUsMjU1LDI1NV0sZnVjaHNpYTpbMjU1LDAsMjU1XSxvbGl2ZTpbMTI4LDEyOCwwXSx5ZWxsb3c6WzI1NSwyNTUsMF0sb3JhbmdlOlsyNTUsMTY1LDBdLGdyYXk6WzEyOCwxMjgsMTI4XSxwdXJwbGU6WzEyOCwwLDEyOF0sZ3JlZW46WzAsMTI4LDBdLHJlZDpbMjU1LDAsMF0scGluazpbMjU1LDE5MiwyMDNdLGN5YW46WzAsMjU1LDI1NV0sdHJhbnNwYXJlbnQ6WzI1NSwyNTUsMjU1LDBdfSxhZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQ9MD50P3QrMTp0PjE/dC0xOnQsMHwyNTUqKDE+Nip0P2UrNiooaS1lKSp0Oi41PnQ/aToyPjMqdD9lKzYqKGktZSkqKDIvMy10KTplKSsuNX0sb2U9ZnVuY3Rpb24odCl7dmFyIGUsaSxyLHMsbixhO3JldHVybiB0JiZcIlwiIT09dD9cIm51bWJlclwiPT10eXBlb2YgdD9bdD4+MTYsMjU1JnQ+PjgsMjU1JnRdOihcIixcIj09PXQuY2hhckF0KHQubGVuZ3RoLTEpJiYodD10LnN1YnN0cigwLHQubGVuZ3RoLTEpKSxuZVt0XT9uZVt0XTpcIiNcIj09PXQuY2hhckF0KDApPyg0PT09dC5sZW5ndGgmJihlPXQuY2hhckF0KDEpLGk9dC5jaGFyQXQoMikscj10LmNoYXJBdCgzKSx0PVwiI1wiK2UrZStpK2krcityKSx0PXBhcnNlSW50KHQuc3Vic3RyKDEpLDE2KSxbdD4+MTYsMjU1JnQ+PjgsMjU1JnRdKTpcImhzbFwiPT09dC5zdWJzdHIoMCwzKT8odD10Lm1hdGNoKGQpLHM9TnVtYmVyKHRbMF0pJTM2MC8zNjAsbj1OdW1iZXIodFsxXSkvMTAwLGE9TnVtYmVyKHRbMl0pLzEwMCxpPS41Pj1hP2EqKG4rMSk6YStuLWEqbixlPTIqYS1pLHQubGVuZ3RoPjMmJih0WzNdPU51bWJlcih0WzNdKSksdFswXT1hZShzKzEvMyxlLGkpLHRbMV09YWUocyxlLGkpLHRbMl09YWUocy0xLzMsZSxpKSx0KToodD10Lm1hdGNoKGQpfHxuZS50cmFuc3BhcmVudCx0WzBdPU51bWJlcih0WzBdKSx0WzFdPU51bWJlcih0WzFdKSx0WzJdPU51bWJlcih0WzJdKSx0Lmxlbmd0aD4zJiYodFszXT1OdW1iZXIodFszXSkpLHQpKTpuZS5ibGFja30sbGU9XCIoPzpcXFxcYig/Oig/OnJnYnxyZ2JhfGhzbHxoc2xhKVxcXFwoLis/XFxcXCkpfFxcXFxCIy4rP1xcXFxiXCI7Zm9yKGwgaW4gbmUpbGUrPVwifFwiK2wrXCJcXFxcYlwiO2xlPVJlZ0V4cChsZStcIilcIixcImdpXCIpO3ZhciBoZT1mdW5jdGlvbih0LGUsaSxyKXtpZihudWxsPT10KXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdH07dmFyIHMsbj1lPyh0Lm1hdGNoKGxlKXx8W1wiXCJdKVswXTpcIlwiLGE9dC5zcGxpdChuKS5qb2luKFwiXCIpLm1hdGNoKGcpfHxbXSxvPXQuc3Vic3RyKDAsdC5pbmRleE9mKGFbMF0pKSxsPVwiKVwiPT09dC5jaGFyQXQodC5sZW5ndGgtMSk/XCIpXCI6XCJcIixoPS0xIT09dC5pbmRleE9mKFwiIFwiKT9cIiBcIjpcIixcIix1PWEubGVuZ3RoLGY9dT4wP2FbMF0ucmVwbGFjZShkLFwiXCIpOlwiXCI7cmV0dXJuIHU/cz1lP2Z1bmN0aW9uKHQpe3ZhciBlLF8scCxjO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXQrPWY7ZWxzZSBpZihyJiZELnRlc3QodCkpe2ZvcihjPXQucmVwbGFjZShELFwifFwiKS5zcGxpdChcInxcIikscD0wO2MubGVuZ3RoPnA7cCsrKWNbcF09cyhjW3BdKTtyZXR1cm4gYy5qb2luKFwiLFwiKX1pZihlPSh0Lm1hdGNoKGxlKXx8W25dKVswXSxfPXQuc3BsaXQoZSkuam9pbihcIlwiKS5tYXRjaChnKXx8W10scD1fLmxlbmd0aCx1PnAtLSlmb3IoO3U+KytwOylfW3BdPWk/X1swfChwLTEpLzJdOmFbcF07cmV0dXJuIG8rXy5qb2luKGgpK2grZStsKygtMSE9PXQuaW5kZXhPZihcImluc2V0XCIpP1wiIGluc2V0XCI6XCJcIil9OmZ1bmN0aW9uKHQpe3ZhciBlLG4sXztpZihcIm51bWJlclwiPT10eXBlb2YgdCl0Kz1mO2Vsc2UgaWYociYmRC50ZXN0KHQpKXtmb3Iobj10LnJlcGxhY2UoRCxcInxcIikuc3BsaXQoXCJ8XCIpLF89MDtuLmxlbmd0aD5fO18rKyluW19dPXMobltfXSk7cmV0dXJuIG4uam9pbihcIixcIil9aWYoZT10Lm1hdGNoKGcpfHxbXSxfPWUubGVuZ3RoLHU+Xy0tKWZvcig7dT4rK187KWVbX109aT9lWzB8KF8tMSkvMl06YVtfXTtyZXR1cm4gbytlLmpvaW4oaCkrbH06ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD10LnNwbGl0KFwiLFwiKSxmdW5jdGlvbihlLGkscixzLG4sYSxvKXt2YXIgbCxoPShpK1wiXCIpLnNwbGl0KFwiIFwiKTtmb3Iobz17fSxsPTA7ND5sO2wrKylvW3RbbF1dPWhbbF09aFtsXXx8aFsobC0xKS8yPj4wXTtyZXR1cm4gcy5wYXJzZShlLG8sbixhKX19LGZlPShFLl9zZXRQbHVnaW5SYXRpbz1mdW5jdGlvbih0KXt0aGlzLnBsdWdpbi5zZXRSYXRpbyh0KTtmb3IodmFyIGUsaSxyLHMsbj10aGlzLmRhdGEsYT1uLnByb3h5LG89bi5maXJzdE1QVCxsPTFlLTY7bzspZT1hW28udl0sby5yP2U9TWF0aC5yb3VuZChlKTpsPmUmJmU+LWwmJihlPTApLG8udFtvLnBdPWUsbz1vLl9uZXh0O2lmKG4uYXV0b1JvdGF0ZSYmKG4uYXV0b1JvdGF0ZS5yb3RhdGlvbj1hLnJvdGF0aW9uKSwxPT09dClmb3Iobz1uLmZpcnN0TVBUO287KXtpZihpPW8udCxpLnR5cGUpe2lmKDE9PT1pLnR5cGUpe2ZvcihzPWkueHMwK2kucytpLnhzMSxyPTE7aS5sPnI7cisrKXMrPWlbXCJ4blwiK3JdK2lbXCJ4c1wiKyhyKzEpXTtpLmU9c319ZWxzZSBpLmU9aS5zK2kueHMwO289by5fbmV4dH19LGZ1bmN0aW9uKHQsZSxpLHIscyl7dGhpcy50PXQsdGhpcy5wPWUsdGhpcy52PWksdGhpcy5yPXMsciYmKHIuX3ByZXY9dGhpcyx0aGlzLl9uZXh0PXIpfSksX2U9KEUuX3BhcnNlVG9Qcm94eT1mdW5jdGlvbih0LGUsaSxyLHMsbil7dmFyIGEsbyxsLGgsdSxmPXIsXz17fSxwPXt9LGM9aS5fdHJhbnNmb3JtLGQ9Tjtmb3IoaS5fdHJhbnNmb3JtPW51bGwsTj1lLHI9dT1pLnBhcnNlKHQsZSxyLHMpLE49ZCxuJiYoaS5fdHJhbnNmb3JtPWMsZiYmKGYuX3ByZXY9bnVsbCxmLl9wcmV2JiYoZi5fcHJldi5fbmV4dD1udWxsKSkpO3ImJnIhPT1mOyl7aWYoMT49ci50eXBlJiYobz1yLnAscFtvXT1yLnMrci5jLF9bb109ci5zLG58fChoPW5ldyBmZShyLFwic1wiLG8saCxyLnIpLHIuYz0wKSwxPT09ci50eXBlKSlmb3IoYT1yLmw7LS1hPjA7KWw9XCJ4blwiK2Esbz1yLnArXCJfXCIrbCxwW29dPXIuZGF0YVtsXSxfW29dPXJbbF0sbnx8KGg9bmV3IGZlKHIsbCxvLGgsci5yeHBbbF0pKTtyPXIuX25leHR9cmV0dXJue3Byb3h5Ol8sZW5kOnAsZmlyc3RNUFQ6aCxwdDp1fX0sRS5DU1NQcm9wVHdlZW49ZnVuY3Rpb24odCxlLHIscyxhLG8sbCxoLHUsZixfKXt0aGlzLnQ9dCx0aGlzLnA9ZSx0aGlzLnM9cix0aGlzLmM9cyx0aGlzLm49bHx8ZSx0IGluc3RhbmNlb2YgX2V8fG4ucHVzaCh0aGlzLm4pLHRoaXMucj1oLHRoaXMudHlwZT1vfHwwLHUmJih0aGlzLnByPXUsaT0hMCksdGhpcy5iPXZvaWQgMD09PWY/cjpmLHRoaXMuZT12b2lkIDA9PT1fP3IrczpfLGEmJih0aGlzLl9uZXh0PWEsYS5fcHJldj10aGlzKX0pLHBlPWEucGFyc2VDb21wbGV4PWZ1bmN0aW9uKHQsZSxpLHIscyxuLGEsbyxsLHUpe2k9aXx8bnx8XCJcIixhPW5ldyBfZSh0LGUsMCwwLGEsdT8yOjEsbnVsbCwhMSxvLGkscikscis9XCJcIjt2YXIgZixfLHAsYyxnLHYseSxULHcseCxQLFMsQz1pLnNwbGl0KFwiLCBcIikuam9pbihcIixcIikuc3BsaXQoXCIgXCIpLFI9ci5zcGxpdChcIiwgXCIpLmpvaW4oXCIsXCIpLnNwbGl0KFwiIFwiKSxrPUMubGVuZ3RoLEE9aCE9PSExO2ZvcigoLTEhPT1yLmluZGV4T2YoXCIsXCIpfHwtMSE9PWkuaW5kZXhPZihcIixcIikpJiYoQz1DLmpvaW4oXCIgXCIpLnJlcGxhY2UoRCxcIiwgXCIpLnNwbGl0KFwiIFwiKSxSPVIuam9pbihcIiBcIikucmVwbGFjZShELFwiLCBcIikuc3BsaXQoXCIgXCIpLGs9Qy5sZW5ndGgpLGshPT1SLmxlbmd0aCYmKEM9KG58fFwiXCIpLnNwbGl0KFwiIFwiKSxrPUMubGVuZ3RoKSxhLnBsdWdpbj1sLGEuc2V0UmF0aW89dSxmPTA7az5mO2YrKylpZihjPUNbZl0sZz1SW2ZdLFQ9cGFyc2VGbG9hdChjKSxUfHwwPT09VClhLmFwcGVuZFh0cmEoXCJcIixULGllKGcsVCksZy5yZXBsYWNlKG0sXCJcIiksQSYmLTEhPT1nLmluZGV4T2YoXCJweFwiKSwhMCk7ZWxzZSBpZihzJiYoXCIjXCI9PT1jLmNoYXJBdCgwKXx8bmVbY118fGIudGVzdChjKSkpUz1cIixcIj09PWcuY2hhckF0KGcubGVuZ3RoLTEpP1wiKSxcIjpcIilcIixjPW9lKGMpLGc9b2UoZyksdz1jLmxlbmd0aCtnLmxlbmd0aD42LHcmJiFZJiYwPT09Z1szXT8oYVtcInhzXCIrYS5sXSs9YS5sP1wiIHRyYW5zcGFyZW50XCI6XCJ0cmFuc3BhcmVudFwiLGEuZT1hLmUuc3BsaXQoUltmXSkuam9pbihcInRyYW5zcGFyZW50XCIpKTooWXx8KHc9ITEpLGEuYXBwZW5kWHRyYSh3P1wicmdiYShcIjpcInJnYihcIixjWzBdLGdbMF0tY1swXSxcIixcIiwhMCwhMCkuYXBwZW5kWHRyYShcIlwiLGNbMV0sZ1sxXS1jWzFdLFwiLFwiLCEwKS5hcHBlbmRYdHJhKFwiXCIsY1syXSxnWzJdLWNbMl0sdz9cIixcIjpTLCEwKSx3JiYoYz00PmMubGVuZ3RoPzE6Y1szXSxhLmFwcGVuZFh0cmEoXCJcIixjLCg0PmcubGVuZ3RoPzE6Z1szXSktYyxTLCExKSkpO2Vsc2UgaWYodj1jLm1hdGNoKGQpKXtpZih5PWcubWF0Y2gobSksIXl8fHkubGVuZ3RoIT09di5sZW5ndGgpcmV0dXJuIGE7Zm9yKHA9MCxfPTA7di5sZW5ndGg+XztfKyspUD12W19dLHg9Yy5pbmRleE9mKFAscCksYS5hcHBlbmRYdHJhKGMuc3Vic3RyKHAseC1wKSxOdW1iZXIoUCksaWUoeVtfXSxQKSxcIlwiLEEmJlwicHhcIj09PWMuc3Vic3RyKHgrUC5sZW5ndGgsMiksMD09PV8pLHA9eCtQLmxlbmd0aDthW1wieHNcIithLmxdKz1jLnN1YnN0cihwKX1lbHNlIGFbXCJ4c1wiK2EubF0rPWEubD9cIiBcIitjOmM7aWYoLTEhPT1yLmluZGV4T2YoXCI9XCIpJiZhLmRhdGEpe2ZvcihTPWEueHMwK2EuZGF0YS5zLGY9MTthLmw+ZjtmKyspUys9YVtcInhzXCIrZl0rYS5kYXRhW1wieG5cIitmXTthLmU9UythW1wieHNcIitmXX1yZXR1cm4gYS5sfHwoYS50eXBlPS0xLGEueHMwPWEuZSksYS54Zmlyc3R8fGF9LGNlPTk7Zm9yKGw9X2UucHJvdG90eXBlLGwubD1sLnByPTA7LS1jZT4wOylsW1wieG5cIitjZV09MCxsW1wieHNcIitjZV09XCJcIjtsLnhzMD1cIlwiLGwuX25leHQ9bC5fcHJldj1sLnhmaXJzdD1sLmRhdGE9bC5wbHVnaW49bC5zZXRSYXRpbz1sLnJ4cD1udWxsLGwuYXBwZW5kWHRyYT1mdW5jdGlvbih0LGUsaSxyLHMsbil7dmFyIGE9dGhpcyxvPWEubDtyZXR1cm4gYVtcInhzXCIrb10rPW4mJm8/XCIgXCIrdDp0fHxcIlwiLGl8fDA9PT1vfHxhLnBsdWdpbj8oYS5sKyssYS50eXBlPWEuc2V0UmF0aW8/MjoxLGFbXCJ4c1wiK2EubF09cnx8XCJcIixvPjA/KGEuZGF0YVtcInhuXCIrb109ZStpLGEucnhwW1wieG5cIitvXT1zLGFbXCJ4blwiK29dPWUsYS5wbHVnaW58fChhLnhmaXJzdD1uZXcgX2UoYSxcInhuXCIrbyxlLGksYS54Zmlyc3R8fGEsMCxhLm4scyxhLnByKSxhLnhmaXJzdC54czA9MCksYSk6KGEuZGF0YT17czplK2l9LGEucnhwPXt9LGEucz1lLGEuYz1pLGEucj1zLGEpKTooYVtcInhzXCIrb10rPWUrKHJ8fFwiXCIpLGEpfTt2YXIgZGU9ZnVuY3Rpb24odCxlKXtlPWV8fHt9LHRoaXMucD1lLnByZWZpeD9WKHQpfHx0OnQsb1t0XT1vW3RoaXMucF09dGhpcyx0aGlzLmZvcm1hdD1lLmZvcm1hdHRlcnx8aGUoZS5kZWZhdWx0VmFsdWUsZS5jb2xvcixlLmNvbGxhcHNpYmxlLGUubXVsdGkpLGUucGFyc2VyJiYodGhpcy5wYXJzZT1lLnBhcnNlciksdGhpcy5jbHJzPWUuY29sb3IsdGhpcy5tdWx0aT1lLm11bHRpLHRoaXMua2V5d29yZD1lLmtleXdvcmQsdGhpcy5kZmx0PWUuZGVmYXVsdFZhbHVlLHRoaXMucHI9ZS5wcmlvcml0eXx8MH0sbWU9RS5fcmVnaXN0ZXJDb21wbGV4U3BlY2lhbFByb3A9ZnVuY3Rpb24odCxlLGkpe1wib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17cGFyc2VyOml9KTt2YXIgcixzLG49dC5zcGxpdChcIixcIiksYT1lLmRlZmF1bHRWYWx1ZTtmb3IoaT1pfHxbYV0scj0wO24ubGVuZ3RoPnI7cisrKWUucHJlZml4PTA9PT1yJiZlLnByZWZpeCxlLmRlZmF1bHRWYWx1ZT1pW3JdfHxhLHM9bmV3IGRlKG5bcl0sZSl9LGdlPWZ1bmN0aW9uKHQpe2lmKCFvW3RdKXt2YXIgZT10LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpK1wiUGx1Z2luXCI7bWUodCx7cGFyc2VyOmZ1bmN0aW9uKHQsaSxyLHMsbixhLGwpe3ZhciBoPSh3aW5kb3cuR3JlZW5Tb2NrR2xvYmFsc3x8d2luZG93KS5jb20uZ3JlZW5zb2NrLnBsdWdpbnNbZV07cmV0dXJuIGg/KGguX2Nzc1JlZ2lzdGVyKCksb1tyXS5wYXJzZSh0LGkscixzLG4sYSxsKSk6KFUoXCJFcnJvcjogXCIrZStcIiBqcyBmaWxlIG5vdCBsb2FkZWQuXCIpLG4pfX0pfX07bD1kZS5wcm90b3R5cGUsbC5wYXJzZUNvbXBsZXg9ZnVuY3Rpb24odCxlLGkscixzLG4pe3ZhciBhLG8sbCxoLHUsZixfPXRoaXMua2V5d29yZDtpZih0aGlzLm11bHRpJiYoRC50ZXN0KGkpfHxELnRlc3QoZSk/KG89ZS5yZXBsYWNlKEQsXCJ8XCIpLnNwbGl0KFwifFwiKSxsPWkucmVwbGFjZShELFwifFwiKS5zcGxpdChcInxcIikpOl8mJihvPVtlXSxsPVtpXSkpLGwpe2ZvcihoPWwubGVuZ3RoPm8ubGVuZ3RoP2wubGVuZ3RoOm8ubGVuZ3RoLGE9MDtoPmE7YSsrKWU9b1thXT1vW2FdfHx0aGlzLmRmbHQsaT1sW2FdPWxbYV18fHRoaXMuZGZsdCxfJiYodT1lLmluZGV4T2YoXyksZj1pLmluZGV4T2YoXyksdSE9PWYmJihpPS0xPT09Zj9sOm8saVthXSs9XCIgXCIrXykpO2U9by5qb2luKFwiLCBcIiksaT1sLmpvaW4oXCIsIFwiKX1yZXR1cm4gcGUodCx0aGlzLnAsZSxpLHRoaXMuY2xycyx0aGlzLmRmbHQscix0aGlzLnByLHMsbil9LGwucGFyc2U9ZnVuY3Rpb24odCxlLGkscixuLGEpe3JldHVybiB0aGlzLnBhcnNlQ29tcGxleCh0LnN0eWxlLHRoaXMuZm9ybWF0KHEodCx0aGlzLnAscywhMSx0aGlzLmRmbHQpKSx0aGlzLmZvcm1hdChlKSxuLGEpfSxhLnJlZ2lzdGVyU3BlY2lhbFByb3A9ZnVuY3Rpb24odCxlLGkpe21lKHQse3BhcnNlcjpmdW5jdGlvbih0LHIscyxuLGEsbyl7dmFyIGw9bmV3IF9lKHQscywwLDAsYSwyLHMsITEsaSk7cmV0dXJuIGwucGx1Z2luPW8sbC5zZXRSYXRpbz1lKHQscixuLl90d2VlbixzKSxsfSxwcmlvcml0eTppfSl9O3ZhciB2ZT1cInNjYWxlWCxzY2FsZVksc2NhbGVaLHgseSx6LHNrZXdYLHNrZXdZLHJvdGF0aW9uLHJvdGF0aW9uWCxyb3RhdGlvblkscGVyc3BlY3RpdmVcIi5zcGxpdChcIixcIikseWU9VihcInRyYW5zZm9ybVwiKSxUZT1XK1widHJhbnNmb3JtXCIsd2U9VihcInRyYW5zZm9ybU9yaWdpblwiKSx4ZT1udWxsIT09VihcInBlcnNwZWN0aXZlXCIpLGJlPUUuVHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5za2V3WT0wfSxQZT1FLmdldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUsaSxyKXtpZih0Ll9nc1RyYW5zZm9ybSYmaSYmIXIpcmV0dXJuIHQuX2dzVHJhbnNmb3JtO3ZhciBzLG4sbyxsLGgsdSxmLF8scCxjLGQsbSxnLHY9aT90Ll9nc1RyYW5zZm9ybXx8bmV3IGJlOm5ldyBiZSx5PTA+di5zY2FsZVgsVD0yZS01LHc9MWU1LHg9MTc5Ljk5LGI9eCpNLFA9eGU/cGFyc2VGbG9hdChxKHQsd2UsZSwhMSxcIjAgMCAwXCIpLnNwbGl0KFwiIFwiKVsyXSl8fHYuek9yaWdpbnx8MDowO2Zvcih5ZT9zPXEodCxUZSxlLCEwKTp0LmN1cnJlbnRTdHlsZSYmKHM9dC5jdXJyZW50U3R5bGUuZmlsdGVyLm1hdGNoKEEpLHM9cyYmND09PXMubGVuZ3RoP1tzWzBdLnN1YnN0cig0KSxOdW1iZXIoc1syXS5zdWJzdHIoNCkpLE51bWJlcihzWzFdLnN1YnN0cig0KSksc1szXS5zdWJzdHIoNCksdi54fHwwLHYueXx8MF0uam9pbihcIixcIik6XCJcIiksbj0oc3x8XCJcIikubWF0Y2goLyg/OlxcLXxcXGIpW1xcZFxcLVxcLmVdK1xcYi9naSl8fFtdLG89bi5sZW5ndGg7LS1vPi0xOylsPU51bWJlcihuW29dKSxuW29dPShoPWwtKGx8PTApKT8oMHxoKncrKDA+aD8tLjU6LjUpKS93K2w6bDtpZigxNj09PW4ubGVuZ3RoKXt2YXIgUz1uWzhdLEM9bls5XSxSPW5bMTBdLGs9blsxMl0sTz1uWzEzXSxEPW5bMTRdO2lmKHYuek9yaWdpbiYmKEQ9LXYuek9yaWdpbixrPVMqRC1uWzEyXSxPPUMqRC1uWzEzXSxEPVIqRCt2LnpPcmlnaW4tblsxNF0pLCFpfHxyfHxudWxsPT12LnJvdGF0aW9uWCl7dmFyIE4sWCx6LEksRSxGLFksQj1uWzBdLFU9blsxXSxXPW5bMl0saj1uWzNdLFY9bls0XSxIPW5bNV0sUT1uWzZdLFo9bls3XSwkPW5bMTFdLEc9TWF0aC5hdGFuMihRLFIpLEs9LWI+R3x8Rz5iO3Yucm90YXRpb25YPUcqTCxHJiYoST1NYXRoLmNvcygtRyksRT1NYXRoLnNpbigtRyksTj1WKkkrUypFLFg9SCpJK0MqRSx6PVEqSStSKkUsUz1WKi1FK1MqSSxDPUgqLUUrQypJLFI9USotRStSKkksJD1aKi1FKyQqSSxWPU4sSD1YLFE9eiksRz1NYXRoLmF0YW4yKFMsQiksdi5yb3RhdGlvblk9RypMLEcmJihGPS1iPkd8fEc+YixJPU1hdGguY29zKC1HKSxFPU1hdGguc2luKC1HKSxOPUIqSS1TKkUsWD1VKkktQypFLHo9VypJLVIqRSxDPVUqRStDKkksUj1XKkUrUipJLCQ9aipFKyQqSSxCPU4sVT1YLFc9eiksRz1NYXRoLmF0YW4yKFUsSCksdi5yb3RhdGlvbj1HKkwsRyYmKFk9LWI+R3x8Rz5iLEk9TWF0aC5jb3MoLUcpLEU9TWF0aC5zaW4oLUcpLEI9QipJK1YqRSxYPVUqSStIKkUsSD1VKi1FK0gqSSxRPVcqLUUrUSpJLFU9WCksWSYmSz92LnJvdGF0aW9uPXYucm90YXRpb25YPTA6WSYmRj92LnJvdGF0aW9uPXYucm90YXRpb25ZPTA6RiYmSyYmKHYucm90YXRpb25ZPXYucm90YXRpb25YPTApLHYuc2NhbGVYPSgwfE1hdGguc3FydChCKkIrVSpVKSp3Ky41KS93LHYuc2NhbGVZPSgwfE1hdGguc3FydChIKkgrQypDKSp3Ky41KS93LHYuc2NhbGVaPSgwfE1hdGguc3FydChRKlErUipSKSp3Ky41KS93LHYuc2tld1g9MCx2LnBlcnNwZWN0aXZlPSQ/MS8oMD4kPy0kOiQpOjAsdi54PWssdi55PU8sdi56PUR9fWVsc2UgaWYoISh4ZSYmIXImJm4ubGVuZ3RoJiZ2Lng9PT1uWzRdJiZ2Lnk9PT1uWzVdJiYodi5yb3RhdGlvblh8fHYucm90YXRpb25ZKXx8dm9pZCAwIT09di54JiZcIm5vbmVcIj09PXEodCxcImRpc3BsYXlcIixlKSkpe3ZhciBKPW4ubGVuZ3RoPj02LHRlPUo/blswXToxLGVlPW5bMV18fDAsaWU9blsyXXx8MCxyZT1KP25bM106MTt2Lng9bls0XXx8MCx2Lnk9bls1XXx8MCx1PU1hdGguc3FydCh0ZSp0ZStlZSplZSksZj1NYXRoLnNxcnQocmUqcmUraWUqaWUpLF89dGV8fGVlP01hdGguYXRhbjIoZWUsdGUpKkw6di5yb3RhdGlvbnx8MCxwPWllfHxyZT9NYXRoLmF0YW4yKGllLHJlKSpMK186di5za2V3WHx8MCxjPXUtTWF0aC5hYnModi5zY2FsZVh8fDApLGQ9Zi1NYXRoLmFicyh2LnNjYWxlWXx8MCksTWF0aC5hYnMocCk+OTAmJjI3MD5NYXRoLmFicyhwKSYmKHk/KHUqPS0xLHArPTA+PV8/MTgwOi0xODAsXys9MD49Xz8xODA6LTE4MCk6KGYqPS0xLHArPTA+PXA/MTgwOi0xODApKSxtPShfLXYucm90YXRpb24pJTE4MCxnPShwLXYuc2tld1gpJTE4MCwodm9pZCAwPT09di5za2V3WHx8Yz5UfHwtVD5jfHxkPlR8fC1UPmR8fG0+LXgmJng+bSYmZmFsc2V8bSp3fHxnPi14JiZ4PmcmJmZhbHNlfGcqdykmJih2LnNjYWxlWD11LHYuc2NhbGVZPWYsdi5yb3RhdGlvbj1fLHYuc2tld1g9cCkseGUmJih2LnJvdGF0aW9uWD12LnJvdGF0aW9uWT12Lno9MCx2LnBlcnNwZWN0aXZlPXBhcnNlRmxvYXQoYS5kZWZhdWx0VHJhbnNmb3JtUGVyc3BlY3RpdmUpfHwwLHYuc2NhbGVaPTEpfXYuek9yaWdpbj1QO2ZvcihvIGluIHYpVD52W29dJiZ2W29dPi1UJiYodltvXT0wKTtyZXR1cm4gaSYmKHQuX2dzVHJhbnNmb3JtPXYpLHZ9LFNlPWZ1bmN0aW9uKHQpe3ZhciBlLGkscj10aGlzLmRhdGEscz0tci5yb3RhdGlvbipNLG49cytyLnNrZXdYKk0sYT0xZTUsbz0oMHxNYXRoLmNvcyhzKSpyLnNjYWxlWCphKS9hLGw9KDB8TWF0aC5zaW4ocykqci5zY2FsZVgqYSkvYSxoPSgwfE1hdGguc2luKG4pKi1yLnNjYWxlWSphKS9hLHU9KDB8TWF0aC5jb3Mobikqci5zY2FsZVkqYSkvYSxmPXRoaXMudC5zdHlsZSxfPXRoaXMudC5jdXJyZW50U3R5bGU7aWYoXyl7aT1sLGw9LWgsaD0taSxlPV8uZmlsdGVyLGYuZmlsdGVyPVwiXCI7dmFyIHAsZCxtPXRoaXMudC5vZmZzZXRXaWR0aCxnPXRoaXMudC5vZmZzZXRIZWlnaHQsdj1cImFic29sdXRlXCIhPT1fLnBvc2l0aW9uLHc9XCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT1cIitvK1wiLCBNMTI9XCIrbCtcIiwgTTIxPVwiK2grXCIsIE0yMj1cIit1LHg9ci54LGI9ci55O2lmKG51bGwhPXIub3gmJihwPShyLm94cD8uMDEqbSpyLm94OnIub3gpLW0vMixkPShyLm95cD8uMDEqZypyLm95OnIub3kpLWcvMix4Kz1wLShwKm8rZCpsKSxiKz1kLShwKmgrZCp1KSksdj8ocD1tLzIsZD1nLzIsdys9XCIsIER4PVwiKyhwLShwKm8rZCpsKSt4KStcIiwgRHk9XCIrKGQtKHAqaCtkKnUpK2IpK1wiKVwiKTp3Kz1cIiwgc2l6aW5nTWV0aG9kPSdhdXRvIGV4cGFuZCcpXCIsZi5maWx0ZXI9LTEhPT1lLmluZGV4T2YoXCJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5NYXRyaXgoXCIpP2UucmVwbGFjZShPLHcpOncrXCIgXCIrZSwoMD09PXR8fDE9PT10KSYmMT09PW8mJjA9PT1sJiYwPT09aCYmMT09PXUmJih2JiYtMT09PXcuaW5kZXhPZihcIkR4PTAsIER5PTBcIil8fFQudGVzdChlKSYmMTAwIT09cGFyc2VGbG9hdChSZWdFeHAuJDEpfHwtMT09PWUuaW5kZXhPZihcImdyYWRpZW50KFwiJiZlLmluZGV4T2YoXCJBbHBoYVwiKSkmJmYucmVtb3ZlQXR0cmlidXRlKFwiZmlsdGVyXCIpKSwhdil7dmFyIFAsUyxDLFI9OD5jPzE6LTE7Zm9yKHA9ci5pZU9mZnNldFh8fDAsZD1yLmllT2Zmc2V0WXx8MCxyLmllT2Zmc2V0WD1NYXRoLnJvdW5kKChtLSgoMD5vPy1vOm8pKm0rKDA+bD8tbDpsKSpnKSkvMit4KSxyLmllT2Zmc2V0WT1NYXRoLnJvdW5kKChnLSgoMD51Py11OnUpKmcrKDA+aD8taDpoKSptKSkvMitiKSxjZT0wOzQ+Y2U7Y2UrKylTPUpbY2VdLFA9X1tTXSxpPS0xIT09UC5pbmRleE9mKFwicHhcIik/cGFyc2VGbG9hdChQKTpRKHRoaXMudCxTLHBhcnNlRmxvYXQoUCksUC5yZXBsYWNlKHksXCJcIikpfHwwLEM9aSE9PXJbU10/Mj5jZT8tci5pZU9mZnNldFg6LXIuaWVPZmZzZXRZOjI+Y2U/cC1yLmllT2Zmc2V0WDpkLXIuaWVPZmZzZXRZLGZbU109KHJbU109TWF0aC5yb3VuZChpLUMqKDA9PT1jZXx8Mj09PWNlPzE6UikpKStcInB4XCJ9fX0sQ2U9RS5zZXQzRFRyYW5zZm9ybVJhdGlvPWZ1bmN0aW9uKHQpe3ZhciBlLGkscixzLG4sYSxvLGwsaCx1LGYscCxjLGQsbSxnLHYseSxULHcseCxiLFAsUz10aGlzLmRhdGEsQz10aGlzLnQuc3R5bGUsUj1TLnJvdGF0aW9uKk0saz1TLnNjYWxlWCxBPVMuc2NhbGVZLE89Uy5zY2FsZVosRD1TLnBlcnNwZWN0aXZlO2lmKCEoMSE9PXQmJjAhPT10fHxcImF1dG9cIiE9PVMuZm9yY2UzRHx8Uy5yb3RhdGlvbll8fFMucm90YXRpb25YfHwxIT09T3x8RHx8Uy56KSlyZXR1cm4gUmUuY2FsbCh0aGlzLHQpLHZvaWQgMDtpZihfKXt2YXIgTD0xZS00O0w+ayYmaz4tTCYmKGs9Tz0yZS01KSxMPkEmJkE+LUwmJihBPU89MmUtNSksIUR8fFMuenx8Uy5yb3RhdGlvblh8fFMucm90YXRpb25ZfHwoRD0wKX1pZihSfHxTLnNrZXdYKXk9TWF0aC5jb3MoUiksVD1NYXRoLnNpbihSKSxlPXksbj1ULFMuc2tld1gmJihSLT1TLnNrZXdYKk0seT1NYXRoLmNvcyhSKSxUPU1hdGguc2luKFIpLFwic2ltcGxlXCI9PT1TLnNrZXdUeXBlJiYodz1NYXRoLnRhbihTLnNrZXdYKk0pLHc9TWF0aC5zcXJ0KDErdyp3KSx5Kj13LFQqPXcpKSxpPS1ULGE9eTtlbHNle2lmKCEoUy5yb3RhdGlvbll8fFMucm90YXRpb25YfHwxIT09T3x8RCkpcmV0dXJuIENbeWVdPVwidHJhbnNsYXRlM2QoXCIrUy54K1wicHgsXCIrUy55K1wicHgsXCIrUy56K1wicHgpXCIrKDEhPT1rfHwxIT09QT9cIiBzY2FsZShcIitrK1wiLFwiK0ErXCIpXCI6XCJcIiksdm9pZCAwO2U9YT0xLGk9bj0wfWY9MSxyPXM9bz1sPWg9dT1wPWM9ZD0wLG09RD8tMS9EOjAsZz1TLnpPcmlnaW4sdj0xZTUsUj1TLnJvdGF0aW9uWSpNLFImJih5PU1hdGguY29zKFIpLFQ9TWF0aC5zaW4oUiksaD1mKi1ULGM9bSotVCxyPWUqVCxvPW4qVCxmKj15LG0qPXksZSo9eSxuKj15KSxSPVMucm90YXRpb25YKk0sUiYmKHk9TWF0aC5jb3MoUiksVD1NYXRoLnNpbihSKSx3PWkqeStyKlQseD1hKnkrbypULGI9dSp5K2YqVCxQPWQqeSttKlQscj1pKi1UK3IqeSxvPWEqLVQrbyp5LGY9dSotVCtmKnksbT1kKi1UK20qeSxpPXcsYT14LHU9YixkPVApLDEhPT1PJiYocio9TyxvKj1PLGYqPU8sbSo9TyksMSE9PUEmJihpKj1BLGEqPUEsdSo9QSxkKj1BKSwxIT09ayYmKGUqPWssbio9ayxoKj1rLGMqPWspLGcmJihwLT1nLHM9cipwLGw9bypwLHA9ZipwK2cpLHM9KHc9KHMrPVMueCktKHN8PTApKT8oMHx3KnYrKDA+dz8tLjU6LjUpKS92K3M6cyxsPSh3PShsKz1TLnkpLShsfD0wKSk/KDB8dyp2KygwPnc/LS41Oi41KSkvditsOmwscD0odz0ocCs9Uy56KS0ocHw9MCkpPygwfHcqdisoMD53Py0uNTouNSkpL3YrcDpwLENbeWVdPVwibWF0cml4M2QoXCIrWygwfGUqdikvdiwoMHxuKnYpL3YsKDB8aCp2KS92LCgwfGMqdikvdiwoMHxpKnYpL3YsKDB8YSp2KS92LCgwfHUqdikvdiwoMHxkKnYpL3YsKDB8cip2KS92LCgwfG8qdikvdiwoMHxmKnYpL3YsKDB8bSp2KS92LHMsbCxwLEQ/MSstcC9EOjFdLmpvaW4oXCIsXCIpK1wiKVwifSxSZT1FLnNldDJEVHJhbnNmb3JtUmF0aW89ZnVuY3Rpb24odCl7dmFyIGUsaSxyLHMsbixhPXRoaXMuZGF0YSxvPXRoaXMudCxsPW8uc3R5bGU7cmV0dXJuIGEucm90YXRpb25YfHxhLnJvdGF0aW9uWXx8YS56fHxhLmZvcmNlM0Q9PT0hMHx8XCJhdXRvXCI9PT1hLmZvcmNlM0QmJjEhPT10JiYwIT09dD8odGhpcy5zZXRSYXRpbz1DZSxDZS5jYWxsKHRoaXMsdCksdm9pZCAwKTooYS5yb3RhdGlvbnx8YS5za2V3WD8oZT1hLnJvdGF0aW9uKk0saT1lLWEuc2tld1gqTSxyPTFlNSxzPWEuc2NhbGVYKnIsbj1hLnNjYWxlWSpyLGxbeWVdPVwibWF0cml4KFwiKygwfE1hdGguY29zKGUpKnMpL3IrXCIsXCIrKDB8TWF0aC5zaW4oZSkqcykvcitcIixcIisoMHxNYXRoLnNpbihpKSotbikvcitcIixcIisoMHxNYXRoLmNvcyhpKSpuKS9yK1wiLFwiK2EueCtcIixcIithLnkrXCIpXCIpOmxbeWVdPVwibWF0cml4KFwiK2Euc2NhbGVYK1wiLDAsMCxcIithLnNjYWxlWStcIixcIithLngrXCIsXCIrYS55K1wiKVwiLHZvaWQgMCl9O21lKFwidHJhbnNmb3JtLHNjYWxlLHNjYWxlWCxzY2FsZVksc2NhbGVaLHgseSx6LHJvdGF0aW9uLHJvdGF0aW9uWCxyb3RhdGlvblkscm90YXRpb25aLHNrZXdYLHNrZXdZLHNob3J0Um90YXRpb24sc2hvcnRSb3RhdGlvblgsc2hvcnRSb3RhdGlvblksc2hvcnRSb3RhdGlvblosdHJhbnNmb3JtT3JpZ2luLHRyYW5zZm9ybVBlcnNwZWN0aXZlLGRpcmVjdGlvbmFsUm90YXRpb24scGFyc2VUcmFuc2Zvcm0sZm9yY2UzRCxza2V3VHlwZVwiLHtwYXJzZXI6ZnVuY3Rpb24odCxlLGkscixuLG8sbCl7aWYoci5fdHJhbnNmb3JtKXJldHVybiBuO3ZhciBoLHUsZixfLHAsYyxkLG09ci5fdHJhbnNmb3JtPVBlKHQscywhMCxsLnBhcnNlVHJhbnNmb3JtKSxnPXQuc3R5bGUsdj0xZS02LHk9dmUubGVuZ3RoLFQ9bCx3PXt9O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBULnRyYW5zZm9ybSYmeWUpZj16LnN0eWxlLGZbeWVdPVQudHJhbnNmb3JtLGYuZGlzcGxheT1cImJsb2NrXCIsZi5wb3NpdGlvbj1cImFic29sdXRlXCIsWC5ib2R5LmFwcGVuZENoaWxkKHopLGg9UGUoeixudWxsLCExKSxYLmJvZHkucmVtb3ZlQ2hpbGQoeik7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgVCl7aWYoaD17c2NhbGVYOnJlKG51bGwhPVQuc2NhbGVYP1Quc2NhbGVYOlQuc2NhbGUsbS5zY2FsZVgpLHNjYWxlWTpyZShudWxsIT1ULnNjYWxlWT9ULnNjYWxlWTpULnNjYWxlLG0uc2NhbGVZKSxzY2FsZVo6cmUoVC5zY2FsZVosbS5zY2FsZVopLHg6cmUoVC54LG0ueCkseTpyZShULnksbS55KSx6OnJlKFQueixtLnopLHBlcnNwZWN0aXZlOnJlKFQudHJhbnNmb3JtUGVyc3BlY3RpdmUsbS5wZXJzcGVjdGl2ZSl9LGQ9VC5kaXJlY3Rpb25hbFJvdGF0aW9uLG51bGwhPWQpaWYoXCJvYmplY3RcIj09dHlwZW9mIGQpZm9yKGYgaW4gZClUW2ZdPWRbZl07ZWxzZSBULnJvdGF0aW9uPWQ7aC5yb3RhdGlvbj1zZShcInJvdGF0aW9uXCJpbiBUP1Qucm90YXRpb246XCJzaG9ydFJvdGF0aW9uXCJpbiBUP1Quc2hvcnRSb3RhdGlvbitcIl9zaG9ydFwiOlwicm90YXRpb25aXCJpbiBUP1Qucm90YXRpb25aOm0ucm90YXRpb24sbS5yb3RhdGlvbixcInJvdGF0aW9uXCIsdykseGUmJihoLnJvdGF0aW9uWD1zZShcInJvdGF0aW9uWFwiaW4gVD9ULnJvdGF0aW9uWDpcInNob3J0Um90YXRpb25YXCJpbiBUP1Quc2hvcnRSb3RhdGlvblgrXCJfc2hvcnRcIjptLnJvdGF0aW9uWHx8MCxtLnJvdGF0aW9uWCxcInJvdGF0aW9uWFwiLHcpLGgucm90YXRpb25ZPXNlKFwicm90YXRpb25ZXCJpbiBUP1Qucm90YXRpb25ZOlwic2hvcnRSb3RhdGlvbllcImluIFQ/VC5zaG9ydFJvdGF0aW9uWStcIl9zaG9ydFwiOm0ucm90YXRpb25ZfHwwLG0ucm90YXRpb25ZLFwicm90YXRpb25ZXCIsdykpLGguc2tld1g9bnVsbD09VC5za2V3WD9tLnNrZXdYOnNlKFQuc2tld1gsbS5za2V3WCksaC5za2V3WT1udWxsPT1ULnNrZXdZP20uc2tld1k6c2UoVC5za2V3WSxtLnNrZXdZKSwodT1oLnNrZXdZLW0uc2tld1kpJiYoaC5za2V3WCs9dSxoLnJvdGF0aW9uKz11KX1mb3IoeGUmJm51bGwhPVQuZm9yY2UzRCYmKG0uZm9yY2UzRD1ULmZvcmNlM0QsYz0hMCksbS5za2V3VHlwZT1ULnNrZXdUeXBlfHxtLnNrZXdUeXBlfHxhLmRlZmF1bHRTa2V3VHlwZSxwPW0uZm9yY2UzRHx8bS56fHxtLnJvdGF0aW9uWHx8bS5yb3RhdGlvbll8fGguenx8aC5yb3RhdGlvblh8fGgucm90YXRpb25ZfHxoLnBlcnNwZWN0aXZlLHB8fG51bGw9PVQuc2NhbGV8fChoLnNjYWxlWj0xKTstLXk+LTE7KWk9dmVbeV0sXz1oW2ldLW1baV0sKF8+dnx8LXY+X3x8bnVsbCE9TltpXSkmJihjPSEwLG49bmV3IF9lKG0saSxtW2ldLF8sbiksaSBpbiB3JiYobi5lPXdbaV0pLG4ueHMwPTAsbi5wbHVnaW49byxyLl9vdmVyd3JpdGVQcm9wcy5wdXNoKG4ubikpO3JldHVybiBfPVQudHJhbnNmb3JtT3JpZ2luLChffHx4ZSYmcCYmbS56T3JpZ2luKSYmKHllPyhjPSEwLGk9d2UsXz0oX3x8cSh0LGkscywhMSxcIjUwJSA1MCVcIikpK1wiXCIsbj1uZXcgX2UoZyxpLDAsMCxuLC0xLFwidHJhbnNmb3JtT3JpZ2luXCIpLG4uYj1nW2ldLG4ucGx1Z2luPW8seGU/KGY9bS56T3JpZ2luLF89Xy5zcGxpdChcIiBcIiksbS56T3JpZ2luPShfLmxlbmd0aD4yJiYoMD09PWZ8fFwiMHB4XCIhPT1fWzJdKT9wYXJzZUZsb2F0KF9bMl0pOmYpfHwwLG4ueHMwPW4uZT1fWzBdK1wiIFwiKyhfWzFdfHxcIjUwJVwiKStcIiAwcHhcIixuPW5ldyBfZShtLFwiek9yaWdpblwiLDAsMCxuLC0xLG4ubiksbi5iPWYsbi54czA9bi5lPW0uek9yaWdpbik6bi54czA9bi5lPV8pOmVlKF8rXCJcIixtKSksYyYmKHIuX3RyYW5zZm9ybVR5cGU9cHx8Mz09PXRoaXMuX3RyYW5zZm9ybVR5cGU/MzoyKSxufSxwcmVmaXg6ITB9KSxtZShcImJveFNoYWRvd1wiLHtkZWZhdWx0VmFsdWU6XCIwcHggMHB4IDBweCAwcHggIzk5OVwiLHByZWZpeDohMCxjb2xvcjohMCxtdWx0aTohMCxrZXl3b3JkOlwiaW5zZXRcIn0pLG1lKFwiYm9yZGVyUmFkaXVzXCIse2RlZmF1bHRWYWx1ZTpcIjBweFwiLHBhcnNlcjpmdW5jdGlvbih0LGUsaSxuLGEpe2U9dGhpcy5mb3JtYXQoZSk7dmFyIG8sbCxoLHUsZixfLHAsYyxkLG0sZyx2LHksVCx3LHgsYj1bXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIl0sUD10LnN0eWxlO2ZvcihkPXBhcnNlRmxvYXQodC5vZmZzZXRXaWR0aCksbT1wYXJzZUZsb2F0KHQub2Zmc2V0SGVpZ2h0KSxvPWUuc3BsaXQoXCIgXCIpLGw9MDtiLmxlbmd0aD5sO2wrKyl0aGlzLnAuaW5kZXhPZihcImJvcmRlclwiKSYmKGJbbF09VihiW2xdKSksZj11PXEodCxiW2xdLHMsITEsXCIwcHhcIiksLTEhPT1mLmluZGV4T2YoXCIgXCIpJiYodT1mLnNwbGl0KFwiIFwiKSxmPXVbMF0sdT11WzFdKSxfPWg9b1tsXSxwPXBhcnNlRmxvYXQoZiksdj1mLnN1YnN0cigocCtcIlwiKS5sZW5ndGgpLHk9XCI9XCI9PT1fLmNoYXJBdCgxKSx5PyhjPXBhcnNlSW50KF8uY2hhckF0KDApK1wiMVwiLDEwKSxfPV8uc3Vic3RyKDIpLGMqPXBhcnNlRmxvYXQoXyksZz1fLnN1YnN0cigoYytcIlwiKS5sZW5ndGgtKDA+Yz8xOjApKXx8XCJcIik6KGM9cGFyc2VGbG9hdChfKSxnPV8uc3Vic3RyKChjK1wiXCIpLmxlbmd0aCkpLFwiXCI9PT1nJiYoZz1yW2ldfHx2KSxnIT09diYmKFQ9USh0LFwiYm9yZGVyTGVmdFwiLHAsdiksdz1RKHQsXCJib3JkZXJUb3BcIixwLHYpLFwiJVwiPT09Zz8oZj0xMDAqKFQvZCkrXCIlXCIsdT0xMDAqKHcvbSkrXCIlXCIpOlwiZW1cIj09PWc/KHg9USh0LFwiYm9yZGVyTGVmdFwiLDEsXCJlbVwiKSxmPVQveCtcImVtXCIsdT13L3grXCJlbVwiKTooZj1UK1wicHhcIix1PXcrXCJweFwiKSx5JiYoXz1wYXJzZUZsb2F0KGYpK2MrZyxoPXBhcnNlRmxvYXQodSkrYytnKSksYT1wZShQLGJbbF0sZitcIiBcIit1LF8rXCIgXCIraCwhMSxcIjBweFwiLGEpO3JldHVybiBhfSxwcmVmaXg6ITAsZm9ybWF0dGVyOmhlKFwiMHB4IDBweCAwcHggMHB4XCIsITEsITApfSksbWUoXCJiYWNrZ3JvdW5kUG9zaXRpb25cIix7ZGVmYXVsdFZhbHVlOlwiMCAwXCIscGFyc2VyOmZ1bmN0aW9uKHQsZSxpLHIsbixhKXt2YXIgbyxsLGgsdSxmLF8scD1cImJhY2tncm91bmQtcG9zaXRpb25cIixkPXN8fEgodCxudWxsKSxtPXRoaXMuZm9ybWF0KChkP2M/ZC5nZXRQcm9wZXJ0eVZhbHVlKHArXCIteFwiKStcIiBcIitkLmdldFByb3BlcnR5VmFsdWUocCtcIi15XCIpOmQuZ2V0UHJvcGVydHlWYWx1ZShwKTp0LmN1cnJlbnRTdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb25YK1wiIFwiK3QuY3VycmVudFN0eWxlLmJhY2tncm91bmRQb3NpdGlvblkpfHxcIjAgMFwiKSxnPXRoaXMuZm9ybWF0KGUpO2lmKC0xIT09bS5pbmRleE9mKFwiJVwiKSE9KC0xIT09Zy5pbmRleE9mKFwiJVwiKSkmJihfPXEodCxcImJhY2tncm91bmRJbWFnZVwiKS5yZXBsYWNlKEMsXCJcIiksXyYmXCJub25lXCIhPT1fKSl7Zm9yKG89bS5zcGxpdChcIiBcIiksbD1nLnNwbGl0KFwiIFwiKSxJLnNldEF0dHJpYnV0ZShcInNyY1wiLF8pLGg9MjstLWg+LTE7KW09b1toXSx1PS0xIT09bS5pbmRleE9mKFwiJVwiKSx1IT09KC0xIT09bFtoXS5pbmRleE9mKFwiJVwiKSkmJihmPTA9PT1oP3Qub2Zmc2V0V2lkdGgtSS53aWR0aDp0Lm9mZnNldEhlaWdodC1JLmhlaWdodCxvW2hdPXU/cGFyc2VGbG9hdChtKS8xMDAqZitcInB4XCI6MTAwKihwYXJzZUZsb2F0KG0pL2YpK1wiJVwiKTttPW8uam9pbihcIiBcIil9cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4KHQuc3R5bGUsbSxnLG4sYSl9LGZvcm1hdHRlcjplZX0pLG1lKFwiYmFja2dyb3VuZFNpemVcIix7ZGVmYXVsdFZhbHVlOlwiMCAwXCIsZm9ybWF0dGVyOmVlfSksbWUoXCJwZXJzcGVjdGl2ZVwiLHtkZWZhdWx0VmFsdWU6XCIwcHhcIixwcmVmaXg6ITB9KSxtZShcInBlcnNwZWN0aXZlT3JpZ2luXCIse2RlZmF1bHRWYWx1ZTpcIjUwJSA1MCVcIixwcmVmaXg6ITB9KSxtZShcInRyYW5zZm9ybVN0eWxlXCIse3ByZWZpeDohMH0pLG1lKFwiYmFja2ZhY2VWaXNpYmlsaXR5XCIse3ByZWZpeDohMH0pLG1lKFwidXNlclNlbGVjdFwiLHtwcmVmaXg6ITB9KSxtZShcIm1hcmdpblwiLHtwYXJzZXI6dWUoXCJtYXJnaW5Ub3AsbWFyZ2luUmlnaHQsbWFyZ2luQm90dG9tLG1hcmdpbkxlZnRcIil9KSxtZShcInBhZGRpbmdcIix7cGFyc2VyOnVlKFwicGFkZGluZ1RvcCxwYWRkaW5nUmlnaHQscGFkZGluZ0JvdHRvbSxwYWRkaW5nTGVmdFwiKX0pLG1lKFwiY2xpcFwiLHtkZWZhdWx0VmFsdWU6XCJyZWN0KDBweCwwcHgsMHB4LDBweClcIixwYXJzZXI6ZnVuY3Rpb24odCxlLGkscixuLGEpe3ZhciBvLGwsaDtyZXR1cm4gOT5jPyhsPXQuY3VycmVudFN0eWxlLGg9OD5jP1wiIFwiOlwiLFwiLG89XCJyZWN0KFwiK2wuY2xpcFRvcCtoK2wuY2xpcFJpZ2h0K2grbC5jbGlwQm90dG9tK2grbC5jbGlwTGVmdCtcIilcIixlPXRoaXMuZm9ybWF0KGUpLnNwbGl0KFwiLFwiKS5qb2luKGgpKToobz10aGlzLmZvcm1hdChxKHQsdGhpcy5wLHMsITEsdGhpcy5kZmx0KSksZT10aGlzLmZvcm1hdChlKSksdGhpcy5wYXJzZUNvbXBsZXgodC5zdHlsZSxvLGUsbixhKX19KSxtZShcInRleHRTaGFkb3dcIix7ZGVmYXVsdFZhbHVlOlwiMHB4IDBweCAwcHggIzk5OVwiLGNvbG9yOiEwLG11bHRpOiEwfSksbWUoXCJhdXRvUm91bmQsc3RyaWN0VW5pdHNcIix7cGFyc2VyOmZ1bmN0aW9uKHQsZSxpLHIscyl7cmV0dXJuIHN9fSksbWUoXCJib3JkZXJcIix7ZGVmYXVsdFZhbHVlOlwiMHB4IHNvbGlkICMwMDBcIixwYXJzZXI6ZnVuY3Rpb24odCxlLGkscixuLGEpe3JldHVybiB0aGlzLnBhcnNlQ29tcGxleCh0LnN0eWxlLHRoaXMuZm9ybWF0KHEodCxcImJvcmRlclRvcFdpZHRoXCIscywhMSxcIjBweFwiKStcIiBcIitxKHQsXCJib3JkZXJUb3BTdHlsZVwiLHMsITEsXCJzb2xpZFwiKStcIiBcIitxKHQsXCJib3JkZXJUb3BDb2xvclwiLHMsITEsXCIjMDAwXCIpKSx0aGlzLmZvcm1hdChlKSxuLGEpfSxjb2xvcjohMCxmb3JtYXR0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dC5zcGxpdChcIiBcIik7cmV0dXJuIGVbMF0rXCIgXCIrKGVbMV18fFwic29saWRcIikrXCIgXCIrKHQubWF0Y2gobGUpfHxbXCIjMDAwXCJdKVswXX19KSxtZShcImJvcmRlcldpZHRoXCIse3BhcnNlcjp1ZShcImJvcmRlclRvcFdpZHRoLGJvcmRlclJpZ2h0V2lkdGgsYm9yZGVyQm90dG9tV2lkdGgsYm9yZGVyTGVmdFdpZHRoXCIpfSksbWUoXCJmbG9hdCxjc3NGbG9hdCxzdHlsZUZsb2F0XCIse3BhcnNlcjpmdW5jdGlvbih0LGUsaSxyLHMpe3ZhciBuPXQuc3R5bGUsYT1cImNzc0Zsb2F0XCJpbiBuP1wiY3NzRmxvYXRcIjpcInN0eWxlRmxvYXRcIjtyZXR1cm4gbmV3IF9lKG4sYSwwLDAscywtMSxpLCExLDAsblthXSxlKX19KTt2YXIga2U9ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLnQscj1pLmZpbHRlcnx8cSh0aGlzLmRhdGEsXCJmaWx0ZXJcIikscz0wfHRoaXMucyt0aGlzLmMqdDsxMDA9PT1zJiYoLTE9PT1yLmluZGV4T2YoXCJhdHJpeChcIikmJi0xPT09ci5pbmRleE9mKFwicmFkaWVudChcIikmJi0xPT09ci5pbmRleE9mKFwib2FkZXIoXCIpPyhpLnJlbW92ZUF0dHJpYnV0ZShcImZpbHRlclwiKSxlPSFxKHRoaXMuZGF0YSxcImZpbHRlclwiKSk6KGkuZmlsdGVyPXIucmVwbGFjZSh4LFwiXCIpLGU9ITApKSxlfHwodGhpcy54bjEmJihpLmZpbHRlcj1yPXJ8fFwiYWxwaGEob3BhY2l0eT1cIitzK1wiKVwiKSwtMT09PXIuaW5kZXhPZihcInBhY2l0eVwiKT8wPT09cyYmdGhpcy54bjF8fChpLmZpbHRlcj1yK1wiIGFscGhhKG9wYWNpdHk9XCIrcytcIilcIik6aS5maWx0ZXI9ci5yZXBsYWNlKFQsXCJvcGFjaXR5PVwiK3MpKX07bWUoXCJvcGFjaXR5LGFscGhhLGF1dG9BbHBoYVwiLHtkZWZhdWx0VmFsdWU6XCIxXCIscGFyc2VyOmZ1bmN0aW9uKHQsZSxpLHIsbixhKXt2YXIgbz1wYXJzZUZsb2F0KHEodCxcIm9wYWNpdHlcIixzLCExLFwiMVwiKSksbD10LnN0eWxlLGg9XCJhdXRvQWxwaGFcIj09PWk7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJlwiPVwiPT09ZS5jaGFyQXQoMSkmJihlPShcIi1cIj09PWUuY2hhckF0KDApPy0xOjEpKnBhcnNlRmxvYXQoZS5zdWJzdHIoMikpK28pLGgmJjE9PT1vJiZcImhpZGRlblwiPT09cSh0LFwidmlzaWJpbGl0eVwiLHMpJiYwIT09ZSYmKG89MCksWT9uPW5ldyBfZShsLFwib3BhY2l0eVwiLG8sZS1vLG4pOihuPW5ldyBfZShsLFwib3BhY2l0eVwiLDEwMCpvLDEwMCooZS1vKSxuKSxuLnhuMT1oPzE6MCxsLnpvb209MSxuLnR5cGU9MixuLmI9XCJhbHBoYShvcGFjaXR5PVwiK24ucytcIilcIixuLmU9XCJhbHBoYShvcGFjaXR5PVwiKyhuLnMrbi5jKStcIilcIixuLmRhdGE9dCxuLnBsdWdpbj1hLG4uc2V0UmF0aW89a2UpLGgmJihuPW5ldyBfZShsLFwidmlzaWJpbGl0eVwiLDAsMCxuLC0xLG51bGwsITEsMCwwIT09bz9cImluaGVyaXRcIjpcImhpZGRlblwiLDA9PT1lP1wiaGlkZGVuXCI6XCJpbmhlcml0XCIpLG4ueHMwPVwiaW5oZXJpdFwiLHIuX292ZXJ3cml0ZVByb3BzLnB1c2gobi5uKSxyLl9vdmVyd3JpdGVQcm9wcy5wdXNoKGkpKSxufX0pO3ZhciBBZT1mdW5jdGlvbih0LGUpe2UmJih0LnJlbW92ZVByb3BlcnR5PyhcIm1zXCI9PT1lLnN1YnN0cigwLDIpJiYoZT1cIk1cIitlLnN1YnN0cigxKSksdC5yZW1vdmVQcm9wZXJ0eShlLnJlcGxhY2UoUCxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpKSk6dC5yZW1vdmVBdHRyaWJ1dGUoZSkpfSxPZT1mdW5jdGlvbih0KXtpZih0aGlzLnQuX2dzQ2xhc3NQVD10aGlzLDE9PT10fHwwPT09dCl7dGhpcy50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsMD09PXQ/dGhpcy5iOnRoaXMuZSk7Zm9yKHZhciBlPXRoaXMuZGF0YSxpPXRoaXMudC5zdHlsZTtlOyllLnY/aVtlLnBdPWUudjpBZShpLGUucCksZT1lLl9uZXh0OzE9PT10JiZ0aGlzLnQuX2dzQ2xhc3NQVD09PXRoaXMmJih0aGlzLnQuX2dzQ2xhc3NQVD1udWxsKX1lbHNlIHRoaXMudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSE9PXRoaXMuZSYmdGhpcy50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsdGhpcy5lKX07bWUoXCJjbGFzc05hbWVcIix7cGFyc2VyOmZ1bmN0aW9uKHQsZSxyLG4sYSxvLGwpe3ZhciBoLHUsZixfLHAsYz10LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwiLGQ9dC5zdHlsZS5jc3NUZXh0O2lmKGE9bi5fY2xhc3NOYW1lUFQ9bmV3IF9lKHQsciwwLDAsYSwyKSxhLnNldFJhdGlvPU9lLGEucHI9LTExLGk9ITAsYS5iPWMsdT0kKHQscyksZj10Ll9nc0NsYXNzUFQpe2ZvcihfPXt9LHA9Zi5kYXRhO3A7KV9bcC5wXT0xLHA9cC5fbmV4dDtmLnNldFJhdGlvKDEpfXJldHVybiB0Ll9nc0NsYXNzUFQ9YSxhLmU9XCI9XCIhPT1lLmNoYXJBdCgxKT9lOmMucmVwbGFjZShSZWdFeHAoXCJcXFxccypcXFxcYlwiK2Uuc3Vic3RyKDIpK1wiXFxcXGJcIiksXCJcIikrKFwiK1wiPT09ZS5jaGFyQXQoMCk/XCIgXCIrZS5zdWJzdHIoMik6XCJcIiksbi5fdHdlZW4uX2R1cmF0aW9uJiYodC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGEuZSksaD1HKHQsdSwkKHQpLGwsXyksdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGMpLGEuZGF0YT1oLmZpcnN0TVBULHQuc3R5bGUuY3NzVGV4dD1kLGE9YS54Zmlyc3Q9bi5wYXJzZSh0LGguZGlmcyxhLG8pKSxhfX0pO3ZhciBEZT1mdW5jdGlvbih0KXtpZigoMT09PXR8fDA9PT10KSYmdGhpcy5kYXRhLl90b3RhbFRpbWU9PT10aGlzLmRhdGEuX3RvdGFsRHVyYXRpb24mJlwiaXNGcm9tU3RhcnRcIiE9PXRoaXMuZGF0YS5kYXRhKXt2YXIgZSxpLHIscyxuPXRoaXMudC5zdHlsZSxhPW8udHJhbnNmb3JtLnBhcnNlO2lmKFwiYWxsXCI9PT10aGlzLmUpbi5jc3NUZXh0PVwiXCIscz0hMDtlbHNlIGZvcihlPXRoaXMuZS5zcGxpdChcIixcIikscj1lLmxlbmd0aDstLXI+LTE7KWk9ZVtyXSxvW2ldJiYob1tpXS5wYXJzZT09PWE/cz0hMDppPVwidHJhbnNmb3JtT3JpZ2luXCI9PT1pP3dlOm9baV0ucCksQWUobixpKTtzJiYoQWUobix5ZSksdGhpcy50Ll9nc1RyYW5zZm9ybSYmZGVsZXRlIHRoaXMudC5fZ3NUcmFuc2Zvcm0pfX07Zm9yKG1lKFwiY2xlYXJQcm9wc1wiLHtwYXJzZXI6ZnVuY3Rpb24odCxlLHIscyxuKXtyZXR1cm4gbj1uZXcgX2UodCxyLDAsMCxuLDIpLG4uc2V0UmF0aW89RGUsbi5lPWUsbi5wcj0tMTAsbi5kYXRhPXMuX3R3ZWVuLGk9ITAsbn19KSxsPVwiYmV6aWVyLHRocm93UHJvcHMscGh5c2ljc1Byb3BzLHBoeXNpY3MyRFwiLnNwbGl0KFwiLFwiKSxjZT1sLmxlbmd0aDtjZS0tOylnZShsW2NlXSk7bD1hLnByb3RvdHlwZSxsLl9maXJzdFBUPW51bGwsbC5fb25Jbml0VHdlZW49ZnVuY3Rpb24odCxlLG8pe2lmKCF0Lm5vZGVUeXBlKXJldHVybiExO3RoaXMuX3RhcmdldD10LHRoaXMuX3R3ZWVuPW8sdGhpcy5fdmFycz1lLGg9ZS5hdXRvUm91bmQsaT0hMSxyPWUuc3VmZml4TWFwfHxhLnN1ZmZpeE1hcCxzPUgodCxcIlwiKSxuPXRoaXMuX292ZXJ3cml0ZVByb3BzO3ZhciBsLF8sYyxkLG0sZyx2LHksVCx4PXQuc3R5bGU7aWYodSYmXCJcIj09PXguekluZGV4JiYobD1xKHQsXCJ6SW5kZXhcIixzKSwoXCJhdXRvXCI9PT1sfHxcIlwiPT09bCkmJnRoaXMuX2FkZExhenlTZXQoeCxcInpJbmRleFwiLDApKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmKGQ9eC5jc3NUZXh0LGw9JCh0LHMpLHguY3NzVGV4dD1kK1wiO1wiK2UsbD1HKHQsbCwkKHQpKS5kaWZzLCFZJiZ3LnRlc3QoZSkmJihsLm9wYWNpdHk9cGFyc2VGbG9hdChSZWdFeHAuJDEpKSxlPWwseC5jc3NUZXh0PWQpLHRoaXMuX2ZpcnN0UFQ9Xz10aGlzLnBhcnNlKHQsZSxudWxsKSx0aGlzLl90cmFuc2Zvcm1UeXBlKXtmb3IoVD0zPT09dGhpcy5fdHJhbnNmb3JtVHlwZSx5ZT9mJiYodT0hMCxcIlwiPT09eC56SW5kZXgmJih2PXEodCxcInpJbmRleFwiLHMpLChcImF1dG9cIj09PXZ8fFwiXCI9PT12KSYmdGhpcy5fYWRkTGF6eVNldCh4LFwiekluZGV4XCIsMCkpLHAmJnRoaXMuX2FkZExhenlTZXQoeCxcIldlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eVwiLHRoaXMuX3ZhcnMuV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5fHwoVD9cInZpc2libGVcIjpcImhpZGRlblwiKSkpOnguem9vbT0xLGM9XztjJiZjLl9uZXh0OyljPWMuX25leHQ7eT1uZXcgX2UodCxcInRyYW5zZm9ybVwiLDAsMCxudWxsLDIpLHRoaXMuX2xpbmtDU1NQKHksbnVsbCxjKSx5LnNldFJhdGlvPVQmJnhlP0NlOnllP1JlOlNlLHkuZGF0YT10aGlzLl90cmFuc2Zvcm18fFBlKHQscywhMCksbi5wb3AoKX1pZihpKXtmb3IoO187KXtmb3IoZz1fLl9uZXh0LGM9ZDtjJiZjLnByPl8ucHI7KWM9Yy5fbmV4dDsoXy5fcHJldj1jP2MuX3ByZXY6bSk/Xy5fcHJldi5fbmV4dD1fOmQ9XywoXy5fbmV4dD1jKT9jLl9wcmV2PV86bT1fLF89Z310aGlzLl9maXJzdFBUPWR9cmV0dXJuITB9LGwucGFyc2U9ZnVuY3Rpb24odCxlLGksbil7dmFyIGEsbCx1LGYsXyxwLGMsZCxtLGcsdj10LnN0eWxlO2ZvcihhIGluIGUpcD1lW2FdLGw9b1thXSxsP2k9bC5wYXJzZSh0LHAsYSx0aGlzLGksbixlKTooXz1xKHQsYSxzKStcIlwiLG09XCJzdHJpbmdcIj09dHlwZW9mIHAsXCJjb2xvclwiPT09YXx8XCJmaWxsXCI9PT1hfHxcInN0cm9rZVwiPT09YXx8LTEhPT1hLmluZGV4T2YoXCJDb2xvclwiKXx8bSYmYi50ZXN0KHApPyhtfHwocD1vZShwKSxwPShwLmxlbmd0aD4zP1wicmdiYShcIjpcInJnYihcIikrcC5qb2luKFwiLFwiKStcIilcIiksaT1wZSh2LGEsXyxwLCEwLFwidHJhbnNwYXJlbnRcIixpLDAsbikpOiFtfHwtMT09PXAuaW5kZXhPZihcIiBcIikmJi0xPT09cC5pbmRleE9mKFwiLFwiKT8odT1wYXJzZUZsb2F0KF8pLGM9dXx8MD09PXU/Xy5zdWJzdHIoKHUrXCJcIikubGVuZ3RoKTpcIlwiLChcIlwiPT09X3x8XCJhdXRvXCI9PT1fKSYmKFwid2lkdGhcIj09PWF8fFwiaGVpZ2h0XCI9PT1hPyh1PXRlKHQsYSxzKSxjPVwicHhcIik6XCJsZWZ0XCI9PT1hfHxcInRvcFwiPT09YT8odT1aKHQsYSxzKSxjPVwicHhcIik6KHU9XCJvcGFjaXR5XCIhPT1hPzA6MSxjPVwiXCIpKSxnPW0mJlwiPVwiPT09cC5jaGFyQXQoMSksZz8oZj1wYXJzZUludChwLmNoYXJBdCgwKStcIjFcIiwxMCkscD1wLnN1YnN0cigyKSxmKj1wYXJzZUZsb2F0KHApLGQ9cC5yZXBsYWNlKHksXCJcIikpOihmPXBhcnNlRmxvYXQocCksZD1tP3Auc3Vic3RyKChmK1wiXCIpLmxlbmd0aCl8fFwiXCI6XCJcIiksXCJcIj09PWQmJihkPWEgaW4gcj9yW2FdOmMpLHA9Znx8MD09PWY/KGc/Zit1OmYpK2Q6ZVthXSxjIT09ZCYmXCJcIiE9PWQmJihmfHwwPT09ZikmJnUmJih1PVEodCxhLHUsYyksXCIlXCI9PT1kPyh1Lz1RKHQsYSwxMDAsXCIlXCIpLzEwMCxlLnN0cmljdFVuaXRzIT09ITAmJihfPXUrXCIlXCIpKTpcImVtXCI9PT1kP3UvPVEodCxhLDEsXCJlbVwiKTpcInB4XCIhPT1kJiYoZj1RKHQsYSxmLGQpLGQ9XCJweFwiKSxnJiYoZnx8MD09PWYpJiYocD1mK3UrZCkpLGcmJihmKz11KSwhdSYmMCE9PXV8fCFmJiYwIT09Zj92b2lkIDAhPT12W2FdJiYocHx8XCJOYU5cIiE9cCtcIlwiJiZudWxsIT1wKT8oaT1uZXcgX2UodixhLGZ8fHV8fDAsMCxpLC0xLGEsITEsMCxfLHApLGkueHMwPVwibm9uZVwiIT09cHx8XCJkaXNwbGF5XCIhPT1hJiYtMT09PWEuaW5kZXhPZihcIlN0eWxlXCIpP3A6Xyk6VShcImludmFsaWQgXCIrYStcIiB0d2VlbiB2YWx1ZTogXCIrZVthXSk6KGk9bmV3IF9lKHYsYSx1LGYtdSxpLDAsYSxoIT09ITEmJihcInB4XCI9PT1kfHxcInpJbmRleFwiPT09YSksMCxfLHApLGkueHMwPWQpKTppPXBlKHYsYSxfLHAsITAsbnVsbCxpLDAsbikpLG4mJmkmJiFpLnBsdWdpbiYmKGkucGx1Z2luPW4pO3JldHVybiBpfSxsLnNldFJhdGlvPWZ1bmN0aW9uKHQpe3ZhciBlLGkscixzPXRoaXMuX2ZpcnN0UFQsbj0xZS02O2lmKDEhPT10fHx0aGlzLl90d2Vlbi5fdGltZSE9PXRoaXMuX3R3ZWVuLl9kdXJhdGlvbiYmMCE9PXRoaXMuX3R3ZWVuLl90aW1lKWlmKHR8fHRoaXMuX3R3ZWVuLl90aW1lIT09dGhpcy5fdHdlZW4uX2R1cmF0aW9uJiYwIT09dGhpcy5fdHdlZW4uX3RpbWV8fHRoaXMuX3R3ZWVuLl9yYXdQcmV2VGltZT09PS0xZS02KWZvcig7czspe2lmKGU9cy5jKnQrcy5zLHMucj9lPU1hdGgucm91bmQoZSk6bj5lJiZlPi1uJiYoZT0wKSxzLnR5cGUpaWYoMT09PXMudHlwZSlpZihyPXMubCwyPT09cilzLnRbcy5wXT1zLnhzMCtlK3MueHMxK3MueG4xK3MueHMyO2Vsc2UgaWYoMz09PXIpcy50W3MucF09cy54czArZStzLnhzMStzLnhuMStzLnhzMitzLnhuMitzLnhzMztlbHNlIGlmKDQ9PT1yKXMudFtzLnBdPXMueHMwK2Urcy54czErcy54bjErcy54czIrcy54bjIrcy54czMrcy54bjMrcy54czQ7ZWxzZSBpZig1PT09cilzLnRbcy5wXT1zLnhzMCtlK3MueHMxK3MueG4xK3MueHMyK3MueG4yK3MueHMzK3MueG4zK3MueHM0K3MueG40K3MueHM1O2Vsc2V7Zm9yKGk9cy54czArZStzLnhzMSxyPTE7cy5sPnI7cisrKWkrPXNbXCJ4blwiK3JdK3NbXCJ4c1wiKyhyKzEpXTtzLnRbcy5wXT1pfWVsc2UtMT09PXMudHlwZT9zLnRbcy5wXT1zLnhzMDpzLnNldFJhdGlvJiZzLnNldFJhdGlvKHQpO2Vsc2Ugcy50W3MucF09ZStzLnhzMDtzPXMuX25leHR9ZWxzZSBmb3IoO3M7KTIhPT1zLnR5cGU/cy50W3MucF09cy5iOnMuc2V0UmF0aW8odCkscz1zLl9uZXh0O2Vsc2UgZm9yKDtzOykyIT09cy50eXBlP3MudFtzLnBdPXMuZTpzLnNldFJhdGlvKHQpLHM9cy5fbmV4dH0sbC5fZW5hYmxlVHJhbnNmb3Jtcz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2Zvcm1UeXBlPXR8fDM9PT10aGlzLl90cmFuc2Zvcm1UeXBlPzM6Mix0aGlzLl90cmFuc2Zvcm09dGhpcy5fdHJhbnNmb3JtfHxQZSh0aGlzLl90YXJnZXQscywhMCl9O3ZhciBNZT1mdW5jdGlvbigpe3RoaXMudFt0aGlzLnBdPXRoaXMuZSx0aGlzLmRhdGEuX2xpbmtDU1NQKHRoaXMsdGhpcy5fbmV4dCxudWxsLCEwKX07bC5fYWRkTGF6eVNldD1mdW5jdGlvbih0LGUsaSl7dmFyIHI9dGhpcy5fZmlyc3RQVD1uZXcgX2UodCxlLDAsMCx0aGlzLl9maXJzdFBULDIpO3IuZT1pLHIuc2V0UmF0aW89TWUsci5kYXRhPXRoaXN9LGwuX2xpbmtDU1NQPWZ1bmN0aW9uKHQsZSxpLHIpe3JldHVybiB0JiYoZSYmKGUuX3ByZXY9dCksdC5fbmV4dCYmKHQuX25leHQuX3ByZXY9dC5fcHJldiksdC5fcHJldj90Ll9wcmV2Ll9uZXh0PXQuX25leHQ6dGhpcy5fZmlyc3RQVD09PXQmJih0aGlzLl9maXJzdFBUPXQuX25leHQscj0hMCksaT9pLl9uZXh0PXQ6cnx8bnVsbCE9PXRoaXMuX2ZpcnN0UFR8fCh0aGlzLl9maXJzdFBUPXQpLHQuX25leHQ9ZSx0Ll9wcmV2PWkpLHR9LGwuX2tpbGw9ZnVuY3Rpb24oZSl7dmFyIGkscixzLG49ZTtpZihlLmF1dG9BbHBoYXx8ZS5hbHBoYSl7bj17fTtmb3IociBpbiBlKW5bcl09ZVtyXTtuLm9wYWNpdHk9MSxuLmF1dG9BbHBoYSYmKG4udmlzaWJpbGl0eT0xKX1yZXR1cm4gZS5jbGFzc05hbWUmJihpPXRoaXMuX2NsYXNzTmFtZVBUKSYmKHM9aS54Zmlyc3QscyYmcy5fcHJldj90aGlzLl9saW5rQ1NTUChzLl9wcmV2LGkuX25leHQscy5fcHJldi5fcHJldik6cz09PXRoaXMuX2ZpcnN0UFQmJih0aGlzLl9maXJzdFBUPWkuX25leHQpLGkuX25leHQmJnRoaXMuX2xpbmtDU1NQKGkuX25leHQsaS5fbmV4dC5fbmV4dCxzLl9wcmV2KSx0aGlzLl9jbGFzc05hbWVQVD1udWxsKSx0LnByb3RvdHlwZS5fa2lsbC5jYWxsKHRoaXMsbil9O3ZhciBMZT1mdW5jdGlvbih0LGUsaSl7dmFyIHIscyxuLGE7aWYodC5zbGljZSlmb3Iocz10Lmxlbmd0aDstLXM+LTE7KUxlKHRbc10sZSxpKTtlbHNlIGZvcihyPXQuY2hpbGROb2RlcyxzPXIubGVuZ3RoOy0tcz4tMTspbj1yW3NdLGE9bi50eXBlLG4uc3R5bGUmJihlLnB1c2goJChuKSksaSYmaS5wdXNoKG4pKSwxIT09YSYmOSE9PWEmJjExIT09YXx8IW4uY2hpbGROb2Rlcy5sZW5ndGh8fExlKG4sZSxpKX07cmV0dXJuIGEuY2FzY2FkZVRvPWZ1bmN0aW9uKHQsaSxyKXt2YXIgcyxuLGEsbz1lLnRvKHQsaSxyKSxsPVtvXSxoPVtdLHU9W10sZj1bXSxfPWUuX2ludGVybmFscy5yZXNlcnZlZFByb3BzO2Zvcih0PW8uX3RhcmdldHN8fG8udGFyZ2V0LExlKHQsaCxmKSxvLnJlbmRlcihpLCEwKSxMZSh0LHUpLG8ucmVuZGVyKDAsITApLG8uX2VuYWJsZWQoITApLHM9Zi5sZW5ndGg7LS1zPi0xOylpZihuPUcoZltzXSxoW3NdLHVbc10pLG4uZmlyc3RNUFQpe249bi5kaWZzO1xyXG5mb3IoYSBpbiByKV9bYV0mJihuW2FdPXJbYV0pO2wucHVzaChlLnRvKGZbc10saSxuKSl9cmV0dXJuIGx9LHQuYWN0aXZhdGUoW2FdKSxhfSwhMCl9KSx3aW5kb3cuX2dzRGVmaW5lJiZ3aW5kb3cuX2dzUXVldWUucG9wKCkoKTsiLCIvKiFcclxuICogVkVSU0lPTjogMS43LjNcclxuICogREFURTogMjAxNC0wMS0xNFxyXG4gKiBVUERBVEVTIEFORCBET0NTIEFUOiBodHRwOi8vd3d3LmdyZWVuc29jay5jb21cclxuICpcclxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDA4LTIwMTQsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogVGhpcyB3b3JrIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHA6Ly93d3cuZ3JlZW5zb2NrLmNvbS90ZXJtc19vZl91c2UuaHRtbCBvciBmb3JcclxuICogQ2x1YiBHcmVlblNvY2sgbWVtYmVycywgdGhlIHNvZnR3YXJlIGFncmVlbWVudCB0aGF0IHdhcyBpc3N1ZWQgd2l0aCB5b3VyIG1lbWJlcnNoaXAuXHJcbiAqIFxyXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cclxuICoqL1xyXG4od2luZG93Ll9nc1F1ZXVlfHwod2luZG93Ll9nc1F1ZXVlPVtdKSkucHVzaChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlPXdpbmRvdyxpPWZ1bmN0aW9uKGkscyl7dmFyIHI9XCJ4XCI9PT1zP1wiV2lkdGhcIjpcIkhlaWdodFwiLG49XCJzY3JvbGxcIityLGE9XCJjbGllbnRcIityLG89ZG9jdW1lbnQuYm9keTtyZXR1cm4gaT09PWV8fGk9PT10fHxpPT09bz9NYXRoLm1heCh0W25dLG9bbl0pLShlW1wiaW5uZXJcIityXXx8TWF0aC5tYXgodFthXSxvW2FdKSk6aVtuXS1pW1wib2Zmc2V0XCIrcl19LHM9d2luZG93Ll9nc0RlZmluZS5wbHVnaW4oe3Byb3BOYW1lOlwic2Nyb2xsVG9cIixBUEk6Mix2ZXJzaW9uOlwiMS43LjNcIixpbml0OmZ1bmN0aW9uKHQscyxyKXtyZXR1cm4gdGhpcy5fd2R3PXQ9PT1lLHRoaXMuX3RhcmdldD10LHRoaXMuX3R3ZWVuPXIsXCJvYmplY3RcIiE9dHlwZW9mIHMmJihzPXt5OnN9KSx0aGlzLl9hdXRvS2lsbD1zLmF1dG9LaWxsIT09ITEsdGhpcy54PXRoaXMueFByZXY9dGhpcy5nZXRYKCksdGhpcy55PXRoaXMueVByZXY9dGhpcy5nZXRZKCksbnVsbCE9cy54Pyh0aGlzLl9hZGRUd2Vlbih0aGlzLFwieFwiLHRoaXMueCxcIm1heFwiPT09cy54P2kodCxcInhcIik6cy54LFwic2Nyb2xsVG9feFwiLCEwKSx0aGlzLl9vdmVyd3JpdGVQcm9wcy5wdXNoKFwic2Nyb2xsVG9feFwiKSk6dGhpcy5za2lwWD0hMCxudWxsIT1zLnk/KHRoaXMuX2FkZFR3ZWVuKHRoaXMsXCJ5XCIsdGhpcy55LFwibWF4XCI9PT1zLnk/aSh0LFwieVwiKTpzLnksXCJzY3JvbGxUb195XCIsITApLHRoaXMuX292ZXJ3cml0ZVByb3BzLnB1c2goXCJzY3JvbGxUb195XCIpKTp0aGlzLnNraXBZPSEwLCEwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIuc2V0UmF0aW8uY2FsbCh0aGlzLHQpO3ZhciBzPXRoaXMuX3dkd3x8IXRoaXMuc2tpcFg/dGhpcy5nZXRYKCk6dGhpcy54UHJldixyPXRoaXMuX3dkd3x8IXRoaXMuc2tpcFk/dGhpcy5nZXRZKCk6dGhpcy55UHJldixuPXItdGhpcy55UHJldixhPXMtdGhpcy54UHJldjt0aGlzLl9hdXRvS2lsbCYmKCF0aGlzLnNraXBYJiYoYT43fHwtNz5hKSYmaSh0aGlzLl90YXJnZXQsXCJ4XCIpPnMmJih0aGlzLnNraXBYPSEwKSwhdGhpcy5za2lwWSYmKG4+N3x8LTc+bikmJmkodGhpcy5fdGFyZ2V0LFwieVwiKT5yJiYodGhpcy5za2lwWT0hMCksdGhpcy5za2lwWCYmdGhpcy5za2lwWSYmdGhpcy5fdHdlZW4ua2lsbCgpKSx0aGlzLl93ZHc/ZS5zY3JvbGxUbyh0aGlzLnNraXBYP3M6dGhpcy54LHRoaXMuc2tpcFk/cjp0aGlzLnkpOih0aGlzLnNraXBZfHwodGhpcy5fdGFyZ2V0LnNjcm9sbFRvcD10aGlzLnkpLHRoaXMuc2tpcFh8fCh0aGlzLl90YXJnZXQuc2Nyb2xsTGVmdD10aGlzLngpKSx0aGlzLnhQcmV2PXRoaXMueCx0aGlzLnlQcmV2PXRoaXMueX19KSxyPXMucHJvdG90eXBlO3MubWF4PWksci5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dkdz9udWxsIT1lLnBhZ2VYT2Zmc2V0P2UucGFnZVhPZmZzZXQ6bnVsbCE9dC5zY3JvbGxMZWZ0P3Quc2Nyb2xsTGVmdDpkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ6dGhpcy5fdGFyZ2V0LnNjcm9sbExlZnR9LHIuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93ZHc/bnVsbCE9ZS5wYWdlWU9mZnNldD9lLnBhZ2VZT2Zmc2V0Om51bGwhPXQuc2Nyb2xsVG9wP3Quc2Nyb2xsVG9wOmRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOnRoaXMuX3RhcmdldC5zY3JvbGxUb3B9LHIuX2tpbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsVG9feCYmKHRoaXMuc2tpcFg9ITApLHQuc2Nyb2xsVG9feSYmKHRoaXMuc2tpcFk9ITApLHRoaXMuX3N1cGVyLl9raWxsLmNhbGwodGhpcyx0KX19KSx3aW5kb3cuX2dzRGVmaW5lJiZ3aW5kb3cuX2dzUXVldWUucG9wKCkoKTsiXX0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvanMvY3VzdG9tL2N1c3RvbS1zZWxlY3QuanMiLCJzcmMvanMvZ2xvYmFsL2FqYXguanMiLCJzcmMvanMvZ2xvYmFsL2FwcC5qcyIsInNyYy9qcy9nbG9iYWwvYmVhY29uLmpzIiwic3JjL2pzL2dsb2JhbC9jZG4tZHJpdmVyLmpzIiwic3JjL2pzL2dsb2JhbC9jb3VudGRvd24uanMiLCJzcmMvanMvZ2xvYmFsL2ZpZWxkcy5qcyIsInNyYy9qcy9nbG9iYWwvbWFpbi5qcyIsInNyYy9qcy9nbG9iYWwvbWl4cGFuZWwuanMiLCJzcmMvanMvZ2xvYmFsL3BhZ2VNYW5hZ2VyLmpzIiwic3JjL2pzL2dsb2JhbC9yZWNvbW1lbmRhdGlvbnMtd2lkZ2V0LmpzIiwic3JjL2pzL2dsb2JhbC9yb2NrZXRjZG4tc3Vic2NyaXB0aW9uLXBvbGxpbmcuanMiLCJzcmMvanMvZ2xvYmFsL3JvY2tldGNkbi5qcyIsInNyYy9qcy9saWIvZ3JlZW5zb2NrL1RpbWVsaW5lTGl0ZS5taW4uanMiLCJzcmMvanMvbGliL2dyZWVuc29jay9Ud2VlbkxpdGUubWluLmpzIiwic3JjL2pzL2xpYi9ncmVlbnNvY2svZWFzaW5nL0Vhc2VQYWNrLm1pbi5qcyIsInNyYy9qcy9saWIvZ3JlZW5zb2NrL3BsdWdpbnMvQ1NTUGx1Z2luLm1pbi5qcyIsInNyYy9qcy9saWIvZ3JlZW5zb2NrL3BsdWdpbnMvU2Nyb2xsVG9QbHVnaW4ubWluLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNBQSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJO0VBQ25FLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7RUFDOUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztFQUNuRSxNQUFN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LENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSTtRQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsS0FBSztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVU7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPO01BQUMsQ0FBQyxHQUFDLEVBQUU7TUFBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLENBQUQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQztNQUFDLE9BQU8sQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDO01BQUMsT0FBTyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUM7VUFBQyxVQUFVLEVBQUMsQ0FBQztVQUFDLGdCQUFnQixFQUFDLENBQUM7VUFBQyxlQUFlLEVBQUMsQ0FBQztVQUFDLGlCQUFpQixFQUFDLElBQUksQ0FBQztRQUFpQixDQUFDLENBQUM7TUFBQyxLQUFJLFFBQVEsSUFBRSxPQUFPLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsT0FBTyxLQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztNQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLENBQUMsR0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksSUFBRSxDQUFDLENBQUMsZUFBZSxLQUFHLENBQUMsQ0FBQyxlQUFlLEdBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxLQUFLLElBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxpQkFBaUIsS0FBRyxDQUFDLENBQUMsaUJBQWlCLEdBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUztNQUFDLEtBQUksSUFBSSxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsSUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUM7TUFBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO01BQUMsSUFBRyxRQUFRLElBQUUsT0FBTyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUM7UUFBQyxJQUFHLENBQUMsWUFBWSxLQUFLLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO1VBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxJQUFFLFFBQVEsRUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU0sRUFBQztVQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLFVBQVUsSUFBRSxPQUFPLENBQUMsS0FBRyxVQUFVLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsT0FBTyxLQUFHLENBQUMsS0FBRyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQztVQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFBO1FBQUMsSUFBRyxRQUFRLElBQUUsT0FBTyxDQUFDLEVBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7UUFBQyxJQUFHLFVBQVUsSUFBRSxPQUFPLENBQUMsRUFBQyxNQUFLLGFBQWEsR0FBQyxDQUFDLEdBQUMsdUVBQXVFO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFBO01BQUMsSUFBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsSUFBSSxDQUFDLEtBQUssS0FBRyxJQUFJLENBQUMsU0FBUyxLQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRSxJQUFJLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLEtBQUksQ0FBQyxHQUFDLElBQUksRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLElBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUztNQUFDLE9BQU8sSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBRyxDQUFDLFlBQVksQ0FBQyxFQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxJQUFHLENBQUMsWUFBWSxLQUFLLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO1FBQUMsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxJQUFJO01BQUE7TUFBQyxPQUFNLFFBQVEsSUFBRSxPQUFPLENBQUMsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFDLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLO01BQUMsT0FBTyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxjQUFjLEdBQUMsQ0FBQyxFQUFDLElBQUk7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUk7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksSUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztNQUFDLElBQUcsQ0FBQyxZQUFZLENBQUMsSUFBRSxDQUFDLENBQUMsUUFBUSxLQUFHLElBQUksRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRyxDQUFDLEtBQUcsQ0FBQyxZQUFZLEtBQUssSUFBRSxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFXLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFHLElBQUksSUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFDLElBQUcsUUFBUSxJQUFFLE9BQU8sQ0FBQyxFQUFDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLElBQUksSUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxRQUFRLElBQUUsT0FBTyxDQUFDLElBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxJQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJO1FBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEVBQUMsT0FBTyxJQUFJLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUFBO01BQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxZQUFVO01BQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsR0FBRyxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLGNBQWM7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUs7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVU7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVU7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE9BQU87TUFBQyxJQUFHLENBQUMsSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsWUFBWSxFQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsU0FBUyxLQUFHLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxZQUFZLElBQUUsSUFBSSxDQUFDLFlBQVksS0FBRyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsWUFBWSxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsTUFBTSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsWUFBWSxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFlBQVksR0FBQyxJQUFJLENBQUMsU0FBUyxJQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxJQUFJLENBQUMsWUFBWSxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxJQUFFLElBQUksR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxTQUFTLElBQUUsSUFBSSxDQUFDLFlBQVksS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLFlBQVksR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsWUFBWSxJQUFFLENBQUMsQ0FBQyxNQUFJLENBQUMsR0FBQyxtQkFBbUIsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLFNBQVMsSUFBRSxJQUFJLENBQUMsWUFBWSxJQUFFLENBQUMsSUFBRSxJQUFJLENBQUMsTUFBTSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxZQUFZLEdBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLFlBQVksS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLFlBQVksR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLE1BQU0sSUFBRSxDQUFDLElBQUUsQ0FBQyxFQUFDO1FBQUMsSUFBRyxJQUFJLENBQUMsUUFBUSxLQUFHLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxJQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRSxJQUFJLENBQUMsS0FBSyxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsS0FBSyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUUsSUFBSSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxDQUFDLEVBQUMsS0FBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFFLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBRSxDQUFDLENBQUMsVUFBVSxJQUFFLElBQUksQ0FBQyxLQUFLLElBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBSSxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxjQUFjLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFFLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDO1FBQUMsSUFBSSxDQUFDLFNBQVMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUUsSUFBSSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxHQUFHLElBQUUsQ0FBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLFVBQVUsSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLFVBQVUsTUFBSSxDQUFDLEtBQUcsSUFBSSxDQUFDLEtBQUssSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsT0FBTyxDQUFDLElBQUUsSUFBSSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQTtJQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsZUFBZSxHQUFDLFlBQVU7TUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFFO1FBQUMsSUFBRyxDQUFDLENBQUMsT0FBTyxJQUFFLENBQUMsWUFBWSxDQUFDLElBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUMsT0FBTSxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7TUFBQTtNQUFDLE9BQU0sQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsVUFBVTtNQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsRUFBRSxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxLQUFHLENBQUMsWUFBWSxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7TUFBQyxPQUFPLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHO1FBQUMsQ0FBQyxHQUFDLEVBQUU7UUFBQyxDQUFDLEdBQUMsQ0FBQztNQUFDLEtBQUksQ0FBQyxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUcsSUFBSSxJQUFFLENBQUMsSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFDLE9BQU8sQ0FBQyxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxHQUFFO1FBQUMsSUFBRyxDQUFDLEtBQUcsSUFBSSxFQUFDLE9BQU0sQ0FBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRO01BQUE7TUFBQyxPQUFNLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsYUFBYSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUM7TUFBQyxLQUFJLElBQUksQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLElBQUcsQ0FBQyxFQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFHLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztNQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxPQUFPLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU07TUFBQyxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztNQUFDLE9BQU8sQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsWUFBVTtNQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO01BQUMsT0FBTyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLEdBQUcsRUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO01BQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxLQUFHLElBQUksQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsYUFBYSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUM7UUFBQyxJQUFHLElBQUksQ0FBQyxNQUFNLEVBQUM7VUFBQyxLQUFJLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUMsR0FBQyxZQUFZLEVBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLGFBQWEsSUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsVUFBVSxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEtBQUcsSUFBSSxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFVBQVUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsY0FBYyxHQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUM7VUFBQyxJQUFJLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxjQUFjLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDO1FBQUE7UUFBQyxPQUFPLElBQUksQ0FBQyxjQUFjO01BQUE7TUFBQyxPQUFPLENBQUMsS0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsWUFBVTtNQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUztNQUFDLE9BQU8sQ0FBQyxLQUFHLENBQUMsQ0FBQyxtQkFBbUI7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxZQUFVO01BQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsSUFBRSxJQUFJLENBQUMsVUFBVTtJQUFBLENBQUMsRUFBQyxDQUFDO0VBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLFNBQVMsSUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7QUNYeHJUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLFVBQVMsQ0FBQyxFQUFDO0VBQUMsWUFBWTs7RUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUUsQ0FBQztFQUFDLElBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDO0lBQUMsSUFBSSxDQUFDO01BQUMsQ0FBQztNQUFDLENBQUM7TUFBQyxDQUFDO01BQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDO1FBQUMsT0FBTyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO01BQUMsQ0FBQyxHQUFDLEtBQUs7TUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUs7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFBLEVBQVUsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLFlBQVU7UUFBQyxJQUFJLENBQUMsR0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVE7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLFVBQVMsQ0FBQyxFQUFDO1VBQUMsT0FBTyxJQUFJLElBQUUsQ0FBQyxLQUFHLENBQUMsWUFBWSxLQUFLLElBQUUsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDO1FBQUEsQ0FBQztNQUFBLENBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksRUFBQyxJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxHQUFDLENBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxFQUFFO1FBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxVQUFTLENBQUMsRUFBQztVQUFDLEtBQUksSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUUsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1VBQUMsSUFBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsRUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLGdCQUFnQixHQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsVUFBVSxJQUFFLE9BQU8sTUFBTSxJQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBQyxHQUFHLEdBQUMsRUFBRSxJQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxZQUFVO1lBQUMsT0FBTyxDQUFDO1VBQUEsQ0FBQyxDQUFDLEdBQUMsV0FBVyxJQUFFLE9BQU8sTUFBTSxJQUFFLE1BQU0sQ0FBQyxPQUFPLEtBQUcsTUFBTSxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFBQSxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxPQUFPLENBQUMsR0FBQyxDQUFDLElBQUUsWUFBVSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxZQUFVO1VBQUMsT0FBTyxDQUFDO1FBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQSxDQUFDO0lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDO0lBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsRUFBRTtNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsYUFBYSxFQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUM7TUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLEtBQUksSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxDQUFELENBQUM7TUFBQSxDQUFDO0lBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxJQUFHLElBQUksQ0FBQyxLQUFLLEVBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztNQUFDLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNO1FBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUM7TUFBQyxPQUFPLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxjQUFjLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLFFBQVEsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLFFBQVEsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLFdBQVcsR0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsV0FBVyxDQUFDO0lBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTO0lBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLHdCQUF3QixFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsWUFBWSxHQUFDLENBQUMsSUFBRSxJQUFJO0lBQUEsQ0FBQyxDQUFDO0lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQztNQUFDLEtBQUksSUFBSSxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxDQUFDLEVBQUMsQ0FBQztRQUFDLENBQUMsRUFBQyxDQUFDO1FBQUMsRUFBRSxFQUFDLENBQUM7UUFBQyxFQUFFLEVBQUM7TUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEtBQUcsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUFDLElBQUcsQ0FBQyxFQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsSUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsYUFBYSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFBQyxJQUFHLENBQUMsRUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQztRQUFDLElBQUksRUFBQyxDQUFDO1FBQUMsTUFBTSxFQUFDO01BQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLHFCQUFxQjtNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsb0JBQW9CO01BQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsWUFBVTtRQUFDLE9BQU8sSUFBSSxJQUFJLENBQUQsQ0FBQyxDQUFFLE9BQU8sQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztJQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsdUJBQXVCLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxzQkFBc0IsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsNkJBQTZCLENBQUM7SUFBQyxDQUFDLENBQUMsUUFBUSxFQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsSUFBSTtRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLElBQUUsQ0FBQztRQUFDLENBQUMsR0FBQyxHQUFHO1FBQUMsQ0FBQyxHQUFDLEVBQUU7UUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztVQUFDLElBQUksQ0FBQztZQUFDLENBQUM7WUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsR0FBRyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxNQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsSUFBSSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUFBLENBQUM7TUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxZQUFVO1FBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsWUFBVTtRQUFDLElBQUksSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksRUFBQyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsWUFBVTtRQUFDLElBQUksS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxFQUFFLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxVQUFTLENBQUMsRUFBQztVQUFDLE9BQU8sVUFBVSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQUEsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLFVBQVMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFFLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQyxJQUFFLENBQUM7TUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQztRQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxDQUFDLElBQUUsQ0FBQztNQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxZQUFVO1FBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBLENBQUMsRUFBQyxJQUFJLENBQUM7SUFBQSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBRCxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsTUFBTTtJQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFHLElBQUksQ0FBQyxJQUFJLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxjQUFjLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUUsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLGVBQWUsS0FBRyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsUUFBUSxLQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxDQUFDLEdBQUMsQ0FBQztRQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUE7SUFBQyxDQUFDLENBQUM7SUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUQsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLENBQUMsR0FBQyxTQUFBLENBQUEsRUFBVTtNQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxHQUFHLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsVUFBVSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUM7SUFBQSxDQUFDO0lBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxJQUFFLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLElBQUUsQ0FBQyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxJQUFFLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsWUFBVSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxHQUFDLFlBQVU7TUFBQyxPQUFPLElBQUk7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxZQUFVO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVO01BQUMsT0FBTSxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBQyxJQUFJLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsWUFBVTtNQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRO01BQUMsT0FBTyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsUUFBUSxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDO01BQUMsT0FBTyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFHLElBQUksS0FBRyxDQUFDLENBQUMsSUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJO1FBQUMsSUFBRyxDQUFDLEtBQUcsU0FBUyxDQUFDLE1BQU0sRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxJQUFJLElBQUUsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxRQUFRLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLFVBQVUsS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUM7TUFBQTtNQUFDLE9BQU8sSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLElBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsSUFBSSxJQUFFLElBQUksQ0FBQyxNQUFNO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsSUFBRSxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxTQUFTLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksS0FBRyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsRUFBQyxTQUFTLENBQUMsTUFBTSxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLGNBQWM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxLQUFLO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBQyxPQUFPLElBQUksQ0FBQyxVQUFVO01BQUMsSUFBRyxJQUFJLENBQUMsU0FBUyxFQUFDO1FBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUM7VUFBQyxJQUFJLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztVQUFDLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxjQUFjO1lBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTO1VBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxLQUFLLElBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxPQUFLLENBQUMsQ0FBQyxTQUFTLEdBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVM7UUFBQTtRQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxTQUFTLE1BQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUE7TUFBQyxPQUFPLElBQUk7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsYUFBYSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsVUFBVSxLQUFHLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxJQUFJLElBQUUsSUFBSSxDQUFDLFVBQVU7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVU7TUFBQyxJQUFHLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLElBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBQztRQUFDLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVO1VBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsSUFBRSxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUM7TUFBQTtNQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFFLENBQUMsSUFBRSxJQUFJLENBQUMsU0FBUyxLQUFHLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLElBQUUsSUFBSSxDQUFDLFNBQVM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU87TUFBQyxJQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsT0FBTyxJQUFFLElBQUksQ0FBQyxTQUFTLEVBQUM7UUFBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUFDLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVU7UUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsaUJBQWlCLEtBQUcsSUFBSSxDQUFDLFVBQVUsSUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksRUFBQyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLFFBQVEsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxVQUFVLElBQUUsSUFBSSxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztNQUFBO01BQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFFLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJO0lBQUEsQ0FBQztJQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsQ0FBQztJQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxDQUFELENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksRUFBQyxDQUFDLENBQUMsYUFBYSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDO01BQUMsSUFBRyxDQUFDLENBQUMsVUFBVSxHQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsT0FBTyxJQUFFLElBQUksS0FBRyxDQUFDLENBQUMsU0FBUyxLQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksRUFBQyxDQUFDLENBQUMsR0FBRyxJQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsYUFBYSxFQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLE9BQU8sQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFHLElBQUksS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsTUFBTSxLQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTTtNQUFDLEtBQUksSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxZQUFZLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxJQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsWUFBVTtNQUFDLE9BQU8sQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVO0lBQUEsQ0FBQztJQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUMsSUFBSSxJQUFFLENBQUMsRUFBQyxNQUFLLDZCQUE2QjtRQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxHQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztVQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7UUFBQyxJQUFHLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxHQUFDLElBQUksSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLFlBQVksS0FBSyxJQUFFLENBQUMsQ0FBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLFFBQVEsSUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFJLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxXQUFXLEdBQUMsRUFBRSxFQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUcsQ0FBQyxDQUFDLE1BQUksSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUM7UUFBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7UUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsSUFBSSxDQUFDLElBQUUsV0FBVyxLQUFHLENBQUMsSUFBRSxHQUFHLEtBQUcsQ0FBQyxJQUFFLEdBQUcsS0FBRyxDQUFDLElBQUUsT0FBTyxLQUFHLENBQUMsSUFBRSxRQUFRLEtBQUcsQ0FBQyxJQUFFLFdBQVcsS0FBRyxDQUFDLElBQUUsUUFBUSxLQUFHLENBQUMsSUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQztNQUFBLENBQUM7SUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBRCxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLHVCQUF1QixHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBRSxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztJQUFBLENBQUM7SUFBQyxJQUFJLENBQUMsR0FBQyxFQUFFO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDO1FBQUMsT0FBTyxFQUFDLENBQUM7UUFBQyxVQUFVLEVBQUMsQ0FBQztRQUFDLFVBQVUsRUFBQztNQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsYUFBYSxHQUFDO1FBQUMsSUFBSSxFQUFDLENBQUM7UUFBQyxLQUFLLEVBQUMsQ0FBQztRQUFDLFNBQVMsRUFBQyxDQUFDO1FBQUMsVUFBVSxFQUFDLENBQUM7UUFBQyxnQkFBZ0IsRUFBQyxDQUFDO1FBQUMsZUFBZSxFQUFDLENBQUM7UUFBQyxTQUFTLEVBQUMsQ0FBQztRQUFDLFlBQVksRUFBQyxDQUFDO1FBQUMsT0FBTyxFQUFDLENBQUM7UUFBQyxRQUFRLEVBQUMsQ0FBQztRQUFDLGNBQWMsRUFBQyxDQUFDO1FBQUMsYUFBYSxFQUFDLENBQUM7UUFBQyxPQUFPLEVBQUMsQ0FBQztRQUFDLGFBQWEsRUFBQyxDQUFDO1FBQUMsWUFBWSxFQUFDLENBQUM7UUFBQyxpQkFBaUIsRUFBQyxDQUFDO1FBQUMsdUJBQXVCLEVBQUMsQ0FBQztRQUFDLHNCQUFzQixFQUFDLENBQUM7UUFBQyxRQUFRLEVBQUMsQ0FBQztRQUFDLGNBQWMsRUFBQyxDQUFDO1FBQUMsYUFBYSxFQUFDLENBQUM7UUFBQyxVQUFVLEVBQUMsQ0FBQztRQUFDLElBQUksRUFBQyxDQUFDO1FBQUMsZUFBZSxFQUFDLENBQUM7UUFBQyxNQUFNLEVBQUMsQ0FBQztRQUFDLFdBQVcsRUFBQyxDQUFDO1FBQUMsSUFBSSxFQUFDLENBQUM7UUFBQyxNQUFNLEVBQUMsQ0FBQztRQUFDLFFBQVEsRUFBQyxDQUFDO1FBQUMsT0FBTyxFQUFDLENBQUM7UUFBQyxJQUFJLEVBQUM7TUFBQyxDQUFDO01BQUMsQ0FBQyxHQUFDO1FBQUMsSUFBSSxFQUFDLENBQUM7UUFBQyxHQUFHLEVBQUMsQ0FBQztRQUFDLElBQUksRUFBQyxDQUFDO1FBQUMsVUFBVSxFQUFDLENBQUM7UUFBQyxVQUFVLEVBQUMsQ0FBQztRQUFDLFdBQVcsRUFBQyxDQUFDO1FBQUMsTUFBTSxFQUFDLENBQUM7UUFBQyxPQUFPLEVBQUM7TUFBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxtQkFBbUIsR0FBQyxJQUFJLENBQUMsQ0FBRCxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUMsSUFBSSxDQUFDLENBQUQsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQUEsRUFBVTtRQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNO1FBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDO01BQUEsQ0FBQztJQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFlBQVU7TUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQztNQUFDLElBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxVQUFVLElBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUMsR0FBRyxDQUFDLEVBQUM7UUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUM7VUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxNQUFNLElBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUE7UUFBQyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBRyxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLEtBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1VBQUMsT0FBSyxDQUFDLElBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7VUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQUE7TUFBQztJQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFBQyxJQUFJLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVO1FBQUMsSUFBRyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDO1VBQUMsTUFBTSxFQUFDLENBQUM7VUFBQyxNQUFNLEVBQUM7UUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLE9BQUssRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7UUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQztRQUFDLElBQUcsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxFQUFDO1VBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsSUFBRyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLElBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRyxDQUFDLEtBQUcsQ0FBQyxFQUFDO1VBQU0sT0FBTyxDQUFDO1FBQUE7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLEVBQUU7VUFBQyxDQUFDLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLFNBQVM7UUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBSSxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBRSxDQUFDLENBQUMsT0FBTyxLQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBRyxLQUFLLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsUUFBUSxLQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxPQUFPLENBQUM7TUFBQSxDQUFDO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFFO1VBQUMsSUFBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsT0FBTyxFQUFDLE9BQU0sQ0FBQyxHQUFHO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTO1FBQUE7UUFBQyxPQUFPLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQztNQUFBLENBQUM7SUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLFlBQVU7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUI7UUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFNBQVM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJO01BQUMsSUFBRyxDQUFDLENBQUMsT0FBTyxFQUFDO1FBQUMsSUFBSSxDQUFDLFFBQVEsS0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7UUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUFDLElBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsZUFBZSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksRUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLElBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsS0FBSyxJQUFHLENBQUMsS0FBRyxDQUFDLEVBQUM7TUFBTSxDQUFDLE1BQUssSUFBRyxDQUFDLENBQUMsWUFBWSxJQUFFLENBQUMsS0FBRyxDQUFDLEVBQUMsSUFBRyxJQUFJLENBQUMsUUFBUSxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUk7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxTQUFTLEtBQUcsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxJQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztVQUFDLElBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxLQUFLLEVBQUM7UUFBTSxDQUFDLE1BQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUE7TUFBQyxJQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxHQUFDLENBQUMsWUFBWSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsWUFBWSxLQUFLLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBQyxDQUFDLEdBQUMsVUFBVSxJQUFFLE9BQU8sQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBQyxJQUFJLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxLQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7TUFBQyxJQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsUUFBUSxJQUFFLFVBQVUsSUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFlBQVksRUFBQyxLQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO01BQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQztNQUFDLElBQUcsSUFBSSxJQUFFLENBQUMsRUFBQyxPQUFNLENBQUMsQ0FBQztNQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBRSxDQUFDLENBQUMsS0FBSyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsR0FBRyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFHLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztNQUFDLEtBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUM7UUFBQyxJQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxZQUFZLEtBQUssSUFBRSxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFELENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEVBQUM7VUFBQyxLQUFJLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDO1lBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxRQUFRO1lBQUMsQ0FBQyxFQUFDLENBQUM7WUFBQyxDQUFDLEVBQUMsVUFBVTtZQUFDLENBQUMsRUFBQyxDQUFDO1lBQUMsQ0FBQyxFQUFDLENBQUM7WUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxFQUFDLENBQUM7WUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztVQUFTLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUTtVQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsZUFBZSxNQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsU0FBUyxNQUFJLElBQUksQ0FBQyx1QkFBdUIsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUFBLENBQUMsTUFBSyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUM7VUFBQyxLQUFLLEVBQUMsSUFBSSxDQUFDLFFBQVE7VUFBQyxDQUFDLEVBQUMsQ0FBQztVQUFDLENBQUMsRUFBQyxDQUFDO1VBQUMsQ0FBQyxFQUFDLFVBQVUsSUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQyxDQUFDLEVBQUMsQ0FBQztVQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7VUFBQyxFQUFFLEVBQUM7UUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFFLFVBQVUsSUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLElBQUUsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQztRQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxLQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQztNQUFBO01BQUMsT0FBTyxDQUFDLElBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLFFBQVEsS0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBRyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxZQUFZO01BQUMsSUFBRyxDQUFDLElBQUUsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLFlBQVksQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLFFBQVEsSUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxVQUFVLEtBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxZQUFZLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUcsSUFBSSxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsTUFBSSxDQUFDLEdBQUMsbUJBQW1CLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsUUFBUSxJQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsWUFBWSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFFBQVEsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUcsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxFQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFNBQVM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVU7UUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLElBQUUsRUFBRSxNQUFJLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUM7TUFBQSxDQUFDLE1BQUssSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO01BQUMsSUFBRyxJQUFJLENBQUMsS0FBSyxLQUFHLENBQUMsSUFBRSxDQUFDLEVBQUM7UUFBQyxJQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQztVQUFDLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksQ0FBQyxHQUFHLEVBQUM7VUFBTyxJQUFHLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxRQUFRLEtBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUcsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFNBQVMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFlBQVksR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxLQUFLLENBQUM7VUFBQyxJQUFJLENBQUMsS0FBSyxJQUFFLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQTtRQUFDLEtBQUksSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUUsSUFBSSxDQUFDLEtBQUssS0FBRyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsUUFBUSxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxLQUFLLElBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUUsSUFBSSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztRQUFDLElBQUksQ0FBQyxTQUFTLEtBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksQ0FBQyxVQUFVLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUUsSUFBSSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxHQUFHLEtBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsUUFBUSxJQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBRSxJQUFJLENBQUMsVUFBVSxJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxJQUFFLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxRQUFRLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxZQUFZLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLFlBQVksR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUE7SUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFHLEtBQUssS0FBRyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksQ0FBQyxFQUFDLElBQUksSUFBRSxDQUFDLEtBQUcsSUFBSSxJQUFFLENBQUMsSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFFBQVEsSUFBRSxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQztNQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQyxJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxRQUFRLElBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJO1FBQUMsSUFBRyxJQUFJLENBQUMsUUFBUSxFQUFDO1VBQUMsS0FBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsSUFBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQztZQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUUsRUFBRSxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxLQUFLO1lBQUM7VUFBSztRQUFDLENBQUMsTUFBSTtVQUFDLElBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxNQUFNLEVBQUMsT0FBTSxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUUsQ0FBQyxDQUFDLEdBQUMsS0FBSztRQUFBO1FBQUMsSUFBRyxDQUFDLEVBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxLQUFLLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEtBQUcsUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztVQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUksQ0FBQyxDQUFDLEVBQUUsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxJQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsUUFBUSxLQUFHLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksQ0FBQyxRQUFRLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUFBO01BQUM7TUFBQyxPQUFPLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxZQUFVO01BQUMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLElBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFDLElBQUksRUFBQyxJQUFJLENBQUMsU0FBUyxHQUFDLElBQUksRUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLElBQUksRUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLHVCQUF1QixHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFdBQVcsR0FBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsRUFBQyxJQUFJO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxHQUFHLEVBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVE7UUFBQyxJQUFHLENBQUMsRUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO01BQUE7TUFBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBRSxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFDLFdBQVcsR0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLEtBQUssRUFBQyxDQUFDO1FBQUMsVUFBVSxFQUFDLENBQUM7UUFBQyxnQkFBZ0IsRUFBQyxDQUFDO1FBQUMsZUFBZSxFQUFDLENBQUM7UUFBQyxpQkFBaUIsRUFBQyxDQUFDO1FBQUMsdUJBQXVCLEVBQUMsQ0FBQztRQUFDLHNCQUFzQixFQUFDLENBQUM7UUFBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDO1FBQUMsU0FBUyxFQUFDLENBQUM7UUFBQyxTQUFTLEVBQUM7TUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBRyxJQUFJLElBQUUsQ0FBQyxFQUFDLE9BQU0sRUFBRTtNQUFDLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQztNQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQztNQUFDLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLFFBQVEsSUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztRQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQSxDQUFDLE1BQUssS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFDLE9BQU8sQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFDLENBQUMsQ0FBQyxrQkFBa0IsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxlQUFlLEdBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLFNBQVM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxFQUFDLENBQUM7TUFBQyxPQUFPLElBQUksSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsSUFBRSxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLEdBQUM7UUFBQyxLQUFLLEVBQUMsSUFBSSxDQUFDLFFBQVE7UUFBQyxDQUFDLEVBQUMsQ0FBQztRQUFDLENBQUMsRUFBQyxDQUFDO1FBQUMsQ0FBQyxFQUFDLENBQUM7UUFBQyxDQUFDLEVBQUMsQ0FBQztRQUFDLENBQUMsRUFBQyxVQUFVLElBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDO1FBQUMsQ0FBQyxFQUFDO01BQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLEtBQUssQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsS0FBSSxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLEdBQUMsSUFBSSxFQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsZUFBZTtRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUTtNQUFDLElBQUcsSUFBSSxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxDQUFDLGVBQWUsR0FBQyxFQUFFLENBQUMsS0FBSyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLElBQUksSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUMsT0FBSyxDQUFDLEdBQUUsSUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsSUFBSSxJQUFFLElBQUksQ0FBQyxRQUFRLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO01BQUMsT0FBTSxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxLQUFJLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBRSxJQUFJLElBQUUsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsY0FBYyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVE7TUFBQyxJQUFHLGlCQUFpQixLQUFHLENBQUMsRUFBQztRQUFDLE9BQUssQ0FBQyxHQUFFO1VBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1VBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQTtRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUM7TUFBQTtNQUFDLE9BQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxFQUFFLElBQUUsVUFBVSxJQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7TUFBQyxPQUFPLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUcsQ0FBQyxDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFELENBQUMsQ0FBRSxTQUFTLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxPQUFNLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBRyxFQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFDLE1BQUssNEJBQTRCO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsY0FBYztRQUFDLENBQUMsR0FBQztVQUFDLElBQUksRUFBQyxjQUFjO1VBQUMsR0FBRyxFQUFDLFVBQVU7VUFBQyxJQUFJLEVBQUMsT0FBTztVQUFDLEtBQUssRUFBQyxhQUFhO1VBQUMsT0FBTyxFQUFDO1FBQWlCLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxRQUFRLEVBQUMsWUFBVTtVQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsZUFBZSxHQUFDLENBQUMsSUFBRSxFQUFFO1FBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHO01BQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDLFVBQVUsSUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQztNQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFEQUFxRCxHQUFDLENBQUMsQ0FBQztJQUFBO0lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztFQUFBO0FBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQzs7Ozs7QUNYMTR2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVU7RUFBQyxZQUFZOztFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFDLENBQUMsYUFBYSxDQUFDLEVBQUMsVUFBUyxDQUFDLEVBQUM7SUFBQyxJQUFJLENBQUM7TUFBQyxDQUFDO01BQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUUsTUFBTTtNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxFQUFFO01BQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTTtNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxFQUFDLFlBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBRCxDQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsRUFBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxJQUFFLFlBQVUsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQztVQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBRCxDQUFDO1VBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxDQUFELENBQUM7VUFBQyxTQUFTLEVBQUMsSUFBSSxDQUFDLENBQUQ7UUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxJQUFJLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQyxVQUFTLENBQUMsRUFBQztZQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsR0FBRztVQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxDQUFELENBQUM7UUFBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUM7VUFBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFBLENBQUMsRUFBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsVUFBUyxDQUFDLEVBQUM7UUFBQyxPQUFNLENBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUM7TUFBQSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxFQUFDLFVBQVMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7TUFBQSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxFQUFDLFVBQVMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBQyxFQUFFLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxFQUFFLEVBQUMsSUFBSSxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsS0FBRyxDQUFDLENBQUM7TUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBRCxDQUFDO0lBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxHQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsRUFBRTtNQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLElBQUksQ0FBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxDQUFELENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsVUFBVSxDQUFDLEVBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLEdBQUc7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDO01BQUMsS0FBSSxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxJQUFFLE1BQU0sRUFBQyxDQUFDLEdBQUMsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsTUFBTSxJQUFFLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLFlBQVksQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsSUFBSSxFQUFDLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsTUFBTSxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEtBQUssS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLElBQUksS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxFQUFFLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQztRQUFDLENBQUMsRUFBQyxDQUFDO1FBQUMsQ0FBQyxFQUFDO01BQUMsQ0FBQztNQUFDLEtBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBRCxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLO01BQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztRQUFDLE9BQUssQ0FBQyxDQUFDLElBQUksSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUk7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUk7TUFBQSxDQUFDLE1BQUssT0FBSyxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSTtNQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLENBQUQsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxHQUFDLElBQUksR0FBQyxDQUFDLEdBQUMsTUFBTSxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksR0FBQyxDQUFDLEdBQUMsTUFBTSxJQUFFLENBQUMsSUFBRSxHQUFHLEdBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxHQUFHLEdBQUMsSUFBSSxHQUFDLENBQUMsR0FBQyxNQUFNLElBQUUsQ0FBQyxJQUFFLElBQUksR0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLEdBQUMsS0FBSyxHQUFDLE1BQU0sSUFBRSxDQUFDLElBQUUsS0FBSyxHQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsR0FBQyxPQUFPO0lBQUEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxHQUFDLElBQUksSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxNQUFNLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsTUFBTSxJQUFFLENBQUMsSUFBRSxHQUFHLEdBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxHQUFDLEdBQUcsR0FBQyxJQUFJLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxNQUFNLElBQUUsQ0FBQyxJQUFFLElBQUksR0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLEdBQUMsS0FBSyxDQUFDLEdBQUMsQ0FBQyxJQUFFLE1BQU0sSUFBRSxDQUFDLElBQUUsS0FBSyxHQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsR0FBQyxPQUFPLENBQUM7SUFBQSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsYUFBYSxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEdBQUMsRUFBRSxHQUFDLENBQUM7TUFBQyxPQUFPLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEdBQUMsQ0FBQyxHQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEdBQUMsQ0FBQyxHQUFDLE1BQU0sSUFBRSxDQUFDLElBQUUsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsR0FBRyxHQUFDLElBQUksR0FBQyxDQUFDLEdBQUMsTUFBTSxJQUFFLENBQUMsSUFBRSxJQUFJLEdBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLEtBQUssR0FBQyxNQUFNLElBQUUsQ0FBQyxJQUFFLEtBQUssR0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLEdBQUMsT0FBTyxFQUFDLENBQUMsR0FBQyxFQUFFLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsRUFBRTtJQUFBLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsU0FBUyxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU8sQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7VUFBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQztRQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxDQUFELENBQUM7TUFBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQyxFQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsWUFBWSxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBQyxVQUFTLENBQUMsRUFBQztNQUFDLE9BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsY0FBYyxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxHQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLEVBQUUsR0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxFQUFDLFVBQVMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSTtJQUFBLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsRUFBRSxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLElBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztJQUFBLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxPQUFNLENBQUMsRUFBRSxJQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxtQkFBbUIsRUFBQztNQUFDLElBQUksRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUFBO0lBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxN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LENBQUMsR0FBQyxDQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsUUFBUTtNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDO1FBQUMsYUFBYSxFQUFDO01BQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFTLENBQUMsU0FBUztNQUFDLENBQUMsR0FBQyxZQUFVO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLHVDQUF1QyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDLENBQUMsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFHLEVBQUUsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUM7UUFBQyxNQUFNLENBQUMsT0FBTyxJQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxFQUFFO01BQUMsQ0FBQyxHQUFDLEVBQUU7TUFBQyxDQUFDLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1FBQUMsSUFBRyxLQUFLLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDO1FBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBRyxFQUFDLEtBQUssRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsS0FBSyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRTtRQUFDLE9BQU8sQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsSUFBSTtNQUFBLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFDLFlBQVUsQ0FBQyxDQUFDO01BQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1FBQUMsT0FBTyxDQUFDLElBQUUsU0FBUyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsWUFBWSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxJQUFFLENBQUMsSUFBRSxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsSUFBRSxNQUFNLEtBQUcsQ0FBQyxJQUFFLFdBQVcsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsZUFBZSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUcsSUFBSSxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxPQUFPLENBQUM7UUFBQyxJQUFHLE1BQU0sS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQztRQUFDLElBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSTtVQUFDLElBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBQyw4QkFBOEIsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxHQUFDLGlCQUFpQixFQUFDLEdBQUcsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLGlCQUFpQixHQUFDLGdCQUFnQixDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFJO1lBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBRSxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUcsQ0FBQyxFQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsR0FBRztZQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsT0FBTyxHQUFDLFFBQVEsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDO1VBQUE7VUFBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxhQUFhLEdBQUMsY0FBYyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxHQUFHLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxXQUFXLEtBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUE7UUFBQyxPQUFPLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsZUFBZSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFHLFVBQVUsS0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsRUFBQyxPQUFPLENBQUM7UUFBQyxJQUFJLENBQUMsR0FBQyxNQUFNLEtBQUcsQ0FBQyxHQUFDLE1BQU0sR0FBQyxLQUFLO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsUUFBUSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7UUFBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDO1VBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxPQUFLLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLE9BQUssSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFlBQVksSUFBRSxDQUFDLENBQUMsS0FBSyxFQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLElBQUUsT0FBTyxDQUFDLElBQUUsS0FBSyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxLQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLElBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1FBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDLFNBQVMsS0FBRyxDQUFDLElBQUUsUUFBUSxLQUFHLENBQUMsSUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBRyxRQUFRLElBQUUsT0FBTyxDQUFDLElBQUUsUUFBUSxJQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLE1BQU0sS0FBRyxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsSUFBRSxLQUFLLEtBQUcsQ0FBQyxHQUFDLEVBQUUsS0FBRyxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsSUFBRSxNQUFNLEtBQUcsQ0FBQyxJQUFFLFFBQVEsSUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxFQUFFLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLElBQUcsQ0FBQyxFQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxXQUFXLEtBQUcsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxPQUFNO1VBQUMsSUFBSSxFQUFDLENBQUM7VUFBQyxRQUFRLEVBQUM7UUFBQyxDQUFDO01BQUEsQ0FBQztNQUFDLENBQUMsR0FBQztRQUFDLEtBQUssRUFBQyxDQUFDLE1BQU0sRUFBQyxPQUFPLENBQUM7UUFBQyxNQUFNLEVBQUMsQ0FBQyxLQUFLLEVBQUMsUUFBUTtNQUFDLENBQUM7TUFBQyxDQUFDLEdBQUMsQ0FBQyxZQUFZLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxjQUFjLENBQUM7TUFBQyxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsVUFBVSxDQUFDLE9BQU8sS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU07UUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLElBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDO1FBQUMsT0FBTyxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsSUFBRSxFQUFFLEtBQUcsQ0FBQyxJQUFFLE1BQU0sS0FBRyxDQUFDLElBQUUsV0FBVyxLQUFHLENBQUMsTUFBSSxDQUFDLEdBQUMsS0FBSyxDQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFDLElBQUksR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxJQUFJLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsUUFBUSxLQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEtBQUcsQ0FBQyxJQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsR0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFJLENBQUMsR0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUM7TUFBQSxDQUFDO01BQUMsRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsT0FBTSxRQUFRLElBQUUsT0FBTyxDQUFDLElBQUUsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxJQUFJLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLElBQUUsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSTtRQUFDLE9BQU8sSUFBSSxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsVUFBVSxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxVQUFVLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUM7UUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQztRQUFDLElBQUksRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO1FBQUMsTUFBTSxFQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7UUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7UUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQztRQUFDLElBQUksRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsR0FBRyxDQUFDO1FBQUMsS0FBSyxFQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7UUFBQyxPQUFPLEVBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQztRQUFDLEtBQUssRUFBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO1FBQUMsTUFBTSxFQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFBQyxNQUFNLEVBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztRQUFDLElBQUksRUFBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDO1FBQUMsTUFBTSxFQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxHQUFHLENBQUM7UUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztRQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQUMsSUFBSSxFQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7UUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQztRQUFDLFdBQVcsRUFBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUM7TUFBQyxDQUFDO01BQUMsRUFBRSxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLE9BQU8sQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRTtNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO1FBQUMsT0FBTyxDQUFDLElBQUUsRUFBRSxLQUFHLENBQUMsR0FBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxFQUFDLEdBQUcsR0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsSUFBRSxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsRUFBQyxHQUFHLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLElBQUUsS0FBSyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsRUFBRSxJQUFFLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMscURBQXFEO0lBQUMsS0FBSSxDQUFDLElBQUksRUFBRSxFQUFDLEVBQUUsSUFBRSxHQUFHLEdBQUMsQ0FBQyxHQUFDLEtBQUs7SUFBQyxFQUFFLEdBQUMsTUFBTSxDQUFDLEVBQUUsR0FBQyxHQUFHLEVBQUMsSUFBSSxDQUFDO0lBQUMsSUFBSSxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUcsSUFBSSxJQUFFLENBQUMsRUFBQyxPQUFPLFVBQVMsQ0FBQyxFQUFDO1VBQUMsT0FBTyxDQUFDO1FBQUEsQ0FBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUMsRUFBRTtVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRTtVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLEVBQUU7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBQyxHQUFHLEdBQUMsR0FBRztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTTtVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLEVBQUU7UUFBQyxPQUFPLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLFVBQVMsQ0FBQyxFQUFDO1VBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO1VBQUMsSUFBRyxRQUFRLElBQUUsT0FBTyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLElBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7WUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7VUFBQTtVQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsRUFBQyxPQUFLLENBQUMsR0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQyxPQUFPLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUMsUUFBUSxHQUFDLEVBQUUsQ0FBQztRQUFBLENBQUMsR0FBQyxVQUFTLENBQUMsRUFBQztVQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO1VBQUMsSUFBRyxRQUFRLElBQUUsT0FBTyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLElBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7WUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7VUFBQTtVQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsRUFBQyxPQUFLLENBQUMsR0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQyxPQUFPLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQSxDQUFDLEdBQUMsVUFBUyxDQUFDLEVBQUM7VUFBQyxPQUFPLENBQUM7UUFBQSxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztVQUFDLElBQUksQ0FBQztZQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztVQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUM7VUFBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQUEsQ0FBQztNQUFBLENBQUM7TUFBQyxFQUFFLElBQUUsQ0FBQyxDQUFDLGVBQWUsR0FBQyxVQUFTLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUFDLEtBQUksSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxHQUFDLElBQUksRUFBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztRQUFDLElBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsRUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsR0FBRTtVQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksRUFBQztZQUFDLElBQUcsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUM7Y0FBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO2NBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDO1lBQUE7VUFBQyxDQUFDLE1BQUssQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1FBQUE7TUFBQyxDQUFDLEVBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQyxDQUFDO01BQUMsRUFBRSxJQUFFLENBQUMsQ0FBQyxhQUFhLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVO1VBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQyxLQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUMsSUFBSSxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksRUFBQyxDQUFDLENBQUMsS0FBSyxLQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBRTtVQUFDLElBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxJQUFJLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7UUFBQTtRQUFDLE9BQU07VUFBQyxLQUFLLEVBQUMsQ0FBQztVQUFDLEdBQUcsRUFBQyxDQUFDO1VBQUMsUUFBUSxFQUFDLENBQUM7VUFBQyxFQUFFLEVBQUM7UUFBQyxDQUFDO01BQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsWUFBWSxFQUFFLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsRUFBRSxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLEtBQUssQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQztNQUFBLENBQUMsQ0FBQztNQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsWUFBWSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsRUFBRSxFQUFDLENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxFQUFFO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNO1VBQUMsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLENBQUM7UUFBQyxLQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRyxDQUFDLEtBQUcsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLEdBQUMsR0FBRyxFQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFDLGNBQWMsR0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFDLE9BQU8sR0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7VUFBQyxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBQyxPQUFPLENBQUM7VUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxJQUFFLElBQUksS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNO1VBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFBQSxDQUFDLE1BQUssQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQyxJQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksRUFBQztVQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxDQUFDLENBQUM7VUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQztRQUFBO1FBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxDQUFDO0lBQUMsS0FBSSxDQUFDLEdBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBRSxHQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsSUFBSSxHQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLEVBQUUsQ0FBQyxHQUFDLEVBQUU7SUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLElBQUksRUFBQyxDQUFDLENBQUMsVUFBVSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO01BQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsRUFBRSxFQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksR0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSSxHQUFDO1FBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQztNQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsSUFBSSxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsU0FBUyxJQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUM7TUFBQSxDQUFDO01BQUMsRUFBRSxHQUFDLENBQUMsQ0FBQywyQkFBMkIsR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxLQUFHLENBQUMsR0FBQztVQUFDLE1BQU0sRUFBQztRQUFDLENBQUMsQ0FBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFlBQVk7UUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7VUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxRQUFRO1VBQUMsRUFBRSxDQUFDLENBQUMsRUFBQztZQUFDLE1BQU0sRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO2NBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztjQUFDLE9BQU8sQ0FBQyxJQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEdBQUMsc0JBQXNCLENBQUMsRUFBQyxDQUFDLENBQUM7WUFBQTtVQUFDLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FBQztJQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxPQUFPO01BQUMsSUFBRyxJQUFJLENBQUMsS0FBSyxLQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxLQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7TUFBQTtNQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsbUJBQW1CLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUM7UUFBQyxNQUFNLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1VBQUMsSUFBSSxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztVQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7UUFBQSxDQUFDO1FBQUMsUUFBUSxFQUFDO01BQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUFDLElBQUksRUFBRSxHQUFDLGlGQUFpRixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztNQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsV0FBVztNQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7TUFBQyxFQUFFLEdBQUMsSUFBSSxLQUFHLENBQUMsQ0FBQyxhQUFhLENBQUM7TUFBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxZQUFVO1FBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsWUFBWSxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBRyxDQUFDLENBQUMsWUFBWSxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQyxZQUFZO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsWUFBWSxJQUFFLElBQUksRUFBRSxDQUFELENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBRCxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTTtVQUFDLENBQUMsR0FBQyxJQUFJO1VBQUMsQ0FBQyxHQUFDLEdBQUc7VUFBQyxDQUFDLEdBQUMsTUFBTTtVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxFQUFFLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsT0FBTyxJQUFFLENBQUMsR0FBQyxDQUFDO1FBQUMsS0FBSSxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxJQUFFLEVBQUUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsR0FBQyxFQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQyxJQUFHLEVBQUUsS0FBRyxDQUFDLENBQUMsTUFBTSxFQUFDO1VBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7VUFBQyxJQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLElBQUksSUFBRSxDQUFDLENBQUMsU0FBUyxFQUFDO1lBQUMsSUFBSSxDQUFDO2NBQUMsQ0FBQztjQUFDLENBQUM7Y0FBQyxDQUFDO2NBQUMsQ0FBQztjQUFDLENBQUM7Y0FBQyxDQUFDO2NBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2NBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztjQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUM7WUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLEVBQUUsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxFQUFFLElBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDO1VBQUE7UUFBQyxDQUFDLE1BQUssSUFBRyxFQUFFLEVBQUUsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFFLEtBQUssQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7VUFBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxJQUFFLENBQUM7WUFBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDO1lBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDO1lBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDO1lBQUMsRUFBRSxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQztVQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLEVBQUUsR0FBQyxFQUFFLEdBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLEVBQUUsR0FBQyxFQUFFLEdBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsSUFBRSxFQUFFLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxFQUFFLElBQUUsRUFBRSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLElBQUUsR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsR0FBRyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxJQUFFLEdBQUcsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssSUFBRSxHQUFHLEVBQUMsQ0FBQyxLQUFLLENBQUMsS0FBRyxDQUFDLENBQUMsS0FBSyxJQUFFLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxJQUFFLEtBQUssR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxJQUFFLEtBQUssR0FBQyxDQUFDLEdBQUMsQ0FBQyxNQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxLQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFBQTtRQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQztRQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEtBQUcsQ0FBQyxDQUFDLFlBQVksR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSTtVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLEdBQUc7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsSUFBRSxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLElBQUUsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLElBQUUsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxJQUFFLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWTtRQUFDLElBQUcsQ0FBQyxFQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsRUFBRTtVQUFDLElBQUksQ0FBQztZQUFDLENBQUM7WUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWTtZQUFDLENBQUMsR0FBQyxVQUFVLEtBQUcsQ0FBQyxDQUFDLFFBQVE7WUFBQyxDQUFDLEdBQUMsK0NBQStDLEdBQUMsQ0FBQyxHQUFDLFFBQVEsR0FBQyxDQUFDLEdBQUMsUUFBUSxHQUFDLENBQUMsR0FBQyxRQUFRLEdBQUMsQ0FBQztZQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztVQUFDLElBQUcsSUFBSSxJQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBRSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUUsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLE9BQU8sSUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsT0FBTyxJQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLElBQUUsQ0FBQyxJQUFFLCtCQUErQixFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBRSxHQUFHLEtBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDO1lBQUMsSUFBSSxDQUFDO2NBQUMsQ0FBQztjQUFDLENBQUM7Y0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1lBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsRUFBRSxFQUFDLEVBQUUsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxFQUFFLElBQUUsQ0FBQyxLQUFHLEVBQUUsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJO1VBQUE7UUFBQztNQUFDLENBQUM7TUFBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFDLFVBQVMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSTtVQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxXQUFXO1FBQUMsSUFBRyxFQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxNQUFNLEtBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBRSxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxDQUFDO1FBQUMsSUFBRyxDQUFDLEVBQUM7VUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJO1VBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsU0FBUyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUM7UUFBQTtRQUFDLElBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLFFBQVEsS0FBRyxDQUFDLENBQUMsUUFBUSxLQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUk7VUFBQyxJQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsY0FBYyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsS0FBSyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxTQUFTLEdBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQztRQUFBO1FBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLEdBQUMsRUFBRSxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsR0FBQyxFQUFFLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxHQUFDLEVBQUUsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUMsR0FBRztNQUFBLENBQUM7TUFBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLG1CQUFtQixHQUFDLFVBQVMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSTtVQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztRQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBRyxDQUFDLENBQUMsSUFBRSxNQUFNLEtBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLFFBQVEsR0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxDQUFDLEtBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsS0FBSyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsSUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLEtBQUssQ0FBQyxDQUFDO01BQUEsQ0FBQztJQUFDLEVBQUUsQ0FBQyxtUEFBbVAsRUFBQztNQUFDLE1BQU0sRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBRyxDQUFDLENBQUMsVUFBVSxFQUFDLE9BQU8sQ0FBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7VUFBQyxDQUFDLEdBQUMsSUFBSTtVQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsTUFBTTtVQUFDLENBQUMsR0FBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUFDLElBQUcsUUFBUSxJQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsSUFBRSxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFHLFFBQVEsSUFBRSxPQUFPLENBQUMsRUFBQztVQUFDLElBQUcsQ0FBQyxHQUFDO1lBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLFdBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyxXQUFXO1VBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUMsSUFBSSxJQUFFLENBQUMsRUFBQyxJQUFHLFFBQVEsSUFBRSxPQUFPLENBQUMsRUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQztVQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsRUFBRSxDQUFDLFVBQVUsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxlQUFlLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUMsUUFBUSxHQUFDLFdBQVcsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsS0FBRyxDQUFDLENBQUMsU0FBUyxHQUFDLEVBQUUsQ0FBQyxXQUFXLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsZ0JBQWdCLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsRUFBRSxDQUFDLFdBQVcsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxnQkFBZ0IsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksSUFBRSxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxNQUFJLENBQUMsQ0FBQyxLQUFLLElBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDO1FBQUE7UUFBQyxLQUFJLEVBQUUsSUFBRSxJQUFJLElBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBRyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBRSxDQUFDLENBQUMsV0FBVyxFQUFDLENBQUMsSUFBRSxJQUFJLElBQUUsQ0FBQyxDQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxJQUFJLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxPQUFPLENBQUMsR0FBQyxDQUFDLENBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQyxJQUFFLEVBQUUsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLE9BQU8sTUFBSSxFQUFFLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxTQUFTLENBQUMsSUFBRSxFQUFFLEVBQUMsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsaUJBQWlCLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxFQUFFLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLElBQUUsS0FBSyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEtBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxLQUFLLENBQUMsR0FBQyxNQUFNLEVBQUMsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsT0FBTyxJQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsRUFBRSxDQUFDLENBQUMsR0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLGNBQWMsR0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxjQUFjLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsTUFBTSxFQUFDLENBQUM7SUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsV0FBVyxFQUFDO01BQUMsWUFBWSxFQUFDLHNCQUFzQjtNQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7TUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO01BQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztNQUFDLE9BQU8sRUFBQztJQUFPLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUM7TUFBQyxZQUFZLEVBQUMsS0FBSztNQUFDLE1BQU0sRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLHFCQUFxQixFQUFDLHNCQUFzQixFQUFDLHlCQUF5QixFQUFDLHdCQUF3QixDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1FBQUMsS0FBSSxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBQyxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsRUFBRSxNQUFNLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxFQUFFLEtBQUcsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBQyxFQUFFLEtBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsR0FBRyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLEdBQUcsSUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxJQUFFLElBQUksS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxFQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQUMsT0FBTyxDQUFDO01BQUEsQ0FBQztNQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7TUFBQyxTQUFTLEVBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBQztNQUFDLFlBQVksRUFBQyxLQUFLO01BQUMsTUFBTSxFQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLHFCQUFxQjtVQUFDLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsS0FBRyxLQUFLLENBQUM7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFBQyxJQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLElBQUUsTUFBTSxLQUFHLENBQUMsQ0FBQyxFQUFDO1VBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxNQUFJLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLFlBQVksR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLEdBQUcsSUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxDQUFDO1VBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQUE7UUFBQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsU0FBUyxFQUFDO0lBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDO01BQUMsWUFBWSxFQUFDLEtBQUs7TUFBQyxTQUFTLEVBQUM7SUFBRSxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsYUFBYSxFQUFDO01BQUMsWUFBWSxFQUFDLEtBQUs7TUFBQyxNQUFNLEVBQUMsQ0FBQztJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBQztNQUFDLFlBQVksRUFBQyxTQUFTO01BQUMsTUFBTSxFQUFDLENBQUM7SUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUM7TUFBQyxNQUFNLEVBQUMsQ0FBQztJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBQztNQUFDLE1BQU0sRUFBQyxDQUFDO0lBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFlBQVksRUFBQztNQUFDLE1BQU0sRUFBQyxDQUFDO0lBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQztNQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsK0NBQStDO0lBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQztNQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsbURBQW1EO0lBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQztNQUFDLFlBQVksRUFBQyx1QkFBdUI7TUFBQyxNQUFNLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7UUFBQyxPQUFPLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsR0FBRyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQTtJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUM7TUFBQyxZQUFZLEVBQUMsa0JBQWtCO01BQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztNQUFDLEtBQUssRUFBQyxDQUFDO0lBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFDO01BQUMsTUFBTSxFQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDO01BQUE7SUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsUUFBUSxFQUFDO01BQUMsWUFBWSxFQUFDLGdCQUFnQjtNQUFDLE1BQU0sRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7UUFBQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLGdCQUFnQixFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxPQUFPLENBQUMsR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztNQUFDLFNBQVMsRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLElBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFBQTtJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUM7TUFBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLG1FQUFtRTtJQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQywyQkFBMkIsRUFBQztNQUFDLE1BQU0sRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1VBQUMsQ0FBQyxHQUFDLFVBQVUsSUFBRyxDQUFDLEdBQUMsVUFBVSxHQUFDLFlBQVk7UUFBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO01BQUE7SUFBQyxDQUFDLENBQUM7SUFBQyxJQUFJLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsUUFBUSxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQztNQUFDLEdBQUcsS0FBRyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxRQUFRLENBQUMsS0FBRyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxHQUFHLEtBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLGdCQUFnQixHQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFDLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsR0FBQyxpQkFBaUIsR0FBQyxDQUFDLEdBQUMsR0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsRUFBRSxDQUFDLHlCQUF5QixFQUFDO01BQUMsWUFBWSxFQUFDLEdBQUc7TUFBQyxNQUFNLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztVQUFDLENBQUMsR0FBQyxXQUFXLEtBQUcsQ0FBQztRQUFDLE9BQU0sUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLFFBQVEsS0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsR0FBRyxHQUFDLENBQUMsRUFBQyxHQUFHLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxnQkFBZ0IsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLGdCQUFnQixJQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsU0FBUyxHQUFDLFFBQVEsRUFBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLFFBQVEsR0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO01BQUE7SUFBQyxDQUFDLENBQUM7SUFBQyxJQUFJLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQztRQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsY0FBYyxJQUFFLElBQUksS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFDLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDO1FBQUMsSUFBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxJQUFJLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxFQUFDO1VBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQUMsS0FBSSxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1VBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBRyxJQUFJLEtBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDO1FBQUEsQ0FBQyxNQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFHLElBQUksQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDO0lBQUMsRUFBRSxDQUFDLFdBQVcsRUFBQztNQUFDLE1BQU0sRUFBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFFLEVBQUU7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPO1FBQUMsSUFBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFlBQVksR0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsVUFBVSxFQUFDO1VBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztVQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQUE7UUFBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxLQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEtBQUssQ0FBQyxFQUFDLEVBQUUsQ0FBQyxJQUFFLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztNQUFBO0lBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBSSxFQUFFLEdBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztNQUFDLElBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEtBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUUsYUFBYSxLQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDO1FBQUMsSUFBSSxDQUFDO1VBQUMsQ0FBQztVQUFDLENBQUM7VUFBQyxDQUFDO1VBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztVQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUs7UUFBQyxJQUFHLEtBQUssS0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUMsRUFBRSxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUksQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsaUJBQWlCLEtBQUcsQ0FBQyxHQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEtBQUcsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO01BQUE7SUFBQyxDQUFDO0lBQUMsS0FBSSxFQUFFLENBQUMsWUFBWSxFQUFDO01BQUMsTUFBTSxFQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxHQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxHQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztNQUFBO0lBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLDBDQUEwQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLFlBQVksR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUMsT0FBTSxDQUFDLENBQUM7TUFBQyxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLElBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLGVBQWU7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLElBQUcsQ0FBQyxJQUFFLEVBQUUsS0FBRyxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU0sS0FBRyxDQUFDLElBQUUsRUFBRSxLQUFHLENBQUMsS0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxRQUFRLElBQUUsT0FBTyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLEdBQUMsR0FBRyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsRUFBQyxJQUFJLENBQUMsY0FBYyxFQUFDO1FBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxjQUFjLEVBQUMsRUFBRSxHQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxLQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsSUFBRSxFQUFFLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQywwQkFBMEIsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixLQUFHLENBQUMsR0FBQyxTQUFTLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1FBQUMsQ0FBQyxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxJQUFFLEVBQUUsR0FBQyxFQUFFLEdBQUMsRUFBRSxHQUFDLEVBQUUsR0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxJQUFJLENBQUMsVUFBVSxJQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQUE7TUFBQyxJQUFHLENBQUMsRUFBQztRQUFDLE9BQUssQ0FBQyxHQUFFO1VBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLO1VBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQTtRQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQztNQUFBO01BQUMsT0FBTSxDQUFDLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxVQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxFQUFFLEVBQUMsQ0FBQyxHQUFDLFFBQVEsSUFBRSxPQUFPLENBQUMsRUFBQyxPQUFPLEtBQUcsQ0FBQyxJQUFFLE1BQU0sS0FBRyxDQUFDLElBQUUsUUFBUSxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxHQUFDLE9BQU8sR0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUMsRUFBRSxFQUFDLENBQUMsRUFBRSxLQUFHLENBQUMsSUFBRSxNQUFNLEtBQUcsQ0FBQyxNQUFJLE9BQU8sS0FBRyxDQUFDLElBQUUsUUFBUSxLQUFHLENBQUMsSUFBRSxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksSUFBRSxNQUFNLEtBQUcsQ0FBQyxJQUFFLEtBQUssS0FBRyxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLEtBQUcsQ0FBQyxHQUFDLFNBQVMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLEdBQUcsS0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBRSxFQUFFLEdBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxLQUFHLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxJQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxFQUFFLEtBQUcsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxLQUFHLENBQUMsSUFBRSxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyxHQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsV0FBVyxLQUFHLENBQUMsQ0FBQyxLQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsR0FBRyxDQUFDLElBQUUsSUFBSSxLQUFHLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFDLElBQUksS0FBRyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUUsQ0FBQyxLQUFHLENBQUMsR0FBQyxLQUFLLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLEtBQUssSUFBRSxDQUFDLEdBQUMsRUFBRSxJQUFFLElBQUksSUFBRSxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLElBQUUsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsTUFBTSxLQUFHLENBQUMsSUFBRSxTQUFTLEtBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsR0FBQyxnQkFBZ0IsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEtBQUcsSUFBSSxLQUFHLENBQUMsSUFBRSxRQUFRLEtBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUM7TUFBQyxPQUFPLENBQUM7SUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxVQUFTLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRO1FBQUMsQ0FBQyxHQUFDLElBQUk7TUFBQyxJQUFHLENBQUMsS0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUUsQ0FBQyxLQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztRQUFDLElBQUcsQ0FBQyxJQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFFLENBQUMsS0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksS0FBRyxDQUFDLElBQUksRUFBQyxPQUFLLENBQUMsR0FBRTtVQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUk7WUFBQyxJQUFHLENBQUMsS0FBRyxDQUFDLENBQUMsSUFBSTtjQUFDLElBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUcsQ0FBQyxLQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFHLENBQUMsS0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUcsQ0FBQyxLQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFJO2dCQUFDLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBSSxJQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDO2NBQUE7WUFBQyxPQUFJLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1VBQUMsT0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUc7VUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7UUFBQSxDQUFDLE1BQUssT0FBSyxDQUFDLEdBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztNQUFDLE9BQUssT0FBSyxDQUFDLEdBQUUsQ0FBQyxLQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsY0FBYyxHQUFDLENBQUMsSUFBRSxDQUFDLEtBQUcsSUFBSSxDQUFDLGNBQWMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLFVBQVUsSUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUMsSUFBSSxFQUFFLEdBQUMsU0FBQSxDQUFBLEVBQVU7TUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBQyxJQUFJLENBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFBQyxDQUFDLENBQUMsV0FBVyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUSxHQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztNQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsSUFBSTtJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsT0FBTyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxRQUFRLEtBQUcsQ0FBQyxLQUFHLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsQ0FBQyxJQUFFLElBQUksS0FBRyxJQUFJLENBQUMsUUFBUSxLQUFHLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBUyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxDQUFDO01BQUMsSUFBRyxDQUFDLENBQUMsU0FBUyxJQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDO1FBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBRyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQztNQUFBO01BQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFHLENBQUMsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUcsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLFFBQVEsS0FBRyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsSUFBSSxDQUFDLFlBQVksR0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFBQyxJQUFJLEVBQUUsR0FBQyxTQUFBLENBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUM7TUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7TUFBQyxJQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsS0FBSyxLQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLElBQUUsRUFBRSxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEdBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztNQUFDLElBQUksQ0FBQztRQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDLEdBQUMsRUFBRTtRQUFDLENBQUMsR0FBQyxFQUFFO1FBQUMsQ0FBQyxHQUFDLEVBQUU7UUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhO01BQUMsS0FBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRSxJQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxFQUFDO1FBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxJQUFJO1FBQ2x4K0IsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQTtNQUFDLE9BQU8sQ0FBQztJQUFBLENBQUMsRUFBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0VBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLFNBQVMsSUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7QUNaaEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBRyxNQUFNLENBQUMsUUFBUSxHQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFVO0VBQUMsWUFBWTs7RUFBQyxJQUFJLENBQUMsR0FBQyxRQUFRLENBQUMsZUFBZTtJQUFDLENBQUMsR0FBQyxNQUFNO0lBQUMsQ0FBQyxHQUFDLFNBQUEsQ0FBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO01BQUMsSUFBSSxDQUFDLEdBQUMsR0FBRyxLQUFHLENBQUMsR0FBQyxPQUFPLEdBQUMsUUFBUTtRQUFDLENBQUMsR0FBQyxRQUFRLEdBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxRQUFRLEdBQUMsQ0FBQztRQUFDLENBQUMsR0FBQyxRQUFRLENBQUMsSUFBSTtNQUFDLE9BQU8sQ0FBQyxLQUFHLENBQUMsSUFBRSxDQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsS0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7TUFBQyxRQUFRLEVBQUMsVUFBVTtNQUFDLEdBQUcsRUFBQyxDQUFDO01BQUMsT0FBTyxFQUFDLE9BQU87TUFBQyxJQUFJLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDO1FBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFDLENBQUMsS0FBRyxDQUFDLEVBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsUUFBUSxJQUFFLE9BQU8sQ0FBQyxLQUFHLENBQUMsR0FBQztVQUFDLENBQUMsRUFBQztRQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBRyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksSUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBRSxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksSUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLEtBQUssS0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBRSxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQyxHQUFHLEVBQUMsU0FBQSxDQUFTLENBQUMsRUFBQztRQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQUMsSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUs7VUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUs7VUFBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLO1VBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSztRQUFDLElBQUksQ0FBQyxTQUFTLEtBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFHLENBQUMsR0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsR0FBRyxDQUFDLEdBQUMsQ0FBQyxLQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUcsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBQyxHQUFHLENBQUMsR0FBQyxDQUFDLEtBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsSUFBSSxDQUFDLEtBQUssSUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUUsSUFBSSxDQUFDLEtBQUssS0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssS0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsQ0FBQztNQUFBO0lBQUMsQ0FBQyxDQUFDO0lBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTO0VBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxZQUFVO0lBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFDLElBQUksSUFBRSxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7RUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxZQUFVO0lBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFDLElBQUksSUFBRSxDQUFDLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUMsSUFBSSxJQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7RUFBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxVQUFTLENBQUMsRUFBQztJQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsS0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7RUFBQSxDQUFDO0FBQUEsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLFNBQVMsSUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY3VzdG9tLXNlbGVjdFwiKS5mb3JFYWNoKGN1c3RvbVNlbGVjdCA9PiB7XG5cdGNvbnN0IHNlbGVjdEJ0biA9IGN1c3RvbVNlbGVjdC5xdWVyeVNlbGVjdG9yKFwiLnNlbGVjdC1idXR0b25cIik7XG5cdGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBjdXN0b21TZWxlY3QucXVlcnlTZWxlY3RvcihcIi5zZWxlY3RlZC12YWx1ZVwiKTtcblx0Y29uc3QgaGFuZGxlciA9IGZ1bmN0aW9uKGVsbSkge1xuXHRcdGNvbnN0IGN1c3RvbUNoYW5nZUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjdXN0b20tc2VsZWN0LWNoYW5nZScsIHtcblx0XHRcdGRldGFpbDoge1xuXHRcdFx0XHRzZWxlY3RlZE9wdGlvbjogZWxtXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c2VsZWN0ZWRWYWx1ZS50ZXh0Q29udGVudCA9IGVsbS50ZXh0Q29udGVudDtcblx0XHRjdXN0b21TZWxlY3QuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHRjdXN0b21TZWxlY3QuZGlzcGF0Y2hFdmVudChjdXN0b21DaGFuZ2VFdmVudCk7XG5cblx0fVxuXHRzZWxlY3RCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcblx0XHRjdXN0b21TZWxlY3QuY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcblx0XHRzZWxlY3RCdG4uc2V0QXR0cmlidXRlKFxuXHRcdFx0XCJhcmlhLWV4cGFuZGVkXCIsXG5cdFx0XHRzZWxlY3RCdG4uZ2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiKSA9PT0gXCJ0cnVlXCIgPyBcImZhbHNlXCIgOiBcInRydWVcIlxuXHRcdCk7XG5cdH0pO1xuXG5cdGN1c3RvbVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRpZiAoZS50YXJnZXQubWF0Y2hlcygnbGFiZWwnKSkge1xuXG5cdFx0XHRjb25zdCBhbGxJdGVtcyA9IGN1c3RvbVNlbGVjdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpO1xuXHRcdFx0YWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuXHRcdFx0Y29uc3QgY2xpY2tlZFBsYW4gPSBlLnRhcmdldC5jbG9zZXN0KCdsaScpO1xuXG5cdFx0XHRpZiAoY2xpY2tlZFBsYW4pIHtcblx0XHRcdFx0Y2xpY2tlZFBsYW4uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG5cdFx0XHRcdGhhbmRsZXIoY2xpY2tlZFBsYW4pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuXHRcdGlmICghY3VzdG9tU2VsZWN0LmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuXHRcdFx0Y3VzdG9tU2VsZWN0LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0XHRzZWxlY3RCdG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBcImZhbHNlXCIpO1xuXHRcdH1cblx0fSk7XG59KTsiLCJ2YXIgJCA9IGpRdWVyeTtcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XG4gICAgLyoqXG4gICAgICogUmVmcmVzaCBMaWNlbnNlIGRhdGFcbiAgICAgKi9cbiAgICB2YXIgX2lzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICQoJyN3cHItYWN0aW9uLXJlZnJlc2hfYWNjb3VudCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYoIV9pc1JlZnJlc2hpbmcpe1xuICAgICAgICAgICAgdmFyIGJ1dHRvbiA9ICQodGhpcyk7XG4gICAgICAgICAgICB2YXIgYWNjb3VudCA9ICQoJyN3cHItYWNjb3VudC1kYXRhJyk7XG4gICAgICAgICAgICB2YXIgZXhwaXJlID0gJCgnI3dwci1leHBpcmF0aW9uLWRhdGEnKTtcblxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgX2lzUmVmcmVzaGluZyA9IHRydWU7XG4gICAgICAgICAgICBidXR0b24udHJpZ2dlciggJ2JsdXInICk7XG5cblx0XHRcdC8vIFN0YXJ0IHBvbGxpbmcgaWYgbm90IGFscmVhZHkgcnVubmluZy5hZGRDbGFzcygnd3ByLWlzTG9hZGluZycpO1xuICAgICAgICAgICAgZXhwaXJlLnJlbW92ZUNsYXNzKCd3cHItaXNWYWxpZCB3cHItaXNJbnZhbGlkJyk7XG5cbiAgICAgICAgICAgICQucG9zdChcbiAgICAgICAgICAgICAgICBhamF4dXJsLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAncm9ja2V0X3JlZnJlc2hfY3VzdG9tZXJfZGF0YScsXG4gICAgICAgICAgICAgICAgICAgIF9hamF4X25vbmNlOiByb2NrZXRfYWpheF9kYXRhLm5vbmNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUNsYXNzKCd3cHItaXNMb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5hZGRDbGFzcygnd3ByLWlzSGlkZGVuJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC5odG1sKHJlc3BvbnNlLmRhdGEubGljZW5zZV90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZS5hZGRDbGFzcyhyZXNwb25zZS5kYXRhLmxpY2Vuc2VfY2xhc3MpLmh0bWwocmVzcG9uc2UuZGF0YS5saWNlbnNlX2V4cGlyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24ucmVtb3ZlQ2xhc3MoJ3dwci1pY29uLXJlZnJlc2ggd3ByLWlzSGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmFkZENsYXNzKCd3cHItaWNvbi1jaGVjaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24ucmVtb3ZlQ2xhc3MoJ3dwci1pY29uLXJlZnJlc2ggd3ByLWlzSGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmFkZENsYXNzKCd3cHItaWNvbi1jbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdlRMID0gbmV3IFRpbWVsaW5lTGl0ZSh7b25Db21wbGV0ZTpmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0KGJ1dHRvbiwge2Nzczp7Y2xhc3NOYW1lOicrPXdwci1pc0hpZGRlbid9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldChidXR0b24sIHtjc3M6e2NsYXNzTmFtZTonLT13cHItaWNvbi1jaGVjayd9fSwgMC4yNSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldChidXR0b24sIHtjc3M6e2NsYXNzTmFtZTonLT13cHItaWNvbi1jbG9zZSd9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldChidXR0b24sIHtjc3M6e2NsYXNzTmFtZTonKz13cHItaWNvbi1yZWZyZXNoJ319LCAwLjI1KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0KGJ1dHRvbiwge2Nzczp7Y2xhc3NOYW1lOictPXdwci1pc0hpZGRlbid9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTYXZlIFRvZ2dsZSBvcHRpb24gdmFsdWVzIG9uIGNoYW5nZVxuICAgICAqL1xuICAgICQoJy53cHItcmFkaW8gaW5wdXRbdHlwZT1jaGVja2JveF0nKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHZhciBuYW1lICA9ICQodGhpcykuYXR0cignaWQnKTtcbiAgICAgICAgdmFyIHZhbHVlID0gJCh0aGlzKS5wcm9wKCdjaGVja2VkJykgPyAxIDogMDtcblxuXHRcdHZhciBleGNsdWRlZCA9IFsgJ2Nsb3VkZmxhcmVfYXV0b19zZXR0aW5ncycsICdjbG91ZGZsYXJlX2Rldm1vZGUnLCAnYW5hbHl0aWNzX2VuYWJsZWQnIF07XG5cdFx0aWYgKCBleGNsdWRlZC5pbmRleE9mKCBuYW1lICkgPj0gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cbiAgICAgICAgJC5wb3N0KFxuICAgICAgICAgICAgYWpheHVybCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdyb2NrZXRfdG9nZ2xlX29wdGlvbicsXG4gICAgICAgICAgICAgICAgX2FqYXhfbm9uY2U6IHJvY2tldF9hamF4X2RhdGEubm9uY2UsXG4gICAgICAgICAgICAgICAgb3B0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbihyZXNwb25zZSkge31cbiAgICAgICAgKTtcblx0fSk7XG5cblx0LyoqXG4gICAgICogU2F2ZSBlbmFibGUgQ1BDU1MgZm9yIG1vYmlsZXMgb3B0aW9uLlxuICAgICAqL1xuICAgICQoJyN3cHItYWN0aW9uLXJvY2tldF9lbmFibGVfbW9iaWxlX2NwY3NzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHQkKCcjd3ByLWFjdGlvbi1yb2NrZXRfZW5hYmxlX21vYmlsZV9jcGNzcycpLmFkZENsYXNzKCd3cHItaXNMb2FkaW5nJyk7XG5cbiAgICAgICAgJC5wb3N0KFxuICAgICAgICAgICAgYWpheHVybCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdyb2NrZXRfZW5hYmxlX21vYmlsZV9jcGNzcycsXG4gICAgICAgICAgICAgICAgX2FqYXhfbm9uY2U6IHJvY2tldF9hamF4X2RhdGEubm9uY2VcbiAgICAgICAgICAgIH0sXG5cdFx0XHRmdW5jdGlvbihyZXNwb25zZSkge1xuXHRcdFx0XHRpZiAoIHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0Ly8gSGlkZSBNb2JpbGUgQ1BDU1MgYnRuIG9uIHN1Y2Nlc3MuXG5cdFx0XHRcdFx0JCgnI3dwci1hY3Rpb24tcm9ja2V0X2VuYWJsZV9tb2JpbGVfY3Bjc3MnKS5oaWRlKCk7XG5cdFx0XHRcdFx0JCgnLndwci1oaWRlLW9uLWNsaWNrJykuaGlkZSgpO1xuXHRcdFx0XHRcdCQoJy53cHItc2hvdy1vbi1jbGljaycpLnNob3coKTtcblx0XHRcdFx0XHQkKCcjd3ByLWFjdGlvbi1yb2NrZXRfZW5hYmxlX21vYmlsZV9jcGNzcycpLnJlbW92ZUNsYXNzKCd3cHItaXNMb2FkaW5nJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFNhdmUgZW5hYmxlIEdvb2dsZSBGb250cyBPcHRpbWl6YXRpb24gb3B0aW9uLlxuICAgICAqL1xuICAgICQoJyN3cHItYWN0aW9uLXJvY2tldF9lbmFibGVfZ29vZ2xlX2ZvbnRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHQkKCcjd3ByLWFjdGlvbi1yb2NrZXRfZW5hYmxlX2dvb2dsZV9mb250cycpLmFkZENsYXNzKCd3cHItaXNMb2FkaW5nJyk7XG5cbiAgICAgICAgJC5wb3N0KFxuICAgICAgICAgICAgYWpheHVybCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdyb2NrZXRfZW5hYmxlX2dvb2dsZV9mb250cycsXG4gICAgICAgICAgICAgICAgX2FqYXhfbm9uY2U6IHJvY2tldF9hamF4X2RhdGEubm9uY2VcbiAgICAgICAgICAgIH0sXG5cdFx0XHRmdW5jdGlvbihyZXNwb25zZSkge1xuXHRcdFx0XHRpZiAoIHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0Ly8gSGlkZSBNb2JpbGUgQ1BDU1MgYnRuIG9uIHN1Y2Nlc3MuXG5cdFx0XHRcdFx0JCgnI3dwci1hY3Rpb24tcm9ja2V0X2VuYWJsZV9nb29nbGVfZm9udHMnKS5oaWRlKCk7XG5cdFx0XHRcdFx0JCgnLndwci1oaWRlLW9uLWNsaWNrJykuaGlkZSgpO1xuXHRcdFx0XHRcdCQoJy53cHItc2hvdy1vbi1jbGljaycpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgJCgnI3dwci1hY3Rpb24tcm9ja2V0X2VuYWJsZV9nb29nbGVfZm9udHMnKS5yZW1vdmVDbGFzcygnd3ByLWlzTG9hZGluZycpO1xuICAgICAgICAgICAgICAgICAgICAkKCcjbWluaWZ5X2dvb2dsZV9mb250cycpLnZhbCgxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgJCggJyNyb2NrZXQtZGlzbWlzcy1wcm9tb3Rpb24nICkub24oICdjbGljaycsIGZ1bmN0aW9uKCBlICkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgJC5wb3N0KFxuICAgICAgICAgICAgYWpheHVybCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdyb2NrZXRfZGlzbWlzc19wcm9tbycsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHJvY2tldF9hamF4X2RhdGEubm9uY2VcbiAgICAgICAgICAgIH0sXG5cdFx0XHRmdW5jdGlvbihyZXNwb25zZSkge1xuXHRcdFx0XHRpZiAoIHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0JCgnI3JvY2tldC1wcm9tby1iYW5uZXInKS5oaWRlKCAnc2xvdycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuICAgICAgICApO1xuICAgIH0gKTtcblxuICAgICQoICcjcm9ja2V0LWRpc21pc3MtcmVuZXdhbCcgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oIGUgKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAkLnBvc3QoXG4gICAgICAgICAgICBhamF4dXJsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ3JvY2tldF9kaXNtaXNzX3JlbmV3YWwnLFxuICAgICAgICAgICAgICAgIG5vbmNlOiByb2NrZXRfYWpheF9kYXRhLm5vbmNlXG4gICAgICAgICAgICB9LFxuXHRcdFx0ZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdFx0aWYgKCByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdCQoJyNyb2NrZXQtcmVuZXdhbC1iYW5uZXInKS5oaWRlKCAnc2xvdycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuICAgICAgICApO1xuICAgIH0gKTtcblx0JCggJyN3cHItdXBkYXRlLWV4Y2x1c2lvbi1saXN0JyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbiggZSApIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0JCgnI3dwci11cGRhdGUtZXhjbHVzaW9uLW1zZycpLmh0bWwoJycpO1xuXHRcdCQuYWpheCh7XG5cdFx0XHR1cmw6IHJvY2tldF9hamF4X2RhdGEucmVzdF91cmwsXG5cdFx0XHRiZWZvcmVTZW5kOiBmdW5jdGlvbiAoIHhociApIHtcblx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoICdYLVdQLU5vbmNlJywgcm9ja2V0X2FqYXhfZGF0YS5yZXN0X25vbmNlICk7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCAnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24sICovKjtxPTAuMScgKTtcblx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoICdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicgKTtcblx0XHRcdH0sXG5cdFx0XHRtZXRob2Q6IFwiUFVUXCIsXG5cdFx0XHRzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZXMpIHtcblx0XHRcdFx0bGV0IGV4Y2x1c2lvbl9tc2dfY29udGFpbmVyID0gJCgnI3dwci11cGRhdGUtZXhjbHVzaW9uLW1zZycpO1xuXHRcdFx0XHRleGNsdXNpb25fbXNnX2NvbnRhaW5lci5odG1sKCcnKTtcblx0XHRcdFx0aWYgKCB1bmRlZmluZWQgIT09IHJlc3BvbnNlc1snc3VjY2VzcyddICkge1xuXHRcdFx0XHRcdGV4Y2x1c2lvbl9tc2dfY29udGFpbmVyLmFwcGVuZCggJzxkaXYgY2xhc3M9XCJub3RpY2Ugbm90aWNlLWVycm9yXCI+JyArIHJlc3BvbnNlc1snbWVzc2FnZSddICsgJzwvZGl2PicgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0T2JqZWN0LmtleXMoIHJlc3BvbnNlcyApLmZvckVhY2goKCByZXNwb25zZV9rZXkgKSA9PiB7XG5cdFx0XHRcdFx0ZXhjbHVzaW9uX21zZ19jb250YWluZXIuYXBwZW5kKCAnPHN0cm9uZz4nICsgcmVzcG9uc2Vfa2V5ICsgJzogPC9zdHJvbmc+JyApO1xuXHRcdFx0XHRcdGV4Y2x1c2lvbl9tc2dfY29udGFpbmVyLmFwcGVuZCggcmVzcG9uc2VzW3Jlc3BvbnNlX2tleV1bJ21lc3NhZ2UnXSApO1xuXHRcdFx0XHRcdGV4Y2x1c2lvbl9tc2dfY29udGFpbmVyLmFwcGVuZCggJzxicj4nICk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9ICk7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUgbW9iaWxlIGNhY2hlIG9wdGlvbi5cbiAgICAgKi9cbiAgICAkKCcjd3ByX2VuYWJsZV9tb2JpbGVfY2FjaGUnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdCQoJyN3cHJfZW5hYmxlX21vYmlsZV9jYWNoZScpLmFkZENsYXNzKCd3cHItaXNMb2FkaW5nJyk7XG5cbiAgICAgICAgJC5wb3N0KFxuICAgICAgICAgICAgYWpheHVybCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdyb2NrZXRfZW5hYmxlX21vYmlsZV9jYWNoZScsXG4gICAgICAgICAgICAgICAgX2FqYXhfbm9uY2U6IHJvY2tldF9hamF4X2RhdGEubm9uY2VcbiAgICAgICAgICAgIH0sXG5cdFx0XHRmdW5jdGlvbihyZXNwb25zZSkge1xuXHRcdFx0XHRpZiAoIHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0Ly8gSGlkZSBNb2JpbGUgY2FjaGUgZW5hYmxlIGJ1dHRvbiBvbiBzdWNjZXNzLlxuXHRcdFx0XHRcdCQoJyN3cHJfZW5hYmxlX21vYmlsZV9jYWNoZScpLmhpZGUoKTtcblx0XHRcdFx0XHQkKCcjd3ByX21vYmlsZV9jYWNoZV9kZWZhdWx0JykuaGlkZSgpO1xuXHRcdFx0XHRcdCQoJyN3cHJfbW9iaWxlX2NhY2hlX3Jlc3BvbnNlJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAkKCcjd3ByX2VuYWJsZV9tb2JpbGVfY2FjaGUnKS5yZW1vdmVDbGFzcygnd3ByLWlzTG9hZGluZycpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCB2YWx1ZXMgb2YgbW9iaWxlIGNhY2hlIGFuZCBzZXBhcmF0ZSBjYWNoZSBmaWxlcyBmb3IgbW9iaWxlcyBvcHRpb24gdG8gMS5cbiAgICAgICAgICAgICAgICAgICAgJCgnI2NhY2hlX21vYmlsZScpLnZhbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgJCgnI2RvX2NhY2hpbmdfbW9iaWxlX2ZpbGVzJykudmFsKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG4gICAgICAgICk7XG4gICAgfSk7XG59KTtcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkge1xuXHRjb25zdCBhbmFseXRpY3NDaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbmFseXRpY3NfZW5hYmxlZCcpO1xuXG5cdGlmIChhbmFseXRpY3NDaGVja2JveCkge1xuXHRcdGFuYWx5dGljc0NoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3QgaXNDaGVja2VkID0gdGhpcy5jaGVja2VkO1xuXG5cdFx0XHQvLyBVcGRhdGUgdGhlIGdsb2JhbCBtaXhwYW5lbCBkYXRhIG9wdGluIHN0YXRlIGltbWVkaWF0ZWx5XG5cdFx0XHRpZiAodHlwZW9mIHJvY2tldF9taXhwYW5lbF9kYXRhICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRyb2NrZXRfbWl4cGFuZWxfZGF0YS5vcHRpbl9lbmFibGVkID0gaXNDaGVja2VkID8gJzEnIDogJzAnO1xuXHRcdFx0fVxuXG5cdFx0XHRmZXRjaChhamF4dXJsLCB7XG5cdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcblx0XHRcdFx0XHRhY3Rpb246ICdyb2NrZXRfdG9nZ2xlX29wdGluJyxcblx0XHRcdFx0XHR2YWx1ZTogaXNDaGVja2VkID8gMSA6IDAsXG5cdFx0XHRcdFx0X2FqYXhfbm9uY2U6IHJvY2tldF9hamF4X2RhdGEubm9uY2UsXG5cdFx0XHRcdH0pXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufSk7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHtcblx0LyoqXG5cdCAqIFBlcmZvcm1hbmNlIE1vbml0b3Jpbmcgd2l0aCBQcm9ncmVzc2l2ZSBQb2xsaW5nLlxuXHQgKi9cblxuXHRcdC8vID09PT0gQ29uZmlndXJhdGlvbiA9PT09XG5cdGNvbnN0IFBPTExfQkFTRV9JTlRFUlZBTCA9IDIwMDA7ICAgLy8gU3RhcnQgcG9sbGluZyBhdCAyIHNlY29uZHNcblx0Y29uc3QgUE9MTF9NQVhfSU5URVJWQUwgPSA1MDAwOyAgIC8vIE1heCBwb2xsaW5nIGludGVydmFsICg1IHNlY29uZHMpXG5cblx0Ly8gPT09PSBTdGF0ZSA9PT09XG5cdGxldCByb2NrZXRJbnNpZ2h0c0lkcyA9IEFycmF5LmlzQXJyYXkod2luZG93LnJvY2tldF9hamF4X2RhdGE/LnJvY2tldF9pbnNpZ2h0c19pZHMpID8gd2luZG93LnJvY2tldF9hamF4X2RhdGEucm9ja2V0X2luc2lnaHRzX2lkcy5zbGljZSgpIDogW107XG5cdGxldCBwb2xsSW50ZXJ2YWwgPSBQT0xMX0JBU0VfSU5URVJWQUw7XG5cdGxldCBwb2xsVGltZXIgPSBudWxsO1xuXHRsZXQgaGFzQ3JlZGl0ID0gdHJ1ZTsgLy8gVHJhY2sgY3JlZGl0IHN0YXR1c1xuICAgIGxldCBnbG9iYWxTY29yZURhdGEgPSB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHN0YXR1czogJycsXG4gICAgICAgICAgICBzY29yZTogMCxcbiAgICAgICAgICAgIHBhZ2VzX251bTogMFxuICAgICAgICB9LFxuICAgICAgICBodG1sOiAnJyxcbiAgICAgICAgcm93X2h0bWw6ICcnLFxuXHRcdGRpc2FibGVkX2J0bl9odG1sOiB7XG5cdFx0XHRnbG9iYWxfc2NvcmVfd2lkZ2V0OiAnJyxcblx0XHRcdHJvY2tldF9pbnNpZ2h0czogJydcblx0XHR9XG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgZ2xvYmFsU2NvcmVEYXRhIGZyb20gbG9jYWxpemVkIHNjcmlwdCBkYXRhIGlmIGF2YWlsYWJsZVxuICAgIGlmICh3aW5kb3cucm9ja2V0X2FqYXhfZGF0YT8uZ2xvYmFsX3Njb3JlX2RhdGEpIHtcbiAgICAgICAgZ2xvYmFsU2NvcmVEYXRhID0gd2luZG93LnJvY2tldF9hamF4X2RhdGEuZ2xvYmFsX3Njb3JlX2RhdGE7XG4gICAgfVxuXG5cdC8vID09PT0gRE9NIFNlbGVjdG9ycyA9PT09XG5cdGNvbnN0ICRwYWdlVXJsSW5wdXQgPSAkKCcjd3ByLXNwZWVkLXJhZGFyLXVybC1pbnB1dCcpO1xuXHRjb25zdCAkdGFibGVCb2R5ID0gJCgnLndwci1yaS11cmxzLXRhYmxlIHRib2R5Jyk7XG5cdGNvbnN0ICR0YWJsZSA9ICQoJy53cHItcmktdXJscy10YWJsZScpO1xuXG5cdC8vID09PT0gVXRpbGl0eSBGdW5jdGlvbnMgPT09PVxuXHRmdW5jdGlvbiBpc1ZhbGlkVXJsKGlucHV0KSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXQpO1xuXHRcdFx0cmV0dXJuIHVybC5ob3N0bmFtZS5pbmNsdWRlcygnLicpICYmIHVybC5ob3N0bmFtZS5zcGxpdCgnLicpLnBvcCgpLmxlbmd0aCA+IDA7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYWRkSWRzKG5ld0lkKSB7XG5cdFx0aWYgKCFyb2NrZXRJbnNpZ2h0c0lkcy5pbmNsdWRlcyhuZXdJZCkpIHtcblx0XHRcdHJvY2tldEluc2lnaHRzSWRzLnB1c2gobmV3SWQpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGhhc0lkKGlkKSB7XG5cdFx0cmV0dXJuIHJvY2tldEluc2lnaHRzSWRzLmluY2x1ZGVzKGlkKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbW92ZUlkKGlkKSB7XG5cdFx0Ly8gRW5zdXJlIHRoYXQgdGhlIGlkIHRvIGJlIHJlbW92ZWQgaXMgYW4gaW50ZWdlciBmb3IgYWNjdXJhdGUgY29tcGFyaXNvbi5cblx0XHRjb25zdCBpZFRvUmVtb3ZlID0gcGFyc2VJbnQoaWQsIDEwKTtcblx0XHRyb2NrZXRJbnNpZ2h0c0lkcyA9IHJvY2tldEluc2lnaHRzSWRzLmZpbHRlcih4ID0+IHBhcnNlSW50KHgsIDEwKSAhPT0gaWRUb1JlbW92ZSk7XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVRdW90YUJhbm5lcihjYW5BZGRQYWdlcykge1xuXHRcdGNvbnN0ICRzdW1tYXJ5SW5mbyAgICA9ICQoJy53cHItcmktc3VtbWFyeS1pbmZvJyk7XG5cdFx0Y29uc3QgaXNGcmVlICA9IHdpbmRvdy5yb2NrZXRfYWpheF9kYXRhPy5pc19mcmVlID09PSAnMSc7XG5cdFx0Y29uc3QgJHF1b3RhQmFubmVyID0gaXNGcmVlID8gJCgnI3dwci1yaS1xdW90YS1iYW5uZXInKSA6ICQoJyNyb2NrZXRfaW5zaWdodHNfc3VydmV5Jyk7XG5cblx0XHQvLyBTaG93IGJhbm5lciBpZiBVUkwgbGltaXQgcmVhY2hlZCBPUiBubyBjcmVkaXRzIGxlZnQgKG1hdGNoaW5nIFBIUCBsb2dpYyBpbiBTdWJzY3JpYmVyLnBocCBsaW5lIDM5OCkuXG5cdFx0Y29uc3Qgc2hvdWxkU2hvd0Jhbm5lciA9IGNhbkFkZFBhZ2VzID09PSBmYWxzZSB8fCAhaGFzQ3JlZGl0O1xuXG5cdFx0aWYgKHNob3VsZFNob3dCYW5uZXIpIHtcblx0XHRcdCRzdW1tYXJ5SW5mby5oaWRlKCk7XG5cdFx0XHQkcXVvdGFCYW5uZXIucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkc3VtbWFyeUluZm8uc2hvdygpO1xuXHRcdFx0JHF1b3RhQmFubmVyLmFkZENsYXNzKCdoaWRkZW4nKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVDcmVkaXRTdGF0ZShyZXNwb25zZUhhc0NyZWRpdCkge1xuXHRcdGlmIChyZXNwb25zZUhhc0NyZWRpdCAhPT0gdW5kZWZpbmVkICYmIGhhc0NyZWRpdCAhPT0gcmVzcG9uc2VIYXNDcmVkaXQpIHtcblx0XHRcdGhhc0NyZWRpdCA9IHJlc3BvbnNlSGFzQ3JlZGl0O1xuXG5cdFx0XHQvLyBVcGRhdGUgYWxsIHJldGVzdCBidXR0b25zIHdoZW4gY3JlZGl0IHN0YXR1cyBjaGFuZ2VzXG5cdFx0XHR1cGRhdGVBbGxSZXRlc3RCdXR0b25zKCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlQWxsUmV0ZXN0QnV0dG9ucygpIHtcblx0XHRjb25zdCByZXRlc3RCdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1hY3Rpb24tc3BlZWRfcmFkYXJfcmVmcmVzaCcpO1xuXG5cdFx0cmV0ZXN0QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG5cdFx0XHRjb25zdCByb3cgPSBidXR0b24uY2xvc2VzdCgnLndwci1yaS1pdGVtJyk7XG5cdFx0XHRpZiAoIXJvdykgcmV0dXJuO1xuXG5cdFx0XHQvLyBHZXQgdGhlIHJvdyBJRCBhbmQgY2hlY2sgaWYgaXQncyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkXG5cdFx0XHRjb25zdCByb3dJZCA9IHBhcnNlSW50KHJvdy5kYXRhc2V0LnJvY2tldEluc2lnaHRzSWQsIDEwKTtcblx0XHRcdGNvbnN0IGlzUnVubmluZyA9IHJvY2tldEluc2lnaHRzSWRzLmluY2x1ZGVzKHJvd0lkKTtcblxuXHRcdFx0aWYgKCFoYXNDcmVkaXQgfHwgaXNSdW5uaW5nKSB7XG5cdFx0XHRcdC8vIERpc2FibGUgYnV0dG9uXG5cdFx0XHRcdGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCd3cHItcmktYWN0aW9uLS1kaXNhYmxlZCcpO1xuXHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICd0cnVlJyk7XG5cblx0XHRcdFx0aWYgKCFoYXNDcmVkaXQpIHtcblx0XHRcdFx0XHQvLyBBZGQgdG9vbHRpcCBmb3Igbm8gY3JlZGl0XG5cdFx0XHRcdFx0YnV0dG9uLmNsYXNzTGlzdC5hZGQoJ3dwci1idG4td2l0aC10b29sLXRpcCcpO1xuXHRcdFx0XHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgd2luZG93LnJvY2tldF9hamF4X2RhdGE/LnJvY2tldF9pbnNpZ2h0c19ub19jcmVkaXRfdG9vbHRpcCB8fCAnVXBncmFkZSB5b3VyIHBsYW4gdG8gZ2V0IGFjY2VzcyB0byByZS10ZXN0IHBlcmZvcm1hbmNlIG9yIHJ1biBuZXcgdGVzdHMnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRW5hYmxlIGJ1dHRvblxuXHRcdFx0XHRidXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnd3ByLXJpLWFjdGlvbi0tZGlzYWJsZWQnLCAnd3ByLWJ0bi13aXRoLXRvb2wtdGlwJyk7XG5cdFx0XHRcdGJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG5cdFx0XHRcdGJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZXNldFBvbGxpbmcoKSB7XG5cdFx0aWYgKHBvbGxUaW1lcikge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHBvbGxUaW1lcik7XG5cdFx0XHRwb2xsVGltZXIgPSBudWxsO1xuXHRcdH1cblx0XHRwb2xsSW50ZXJ2YWwgPSBQT0xMX0JBU0VfSU5URVJWQUw7XG5cdH1cblxuXHRmdW5jdGlvbiBzY2hlZHVsZVBvbGxpbmcoKSB7XG5cdFx0aWYgKHJvY2tldEluc2lnaHRzSWRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHBvbGxUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRnZXRSZXN1bHRzKCk7XG5cdFx0XHR9LCBwb2xsSW50ZXJ2YWwpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGluY3JlbWVudFBvbGxpbmcoKSB7XG5cdFx0cG9sbEludGVydmFsID0gTWF0aC5taW4ocG9sbEludGVydmFsICogMS4zLCBQT0xMX01BWF9JTlRFUlZBTCk7IC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcblx0fVxuXG4gICAgZnVuY3Rpb24gaXNPbkRhc2hib2FyZCgpIHtcbiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgcmV0dXJuIHVybFBhcmFtcy5nZXQoJ3BhZ2UnKSA9PT0gJ3dwcm9ja2V0JyAmJiB3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gJyNkYXNoYm9hcmQnO1xuICAgIH1cblxuXHRmdW5jdGlvbiBpc09uUm9ja2V0SW5zaWdodHMoKSB7XG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0XHRyZXR1cm4gdXJsUGFyYW1zLmdldCgncGFnZScpID09PSAnd3Byb2NrZXQnICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAnI3JvY2tldF9pbnNpZ2h0cyc7XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVHbG9iYWxTY29yZVJvdyhnbG9iYWxTY29yZURhdGEpe1xuXHRcdGNvbnN0ICR0YWJsZUdsb2JhbFNjb3JlID0gJCgnLndwci1yaS11cmxzLXRhYmxlIC53cHItZ2xvYmFsLXNjb3JlJyk7XG5cdFx0aWYgKCR0YWJsZUdsb2JhbFNjb3JlLmxlbmd0aCA+IDApe1xuXHRcdFx0JHRhYmxlR2xvYmFsU2NvcmUucmVwbGFjZVdpdGgoZ2xvYmFsU2NvcmVEYXRhLnJvd19odG1sKTtcblx0XHR9ZWxzZSBpZiAoJHRhYmxlQm9keS5sZW5ndGggPiAwKSB7XG5cdFx0XHQkdGFibGVCb2R5LnByZXBlbmQoZ2xvYmFsU2NvcmVEYXRhLnJvd19odG1sKTtcblx0XHR9XG5cdFx0ZGVjaWRlR2xvYmFsU2NvcmVUb1VwZGF0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGdsb2JhbCBzY29yZSBVSSB3aWRnZXQgb3IgdGFibGUgcm93IGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBtZW51LlxuXHQgKiBXaGVuIHRoZSBkYXNoYm9hcmQgb3Igcm9ja2V0IGluc2lnaHRzIG1lbnUgaXMgY2xpY2tlZCwgdGhpcyBmdW5jdGlvbiB1cGRhdGVzXG5cdCAqIHRoZSBjb3JyZXNwb25kaW5nIGdsb2JhbCBzY29yZSBkaXNwbGF5IGFmdGVyIGEgc2hvcnQgZGVsYXkuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNpZGVHbG9iYWxTY29yZVRvVXBkYXRlKCkge1xuXHRcdGlmICgnJyA9PT0gZ2xvYmFsU2NvcmVEYXRhLmh0bWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGdsb2JhbFNjb3JlV2lkZ2V0cyA9ICQoJy53cHItZ2xvYmFsLXNjb3JlLXdpZGdldCcpO1xuXG5cdFx0aWYgKGdsb2JhbFNjb3JlV2lkZ2V0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBVcGRhdGUgYWxsIGdsb2JhbCBzY29yZSB3aWRnZXQgaW5zdGFuY2VzLlxuXHRcdGdsb2JhbFNjb3JlV2lkZ2V0cy5odG1sKGdsb2JhbFNjb3JlRGF0YS5odG1sKTtcblxuXHRcdC8vIERpc2FibGUgXCJBZGQgUGFnZXNcIiBidXR0b24gb24gZ2xvYmFsIHNjb3JlIHdpZGdldC5cblx0XHRpZiAoISgnZGlzYWJsZWRfYnRuX2h0bWwnIGluIGdsb2JhbFNjb3JlRGF0YSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQkKCcud3ByLWdsb2JhbC1zY29yZS13aWRnZXQgLndwci1nbG9iYWwtc2NvcmUtd2lkZ2V0LWJ0bi13cmFwcGVyJykuaHRtbChnbG9iYWxTY29yZURhdGEuZGlzYWJsZWRfYnRuX2h0bWwuZ2xvYmFsX3Njb3JlX3dpZGdldCk7XG5cdH1cblxuXHQvLyA9PT09IEFKQVggSGFuZGxlcnMgPT09PVxuXHRmdW5jdGlvbiBnZXRSZXN1bHRzKCkge1xuXHRcdGlmIChyb2NrZXRJbnNpZ2h0c0lkcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJlc2V0UG9sbGluZygpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHdpbmRvdy53cC5hcGlGZXRjaChcblx0XHRcdHtcblx0XHRcdFx0cGF0aDogd2luZG93LndwLnVybC5hZGRRdWVyeUFyZ3MoICcvd3Atcm9ja2V0L3YxL3JvY2tldC1pbnNpZ2h0cy9wYWdlcy9wcm9ncmVzcycsIHsgaWRzOiByb2NrZXRJbnNpZ2h0c0lkcyB9ICksXG5cdFx0XHR9XG5cdFx0KS50aGVuKCAoIHJlc3BvbnNlICkgPT4ge1xuXHRcdFx0aWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZS5yZXN1bHRzKSkge1xuXHRcdFx0XHQvLyBVcGRhdGUgY3JlZGl0IHN0YXR1c1xuXHRcdFx0XHR1cGRhdGVDcmVkaXRTdGF0ZShyZXNwb25zZS5oYXNfY3JlZGl0KTtcblxuXHRcdFx0XHQvLyBVcGRhdGUgcXVvdGEgYmFubmVyIHZpc2liaWxpdHlcblx0XHRcdFx0dXBkYXRlUXVvdGFCYW5uZXIocmVzcG9uc2UuY2FuX2FkZF9wYWdlcyk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIGdsb2JhbCBzY29yZSBkYXRhIGFuZCB3aWRnZXQgd2hlbiBzdGF0dXMgfHwgcGFnZSBjb3VudCBjaGFuZ2VzLlxuXHRcdFx0XHRpZiAoZ2xvYmFsU2NvcmVEYXRhLmRhdGEuc3RhdHVzICE9PSByZXNwb25zZS5nbG9iYWxfc2NvcmVfZGF0YS5kYXRhLnN0YXR1cyB8fCBnbG9iYWxTY29yZURhdGEuZGF0YS5wYWdlc19udW0gIT09IHJlc3BvbnNlLmdsb2JhbF9zY29yZV9kYXRhLmRhdGEucGFnZXNfbnVtKSB7XG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGdsb2JhbCBzY29yZSBkYXRhLlxuXHRcdFx0XHRcdGdsb2JhbFNjb3JlRGF0YSA9IHJlc3BvbnNlLmdsb2JhbF9zY29yZV9kYXRhO1xuXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGFsbCBnbG9iYWwgc2NvcmUgd2lkZ2V0IGluc3RhbmNlcy5cblx0XHRcdFx0XHQkKCcud3ByLWdsb2JhbC1zY29yZS13aWRnZXQnKS5odG1sKHJlc3BvbnNlLmdsb2JhbF9zY29yZV9kYXRhLmh0bWwpO1xuXHRcdFx0XHRcdC8vIFVwZGF0ZSBnbG9iYWwgc2NvcmUgcm93IGluIHRhYmxlIGlmIG9uIFJvY2tldCBJbnNpZ2h0cyBwYWdlLlxuXHRcdFx0XHRcdHVwZGF0ZUdsb2JhbFNjb3JlUm93KGdsb2JhbFNjb3JlRGF0YSk7XG5cblx0XHRcdFx0XHQvLyBGaXJlIGN1c3RvbSBldmVudCBmb3Igb3RoZXIgd2lkZ2V0cyAobGlrZSByZWNvbW1lbmRhdGlvbnMpXG5cdFx0XHRcdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3dwckdsb2JhbFNjb3JlVXBkYXRlZCcsIHsgZGV0YWlsOiBnbG9iYWxTY29yZURhdGEuZGF0YSB9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzcG9uc2UucmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgJHJvdyA9ICQoYC53cHItcmktaXRlbVtkYXRhLXJvY2tldC1pbnNpZ2h0cy1pZD1cIiR7cmVzdWx0LmlkfVwiXWApO1xuXHRcdFx0XHRcdCRyb3cucmVwbGFjZVdpdGgocmVzdWx0Lmh0bWwpO1xuXG5cdFx0XHRcdFx0JChkb2N1bWVudCkudHJpZ2dlcigncm9ja2V0LWluc2lnaHRzLXBhZ2UtdGVzdC1wb2xsaW5nJywgW3Jlc3VsdC5pZF0pO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciBjdXN0b20gZXZlbnQgb25seSB3aGVuIHRlc3QgaXMgY29tcGxldGVkIGFuZCBub3QgZmFpbGVkLCBzbyB3ZSBkb24ndCB0YXJnZXQgYW4gZWxlbWVudCB0aGF0IG1pZ2h0IGJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NIGFmdGVyIHRlc3QgY29tcGxldGlvbi5cblx0XHRcdFx0XHRpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcblx0XHRcdFx0XHRcdCQoZG9jdW1lbnQpLnRyaWdnZXIoJ3JvY2tldC1pbnNpZ2h0cy1wYWdlLXRlc3QtY29tcGxldGVkJywgW3Jlc3VsdC5pZF0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZXN1bHQuc3RhdHVzID09PSAnY29tcGxldGVkJyB8fCByZXN1bHQuc3RhdHVzID09PSAnZmFpbGVkJykge1xuXHRcdFx0XHRcdFx0cmVtb3ZlSWQocmVzdWx0LmlkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGluY3JlbWVudFBvbGxpbmcoKTtcblx0XHRcdFx0c2NoZWR1bGVQb2xsaW5nKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBPbiBlcnJvciwgY2xlYXIgSURzIGFuZCBzdG9wIHBvbGxpbmdcblx0XHRcdFx0cm9ja2V0SW5zaWdodHNJZHMgPSBbXTtcblx0XHRcdFx0cmVzZXRQb2xsaW5nKCk7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1BvbGxpbmcgZXJyb3I6JywgcmVzcG9uc2UucmVzdWx0cyB8fCByZXNwb25zZSk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gaGFuZGxlQWRkUGFnZShlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgaGFzIGF0dHIgZGlzYWJsZWRcblx0XHRpZiAoJCh0aGlzKS5hdHRyKCdkaXNhYmxlZCcpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFnZVVybCA9ICRwYWdlVXJsSW5wdXQudmFsKCkudHJpbSgpO1xuXG5cdFx0aWYgKCFpc1ZhbGlkVXJsKHBhZ2VVcmwpKSB7XG5cdFx0XHRhbGVydCgnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc291cmNlID0gJCh0aGlzKS5kYXRhKCdzb3VyY2UnKTtcblxuXHRcdHdpbmRvdy53cC5hcGlGZXRjaChcblx0XHRcdHtcblx0XHRcdFx0cGF0aDogJy93cC1yb2NrZXQvdjEvcm9ja2V0LWluc2lnaHRzL3BhZ2VzLycsXG5cdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cGFnZV91cmw6IHBhZ2VVcmwsXG5cdFx0XHRcdFx0c291cmNlOiBzb3VyY2Vcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHQpLnRoZW4oICggcmVzcG9uc2UgKSA9PiB7XG5cdFx0XHRpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuXHRcdFx0XHRpZiAoICEgaGFzSWQocmVzcG9uc2UuaWQpICkge1xuXHRcdFx0XHRcdCRwYWdlVXJsSW5wdXQudmFsKCcnKTtcblx0XHRcdFx0XHQkdGFibGVCb2R5LmFwcGVuZChyZXNwb25zZS5odG1sKTtcblxuXHRcdFx0XHRcdC8vIEN1c3RvbSBldmVudCB3aGVuIG5ldyBwYWdlIGlzIGFkZGVkLlxuXHRcdFx0XHRcdCQoZG9jdW1lbnQpLnRyaWdnZXIoJ3JvY2tldC1pbnNpZ2h0cy1wYWdlLWFkZGVkJyk7XG5cblx0XHRcdFx0XHQkdGFibGUucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuXHRcdFx0XHRcdGFkZElkcyhyZXNwb25zZS5pZCk7XG5cdFx0XHRcdFx0bGV0IHBhZ2VzX251bV9jb250YWluZXIgPSAkKCcjcm9ja2V0X3JvY2tldF9pbnNpZ2h0c19wYWdlc19udW0nKTtcblx0XHRcdFx0XHRwYWdlc19udW1fY29udGFpbmVyLnRleHQoIHBhcnNlSW50KCBwYWdlc19udW1fY29udGFpbmVyLnRleHQoKSApICsgMSApO1xuXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGNyZWRpdCBzdGF0dXNcblx0XHRcdFx0XHR1cGRhdGVDcmVkaXRTdGF0ZShyZXNwb25zZS5oYXNfY3JlZGl0KTtcblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBnbG9iYWwgc2NvcmUgZGF0YS5cblx0XHRcdFx0XHRnbG9iYWxTY29yZURhdGEgPSByZXNwb25zZS5nbG9iYWxfc2NvcmVfZGF0YTtcblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBnbG9iYWwgc2NvcmUgcm93IGluIHRhYmxlIGlmIG9uIFJvY2tldCBJbnNpZ2h0cyBwYWdlLlxuXHRcdFx0XHRcdHVwZGF0ZUdsb2JhbFNjb3JlUm93KGdsb2JhbFNjb3JlRGF0YSk7XG5cblx0XHRcdFx0XHRpZiAoJ2Rpc2FibGVkX2J0bl9odG1sJyBpbiBnbG9iYWxTY29yZURhdGEpIHtcblx0XHRcdFx0XHRcdCQoJyN3cHJfcm9ja2V0X2luc2lnaHRzX2FkZF9wYWdlX2J0bl93cmFwcGVyJykuaHRtbChnbG9iYWxTY29yZURhdGEuZGlzYWJsZWRfYnRuX2h0bWwucm9ja2V0X2luc2lnaHRzKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTaG93L2hpZGUgcXVvdGEgYmFubmVyIGJhc2VkIG9uIGNhbl9hZGRfcGFnZXNcblx0XHRcdFx0XHR1cGRhdGVRdW90YUJhbm5lcihyZXNwb25zZS5jYW5fYWRkX3BhZ2VzKTtcblxuXHRcdFx0XHRcdGlmIChwb2xsVGltZXIpIHtcblx0XHRcdFx0XHRcdHJlc2V0UG9sbGluZygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzY2hlZHVsZVBvbGxpbmcoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDbGVhciB0aGUgaW5wdXQgZmllbGQgb24gZXJyb3Jcblx0XHRcdFx0JHBhZ2VVcmxJbnB1dC52YWwoJycpO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSBVUkwgbGltaXQgcmVhY2hlZCBlcnJvclxuXHRcdFx0XHRpZiAocmVzcG9uc2U/Lm1lc3NhZ2UgJiYgcmVzcG9uc2UubWVzc2FnZS5pbmNsdWRlcygnTWF4aW11bSBudW1iZXIgb2YgVVJMcyByZWFjaGVkJykpIHtcblx0XHRcdFx0XHQvLyBVcGRhdGUgVUkgc3RhdGUgdG8gcmVmbGVjdCBVUkwgbGltaXQgaGFzIGJlZW4gcmVhY2hlZFxuXHRcdFx0XHRcdGRpc2FibGVBZGRVcmxFbGVtZW50cygpO1xuXHRcdFx0XHRcdC8vIFNob3cgcXVvdGEgYmFubmVyIChjYW5fYWRkX3BhZ2VzID0gZmFsc2UpXG5cdFx0XHRcdFx0dXBkYXRlUXVvdGFCYW5uZXIocmVzcG9uc2UuY2FuX2FkZF9wYWdlcyAhPT0gdW5kZWZpbmVkID8gcmVzcG9uc2UuY2FuX2FkZF9wYWdlcyA6IGZhbHNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IocmVzcG9uc2U/Lm1lc3NhZ2UgfHwgcmVzcG9uc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gaGFuZGxlUmVzZXRQYWdlKGUpIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRjb25zdCAkYnV0dG9uID0gJCh0aGlzKTtcblx0XHRsZXQgaWQgPSAkYnV0dG9uLnBhcmVudHMoJy53cHItcmktaXRlbScpLmRhdGEoJ3JvY2tldC1pbnNpZ2h0cy1pZCcpO1xuXHRcdGlmICggISBpZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBzb3VyY2UgPSAkYnV0dG9uLmRhdGEoJ3NvdXJjZScpO1xuXG5cdFx0d2luZG93LndwLmFwaUZldGNoKFxuXHRcdFx0e1xuXHRcdFx0XHRwYXRoOiAnL3dwLXJvY2tldC92MS9yb2NrZXQtaW5zaWdodHMvcGFnZXMvJyArIGlkLFxuXHRcdFx0XHRtZXRob2Q6ICdQQVRDSCcsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRzb3VyY2U6IHNvdXJjZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KS50aGVuKCAoIHJlc3BvbnNlICkgPT4ge1xuXHRcdFx0aWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcblx0XHRcdFx0YWRkSWRzKHJlc3BvbnNlLmlkKTtcblxuXHRcdFx0XHQkKGAjcmlfZGV0YWlsc18ke3Jlc3BvbnNlLmlkfSAuZGV0YWlscy1zZWN0aW9uLXRkYCkucmVtb3ZlKCk7XG5cdFx0XHRcdGNvbnN0ICRyb3cgPSAkKGBbZGF0YS1yb2NrZXQtaW5zaWdodHMtaWQ9XCIke3Jlc3BvbnNlLmlkfVwiXWApO1xuXHRcdFx0XHQkcm93LnJlcGxhY2VXaXRoKHJlc3BvbnNlLmh0bWwpO1xuXG5cdFx0XHRcdC8vIEN1c3RvbSBldmVudCB3aGVuIHBhZ2UgaXMgcmV0ZXN0ZWQuXG4gICAgICAgIFx0XHQkKGRvY3VtZW50KS50cmlnZ2VyKCdyb2NrZXQtaW5zaWdodHMtcGFnZS1yZXRlc3QnLCBbcmVzcG9uc2UuaWRdKTtcblxuXHRcdFx0XHQvLyBVcGRhdGUgY3JlZGl0IHN0YXR1c1xuXHRcdFx0XHR1cGRhdGVDcmVkaXRTdGF0ZShyZXNwb25zZS5oYXNfY3JlZGl0KTtcblxuXHRcdFx0XHQvLyBVcGRhdGUgcXVvdGEgYmFubmVyIHZpc2liaWxpdHlcblx0XHRcdFx0dXBkYXRlUXVvdGFCYW5uZXIocmVzcG9uc2UuY2FuX2FkZF9wYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZ2xvYmFsIHNjb3JlIGRhdGEuXG4gICAgICAgICAgICAgICAgZ2xvYmFsU2NvcmVEYXRhID0gcmVzcG9uc2UuZ2xvYmFsX3Njb3JlX2RhdGE7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIGdsb2JhbCBzY29yZSByb3cgaW4gdGFibGUgaWYgb24gUm9ja2V0IEluc2lnaHRzIHBhZ2UuXG5cdFx0XHRcdHVwZGF0ZUdsb2JhbFNjb3JlUm93KGdsb2JhbFNjb3JlRGF0YSk7XG5cblx0XHRcdFx0aWYgKHBvbGxUaW1lcikge1xuXHRcdFx0XHRcdHJlc2V0UG9sbGluZygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNjaGVkdWxlUG9sbGluZygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihyZXNwb25zZT8ubWVzc2FnZSB8fCByZXNwb25zZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvLyA9PT09IEluaXRpYWxpemF0aW9uID09PT1cblx0Ly8gQmluZCBldmVudFxuXHQkKGRvY3VtZW50KS5vbiggJ2NsaWNrJywgJyN3cHItYWN0aW9uLWFkZF9wYWdlX3NwZWVkX3JhZGFyJywgaGFuZGxlQWRkUGFnZSApO1xuXHQkKGRvY3VtZW50KS5vbiggJ2NsaWNrJywgJy53cHItYWN0aW9uLXNwZWVkX3JhZGFyX3JlZnJlc2gnLCBoYW5kbGVSZXNldFBhZ2UgKTtcblx0Ly8gSGFuZGxlIEVudGVyIGtleSBwcmVzcyBvbiBwYWdlIHVybCBpbnB1dC5cblx0JChkb2N1bWVudCkub24oICdrZXlwcmVzcycsICcjd3ByLXNwZWVkLXJhZGFyLXVybC1pbnB1dCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcblx0XHQgIGUucHJldmVudERlZmF1bHQoKTtcblx0XHQgICQoJyN3cHItYWN0aW9uLWFkZF9wYWdlX3NwZWVkX3JhZGFyJykuY2xpY2soKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIE9ubHkgcG9sbCBpZiBvbiBhIHdwciBzZWN0aW9uIHRoYXQgcmVxdWlyZXMgcG9sbGluZyhkYXNoYm9hcmR8cm9ja2V0X2luc2lnaHRzKSAobW9yZSByb2J1c3QgY2hlY2spXG4gICAgZnVuY3Rpb24gaXNWYWxpZFBhZ2VGb3JQb2xsaW5nKCkge1xuICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXHRcdHJldHVybiAnd3Byb2NrZXQnID09PSB1cmxQYXJhbXMuZ2V0KCdwYWdlJyk7XG4gICAgfVxuXG5cdC8vIFJlc3VtZSBwb2xsaW5nIGlmIG5lZWRlZFxuXHRpZiAoaXNWYWxpZFBhZ2VGb3JQb2xsaW5nKCkgJiYgcm9ja2V0SW5zaWdodHNJZHMubGVuZ3RoID4gMCkge1xuXHRcdGlmIChwb2xsVGltZXIpIHtcblx0XHRcdHJlc2V0UG9sbGluZygpO1xuXHRcdH1cblx0XHRzY2hlZHVsZVBvbGxpbmcoKTtcblx0fVxuXG5cdC8vIEhhbmRsZSBVSSB1cGRhdGUgb24gdGhlIHJvY2tldCBpbnNpZ2h0cyB0YWIgd2hlbiBcIkFkZCBQYWdlc1wiIGJ1dHRvbiBvbiB0aGUgZ2xvYmFsIHNjb3JlIHdpZGdldCBpcyBjbGlja2VkLlxuXHQkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLndwci1wZXJjZW50YWdlLXNjb3JlLXdpZGdldCAud3ByLXJpLWFkZC11cmwtYnV0dG9uJywgZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCF0aGlzLnRleHRDb250ZW50LmluY2x1ZGVzKCdBZGQgUGFnZXMnKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERlbGF5IFVJIHVwZGF0ZSBhIGJpdCB0aWxsIGVsZW1lbnQgaXMgdmlzaWJsZS5cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHVwZGF0ZUdsb2JhbFNjb3JlUm93KGdsb2JhbFNjb3JlRGF0YSk7XG5cdFx0fSwgMzApO1xuXHR9KTtcblxuXHQvLyBIYW5kbGUgY29sbGFwc2VlZCBzdHlsaW5nIGZvciBmaXJzdCBsb2FkIG9yIGR5bmFtaWMgcm93IGFkZGl0aW9uLlxuXHRmdW5jdGlvbiBhZGRDb2xsYXBzZWRTdHlsaW5nVG9MYXN0Um93KG9uTG9hZCA9IGZhbHNlKSB7XG5cdFx0JCgnLndwci1yaS1pdGVtJykubGFzdCgpLmZpbmQoJ3RkJykuYWRkQ2xhc3MoJ2JvcmRlci1ib3R0b20nKTtcblxuXHRcdGlmIChvbkxvYWQpIHtcblx0XHRcdC8vIE9uIGxvYWQsIHJlbW92ZSB3cHItbGFzdC1leHBhbmRlZCBmcm9tIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCB0aGUgbGFzdCBhZnRlciBiZWluZyBhZGRlZCBmcm9tIGJhY2tlbmQuXG5cdFx0XHQkKCcud3ByLXJpLWl0ZW0tdG9nZ2xlJykubm90KCc6bGFzdCcpLnJlbW92ZUNsYXNzKCd3cHItbGFzdC1leHBhbmRlZCcpO1xuXHRcdFx0JCgnLndwci1yaS1pdGVtLWFjdGlvbnMnKS5ub3QoJzpsYXN0JykucmVtb3ZlQ2xhc3MoJ3dwci1sYXN0LWV4cGFuZGVkJyk7XG5cdFx0XHQkKCcuZGV0YWlscy1zZWN0aW9uLXRkJykubm90KCc6bGFzdCcpLnJlbW92ZUNsYXNzKCd3cHItbGFzdC1leHBhbmRlZCcpO1xuXG5cdFx0XHQvLyBCYWlsIGVhcmx5IGlmIGxhc3QgaXRlbSBpcyBhbHJlYWR5IGV4cGFuZGVkIG9uIGxvYWQgc28gYXMgbm90IHRvIGhhdmUgY29uZmxpY3Rpbmcgc3R5bGVzLlxuXHRcdFx0aWYoJCgnLmRldGFpbHMtc2VjdGlvbi10ZCcpLmxhc3QoKS5oYXNDbGFzcygnd3ByLWxhc3QtZXhwYW5kZWQnKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdCQoJy53cHItcmktaXRlbS10b2dnbGUnKS5sYXN0KCkuYWRkQ2xhc3MoJ3dwci1sYXN0LWNvbGxhcHNlZCcpO1xuXHRcdCQoJy53cHItcmktaXRlbS1hY3Rpb25zJykubGFzdCgpLmFkZENsYXNzKCd3cHItbGFzdC1jb2xsYXBzZWQnKTtcblx0XHQkKCcuZGV0YWlscy1zZWN0aW9uLXRkJykubGFzdCgpLmFkZENsYXNzKCd3cHItbGFzdC1jb2xsYXBzZWQnKTtcblx0fVxuXG5cdC8vIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBzaW5nbGUgdGVzdCBkZXRhaWxzIHJvdywgc3dpdGNoZXMgdGhlIGNhcmV0IGljb24sIGFuZCB1cGRhdGVzIHN0eWxpbmcgZm9yIHRoZSBsYXN0IGl0ZW0uXG5cdGZ1bmN0aW9uIHRvZ2dsZVNpbmdsZVJvd1Zpc2liaWxpdHkoaW5zaWdodHNJZCwgc291cmNlKSB7XG5cdFx0bGV0ICRlbGVtZW50ID0gJChgI3JpX2RldGFpbHNfJHtpbnNpZ2h0c0lkfWApO1xuXHRcdGxldCBpc1Zpc2libGUgPSAkZWxlbWVudC5oYXNDbGFzcygnd3ByLXJpLWRldGFpbHMtLWV4cGFuZGVkJyk7XG5cdFx0bGV0IGlzTGFzdCA9ICQoYFtkYXRhLXJvY2tldC1pbnNpZ2h0cy1pZD1cIiR7aW5zaWdodHNJZH1cIl0gLndwci1yaS1pdGVtLXRvZ2dsZS1zaW5nbGVgKS5pcygkKCcud3ByLXJpLWl0ZW0tdG9nZ2xlLXNpbmdsZScpLmxhc3QoKSk7XG5cblx0XHRpZiAoIGlzVmlzaWJsZSApIHtcblx0XHRcdCRlbGVtZW50LnJlbW92ZUNsYXNzKCd3cHItcmktZGV0YWlscy0tZXhwYW5kZWQnKTtcblx0XHRcdCQoYFtkYXRhLXJvY2tldC1pbnNpZ2h0cy1pZD1cIiR7aW5zaWdodHNJZH1cIl1gKS5yZW1vdmVDbGFzcygnd3ByLXJpLWl0ZW0tLWV4cGFuZGVkJyk7XG5cdFx0XHQvLyBNYW5pcHVsYXRlIHN0eWxpbmcgZm9yIGxhc3QgZWxlbWVudHMgd2hlbiBkZXRhaWxzIGNlbGwgaXMgbm90IHZpc2libGUuXG5cdFx0XHRpZiAoaXNMYXN0KSB7XG5cdFx0XHRcdHVwZGF0ZVJvd1N0eWxpbmdGb3JMYXN0SXRlbShmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQkZWxlbWVudC5hZGRDbGFzcygnd3ByLXJpLWRldGFpbHMtLWV4cGFuZGVkJyk7XG5cdFx0JChgW2RhdGEtcm9ja2V0LWluc2lnaHRzLWlkPVwiJHtpbnNpZ2h0c0lkfVwiXWApLmFkZENsYXNzKCd3cHItcmktaXRlbS0tZXhwYW5kZWQnKTtcblxuXHRcdC8vIFRyYWNrIGV4cGFuZCBvbmx5IGV4cGFuZCBtZXRyaWMgYWN0aW9uLlxuXHRcdGhhbmRsZU1ldHJpY0FjdGlvblRyYWNraW5nKCdleHBhbmQnLCBpbnNpZ2h0c0lkLCBzb3VyY2UpO1xuXG5cdFx0aWYgKGlzTGFzdCkge1xuXHRcdFx0dXBkYXRlUm93U3R5bGluZ0Zvckxhc3RJdGVtKCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVHJhY2tzIHVzZXIgaW50ZXJhY3Rpb25zIHdpdGggbWV0cmljIGFjdGlvbnMgaW4gUm9ja2V0IEluc2lnaHRzIHZpYSBBSkFYLlxuXHRmdW5jdGlvbiBoYW5kbGVNZXRyaWNBY3Rpb25UcmFja2luZyhldmVudCwgcm93SWQsIHNvdXJjZSkge1xuXHRcdCQucG9zdChcblx0XHRcdGFqYXh1cmwsXG5cdFx0XHR7XG5cdFx0XHRcdGFjdGlvbjogJ3JvY2tldF9pbnNpZ2h0X3RyYWNrX21ldHJpY19hY3Rpb25zJyxcblx0XHRcdFx0X2FqYXhfbm9uY2U6IHJvY2tldF9hamF4X2RhdGEubm9uY2UsXG5cdFx0XHRcdGV2ZW50OiBldmVudCxcblx0XHRcdFx0cm93X2lkOiByb3dJZCxcblx0XHRcdFx0c291cmNlOiBzb3VyY2Vcblx0XHRcdH0sXG5cdFx0XHRmdW5jdGlvbihyZXNwb25zZSkge1xuXHRcdFx0XHRpZiAoIXJlc3BvbnNlLnN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdNZXRyaWMgYWN0aW9uIHRyYWNraW5nIGZhaWxlZDonLCByZXNwb25zZT8uZGF0YSB8fCByZXNwb25zZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGJvcmRlciBzdHlsaW5nIGZvciB0aGUgbGFzdCByb3cgaXRlbSBpbiB0aGUgUm9ja2V0IEluc2lnaHRzIHRhYmxlLlxuXHQgKlxuXHQgKiBNYW5hZ2VzIGJvcmRlciByYWRpdXMgYW5kIGJvdHRvbSBib3JkZXIgc3R5bGluZyBiYXNlZCBvbiB3aGV0aGVyIHRoZSBkZXRhaWxzXG5cdCAqIGNlbGwgaXMgZXhwYW5kZWQgb3IgY29sbGFwc2VkIHRvIG1haW50YWluIHByb3BlciB2aXN1YWwgYXBwZWFyYW5jZS5cblx0ICovXG5cdGZ1bmN0aW9uIHVwZGF0ZVJvd1N0eWxpbmdGb3JMYXN0SXRlbShpc0V4cGFuZGVkID0gdHJ1ZSkge1xuXHRcdGNvbnN0IGFkZFN0YXRlID0gaXNFeHBhbmRlZCA/ICd3cHItbGFzdC1leHBhbmRlZCcgOiAnd3ByLWxhc3QtY29sbGFwc2VkJztcblx0XHRjb25zdCByZW1vdmVTdGF0ZSA9IGlzRXhwYW5kZWQgPyAnd3ByLWxhc3QtY29sbGFwc2VkJyA6ICd3cHItbGFzdC1leHBhbmRlZCc7XG5cblx0XHR2YXIgJHNlbGVjdG9ycyA9IHtcblx0XHRcdGxhc3RUb2dnbGU6ICQoJy53cHItcmktaXRlbS10b2dnbGUnKS5sYXN0KCksXG5cdFx0XHRsYXN0QWN0aW9uczogJCgnLndwci1yaS1pdGVtLWFjdGlvbnMnKS5sYXN0KClcblx0XHR9O1xuXG5cdFx0JHNlbGVjdG9ycy5sYXN0VG9nZ2xlXG5cdFx0XHQucmVtb3ZlQ2xhc3MocmVtb3ZlU3RhdGUpXG5cdFx0XHQuYWRkQ2xhc3MoYWRkU3RhdGUpO1xuXG5cdFx0JHNlbGVjdG9ycy5sYXN0QWN0aW9uc1xuXHRcdFx0LnJlbW92ZUNsYXNzKHJlbW92ZVN0YXRlKVxuXHRcdFx0LmFkZENsYXNzKGFkZFN0YXRlKTtcblxuXG5cdFx0Ly8gQ2hlY2sgaWYgbGFzdCBkZXRhaWwgcm93IGlzIG5vdCB0aGUgbGFzdCByb3cgaW4gdGhlIHRhYmxlIHNvIGFzIG5vdCB0byBhcHBseSBpbXByb3BlciBzdHlsaW5nIHdpdGggYm9yZGVyIHJhZGl1cyBiZXR3ZWVuIHJvd3MuXG5cdFx0dmFyICRsYXN0RGV0YWlsc0NlbGwgPSAkKCcuZGV0YWlscy1zZWN0aW9uLXRkJykubGFzdCgpO1xuXHRcdGlmICgkbGFzdERldGFpbHNDZWxsLmNsb3Nlc3QoJ3RyJykubmV4dCgndHInKS5sZW5ndGggIT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQkbGFzdERldGFpbHNDZWxsLnJlbW92ZUNsYXNzKHJlbW92ZVN0YXRlKVxuXHRcdC5hZGRDbGFzcyhhZGRTdGF0ZSk7XG5cdH1cblxuXHQvLyBUb2dnbGUgc2luZ2xlIGl0ZW0uXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcud3ByLXJpLWl0ZW0tdG9nZ2xlLXNpbmdsZScsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnNpZ2h0c0lkID0gJCh0aGlzKS5jbG9zZXN0KCcud3ByLXJpLWl0ZW0nKS5kYXRhKCdyb2NrZXQtaW5zaWdodHMtaWQnKTtcblx0XHR0b2dnbGVTaW5nbGVSb3dWaXNpYmlsaXR5KGluc2lnaHRzSWQsICd1cmxfZXhwYW5kJyk7XG5cdH0pO1xuXG5cdC8vIFRvZ2dsZSBhbGwgaXRlbXMuXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcud3ByLXJpLWl0ZW0tdG9nZ2xlLWFsbCcsIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoJCgnLndwci1yaS1kZXRhaWxzLS1leHBhbmRlZCcpLmxlbmd0aCA+IDApIHtcblx0XHRcdCQoJy53cHItcmktZGV0YWlscycpLnJlbW92ZUNsYXNzKCd3cHItcmktZGV0YWlscy0tZXhwYW5kZWQnKTtcblx0XHRcdCQoJy53cHItcmktaXRlbScpLnJlbW92ZUNsYXNzKCd3cHItcmktaXRlbS0tZXhwYW5kZWQnKTtcblx0XHRcdCQodGhpcykucmVtb3ZlQ2xhc3MoJ3dwci1yaS1pdGVtLXRvZ2dsZS1hbGwtLWV4cGFuZGVkJyk7XG5cdFx0XHR1cGRhdGVSb3dTdHlsaW5nRm9yTGFzdEl0ZW0oZmFsc2UpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JCgnLndwci1yaS1kZXRhaWxzJykuYWRkQ2xhc3MoJ3dwci1yaS1kZXRhaWxzLS1leHBhbmRlZCcpO1xuXHRcdCQoJy53cHItcmktaXRlbScpLmFkZENsYXNzKCd3cHItcmktaXRlbS0tZXhwYW5kZWQnKTtcblx0XHQkKHRoaXMpLmFkZENsYXNzKCd3cHItcmktaXRlbS10b2dnbGUtYWxsLS1leHBhbmRlZCcpO1xuXHRcdHVwZGF0ZVJvd1N0eWxpbmdGb3JMYXN0SXRlbSgpO1xuXG5cdFx0Ly8gVHJhY2sgc2luZ2xlIGV4cGFuZCBldmVudCBmb3IgXCJFeHBhbmQgQWxsXCIgYWN0aW9uIHdpdGggdGVzdF9pZCBhcyAnYWxsJy5cblx0XHRoYW5kbGVNZXRyaWNBY3Rpb25UcmFja2luZygnZXhwYW5kJywgJ2FsbCcsICdnbG9iYWxfZXhwYW5kJyk7XG5cdH0pO1xuXG5cdC8vIFRyYWNrIFwiU2VlIEdUbWV0cml4IFJlcG9ydFwiIGNsaWNrcyBpbiBSb2NrZXQgSW5zaWdodHMuXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcud3ByLXJpLXJlcG9ydCcsIGZ1bmN0aW9uKGUpIHtcdC8vIE9ubHkgdHJhY2sgaWYgbGluayBpcyBub3QgZGlzYWJsZWQgYW5kIG1peHBhbmVsIGlzIGF2YWlsYWJsZS5cblx0XHRpZiAoJCh0aGlzKS5oYXNDbGFzcygnd3ByLXJpLWFjdGlvbi0tZGlzYWJsZWQnKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBpbnNpZ2h0c0lkID0gJCh0aGlzKS5kYXRhKCdyb2NrZXQtaW5zaWdodHMtcm93LWlkJyk7XG5cdFx0aGFuZGxlTWV0cmljQWN0aW9uVHJhY2tpbmcoJ3NlZV9yZXBvcnQnLCBpbnNpZ2h0c0lkLCAnc2VlX3JlcG9ydF9idXR0b24nKTtcblx0fSk7XG5cblx0Ly8gVXBkYXRlIHRhYmxlIHN0eWxpbmcgYWZ0ZXIgbmV3IHBhZ2UgaXMgYWRkZWQuXG5cdCQoZG9jdW1lbnQpLm9uKCdyb2NrZXQtaW5zaWdodHMtcGFnZS10ZXN0LWNvbXBsZXRlZCcsIGZ1bmN0aW9uIChlLCBpbnNpZ2h0c0lkKSB7XG5cdFx0Ly8gQmFpbCBvdXQgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgcmVzdWx0LlxuXHRcdGlmICgkKCcud3ByLXJpLWl0ZW0tcmVzdWx0JykubGVuZ3RoID4gMSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkeW5hbWljIGNsYXNzIHdoZW4gb25seSBvbmUgaXRlbSBleGlzdCBpbiB0YWJsZS5cblx0XHQkKCcud3ByLWxhc3QtY29sbGFwc2VkJykucmVtb3ZlQ2xhc3MoJ3dwci1sYXN0LWNvbGxhcHNlZCcpO1xuXHR9KTtcblxuXHQvLyBVcGRhdGUgdGFibGUgc3R5bGluZyBhZnRlciBuZXcgcGFnZSBpcyBhZGRlZC5cblx0JChkb2N1bWVudCkub24oJ3JvY2tldC1pbnNpZ2h0cy1wYWdlLWFkZGVkJywgZnVuY3Rpb24gKGUpIHtcblx0XHQvLyBSZW1vdmUgZHluYW1pYyBjbGFzcyBmb3IgbGFzdCBpdGVtIGlmIGV4aXN0cyB3aGVuIG5ldyBwYWdlIGlzIGFkZGVkLlxuXHRcdCQoJy53cHItbGFzdC1jb2xsYXBzZWQnKS5yZW1vdmVDbGFzcygnd3ByLWxhc3QtY29sbGFwc2VkJyk7XG5cdFx0JCgnLndwci1sYXN0LWV4cGFuZGVkJykucmVtb3ZlQ2xhc3MoJ3dwci1sYXN0LWV4cGFuZGVkJyk7XG5cdFx0JCgnLmJvcmRlci1ib3R0b20nKS5yZW1vdmVDbGFzcygnYm9yZGVyLWJvdHRvbScpO1xuXHR9KTtcblxuXHQvLyBVcGRhdGUgdGFibGUgc3R5bGluZyBhZnRlciByZXRlc3Qgb3IgcG9sbGluZyB1cGRhdGUgZm9yIGxhc3Qgcm93LlxuXHQkKGRvY3VtZW50KS5vbigncm9ja2V0LWluc2lnaHRzLXBhZ2UtcmV0ZXN0IHJvY2tldC1pbnNpZ2h0cy1wYWdlLXRlc3QtcG9sbGluZycsIGZ1bmN0aW9uIChlLCBpbnNpZ2h0c0lkKSB7XG5cdFx0Ly8gQ2hlY2sgaWYgaXRlbSBpcyB0aGUgbGFzdC5cblx0XHR2YXIgaXNMYXN0ID0gJChgW2RhdGEtcm9ja2V0LWluc2lnaHRzLWlkPVwiJHtpbnNpZ2h0c0lkfVwiXWApLmlzKCQoJy53cHItcmktaXRlbS1yZXN1bHQnKS5sYXN0KCkpO1xuXG5cdFx0aWYgKGlzTGFzdCkge1xuXHRcdFx0YWRkQ29sbGFwc2VkU3R5bGluZ1RvTGFzdFJvdygpO1xuXHRcdH1cblx0fSk7XG5cblx0JChkb2N1bWVudCkub24oJ3JvY2tldC1pbnNpZ2h0cy1wYWdlLXJldGVzdCcsIGZ1bmN0aW9uIChlLCBpbnNpZ2h0c0lkKSB7XG5cdFx0JChgI3JpX2RldGFpbHNfJHtpbnNpZ2h0c0lkfWApLnJlbW92ZUNsYXNzKCd3cHItcmktZGV0YWlscy0tZXhwYW5kZWQnKTtcblx0XHQkKGBbZGF0YS1yb2NrZXQtaW5zaWdodHMtaWQ9XCIke2luc2lnaHRzSWR9XCJdYCkucmVtb3ZlQ2xhc3MoJ3dwci1yaS1pdGVtLS1leHBhbmRlZCcpO1xuXHR9KTtcblxuXHQkKHdpbmRvdykubG9hZCgoKSA9PiB7XG5cdFx0aWYgKCAhIGlzT25Sb2NrZXRJbnNpZ2h0cygpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBjb2xsYXBzZWQgc3R5bGluZyB0byB0aGUgbGFzdCByb3cgb24gaW5pdGlhbCBsb2FkLlxuXHRcdGFkZENvbGxhcHNlZFN0eWxpbmdUb0xhc3RSb3codHJ1ZSk7XG5cblx0XHQvLyBTZXQgaW5pdGlhbCBleHBhbmQvY29sbGFwc2Ugc3RhdGUuXG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0XHRjb25zdCB0ZXN0SWQgPSB1cmxQYXJhbXMuZ2V0KCdyaV9pZCcpO1xuXG5cdFx0Ly8gU2VuZCBtaXhwYW5lbCBldmVudCBmb3IgYXV0byBleHBhbmRlZCByb3cuXG5cdFx0bGV0IGZpcnN0Um93SWQgPSAkKCcud3ByLXJpLWl0ZW0tLWV4cGFuZGVkJyk/LmZpcnN0KCk/LmRhdGEoJ3JvY2tldC1pbnNpZ2h0cy1pZCcpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgcmlfaWQgd2FzIHBhc3NlZCBpbiBxdWVyeSBzdHJpbmcgdG8gb3BlbiBzcGVjaWZpYyB0ZXN0LlxuXHRcdGlmICghdGVzdElkIHx8IHRlc3RJZCA9PT0gJycpIHtcblx0XHRcdGlmIChmaXJzdFJvd0lkKSB7XG5cdFx0XHRcdGhhbmRsZU1ldHJpY0FjdGlvblRyYWNraW5nKCdleHBhbmQnLCBmaXJzdFJvd0lkLCAnYXV0b19leHBhbmRfdXJsJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aGFuZGxlTWV0cmljQWN0aW9uVHJhY2tpbmcoJ2V4cGFuZCcsIHRlc3RJZCwgJ3Bvc3QgdHlwZSBsaXN0aW5nJyk7XG5cblx0XHQkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7XG5cdFx0XHRzY3JvbGxUb3A6ICQoYFtkYXRhLXJvY2tldC1pbnNpZ2h0cy1pZD1cIiR7dGVzdElkfVwiXWApLm9mZnNldCgpLnRvcCAtIDEwMFxuXHRcdH0sIDUwMCk7XG5cblx0XHQvLyBSZW1vdmUgcmlfaWQgZnJvbSBVUkwgd2l0aG91dCBwYWdlIHJlbG9hZFxuXHRcdHVybFBhcmFtcy5kZWxldGUoJ3JpX2lkJyk7XG5cdFx0Y29uc3QgbmV3VXJsID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgJz8nICsgdXJsUGFyYW1zLnRvU3RyaW5nKCkgKyB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHR3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCBuZXdVcmwpO1xuXHR9KTtcbn0pO1xuIiwiLy8gQWRkIGdyZWVuc29jayBsaWIgZm9yIGFuaW1hdGlvbnNcclxuaW1wb3J0ICcuLi9saWIvZ3JlZW5zb2NrL1R3ZWVuTGl0ZS5taW4uanMnO1xyXG5pbXBvcnQgJy4uL2xpYi9ncmVlbnNvY2svVGltZWxpbmVMaXRlLm1pbi5qcyc7XHJcbmltcG9ydCAnLi4vbGliL2dyZWVuc29jay9lYXNpbmcvRWFzZVBhY2subWluLmpzJztcclxuaW1wb3J0ICcuLi9saWIvZ3JlZW5zb2NrL3BsdWdpbnMvQ1NTUGx1Z2luLm1pbi5qcyc7XHJcbmltcG9ydCAnLi4vbGliL2dyZWVuc29jay9wbHVnaW5zL1Njcm9sbFRvUGx1Z2luLm1pbi5qcyc7XHJcblxyXG4vLyBBZGQgc2NyaXB0c1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9jZG4tZHJpdmVyLmpzJztcclxuaW1wb3J0ICcuLi9nbG9iYWwvcGFnZU1hbmFnZXIuanMnO1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9tYWluLmpzJztcclxuaW1wb3J0ICcuLi9nbG9iYWwvZmllbGRzLmpzJztcclxuaW1wb3J0ICcuLi9nbG9iYWwvYmVhY29uLmpzJztcclxuaW1wb3J0ICcuLi9nbG9iYWwvYWpheC5qcyc7XHJcbmltcG9ydCAnLi4vZ2xvYmFsL3JlY29tbWVuZGF0aW9ucy13aWRnZXQuanMnO1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9yb2NrZXRjZG4uanMnO1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9yb2NrZXRjZG4tc3Vic2NyaXB0aW9uLXBvbGxpbmcuanMnO1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9jb3VudGRvd24uanMnO1xyXG5pbXBvcnQgJy4uL2dsb2JhbC9taXhwYW5lbC5qcyciLCJ2YXIgJCA9IGpRdWVyeTtcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XG4gICAgaWYgKCdCZWFjb24nIGluIHdpbmRvdykge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2hvdyBiZWFjb25zIG9uIGJ1dHRvbiBcImhlbHBcIiBjbGlja1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyICRoZWxwID0gJCgnLndwci1pbmZvQWN0aW9uLS1oZWxwJyk7XG4gICAgICAgICRoZWxwLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgICAgdmFyIGlkcyA9ICQodGhpcykuYXR0cignZGF0YS1iZWFjb24taWQnKTtcbiAgICAgICAgICAgIHZhciBidXR0b24gPSAkKHRoaXMpLmRhdGEoJ3dwcl90cmFja19idXR0b24nKSB8fCAnQmVhY29uIEhlbHAnO1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSAkKHRoaXMpLmRhdGEoJ3dwcl90cmFja19jb250ZXh0JykgfHwgJ1NldHRpbmdzJztcblxuICAgICAgICAgICAgLy8gVHJhY2sgd2l0aCBNaXhQYW5lbCBKUyBTREtcbiAgICAgICAgICAgIHdwclRyYWNrSGVscEJ1dHRvbihidXR0b24sIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAvLyBDb250aW51ZSB3aXRoIGV4aXN0aW5nIGJlYWNvbiBmdW5jdGlvbmFsaXR5XG4gICAgICAgICAgICB3cHJDYWxsQmVhY29uKGlkcyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdwckNhbGxCZWFjb24oYUlEKXtcbiAgICAgICAgICAgIGFJRCA9IGFJRC5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgaWYgKCBhSUQubGVuZ3RoID09PSAwICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICggYUlELmxlbmd0aCA+IDEgKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5CZWFjb24oXCJzdWdnZXN0XCIsIGFJRCk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5CZWFjb24oXCJvcGVuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5CZWFjb24oXCJhcnRpY2xlXCIsIGFJRC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cblxuXHQkKCAnLndwci1yaS1yZXBvcnQnICkub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdHdwclRyYWNrSGVscEJ1dHRvbiggJ3JvY2tldCBpbnNpZ2h0cyBzZWUgZ3RtZXRyaXggcmVwb3J0JywgJ3BlcmZvcm1hbmNlIHN1bW1hcnknICk7XG5cdH0gKTtcblxuICAgIC8vIE1peFBhbmVsIHRyYWNraW5nIGZ1bmN0aW9uXG4gICAgZnVuY3Rpb24gd3ByVHJhY2tIZWxwQnV0dG9uKGJ1dHRvbiwgY29udGV4dCkge1xuICAgICAgICBpZiAodHlwZW9mIG1peHBhbmVsICE9PSAndW5kZWZpbmVkJyAmJiBtaXhwYW5lbC50cmFjaykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdXNlciBoYXMgb3B0ZWQgaW4gdXNpbmcgbG9jYWxpemVkIGRhdGFcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygcm9ja2V0X21peHBhbmVsX2RhdGEgPT09ICd1bmRlZmluZWQnIHx8ICFyb2NrZXRfbWl4cGFuZWxfZGF0YS5vcHRpbl9lbmFibGVkIHx8IHJvY2tldF9taXhwYW5lbF9kYXRhLm9wdGluX2VuYWJsZWQgPT09ICcwJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWRlbnRpZnkgdXNlciB3aXRoIGhhc2hlZCBsaWNlbnNlIGVtYWlsIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgaWYgKHJvY2tldF9taXhwYW5lbF9kYXRhLnVzZXJfaWQgJiYgdHlwZW9mIG1peHBhbmVsLmlkZW50aWZ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgbWl4cGFuZWwuaWRlbnRpZnkocm9ja2V0X21peHBhbmVsX2RhdGEudXNlcl9pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1peHBhbmVsLnRyYWNrKCdCdXR0b24gQ2xpY2tlZCcsIHtcbiAgICAgICAgICAgICAgICAnYnV0dG9uJzogYnV0dG9uLFxuXHRcdFx0XHQnYnV0dG9uX2NvbnRleHQnOiBjb250ZXh0LFxuXHRcdFx0XHQncGx1Z2luJzogcm9ja2V0X21peHBhbmVsX2RhdGEucGx1Z2luLFxuICAgICAgICAgICAgICAgICdicmFuZCc6IHJvY2tldF9taXhwYW5lbF9kYXRhLmJyYW5kLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbic6IHJvY2tldF9taXhwYW5lbF9kYXRhLmFwcCxcbiAgICAgICAgICAgICAgICAnY29udGV4dCc6IHJvY2tldF9taXhwYW5lbF9kYXRhLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3BhdGgnOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5wYXRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2UgZnVuY3Rpb24gZ2xvYmFsbHkgYXZhaWxhYmxlXG4gICAgd2luZG93LndwclRyYWNrSGVscEJ1dHRvbiA9IHdwclRyYWNrSGVscEJ1dHRvbjtcbn0pO1xuIiwiKCAoIGRvY3VtZW50ICkgPT4ge1xuXHQndXNlIHN0cmljdCc7XG5cblx0ZnVuY3Rpb24gbm90aWZ5Q2RuU3RhdGVDaGFuZ2UoKSB7XG5cdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3ByLWNkbi1zdGF0ZS1jaGFuZ2UnICkgKTtcblx0fVxuXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuXHRcdGluaXRDZG5Ecml2ZXJUYWJzKCk7XG5cdFx0aW5pdENkblBhdXNlVG9nZ2xlKCk7XG5cdFx0aW5pdEFkZEhvbWVwYWdlKCk7XG5cdFx0aW5pdEFkZFBhZ2UoKTtcblx0XHRpbml0RGVsZXRlUGFnZSgpO1xuXHRcdHVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXRlT25TdWJzY3JpcHRpb25Mb2FkaW5nKCk7XG5cdH0gKTtcblxuXHRjb25zdCBhZGRIb21lQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJyN3cHJfYWRkX3BhZ2VfY29tcG9uZW50IC53cHItY2RuLWFkZC1wYWdlX19ob21lcGFnZScgKTtcblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgc3RhdHVzIGluZGljYXRvciBjb21wb25lbnQgd2l0aCBuZXcgSFRNTCBjb250ZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaHRtbCAtIFRoZSBIVE1MIHN0cmluZyB0byByZXBsYWNlIHRoZSBzdGF0dXMgaW5kaWNhdG9yIHdpdGguXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU3RhdHVzSW5kaWNhdG9yQ29tcG9uZW50KCBodG1sICkge1xuXHRcdGNvbnN0IHN0YXR1c0luZGljYXRvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1idWlsdC1pbiAud3ByLWNkbi1zdGF0dXMnICk7XG5cdFx0aWYgKCBzdGF0dXNJbmRpY2F0b3IgJiYgaHRtbCApIHtcblx0XHRcdHN0YXR1c0luZGljYXRvci5vdXRlckhUTUwgPSBodG1sO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUb2dnbGVzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiBDRE4tcmVsYXRlZCBVSSBlbGVtZW50cyBiYXNlZCBvbiB0aGUgYWN0aXZlIGRyaXZlci5cblx0ICpcblx0ICogRm9yIHRoZSAncm9ja2V0Y2RuJyBkcml2ZXIsIHRhcmdldHMgYm90aCBzaGFyZWQgQ0ROIGFuZCBSb2NrZXRDRE4gc2VjdGlvbnMuXG5cdCAqIEZvciBhbGwgb3RoZXIgZHJpdmVycywgb25seSB0YXJnZXRzIHRoZSBzaGFyZWQgQ0ROIHNlY3Rpb24gYW5kIGFsd2F5cyBlbmFibGVzIGl0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gIGRyaXZlciAgIFRoZSBDRE4gZHJpdmVyIGlkZW50aWZpZXIgKGUuZy4gJ3JvY2tldGNkbicpLlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGRpc2FibGVkIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgQ0ROIFVJIGVsZW1lbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlUm9ja2V0Q0RORWxlbWVudHNTdGF0ZSggZHJpdmVyLCBkaXNhYmxlZCApIHtcblx0XHRpZiAoICdyb2NrZXRjZG4nID09PSBkcml2ZXIgKSB7XG5cdFx0XHRpZiAoICEgZGlzYWJsZWQgKSB7XG5cdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcuY2RuLXNoYXJlZC1zZWN0aW9uLCAucm9ja2V0Y2RuLXNoYXJlZC1zZWN0aW9uJyApLmZvckVhY2goICggZWwgKSA9PiB7XG5cdFx0XHRcdFx0ZWwuY2xhc3NMaXN0LnJlbW92ZSggJ3dwci1jZG4tZGlzYWJsZWQnICk7XG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcuY2RuLXNoYXJlZC1zZWN0aW9uLCAucm9ja2V0Y2RuLXNoYXJlZC1zZWN0aW9uJyApLmZvckVhY2goICggZWwgKSA9PiB7XG5cdFx0XHRcdGVsLmNsYXNzTGlzdC5hZGQoICd3cHItY2RuLWRpc2FibGVkJyApO1xuXHRcdFx0fSApO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy5jZG4tc2hhcmVkLXNlY3Rpb24nICkuZm9yRWFjaCggKCBlbCApID0+IHtcblx0XHRcdGVsLmNsYXNzTGlzdC5yZW1vdmUoICd3cHItY2RuLWRpc2FibGVkJyApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBvciBoaWRlcyB0aGUgbGltaXQtcmVhY2hlZCB0b29sdGlwIG9uIHRoZSBBREQgUEFHRSBidXR0b24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gbGltaXRSZWFjaGVkIFdoZXRoZXIgdGhlIGZyZWUtdGllciBwYWdlIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQuXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlVG9vbHRpcFN0YXRlKCBsaW1pdFJlYWNoZWQgKSB7XG5cdFx0Y29uc3QgdG9vbHRpcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1hZGQtcGFnZV9fYnV0dG9uLXdyYXBwZXIgLndwci10b29sdGlwJyApO1xuXHRcdGlmICggdG9vbHRpcCApIHtcblx0XHRcdHRvb2x0aXAuY2xhc3NMaXN0LnRvZ2dsZSggJ3dwci1pc0hpZGRlbicsICEgbGltaXRSZWFjaGVkICk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIFBlbmRpbmcgYmFubmVyIGF1dG8tZXhwYW5kIHRpbWVyIElELCBvciBudWxsIHdoZW4gbm8gdGltZXIgaXMgYWN0aXZlLiAqL1xuXHRsZXQgYXV0b0V4cGFuZFRpbWVyID0gbnVsbDtcblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgUm9ja2V0Q0ROIENUQSB2aXNpYmlsaXR5IGFuZCBleHBhbnNpb24gc3RhdGUuXG5cdCAqXG5cdCAqIFdoZW4gdGhlIHBhZ2UgY291bnQgcmVhY2hlcyB0aGUgbGltaXQsIGV4cGFuc2lvbiBpcyBkZWZlcnJlZCBieSAxNSBzZWNvbmRzIHNvIHRoZVxuXHQgKiB1c2VyIGhhcyB0aW1lIHRvIHJlYWN0IGJlZm9yZSB0aGUgdXBzZWxsIGJhbm5lciBvcGVucy4gQW55IGluLWZsaWdodCB0aW1lciBpc1xuXHQgKiBjYW5jZWxsZWQgd2hlbmV2ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKGUuZy4gb24gcGFnZSBkZWxldGlvbiksIGVuc3VyaW5nIHN0YWxlXG5cdCAqIGV4cGFuZHMgbmV2ZXIgZmlyZSBhZnRlciB0aGUgc3RhdGUgaGFzIGNoYW5nZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCBDdXJyZW50IG51bWJlciBvZiBmcmVlLXRpZXIgcGFnZXMuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCBGcmVlLXRpZXIgcGFnZSBsaW1pdC5cblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRmdW5jdGlvbiB1cGRhdGVSb2NrZXRDdGFTdGF0ZSggY291bnQsIGxpbWl0ICkge1xuXHRcdGNvbnN0IGN0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3ByLXJvY2tldGNkbi1jdGEnICk7XG5cdFx0Y29uc3QgcmVzZWxsZXJCYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwci1yb2NrZXRjZG4tcmVzZWxsZXItbGltaXQtY3RhJyApO1xuXG5cdFx0aWYgKCAhIGN0YSAmJiAhIHJlc2VsbGVyQmFubmVyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbmNlbCBhbnkgcGVuZGluZyBleHBhbmQg4oCUIHN0YXRlIGhhcyBjaGFuZ2VkLlxuXHRcdGlmICggYXV0b0V4cGFuZFRpbWVyICE9PSBudWxsICkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KCBhdXRvRXhwYW5kVGltZXIgKTtcblx0XHRcdGF1dG9FeHBhbmRUaW1lciA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXRMaW1pdCAgPSBjb3VudCA+PSBsaW1pdDtcblxuXHRcdGlmICggY3RhICkge1xuXHRcdFx0Y3RhLmNsYXNzTGlzdC50b2dnbGUoICd3cHItaXNIaWRkZW4nLCBjb3VudCA9PT0gMCApO1xuXHRcdH1cblxuXHRcdGlmICggcmVzZWxsZXJCYW5uZXIgKSB7XG5cdFx0XHRyZXNlbGxlckJhbm5lci5jbGFzc0xpc3QudG9nZ2xlKCAnd3ByLWlzSGlkZGVuJywgISBhdExpbWl0ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBjdGEgKSB7XG5cdFx0XHRpZiAoIGF0TGltaXQgKSB7XG5cdFx0XHRcdC8vIEFsd2F5cyBzaG93IFwiTmljZSB3b3JrIVwiIHRleHQgaW1tZWRpYXRlbHkuXG5cdFx0XHRcdGN0YS5jbGFzc0xpc3QuYWRkKCAnd3ByLXJvY2tldGNkbi1jdGEtLS1tYXgtbGltaXQnICk7XG5cblx0XHRcdFx0aWYgKCAhIGN0YS5jbGFzc0xpc3QuY29udGFpbnMoICd3cHItcm9ja2V0Y2RuLWN0YS0tZXhwYW5kZWQnICkgKSB7XG5cdFx0XHRcdFx0Ly8gQmFubmVyIGlzIGNvbGxhcHNlZCDigJQga2VlcCBpdCBjb2xsYXBzZWQgZm9yIDE1cyB0aGVuIGV4cGFuZC5cblx0XHRcdFx0XHRjdGEuY2xhc3NMaXN0LmFkZCggJ3dwci1yb2NrZXRjZG4tY3RhLS1jb2xsYXBzZWQnICk7XG5cdFx0XHRcdFx0Y3RhLmNsYXNzTGlzdC5yZW1vdmUoICd3cHItcm9ja2V0Y2RuLWN0YS0tZXhwYW5kZWQnICk7XG5cblx0XHRcdFx0XHRhdXRvRXhwYW5kVGltZXIgPSBzZXRUaW1lb3V0KCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRhdXRvRXhwYW5kVGltZXIgPSBudWxsO1xuXHRcdFx0XHRcdFx0Y3RhLmNsYXNzTGlzdC5yZW1vdmUoICd3cHItcm9ja2V0Y2RuLWN0YS0tY29sbGFwc2VkJyApO1xuXHRcdFx0XHRcdFx0Y3RhLmNsYXNzTGlzdC5hZGQoICd3cHItcm9ja2V0Y2RuLWN0YS0tZXhwYW5kZWQnICk7XG5cdFx0XHRcdFx0XHRkb2N1bWVudC5kaXNwYXRjaEV2ZW50KCBuZXcgQ3VzdG9tRXZlbnQoICdyb2NrZXRDRE5CYW5uZXJBdXRvRXhwYW5kZWQnICkgKTtcblx0XHRcdFx0XHR9LCAxNTAwMCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdGEuY2xhc3NMaXN0LnRvZ2dsZSggJ3dwci1yb2NrZXRjZG4tY3RhLS1jb2xsYXBzZWQnLCBjb3VudCA+IDAgKTtcblx0XHRcdFx0Y3RhLmNsYXNzTGlzdC5yZW1vdmUoICd3cHItcm9ja2V0Y2RuLWN0YS0tZXhwYW5kZWQnLCAnd3ByLXJvY2tldGNkbi1jdGEtLS1tYXgtbGltaXQnICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2FuY2VsIGFueSBwZW5kaW5nIGJhbm5lciBleHBhbmQgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgYXdheSBmcm9tIHRoZSBDRE4gdGFiLlxuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAncm9ja2V0SnNBZnRlclBhZ2VOYXZpZ2F0aW9uJywgKCBlICkgPT4ge1xuXHRcdGlmICggZS5kZXRhaWwucGFnZUlkICE9PSAncGFnZV9jZG4nICYmIGF1dG9FeHBhbmRUaW1lciAhPT0gbnVsbCApIHtcblx0XHRcdGNsZWFyVGltZW91dCggYXV0b0V4cGFuZFRpbWVyICk7XG5cdFx0XHRhdXRvRXhwYW5kVGltZXIgPSBudWxsO1xuXHRcdH1cblx0fSApO1xuXG5cdC8qKlxuXHQgKiBMaXN0ZW5zIGZvciBjdXN0b20gJ3JvY2tldEpzQWZ0ZXJQYWdlTmF2aWdhdGlvbicgZXZlbnQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgc3VibWl0IGJ1dHRvblxuXHQgKiBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgYSBDRE4gc3Vic2NyaXB0aW9uIGxvYWRpbmcgaW5kaWNhdG9yIG9uIHRoZSBDRE4gc2V0dGluZ3MgcGFnZS5cblx0ICpcblx0ICogRGlzYWJsZXMgdGhlIHN1Ym1pdCBidXR0b24gd2hlbiBuYXZpZ2F0aW5nIHRvIHRoZSBDRE4gcGFnZSBpZiBhIHN1YnNjcmlwdGlvbiBsb2FkaW5nIGluZGljYXRvciBpcyBwcmVzZW50LFxuXHQgKiBhbmQgcmUtZW5hYmxlcyBpdCB3aGVuIG5hdmlnYXRpbmcgYXdheSBmcm9tIHRoZSBDRE4gcGFnZS5cblx0ICovXG5cdGZ1bmN0aW9uIHVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXRlT25TdWJzY3JpcHRpb25Mb2FkaW5nKCkge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdyb2NrZXRKc0FmdGVyUGFnZU5hdmlnYXRpb24nLCAoIGUgKSA9PiB7XG5cdFx0XHQvLyBCYWlsIG91dCBpZiBzdWJtaXQgYnV0dG9uIGlzIG5vdCB2aXNpYmxlIGZvciB0aGUgY3VycmVudCBwYWdlLlxuXHRcdFx0aWYgKGdldENvbXB1dGVkU3R5bGUoIGUuZGV0YWlsLnN1Ym1pdEJ1dHRvbiApLmRpc3BsYXkgPT09ICdub25lJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNsYXNzZXMgPSBbXG5cdFx0XHRcdCcud3ByLWljb24tb3JhbmdlLWxvYWRlcicsXG5cdFx0XHRcdCcud3ByLWNkbi1idWlsdC1pbi0tZGlzYWJsZWQnLFxuXHRcdFx0XTtcblxuXHRcdFx0Y29uc3QgYWxsUHJlc2VudCA9IGNsYXNzZXMuZXZlcnkoIGNscyA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBjbHMgKSAhPT0gbnVsbCApO1xuXG5cdFx0XHQvLyBSZS1lbmFibGUgc3VibWl0IGJ1dHRvbiB3aGVuIHBhZ2UgaXMgbm90IGNkbiBhbmQgYmFpbCBvdXQuXG5cdFx0XHRpZiAoZS5kZXRhaWwucGFnZUlkICE9PSAncGFnZV9jZG4nKSB7XG5cdFx0XHRcdGlmIChlLmRldGFpbC5zdWJtaXRCdXR0b24uY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3ByLWNkbi1kaXNhYmxlZCcgKSkge1xuXHRcdFx0XHRcdGUuZGV0YWlsLnN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCAnd3ByLWNkbi1kaXNhYmxlZCcgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQmFpbCBvdXQgaWYgbm8gY2RuIHN1YnNjcmlwdGlvbiBsb2FkZXIgaXMgcHJlc2VudC5cblx0XHRcdGlmICggISBhbGxQcmVzZW50ICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIERpc2FibGUgc3VibWl0IGJ1dHRvbiB3aGVuIG9uIGNkbiBwYWdlIGFuZCBzdWJzY3JpcHRpb24gbG9hZGVyIGlzIHByZXNlbnQuXG5cdFx0XHRlLmRldGFpbC5zdWJtaXRCdXR0b24uY2xhc3NMaXN0LmFkZCggJ3dwci1jZG4tZGlzYWJsZWQnICk7XG5cdFx0fSApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHN1YnNjcmlwdGlvbiBsb2FkaW5nIHN0YXRlIG9uIHRoZSBDRE4gVUkuXG5cdCAqXG5cdCAqIERpc2FibGVzIHRoZSBidWlsdC1pbiBDRE4gc2VjdGlvbiwgcHVyZ2UgYW5kIGV4Y2x1ZGUgc2VjdGlvbnMuXG5cdCAqL1xuXHRmdW5jdGlvbiBzZXRTdWJzY3JpcHRpb25Mb2FkaW5nU3RhdGUoKSB7XG5cdFx0Y29uc3QgYnVpbHRJbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1idWlsdC1pbicgKTtcblxuXHRcdGlmICggYnVpbHRJbiApIHtcblx0XHRcdGJ1aWx0SW4uY2xhc3NMaXN0LmFkZCggJ3dwci1jZG4tYnVpbHQtaW4tLWRpc2FibGVkJyApO1xuXHRcdH1cblxuXHRcdC8vIERpc2FibGUgcHVyZ2UgQ0ROIGNhY2hlIHNlY3Rpb24uXG5cdFx0Y29uc3QgcHVyZ2VTZWN0aW9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cHItY2RuLXB1cmdlLnJvY2tldGNkbicgKTtcblxuXHRcdGlmICggcHVyZ2VTZWN0aW9uICkge1xuXHRcdFx0cHVyZ2VTZWN0aW9uLmNsYXNzTGlzdC5hZGQoICd3cHItY2RuLWRpc2FibGVkJyApO1xuXHRcdH1cblxuXHRcdC8vIERpc2FibGUgZXhjbHVzaW9uIGZpZWxkcyBhbmQgc2VjdGlvbiBoZWFkZXIuXG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy53cHItY2RuLWV4Y2x1c2lvbnMnICkuZm9yRWFjaCggKCBlbCApID0+IHtcblx0XHRcdGVsLmNsYXNzTGlzdC5hZGQoICd3cHItY2RuLWRpc2FibGVkJyApO1xuXG5cdFx0XHRjb25zdCB0ZXh0YXJlYSA9IGVsLnF1ZXJ5U2VsZWN0b3IoICd0ZXh0YXJlYScgKTtcblxuXHRcdFx0aWYgKCB0ZXh0YXJlYSApIHtcblx0XHRcdFx0dGV4dGFyZWEuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjd3ByLW9wdGlvbnMtc3VibWl0JyApO1xuXHRcdGlmICggc3VibWl0QnV0dG9uICkge1xuXHRcdFx0c3VibWl0QnV0dG9uLmNsYXNzTGlzdC5hZGQoICd3cHItY2RuLWRpc2FibGVkJyApO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBwb2xsaW5nIG1lY2hhbmlzbSB0byBzZW5kIGEgcmVxdWVzdCBldmVyeSAxMCBzZWNvbmRzIHRvIGdldCB0aGUgc3Vic2NyaXB0aW9uIHN0YXR1cyBhbmQgb25jZSB0aGUgc3Vic2NyaXB0aW9uIGlzIGFjdGl2ZSwgd2Ugd2lsbCByZWZyZXNoIHRoZSBwYWdlIGZvciBub3cuXG5cdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3JvY2tldENETlN1YnNjcmlwdGlvbkxvYWRpbmcnLCB7fSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIENETiBkcml2ZXIgdGFiIHN3aXRjaGluZyBiZWhhdmlvci5cblx0ICpcblx0ICogVG9nZ2xlcyB2aXNpYmlsaXR5IG9mIENETiBkcml2ZXIgc2VjdGlvbnMgKGJ1aWx0LWluLWNkbiAvIHlvdXItb3duLWNkbilcblx0ICogYmFzZWQgb24gd2hpY2ggdGFiIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRmdW5jdGlvbiBpbml0Q2RuRHJpdmVyVGFicygpIHtcblx0XHRjb25zdCB0YWJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy53cHItY2RuLXRhYnNfX3RhYicgKTtcblx0XHRjb25zdCBkcml2ZXJTZWN0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcucm9ja2V0Y2RuLCAueW91ci1vd24tY2RuJyApO1xuXG5cdFx0aWYgKCAhIHRhYnMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFRvZ2dsZXMgdmlzaWJpbGl0eSBvZiBDRE4gZHJpdmVyIHNlY3Rpb25zIHVzaW5nIHRoZSBoaWRkZW4gdXRpbGl0eSBjbGFzcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBhY3RpdmVEcml2ZXIgQWN0aXZlIENETiBkcml2ZXIgc2x1Zy5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiB0b2dnbGVEcml2ZXJTZWN0aW9ucyggYWN0aXZlRHJpdmVyICkge1xuXHRcdFx0ZHJpdmVyU2VjdGlvbnMuZm9yRWFjaCggKCBzZWN0aW9uICkgPT4ge1xuXHRcdFx0XHRzZWN0aW9uLmNsYXNzTGlzdC50b2dnbGUoICd3cHItaXNIaWRkZW4nLCAhIHNlY3Rpb24uY2xhc3NMaXN0LmNvbnRhaW5zKCBhY3RpdmVEcml2ZXIgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFVwZGF0ZXMgYWxsIC5yb2NrZXRjZG4tZHJpdmVyLWpzIHNwYW5zIHRvIHJlZmxlY3QgdGhlIGFjdGl2ZSBkcml2ZXIgbGFiZWwuXG5cdFx0ICogVGhlIGxhYmVsIGlzIHJlYWQgZnJvbSB0aGUgYWN0aXZlIHRhYidzIGRhdGEtdGl0bGUgYXR0cmlidXRlLCBwcmVzZXJ2aW5nXG5cdFx0ICogdGhlIG9yaWdpbmFsIGNhcGl0YWxpc2F0aW9uIHNldCBieSB0aGUgUEhQIHRyYW5zbGF0aW9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gYWN0aXZlVGFiIFRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYiBlbGVtZW50LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHVwZGF0ZURyaXZlckxhYmVsKCBhY3RpdmVUYWIgKSB7XG5cdFx0XHRjb25zdCBsYWJlbCA9IGFjdGl2ZVRhYi5nZXRBdHRyaWJ1dGUoICdkYXRhLXRpdGxlJyApO1xuXG5cdFx0XHRpZiAoICEgbGFiZWwgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy5yb2NrZXRjZG4tZHJpdmVyLWpzJyApLmZvckVhY2goICggc3BhbiApID0+IHtcblx0XHRcdFx0Ly8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIHRleHQtdHJhbnNmb3JtICh1cHBlcmNhc2Ugc3BhbnMgc3RheSB1cHBlcmNhc2UgdmlhIENTUykuXG5cdFx0XHRcdHNwYW4udGV4dENvbnRlbnQgPSBsYWJlbDtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBVcGRhdGVzIHRoZSBcIk5lZWQgSGVscD9cIiBsaW5rIGhyZWYgZm9yIHRoZSBDRE4gRXhjbHVzaW9ucyBzZWN0aW9uXG5cdFx0ICogdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgZG9jcyBhcnRpY2xlIGZvciB0aGUgYWN0aXZlIGRyaXZlci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXIgQWN0aXZlIENETiBkcml2ZXIgc2x1ZyAoJ3JvY2tldGNkbicgb3IgJ3lvdXItb3duLWNkbicpLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHVwZGF0ZUV4Y2x1ZGVDZG5IZWxwVXJsKCBkcml2ZXIgKSB7XG5cdFx0XHRjb25zdCBsaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy5leGNsdWRlLWNkbi1oZWxwLWpzJyApO1xuXHRcdFx0aWYgKCAhIGxpbmsgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlzUm9ja2V0Q2RuID0gJ3JvY2tldGNkbicgPT09IGRyaXZlcjtcblx0XHRcdGNvbnN0IHVybCA9IGlzUm9ja2V0Q2RuID8gbGluay5kYXRhc2V0LnJvY2tldGNkblVybCA6IGxpbmsuZGF0YXNldC5vdGhlckNkblVybDtcblx0XHRcdGNvbnN0IGlkICA9IGlzUm9ja2V0Q2RuID8gbGluay5kYXRhc2V0LnJvY2tldGNkbklkICA6IGxpbmsuZGF0YXNldC5vdGhlckNkbklkO1xuXHRcdFx0aWYgKCB1cmwgKSB7XG5cdFx0XHRcdGxpbmsuaHJlZiA9IHVybDtcblx0XHRcdH1cblx0XHRcdGlmICggaWQgKSB7XG5cdFx0XHRcdGxpbmsuZGF0YXNldC5iZWFjb25JZCA9IGlkO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRhYnMuZm9yRWFjaCggKCB0YWIgKSA9PiB7XG5cdFx0XHR0YWIuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkcml2ZXIgPSB0YWIuZ2V0QXR0cmlidXRlKCAnZGF0YS1jZG4tZHJpdmVyJyApO1xuXG5cdFx0XHRcdGlmICggISBkcml2ZXIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVXBkYXRlIGFjdGl2ZSB0YWIuXG5cdFx0XHRcdHRhYnMuZm9yRWFjaCggKCB0ICkgPT4gdC5jbGFzc0xpc3QucmVtb3ZlKCAnd3ByLWNkbi10YWJzX190YWItLWFjdGl2ZScgKSApO1xuXHRcdFx0XHR0YWIuY2xhc3NMaXN0LmFkZCggJ3dwci1jZG4tdGFic19fdGFiLS1hY3RpdmUnICk7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIHNlY3Rpb25zOiBzaG93IG1hdGNoaW5nIGRyaXZlciwgaGlkZSBvdGhlcnMuXG5cdFx0XHRcdHRvZ2dsZURyaXZlclNlY3Rpb25zKCBkcml2ZXIgKTtcblxuXHRcdFx0XHQvLyBVcGRhdGUgZHluYW1pYyBkcml2ZXIgbGFiZWwgc3BhbnMuXG5cdFx0XHRcdHVwZGF0ZURyaXZlckxhYmVsKCB0YWIgKTtcblx0XHRcdFx0dXBkYXRlRXhjbHVkZUNkbkhlbHBVcmwoIGRyaXZlciApO1xuXHRcdFx0XHRub3RpZnlDZG5TdGF0ZUNoYW5nZSgpO1xuXG5cdFx0XHRcdC8vIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhpZGRlbiBpbnB1dCBpcyBzZXQgb24gcGFnZSBsb2FkIGJ5IFBIUCBiYXNlZCBvbiB0aGUgYWN0aXZlIGRyaXZlci5cblx0XHRcdFx0Y29uc3QgY2RuVHlwZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nkbl90eXBlJyk7XG5cdFx0XHRcdGxldCBjdXJyZW50VmFsdWUgPSBjZG5UeXBlSW5wdXQudmFsdWU7XG5cblx0XHRcdFx0Ly8gUGVyc2lzdCB0aGUgYWN0aXZlIGRyaXZlciBzZWxlY3Rpb24uXG5cdFx0XHRcdGNvbnN0IGRyaXZlclZhbHVlID0gJ3lvdXItb3duLWNkbicgPT09IGRyaXZlciA/ICdieW9jZG4nIDogJ3JvY2tldGNkbic7XG5cblx0XHRcdFx0d2luZG93LndwLmFwaUZldGNoKCB7XG5cdFx0XHRcdFx0cGF0aDogJy93cC1yb2NrZXQvdjEvcm9ja2V0Y2RuL2RyaXZlcicsXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXG5cdFx0XHRcdFx0ZGF0YTogeyBkcml2ZXI6IGRyaXZlclZhbHVlIH0sXG5cdFx0XHRcdH0gKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRcdC8vIFVwZGF0ZWQgaGlkZGVuIGlucHV0IHZhbHVlIG9uIHN1Y2Nlc3MuXG5cdFx0XHRcdFx0Y2RuVHlwZUlucHV0LnZhbHVlID0gZHJpdmVyVmFsdWU7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Ly8gVXBkYXRlIHRoZSBzdGF0ZSBvZiBSb2NrZXRDRE4gc3BlY2lmaWMgZWxlbWVudHMgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGRyaXZlciBhbmQgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxuXHRcdFx0XHRcdHVwZGF0ZVJvY2tldENETkVsZW1lbnRzU3RhdGUoIGRyaXZlclZhbHVlLCByZXNwb25zZS5kaXNhYmxlX3JvY2tldF9jZG5fZWxlbWVudHMgKTtcblx0XHRcdFx0fSApLmNhdGNoKCgpID0+IHtcblx0XHRcdFx0XHQvLyBSZXZlcnQgYWN0aXZlIHRhYiBhbmQgc2VjdGlvbnMgb24gZmFpbHVyZS5cblx0XHRcdFx0XHRjZG5UeXBlSW5wdXQudmFsdWUgPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cblx0XHQvLyBTZXQgaW5pdGlhbCBzdGF0ZSBmcm9tIGFjdGl2ZSB0YWIsIGZhbGxiYWNrIHRvIHJvY2tldGNkbi5cblx0XHRjb25zdCBhY3RpdmVUYWIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwci1jZG4tdGFic19fdGFiLS1hY3RpdmUnICk7XG5cdFx0Y29uc3QgYWN0aXZlRHJpdmVyID0gYWN0aXZlVGFiID8gYWN0aXZlVGFiLmdldEF0dHJpYnV0ZSggJ2RhdGEtY2RuLWRyaXZlcicgKSA6ICdyb2NrZXRjZG4nO1xuXG5cdFx0aWYgKCBhY3RpdmVEcml2ZXIgKSB7XG5cdFx0XHR0b2dnbGVEcml2ZXJTZWN0aW9ucyggYWN0aXZlRHJpdmVyICk7XG5cdFx0XHRub3RpZnlDZG5TdGF0ZUNoYW5nZSgpO1xuXHRcdH1cblxuXHRcdC8vIFNldCBpbml0aWFsIGxhYmVsIGZyb20gdGhlIGFjdGl2ZSB0YWIuXG5cdFx0aWYgKCBhY3RpdmVUYWIgKSB7XG5cdFx0XHR1cGRhdGVEcml2ZXJMYWJlbCggYWN0aXZlVGFiICk7XG5cdFx0XHR1cGRhdGVFeGNsdWRlQ2RuSGVscFVybCggYWN0aXZlRHJpdmVyICk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBDRE4gcGF1c2UvcmVzdW1lIHRvZ2dsZSBidXR0b25zLlxuXHQgKlxuXHQgKiBUb2dnbGVzIGJldHdlZW4gXCJQQVVTRSBDRE5cIiBhbmQgXCJSRVNVTUUgQ0ROXCIgc3RhdGVzLFxuXHQgKiBzd2FwcGluZyB0aGUgaWNvbiB2aWEgYSBDU1MgbW9kaWZpZXIgY2xhc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiBpbml0Q2RuUGF1c2VUb2dnbGUoKSB7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgKCBldmVudCApID0+IHtcblx0XHRcdGNvbnN0IGJ1dHRvbiA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCAnLndwci1jZG4tcGF1c2UnICk7XG5cdFx0XHRpZiAoICEgYnV0dG9uICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGlzUGF1c2VkID0gYnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoICd3cHItY2RuLXBhdXNlLS1wYXVzZWQnICk7XG5cdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCAnYXJpYS1wcmVzc2VkJywgaXNQYXVzZWQgPyAndHJ1ZScgOiAnZmFsc2UnICk7XG5cdFx0XHRidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBzdGF0dXNEb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLnJvY2tldGNkbiAud3ByLWNkbi1pbmRpY2F0b3JfX2RvdCcgKTtcblx0XHRcdGlmICggc3RhdHVzRG90ICkge1xuXHRcdFx0XHRzdGF0dXNEb3QuY2xhc3NOYW1lID0gJ3dwci1pY29uLW9yYW5nZS1sb2FkZXInO1xuXHRcdFx0fVxuXG5cdFx0XHR3aW5kb3cud3AuYXBpRmV0Y2goIHtcblx0XHRcdFx0cGF0aDogJy93cC1yb2NrZXQvdjEvcm9ja2V0Y2RuL3BhdXNlJyxcblx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXG5cdFx0XHRcdGRhdGE6IHsgcGF1c2VkOiBpc1BhdXNlZCA/IDAgOiAxIH0sXG5cdFx0XHR9ICkudGhlbiggKCkgPT4ge1xuXHRcdFx0XHQvLyBSZW1vdmUgdGhlIGxvYWRlci5cblx0XHRcdFx0aWYgKCBzdGF0dXNEb3QgKSB7XG5cdFx0XHRcdFx0c3RhdHVzRG90LmNsYXNzTmFtZSA9ICd3cHItY2RuLWluZGljYXRvcl9fZG90Jztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdC8vIFNpbXVsYXRlIHJlYWwgY2xpY2sgdG8gcHJlcGFyZSBjaGVja2JveCBzdGF0ZSBmb3IgZm9ybSBzdWJtaXNzaW9uLlxuXHRcdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsYWJlbFtmb3I9XCJjZG5cIl0nKS5jbGljaygpO1xuXG5cdFx0XHRcdHVwZGF0ZVJvY2tldENETkVsZW1lbnRzU3RhdGUoICdyb2NrZXRjZG4nLCBpc1BhdXNlZCApO1xuXG5cdFx0XHRcdGNvbnN0IHN0YXR1c0NvbnRhaW5lciA9IGJ1dHRvbi5jbG9zZXN0KCAnLndwci1jZG4tc3RhdHVzJyApO1xuXHRcdFx0XHRpZiAoICEgc3RhdHVzQ29udGFpbmVyICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXR1c0NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKCAnd3ByLWNkbi1zdGF0dXMtLXBhdXNlZCcsIGlzUGF1c2VkICk7XG5cdFx0XHRcdHN0YXR1c0NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFxuXHRcdFx0XHRcdCd3cHItY2RuLXN0YXR1cy0tbG9uZy1kZXRhaWxzJyxcblx0XHRcdFx0XHRpc1BhdXNlZCAmJiAnMScgPT09IHN0YXR1c0NvbnRhaW5lci5kYXRhc2V0LmxvbmdEZXRhaWxzXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgYnVpbHRJbiA9IHN0YXR1c0NvbnRhaW5lci5jbG9zZXN0KCAnLndwci1jZG4tYnVpbHQtaW4nICk7XG5cdFx0XHRcdGlmICggYnVpbHRJbiApIHtcblx0XHRcdFx0XHRidWlsdEluLmNsYXNzTGlzdC50b2dnbGUoICd3cHItY2RuLWJ1aWx0LWluLS1wYXVzZWQnLCBpc1BhdXNlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bm90aWZ5Q2RuU3RhdGVDaGFuZ2UoKTtcblxuXHRcdFx0XHRjb25zdCB0ZXh0S2V5ID0gaXNQYXVzZWQgPyAncGF1c2VkVGV4dCcgOiAnYWN0aXZlVGV4dCc7XG5cblx0XHRcdFx0Y29uc3Qgc3RhdHVzVGV4dCA9IHN0YXR1c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCAnLndwci1jZG4taW5kaWNhdG9yX190ZXh0JyApO1xuXG5cdFx0XHRcdGlmICggc3RhdHVzVGV4dCAmJiBzdGF0dXNDb250YWluZXIuZGF0YXNldFsgdGV4dEtleSBdICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQudGV4dENvbnRlbnQgPSBzdGF0dXNDb250YWluZXIuZGF0YXNldFsgdGV4dEtleSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZGV0YWlsc0tleSA9IGlzUGF1c2VkID8gJ3BhdXNlZERldGFpbHMnIDogJ2FjdGl2ZURldGFpbHMnO1xuXHRcdFx0XHRjb25zdCBkZXRhaWxzRWwgPSBzdGF0dXNDb250YWluZXIucXVlcnlTZWxlY3RvciggJy53cHItY2RuLWluZGljYXRvcl9fZGV0YWlscycgKTtcblxuXHRcdFx0XHRpZiAoIGRldGFpbHNFbCAmJiBzdGF0dXNDb250YWluZXIuZGF0YXNldFsgZGV0YWlsc0tleSBdICkge1xuXHRcdFx0XHRcdGRldGFpbHNFbC50ZXh0Q29udGVudCA9IHN0YXR1c0NvbnRhaW5lci5kYXRhc2V0WyBkZXRhaWxzS2V5IF07XG5cdFx0XHRcdH1cblx0XHRcdH0gKS5jYXRjaCggKCkgPT4ge1xuXHRcdFx0XHQvLyBSZXZlcnQgdG9nZ2xlIG9uIGZhaWx1cmUuXG5cdFx0XHRcdGJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCAnd3ByLWNkbi1wYXVzZS0tcGF1c2VkJywgISBpc1BhdXNlZCApO1xuXHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCAnYXJpYS1wcmVzc2VkJywgISBpc1BhdXNlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcblx0XHRcdFx0YnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBsb2FkZXIuXG5cdFx0XHRcdGlmICggc3RhdHVzRG90ICkge1xuXHRcdFx0XHRcdHN0YXR1c0RvdC5jbGFzc05hbWUgPSAnd3ByLWNkbi1pbmRpY2F0b3JfX2RvdCc7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBcIkFERCBIT01FUEFHRVwiIGJ1dHRvbi5cblx0ICpcblx0ICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gdGhlIFJvY2tldENETiBSRVNUIGVuZHBvaW50IHRvIGFkZFxuXHQgKiB0aGUgc2l0ZSBob21lcGFnZSBhcyBhIGZyZWUtdGllciBDRE4gcGFnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGluaXRBZGRIb21lcGFnZSgpIHtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoIGV2ZW50ICkgPT4ge1xuXHRcdFx0Y29uc3QgYnV0dG9uID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoICcjd3ByX2FkZF9wYWdlX2NvbXBvbmVudCAud3ByLWNkbi1hZGQtcGFnZV9faG9tZXBhZ2UnICk7XG5cdFx0XHRpZiAoICEgYnV0dG9uICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IGJ1aWx0SW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwci1jZG4tYnVpbHQtaW4nICk7XG5cblx0XHRcdGlmICggYnVpbHRJbiApIHtcblx0XHRcdFx0YnVpbHRJbi5jbGFzc0xpc3QuYWRkKCAnd3ByLWNkbi1idWlsdC1pbi0tZGlzYWJsZWQnICk7XG5cdFx0XHR9XG5cblx0XHRcdHdpbmRvdy53cC5hcGlGZXRjaCgge1xuXHRcdFx0XHRwYXRoOiAnL3dwLXJvY2tldC92MS9yb2NrZXRjZG4vcGFnZXMvaG9tZXBhZ2UnLFxuXHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdH0gKS50aGVuKCAoIHJlc3BvbnNlICkgPT4ge1xuXHRcdFx0XHRidXR0b24uY2xhc3NMaXN0LmFkZCggJ3dwci1pc0hpZGRlbicgKTtcblx0XHRcdFx0dXBkYXRlUm9ja2V0Q3RhU3RhdGUoIHJlc3BvbnNlLmNvdW50LCByZXNwb25zZS5saW1pdCApO1xuXG5cdFx0XHRcdGlmICggYnVpbHRJbiApIHtcblx0XHRcdFx0XHRidWlsdEluLmNsYXNzTGlzdC5yZW1vdmUoICd3cHItY2RuLWJ1aWx0LWluLS1kaXNhYmxlZCcgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggcmVzcG9uc2UuaXRlbXNfaHRtbCApIHtcblx0XHRcdFx0XHRjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1idWlsdC1pbiAud3ByLXRhYmxlLWxpc3QnICk7XG5cblx0XHRcdFx0XHRpZiAoIGV4aXN0aW5nICkge1xuXHRcdFx0XHRcdFx0ZXhpc3RpbmcucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgYWRkUGFnZVNlY3Rpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwci1jZG4tYWRkLXBhZ2UnICk7XG5cblx0XHRcdFx0XHRpZiAoIGFkZFBhZ2VTZWN0aW9uICkge1xuXHRcdFx0XHRcdFx0YWRkUGFnZVNlY3Rpb24uaW5zZXJ0QWRqYWNlbnRIVE1MKCAnYmVmb3JlYmVnaW4nLCByZXNwb25zZS5pdGVtc19odG1sICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgYmFubmVyIHZpZXcgd2hlbiBmaXJzdCBwYWdlIGlzIGFkZGVkIGFuZCBiYW5uZXIgYmVjb21lcyB2aXNpYmxlLlxuXHRcdFx0XHRpZiAoIDEgPT09IHJlc3BvbnNlLmNvdW50ICkge1xuXHRcdFx0XHRcdGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3JvY2tldENETkJhbm5lckZpcnN0VmlzaWJsZScgKSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IHN1YnNjcmlwdGlvbiBsb2FkaW5nIHN0YXRlIHdoZW4gZmlyc3QgcGFnZSBpcyBhZGRlZC5cblx0XHRcdFx0aWYgKCByZXNwb25zZS5pc19zdWJzY3JpcHRpb25fY3JlYXRpb25fbG9hZGluZyApIHtcblx0XHRcdFx0XHRzZXRTdWJzY3JpcHRpb25Mb2FkaW5nU3RhdGUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVwZGF0ZSBzdGF0dXMgaW5kaWNhdG9yIGNvbXBvbmVudC5cblx0XHRcdFx0dXBkYXRlU3RhdHVzSW5kaWNhdG9yQ29tcG9uZW50KCByZXNwb25zZS5zdGF0dXNfaW5kaWNhdG9yX2h0bWwgKTtcblx0XHRcdH0gKS5jYXRjaCggKCkgPT4ge1xuXHRcdFx0XHRidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoIGJ1aWx0SW4gKSB7XG5cdFx0XHRcdFx0YnVpbHRJbi5jbGFzc0xpc3QucmVtb3ZlKCAnd3ByLWNkbi1idWlsdC1pbi0tZGlzYWJsZWQnICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBcIkFERCBQQUdFXCIgaW5wdXQgYW5kIGJ1dHRvbi5cblx0ICpcblx0ICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gdGhlIFJvY2tldENETiBSRVNUIGVuZHBvaW50IHRvIGFkZFxuXHQgKiBhIHBhZ2UgVVJMIHRvIHRoZSBmcmVlLXRpZXIgQ0ROIHBhZ2UgbGlzdC5cblx0ICovXG5cdGZ1bmN0aW9uIGluaXRBZGRQYWdlKCkge1xuXHRcdGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cHJfY2RuX2FkZF9wYWdlX2lucHV0JyApO1xuXHRcdGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1hZGQtcGFnZV9fYnV0dG9uJyApO1xuXG5cdFx0aWYgKCAhIGlucHV0IHx8ICEgYnV0dG9uICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGlzVmFsaWRVcmwoaW5wdXQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXQpO1xuXHRcdFx0XHRyZXR1cm4gdXJsLmhvc3RuYW1lLmluY2x1ZGVzKCcuJykgJiYgdXJsLmhvc3RuYW1lLnNwbGl0KCcuJykucG9wKCkubGVuZ3RoID4gMDtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc3VibWl0UGFnZSgpIHtcblx0XHRcdGNvbnN0IHVybCA9IGlucHV0LnZhbHVlLnRyaW0oKTtcblxuXHRcdFx0aWYgKCFpc1ZhbGlkVXJsKHVybCkpIHtcblx0XHRcdFx0YWxlcnQoJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFVSTCcpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFByZXZlbnQgZHVwbGljYXRlIHJlcXVlc3Qgd2hpbGUgcmVxdWVzdCBpcyBpbiBmbGlnaHQuXG5cdFx0XHRpbnB1dC5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0Y29uc3QgYnVpbHRJbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1idWlsdC1pbicgKTtcblxuXHRcdFx0aWYgKCBidWlsdEluICkge1xuXHRcdFx0XHRidWlsdEluLmNsYXNzTGlzdC5hZGQoICd3cHItY2RuLWJ1aWx0LWluLS1kaXNhYmxlZCcgKTtcblx0XHRcdH1cblxuXHRcdFx0d2luZG93LndwLmFwaUZldGNoKCB7XG5cdFx0XHRcdHBhdGg6ICcvd3Atcm9ja2V0L3YxL3JvY2tldGNkbi9wYWdlcycsXG5cdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0XHRkYXRhOiB7IHVybCB9LFxuXHRcdFx0fSApLnRoZW4oICggcmVzcG9uc2UgKSA9PiB7XG5cdFx0XHRcdGlucHV0LnZhbHVlID0gJyc7XG5cdFx0XHRcdGlucHV0LmRpc2FibGVkID0gZmFsc2U7XG5cdFx0XHRcdGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRhZGRIb21lQnV0dG9uLmNsYXNzTGlzdC5hZGQoICd3cHItaXNIaWRkZW4nICk7XG5cdFx0XHRcdHVwZGF0ZVJvY2tldEN0YVN0YXRlKCByZXNwb25zZS5jb3VudCwgcmVzcG9uc2UubGltaXQgKTtcblxuXHRcdFx0XHRpZiAoIGJ1aWx0SW4gKSB7XG5cdFx0XHRcdFx0YnVpbHRJbi5jbGFzc0xpc3QucmVtb3ZlKCAnd3ByLWNkbi1idWlsdC1pbi0tZGlzYWJsZWQnICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBVcGRhdGUgcGFnZSBsaXN0IHdpdGggcmVzcG9uc2UuXG5cdFx0XHRcdGlmICggcmVzcG9uc2UuaXRlbXNfaHRtbCApIHtcblx0XHRcdFx0XHRjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1idWlsdC1pbiAud3ByLXRhYmxlLWxpc3QnICk7XG5cblx0XHRcdFx0XHRpZiAoIGV4aXN0aW5nICkge1xuXHRcdFx0XHRcdFx0ZXhpc3RpbmcucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgYWRkUGFnZVNlY3Rpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwci1jZG4tYWRkLXBhZ2UnICk7XG5cblx0XHRcdFx0XHRpZiAoIGFkZFBhZ2VTZWN0aW9uICkge1xuXHRcdFx0XHRcdFx0YWRkUGFnZVNlY3Rpb24uaW5zZXJ0QWRqYWNlbnRIVE1MKCAnYmVmb3JlYmVnaW4nLCByZXNwb25zZS5pdGVtc19odG1sICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgYmFubmVyIHZpZXcgd2hlbiBmaXJzdCBwYWdlIGlzIGFkZGVkIGFuZCBiYW5uZXIgYmVjb21lcyB2aXNpYmxlLlxuXHRcdFx0XHRpZiAoIDEgPT09IHJlc3BvbnNlLmNvdW50ICkge1xuXHRcdFx0XHRcdGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3JvY2tldENETkJhbm5lckZpcnN0VmlzaWJsZScgKSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCByZXNwb25zZS5saW1pdCA9PT0gcmVzcG9uc2UuY291bnQgKSB7XG5cdFx0XHRcdFx0Ly8gRGlzYWJsZSBpbnB1dCBhbmQgYnV0dG9uIHdoZW4gcGFnZSBsaW1pdCBpcyByZWFjaGVkLlxuXHRcdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1idWlsdC1pbicgKS5jbGFzc0xpc3QuYWRkKCAnd3ByLWNkbi1idWlsdC1pbi0tZGlzYWJsZWQnICk7XG5cdFx0XHRcdFx0Y29uc3QgYWRkUGFnZVdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwci1jZG4tYWRkLXBhZ2VfX2J1dHRvbi13cmFwcGVyJyApO1xuXHRcdFx0XHRcdGlmICggYWRkUGFnZVdyYXBwZXIgKSB7XG5cdFx0XHRcdFx0XHRhZGRQYWdlV3JhcHBlci5jbGFzc0xpc3QuYWRkKCAnd3ByLWJ0bi13aXRoLXRvb2wtdGlwJyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBhZGRQYWdlQnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cHItY2RuLWFkZC1wYWdlX19idXR0b24nICk7XG5cdFx0XHRcdFx0aWYgKCBhZGRQYWdlQnRuICkge1xuXHRcdFx0XHRcdFx0YWRkUGFnZUJ0bi5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHVwZGF0ZVRvb2x0aXBTdGF0ZSggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IHN1YnNjcmlwdGlvbiBsb2FkaW5nIHN0YXRlIHdoZW4gZmlyc3QgcGFnZSBpcyBhZGRlZC5cblx0XHRcdFx0aWYgKCByZXNwb25zZS5pc19zdWJzY3JpcHRpb25fY3JlYXRpb25fbG9hZGluZyApIHtcblx0XHRcdFx0XHRzZXRTdWJzY3JpcHRpb25Mb2FkaW5nU3RhdGUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVwZGF0ZSBzdGF0dXMgaW5kaWNhdG9yIGNvbXBvbmVudC5cblx0XHRcdFx0dXBkYXRlU3RhdHVzSW5kaWNhdG9yQ29tcG9uZW50KCByZXNwb25zZS5zdGF0dXNfaW5kaWNhdG9yX2h0bWwgKTtcblx0XHRcdH0gKS5jYXRjaCggKCkgPT4ge1xuXHRcdFx0XHRpbnB1dC5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoIGJ1aWx0SW4gKSB7XG5cdFx0XHRcdFx0YnVpbHRJbi5jbGFzc0xpc3QucmVtb3ZlKCAnd3ByLWNkbi1idWlsdC1pbi0tZGlzYWJsZWQnICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgc3VibWl0UGFnZSApO1xuXG5cdFx0aW5wdXQuYWRkRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCAoIGUgKSA9PiB7XG5cdFx0XHRpZiAoICdFbnRlcicgPT09IGUua2V5ICkge1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHN1Ym1pdFBhZ2UoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgZGVsZXRlIGJ1dHRvbnMgZm9yIENETiBwYWdlIHJvd3MuXG5cdCAqXG5cdCAqIFVzZXMgZXZlbnQgZGVsZWdhdGlvbiBvbiB0aGUgYnVpbHQtaW4gQ0ROIGNvbnRhaW5lciB0byBoYW5kbGVcblx0ICogY2xpY2tzIG9uIGR5bmFtaWNhbGx5IGFkZGVkIGRlbGV0ZSBidXR0b25zLlxuXHQgKi9cblx0ZnVuY3Rpb24gaW5pdERlbGV0ZVBhZ2UoKSB7XG5cdFx0Y29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJyN3cHJfYWRkX3BhZ2VfY29tcG9uZW50JyApO1xuXG5cdFx0aWYgKCAhIGNvbnRhaW5lciApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIucGFyZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoIGUgKSA9PiB7XG5cdFx0XHRjb25zdCBidXR0b24gPSBlLnRhcmdldC5jbG9zZXN0KCAnLndwci10YWJsZS1saXN0X19kZWxldGUnICk7XG5cblx0XHRcdGlmICggISBidXR0b24gKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgaWQgPSBidXR0b24uZGF0YXNldC5pZDtcblxuXHRcdFx0aWYgKCAhIGlkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG5cblx0XHRcdHdpbmRvdy53cC5hcGlGZXRjaCgge1xuXHRcdFx0XHRwYXRoOiBgL3dwLXJvY2tldC92MS9yb2NrZXRjZG4vcGFnZXMvJHsgaWQgfWAsXG5cdFx0XHRcdG1ldGhvZDogJ0RFTEVURScsXG5cdFx0XHR9ICkudGhlbiggKCByZXNwb25zZSApID0+IHtcblx0XHRcdFx0dXBkYXRlUm9ja2V0Q3RhU3RhdGUoIHJlc3BvbnNlLmNvdW50LCByZXNwb25zZS5saW1pdCApO1xuXG5cdFx0XHRcdGlmICggcmVzcG9uc2UuaXRlbXNfaHRtbCApIHtcblx0XHRcdFx0XHRjb25zdCBleGlzdGluZyA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1idWlsdC1pbiAud3ByLXRhYmxlLWxpc3QnICk7XG5cblx0XHRcdFx0XHRpZiAoIGV4aXN0aW5nICkge1xuXHRcdFx0XHRcdFx0ZXhpc3RpbmcucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgYWRkUGFnZVNlY3Rpb24gPSBjb250YWluZXIucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCAnLndwci1jZG4tYWRkLXBhZ2UnICk7XG5cblx0XHRcdFx0XHRpZiAoIGFkZFBhZ2VTZWN0aW9uICkge1xuXHRcdFx0XHRcdFx0YWRkUGFnZVNlY3Rpb24uaW5zZXJ0QWRqYWNlbnRIVE1MKCAnYmVmb3JlYmVnaW4nLCByZXNwb25zZS5pdGVtc19odG1sICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2hvdyByZS1hZGQgSE9NRVBBR0UgYnV0dG9uIHdoZW4gYWxsIHBhZ2VzIGFyZSBkZWxldGVkLlxuXHRcdFx0XHRpZiAoIDAgPT09IHJlc3BvbnNlLmNvdW50ICkge1xuXHRcdFx0XHRcdC8vIFJlbW92ZSB0YWJsZSBsaXN0IGNvbXBvbmVudC5cblx0XHRcdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwci1jZG4tYnVpbHQtaW4gLndwci10YWJsZS1saXN0JyApLnJlbW92ZSgpO1xuXG5cdFx0XHRcdFx0Y29uc3QgaG9tZXBhZ2VCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvciggJy53cHItY2RuLWFkZC1wYWdlX19ob21lcGFnZScgKTtcblxuXHRcdFx0XHRcdGlmICggaG9tZXBhZ2VCdG4gKSB7XG5cdFx0XHRcdFx0XHRob21lcGFnZUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCAnd3ByLWlzSGlkZGVuJyApO1xuXHRcdFx0XHRcdFx0aG9tZXBhZ2VCdG4uZGlzYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHJlc3BvbnNlLmxpbWl0ID4gcmVzcG9uc2UuY291bnQgKSB7XG5cdFx0XHRcdFx0Ly8gUmUtZW5hYmxlIGlucHV0IGFuZCBidXR0b24gd2hlbiBwYWdlIGxpbWl0IGlzIG5vdCByZWFjaGVkLlxuXHRcdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1idWlsdC1pbicgKS5jbGFzc0xpc3QucmVtb3ZlKCAnd3ByLWNkbi1idWlsdC1pbi0tZGlzYWJsZWQnICk7XG5cdFx0XHRcdFx0Y29uc3QgYWRkUGFnZVdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwci1jZG4tYWRkLXBhZ2VfX2J1dHRvbi13cmFwcGVyJyApO1xuXHRcdFx0XHRcdGlmICggYWRkUGFnZVdyYXBwZXIgKSB7XG5cdFx0XHRcdFx0XHRhZGRQYWdlV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCAnd3ByLWJ0bi13aXRoLXRvb2wtdGlwJyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBhZGRQYWdlQnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cHItY2RuLWFkZC1wYWdlX19idXR0b24nICk7XG5cdFx0XHRcdFx0aWYgKCBhZGRQYWdlQnRuICkge1xuXHRcdFx0XHRcdFx0YWRkUGFnZUJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR1cGRhdGVUb29sdGlwU3RhdGUoIGZhbHNlICk7XG5cblx0XHRcdFx0XHQvLyBUcmFjayBhdXRvLWNvbGxhcHNlIHdoZW4gZGVsZXRpb24gZHJvcHMgY291bnQganVzdCBiZWxvdyB0aGUgbGltaXQuXG5cdFx0XHRcdFx0aWYgKCByZXNwb25zZS5jb3VudCA9PT0gcmVzcG9uc2UubGltaXQgLSAxICkge1xuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAncm9ja2V0Q0ROQmFubmVyQXV0b0NvbGxhcHNlZCcgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVwZGF0ZSBzdGF0dXMgaW5kaWNhdG9yIGNvbXBvbmVudC5cblx0XHRcdFx0dXBkYXRlU3RhdHVzSW5kaWNhdG9yQ29tcG9uZW50KCByZXNwb25zZS5zdGF0dXNfaW5kaWNhdG9yX2h0bWwgKTtcblxuXHRcdFx0fSApLmNhdGNoKCAoKSA9PiB7XG5cdFx0XHRcdGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxufSApKCBkb2N1bWVudCApO1xuIiwiZnVuY3Rpb24gZ2V0VGltZVJlbWFpbmluZyhlbmR0aW1lKXtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdG90YWwgPSAoZW5kdGltZSAqIDEwMDApIC0gc3RhcnQ7XG4gICAgY29uc3Qgc2Vjb25kcyA9IE1hdGguZmxvb3IoICh0b3RhbC8xMDAwKSAlIDYwICk7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoICh0b3RhbC8xMDAwLzYwKSAlIDYwICk7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKCAodG90YWwvKDEwMDAqNjAqNjApKSAlIDI0ICk7XG4gICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IoIHRvdGFsLygxMDAwKjYwKjYwKjI0KSApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWwsXG4gICAgICAgIGRheXMsXG4gICAgICAgIGhvdXJzLFxuICAgICAgICBtaW51dGVzLFxuICAgICAgICBzZWNvbmRzXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZUNsb2NrKGlkLCBlbmR0aW1lKSB7XG4gICAgY29uc3QgY2xvY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgICBpZiAoY2xvY2sgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRheXNTcGFuID0gY2xvY2sucXVlcnlTZWxlY3RvcignLnJvY2tldC1jb3VudGRvd24tZGF5cycpO1xuICAgIGNvbnN0IGhvdXJzU3BhbiA9IGNsb2NrLnF1ZXJ5U2VsZWN0b3IoJy5yb2NrZXQtY291bnRkb3duLWhvdXJzJyk7XG4gICAgY29uc3QgbWludXRlc1NwYW4gPSBjbG9jay5xdWVyeVNlbGVjdG9yKCcucm9ja2V0LWNvdW50ZG93bi1taW51dGVzJyk7XG4gICAgY29uc3Qgc2Vjb25kc1NwYW4gPSBjbG9jay5xdWVyeVNlbGVjdG9yKCcucm9ja2V0LWNvdW50ZG93bi1zZWNvbmRzJyk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVDbG9jaygpIHtcbiAgICAgICAgY29uc3QgdCA9IGdldFRpbWVSZW1haW5pbmcoZW5kdGltZSk7XG5cbiAgICAgICAgaWYgKHQudG90YWwgPCAwKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVpbnRlcnZhbCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRheXNTcGFuLmlubmVySFRNTCA9IHQuZGF5cztcbiAgICAgICAgaG91cnNTcGFuLmlubmVySFRNTCA9ICgnMCcgKyB0LmhvdXJzKS5zbGljZSgtMik7XG4gICAgICAgIG1pbnV0ZXNTcGFuLmlubmVySFRNTCA9ICgnMCcgKyB0Lm1pbnV0ZXMpLnNsaWNlKC0yKTtcbiAgICAgICAgc2Vjb25kc1NwYW4uaW5uZXJIVE1MID0gKCcwJyArIHQuc2Vjb25kcykuc2xpY2UoLTIpO1xuICAgIH1cblxuICAgIHVwZGF0ZUNsb2NrKCk7XG4gICAgY29uc3QgdGltZWludGVydmFsID0gc2V0SW50ZXJ2YWwodXBkYXRlQ2xvY2ssIDEwMDApO1xufVxuXG5mdW5jdGlvbiBydWNzc1RpbWVyKGlkLCBlbmR0aW1lKSB7XG5cdGNvbnN0IHRpbWVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRjb25zdCBub3RpY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9ja2V0LW5vdGljZS1zYWFzLXByb2Nlc3NpbmcnKTtcblx0Y29uc3Qgc3VjY2VzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb2NrZXQtbm90aWNlLXNhYXMtc3VjY2VzcycpO1xuXG5cdGlmICh0aW1lciA9PT0gbnVsbCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZVRpbWVyKCkge1xuXHRcdGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCByZW1haW5pbmcgPSBNYXRoLmZsb29yKCAoIChlbmR0aW1lICogMTAwMCkgLSBzdGFydCApIC8gMTAwMCApO1xuXG5cdFx0aWYgKHJlbWFpbmluZyA8PSAwKSB7XG5cdFx0XHRjbGVhckludGVydmFsKHRpbWVySW50ZXJ2YWwpO1xuXG5cdFx0XHRpZiAobm90aWNlICE9PSBudWxsKSB7XG5cdFx0XHRcdG5vdGljZS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN1Y2Nlc3MgIT09IG51bGwpIHtcblx0XHRcdFx0c3VjY2Vzcy5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCByb2NrZXRfYWpheF9kYXRhLmNyb25fZGlzYWJsZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG5cdFx0XHRkYXRhLmFwcGVuZCggJ2FjdGlvbicsICdyb2NrZXRfc3Bhd25fY3JvbicgKTtcblx0XHRcdGRhdGEuYXBwZW5kKCAnbm9uY2UnLCByb2NrZXRfYWpheF9kYXRhLm5vbmNlICk7XG5cblx0XHRcdGZldGNoKCBhamF4dXJsLCB7XG5cdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0XHRjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcblx0XHRcdFx0Ym9keTogZGF0YVxuXHRcdFx0fSApO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGltZXIuaW5uZXJIVE1MID0gcmVtYWluaW5nO1xuXHR9XG5cblx0dXBkYXRlVGltZXIoKTtcblx0Y29uc3QgdGltZXJJbnRlcnZhbCA9IHNldEludGVydmFsKCB1cGRhdGVUaW1lciwgMTAwMCk7XG59XG5cbmlmICghRGF0ZS5ub3cpIHtcbiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG5pZiAodHlwZW9mIHJvY2tldF9hamF4X2RhdGEucHJvbW9fZW5kICE9PSAndW5kZWZpbmVkJykge1xuICAgIGluaXRpYWxpemVDbG9jaygncm9ja2V0LXByb21vLWNvdW50ZG93bicsIHJvY2tldF9hamF4X2RhdGEucHJvbW9fZW5kKTtcbn1cblxuaWYgKHR5cGVvZiByb2NrZXRfYWpheF9kYXRhLmxpY2Vuc2VfZXhwaXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpbml0aWFsaXplQ2xvY2soJ3JvY2tldC1yZW5ldy1jb3VudGRvd24nLCByb2NrZXRfYWpheF9kYXRhLmxpY2Vuc2VfZXhwaXJhdGlvbik7XG59XG5cbmlmICh0eXBlb2Ygcm9ja2V0X2FqYXhfZGF0YS5ub3RpY2VfZW5kX3RpbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcnVjc3NUaW1lcigncm9ja2V0LXJ1Y3NzLXRpbWVyJywgcm9ja2V0X2FqYXhfZGF0YS5ub3RpY2VfZW5kX3RpbWUpO1xufSIsImltcG9ydCAnLi4vY3VzdG9tL2N1c3RvbS1zZWxlY3QuanMnO1xuXG52YXIgJCA9IGpRdWVyeTtcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XG5cblxuICAgIC8qKipcbiAgICAqIENoZWNrIHBhcmVudCAvIHNob3cgY2hpbGRyZW5cbiAgICAqKiovXG5cblx0ZnVuY3Rpb24gd3ByU2hvd0NoaWxkcmVuKGFFbGVtKXtcblx0XHR2YXIgcGFyZW50SWQsICRjaGlsZHJlbjtcblxuXHRcdGFFbGVtICAgICA9ICQoIGFFbGVtICk7XG5cdFx0cGFyZW50SWQgID0gYUVsZW0uYXR0cignaWQnKTtcblx0XHQkY2hpbGRyZW4gPSAkKCdbZGF0YS1wYXJlbnQ9XCInICsgcGFyZW50SWQgKyAnXCJdJyk7XG5cblx0XHQvLyBUZXN0IGNoZWNrIGZvciBzd2l0Y2hcblx0XHRpZihhRWxlbS5pcygnOmNoZWNrZWQnKSl7XG5cdFx0XHQkY2hpbGRyZW4uYWRkQ2xhc3MoJ3dwci1pc09wZW4nKTtcblxuXHRcdFx0JGNoaWxkcmVuLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggJCh0aGlzKS5maW5kKCdpbnB1dFt0eXBlPWNoZWNrYm94XScpLmlzKCc6Y2hlY2tlZCcpKSB7XG5cdFx0XHRcdFx0dmFyIGlkID0gJCh0aGlzKS5maW5kKCdpbnB1dFt0eXBlPWNoZWNrYm94XScpLmF0dHIoJ2lkJyk7XG5cblx0XHRcdFx0XHQkKCdbZGF0YS1wYXJlbnQ9XCInICsgaWQgKyAnXCJdJykuYWRkQ2xhc3MoJ3dwci1pc09wZW4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHQkY2hpbGRyZW4ucmVtb3ZlQ2xhc3MoJ3dwci1pc09wZW4nKTtcblxuXHRcdFx0JGNoaWxkcmVuLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBpZCA9ICQodGhpcykuZmluZCgnaW5wdXRbdHlwZT1jaGVja2JveF0nKS5hdHRyKCdpZCcpO1xuXG5cdFx0XHRcdCQoJ1tkYXRhLXBhcmVudD1cIicgKyBpZCArICdcIl0nKS5yZW1vdmVDbGFzcygnd3ByLWlzT3BlbicpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cbiAgICAvKipcbiAgICAgKiBUZWxsIGlmIHRoZSBnaXZlbiBjaGlsZCBmaWVsZCBoYXMgYW4gYWN0aXZlIHBhcmVudCBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAgb2JqZWN0ICRmaWVsZCBBIGpRdWVyeSBvYmplY3Qgb2YgYSBcIi53cHItZmllbGRcIiBmaWVsZC5cbiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdwcklzUGFyZW50QWN0aXZlKCAkZmllbGQgKSB7XG4gICAgICAgIHZhciAkcGFyZW50O1xuXG4gICAgICAgIGlmICggISAkZmllbGQubGVuZ3RoICkge1xuICAgICAgICAgICAgLy8gwq9cXF8o44OEKV8vwq9cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgJHBhcmVudCA9ICRmaWVsZC5kYXRhKCAncGFyZW50JyApO1xuXG4gICAgICAgIGlmICggdHlwZW9mICRwYXJlbnQgIT09ICdzdHJpbmcnICkge1xuICAgICAgICAgICAgLy8gVGhpcyBmaWVsZCBoYXMgbm8gcGFyZW50IGZpZWxkOiB0aGVuIHdlIGNhbiBkaXNwbGF5IGl0LlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAkcGFyZW50ID0gJHBhcmVudC5yZXBsYWNlKCAvXlxccyt8XFxzKyQvZywgJycgKTtcblxuICAgICAgICBpZiAoICcnID09PSAkcGFyZW50ICkge1xuICAgICAgICAgICAgLy8gVGhpcyBmaWVsZCBoYXMgbm8gcGFyZW50IGZpZWxkOiB0aGVuIHdlIGNhbiBkaXNwbGF5IGl0LlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAkcGFyZW50ID0gJCggJyMnICsgJHBhcmVudCApO1xuXG4gICAgICAgIGlmICggISAkcGFyZW50Lmxlbmd0aCApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgZmllbGQncyBwYXJlbnQgaXMgbWlzc2luZzogbGV0J3MgY29uc2lkZXIgaXQncyBub3QgYWN0aXZlIHRoZW4uXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoICEgJHBhcmVudC5pcyggJzpjaGVja2VkJyApICYmICRwYXJlbnQuaXMoJ2lucHV0JykpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgZmllbGQncyBwYXJlbnQgaXMgY2hlY2tib3ggYW5kIG5vdCBjaGVja2VkOiBkb24ndCBkaXNwbGF5IHRoZSBmaWVsZCB0aGVuLlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cblx0XHRpZiAoICEkcGFyZW50Lmhhc0NsYXNzKCdyYWRpby1hY3RpdmUnKSAmJiAkcGFyZW50LmlzKCdidXR0b24nKSkge1xuXHRcdFx0Ly8gVGhpcyBmaWVsZCdzIHBhcmVudCBidXR0b24gYW5kIGlzIG5vdCBhY3RpdmU6IGRvbid0IGRpc3BsYXkgdGhlIGZpZWxkIHRoZW4uXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuICAgICAgICAvLyBHbyByZWN1cnNpdmUgdG8gdGhlIGxhc3QgcGFyZW50LlxuICAgICAgICByZXR1cm4gd3BySXNQYXJlbnRBY3RpdmUoICRwYXJlbnQuY2xvc2VzdCggJy53cHItZmllbGQnICkgKTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIE1hc2tzIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBpbiBhbiBpbnB1dCBmaWVsZCBieSByZXBsYWNpbmcgYWxsIGJ1dCB0aGUgbGFzdCA0IGNoYXJhY3RlcnMgd2l0aCBhc3Rlcmlza3MuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZF9zZWxlY3RvciAtIFRoZSBJRCBvZiB0aGUgaW5wdXQgZmllbGQgdG8gYmUgbWFza2VkLlxuXHQgKiBAcmV0dXJucyB7dm9pZH0gLSBNb2RpZmllcyB0aGUgaW5wdXQgZmllbGQgdmFsdWUgaW4tcGxhY2UuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIC8vIEhUTUw6IDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiY3JlZGl0Q2FyZElucHV0XCIgdmFsdWU9XCIxMjM0NTY3ODkwMTIzNDU2XCI+XG5cdCAqIG1hc2tGaWVsZCgnY3JlZGl0Q2FyZElucHV0Jyk7XG5cdCAqIC8vIFJlc3VsdDogVXBkYXRlcyB0aGUgaW5wdXQgZmllbGQgdmFsdWUgdG8gJyoqKioqKioqKioqKjM0NTYnLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFza0ZpZWxkKHByb3h5X3NlbGVjdG9yLCBjb25jcmV0ZV9zZWxlY3Rvcikge1xuXHRcdHZhciBjb25jcmV0ZSA9IHtcblx0XHRcdCd2YWwnOiBjb25jcmV0ZV9zZWxlY3Rvci52YWwoKSxcblx0XHRcdCdsZW5ndGgnOiBjb25jcmV0ZV9zZWxlY3Rvci52YWwoKS5sZW5ndGhcblx0XHR9XG5cblx0XHRpZiAoY29uY3JldGUubGVuZ3RoID4gNCkge1xuXG5cdFx0XHR2YXIgaGlkZGVuUGFydCA9ICdcXHUyMDIyJy5yZXBlYXQoTWF0aC5tYXgoMCwgY29uY3JldGUubGVuZ3RoIC0gNCkpO1xuXHRcdFx0dmFyIHZpc2libGVQYXJ0ID0gY29uY3JldGUudmFsLnNsaWNlKC00KTtcblxuXHRcdFx0Ly8gQ29tYmluZSB0aGUgaGlkZGVuIGFuZCB2aXNpYmxlIHBhcnRzXG5cdFx0XHR2YXIgbWFza2VkVmFsdWUgPSBoaWRkZW5QYXJ0ICsgdmlzaWJsZVBhcnQ7XG5cblx0XHRcdHByb3h5X3NlbGVjdG9yLnZhbChtYXNrZWRWYWx1ZSk7XG5cdFx0fVxuXHRcdC8vIEVuc3VyZSBldmVudHMgYXJlIG5vdCBhZGRlZCBtb3JlIHRoYW4gb25jZVxuXHRcdGlmICghcHJveHlfc2VsZWN0b3IuZGF0YSgnZXZlbnRzQXR0YWNoZWQnKSkge1xuXHRcdFx0cHJveHlfc2VsZWN0b3Iub24oJ2lucHV0JywgaGFuZGxlSW5wdXQpO1xuXHRcdFx0cHJveHlfc2VsZWN0b3Iub24oJ2ZvY3VzJywgaGFuZGxlRm9jdXMpO1xuXHRcdFx0cHJveHlfc2VsZWN0b3IuZGF0YSgnZXZlbnRzQXR0YWNoZWQnLCB0cnVlKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBIYW5kbGUgdGhlIGlucHV0IGV2ZW50XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gaGFuZGxlSW5wdXQoKSB7XG5cdFx0XHR2YXIgcHJveHlWYWx1ZSA9IHByb3h5X3NlbGVjdG9yLnZhbCgpO1xuXHRcdFx0aWYgKHByb3h5VmFsdWUuaW5kZXhPZignXFx1MjAyMicpID09PSAtMSkge1xuXHRcdFx0XHRjb25jcmV0ZV9zZWxlY3Rvci52YWwocHJveHlWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogSGFuZGxlIHRoZSBmb2N1cyBldmVudFxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuXHRcdFx0dmFyIGNvbmNyZXRlX3ZhbHVlID0gY29uY3JldGVfc2VsZWN0b3IudmFsKCk7XG5cdFx0XHRwcm94eV9zZWxlY3Rvci52YWwoY29uY3JldGVfdmFsdWUpO1xuXHRcdH1cblxuXHR9XG5cblx0XHQvLyBVcGRhdGUgdGhlIGNvbmNyZXRlIGZpZWxkIHdoZW4gdGhlIHByb3h5IGlzIHVwZGF0ZWQuXG5cblxuXHRtYXNrRmllbGQoJCgnI2Nsb3VkZmxhcmVfYXBpX2tleV9tYXNrJyksICQoJyNjbG91ZGZsYXJlX2FwaV9rZXknKSk7XG5cdG1hc2tGaWVsZCgkKCcjY2xvdWRmbGFyZV96b25lX2lkX21hc2snKSwgJCgnI2Nsb3VkZmxhcmVfem9uZV9pZCcpKTtcblxuXHQvLyBEaXNwbGF5L0hpZGUgY2hpbGRyZW4gZmllbGRzIG9uIGNoZWNrYm94IGNoYW5nZS5cbiAgICAkKCAnLndwci1pc1BhcmVudCBpbnB1dFt0eXBlPWNoZWNrYm94XScgKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHdwclNob3dDaGlsZHJlbigkKHRoaXMpKTtcbiAgICB9KTtcblxuICAgIC8vIE9uIHBhZ2UgbG9hZCwgZGlzcGxheSB0aGUgYWN0aXZlIGZpZWxkcy5cbiAgICAkKCAnLndwci1maWVsZC0tY2hpbGRyZW4nICkuZWFjaCggZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkZmllbGQgPSAkKCB0aGlzICk7XG5cbiAgICAgICAgaWYgKCB3cHJJc1BhcmVudEFjdGl2ZSggJGZpZWxkICkgKSB7XG4gICAgICAgICAgICAkZmllbGQuYWRkQ2xhc3MoICd3cHItaXNPcGVuJyApO1xuICAgICAgICB9XG4gICAgfSApO1xuXG5cblxuXG4gICAgLyoqKlxuICAgICogV2FybmluZyBmaWVsZHNcbiAgICAqKiovXG5cbiAgICB2YXIgJHdhcm5pbmdQYXJlbnQgPSAkKCcud3ByLWZpZWxkLS1wYXJlbnQnKTtcbiAgICB2YXIgJHdhcm5pbmdQYXJlbnRJbnB1dCA9ICQoJy53cHItZmllbGQtLXBhcmVudCBpbnB1dFt0eXBlPWNoZWNrYm94XScpO1xuXG4gICAgLy8gSWYgYWxyZWFkeSBjaGVja2VkXG4gICAgJHdhcm5pbmdQYXJlbnRJbnB1dC5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgIHdwclNob3dDaGlsZHJlbigkKHRoaXMpKTtcbiAgICB9KTtcblxuICAgICR3YXJuaW5nUGFyZW50Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgd3ByU2hvd1dhcm5pbmcoJCh0aGlzKSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiB3cHJTaG93V2FybmluZyhhRWxlbSl7XG4gICAgICAgIHZhciAkd2FybmluZ0ZpZWxkID0gYUVsZW0ubmV4dCgnLndwci1maWVsZFdhcm5pbmcnKSxcbiAgICAgICAgICAgICR0aGlzQ2hlY2tib3ggPSBhRWxlbS5maW5kKCdpbnB1dFt0eXBlPWNoZWNrYm94XScpLFxuICAgICAgICAgICAgJG5leHRXYXJuaW5nID0gYUVsZW0ucGFyZW50KCkubmV4dCgnLndwci13YXJuaW5nQ29udGFpbmVyJyksXG4gICAgICAgICAgICAkbmV4dEZpZWxkcyA9ICRuZXh0V2FybmluZy5maW5kKCcud3ByLWZpZWxkJyksXG4gICAgICAgICAgICBwYXJlbnRJZCA9IGFFbGVtLmZpbmQoJ2lucHV0W3R5cGU9Y2hlY2tib3hdJykuYXR0cignaWQnKSxcbiAgICAgICAgICAgICRjaGlsZHJlbiA9ICQoJ1tkYXRhLXBhcmVudD1cIicgKyBwYXJlbnRJZCArICdcIl0nKVxuICAgICAgICA7XG5cbiAgICAgICAgLy8gQ2hlY2sgd2FybmluZyBwYXJlbnRcbiAgICAgICAgaWYoJHRoaXNDaGVja2JveC5pcygnOmNoZWNrZWQnKSl7XG4gICAgICAgICAgICAkd2FybmluZ0ZpZWxkLmFkZENsYXNzKCd3cHItaXNPcGVuJyk7XG4gICAgICAgICAgICAkdGhpc0NoZWNrYm94LnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICBhRWxlbS50cmlnZ2VyKCdjaGFuZ2UnKTtcblxuXG4gICAgICAgICAgICB2YXIgJHdhcm5pbmdCdXR0b24gPSAkd2FybmluZ0ZpZWxkLmZpbmQoJy53cHItYnV0dG9uJyk7XG5cbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRoZSB3YXJuaW5nXG4gICAgICAgICAgICAkd2FybmluZ0J1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICR0aGlzQ2hlY2tib3gucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICR3YXJuaW5nRmllbGQucmVtb3ZlQ2xhc3MoJ3dwci1pc09wZW4nKTtcbiAgICAgICAgICAgICAgICAkY2hpbGRyZW4uYWRkQ2xhc3MoJ3dwci1pc09wZW4nKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIG5leHQgZWxlbSA9IGRpc2FibGVkXG4gICAgICAgICAgICAgICAgaWYoJG5leHRXYXJuaW5nLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAkbmV4dEZpZWxkcy5yZW1vdmVDbGFzcygnd3ByLWlzRGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgJG5leHRGaWVsZHMuZmluZCgnaW5wdXQnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgJG5leHRGaWVsZHMuYWRkQ2xhc3MoJ3dwci1pc0Rpc2FibGVkJyk7XG4gICAgICAgICAgICAkbmV4dEZpZWxkcy5maW5kKCdpbnB1dCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICAkbmV4dEZpZWxkcy5maW5kKCdpbnB1dFt0eXBlPWNoZWNrYm94XScpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICAkY2hpbGRyZW4ucmVtb3ZlQ2xhc3MoJ3dwci1pc09wZW4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENOQU1FUyBhZGQvcmVtb3ZlIGxpbmVzXG4gICAgICovXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy53cHItbXVsdGlwbGUtY2xvc2UnLCBmdW5jdGlvbihlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdCQodGhpcykucGFyZW50KCkucmVtb3ZlKCk7XG5cdH0gKTtcblxuXHQkKCcud3ByLWJ1dHRvbi0tYWRkTXVsdGknKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkKCQoJyN3cHItY25hbWUtbW9kZWwnKS5odG1sKCkpLmFwcGVuZFRvKCcjd3ByLWNuYW1lcy1saXN0Jyk7XG4gICAgfSk7XG5cblx0LyoqKlxuXHQgKiBXcHIgUmFkaW8gYnV0dG9uXG5cdCAqKiovXG5cdHZhciBkaXNhYmxlX3JhZGlvX3dhcm5pbmcgPSBmYWxzZTtcblxuXHQkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLndwci1yYWRpby1idXR0b25zLWNvbnRhaW5lciBidXR0b24nLCBmdW5jdGlvbihlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmKCQodGhpcykuaGFzQ2xhc3MoJ3JhZGlvLWFjdGl2ZScpKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dmFyICRwYXJlbnQgPSAkKHRoaXMpLnBhcmVudHMoJy53cHItcmFkaW8tYnV0dG9ucycpO1xuXHRcdCRwYXJlbnQuZmluZCgnLndwci1yYWRpby1idXR0b25zLWNvbnRhaW5lciBidXR0b24nKS5yZW1vdmVDbGFzcygncmFkaW8tYWN0aXZlJyk7XG5cdFx0JHBhcmVudC5maW5kKCcud3ByLWV4dHJhLWZpZWxkcy1jb250YWluZXInKS5yZW1vdmVDbGFzcygnd3ByLWlzT3BlbicpO1xuXHRcdCRwYXJlbnQuZmluZCgnLndwci1maWVsZFdhcm5pbmcnKS5yZW1vdmVDbGFzcygnd3ByLWlzT3BlbicpO1xuXHRcdCQodGhpcykuYWRkQ2xhc3MoJ3JhZGlvLWFjdGl2ZScpO1xuXHRcdHdwclNob3dSYWRpb1dhcm5pbmcoJCh0aGlzKSk7XG5cblx0fSApO1xuXG5cblx0ZnVuY3Rpb24gd3ByU2hvd1JhZGlvV2FybmluZygkZWxtKXtcblx0XHRkaXNhYmxlX3JhZGlvX3dhcm5pbmcgPSBmYWxzZTtcblx0XHQkZWxtLnRyaWdnZXIoIFwiYmVmb3JlX3Nob3dfcmFkaW9fd2FybmluZ1wiLCBbICRlbG0gXSApO1xuXHRcdGlmICghJGVsbS5oYXNDbGFzcygnaGFzLXdhcm5pbmcnKSB8fCBkaXNhYmxlX3JhZGlvX3dhcm5pbmcpIHtcblx0XHRcdHdwclNob3dSYWRpb0J1dHRvbkNoaWxkcmVuKCRlbG0pO1xuXHRcdFx0JGVsbS50cmlnZ2VyKCBcInJhZGlvX2J1dHRvbl9zZWxlY3RlZFwiLCBbICRlbG0gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgJHdhcm5pbmdGaWVsZCA9ICQoJ1tkYXRhLXBhcmVudD1cIicgKyAkZWxtLmF0dHIoJ2lkJykgKyAnXCJdLndwci1maWVsZFdhcm5pbmcnKTtcblx0XHQkd2FybmluZ0ZpZWxkLmFkZENsYXNzKCd3cHItaXNPcGVuJyk7XG5cdFx0dmFyICR3YXJuaW5nQnV0dG9uID0gJHdhcm5pbmdGaWVsZC5maW5kKCcud3ByLWJ1dHRvbicpO1xuXG5cdFx0Ly8gVmFsaWRhdGUgdGhlIHdhcm5pbmdcblx0XHQkd2FybmluZ0J1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbigpe1xuXHRcdFx0JHdhcm5pbmdGaWVsZC5yZW1vdmVDbGFzcygnd3ByLWlzT3BlbicpO1xuXHRcdFx0d3ByU2hvd1JhZGlvQnV0dG9uQ2hpbGRyZW4oJGVsbSk7XG5cdFx0XHQkZWxtLnRyaWdnZXIoIFwicmFkaW9fYnV0dG9uX3NlbGVjdGVkXCIsIFsgJGVsbSBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiB3cHJTaG93UmFkaW9CdXR0b25DaGlsZHJlbigkZWxtKSB7XG5cdFx0dmFyICRwYXJlbnQgPSAkZWxtLnBhcmVudHMoJy53cHItcmFkaW8tYnV0dG9ucycpO1xuXHRcdHZhciAkY2hpbGRyZW4gPSAkKCcud3ByLWV4dHJhLWZpZWxkcy1jb250YWluZXJbZGF0YS1wYXJlbnQ9XCInICsgJGVsbS5hdHRyKCdpZCcpICsgJ1wiXScpO1xuXHRcdCRjaGlsZHJlbi5hZGRDbGFzcygnd3ByLWlzT3BlbicpO1xuXHR9XG5cblx0LyoqKlxuXHQgKiBXcHIgT3B0aW1pemUgQ3NzIERlbGl2ZXJ5IEZpZWxkXG5cdCAqKiovXG5cdHZhciBydWNzc0FjdGl2ZSA9IHBhcnNlSW50KCQoJyNyZW1vdmVfdW51c2VkX2NzcycpLnZhbCgpKTtcblxuXHQkKCBcIiNvcHRpbWl6ZV9jc3NfZGVsaXZlcnlfbWV0aG9kIC53cHItcmFkaW8tYnV0dG9ucy1jb250YWluZXIgYnV0dG9uXCIgKVxuXHRcdC5vbiggXCJyYWRpb19idXR0b25fc2VsZWN0ZWRcIiwgZnVuY3Rpb24oIGV2ZW50LCAkZWxtICkge1xuXHRcdFx0dG9nZ2xlQWN0aXZlT3B0aW1pemVDc3NEZWxpdmVyeU1ldGhvZCgkZWxtKTtcblx0XHR9KTtcblxuXHQkKFwiI29wdGltaXplX2Nzc19kZWxpdmVyeVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbigpe1xuXHRcdGlmKCAkKHRoaXMpLmlzKFwiOm5vdCg6Y2hlY2tlZClcIikgKXtcblx0XHRcdGRpc2FibGVPcHRpbWl6ZUNzc0RlbGl2ZXJ5KCk7XG5cdFx0fWVsc2V7XG5cdFx0XHR2YXIgZGVmYXVsdF9yYWRpb19idXR0b25faWQgPSAnIycrJCgnI29wdGltaXplX2Nzc19kZWxpdmVyeV9tZXRob2QnKS5kYXRhKCAnZGVmYXVsdCcgKTtcblx0XHRcdCQoZGVmYXVsdF9yYWRpb19idXR0b25faWQpLnRyaWdnZXIoJ2NsaWNrJyk7XG5cdFx0fVxuXHR9KTtcblxuXHRmdW5jdGlvbiB0b2dnbGVBY3RpdmVPcHRpbWl6ZUNzc0RlbGl2ZXJ5TWV0aG9kKCRlbG0pIHtcblx0XHR2YXIgb3B0aW1pemVfbWV0aG9kID0gJGVsbS5kYXRhKCd2YWx1ZScpO1xuXHRcdGlmKCdyZW1vdmVfdW51c2VkX2NzcycgPT09IG9wdGltaXplX21ldGhvZCl7XG5cdFx0XHQkKCcjcmVtb3ZlX3VudXNlZF9jc3MnKS52YWwoMSk7XG5cdFx0XHQkKCcjYXN5bmNfY3NzJykudmFsKDApO1xuXHRcdH1lbHNle1xuXHRcdFx0JCgnI3JlbW92ZV91bnVzZWRfY3NzJykudmFsKDApO1xuXHRcdFx0JCgnI2FzeW5jX2NzcycpLnZhbCgxKTtcblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGRpc2FibGVPcHRpbWl6ZUNzc0RlbGl2ZXJ5KCkge1xuXHRcdCQoJyNyZW1vdmVfdW51c2VkX2NzcycpLnZhbCgwKTtcblx0XHQkKCcjYXN5bmNfY3NzJykudmFsKDApO1xuXHR9XG5cblx0JCggXCIjb3B0aW1pemVfY3NzX2RlbGl2ZXJ5X21ldGhvZCAud3ByLXJhZGlvLWJ1dHRvbnMtY29udGFpbmVyIGJ1dHRvblwiIClcblx0XHQub24oIFwiYmVmb3JlX3Nob3dfcmFkaW9fd2FybmluZ1wiLCBmdW5jdGlvbiggZXZlbnQsICRlbG0gKSB7XG5cdFx0XHRkaXNhYmxlX3JhZGlvX3dhcm5pbmcgPSAoJ3JlbW92ZV91bnVzZWRfY3NzJyA9PT0gJGVsbS5kYXRhKCd2YWx1ZScpICYmIDEgPT09IHJ1Y3NzQWN0aXZlKVxuXHRcdH0pO1xuXG5cdCQoIFwiLndwci1tdWx0aXBsZS1zZWxlY3QgLndwci1saXN0LWhlYWRlclwiICkuY2xpY2soZnVuY3Rpb24gKGUpIHtcblx0XHQkKGUudGFyZ2V0KS5jbG9zZXN0KCcud3ByLW11bHRpcGxlLXNlbGVjdCAud3ByLWxpc3QnKS50b2dnbGVDbGFzcygnb3BlbicpO1xuXHR9KTtcblxuXHQkKCcud3ByLW11bHRpcGxlLXNlbGVjdCAud3ByLWNoZWNrYm94JykuY2xpY2soZnVuY3Rpb24gKGUpIHtcblx0XHRjb25zdCBjaGVja2JveCA9ICQodGhpcykuZmluZCgnaW5wdXQnKTtcblx0XHRjb25zdCBpc19jaGVja2VkID0gY2hlY2tib3guYXR0cignY2hlY2tlZCcpICE9PSB1bmRlZmluZWQ7XG5cdFx0Y2hlY2tib3guYXR0cignY2hlY2tlZCcsIGlzX2NoZWNrZWQgPyBudWxsIDogJ2NoZWNrZWQnICk7XG5cdFx0Y29uc3Qgc3ViX2NoZWNrYm94ZXMgPSAkKGNoZWNrYm94KS5jbG9zZXN0KCcud3ByLWxpc3QnKS5maW5kKCcud3ByLWxpc3QtYm9keSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcblx0XHRpZihjaGVja2JveC5oYXNDbGFzcygnd3ByLW1haW4tY2hlY2tib3gnKSkge1xuXHRcdFx0JC5tYXAoc3ViX2NoZWNrYm94ZXMsIGNoZWNrYm94ID0+IHtcblx0XHRcdFx0JChjaGVja2JveCkuYXR0cignY2hlY2tlZCcsIGlzX2NoZWNrZWQgPyBudWxsIDogJ2NoZWNrZWQnICk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWFpbl9jaGVja2JveCA9ICQoY2hlY2tib3gpLmNsb3Nlc3QoJy53cHItbGlzdCcpLmZpbmQoJy53cHItbWFpbi1jaGVja2JveCcpO1xuXG5cdFx0Y29uc3Qgc3ViX2NoZWNrZWQgPSAgJC5tYXAoc3ViX2NoZWNrYm94ZXMsIGNoZWNrYm94ID0+IHtcblx0XHRcdGlmKCQoY2hlY2tib3gpLmF0dHIoJ2NoZWNrZWQnKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2hlY2tib3g7XG5cdFx0fSk7XG5cdFx0bWFpbl9jaGVja2JveC5hdHRyKCdjaGVja2VkJywgc3ViX2NoZWNrZWQubGVuZ3RoID09PSBzdWJfY2hlY2tib3hlcy5sZW5ndGggPyAnY2hlY2tlZCcgOiBudWxsICk7XG5cdH0pO1xuXG5cdGlmICggJCggJy53cHItbWFpbi1jaGVja2JveCcgKS5sZW5ndGggPiAwICkge1xuXHRcdCQoJy53cHItbWFpbi1jaGVja2JveCcpLmVhY2goKGNoZWNrYm94X2tleSwgY2hlY2tib3gpID0+IHtcblx0XHRcdGxldCBwYXJlbnRfbGlzdCA9ICQoY2hlY2tib3gpLnBhcmVudHMoJy53cHItbGlzdCcpO1xuXHRcdFx0bGV0IG5vdF9jaGVja2VkID0gcGFyZW50X2xpc3QuZmluZCggJy53cHItbGlzdC1ib2R5IGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6Y2hlY2tlZCknICkubGVuZ3RoO1xuXHRcdFx0JChjaGVja2JveCkuYXR0cignY2hlY2tlZCcsIG5vdF9jaGVja2VkIDw9IDAgPyAnY2hlY2tlZCcgOiBudWxsICk7XG5cdFx0fSk7XG5cdH1cblxuXHRsZXQgY2hlY2tCb3hDb3VudGVyID0ge1xuXHRcdGNoZWNrZWQ6IHt9LFxuXHRcdHRvdGFsOiB7fVxuXHR9O1xuXHQkKCcud3ByLWZpZWxkLS1jYXRlZ29yaXplZG11bHRpc2VsZWN0IC53cHItbGlzdCcpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdC8vIEdldCB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudFxuXHRcdGxldCBpZCA9ICQodGhpcykuYXR0cignaWQnKTtcblx0XHRpZiAoaWQpIHtcblx0XHRcdGNoZWNrQm94Q291bnRlci5jaGVja2VkW2lkXSA9ICQoYCMke2lkfSBpbnB1dFt0eXBlPSdjaGVja2JveCddOmNoZWNrZWRgKS5sZW5ndGg7XG5cdFx0XHRjaGVja0JveENvdW50ZXIudG90YWxbaWRdID0gJChgIyR7aWR9IGlucHV0W3R5cGU9J2NoZWNrYm94J106bm90KC53cHItbWFpbi1jaGVja2JveClgKS5sZW5ndGg7XG5cdFx0XHQvLyBVcGRhdGUgdGhlIGNvdW50ZXIgdGV4dFxuXHRcdFx0JChgIyR7aWR9IC53cHItYmFkZ2UtY291bnRlciBzcGFuYCkudGV4dChjaGVja0JveENvdW50ZXIuY2hlY2tlZFtpZF0pO1xuXHRcdFx0Ly8gU2hvdyBvciBoaWRlIHRoZSBjb3VudGVyIGJhZGdlIGJhc2VkIG9uIHRoZSBjb3VudFxuXHRcdFx0JChgIyR7aWR9IC53cHItYmFkZ2UtY291bnRlcmApLnRvZ2dsZShjaGVja0JveENvdW50ZXIuY2hlY2tlZFtpZF0gPiAwKTtcblxuXHRcdFx0Ly8gQ2hlY2sgdGhlIHNlbGVjdCBhbGwgb3B0aW9uIGlmIGFsbCBleGNsdXNpb25zIGFyZSBjaGVja2VkIGluIGEgc2VjdGlvbi5cblx0XHRcdGlmIChjaGVja0JveENvdW50ZXIuY2hlY2tlZFtpZF0gPT09IGNoZWNrQm94Q291bnRlci50b3RhbFtpZF0pIHtcblx0XHRcdFx0JChgIyR7aWR9IC53cHItbWFpbi1jaGVja2JveGApLmF0dHIoJ2NoZWNrZWQnLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBEZWxheSBKUyBFeGVjdXRpb24gU2FmZSBNb2RlIEZpZWxkXG5cdCAqL1xuXHR2YXIgJGRqZV9zYWZlX21vZGVfY2hlY2tib3ggPSAkKCcjZGVsYXlfanNfZXhlY3V0aW9uX3NhZmVfbW9kZScpO1xuXHQkKCcjZGVsYXlfanMnKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuXHRcdGlmICgkKHRoaXMpLmlzKCc6bm90KDpjaGVja2VkKScpICYmICRkamVfc2FmZV9tb2RlX2NoZWNrYm94LmlzKCc6Y2hlY2tlZCcpKSB7XG5cdFx0XHQkZGplX3NhZmVfbW9kZV9jaGVja2JveC50cmlnZ2VyKCdjbGljaycpO1xuXHRcdH1cblx0fSk7XG5cblx0bGV0IHN0YWNrZWRfc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdyb2NrZXRfc3RhY2tlZF9zZWxlY3QnICk7XG5cdGlmICggc3RhY2tlZF9zZWxlY3QgKSB7XG5cdFx0c3RhY2tlZF9zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY3VzdG9tLXNlbGVjdC1jaGFuZ2UnLGZ1bmN0aW9uKGV2ZW50KXtcblxuXHRcdFx0bGV0IHNlbGVjdGVkX29wdGlvbiA9ICQoIGV2ZW50LmRldGFpbC5zZWxlY3RlZE9wdGlvbiApO1xuXG5cdFx0XHRsZXQgbmFtZSA9IHNlbGVjdGVkX29wdGlvbi5kYXRhKCduYW1lJyk7XG5cblx0XHRcdGxldCBzYXZpbmcgPSBzZWxlY3RlZF9vcHRpb24uZGF0YSgnc2F2aW5nJyk7XG5cdFx0XHRsZXQgcmVndWxhcl9wcmljZSAgPSBzZWxlY3RlZF9vcHRpb24uZGF0YSgncmVndWxhci1wcmljZScpO1xuXHRcdFx0bGV0IHByaWNlICA9IHNlbGVjdGVkX29wdGlvbi5kYXRhKCdwcmljZScpO1xuXHRcdFx0bGV0IHVybCAgICA9IHNlbGVjdGVkX29wdGlvbi5kYXRhKCd1cmwnKTtcblxuXHRcdFx0bGV0IHBhcmVudF9pdGVtID0gJCh0aGlzKS5wYXJlbnRzKCAnLndwci11cGdyYWRlLWl0ZW0nICk7XG5cblx0XHRcdGlmICggc2F2aW5nICkge1xuXHRcdFx0XHRwYXJlbnRfaXRlbS5maW5kKCAnLndwci11cGdyYWRlLXNhdmluZyBzcGFuJyApLmh0bWwoIHNhdmluZyApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBuYW1lICkge1xuXHRcdFx0XHRwYXJlbnRfaXRlbS5maW5kKCAnLndwci11cGdyYWRlLXRpdGxlJyApLmh0bWwoIG5hbWUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggcmVndWxhcl9wcmljZSApIHtcblx0XHRcdFx0cGFyZW50X2l0ZW0uZmluZCggJy53cHItdXBncmFkZS1wcmljZS1yZWd1bGFyIHNwYW4nICkuaHRtbCggcmVndWxhcl9wcmljZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBwcmljZSApIHtcblx0XHRcdFx0cGFyZW50X2l0ZW0uZmluZCggJy53cHItdXBncmFkZS1wcmljZS12YWx1ZScgKS5odG1sKCBwcmljZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB1cmwgKSB7XG5cdFx0XHRcdHBhcmVudF9pdGVtLmZpbmQoICcud3ByLXVwZ3JhZGUtbGluaycgKS5hdHRyKCAnaHJlZicsIHVybCApO1xuXHRcdFx0fVxuXG5cdFx0fSApO1xuXHR9XG5cblx0JChkb2N1bWVudCkub24oICdjbGljaycsICcud3ByLWNvbmZpcm0tZGVsZXRlJywgZnVuY3Rpb24gKGUpIHtcblx0XHRyZXR1cm4gY29uZmlybSggJCh0aGlzKS5kYXRhKCd3cHJfY29uZmlybV9tc2cnKSApO1xuXHR9ICk7XG5cbn0pO1xuIiwidmFyICQgPSBqUXVlcnk7XG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe1xuXG5cblx0LyoqKlxuXHQqIERhc2hib2FyZCBub3RpY2Vcblx0KioqL1xuXG5cdHZhciAkbm90aWNlID0gJCgnLndwci1ub3RpY2UnKTtcblx0dmFyICRub3RpY2VDbG9zZSA9ICQoJyN3cHItY29uZ3JhdHVsYXRpb25zLW5vdGljZScpO1xuXG5cdCRub3RpY2VDbG9zZS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHR3cHJDbG9zZURhc2hib2FyZE5vdGljZSgpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG5cblx0ZnVuY3Rpb24gd3ByQ2xvc2VEYXNoYm9hcmROb3RpY2UoKXtcblx0XHR2YXIgdlRMID0gbmV3IFRpbWVsaW5lTGl0ZSgpXG5cdFx0ICAudG8oJG5vdGljZSwgMSwge2F1dG9BbHBoYTowLCB4OjQwLCBlYXNlOlBvd2VyNC5lYXNlT3V0fSlcblx0XHQgIC50bygkbm90aWNlLCAwLjYsIHtoZWlnaHQ6IDAsIG1hcmdpblRvcDowLCBlYXNlOlBvd2VyNC5lYXNlT3V0fSwgJz0tLjQnKVxuXHRcdCAgLnNldCgkbm90aWNlLCB7J2Rpc3BsYXknOidub25lJ30pXG5cdFx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJvY2tldCBBbmFseXRpY3Mgbm90aWNlIGluZm8gY29sbGVjdFxuXHQgKi9cblx0JCggJy5yb2NrZXQtYW5hbHl0aWNzLWRhdGEtY29udGFpbmVyJyApLmhpZGUoKTtcblx0JCggJy5yb2NrZXQtcHJldmlldy1hbmFseXRpY3MtZGF0YScgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0JCh0aGlzKS5wYXJlbnQoKS5uZXh0KCAnLnJvY2tldC1hbmFseXRpY3MtZGF0YS1jb250YWluZXInICkudG9nZ2xlKCk7XG5cdH0gKTtcblxuXHQvKioqXG5cdCogSGlkZSAvIHNob3cgUm9ja2V0IGFkZG9uIHRhYnMuXG5cdCoqKi9cblxuXHQkKCAnLndwci10b2dnbGUtYnV0dG9uJyApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdHZhciAkYnV0dG9uICAgPSAkKCB0aGlzICk7XG5cdFx0dmFyICRjaGVja2JveCA9ICRidXR0b24uY2xvc2VzdCggJy53cHItZmllbGRzQ29udGFpbmVyLWZpZWxkc2V0JyApLmZpbmQoICcud3ByLXJhZGlvIDpjaGVja2JveCcgKTtcblx0XHR2YXIgJG1lbnVJdGVtID0gJCggJ1tocmVmPVwiJyArICRidXR0b24uYXR0ciggJ2hyZWYnICkgKyAnXCJdLndwci1tZW51SXRlbScgKTtcblxuXHRcdCRjaGVja2JveC5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICRjaGVja2JveC5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0XHQkbWVudUl0ZW0uY3NzKCAnZGlzcGxheScsICdibG9jaycgKTtcblx0XHRcdFx0JGJ1dHRvbi5jc3MoICdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycgKTtcblx0XHRcdH0gZWxzZXtcblx0XHRcdFx0JG1lbnVJdGVtLmNzcyggJ2Rpc3BsYXknLCAnbm9uZScgKTtcblx0XHRcdFx0JGJ1dHRvbi5jc3MoICdkaXNwbGF5JywgJ25vbmUnICk7XG5cdFx0XHR9XG5cdFx0fSApLnRyaWdnZXIoICdjaGFuZ2UnICk7XG5cdH0gKTtcblxuXHQvKioqXG5cdCogSGVscCBCdXR0b24gVHJhY2tpbmdcblx0KioqL1xuXG5cdC8vIFRyYWNrIGNsaWNrcyBvbiB2YXJpb3VzIGhlbHAgZWxlbWVudHMgd2l0aCBkYXRhIGF0dHJpYnV0ZXNcblx0JChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLXdwcl90cmFja19oZWxwXScsIGZ1bmN0aW9uKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHZhciAkZWwgPSAkKHRoaXMpO1xuXHRcdFx0dmFyIGJ1dHRvbiA9ICRlbC5kYXRhKCd3cHJfdHJhY2tfaGVscCcpO1xuXHRcdFx0dmFyIGNvbnRleHQgPSAkZWwuZGF0YSgnd3ByX3RyYWNrX2NvbnRleHQnKSB8fCAnJztcblxuXHRcdFx0d2luZG93LndwclRyYWNrSGVscEJ1dHRvbihidXR0b24sIGNvbnRleHQpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gVHJhY2sgc3BlY2lmaWMgaGVscCByZXNvdXJjZSBjbGlja3Mgd2l0aCBleHBsaWNpdCBzZWxlY3RvcnNcblx0JChkb2N1bWVudCkub24oJ2NsaWNrJywgJy53aXN0aWFfZW1iZWQnLCBmdW5jdGlvbigpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHZhciB0aXRsZSA9ICQodGhpcykudGV4dCgpIHx8ICdHZXR0aW5nIFN0YXJ0ZWQgVmlkZW8nO1xuXHRcdFx0d2luZG93LndwclRyYWNrSGVscEJ1dHRvbih0aXRsZSwgJ0dldHRpbmcgU3RhcnRlZCcpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gVHJhY2sgRkFRIGxpbmtzXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdhW2RhdGEtYmVhY29uLWFydGljbGVdJywgZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cud3ByVHJhY2tIZWxwQnV0dG9uID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR2YXIgaHJlZiA9ICQodGhpcykuYXR0cignaHJlZicpO1xuXHRcdFx0dmFyIHRleHQgPSAkKHRoaXMpLnRleHQoKTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgaXQncyBpbiBGQVEgc2VjdGlvbiBvciBzaWRlYmFyIGRvY3VtZW50YXRpb25cblx0XHRcdGlmICgkKHRoaXMpLmNsb3Nlc3QoJy53cHItZmllbGRzQ29udGFpbmVyLWZpZWxkc2V0JykucHJldignLndwci1vcHRpb25IZWFkZXInKS5maW5kKCcud3ByLXRpdGxlMicpLnRleHQoKS5pbmNsdWRlcygnRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMnKSkge1xuXHRcdFx0XHR3aW5kb3cud3ByVHJhY2tIZWxwQnV0dG9uKCdGQVEgLSAnICsgdGV4dCwgJ0Rhc2hib2FyZCcpO1xuXHRcdFx0fSBlbHNlIGlmICgkKHRoaXMpLmNsb3Nlc3QoJy53cHItZG9jdW1lbnRhdGlvbicpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0d2luZG93LndwclRyYWNrSGVscEJ1dHRvbignRG9jdW1lbnRhdGlvbicsICdTaWRlYmFyJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3cud3ByVHJhY2tIZWxwQnV0dG9uKCdEb2N1bWVudGF0aW9uIExpbmsnLCAnR2VuZXJhbCcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Ly8gVHJhY2sgXCJIb3cgdG8gbWVhc3VyZSBsb2FkaW5nIHRpbWVcIiBsaW5rXG5cdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdhW2hyZWYqPVwiaG93LXRvLXRlc3Qtd29yZHByZXNzLXNpdGUtcGVyZm9ybWFuY2VcIl0nLCBmdW5jdGlvbigpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHdpbmRvdy53cHJUcmFja0hlbHBCdXR0b24oJ0xvYWRpbmcgVGltZSBHdWlkZScsICdTaWRlYmFyJyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBUcmFjayBcIk5lZWQgaGVscD9cIiBsaW5rcyAoZXhpc3RpbmcgaGVscCBidXR0b25zKVxuXHQkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLndwci1pbmZvQWN0aW9uLS1oZWxwOm5vdChbZGF0YS1iZWFjb24taWRdKScsIGZ1bmN0aW9uKCkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93LndwclRyYWNrSGVscEJ1dHRvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0d2luZG93LndwclRyYWNrSGVscEJ1dHRvbignTmVlZCBIZWxwJywgJ0dlbmVyYWwnKTtcblx0XHR9XG5cdH0pO1xuXG5cblx0LyoqKlxuXHQqIFNob3cgcG9waW4gYW5hbHl0aWNzXG5cdCoqKi9cblxuXHR2YXIgJHdwckFuYWx5dGljc1BvcGluID0gJCgnLndwci1Qb3Bpbi1BbmFseXRpY3MnKSxcblx0XHQkd3ByUG9waW5PdmVybGF5ID0gJCgnLndwci1Qb3Bpbi1vdmVybGF5JyksXG5cdFx0JHdwckFuYWx5dGljc0Nsb3NlUG9waW4gPSAkKCcud3ByLVBvcGluLUFuYWx5dGljcy1jbG9zZScpLFxuXHRcdCR3cHJBbmFseXRpY3NQb3BpbkJ1dHRvbiA9ICQoJy53cHItUG9waW4tQW5hbHl0aWNzIC53cHItYnV0dG9uJyksXG5cdFx0JHdwckFuYWx5dGljc09wZW5Qb3BpbiA9ICQoJy53cHItanMtcG9waW4nKVxuXHQ7XG5cblx0JHdwckFuYWx5dGljc09wZW5Qb3Bpbi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdHdwck9wZW5BbmFseXRpY3MoKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xuXG5cdCR3cHJBbmFseXRpY3NDbG9zZVBvcGluLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0d3ByQ2xvc2VBbmFseXRpY3MoKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xuXG5cdCR3cHJBbmFseXRpY3NQb3BpbkJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdHdwckFjdGl2YXRlQW5hbHl0aWNzKCk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcblxuXHRmdW5jdGlvbiB3cHJPcGVuQW5hbHl0aWNzKCl7XG5cdFx0dmFyIHZUTCA9IG5ldyBUaW1lbGluZUxpdGUoKVxuXHRcdCAgLnNldCgkd3ByQW5hbHl0aWNzUG9waW4sIHsnZGlzcGxheSc6J2Jsb2NrJ30pXG5cdFx0ICAuc2V0KCR3cHJQb3Bpbk92ZXJsYXksIHsnZGlzcGxheSc6J2Jsb2NrJ30pXG5cdFx0ICAuZnJvbVRvKCR3cHJQb3Bpbk92ZXJsYXksIDAuNiwge2F1dG9BbHBoYTowfSx7YXV0b0FscGhhOjEsIGVhc2U6UG93ZXI0LmVhc2VPdXR9KVxuXHRcdCAgLmZyb21Ubygkd3ByQW5hbHl0aWNzUG9waW4sIDAuNiwge2F1dG9BbHBoYTowLCBtYXJnaW5Ub3A6IC0yNH0sIHthdXRvQWxwaGE6MSwgbWFyZ2luVG9wOjAsIGVhc2U6UG93ZXI0LmVhc2VPdXR9LCAnPS0uNScpXG5cdFx0O1xuXHR9XG5cblx0ZnVuY3Rpb24gd3ByQ2xvc2VBbmFseXRpY3MoKXtcblx0XHR2YXIgdlRMID0gbmV3IFRpbWVsaW5lTGl0ZSgpXG5cdFx0ICAuZnJvbVRvKCR3cHJBbmFseXRpY3NQb3BpbiwgMC42LCB7YXV0b0FscGhhOjEsIG1hcmdpblRvcDogMH0sIHthdXRvQWxwaGE6MCwgbWFyZ2luVG9wOi0yNCwgZWFzZTpQb3dlcjQuZWFzZU91dH0pXG5cdFx0ICAuZnJvbVRvKCR3cHJQb3Bpbk92ZXJsYXksIDAuNiwge2F1dG9BbHBoYToxfSx7YXV0b0FscGhhOjAsIGVhc2U6UG93ZXI0LmVhc2VPdXR9LCAnPS0uNScpXG5cdFx0ICAuc2V0KCR3cHJBbmFseXRpY3NQb3BpbiwgeydkaXNwbGF5Jzonbm9uZSd9KVxuXHRcdCAgLnNldCgkd3ByUG9waW5PdmVybGF5LCB7J2Rpc3BsYXknOidub25lJ30pXG5cdFx0O1xuXHR9XG5cblx0ZnVuY3Rpb24gd3ByQWN0aXZhdGVBbmFseXRpY3MoKXtcblx0XHR3cHJDbG9zZUFuYWx5dGljcygpO1xuXHRcdCQoJyNhbmFseXRpY3NfZW5hYmxlZCcpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcblxuXHRcdHZhciBhbmFseXRpY3NFbmFibGVkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuYWx5dGljc19lbmFibGVkJyk7XG5cblx0XHRpZiAoIGFuYWx5dGljc0VuYWJsZWQgKSB7XG5cdFx0XHR2YXIgY2hhbmdlRXZlbnQgPSBuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KTtcblx0XHRcdGFuYWx5dGljc0VuYWJsZWQuZGlzcGF0Y2hFdmVudChjaGFuZ2VFdmVudCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gRGlzcGxheSBDVEEgd2l0aGluIHRoZSBwb3BpbiBgV2hhdCBpbmZvIHdpbGwgd2UgY29sbGVjdD9gXG5cdCQoJyNhbmFseXRpY3NfZW5hYmxlZCcpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0JCgnLndwci1yb2NrZXQtYW5hbHl0aWNzLWN0YScpLnRvZ2dsZUNsYXNzKCd3cHItaXNIaWRkZW4nKTtcblx0fSk7XG5cblx0LyoqKlxuXHQqIFNob3cgcG9waW4gdXBncmFkZVxuXHQqKiovXG5cblx0dmFyICR3cHJVcGdyYWRlUG9waW4gPSAkKCcud3ByLVBvcGluLVVwZ3JhZGUnKSxcblx0JHdwclVwZ3JhZGVDbG9zZVBvcGluID0gJCgnLndwci1Qb3Bpbi1VcGdyYWRlLWNsb3NlJyksXG5cdCR3cHJVcGdyYWRlT3BlblBvcGluID0gJCgnLndwci1wb3Bpbi11cGdyYWRlLXRvZ2dsZScpO1xuXG5cdCR3cHJVcGdyYWRlT3BlblBvcGluLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0d3ByT3BlblVwZ3JhZGVQb3BpbigpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG5cblx0JHdwclVwZ3JhZGVDbG9zZVBvcGluLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdHdwckNsb3NlVXBncmFkZVBvcGluKCk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcblxuXHRmdW5jdGlvbiB3cHJPcGVuVXBncmFkZVBvcGluKCl7XG5cdFx0dmFyIHZUTCA9IG5ldyBUaW1lbGluZUxpdGUoKTtcblxuXHRcdHZUTC5zZXQoJHdwclVwZ3JhZGVQb3BpbiwgeydkaXNwbGF5JzonYmxvY2snfSlcblx0XHRcdC5zZXQoJHdwclBvcGluT3ZlcmxheSwgeydkaXNwbGF5JzonYmxvY2snfSlcblx0XHRcdC5mcm9tVG8oJHdwclBvcGluT3ZlcmxheSwgMC42LCB7YXV0b0FscGhhOjB9LHthdXRvQWxwaGE6MSwgZWFzZTpQb3dlcjQuZWFzZU91dH0pXG5cdFx0XHQuZnJvbVRvKCR3cHJVcGdyYWRlUG9waW4sIDAuNiwge2F1dG9BbHBoYTowLCBtYXJnaW5Ub3A6IC0yNH0sIHthdXRvQWxwaGE6MSwgbWFyZ2luVG9wOjAsIGVhc2U6UG93ZXI0LmVhc2VPdXR9LCAnPS0uNScpXG5cdFx0O1xuXHR9XG5cblx0ZnVuY3Rpb24gd3ByQ2xvc2VVcGdyYWRlUG9waW4oKXtcblx0XHR2YXIgdlRMID0gbmV3IFRpbWVsaW5lTGl0ZSgpO1xuXG5cdFx0dlRMLmZyb21Ubygkd3ByVXBncmFkZVBvcGluLCAwLjYsIHthdXRvQWxwaGE6MSwgbWFyZ2luVG9wOiAwfSwge2F1dG9BbHBoYTowLCBtYXJnaW5Ub3A6LTI0LCBlYXNlOlBvd2VyNC5lYXNlT3V0fSlcblx0XHRcdC5mcm9tVG8oJHdwclBvcGluT3ZlcmxheSwgMC42LCB7YXV0b0FscGhhOjF9LHthdXRvQWxwaGE6MCwgZWFzZTpQb3dlcjQuZWFzZU91dH0sICc9LS41Jylcblx0XHRcdC5zZXQoJHdwclVwZ3JhZGVQb3BpbiwgeydkaXNwbGF5Jzonbm9uZSd9KVxuXHRcdFx0LnNldCgkd3ByUG9waW5PdmVybGF5LCB7J2Rpc3BsYXknOidub25lJ30pXG5cdFx0O1xuXHR9XG5cblx0LyoqKlxuXHQqIFNpZGViYXIgb24vb2ZmXG5cdCoqKi9cblx0dmFyICR3cHJTaWRlYmFyICAgID0gJCggJy53cHItU2lkZWJhcicgKTtcblx0dmFyICR3cHJCdXR0b25UaXBzID0gJCgnLndwci1qcy10aXBzJyk7XG5cblx0JHdwckJ1dHRvblRpcHMub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdHdwckRldGVjdFRpcHMoJCh0aGlzKSk7XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIHdwckRldGVjdFRpcHMoYUVsZW0pe1xuXHRcdGlmKGFFbGVtLmlzKCc6Y2hlY2tlZCcpKXtcblx0XHRcdCR3cHJTaWRlYmFyLmNzcygnZGlzcGxheScsJ2Jsb2NrJyk7XG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSggJ3dwci1zaG93LXNpZGViYXInLCAnb24nICk7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHQkd3ByU2lkZWJhci5jc3MoJ2Rpc3BsYXknLCdub25lJyk7XG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSggJ3dwci1zaG93LXNpZGViYXInLCAnb2ZmJyApO1xuXHRcdH1cblx0fVxuXG5cblxuXHQvKioqXG5cdCogRGV0ZWN0IEFkYmxvY2tcblx0KioqL1xuXG5cdGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdMS2dPY0NScHdtQWonKSl7XG5cdFx0JCgnLndwci1hZGJsb2NrJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcblx0fSBlbHNlIHtcblx0XHQkKCcud3ByLWFkYmxvY2snKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTtcblx0fVxuXG5cdHZhciAkYWRibG9jayA9ICQoJy53cHItYWRibG9jaycpO1xuXHR2YXIgJGFkYmxvY2tDbG9zZSA9ICQoJy53cHItYWRibG9jay1jbG9zZScpO1xuXG5cdCRhZGJsb2NrQ2xvc2Uub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0d3ByQ2xvc2VBZGJsb2NrTm90aWNlKCk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcblxuXHRmdW5jdGlvbiB3cHJDbG9zZUFkYmxvY2tOb3RpY2UoKXtcblx0XHR2YXIgdlRMID0gbmV3IFRpbWVsaW5lTGl0ZSgpXG5cdFx0ICAudG8oJGFkYmxvY2ssIDEsIHthdXRvQWxwaGE6MCwgeDo0MCwgZWFzZTpQb3dlcjQuZWFzZU91dH0pXG5cdFx0ICAudG8oJGFkYmxvY2ssIDAuNCwge2hlaWdodDogMCwgbWFyZ2luVG9wOjAsIGVhc2U6UG93ZXI0LmVhc2VPdXR9LCAnPS0uNCcpXG5cdFx0ICAuc2V0KCRhZGJsb2NrLCB7J2Rpc3BsYXknOidub25lJ30pXG5cdFx0O1xuXHR9XG5cblx0Ly8gSGFuZGxlIGV4cGFuZC9jb2xsYXBzZSBvZiByZWNvbW1lbmRhdGlvbnMgbGlzdC5cblx0JChkb2N1bWVudCkub24oJ2NsaWNrJywgJyN3cHItcmVjb21tZW5kYXRpb25zLWxvYWQtbW9yZScsIGZ1bmN0aW9uKCkge1xuXHRcdGxldCAkbGlzdCA9ICQoJy53cHItcmVjb21tZW5kYXRpb25zX19saXN0Jyk7XG5cdFx0bGV0ICRoaWRkZW5JdGVtcyA9ICRsaXN0LmZpbmQoJy53cHItcmVjb21tZW5kYXRpb24taXRlbTpndCgyKScpO1xuXG5cdFx0Ly8gVHJhY2sgTG9hZCBNb3JlIGJ1dHRvbiBjbGlja1xuXHRcdGlmICh0eXBlb2Ygd2luZG93LndwclRyYWNrSGVscEJ1dHRvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0d2luZG93LndwclRyYWNrSGVscEJ1dHRvbigncm9ja2V0IGluc2lnaHRzIHJlY29tbWVuZGF0aW9ucyBsb2FkIG1vcmUnLCAnbG9hZF9tb3JlJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCRsaXN0Lmhhc0NsYXNzKCdpcy1leHBhbmRlZCcpKSB7XG5cdFx0XHQkaGlkZGVuSXRlbXMuc2xpZGVVcCgzMDAsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkbGlzdC5yZW1vdmVDbGFzcygnaXMtZXhwYW5kZWQnKTtcblx0XHRcdH0pO1xuXHRcdFx0JCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtZXhwYW5kZWQnKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQkbGlzdC5hZGRDbGFzcygnaXMtZXhwYW5kZWQnKTtcblx0XHQkaGlkZGVuSXRlbXMuc2xpZGVEb3duKDMwMCk7XG5cdFx0JCh0aGlzKS5hZGRDbGFzcygnaXMtZXhwYW5kZWQnKTtcblx0fSk7XG5cblx0Ly8gVHJhY2sgUm9ja2V0IEluc2lnaHRzIFJlY29tbWVuZGF0aW9uIEFjdGl2YXRlIGJ1dHRvbiBjbGlja3Ncblx0JChkb2N1bWVudCkub24oJ2NsaWNrJywgJy53cHItcmVjb21tZW5kYXRpb24taXRlbV9fYWN0aXZhdGUnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgcmVjb21tZW5kYXRpb24gPSAkKHRoaXMpLmRhdGEoJ3JlY29tbWVuZGF0aW9uJykgfHwgJ3Vua25vd24nO1xuXG5cdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSwgc2Nyb2xsIHRvIHRoZSBlbGVtZW50IHdpdGggaWQgbWF0Y2hpbmcgdGhlIHJlY29tbWVuZGF0aW9uIHZhbHVlLlxuXHRcdC8vIERlbGF5IHNjcm9sbCBieSAxMDBtcyB0byBhbGxvdyBuYXZpZ2F0aW9uIHRvIHRoZSBzZWN0aW9uIHRvIGNvbXBsZXRlIGFuZCBlbnN1cmUgdGhlIHRhcmdldCBlbGVtZW50IGlzIGluIHZpZXcuXG5cdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdHZhciAkdGFyZ2V0ID0gJChgIyR7cmVjb21tZW5kYXRpb259YCk7XG5cdFx0XHRcblx0XHRcdGlmICghJHRhcmdldC5sZW5ndGggJiYgISR0YXJnZXQuaXMoJzp2aXNpYmxlJykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQkdGFyZ2V0WzBdLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG5cdFx0fSwgMTAwKTtcblx0XHRcblx0XHQvLyBUcmFjayBkaXJlY3RseSB3aXRoIE1peHBhbmVsXG5cdFx0aWYgKHR5cGVvZiBtaXhwYW5lbCAhPT0gJ3VuZGVmaW5lZCcgJiYgbWl4cGFuZWwudHJhY2spIHtcblx0XHRcdC8vIENoZWNrIGlmIHVzZXIgaGFzIG9wdGVkIGluXG5cdFx0XHRpZiAodHlwZW9mIHJvY2tldF9taXhwYW5lbF9kYXRhICE9PSAndW5kZWZpbmVkJyAmJiByb2NrZXRfbWl4cGFuZWxfZGF0YS5vcHRpbl9lbmFibGVkICYmIHJvY2tldF9taXhwYW5lbF9kYXRhLm9wdGluX2VuYWJsZWQgIT09ICcwJykge1xuXHRcdFx0XHQvLyBJZGVudGlmeSB1c2VyIGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRpZiAocm9ja2V0X21peHBhbmVsX2RhdGEudXNlcl9pZCAmJiB0eXBlb2YgbWl4cGFuZWwuaWRlbnRpZnkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRtaXhwYW5lbC5pZGVudGlmeShyb2NrZXRfbWl4cGFuZWxfZGF0YS51c2VyX2lkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0Ly8gVHJhY2sgdGhlIEJ1dHRvbiBDbGlja2VkIGV2ZW50XG5cdFx0XHRcdG1peHBhbmVsLnRyYWNrKCdCdXR0b24gQ2xpY2tlZCcsIHtcblx0XHRcdFx0XHQnYnV0dG9uJzogJ3JvY2tldCBpbnNpZ2h0cyByZWNvbW1lbmRhdGlvbicsXG5cdFx0XHRcdFx0J3JlY29tbWVuZGF0aW9uJzogcmVjb21tZW5kYXRpb24sXG5cdFx0XHRcdFx0J3BsdWdpbic6IHJvY2tldF9taXhwYW5lbF9kYXRhLnBsdWdpbixcblx0XHRcdFx0XHQnYnJhbmQnOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5icmFuZCxcblx0XHRcdFx0XHQnYXBwbGljYXRpb24nOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5hcHAsXG5cdFx0XHRcdFx0J2NvbnRleHQnOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5jb250ZXh0LFxuXHRcdFx0XHRcdCdwYXRoJzogcm9ja2V0X21peHBhbmVsX2RhdGEucGF0aFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRyYWNrIENUQSBjbGlja3MgZm9yIFJvY2tldCBJbnNpZ2h0cyBpbiB0aGUgc2V0dGluZ3Mgc2F2ZWQgbm90aWNlLlxuXHQkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI3JvY2tldF9yaV9uZXdfdGVzdF9zYXZlX3NldHRpbmdzX2xpbmsnLCBmdW5jdGlvbigpIHtcblx0XHQvLyBUcmFjayBkaXJlY3RseSB3aXRoIE1peHBhbmVsXG5cdFx0aWYgKHR5cGVvZiBtaXhwYW5lbCA9PT0gJ3VuZGVmaW5lZCcgfHwgIW1peHBhbmVsLnRyYWNrKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgaWYgdXNlciBoYXMgb3B0ZWQgaW5cblx0XHRpZiAodHlwZW9mIHJvY2tldF9taXhwYW5lbF9kYXRhID09PSAndW5kZWZpbmVkJyB8fCAhcm9ja2V0X21peHBhbmVsX2RhdGEub3B0aW5fZW5hYmxlZCB8fCByb2NrZXRfbWl4cGFuZWxfZGF0YS5vcHRpbl9lbmFibGVkID09PSAnMCcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZGVudGlmeSB1c2VyIGlmIGF2YWlsYWJsZVxuXHRcdGlmIChyb2NrZXRfbWl4cGFuZWxfZGF0YS51c2VyX2lkICYmIHR5cGVvZiBtaXhwYW5lbC5pZGVudGlmeSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bWl4cGFuZWwuaWRlbnRpZnkocm9ja2V0X21peHBhbmVsX2RhdGEudXNlcl9pZCk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJhY2sgdGhlIEJ1dHRvbiBDbGlja2VkIGV2ZW50XG5cdFx0bWl4cGFuZWwudHJhY2soJ1JvY2tldCBJbnNpZ2h0cyBDVEEgY2xpY2sgZnJvbSBzZXR0aW5ncyBub3RpY2UnLCB7XG5cdFx0XHQnYnV0dG9uJzogJ0NUQSBvbiBzYXZlIHNldHRpbmdzIG5vdGljZScsXG5cdFx0XHQnc291cmNlJzogJ1NldHRpbmdzIFNhdmVkIE5vdGljZScsXG5cdFx0XHQncGx1Z2luJzogcm9ja2V0X21peHBhbmVsX2RhdGEucGx1Z2luLFxuXHRcdFx0J2JyYW5kJzogcm9ja2V0X21peHBhbmVsX2RhdGEuYnJhbmQsXG5cdFx0XHQnYXBwbGljYXRpb24nOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5hcHAsXG5cdFx0XHQnY29udGV4dCc6IHJvY2tldF9taXhwYW5lbF9kYXRhLmNvbnRleHQsXG5cdFx0XHQncGF0aCc6IHJvY2tldF9taXhwYW5lbF9kYXRhLnBhdGhcblx0XHR9KTtcblx0fSk7XG59KTtcbiIsImNsYXNzIFJvY2tldE1peHBhbmVsIHtcblxuXHR0cmFja2VkVGFicyA9IFtcblx0XHQnZGFzaGJvYXJkJyxcblx0XHQncm9ja2V0X2luc2lnaHRzJyxcblx0XHQncGFnZV9jZG4nLFxuXHRcdCdmaWxlX29wdGltaXphdGlvbicsXG5cdFx0J21lZGlhJyxcblx0XHQncHJlbG9hZCcsXG5cdFx0J2FkdmFuY2VkX2NhY2hlJyxcblx0XHQnZGF0YWJhc2UnLFxuXHRcdCdoZWFydGJlYXQnLFxuXHRcdCdhZGRvbnMnLFxuXHRcdCdpbWFnaWZ5Jyxcblx0XHQndHV0b3JpYWxzJyxcblx0XHQncGx1Z2lucycsXG5cdFx0J3Rvb2xzJ1xuXHRdO1xuXG5cdGNvbnN0cnVjdG9yKCBjb25maWcgKSB7XG5cdFx0dGhpcy5jb25maWcgPSBjb25maWc7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIGhhbmRsZXIuXG5cdCAqL1xuXHRpbml0KCkge1xuXHRcdGlmICggdHlwZW9mIG1peHBhbmVsID09PSAndW5kZWZpbmVkJyB8fCAhbWl4cGFuZWwudHJhY2sgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICggIXRoaXMuY29uZmlnLm9wdGluX2VuYWJsZWQgfHwgdGhpcy5jb25maWcub3B0aW5fZW5hYmxlZCA9PT0gJzAnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdG1peHBhbmVsLmlkZW50aWZ5KHRoaXMuY29uZmlnLnVzZXJfaWQpO1xuXHRcdHRoaXMuX2luaXRMaXN0ZW5lcnMoIHRoaXMgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgZXZlbnQgbGlzdGVuZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2VsZiBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdCwgdXNlZCBmb3IgYmluZGluZyBcInRoaXNcIiB0byB0aGUgbGlzdGVuZXJzLlxuXHQgKi9cblx0X2luaXRMaXN0ZW5lcnMoIHNlbGYgKSB7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdoYXNoY2hhbmdlJywgc2VsZi5fb25IYXNoQ2hhbmdlLmJpbmQoIHNlbGYgKSApO1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIHNlbGYuX29uUGFnZUxvYWQuYmluZCggc2VsZiApICk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgbGlzdGVuZXIgd2hlbiB0aGUgaGFzaCBjaGFuZ2VkIGluIGEgcGFnZS5cblx0ICpcblx0ICogQHBhcmFtIEV2ZW50IGV2ZW50IEV2ZW50IGluc3RhbmNlLlxuXHQgKi9cblx0X29uSGFzaENoYW5nZSggZXZlbnQgKSB7XG5cdFx0Y29uc3Qgb2xkSGFzaCA9IHRoaXMuX2NsZWFuSGFzaChuZXcgVVJMKGV2ZW50Lm9sZFVSTCkuaGFzaCk7XG5cdFx0Y29uc3QgbmV3SGFzaCA9IHRoaXMuX2NsZWFuSGFzaChuZXcgVVJMKGV2ZW50Lm5ld1VSTCkuaGFzaCk7XG5cblx0XHRpZiAoICF0aGlzLl9jYW5UcmFja1RhYihuZXdIYXNoKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9zZW5kUGFnZVZpZXdlZEV2ZW50KHRoaXMuX2dldFNvdXJjZSggb2xkSGFzaCApLCBuZXdIYXNoKTtcblx0fVxuXG5cdF9vblBhZ2VMb2FkKCkge1xuXHRcdGNvbnN0IG5ld0hhc2ggPSB0aGlzLl9jbGVhbkhhc2god2luZG93LmxvY2F0aW9uLmhhc2gpO1xuXHRcdGlmICggIXRoaXMuX2NhblRyYWNrVGFiKG5ld0hhc2gpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX3NlbmRQYWdlVmlld2VkRXZlbnQodGhpcy5fZ2V0U291cmNlKCksIG5ld0hhc2gpO1xuXHR9XG5cblx0X2NsZWFuSGFzaCggdGFiSGFzaCApIHtcblx0XHRpZiAoIXRhYkhhc2ggfHwgIXRhYkhhc2guc3RhcnRzV2l0aCgnIycpKSB7XG5cdFx0XHRyZXR1cm4gdGFiSGFzaDtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYkhhc2guc3Vic3RyaW5nKDEpO1xuXHR9XG5cblx0X2NhblRyYWNrVGFiKHRhYkhhc2gpIHtcblx0XHRyZXR1cm4gdGhpcy50cmFja2VkVGFicy5pbmNsdWRlcyh0YWJIYXNoKTtcblx0fVxuXG5cdF9nZXRTb3VyY2UoIG9sZEhhc2ggPSAnJyApIHtcblx0XHRpZiAoIG9sZEhhc2ggKSB7XG5cdFx0XHRyZXR1cm4gYHNldHRpbmdzXyR7b2xkSGFzaH1gO1xuXHRcdH1cblxuXHRcdGxldCBzb3VyY2UgPSB0aGlzLl9nZXRTb3VyY2VGcm9tUXVlcnlTdHJpbmdBbmRSZW1vdmVJdCgpO1xuXHRcdGlmICggc291cmNlICkge1xuXHRcdFx0cmV0dXJuIHNvdXJjZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZ2V0U291cmNlRnJvbVJlZmVycmVyKCk7XG5cdH1cblxuXHRfZ2V0U291cmNlRnJvbVF1ZXJ5U3RyaW5nQW5kUmVtb3ZlSXQoKSB7XG5cdFx0Y29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gdXJsLnNlYXJjaFBhcmFtcztcblxuXHRcdC8vIDEuIENoZWNrIGZvciBleHBsaWNpdCBzb3VyY2UgcGFyYW1cblx0XHRpZiAoIXVybFBhcmFtcy5oYXMoJ3JvY2tldF9zb3VyY2UnKSkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdC8vIDIuIEdldCB0aGUgdmFsdWVcblx0XHRjb25zdCBzb3VyY2VWYWx1ZSA9IHVybFBhcmFtcy5nZXQoJ3JvY2tldF9zb3VyY2UnKTtcblxuXHRcdC8vIDMuIERlbGV0ZSB0aGUgcGFyYW1ldGVyIGZyb20gdGhlIFVSTFNlYXJjaFBhcmFtcyBvYmplY3Rcblx0XHR1cmxQYXJhbXMuZGVsZXRlKCdyb2NrZXRfc291cmNlJyk7XG5cblx0XHQvLyA0LiBVcGRhdGUgdGhlIGJyb3dzZXIncyBVUkwgdXNpbmcgdGhlIEhpc3RvcnkgQVBJXG5cdFx0Ly8gVGhpcyByZW1vdmVzIHRoZSBwYXJhbWV0ZXIgZnJvbSB0aGUgVVJMIGJhciB3aXRob3V0IHJlbG9hZGluZyB0aGUgcGFnZS5cblx0XHR3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIHVybC5zZWFyY2ggPyB1cmwuaHJlZiA6IHVybC5wYXRobmFtZSk7XG5cblx0XHQvLyA1LiBSZXR1cm4gdGhlIHJldHJpZXZlZCB2YWx1ZVxuXHRcdHJldHVybiBzb3VyY2VWYWx1ZTtcblx0fVxuXG5cdF9nZXRTb3VyY2VGcm9tUmVmZXJyZXIoKSB7XG5cdFx0Y29uc3QgcmVmZXJyZXIgPSBkb2N1bWVudC5yZWZlcnJlcjtcblx0XHRpZiAoIXJlZmVycmVyKSB7XG5cdFx0XHRyZXR1cm4gJ25vcmVmZXJyZXInO1xuXHRcdH1cblx0XHRpZiAoIXJlZmVycmVyLmluY2x1ZGVzKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSkpIHtcblx0XHRcdHJldHVybiAnZXh0ZXJuYWwnO1xuXHRcdH1cblx0XHRyZXR1cm4gJ2ludGVybmFsJztcblx0fVxuXG5cdF9zZW5kUGFnZVZpZXdlZEV2ZW50KHNvdXJjZSwgbmV3SGFzaCkge1xuXHRcdG1peHBhbmVsLnRyYWNrKCdQYWdlIFZpZXdlZCcsIHtcblx0XHRcdHBhdGg6IGAvd3AtYWRtaW4vb3B0aW9ucy1nZW5lcmFsLnBocD9wYWdlPXdwcm9ja2V0IyR7bmV3SGFzaH1gLFxuXHRcdFx0cGFnZV9uYW1lOiBuZXdIYXNoLnJlcGxhY2UoJ18nLCAnICcpLFxuXHRcdFx0c291cmNlOiBzb3VyY2UsXG5cdFx0XHRwbHVnaW46IHJvY2tldF9taXhwYW5lbF9kYXRhLnBsdWdpbixcblx0XHRcdGJyYW5kOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5icmFuZCxcblx0XHRcdGFwcGxpY2F0aW9uOiByb2NrZXRfbWl4cGFuZWxfZGF0YS5hcHAsXG5cdFx0XHRjb250ZXh0OiByb2NrZXRfbWl4cGFuZWxfZGF0YS5jb250ZXh0XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTmFtZWQgc3RhdGljIGNvbnN0cnVjdG9yIHRvIGVuY2Fwc3VsYXRlIGhvdyB0byBjcmVhdGUgdGhlIG9iamVjdC5cblx0ICovXG5cdHN0YXRpYyBydW4oKSB7XG5cdFx0Ly8gQmFpbCBvdXQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gbm90IHBhc3NlZCBmcm9tIHRoZSBzZXJ2ZXIuXG5cdFx0aWYgKCB0eXBlb2Ygcm9ja2V0X21peHBhbmVsX2RhdGEgPT09ICd1bmRlZmluZWQnICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluc3RhbmNlID0gbmV3IFJvY2tldE1peHBhbmVsKCByb2NrZXRfbWl4cGFuZWxfZGF0YSApO1xuXHRcdGluc3RhbmNlLmluaXQoKTtcblx0fVxufVxuXG5Sb2NrZXRNaXhwYW5lbC5ydW4oKTtcbiIsImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyICRwYWdlTWFuYWdlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIud3ByLUNvbnRlbnRcIik7XG4gICAgaWYoJHBhZ2VNYW5hZ2VyKXtcbiAgICAgICAgbmV3IFBhZ2VNYW5hZ2VyKCRwYWdlTWFuYWdlcik7XG4gICAgfVxuXG59KTtcblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG5cdFx0Q0xBU1MgUEFHRU1BTkFHRVJcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogTWFuYWdlcyB0aGUgZGlzcGxheSBvZiBwYWdlcyAvIHNlY3Rpb24gZm9yIFdQIFJvY2tldCBwbHVnaW5cbiAqXG4gKiBQdWJsaWMgbWV0aG9kIDpcbiAgICAgZGV0ZWN0SUQgLSBEZXRlY3QgSUQgd2l0aCBoYXNoXG4gICAgIGdldEJvZHlUb3AgLSBHZXQgYm9keSB0b3AgcG9zaXRpb25cblx0IGNoYW5nZSAtIERpc3BsYXlzIHRoZSBjb3JyZXNwb25kaW5nIHBhZ2VcbiAqXG4gKi9cblxuZnVuY3Rpb24gUGFnZU1hbmFnZXIoYUVsZW0pIHtcblxuICAgIHZhciByZWZUaGlzID0gdGhpcztcblxuICAgIHRoaXMuJGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud3ByLWJvZHknKTtcbiAgICB0aGlzLiRtZW51SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud3ByLW1lbnVJdGVtJyk7XG4gICAgdGhpcy4kc3VibWl0QnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLndwci1Db250ZW50ID4gZm9ybSA+ICN3cHItb3B0aW9ucy1zdWJtaXQnKTtcbiAgICB0aGlzLiRwYWdlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy53cHItUGFnZScpO1xuICAgIHRoaXMuJHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud3ByLVNpZGViYXInKTtcbiAgICB0aGlzLiRjb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLndwci1Db250ZW50Jyk7XG4gICAgdGhpcy4kdGlwcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53cHItQ29udGVudC10aXBzJyk7XG4gICAgdGhpcy4kbGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud3ByLWJvZHkgYScpO1xuICAgIHRoaXMuJG1lbnVJdGVtID0gbnVsbDtcbiAgICB0aGlzLiRwYWdlID0gbnVsbDtcbiAgICB0aGlzLnBhZ2VJZCA9IG51bGw7XG4gICAgdGhpcy5ib2R5VG9wID0gMDtcbiAgICB0aGlzLmJ1dHRvblRleHQgPSB0aGlzLiRzdWJtaXRCdXR0b24udmFsdWU7XG5cbiAgICByZWZUaGlzLmdldEJvZHlUb3AoKTtcblxuICAgIC8vIElmIHVybCBwYWdlIGNoYW5nZVxuICAgIHdpbmRvdy5vbmhhc2hjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVmVGhpcy5kZXRlY3RJRCgpO1xuICAgIH1cblxuICAgIC8vIElmIGhhc2ggYWxyZWFkeSBleGlzdCAoYWZ0ZXIgcmVmcmVzaCBwYWdlIGZvciBleGFtcGxlKVxuICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5oYXNoKXtcbiAgICAgICAgdGhpcy5ib2R5VG9wID0gMDtcbiAgICAgICAgdGhpcy5kZXRlY3RJRCgpO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3cHItaGFzaCcpO1xuICAgICAgICB0aGlzLmJvZHlUb3AgPSAwO1xuXG4gICAgICAgIGlmKHNlc3Npb24pe1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBzZXNzaW9uO1xuICAgICAgICAgICAgdGhpcy5kZXRlY3RJRCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICB0aGlzLiRtZW51SXRlbXNbMF0uY2xhc3NMaXN0LmFkZCgnaXNBY3RpdmUnKTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3cHItaGFzaCcsICdkYXNoYm9hcmQnKTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyNkYXNoYm9hcmQnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xpY2sgbGluayBzYW1lIGhhc2hcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGxpbmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuJGxpbmtzW2ldLm9uY2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJlZlRoaXMuZ2V0Qm9keVRvcCgpO1xuICAgICAgICAgICAgdmFyIGhyZWZTcGxpdCA9IHRoaXMuaHJlZi5zcGxpdCgnIycpWzFdO1xuICAgICAgICAgICAgaWYoaHJlZlNwbGl0ID09IHJlZlRoaXMucGFnZUlkICYmIGhyZWZTcGxpdCAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJlZlRoaXMuZGV0ZWN0SUQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2xpY2sgbGlua3Mgbm90IFdQIHJvY2tldCB0byByZXNldCBoYXNoXG4gICAgdmFyICRvdGhlcmxpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2FkbWlubWVudW1haW4gYSwgI3dwYWRtaW5iYXIgYScpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgJG90aGVybGlua3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgJG90aGVybGlua3NbaV0ub25jbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3dwci1oYXNoJywgJycpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd3cHItY2RuLXN0YXRlLWNoYW5nZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZWZUaGlzLnVwZGF0ZVN1Ym1pdERpc2FibGVkU3RhdGUoKTtcbiAgICB9ICk7XG5cbn1cblxuXG4vKlxuKiBQYWdlIGRldGVjdCBJRFxuKi9cblBhZ2VNYW5hZ2VyLnByb3RvdHlwZS5kZXRlY3RJRCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucGFnZUlkID0gd2luZG93LmxvY2F0aW9uLmhhc2guc3BsaXQoJyMnKVsxXTtcbiAgICB0aGlzLnBhZ2VJZCA9IHRoaXMucGFnZUlkLmluY2x1ZGVzKCc9JykgPyB0aGlzLnBhZ2VJZC5zcGxpdCgnPScpWzBdIDogdGhpcy5wYWdlSWQ7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3dwci1oYXNoJywgdGhpcy5wYWdlSWQpO1xuXG4gICAgdGhpcy4kcGFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53cHItUGFnZSMnICsgdGhpcy5wYWdlSWQpO1xuICAgIHRoaXMuJG1lbnVJdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dwci1uYXYtJyArIHRoaXMucGFnZUlkKTtcblxuICAgIHRoaXMuY2hhbmdlKCk7XG59XG5cblxuXG4vKlxuKiBHZXQgYm9keSB0b3AgcG9zaXRpb25cbiovXG5QYWdlTWFuYWdlci5wcm90b3R5cGUuZ2V0Qm9keVRvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBib2R5UG9zID0gdGhpcy4kYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLmJvZHlUb3AgPSBib2R5UG9zLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCAtIDQ3OyAvLyAjd3BhZG1pbmJhciArIHBhZGRpbmctdG9wIC53cHItd3JhcCAtIDEgLSA0N1xufVxuXG5cblxuLypcbiogUGFnZSBjaGFuZ2VcbiovXG5QYWdlTWFuYWdlci5wcm90b3R5cGUuY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgcmVmVGhpcyA9IHRoaXM7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IHJlZlRoaXMuYm9keVRvcDtcblxuICAgIC8vIEhpZGUgb3RoZXIgcGFnZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuJHBhZ2VzW2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kbWVudUl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuJG1lbnVJdGVtc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdpc0FjdGl2ZScpO1xuICAgIH1cblxuICAgIC8vIFNob3cgY3VycmVudCBkZWZhdWx0IHBhZ2VcbiAgICB0aGlzLiRwYWdlLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIHRoaXMuJHN1Ym1pdEJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICAgIGlmICggbnVsbCA9PT0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oICd3cHItc2hvdy1zaWRlYmFyJyApICkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSggJ3dwci1zaG93LXNpZGViYXInLCAnb24nICk7XG4gICAgfVxuXG4gICAgaWYgKCAnb24nID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd3ByLXNob3ctc2lkZWJhcicpICkge1xuICAgICAgICB0aGlzLiRzaWRlYmFyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgfSBlbHNlIGlmICggJ29mZicgPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3cHItc2hvdy1zaWRlYmFyJykgKSB7XG4gICAgICAgIHRoaXMuJHNpZGViYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3dwci1qcy10aXBzJykucmVtb3ZlQXR0cmlidXRlKCAnY2hlY2tlZCcgKTtcbiAgICB9XG5cbiAgICB0aGlzLiR0aXBzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIHRoaXMuJG1lbnVJdGVtLmNsYXNzTGlzdC5hZGQoJ2lzQWN0aXZlJyk7XG4gICAgdGhpcy4kc3VibWl0QnV0dG9uLnZhbHVlID0gdGhpcy5idXR0b25UZXh0O1xuICAgIHRoaXMuJGNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnaXNOb3RGdWxsJyk7XG5cbiAgICBjb25zdCBwYWdlc1dpdGhvdXRTdWJtaXQgPSBbXG4gICAgICAgICdkYXNoYm9hcmQnLFxuICAgICAgICAnYWRkb25zJyxcbiAgICAgICAgJ2RhdGFiYXNlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ2FkZG9ucycsXG4gICAgICAgICdpbWFnaWZ5JyxcbiAgICAgICAgJ3R1dG9yaWFscycsXG4gICAgICAgICdwbHVnaW5zJyxcbiAgICBdO1xuXG4gICAgY29uc3QgcGFnZXNXaXRob3V0U2lkZWJhclRvZ2dsZSA9IFtcbiAgICAgICAgJ2Rhc2hib2FyZCcsXG4gICAgICAgICdpbWFnaWZ5JyxcbiAgICAgICAgJ3BhZ2VfY2RuJyxcbiAgICBdO1xuXG4gICAgLy8gRXhjZXB0aW9uIGZvciBkYXNoYm9hcmRcbiAgICBpZih0aGlzLnBhZ2VJZCA9PSBcImRhc2hib2FyZFwiKXtcbiAgICAgICAgdGhpcy4kc2lkZWJhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB0aGlzLiRjb250ZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzTm90RnVsbCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2VJZCA9PSBcImltYWdpZnlcIikge1xuICAgICAgICB0aGlzLiRzaWRlYmFyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgaWYgKHBhZ2VzV2l0aG91dFNpZGViYXJUb2dnbGUuaW5jbHVkZXModGhpcy5wYWdlSWQpKSB7XG4gICAgICAgIHRoaXMuJHRpcHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBpZiAocGFnZXNXaXRob3V0U3VibWl0LmluY2x1ZGVzKHRoaXMucGFnZUlkKSkge1xuICAgICAgICB0aGlzLiRzdWJtaXRCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN1Ym1pdERpc2FibGVkU3RhdGUoKTtcblxuXHQvLyBEaXNwYXRjaCBjdXN0b20gZXZlbnQgYWZ0ZXIgcGFnZSBuYXZpZ2F0aW9uIGZvciBvdGhlciBzY3JpcHRzIHRvIGhvb2sgaW50by5cblx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3JvY2tldEpzQWZ0ZXJQYWdlTmF2aWdhdGlvbicsIHtcblx0XHRkZXRhaWw6IHtcblx0XHRcdHBhZ2VJZDogdGhpcy5wYWdlSWQsXG5cdFx0XHRzdWJtaXRCdXR0b246IHRoaXMuJHN1Ym1pdEJ1dHRvbixcblx0XHR9XG5cdH0gKSApO1xufTtcblxuXG4vKlxuKiBVcGRhdGUgc3VibWl0IGJ1dHRvbiBkaXNhYmxlZCBzdGF0ZVxuKi9cblBhZ2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTdWJtaXREaXNhYmxlZFN0YXRlID0gZnVuY3Rpb24oKSB7XG5cdGlmICghdGhpcy4kc3VibWl0QnV0dG9uIHx8ICdub25lJyA9PT0gdGhpcy4kc3VibWl0QnV0dG9uLnN0eWxlLmRpc3BsYXkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgaXNDZG5QYWdlID0gJ3BhZ2VfY2RuJyA9PT0gdGhpcy5wYWdlSWQ7XG5cdHZhciBwYXVzZWRSb2NrZXRDZG5CbG9jayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0Jy53cHItUGFnZSNwYWdlX2NkbiAud3ByLW5vdGljZS53cHItcmktbm90aWNlLndwci1jZG4tZXhwaXJlZF9fbm90aWNlJ1xuXHQpO1xuXG5cdHRoaXMuJHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IGlzQ2RuUGFnZSAmJiAhIXBhdXNlZFJvY2tldENkbkJsb2NrO1xufTtcbiIsIi8qKlxuICogUmVjb21tZW5kYXRpb25zIFdpZGdldCBIYW5kbGVyXG4gKlxuICogTGlzdGVucyBmb3IgR2xvYmFsIFNjb3JlIHVwZGF0ZXMgYW5kIGZldGNoZXMvdXBkYXRlcyByZWNvbW1lbmRhdGlvbnMgZHluYW1pY2FsbHkuXG4gKi9cbnZhciAkID0galF1ZXJ5O1xuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIHJlY29tbWVuZGF0aW9ucyB3aWRnZXQgVUkgYmFzZWQgb24gdGhlIGZldGNoZWQgZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUaGUgcmVjb21tZW5kYXRpb25zIGRhdGEgZnJvbSB0aGUgQVBJLlxuXHQgKiBAcGFyYW0ge0FycmF5fSBkYXRhLnJlY29tbWVuZGF0aW9ucyAtIEFycmF5IG9mIHJlY29tbWVuZGF0aW9ucyBkZXRhaWxzLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGF0YS5yZWNvbW1lbmRhdGlvbnMuaHRtbCAtIFJlY29tbWVuZGF0aW9ucyBIVE1MLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlUmVjb21tZW5kYXRpb25zV2lkZ2V0KGRhdGEpIHtcblx0XHRjb25zdCB3aWRnZXQgPSAkKCcud3ByLXJlY29tbWVuZGF0aW9ucycpO1xuXG5cdFx0aWYgKCF3aWRnZXQgfHwgIWRhdGE/LnJlY29tbWVuZGF0aW9ucz8uaHRtbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFVwZGF0ZSB0aGUgd2lkZ2V0IGNvbnRlbnQgd2l0aCB0aGUgbmV3IHJlY29tbWVuZGF0aW9ucyBIVE1MXG5cdFx0d2lkZ2V0LnJlcGxhY2VXaXRoKGRhdGE/LnJlY29tbWVuZGF0aW9ucz8uaHRtbCk7XG5cdH1cblxuXG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIGN1cnJlbnQgcmVjb21tZW5kYXRpb25zIHN0YXR1cyBmcm9tIHRoZSBSRVNUIEFQSS5cblx0ICovXG5cdGZ1bmN0aW9uIGZldGNoUmVjb21tZW5kYXRpb25zU3RhdHVzKCkge1xuXHRcdC8vIFVzZSBXb3JkUHJlc3MgUkVTVCBBUEkgY2xpZW50IGlmIGF2YWlsYWJsZVxuXHRcdGlmICh3aW5kb3cud3AgJiYgd2luZG93LndwLmFwaUZldGNoKSB7XG5cdFx0XHR3aW5kb3cud3AuYXBpRmV0Y2goe1xuXHRcdFx0XHRwYXRoOiAnL3dwLXJvY2tldC92MS9yZWNvbW1lbmRhdGlvbnMnXG5cdFx0XHR9KVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY29tbWVuZGF0aW9uc1dpZGdldChkYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCByZWNvbW1lbmRhdGlvbnMgc3RhdHVzOicsIGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEZhbGxiYWNrIHRvIGZldGNoIEFQSVxuXHRcdFx0ZmV0Y2god2luZG93LndwQXBpU2V0dGluZ3M/LnJvb3QgKyAnd3Atcm9ja2V0L3YxL3JlY29tbWVuZGF0aW9ucycsIHtcblx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdCdYLVdQLU5vbmNlJzogd2luZG93LndwQXBpU2V0dGluZ3M/Lm5vbmNlIHx8ICcnXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuXHRcdFx0XHRcdGlmICghcmVzcG9uc2Uub2spIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignTmV0d29yayByZXNwb25zZSB3YXMgbm90IG9rJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5qc29uKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG5cdFx0XHRcdFx0dXBkYXRlUmVjb21tZW5kYXRpb25zV2lkZ2V0KGRhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHJlY29tbWVuZGF0aW9ucyBzdGF0dXM6JywgZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTGlzdGVuIGZvciBHbG9iYWwgU2NvcmUgdXBkYXRlIGV2ZW50LlxuXHQgKiBUaGlzIGlzIGZpcmVkIGJ5IGFqYXguanMgd2hlbiB0aGUgR2xvYmFsIFNjb3JlIHBvbGxpbmcgZGV0ZWN0cyBhIGNoYW5nZS5cblx0ICovXG5cdCQoZG9jdW1lbnQpLm9uKCd3cHJHbG9iYWxTY29yZVVwZGF0ZWQgcm9ja2V0LWluc2lnaHRzLXBhZ2UtYWRkZWQgcm9ja2V0LWluc2lnaHRzLXBhZ2UtcmV0ZXN0JywgKCkgPT4ge1xuXHRcdGZldGNoUmVjb21tZW5kYXRpb25zU3RhdHVzKCk7XG5cdH0pXG59KTtcbiIsIiggKCBkb2N1bWVudCApID0+IHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBQb2xscyB0aGUgUm9ja2V0Q0ROIHN1YnNjcmlwdGlvbiBlbmRwb2ludCB1bnRpbCBpc19sb2FkaW5nIGJlY29tZXMgZmFsc2UuXG5cdCAqL1xuXHRjbGFzcyBSb2NrZXRDRE5TdWJzY3JpcHRpb25Qb2xsZXIge1xuXHRcdGNvbnN0cnVjdG9yKCkge1xuXHRcdFx0dGhpcy5wYXRoID0gJy93cC1yb2NrZXQvdjEvcm9ja2V0Y2RuL3N1YnNjcmlwdGlvbic7XG5cdFx0XHR0aGlzLnBvbGxJbnRlcnZhbCA9IDEwMDAwOyAvLyAxMCBzZWNvbmRzLlxuXHRcdFx0dGhpcy5tYXhSZXRyaWVzID0gNjA7IC8vIDEwIG1pbnV0ZXMgdG90YWwuXG5cdFx0XHR0aGlzLnRpbWVySWQgPSBudWxsO1xuXHRcdFx0dGhpcy5yZXRyeUNvdW50ID0gMDtcblxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3JvY2tldENETlN1YnNjcmlwdGlvbkxvYWRpbmcnLCAoKSA9PiB0aGlzLnN0YXJ0KCkgKTtcblxuXHRcdFx0Ly8gUmUtdHJpZ2dlciBwb2xsaW5nIGFmdGVyIHBhZ2UgcmVmcmVzaC5cblx0XHRcdGNvbnN0IGNsYXNzZXMgPSBbXG5cdFx0XHRcdCcud3ByLWljb24tb3JhbmdlLWxvYWRlcicsXG5cdFx0XHRcdCcud3ByLWNkbi1idWlsdC1pbi0tZGlzYWJsZWQnLFxuXHRcdFx0XTtcblxuXHRcdFx0Y29uc3QgYWxsUHJlc2VudCA9IGNsYXNzZXMuZXZlcnkoIGNscyA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBjbHMgKSAhPT0gbnVsbCApO1xuXG5cdFx0XHRpZiAoIGFsbFByZXNlbnQgKSB7XG5cdFx0XHRcdHRoaXMuc3RhcnQoKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFN0YXJ0cyBwb2xsaW5nLlxuXHRcdCAqL1xuXHRcdHN0YXJ0KCkge1xuXHRcdFx0aWYgKCB0aGlzLnRpbWVySWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yZXRyeUNvdW50ID0gMDtcblx0XHRcdHRoaXMucG9sbCgpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFN0b3BzIHBvbGxpbmcuXG5cdFx0ICovXG5cdFx0c3RvcCgpIHtcblx0XHRcdGlmICggdGhpcy50aW1lcklkICkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQoIHRoaXMudGltZXJJZCApO1xuXHRcdFx0XHR0aGlzLnRpbWVySWQgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFBlcmZvcm1zIGEgc2luZ2xlIHBvbGwgYW5kIHNjaGVkdWxlcyB0aGUgbmV4dCBvbmUgaWYgc3RpbGwgbG9hZGluZy5cblx0XHQgKi9cblx0XHRwb2xsKCkge1xuXHRcdFx0aWYgKCB0aGlzLnJldHJ5Q291bnQgPj0gdGhpcy5tYXhSZXRyaWVzICkge1xuXHRcdFx0XHR0aGlzLnN0b3AoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJldHJ5Q291bnQrKztcblxuXHRcdFx0d2luZG93LndwLmFwaUZldGNoKCB7XG5cdFx0XHRcdHBhdGg6IHRoaXMucGF0aCxcblx0XHRcdFx0bWV0aG9kOiAnR0VUJyxcblx0XHRcdH0gKS50aGVuKCAoIHJlc3BvbnNlICkgPT4ge1xuXHRcdFx0XHRpZiAoICEgcmVzcG9uc2UgfHwgISByZXNwb25zZS5pc19sb2FkaW5nICkge1xuXHRcdFx0XHRcdHRoaXMuc3RvcCgpO1xuXHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnRpbWVySWQgPSBzZXRUaW1lb3V0KCAoKSA9PiB0aGlzLnBvbGwoKSwgdGhpcy5wb2xsSW50ZXJ2YWwgKTtcblx0XHRcdH0gKS5jYXRjaCggKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnRpbWVySWQgPSBzZXRUaW1lb3V0KCAoKSA9PiB0aGlzLnBvbGwoKSwgdGhpcy5wb2xsSW50ZXJ2YWwgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdH1cblxuXHRuZXcgUm9ja2V0Q0ROU3Vic2NyaXB0aW9uUG9sbGVyKCk7XG59ICkoIGRvY3VtZW50ICk7IiwiLyplc2xpbnQtZW52IGVzNiwgYnJvd3NlciovXG4vKiBnbG9iYWwgTWljcm9Nb2RhbCwgbWl4cGFuZWwsIHJvY2tldF9taXhwYW5lbF9kYXRhLCByb2NrZXRfYWpheF9kYXRhLCBhamF4dXJsICovXG4oICggZG9jdW1lbnQsIHdpbmRvdyApID0+IHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEJBTk5FUl9TVEFURSA9IHtcblx0XHRPUEVORUQ6IGZhbHNlLCAgICAvLyBCaWcgQ1RBIC0gb3BlbmVkIHN0YXRlXG5cdFx0Q09MTEFQU0VEOiB0cnVlICAgLy8gU21hbGwgQ1RBIC0gY29sbGFwc2VkIHN0YXRlXG5cdH07XG5cblx0Ly8gUmVnaXN0ZXIgZWFybHkgc28gd2UgY2F0Y2ggdGhlIHdwci1jZG4tc3RhdGUtY2hhbmdlIGV2ZW50LlxuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnd3ByLWNkbi1zdGF0ZS1jaGFuZ2UnLCB0cmFja0NETk1vZGVTZWxlY3Rpb24gKTtcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3JvY2tldENETkJhbm5lckF1dG9FeHBhbmRlZCcsICgpID0+IHRyYWNrUm9ja2V0Q0ROVXBzZWxsQmFubmVyRXhwYW5kZWQoJ2F1dG9fbGltaXRfcmVhY2hlZCcpICk7XG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdyb2NrZXRDRE5CYW5uZXJBdXRvQ29sbGFwc2VkJywgKCkgPT4gdHJhY2tSb2NrZXRDRE5VcHNlbGxCYW5uZXJDb2xsYXBzZWQoICdhdXRvX2xpbWl0X3JlbGVhc2VkJyApICk7XG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdyb2NrZXRDRE5CYW5uZXJGaXJzdFZpc2libGUnLCAoKSA9PiB0cmFja1JvY2tldENETlVwc2VsbEJhbm5lclZpZXdlZCggQkFOTkVSX1NUQVRFLkNPTExBUFNFRCApICk7XG5cblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy53cHItcm9ja2V0Y2RuLW9wZW4nICkuZm9yRWFjaCggKCBlbCApID0+IHtcblx0XHRcdGVsLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsICggZSApID0+IHtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRjb25zdCBpc0NUQSA9IGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwci1yb2NrZXRjZG4tcHJpY2luZy0tY3RhJyApO1xuXHRcdFx0XHRjaGVja0J1dHRvblVybEFuZE9wZW4oIGlzQ1RBICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0Ly8gQWx3YXlzIGluaXRpYWxpemUgTWljcm9Nb2RhbCB0byBzZXQgdXAgY2xvc2UgaGFuZGxlcnNcblx0XHRNaWNyb01vZGFsLmluaXQoIHtcblx0XHRcdGRpc2FibGVTY3JvbGw6IHRydWVcblx0XHR9ICk7XG5cblx0XHRtYXliZU9wZW5Nb2RhbEZyb21VUkwoKTtcblxuXHRcdC8vIE9ubHkgYXV0by1vcGVuIG1vZGFsIGlmIHRoZXJlJ3Mgbm8gZGlyZWN0IGJ1dHRvbiBVUkxcblx0XHRpZiAoICEgd2luZG93LnJvY2tldGNkbkJ1dHRvblVybCB8fCB3aW5kb3cucm9ja2V0Y2RuQnV0dG9uVXJsID09PSAnJyApIHtcblx0XHRcdG1heWJlT3Blbk1vZGFsKCk7XG5cblx0XHRcdGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb2NrZXRjZG4taWZyYW1lJyk7XG5cdFx0XHRjb25zdCBsb2FkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3ByLXJvY2tldGNkbi1tb2RhbC1sb2FkZXInKTtcblx0XHRcdGlmICggaWZyYW1lICYmIGxvYWRlciApIHtcblx0XHRcdFx0aWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRsb2FkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgdXNlciBpcyBjdXJyZW50bHkgb24gdGhlIENETiB0YWIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgb24gQ0ROIHRhYiwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0ZnVuY3Rpb24gaXNPbkNETlRhYigpIHtcblx0XHRyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhhc2ggPT09ICcjcGFnZV9jZG4nO1xuXHR9XG5cblx0ZnVuY3Rpb24gbWF5YmVUcmFja0Jhbm5lclZpZXcoKSB7XG5cdFx0Y29uc3Qgc21hbGxDVEEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnI3dwci1yb2NrZXRjZG4tY3RhLXNtYWxsJyApO1xuXHRcdGNvbnN0IGJpZ0NUQSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjd3ByLXJvY2tldGNkbi1jdGEnICk7XG5cblx0XHQvLyBPbmx5IHRyYWNrIGlmIG9uZSBvZiB0aGUgYmFubmVycyBpcyB2aXNpYmxlLlxuXHRcdGlmICggYmlnQ1RBICYmICEgYmlnQ1RBLmNsYXNzTGlzdC5jb250YWlucyggJ3dwci1pc0hpZGRlbicgKSApIHtcblx0XHRcdHRyYWNrUm9ja2V0Q0ROVXBzZWxsQmFubmVyVmlld2VkKCBCQU5ORVJfU1RBVEUuT1BFTkVEICk7XG5cdFx0fSBlbHNlIGlmICggc21hbGxDVEEgJiYgISBzbWFsbENUQS5jbGFzc0xpc3QuY29udGFpbnMoICd3cHItaXNIaWRkZW4nICkgKSB7XG5cdFx0XHR0cmFja1JvY2tldENETlVwc2VsbEJhbm5lclZpZXdlZCggQkFOTkVSX1NUQVRFLkNPTExBUFNFRCApO1xuXHRcdH1cblx0fVxuXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsICgpID0+IHtcblx0XHRsZXQgb3BlbkNUQSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjd3ByLXJvY2tldGNkbi1vcGVuLWN0YScgKSxcblx0XHRcdGNsb3NlQ1RBID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJyN3cHItcm9ja2V0Y2RuLWNsb3NlLWN0YScgKSxcblx0XHRcdHNtYWxsQ1RBID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJyN3cHItcm9ja2V0Y2RuLWN0YS1zbWFsbCcgKSxcblx0XHRcdGJpZ0NUQSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjd3ByLXJvY2tldGNkbi1jdGEnICksXG5cdFx0XHRpbnB1dFRvZ2dsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53cHItcm9ja2V0Y2RuLXRvZ2dsZS0taW5wdXQnKTtcblxuXHRcdGNvbnN0IGN0YVRvZ2dsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3ByLXJvY2tldGNkbi1jdGEtdG9nZ2xlJyApO1xuXG5cdFx0LyoqXG5cdFx0ICogVG9nZ2xlcyBSb2NrZXRDRE4gQ1RBIGludGVybmFsIGNvbGxhcHNlZC9leHBhbmRlZCBzdGF0ZS5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gdG9nZ2xlQmlnQ1RBU3RhdGUoKSB7XG5cdFx0XHRpZiAoICEgYmlnQ1RBIHx8ICEgY3RhVG9nZ2xlLmxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBpc0NvbGxhcHNlZCA9IGJpZ0NUQS5jbGFzc0xpc3QudG9nZ2xlKCAnd3ByLXJvY2tldGNkbi1jdGEtLWNvbGxhcHNlZCcgKTtcblx0XHRcdGJpZ0NUQS5jbGFzc0xpc3QudG9nZ2xlKCAnd3ByLXJvY2tldGNkbi1jdGEtLWV4cGFuZGVkJywgISBpc0NvbGxhcHNlZCApO1xuXHRcdFx0Y3RhVG9nZ2xlLmZvckVhY2goICggZWwgKSA9PiB7XG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2FyaWEtZXhwYW5kZWQnLCBpc0NvbGxhcHNlZCA/ICdmYWxzZScgOiAndHJ1ZScgKTtcblx0XHRcdH0gKTtcblxuXHRcdFx0aWYoICEgaXNDb2xsYXBzZWQgKSB7XG5cdFx0XHRcdHRyYWNrUm9ja2V0Q0ROVXBzZWxsQmFubmVyRXhwYW5kZWQoICdtYW51YWwnICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmFja1JvY2tldENETlVwc2VsbEJhbm5lckNvbGxhcHNlZCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggY3RhVG9nZ2xlLmxlbmd0aCAmJiBiaWdDVEEgKSB7XG5cdFx0XHRjdGFUb2dnbGUuZm9yRWFjaCggKCBlbCApID0+IHtcblx0XHRcdFx0ZWwuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgdG9nZ2xlQmlnQ1RBU3RhdGUgKTtcblx0XHRcdFx0ZWwuYWRkRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCAoIGV2ZW50ICkgPT4ge1xuXHRcdFx0XHRcdGlmICggJ0VudGVyJyA9PT0gZXZlbnQua2V5IHx8ICcgJyA9PT0gZXZlbnQua2V5ICkge1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHRvZ2dsZUJpZ0NUQVN0YXRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJhY2sgYmFubmVyIHZpZXcgb24gcGFnZSBsb2FkIGlmIGJhbm5lciBpcyB2aXNpYmxlIGFuZCB1c2VyIGlzIG9uIENETiB0YWIuXG5cdFx0bWF5YmVUcmFja0Jhbm5lclZpZXcoKTtcblxuXHRcdC8vIFRyYWNrIGJhbm5lciB2aWV3IHdoZW4gdXNlciBuYXZpZ2F0ZXMgdG8gQ0ROIHRhYi5cblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ2hhc2hjaGFuZ2UnLCAoKSA9PiB7XG5cdFx0XHRtYXliZVRyYWNrQmFubmVyVmlldygpO1xuXHRcdFx0dHJhY2tDRE5Nb2RlU2VsZWN0aW9uKCk7XG5cdFx0fSApO1xuXG5cdFx0Ly8gUHJpY2VzIHNlbGVjdG9ycyBmb3IgdG9nZ2xpbmcgdmlzaWJpbGl0eSBiYXNlZCBvbiB0aGUgYmlsbGluZyBjeWNsZSB0b2dnbGUgc3RhdGUuXG5cdFx0Y29uc3QgcHJpY2VzID0ge1xuXHRcdFx0bW9udGhseToge1xuXHRcdFx0XHRyZWd1bGFyOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud3ByLXJvY2tldGNkbi1wcmljaW5nLXJlZ3VsYXItcHJpY2UtLW1vbnRobHknKSxcblx0XHRcdFx0Y3VycmVudDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1yb2NrZXRjZG4tcHJpY2luZy0tbW9udGhseScpLFxuXHRcdFx0XHRwZXJpb2Q6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy53cHItcm9ja2V0Y2RuLXByaWNpbmctLWJpbGxpbmctcGVyaW9kLS1tb250aGx5Jylcblx0XHRcdH0sXG5cdFx0XHR5ZWFybHk6IHtcblx0XHRcdFx0cmVndWxhcjogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1yb2NrZXRjZG4tcHJpY2luZy1yZWd1bGFyLXByaWNlLS15ZWFybHknKSxcblx0XHRcdFx0Y3VycmVudDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1yb2NrZXRjZG4tcHJpY2luZy0tYW5udWFsJyksXG5cdFx0XHRcdHBlcmlvZDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwci1yb2NrZXRjZG4tcHJpY2luZy0tYmlsbGluZy1wZXJpb2QtLXllYXJseScpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRGlzcGxheSB0aGUgY29ycmVjdCBwcmljZXMgb24gcGFnZSBiYXNlZCBvbiBiaWxsaW5nIGN5Y2xlIHRvZ2dsZSBzdGF0ZS5cblx0XHRpZiAoIGlucHV0VG9nZ2xlICkge1xuXHRcdFx0aW5wdXRUb2dnbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRjb25zdCBpc1llYXJseSA9IHRoaXMuY2hlY2tlZDtcblxuXHRcdFx0XHRpZiAoaXNZZWFybHkpIHtcblx0XHRcdFx0XHRPYmplY3QudmFsdWVzKHByaWNlcy5tb250aGx5KS5mb3JFYWNoKGxpc3QgPT4gbGlzdC5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5hZGQoJ3dwci1pc0hpZGRlbicpKSk7XG5cdFx0XHRcdFx0T2JqZWN0LnZhbHVlcyhwcmljZXMueWVhcmx5KS5mb3JFYWNoKGxpc3QgPT4gbGlzdC5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoJ3dwci1pc0hpZGRlbicpKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LnZhbHVlcyhwcmljZXMubW9udGhseSkuZm9yRWFjaChsaXN0ID0+IGxpc3QuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKCd3cHItaXNIaWRkZW4nKSkpO1xuXHRcdFx0XHRcdE9iamVjdC52YWx1ZXMocHJpY2VzLnllYXJseSkuZm9yRWFjaChsaXN0ID0+IGxpc3QuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QuYWRkKCd3cHItaXNIaWRkZW4nKSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSBidXR0b24gVVJMIHdpdGggdGhlIGNvcnJlY3QgaXNfbW9udGhseSBwYXJhbWV0ZXIuXG5cdFx0XHRcdHVwZGF0ZUJ1dHRvblVybEJpbGxpbmdDeWNsZShpc1llYXJseSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBUcmFjayBSb2NrZXRDRE4gYWN0aXZhdGlvbiBmYWlsZWQgQ1RBIGNsaWNrXG5cdFx0Y29uc3QgYWN0aXZhdGlvbkNUQSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN3cHItcm9ja2V0Y2RuLWFjdGl2YXRpb24tY3RhJyk7XG5cdFx0aWYgKGFjdGl2YXRpb25DVEEpIHtcblx0XHRcdGFjdGl2YXRpb25DVEEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdHRyYWNrUm9ja2V0Q0ROQWN0aXZhdGlvbkNUQSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdH0gKTtcblxuXHR3aW5kb3cub25tZXNzYWdlID0gKCBlICkgPT4ge1xuXHRcdGNvbnN0IGlmcmFtZVVSTCA9IHJvY2tldF9hamF4X2RhdGEub3JpZ2luX3VybDtcblxuXHRcdGlmICggZS5vcmlnaW4gIT09IGlmcmFtZVVSTCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzZXRDRE5GcmFtZUhlaWdodCggZS5kYXRhICk7XG5cdFx0Y2xvc2VNb2RhbCggZS5kYXRhICk7XG5cdFx0dG9rZW5IYW5kbGVyKCBlLmRhdGEsIGlmcmFtZVVSTCApO1xuXHRcdHByb2Nlc3NTdGF0dXMoIGUuZGF0YSApO1xuXHRcdGVuYWJsZUNETiggZS5kYXRhLCBpZnJhbWVVUkwgKTtcblx0XHRkaXNhYmxlQ0ROKCBlLmRhdGEsIGlmcmFtZVVSTCApO1xuXHRcdHZhbGlkYXRlVG9rZW5BbmRDTkFNRSggZS5kYXRhICk7XG5cdH07XG5cblx0ZnVuY3Rpb24gb3BlblJvY2tldENETk1vZGFsKCkge1xuXHRcdGNvbnN0IHJvY2tldGNkbklmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb2NrZXRjZG4taWZyYW1lJyk7XG5cdFx0aWYgKCAhcm9ja2V0Y2RuSWZyYW1lIHx8ICFyb2NrZXRjZG5JZnJhbWUuZGF0YXNldCB8fCAhcm9ja2V0Y2RuSWZyYW1lLmRhdGFzZXQuc3JjIHx8IHJvY2tldGNkbklmcmFtZS5kYXRhc2V0LnNyYyA9PT0gcm9ja2V0Y2RuSWZyYW1lLnNyYyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cm9ja2V0Y2RuSWZyYW1lLnNyYyA9IHJvY2tldGNkbklmcmFtZS5kYXRhc2V0LnNyYztcblx0XHRNaWNyb01vZGFsLnNob3coICd3cHItcm9ja2V0Y2RuLW1vZGFsJyApO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2hlY2tCdXR0b25VcmxBbmRPcGVuKCBpc0NUQSApIHtcblx0XHRsZXQgaWZyYW1lVmlzaXQgPSAhd2luZG93LnJvY2tldGNkbkJ1dHRvblVybDtcblx0XHQvLyBUcmFjayBDVEEgY2xpY2sgaWYgdGhpcyBpcyB0aGUgcHJpY2luZyBDVEEgYnV0dG9uLlxuXHRcdGlmICggaXNDVEEgKSB7XG5cdFx0XHR0cmFja1JvY2tldENETlVwc2VsbENUQUNsaWNrZWQoaWZyYW1lVmlzaXQpO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGlmIGJ1dHRvbiBVUkwgd2FzIGluamVjdGVkIGJ5IFBIUFxuXHRcdGlmICggIWlmcmFtZVZpc2l0ICkge1xuXHRcdFx0Ly8gU21hbGwgZGVsYXkgdG8gZW5zdXJlIE1peHBhbmVsIGV2ZW50IGlzIHNlbnQgYmVmb3JlIG5hdmlnYXRpb25cblx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5yb2NrZXRjZG5CdXR0b25Vcmw7XG5cdFx0XHR9LCAxMDAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2hvdyBpZnJhbWUgbW9kYWwgYXMgdXN1YWxcblx0XHRcdG9wZW5Sb2NrZXRDRE5Nb2RhbCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBidXR0b24gVVJMIHdpdGggdGhlIGNvcnJlY3QgaXNfbW9udGhseSBwYXJhbWV0ZXIgYmFzZWQgb24gYmlsbGluZyBjeWNsZSB0b2dnbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNZZWFybHkgLSBUcnVlIGlmIHllYXJseSBiaWxsaW5nIGlzIHNlbGVjdGVkLCBmYWxzZSBmb3IgbW9udGhseS5cblx0ICovXG5cdGZ1bmN0aW9uIHVwZGF0ZUJ1dHRvblVybEJpbGxpbmdDeWNsZSggaXNZZWFybHkgKSB7XG5cdFx0aWYgKCAhIHdpbmRvdy5yb2NrZXRjZG5CdXR0b25VcmwgfHwgd2luZG93LnJvY2tldGNkbkJ1dHRvblVybCA9PT0gJycgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0d2luZG93LnJvY2tldGNkbkJ1dHRvblVybCA9IHNldElzTW9udGhseVBhcmFtKHdpbmRvdy5yb2NrZXRjZG5CdXR0b25VcmwsIGlzWWVhcmx5KTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1heWJlT3Blbk1vZGFsKCkge1xuXHRcdGxldCBwb3N0RGF0YSA9ICcnO1xuXG5cdFx0cG9zdERhdGEgKz0gJ2FjdGlvbj1yb2NrZXRjZG5fcHJvY2Vzc19zdGF0dXMnO1xuXHRcdHBvc3REYXRhICs9ICcmbm9uY2U9JyArIHJvY2tldF9hamF4X2RhdGEubm9uY2U7XG5cblx0XHRjb25zdCByZXF1ZXN0ID0gc2VuZEhUVFBSZXF1ZXN0KCBwb3N0RGF0YSApO1xuXG5cdFx0cmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIHJlcXVlc3QucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSAmJiAyMDAgPT09IHJlcXVlc3Quc3RhdHVzICkge1xuXHRcdFx0XHRsZXQgcmVzcG9uc2VUeHQgPSBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTtcblxuXHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlVHh0LnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0b3BlblJvY2tldENETk1vZGFsKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gbWF5YmVPcGVuTW9kYWxGcm9tVVJMKCkge1xuXHRcdGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggKTtcblxuXHRcdGlmICggdXJsUGFyYW1zLmhhcyggJ3JvY2tldGNkbl9vcGVuX2lmcmFtZScgKSAmJiAnMScgPT09IHVybFBhcmFtcy5nZXQoICdyb2NrZXRjZG5fb3Blbl9pZnJhbWUnICkgKSB7XG5cdFx0XHQvLyBTZXQgaGFzaCB0byBwYWdlX2NkbiB0byBzaG93IENETiB0YWIgYmVoaW5kIG1vZGFsXG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcjcGFnZV9jZG4nO1xuXG5cdFx0XHRvcGVuUm9ja2V0Q0ROTW9kYWwoKTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgdGhlIFVSTCB0byBwcmV2ZW50IHJlLXRyaWdnZXJpbmcgb24gcmVmcmVzaFxuXHRcdFx0dXJsUGFyYW1zLmRlbGV0ZSggJ3JvY2tldGNkbl9vcGVuX2lmcmFtZScgKTtcblx0XHRcdGNvbnN0IHNlYXJjaCA9IHVybFBhcmFtcy50b1N0cmluZygpO1xuXHRcdFx0Y29uc3QgbmV3VVJMID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgKCBzZWFyY2ggPyAnPycgKyBzZWFyY2ggOiAnJyApICsgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHR3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoIHt9LCAnJywgbmV3VVJMICk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gY2xvc2VNb2RhbCggZGF0YSApIHtcblx0XHRpZiAoICEgZGF0YS5oYXNPd25Qcm9wZXJ0eSggJ2NkbkZyYW1lQ2xvc2UnICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0TWljcm9Nb2RhbC5jbG9zZSggJ3dwci1yb2NrZXRjZG4tbW9kYWwnICk7XG5cdFx0Ly8gRW5zdXJlIHNjcm9sbCBpcyByZXN0b3JlZFxuXHRcdGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcblxuXHRcdGxldCBwYWdlcyA9IFsgJ2lmcmFtZS1wYXltZW50LXN1Y2Nlc3MnLCAnaWZyYW1lLXVuc3Vic2NyaWJlLXN1Y2Nlc3MnIF07XG5cblx0XHRpZiAoICEgZGF0YS5oYXNPd25Qcm9wZXJ0eSggJ2Nkbl9wYWdlX21lc3NhZ2UnICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBwYWdlcy5pbmRleE9mKCBkYXRhLmNkbl9wYWdlX21lc3NhZ2UgKSA9PT0gLTEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBwcm9jZXNzU3RhdHVzKCBkYXRhICkge1xuXHRcdGlmICggISBkYXRhLmhhc093blByb3BlcnR5KCAncm9ja2V0Y2RuX3Byb2Nlc3MnICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3REYXRhID0gJyc7XG5cblx0XHRwb3N0RGF0YSArPSAnYWN0aW9uPXJvY2tldGNkbl9wcm9jZXNzX3NldCc7XG5cdFx0cG9zdERhdGEgKz0gJyZzdGF0dXM9JyArIGRhdGEucm9ja2V0Y2RuX3Byb2Nlc3M7XG5cdFx0cG9zdERhdGEgKz0gJyZub25jZT0nICsgcm9ja2V0X2FqYXhfZGF0YS5ub25jZTtcblxuXHRcdHNlbmRIVFRQUmVxdWVzdCggcG9zdERhdGEgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGVuYWJsZUNETiggZGF0YSwgaWZyYW1lVVJMICkge1xuXHRcdGxldCBpZnJhbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnI3JvY2tldGNkbi1pZnJhbWUnICkuY29udGVudFdpbmRvdztcblxuXHRcdGlmICggISBkYXRhLmhhc093blByb3BlcnR5KCAncm9ja2V0Y2RuX3VybCcgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcG9zdERhdGEgPSAnJztcblxuXHRcdHBvc3REYXRhICs9ICdhY3Rpb249cm9ja2V0Y2RuX2VuYWJsZSc7XG5cdFx0cG9zdERhdGEgKz0gJyZjZG5fdXJsPScgKyBkYXRhLnJvY2tldGNkbl91cmw7XG5cdFx0cG9zdERhdGEgKz0gJyZub25jZT0nICsgcm9ja2V0X2FqYXhfZGF0YS5ub25jZTtcblxuXHRcdGNvbnN0IHJlcXVlc3QgPSBzZW5kSFRUUFJlcXVlc3QoIHBvc3REYXRhICk7XG5cblx0XHRyZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcblx0XHRcdGlmICggcmVxdWVzdC5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5ET05FICYmIDIwMCA9PT0gcmVxdWVzdC5zdGF0dXMgKSB7XG5cdFx0XHRcdGxldCByZXNwb25zZVR4dCA9IEpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQpO1xuXHRcdFx0XHRpZnJhbWUucG9zdE1lc3NhZ2UoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0J3N1Y2Nlc3MnOiByZXNwb25zZVR4dC5zdWNjZXNzLFxuXHRcdFx0XHRcdFx0J2RhdGEnOiByZXNwb25zZVR4dC5kYXRhLFxuXHRcdFx0XHRcdFx0J3JvY2tldGNkbic6IHRydWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGlmcmFtZVVSTFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRJc01vbnRobHlQYXJhbSh1cmwsIGlzWWVhcmx5KSB7XG5cdFx0Ly8gUmVtb3ZlIGFueSBleGlzdGluZyBpc19tb250aGx5IHBhcmFtXG5cdFx0bGV0IG5ld1VybCA9IHVybC5yZXBsYWNlKC8oWz8mXSlpc19tb250aGx5PVteJl0qL2csICcnKTtcblx0XHQvLyBBZGQgdGhlIG5ldyBwYXJhbVxuXHRcdGNvbnN0IHNlcCA9IG5ld1VybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xuXHRcdG5ld1VybCArPSBzZXAgKyAnaXNfbW9udGhseT0nICsgKGlzWWVhcmx5ID8gJzAnIDogJzEnKTtcblx0XHRyZXR1cm4gbmV3VXJsO1xuXHR9XG5cblx0ZnVuY3Rpb24gZGlzYWJsZUNETiggZGF0YSwgaWZyYW1lVVJMICkge1xuXHRcdGxldCBpZnJhbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnI3JvY2tldGNkbi1pZnJhbWUnICkuY29udGVudFdpbmRvdztcblxuXHRcdGlmICggISBkYXRhLmhhc093blByb3BlcnR5KCAncm9ja2V0Y2RuX2Rpc2FibGUnICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3REYXRhID0gJyc7XG5cblx0XHRwb3N0RGF0YSArPSAnYWN0aW9uPXJvY2tldGNkbl9kaXNhYmxlJztcblx0XHRwb3N0RGF0YSArPSAnJm5vbmNlPScgKyByb2NrZXRfYWpheF9kYXRhLm5vbmNlO1xuXG5cdFx0Y29uc3QgcmVxdWVzdCA9IHNlbmRIVFRQUmVxdWVzdCggcG9zdERhdGEgKTtcblxuXHRcdHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuXHRcdFx0aWYgKCByZXF1ZXN0LnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUgJiYgMjAwID09PSByZXF1ZXN0LnN0YXR1cyApIHtcblx0XHRcdFx0bGV0IHJlc3BvbnNlVHh0ID0gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCk7XG5cdFx0XHRcdGlmcmFtZS5wb3N0TWVzc2FnZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQnc3VjY2Vzcyc6IHJlc3BvbnNlVHh0LnN1Y2Nlc3MsXG5cdFx0XHRcdFx0XHQnZGF0YSc6IHJlc3BvbnNlVHh0LmRhdGEsXG5cdFx0XHRcdFx0XHQncm9ja2V0Y2RuJzogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0aWZyYW1lVVJMXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNlbmRIVFRQUmVxdWVzdCggcG9zdERhdGEgKSB7XG5cdFx0Y29uc3QgaHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuXHRcdGh0dHBSZXF1ZXN0Lm9wZW4oICdQT1NUJywgYWpheHVybCApO1xuXHRcdGh0dHBSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoICdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyApO1xuXHRcdGh0dHBSZXF1ZXN0LnNlbmQoIHBvc3REYXRhICk7XG5cblx0XHRyZXR1cm4gaHR0cFJlcXVlc3Q7XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRDRE5GcmFtZUhlaWdodCggZGF0YSApIHtcblx0XHRpZiAoICEgZGF0YS5oYXNPd25Qcm9wZXJ0eSggJ2NkbkZyYW1lSGVpZ2h0JyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAncm9ja2V0Y2RuLWlmcmFtZScgKS5zdHlsZS5oZWlnaHQgPSBgJHsgZGF0YS5jZG5GcmFtZUhlaWdodCB9cHhgO1xuXHR9XG5cblx0ZnVuY3Rpb24gdG9rZW5IYW5kbGVyKCBkYXRhLCBpZnJhbWVVUkwgKSB7XG5cdFx0bGV0IGlmcmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjcm9ja2V0Y2RuLWlmcmFtZScgKS5jb250ZW50V2luZG93O1xuXG5cdFx0aWYgKCAhIGRhdGEuaGFzT3duUHJvcGVydHkoICdyb2NrZXRjZG5fdG9rZW4nICkgKSB7XG5cdFx0XHRsZXQgZGF0YSA9IHtwcm9jZXNzOlwic3Vic2NyaWJlXCIsIG1lc3NhZ2U6XCJ0b2tlbl9ub3RfcmVjZWl2ZWRcIn07XG5cdFx0XHRpZnJhbWUucG9zdE1lc3NhZ2UoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQnc3VjY2Vzcyc6IGZhbHNlLFxuXHRcdFx0XHRcdCdkYXRhJzogZGF0YSxcblx0XHRcdFx0XHQncm9ja2V0Y2RuJzogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpZnJhbWVVUkxcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3REYXRhID0gJyc7XG5cblx0XHRwb3N0RGF0YSArPSAnYWN0aW9uPXNhdmVfcm9ja2V0Y2RuX3Rva2VuJztcblx0XHRwb3N0RGF0YSArPSAnJnZhbHVlPScgKyBkYXRhLnJvY2tldGNkbl90b2tlbjtcblx0XHRwb3N0RGF0YSArPSAnJm5vbmNlPScgKyByb2NrZXRfYWpheF9kYXRhLm5vbmNlO1xuXG5cdFx0Y29uc3QgcmVxdWVzdCA9IHNlbmRIVFRQUmVxdWVzdCggcG9zdERhdGEgKTtcblxuXHRcdHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuXHRcdFx0aWYgKCByZXF1ZXN0LnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUgJiYgMjAwID09PSByZXF1ZXN0LnN0YXR1cyApIHtcblx0XHRcdFx0bGV0IHJlc3BvbnNlVHh0ID0gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCk7XG5cdFx0XHRcdGlmcmFtZS5wb3N0TWVzc2FnZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQnc3VjY2Vzcyc6IHJlc3BvbnNlVHh0LnN1Y2Nlc3MsXG5cdFx0XHRcdFx0XHQnZGF0YSc6IHJlc3BvbnNlVHh0LmRhdGEsXG5cdFx0XHRcdFx0XHQncm9ja2V0Y2RuJzogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0aWZyYW1lVVJMXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHZhbGlkYXRlVG9rZW5BbmRDTkFNRSggZGF0YSApIHtcblx0XHRpZiAoICEgZGF0YS5oYXNPd25Qcm9wZXJ0eSggJ3JvY2tldGNkbl92YWxpZGF0ZV90b2tlbicgKSB8fCAhIGRhdGEuaGFzT3duUHJvcGVydHkoICdyb2NrZXRjZG5fdmFsaWRhdGVfY25hbWUnICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3REYXRhID0gJyc7XG5cblx0XHRwb3N0RGF0YSArPSAnYWN0aW9uPXJvY2tldGNkbl92YWxpZGF0ZV90b2tlbl9jbmFtZSc7XG5cdFx0cG9zdERhdGEgKz0gJyZjZG5fdXJsPScgKyBkYXRhLnJvY2tldGNkbl92YWxpZGF0ZV9jbmFtZTtcblx0XHRwb3N0RGF0YSArPSAnJmNkbl90b2tlbj0nICsgZGF0YS5yb2NrZXRjZG5fdmFsaWRhdGVfdG9rZW47XG5cdFx0cG9zdERhdGEgKz0gJyZub25jZT0nICsgcm9ja2V0X2FqYXhfZGF0YS5ub25jZTtcblxuXHRcdGNvbnN0IHJlcXVlc3QgPSBzZW5kSFRUUFJlcXVlc3QoIHBvc3REYXRhICk7XG5cdH1cblxuXHQvKipcblx0ICogVHJhY2tzIENETiBtb2RlIHNlbGVjdGlvbiB3aXRoIE1peHBhbmVsLlxuXHQgKi9cblx0ZnVuY3Rpb24gdHJhY2tDRE5Nb2RlU2VsZWN0aW9uKCkge1xuXHRcdGlmICggISBpc09uQ0ROVGFiKCkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWN0aXZlVGFiID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cHItY2RuLXRhYnNfX3RhYi0tYWN0aXZlJyApO1xuXHRcdFxuXHRcdGlmICggISBhY3RpdmVUYWIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2RuTW9kZSA9IGFjdGl2ZVRhYi5nZXRBdHRyaWJ1dGUoICdkYXRhLWNkbi1tb2RlJyApXG5cblx0XHRpZiggISBjZG5Nb2RlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gXG5cblx0XHRpZiAoIHR5cGVvZiBtaXhwYW5lbCA9PT0gJ3VuZGVmaW5lZCcgfHwgIW1peHBhbmVsLnRyYWNrICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGlmIHVzZXIgaGFzIG9wdGVkIGluXG5cdFx0aWYgKCB0eXBlb2Ygcm9ja2V0X21peHBhbmVsX2RhdGEgPT09ICd1bmRlZmluZWQnIHx8ICFyb2NrZXRfbWl4cGFuZWxfZGF0YS5vcHRpbl9lbmFibGVkIHx8IHJvY2tldF9taXhwYW5lbF9kYXRhLm9wdGluX2VuYWJsZWQgPT09ICcwJyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZGVudGlmeSB1c2VyIGlmIGF2YWlsYWJsZVxuXHRcdGlmIChyb2NrZXRfbWl4cGFuZWxfZGF0YS51c2VyX2lkICYmIHR5cGVvZiBtaXhwYW5lbC5pZGVudGlmeSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bWl4cGFuZWwuaWRlbnRpZnkocm9ja2V0X21peHBhbmVsX2RhdGEudXNlcl9pZCk7XG5cdFx0fVxuXG5cdFx0bWl4cGFuZWwudHJhY2soJ1JvY2tldENETiBNb2RlJywge1xuXHRcdFx0Y29udGV4dDogcm9ja2V0X21peHBhbmVsX2RhdGEuY29udGV4dCxcblx0XHRcdHBsdWdpbjogcm9ja2V0X21peHBhbmVsX2RhdGEucGx1Z2luLFxuXHRcdFx0YnJhbmQ6IHJvY2tldF9taXhwYW5lbF9kYXRhLmJyYW5kLFxuXHRcdFx0YXBwbGljYXRpb246IHJvY2tldF9taXhwYW5lbF9kYXRhLmFwcCxcblx0XHRcdGNkbl9tb2RlOiBjZG5Nb2RlXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVHJhY2tzIFJvY2tldENETiBhY3RpdmF0aW9uIGZhaWxlZCBDVEEgY2xpY2sgd2l0aCBNaXhwYW5lbC5cblx0ICovXG5cdGZ1bmN0aW9uIHRyYWNrUm9ja2V0Q0ROQWN0aXZhdGlvbkNUQSgpIHtcblx0XHRpZiAodHlwZW9mIG1peHBhbmVsID09PSAndW5kZWZpbmVkJyB8fCAhbWl4cGFuZWwudHJhY2spIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB1c2VyIGhhcyBvcHRlZCBpblxuXHRcdGlmICh0eXBlb2Ygcm9ja2V0X21peHBhbmVsX2RhdGEgPT09ICd1bmRlZmluZWQnIHx8ICFyb2NrZXRfbWl4cGFuZWxfZGF0YS5vcHRpbl9lbmFibGVkIHx8IHJvY2tldF9taXhwYW5lbF9kYXRhLm9wdGluX2VuYWJsZWQgPT09ICcwJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElkZW50aWZ5IHVzZXIgaWYgYXZhaWxhYmxlXG5cdFx0aWYgKHJvY2tldF9taXhwYW5lbF9kYXRhLnVzZXJfaWQgJiYgdHlwZW9mIG1peHBhbmVsLmlkZW50aWZ5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRtaXhwYW5lbC5pZGVudGlmeShyb2NrZXRfbWl4cGFuZWxfZGF0YS51c2VyX2lkKTtcblx0XHR9XG5cblx0XHRtaXhwYW5lbC50cmFjaygnUm9ja2V0Q0ROIEFjdGl2YXRpb24gRmFpbGVkIENUQSBDbGlja2VkJywge1xuXHRcdFx0Y29udGV4dDogcm9ja2V0X21peHBhbmVsX2RhdGEuY29udGV4dCxcblx0XHRcdHBsdWdpbjogcm9ja2V0X21peHBhbmVsX2RhdGEucGx1Z2luLFxuXHRcdFx0YnJhbmQ6IHJvY2tldF9taXhwYW5lbF9kYXRhLmJyYW5kLFxuXHRcdFx0YXBwbGljYXRpb246IHJvY2tldF9taXhwYW5lbF9kYXRhLmFwcFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYWNrcyBhIFJvY2tldENETiB1cHNlbGwgZXZlbnQgd2l0aCBNaXhwYW5lbC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSAgIFRoZSBNaXhwYW5lbCBldmVudCBuYW1lLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW2V4dHJhUHJvcHNdIE9wdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBtZXJnZS5cblx0ICovXG5cdGZ1bmN0aW9uIHRyYWNrUm9ja2V0Q0ROVXBzZWxsTWl4cGFuZWxFdmVudCggZXZlbnROYW1lLCBleHRyYVByb3BzICkge1xuXHRcdGlmICggdHlwZW9mIG1peHBhbmVsID09PSAndW5kZWZpbmVkJyB8fCAhIG1peHBhbmVsLnRyYWNrICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGlmIHVzZXIgaGFzIG9wdGVkIGluLlxuXHRcdGlmICggdHlwZW9mIHJvY2tldF9taXhwYW5lbF9kYXRhID09PSAndW5kZWZpbmVkJyB8fCAhIHJvY2tldF9taXhwYW5lbF9kYXRhLm9wdGluX2VuYWJsZWQgfHwgcm9ja2V0X21peHBhbmVsX2RhdGEub3B0aW5fZW5hYmxlZCA9PT0gJzAnICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElkZW50aWZ5IHVzZXIgaWYgYXZhaWxhYmxlLlxuXHRcdGlmICggISByb2NrZXRfbWl4cGFuZWxfZGF0YS51c2VyX2lkIHx8IHR5cGVvZiBtaXhwYW5lbC5pZGVudGlmeSAhPT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRtaXhwYW5lbC5pZGVudGlmeSggcm9ja2V0X21peHBhbmVsX2RhdGEudXNlcl9pZCApO1xuXG5cdFx0dmFyIHByb3BzID0ge1xuXHRcdFx0Y29udGV4dDogcm9ja2V0X21peHBhbmVsX2RhdGEuY29udGV4dCxcblx0XHRcdHBsdWdpbjogcm9ja2V0X21peHBhbmVsX2RhdGEucGx1Z2luLFxuXHRcdFx0YnJhbmQ6IHJvY2tldF9taXhwYW5lbF9kYXRhLmJyYW5kLFxuXHRcdFx0YXBwbGljYXRpb246IHJvY2tldF9taXhwYW5lbF9kYXRhLmFwcCxcblx0XHRcdHBhdGg6IHJvY2tldF9taXhwYW5lbF9kYXRhLnBhdGhcblx0XHR9O1xuXG5cdFx0Ly8gTWVyZ2UgZXh0cmEgcHJvcGVydGllcyBpZiBwcm92aWRlZCBhbmQgdmFsaWQuXG5cdFx0aWYgKCBleHRyYVByb3BzICYmIHR5cGVvZiBleHRyYVByb3BzID09PSAnb2JqZWN0JyApIHtcblx0XHRcdGZvciAoIHZhciBrZXkgaW4gZXh0cmFQcm9wcyApIHtcblx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGV4dHJhUHJvcHMsIGtleSApICkge1xuXHRcdFx0XHRcdHByb3BzWyBrZXkgXSA9IGV4dHJhUHJvcHNbIGtleSBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bWl4cGFuZWwudHJhY2soIGV2ZW50TmFtZSwgcHJvcHMgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmFja3MgUm9ja2V0Q0ROIHVwc2VsbCBiYW5uZXIgdmlldyB3aXRoIE1peHBhbmVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc19jb2xsYXBzZWQ9ZmFsc2VdIFdoZXRoZXIgdGhlIHNtYWxsIGJhbm5lciB2YXJpYW50IGlzIGRpc3BsYXllZCwgU2VuZHMgYGNvbGxhcHNlZGAgd2hlbiB0cnVlLCBvdGhlcndpc2UgYG9wZW5lZGAuXG5cdCAqL1xuXHRmdW5jdGlvbiB0cmFja1JvY2tldENETlVwc2VsbEJhbm5lclZpZXdlZCggaXNfY29sbGFwc2VkID0gZmFsc2UgKSB7XG5cdFx0aWYgKCAhIGlzT25DRE5UYWIoKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdGNvbnN0IGJhc2VQYXRoID0gKCB0eXBlb2Ygcm9ja2V0X21peHBhbmVsX2RhdGEgIT09ICd1bmRlZmluZWQnICYmIHJvY2tldF9taXhwYW5lbF9kYXRhLnBhdGggKSA/IHJvY2tldF9taXhwYW5lbF9kYXRhLnBhdGggOiAnJztcblx0XHR0cmFja1JvY2tldENETlVwc2VsbE1peHBhbmVsRXZlbnQoICdSb2NrZXRDRE4gVXBzZWxsIEJhbm5lciBWaWV3ZWQnLCB7XG5cdFx0XHRzdGF0ZTogICAgIGlzX2NvbGxhcHNlZCA/ICdjb2xsYXBzZWQnIDogJ29wZW5lZCcsXG5cdFx0XHRwYWdlX25hbWU6IGhhc2gsXG5cdFx0XHRwYXRoOiAgICAgIGJhc2VQYXRoICsgaGFzaFxuXHRcdH0gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmFja3MgUm9ja2V0Q0ROIHVwc2VsbCBiYW5uZXIgZXhwYW5kZWQgd2l0aCBNaXhwYW5lbC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRyaWdnZXIgJ21hbnVhbCcgYnkgZGVmYXVsdC5cblx0ICovXG5cdGZ1bmN0aW9uIHRyYWNrUm9ja2V0Q0ROVXBzZWxsQmFubmVyRXhwYW5kZWQoIHRyaWdnZXIgKSB7XG5cdFx0dHJhY2tSb2NrZXRDRE5VcHNlbGxNaXhwYW5lbEV2ZW50KCAnUm9ja2V0Q0ROIFVwc2VsbCBCYW5uZXIgRXhwYW5kZWQnLCB7XG5cdFx0XHRsb2NhdGlvbjogd2luZG93LmxvY2F0aW9uLmhhc2gsXG5cdFx0XHR0cmlnZ2VyOiB0cmlnZ2VyXG5cdFx0fSApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYWNrcyBSb2NrZXRDRE4gdXBzZWxsIGJhbm5lciBjb2xsYXBzZWQgd2l0aCBNaXhwYW5lbC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IFt0cmlnZ2VyPSdtYW51YWwnXSAnbWFudWFsJyB3aGVuIHVzZXIgY2xpY2tzIHRvZ2dsZSwgJ2F1dG9fbGltaXRfcmVsZWFzZWQnIHdoZW4gYSBwYWdlIGRlbGV0aW9uIGRyb3BzIGNvdW50IGJlbG93IGxpbWl0LlxuXHQgKi9cblx0ZnVuY3Rpb24gdHJhY2tSb2NrZXRDRE5VcHNlbGxCYW5uZXJDb2xsYXBzZWQoIHRyaWdnZXIgPSAnbWFudWFsJyApIHtcblx0XHR0cmFja1JvY2tldENETlVwc2VsbE1peHBhbmVsRXZlbnQoICdSb2NrZXRDRE4gVXBzZWxsIEJhbm5lciBDb2xsYXBzZWQnLCB7XG5cdFx0XHRsb2NhdGlvbjogd2luZG93LmxvY2F0aW9uLmhhc2gsXG5cdFx0XHR0cmlnZ2VyOiB0cmlnZ2VyXG5cdFx0fSApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYWNrcyBSb2NrZXRDRE4gdXBzZWxsIENUQSBjbGljayB3aXRoIE1peHBhbmVsLlxuXHQgKi9cblx0ZnVuY3Rpb24gdHJhY2tSb2NrZXRDRE5VcHNlbGxDVEFDbGlja2VkKCBpZnJhbWVWaXNpdCA9IGZhbHNlICkge1xuXHRcdGNvbnN0IHRhYmxlTGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3ByLWNkbi1idWlsdC1pbiAud3ByLXRhYmxlLWxpc3QnICk7XG5cdFx0Y29uc3QgcGFnZXNDb3VudCA9IHRhYmxlTGlzdCA/IHRhYmxlTGlzdC5xdWVyeVNlbGVjdG9yQWxsKCAnW2RhdGEtaWRdJyApLmxlbmd0aCA6IDA7XG5cblx0XHR0cmFja1JvY2tldENETlVwc2VsbE1peHBhbmVsRXZlbnQoICdSb2NrZXRDRE4gVXBzZWxsIENUQSBDbGlja2VkJywge1xuXHRcdFx0ZGVzdGluYXRpb246IGlmcmFtZVZpc2l0ID8gJ2lmcmFtZScgOiAnZXhwcmVzcy1jaGVja291dCcsXG5cdFx0XHRwYWdlc19jb3VudDogcGFnZXNDb3VudFxuXHRcdH0gKTtcblx0fVxufSApKCBkb2N1bWVudCwgd2luZG93ICk7XG4iLCIvKiFcclxuICogVkVSU0lPTjogMS4xMi4xXHJcbiAqIERBVEU6IDIwMTQtMDYtMjZcclxuICogVVBEQVRFUyBBTkQgRE9DUyBBVDogaHR0cDovL3d3dy5ncmVlbnNvY2suY29tXHJcbiAqXHJcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwOC0yMDE0LCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIFRoaXMgd29yayBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwOi8vd3d3LmdyZWVuc29jay5jb20vdGVybXNfb2ZfdXNlLmh0bWwgb3IgZm9yXHJcbiAqIENsdWIgR3JlZW5Tb2NrIG1lbWJlcnMsIHRoZSBzb2Z0d2FyZSBhZ3JlZW1lbnQgdGhhdCB3YXMgaXNzdWVkIHdpdGggeW91ciBtZW1iZXJzaGlwLlxyXG4gKiBcclxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXHJcbiAqL1xyXG4od2luZG93Ll9nc1F1ZXVlfHwod2luZG93Ll9nc1F1ZXVlPVtdKSkucHVzaChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3dpbmRvdy5fZ3NEZWZpbmUoXCJUaW1lbGluZUxpdGVcIixbXCJjb3JlLkFuaW1hdGlvblwiLFwiY29yZS5TaW1wbGVUaW1lbGluZVwiLFwiVHdlZW5MaXRlXCJdLGZ1bmN0aW9uKHQsZSxpKXt2YXIgcz1mdW5jdGlvbih0KXtlLmNhbGwodGhpcyx0KSx0aGlzLl9sYWJlbHM9e30sdGhpcy5hdXRvUmVtb3ZlQ2hpbGRyZW49dGhpcy52YXJzLmF1dG9SZW1vdmVDaGlsZHJlbj09PSEwLHRoaXMuc21vb3RoQ2hpbGRUaW1pbmc9dGhpcy52YXJzLnNtb290aENoaWxkVGltaW5nPT09ITAsdGhpcy5fc29ydENoaWxkcmVuPSEwLHRoaXMuX29uVXBkYXRlPXRoaXMudmFycy5vblVwZGF0ZTt2YXIgaSxzLHI9dGhpcy52YXJzO2ZvcihzIGluIHIpaT1yW3NdLGEoaSkmJi0xIT09aS5qb2luKFwiXCIpLmluZGV4T2YoXCJ7c2VsZn1cIikmJihyW3NdPXRoaXMuX3N3YXBTZWxmSW5QYXJhbXMoaSkpO2Eoci50d2VlbnMpJiZ0aGlzLmFkZChyLnR3ZWVucywwLHIuYWxpZ24sci5zdGFnZ2VyKX0scj0xZS0xMCxuPWkuX2ludGVybmFscy5pc1NlbGVjdG9yLGE9aS5faW50ZXJuYWxzLmlzQXJyYXksbz1bXSxoPXdpbmRvdy5fZ3NEZWZpbmUuZ2xvYmFscyxsPWZ1bmN0aW9uKHQpe3ZhciBlLGk9e307Zm9yKGUgaW4gdClpW2VdPXRbZV07cmV0dXJuIGl9LF89ZnVuY3Rpb24odCxlLGkscyl7dC5fdGltZWxpbmUucGF1c2UodC5fc3RhcnRUaW1lKSxlJiZlLmFwcGx5KHN8fHQuX3RpbWVsaW5lLGl8fG8pfSx1PW8uc2xpY2UsZj1zLnByb3RvdHlwZT1uZXcgZTtyZXR1cm4gcy52ZXJzaW9uPVwiMS4xMi4xXCIsZi5jb25zdHJ1Y3Rvcj1zLGYua2lsbCgpLl9nYz0hMSxmLnRvPWZ1bmN0aW9uKHQsZSxzLHIpe3ZhciBuPXMucmVwZWF0JiZoLlR3ZWVuTWF4fHxpO3JldHVybiBlP3RoaXMuYWRkKG5ldyBuKHQsZSxzKSxyKTp0aGlzLnNldCh0LHMscil9LGYuZnJvbT1mdW5jdGlvbih0LGUscyxyKXtyZXR1cm4gdGhpcy5hZGQoKHMucmVwZWF0JiZoLlR3ZWVuTWF4fHxpKS5mcm9tKHQsZSxzKSxyKX0sZi5mcm9tVG89ZnVuY3Rpb24odCxlLHMscixuKXt2YXIgYT1yLnJlcGVhdCYmaC5Ud2Vlbk1heHx8aTtyZXR1cm4gZT90aGlzLmFkZChhLmZyb21Ubyh0LGUscyxyKSxuKTp0aGlzLnNldCh0LHIsbil9LGYuc3RhZ2dlclRvPWZ1bmN0aW9uKHQsZSxyLGEsbyxoLF8sZil7dmFyIHAsYz1uZXcgcyh7b25Db21wbGV0ZTpoLG9uQ29tcGxldGVQYXJhbXM6XyxvbkNvbXBsZXRlU2NvcGU6ZixzbW9vdGhDaGlsZFRpbWluZzp0aGlzLnNtb290aENoaWxkVGltaW5nfSk7Zm9yKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1pLnNlbGVjdG9yKHQpfHx0KSxuKHQpJiYodD11LmNhbGwodCwwKSksYT1hfHwwLHA9MDt0Lmxlbmd0aD5wO3ArKylyLnN0YXJ0QXQmJihyLnN0YXJ0QXQ9bChyLnN0YXJ0QXQpKSxjLnRvKHRbcF0sZSxsKHIpLHAqYSk7cmV0dXJuIHRoaXMuYWRkKGMsbyl9LGYuc3RhZ2dlckZyb209ZnVuY3Rpb24odCxlLGkscyxyLG4sYSxvKXtyZXR1cm4gaS5pbW1lZGlhdGVSZW5kZXI9MCE9aS5pbW1lZGlhdGVSZW5kZXIsaS5ydW5CYWNrd2FyZHM9ITAsdGhpcy5zdGFnZ2VyVG8odCxlLGkscyxyLG4sYSxvKX0sZi5zdGFnZ2VyRnJvbVRvPWZ1bmN0aW9uKHQsZSxpLHMscixuLGEsbyxoKXtyZXR1cm4gcy5zdGFydEF0PWkscy5pbW1lZGlhdGVSZW5kZXI9MCE9cy5pbW1lZGlhdGVSZW5kZXImJjAhPWkuaW1tZWRpYXRlUmVuZGVyLHRoaXMuc3RhZ2dlclRvKHQsZSxzLHIsbixhLG8saCl9LGYuY2FsbD1mdW5jdGlvbih0LGUscyxyKXtyZXR1cm4gdGhpcy5hZGQoaS5kZWxheWVkQ2FsbCgwLHQsZSxzKSxyKX0sZi5zZXQ9ZnVuY3Rpb24odCxlLHMpe3JldHVybiBzPXRoaXMuX3BhcnNlVGltZU9yTGFiZWwocywwLCEwKSxudWxsPT1lLmltbWVkaWF0ZVJlbmRlciYmKGUuaW1tZWRpYXRlUmVuZGVyPXM9PT10aGlzLl90aW1lJiYhdGhpcy5fcGF1c2VkKSx0aGlzLmFkZChuZXcgaSh0LDAsZSkscyl9LHMuZXhwb3J0Um9vdD1mdW5jdGlvbih0LGUpe3Q9dHx8e30sbnVsbD09dC5zbW9vdGhDaGlsZFRpbWluZyYmKHQuc21vb3RoQ2hpbGRUaW1pbmc9ITApO3ZhciByLG4sYT1uZXcgcyh0KSxvPWEuX3RpbWVsaW5lO2ZvcihudWxsPT1lJiYoZT0hMCksby5fcmVtb3ZlKGEsITApLGEuX3N0YXJ0VGltZT0wLGEuX3Jhd1ByZXZUaW1lPWEuX3RpbWU9YS5fdG90YWxUaW1lPW8uX3RpbWUscj1vLl9maXJzdDtyOyluPXIuX25leHQsZSYmciBpbnN0YW5jZW9mIGkmJnIudGFyZ2V0PT09ci52YXJzLm9uQ29tcGxldGV8fGEuYWRkKHIsci5fc3RhcnRUaW1lLXIuX2RlbGF5KSxyPW47cmV0dXJuIG8uYWRkKGEsMCksYX0sZi5hZGQ9ZnVuY3Rpb24ocixuLG8saCl7dmFyIGwsXyx1LGYscCxjO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBuJiYobj10aGlzLl9wYXJzZVRpbWVPckxhYmVsKG4sMCwhMCxyKSksIShyIGluc3RhbmNlb2YgdCkpe2lmKHIgaW5zdGFuY2VvZiBBcnJheXx8ciYmci5wdXNoJiZhKHIpKXtmb3Iobz1vfHxcIm5vcm1hbFwiLGg9aHx8MCxsPW4sXz1yLmxlbmd0aCx1PTA7Xz51O3UrKylhKGY9clt1XSkmJihmPW5ldyBzKHt0d2VlbnM6Zn0pKSx0aGlzLmFkZChmLGwpLFwic3RyaW5nXCIhPXR5cGVvZiBmJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBmJiYoXCJzZXF1ZW5jZVwiPT09bz9sPWYuX3N0YXJ0VGltZStmLnRvdGFsRHVyYXRpb24oKS9mLl90aW1lU2NhbGU6XCJzdGFydFwiPT09byYmKGYuX3N0YXJ0VGltZS09Zi5kZWxheSgpKSksbCs9aDtyZXR1cm4gdGhpcy5fdW5jYWNoZSghMCl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpcmV0dXJuIHRoaXMuYWRkTGFiZWwocixuKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiByKXRocm93XCJDYW5ub3QgYWRkIFwiK3IrXCIgaW50byB0aGUgdGltZWxpbmU7IGl0IGlzIG5vdCBhIHR3ZWVuLCB0aW1lbGluZSwgZnVuY3Rpb24sIG9yIHN0cmluZy5cIjtyPWkuZGVsYXllZENhbGwoMCxyKX1pZihlLnByb3RvdHlwZS5hZGQuY2FsbCh0aGlzLHIsbiksKHRoaXMuX2djfHx0aGlzLl90aW1lPT09dGhpcy5fZHVyYXRpb24pJiYhdGhpcy5fcGF1c2VkJiZ0aGlzLl9kdXJhdGlvbjx0aGlzLmR1cmF0aW9uKCkpZm9yKHA9dGhpcyxjPXAucmF3VGltZSgpPnIuX3N0YXJ0VGltZTtwLl90aW1lbGluZTspYyYmcC5fdGltZWxpbmUuc21vb3RoQ2hpbGRUaW1pbmc/cC50b3RhbFRpbWUocC5fdG90YWxUaW1lLCEwKTpwLl9nYyYmcC5fZW5hYmxlZCghMCwhMSkscD1wLl90aW1lbGluZTtyZXR1cm4gdGhpc30sZi5yZW1vdmU9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQpcmV0dXJuIHRoaXMuX3JlbW92ZShlLCExKTtpZihlIGluc3RhbmNlb2YgQXJyYXl8fGUmJmUucHVzaCYmYShlKSl7Zm9yKHZhciBpPWUubGVuZ3RoOy0taT4tMTspdGhpcy5yZW1vdmUoZVtpXSk7cmV0dXJuIHRoaXN9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/dGhpcy5yZW1vdmVMYWJlbChlKTp0aGlzLmtpbGwobnVsbCxlKX0sZi5fcmVtb3ZlPWZ1bmN0aW9uKHQsaSl7ZS5wcm90b3R5cGUuX3JlbW92ZS5jYWxsKHRoaXMsdCxpKTt2YXIgcz10aGlzLl9sYXN0O3JldHVybiBzP3RoaXMuX3RpbWU+cy5fc3RhcnRUaW1lK3MuX3RvdGFsRHVyYXRpb24vcy5fdGltZVNjYWxlJiYodGhpcy5fdGltZT10aGlzLmR1cmF0aW9uKCksdGhpcy5fdG90YWxUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb24pOnRoaXMuX3RpbWU9dGhpcy5fdG90YWxUaW1lPXRoaXMuX2R1cmF0aW9uPXRoaXMuX3RvdGFsRHVyYXRpb249MCx0aGlzfSxmLmFwcGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZCh0LHRoaXMuX3BhcnNlVGltZU9yTGFiZWwobnVsbCxlLCEwLHQpKX0sZi5pbnNlcnQ9Zi5pbnNlcnRNdWx0aXBsZT1mdW5jdGlvbih0LGUsaSxzKXtyZXR1cm4gdGhpcy5hZGQodCxlfHwwLGkscyl9LGYuYXBwZW5kTXVsdGlwbGU9ZnVuY3Rpb24odCxlLGkscyl7cmV0dXJuIHRoaXMuYWRkKHQsdGhpcy5fcGFyc2VUaW1lT3JMYWJlbChudWxsLGUsITAsdCksaSxzKX0sZi5hZGRMYWJlbD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sYWJlbHNbdF09dGhpcy5fcGFyc2VUaW1lT3JMYWJlbChlKSx0aGlzfSxmLmFkZFBhdXNlPWZ1bmN0aW9uKHQsZSxpLHMpe3JldHVybiB0aGlzLmNhbGwoXyxbXCJ7c2VsZn1cIixlLGksc10sdGhpcyx0KX0sZi5yZW1vdmVMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMuX2xhYmVsc1t0XSx0aGlzfSxmLmdldExhYmVsVGltZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dGhpcy5fbGFiZWxzW3RdP3RoaXMuX2xhYmVsc1t0XTotMX0sZi5fcGFyc2VUaW1lT3JMYWJlbD1mdW5jdGlvbihlLGkscyxyKXt2YXIgbjtpZihyIGluc3RhbmNlb2YgdCYmci50aW1lbGluZT09PXRoaXMpdGhpcy5yZW1vdmUocik7ZWxzZSBpZihyJiYociBpbnN0YW5jZW9mIEFycmF5fHxyLnB1c2gmJmEocikpKWZvcihuPXIubGVuZ3RoOy0tbj4tMTspcltuXWluc3RhbmNlb2YgdCYmcltuXS50aW1lbGluZT09PXRoaXMmJnRoaXMucmVtb3ZlKHJbbl0pO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpKXJldHVybiB0aGlzLl9wYXJzZVRpbWVPckxhYmVsKGkscyYmXCJudW1iZXJcIj09dHlwZW9mIGUmJm51bGw9PXRoaXMuX2xhYmVsc1tpXT9lLXRoaXMuZHVyYXRpb24oKTowLHMpO2lmKGk9aXx8MCxcInN0cmluZ1wiIT10eXBlb2YgZXx8IWlzTmFOKGUpJiZudWxsPT10aGlzLl9sYWJlbHNbZV0pbnVsbD09ZSYmKGU9dGhpcy5kdXJhdGlvbigpKTtlbHNle2lmKG49ZS5pbmRleE9mKFwiPVwiKSwtMT09PW4pcmV0dXJuIG51bGw9PXRoaXMuX2xhYmVsc1tlXT9zP3RoaXMuX2xhYmVsc1tlXT10aGlzLmR1cmF0aW9uKCkraTppOnRoaXMuX2xhYmVsc1tlXStpO2k9cGFyc2VJbnQoZS5jaGFyQXQobi0xKStcIjFcIiwxMCkqTnVtYmVyKGUuc3Vic3RyKG4rMSkpLGU9bj4xP3RoaXMuX3BhcnNlVGltZU9yTGFiZWwoZS5zdWJzdHIoMCxuLTEpLDAscyk6dGhpcy5kdXJhdGlvbigpfXJldHVybiBOdW1iZXIoZSkraX0sZi5zZWVrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG90YWxUaW1lKFwibnVtYmVyXCI9PXR5cGVvZiB0P3Q6dGhpcy5fcGFyc2VUaW1lT3JMYWJlbCh0KSxlIT09ITEpfSxmLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXVzZWQoITApfSxmLmdvdG9BbmRQbGF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucGxheSh0LGUpfSxmLmdvdG9BbmRTdG9wPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucGF1c2UodCxlKX0sZi5yZW5kZXI9ZnVuY3Rpb24odCxlLGkpe3RoaXMuX2djJiZ0aGlzLl9lbmFibGVkKCEwLCExKTt2YXIgcyxuLGEsaCxsLF89dGhpcy5fZGlydHk/dGhpcy50b3RhbER1cmF0aW9uKCk6dGhpcy5fdG90YWxEdXJhdGlvbix1PXRoaXMuX3RpbWUsZj10aGlzLl9zdGFydFRpbWUscD10aGlzLl90aW1lU2NhbGUsYz10aGlzLl9wYXVzZWQ7aWYodD49Xz8odGhpcy5fdG90YWxUaW1lPXRoaXMuX3RpbWU9Xyx0aGlzLl9yZXZlcnNlZHx8dGhpcy5faGFzUGF1c2VkQ2hpbGQoKXx8KG49ITAsaD1cIm9uQ29tcGxldGVcIiwwPT09dGhpcy5fZHVyYXRpb24mJigwPT09dHx8MD50aGlzLl9yYXdQcmV2VGltZXx8dGhpcy5fcmF3UHJldlRpbWU9PT1yKSYmdGhpcy5fcmF3UHJldlRpbWUhPT10JiZ0aGlzLl9maXJzdCYmKGw9ITAsdGhpcy5fcmF3UHJldlRpbWU+ciYmKGg9XCJvblJldmVyc2VDb21wbGV0ZVwiKSkpLHRoaXMuX3Jhd1ByZXZUaW1lPXRoaXMuX2R1cmF0aW9ufHwhZXx8dHx8dGhpcy5fcmF3UHJldlRpbWU9PT10P3Q6cix0PV8rMWUtNCk6MWUtNz50Pyh0aGlzLl90b3RhbFRpbWU9dGhpcy5fdGltZT0wLCgwIT09dXx8MD09PXRoaXMuX2R1cmF0aW9uJiZ0aGlzLl9yYXdQcmV2VGltZSE9PXImJih0aGlzLl9yYXdQcmV2VGltZT4wfHwwPnQmJnRoaXMuX3Jhd1ByZXZUaW1lPj0wKSkmJihoPVwib25SZXZlcnNlQ29tcGxldGVcIixuPXRoaXMuX3JldmVyc2VkKSwwPnQ/KHRoaXMuX2FjdGl2ZT0hMSwwPT09dGhpcy5fZHVyYXRpb24mJnRoaXMuX3Jhd1ByZXZUaW1lPj0wJiZ0aGlzLl9maXJzdCYmKGw9ITApLHRoaXMuX3Jhd1ByZXZUaW1lPXQpOih0aGlzLl9yYXdQcmV2VGltZT10aGlzLl9kdXJhdGlvbnx8IWV8fHR8fHRoaXMuX3Jhd1ByZXZUaW1lPT09dD90OnIsdD0wLHRoaXMuX2luaXR0ZWR8fChsPSEwKSkpOnRoaXMuX3RvdGFsVGltZT10aGlzLl90aW1lPXRoaXMuX3Jhd1ByZXZUaW1lPXQsdGhpcy5fdGltZSE9PXUmJnRoaXMuX2ZpcnN0fHxpfHxsKXtpZih0aGlzLl9pbml0dGVkfHwodGhpcy5faW5pdHRlZD0hMCksdGhpcy5fYWN0aXZlfHwhdGhpcy5fcGF1c2VkJiZ0aGlzLl90aW1lIT09dSYmdD4wJiYodGhpcy5fYWN0aXZlPSEwKSwwPT09dSYmdGhpcy52YXJzLm9uU3RhcnQmJjAhPT10aGlzLl90aW1lJiYoZXx8dGhpcy52YXJzLm9uU3RhcnQuYXBwbHkodGhpcy52YXJzLm9uU3RhcnRTY29wZXx8dGhpcyx0aGlzLnZhcnMub25TdGFydFBhcmFtc3x8bykpLHRoaXMuX3RpbWU+PXUpZm9yKHM9dGhpcy5fZmlyc3Q7cyYmKGE9cy5fbmV4dCwhdGhpcy5fcGF1c2VkfHxjKTspKHMuX2FjdGl2ZXx8cy5fc3RhcnRUaW1lPD10aGlzLl90aW1lJiYhcy5fcGF1c2VkJiYhcy5fZ2MpJiYocy5fcmV2ZXJzZWQ/cy5yZW5kZXIoKHMuX2RpcnR5P3MudG90YWxEdXJhdGlvbigpOnMuX3RvdGFsRHVyYXRpb24pLSh0LXMuX3N0YXJ0VGltZSkqcy5fdGltZVNjYWxlLGUsaSk6cy5yZW5kZXIoKHQtcy5fc3RhcnRUaW1lKSpzLl90aW1lU2NhbGUsZSxpKSkscz1hO2Vsc2UgZm9yKHM9dGhpcy5fbGFzdDtzJiYoYT1zLl9wcmV2LCF0aGlzLl9wYXVzZWR8fGMpOykocy5fYWN0aXZlfHx1Pj1zLl9zdGFydFRpbWUmJiFzLl9wYXVzZWQmJiFzLl9nYykmJihzLl9yZXZlcnNlZD9zLnJlbmRlcigocy5fZGlydHk/cy50b3RhbER1cmF0aW9uKCk6cy5fdG90YWxEdXJhdGlvbiktKHQtcy5fc3RhcnRUaW1lKSpzLl90aW1lU2NhbGUsZSxpKTpzLnJlbmRlcigodC1zLl9zdGFydFRpbWUpKnMuX3RpbWVTY2FsZSxlLGkpKSxzPWE7dGhpcy5fb25VcGRhdGUmJihlfHx0aGlzLl9vblVwZGF0ZS5hcHBseSh0aGlzLnZhcnMub25VcGRhdGVTY29wZXx8dGhpcyx0aGlzLnZhcnMub25VcGRhdGVQYXJhbXN8fG8pKSxoJiYodGhpcy5fZ2N8fChmPT09dGhpcy5fc3RhcnRUaW1lfHxwIT09dGhpcy5fdGltZVNjYWxlKSYmKDA9PT10aGlzLl90aW1lfHxfPj10aGlzLnRvdGFsRHVyYXRpb24oKSkmJihuJiYodGhpcy5fdGltZWxpbmUuYXV0b1JlbW92ZUNoaWxkcmVuJiZ0aGlzLl9lbmFibGVkKCExLCExKSx0aGlzLl9hY3RpdmU9ITEpLCFlJiZ0aGlzLnZhcnNbaF0mJnRoaXMudmFyc1toXS5hcHBseSh0aGlzLnZhcnNbaCtcIlNjb3BlXCJdfHx0aGlzLHRoaXMudmFyc1toK1wiUGFyYW1zXCJdfHxvKSkpfX0sZi5faGFzUGF1c2VkQ2hpbGQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZmlyc3Q7dDspe2lmKHQuX3BhdXNlZHx8dCBpbnN0YW5jZW9mIHMmJnQuX2hhc1BhdXNlZENoaWxkKCkpcmV0dXJuITA7dD10Ll9uZXh0fXJldHVybiExfSxmLmdldENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxzLHIpe3I9cnx8LTk5OTk5OTk5OTk7Zm9yKHZhciBuPVtdLGE9dGhpcy5fZmlyc3Qsbz0wO2E7KXI+YS5fc3RhcnRUaW1lfHwoYSBpbnN0YW5jZW9mIGk/ZSE9PSExJiYobltvKytdPWEpOihzIT09ITEmJihuW28rK109YSksdCE9PSExJiYobj1uLmNvbmNhdChhLmdldENoaWxkcmVuKCEwLGUscykpLG89bi5sZW5ndGgpKSksYT1hLl9uZXh0O3JldHVybiBufSxmLmdldFR3ZWVuc09mPWZ1bmN0aW9uKHQsZSl7dmFyIHMscixuPXRoaXMuX2djLGE9W10sbz0wO2ZvcihuJiZ0aGlzLl9lbmFibGVkKCEwLCEwKSxzPWkuZ2V0VHdlZW5zT2YodCkscj1zLmxlbmd0aDstLXI+LTE7KShzW3JdLnRpbWVsaW5lPT09dGhpc3x8ZSYmdGhpcy5fY29udGFpbnMoc1tyXSkpJiYoYVtvKytdPXNbcl0pO3JldHVybiBuJiZ0aGlzLl9lbmFibGVkKCExLCEwKSxhfSxmLl9jb250YWlucz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC50aW1lbGluZTtlOyl7aWYoZT09PXRoaXMpcmV0dXJuITA7ZT1lLnRpbWVsaW5lfXJldHVybiExfSxmLnNoaWZ0Q2hpbGRyZW49ZnVuY3Rpb24odCxlLGkpe2k9aXx8MDtmb3IodmFyIHMscj10aGlzLl9maXJzdCxuPXRoaXMuX2xhYmVscztyOylyLl9zdGFydFRpbWU+PWkmJihyLl9zdGFydFRpbWUrPXQpLHI9ci5fbmV4dDtpZihlKWZvcihzIGluIG4pbltzXT49aSYmKG5bc10rPXQpO3JldHVybiB0aGlzLl91bmNhY2hlKCEwKX0sZi5fa2lsbD1mdW5jdGlvbih0LGUpe2lmKCF0JiYhZSlyZXR1cm4gdGhpcy5fZW5hYmxlZCghMSwhMSk7Zm9yKHZhciBpPWU/dGhpcy5nZXRUd2VlbnNPZihlKTp0aGlzLmdldENoaWxkcmVuKCEwLCEwLCExKSxzPWkubGVuZ3RoLHI9ITE7LS1zPi0xOylpW3NdLl9raWxsKHQsZSkmJihyPSEwKTtyZXR1cm4gcn0sZi5jbGVhcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENoaWxkcmVuKCExLCEwLCEwKSxpPWUubGVuZ3RoO2Zvcih0aGlzLl90aW1lPXRoaXMuX3RvdGFsVGltZT0wOy0taT4tMTspZVtpXS5fZW5hYmxlZCghMSwhMSk7cmV0dXJuIHQhPT0hMSYmKHRoaXMuX2xhYmVscz17fSksdGhpcy5fdW5jYWNoZSghMCl9LGYuaW52YWxpZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9maXJzdDt0Oyl0LmludmFsaWRhdGUoKSx0PXQuX25leHQ7cmV0dXJuIHRoaXN9LGYuX2VuYWJsZWQ9ZnVuY3Rpb24odCxpKXtpZih0PT09dGhpcy5fZ2MpZm9yKHZhciBzPXRoaXMuX2ZpcnN0O3M7KXMuX2VuYWJsZWQodCwhMCkscz1zLl9uZXh0O3JldHVybiBlLnByb3RvdHlwZS5fZW5hYmxlZC5jYWxsKHRoaXMsdCxpKX0sZi5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oMCE9PXRoaXMuZHVyYXRpb24oKSYmMCE9PXQmJnRoaXMudGltZVNjYWxlKHRoaXMuX2R1cmF0aW9uL3QpLHRoaXMpOih0aGlzLl9kaXJ0eSYmdGhpcy50b3RhbER1cmF0aW9uKCksdGhpcy5fZHVyYXRpb24pfSxmLnRvdGFsRHVyYXRpb249ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2lmKHRoaXMuX2RpcnR5KXtmb3IodmFyIGUsaSxzPTAscj10aGlzLl9sYXN0LG49OTk5OTk5OTk5OTk5O3I7KWU9ci5fcHJldixyLl9kaXJ0eSYmci50b3RhbER1cmF0aW9uKCksci5fc3RhcnRUaW1lPm4mJnRoaXMuX3NvcnRDaGlsZHJlbiYmIXIuX3BhdXNlZD90aGlzLmFkZChyLHIuX3N0YXJ0VGltZS1yLl9kZWxheSk6bj1yLl9zdGFydFRpbWUsMD5yLl9zdGFydFRpbWUmJiFyLl9wYXVzZWQmJihzLT1yLl9zdGFydFRpbWUsdGhpcy5fdGltZWxpbmUuc21vb3RoQ2hpbGRUaW1pbmcmJih0aGlzLl9zdGFydFRpbWUrPXIuX3N0YXJ0VGltZS90aGlzLl90aW1lU2NhbGUpLHRoaXMuc2hpZnRDaGlsZHJlbigtci5fc3RhcnRUaW1lLCExLC05OTk5OTk5OTk5KSxuPTApLGk9ci5fc3RhcnRUaW1lK3IuX3RvdGFsRHVyYXRpb24vci5fdGltZVNjYWxlLGk+cyYmKHM9aSkscj1lO3RoaXMuX2R1cmF0aW9uPXRoaXMuX3RvdGFsRHVyYXRpb249cyx0aGlzLl9kaXJ0eT0hMX1yZXR1cm4gdGhpcy5fdG90YWxEdXJhdGlvbn1yZXR1cm4gMCE9PXRoaXMudG90YWxEdXJhdGlvbigpJiYwIT09dCYmdGhpcy50aW1lU2NhbGUodGhpcy5fdG90YWxEdXJhdGlvbi90KSx0aGlzfSxmLnVzZXNGcmFtZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5fdGltZWxpbmU7ZS5fdGltZWxpbmU7KWU9ZS5fdGltZWxpbmU7cmV0dXJuIGU9PT10Ll9yb290RnJhbWVzVGltZWxpbmV9LGYucmF3VGltZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXVzZWQ/dGhpcy5fdG90YWxUaW1lOih0aGlzLl90aW1lbGluZS5yYXdUaW1lKCktdGhpcy5fc3RhcnRUaW1lKSp0aGlzLl90aW1lU2NhbGV9LHN9LCEwKX0pLHdpbmRvdy5fZ3NEZWZpbmUmJndpbmRvdy5fZ3NRdWV1ZS5wb3AoKSgpOyIsIi8qIVxyXG4gKiBWRVJTSU9OOiAxLjEyLjFcclxuICogREFURTogMjAxNC0wNi0yNlxyXG4gKiBVUERBVEVTIEFORCBET0NTIEFUOiBodHRwOi8vd3d3LmdyZWVuc29jay5jb21cclxuICpcclxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDA4LTIwMTQsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogVGhpcyB3b3JrIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHA6Ly93d3cuZ3JlZW5zb2NrLmNvbS90ZXJtc19vZl91c2UuaHRtbCBvciBmb3JcclxuICogQ2x1YiBHcmVlblNvY2sgbWVtYmVycywgdGhlIHNvZnR3YXJlIGFncmVlbWVudCB0aGF0IHdhcyBpc3N1ZWQgd2l0aCB5b3VyIG1lbWJlcnNoaXAuXHJcbiAqIFxyXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cclxuICovXHJcbihmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT10LkdyZWVuU29ja0dsb2JhbHN8fHQ7aWYoIWUuVHdlZW5MaXRlKXt2YXIgaSxzLG4scixhLG89ZnVuY3Rpb24odCl7dmFyIGkscz10LnNwbGl0KFwiLlwiKSxuPWU7Zm9yKGk9MDtzLmxlbmd0aD5pO2krKyluW3NbaV1dPW49bltzW2ldXXx8e307cmV0dXJuIG59LGw9byhcImNvbS5ncmVlbnNvY2tcIiksaD0xZS0xMCxfPVtdLnNsaWNlLHU9ZnVuY3Rpb24oKXt9LG09ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGU9dC5jYWxsKFtdKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIG51bGwhPWkmJihpIGluc3RhbmNlb2YgQXJyYXl8fFwib2JqZWN0XCI9PXR5cGVvZiBpJiYhIWkucHVzaCYmdC5jYWxsKGkpPT09ZSl9fSgpLGY9e30scD1mdW5jdGlvbihpLHMsbixyKXt0aGlzLnNjPWZbaV0/ZltpXS5zYzpbXSxmW2ldPXRoaXMsdGhpcy5nc0NsYXNzPW51bGwsdGhpcy5mdW5jPW47dmFyIGE9W107dGhpcy5jaGVjaz1mdW5jdGlvbihsKXtmb3IodmFyIGgsXyx1LG0sYz1zLmxlbmd0aCxkPWM7LS1jPi0xOykoaD1mW3NbY11dfHxuZXcgcChzW2NdLFtdKSkuZ3NDbGFzcz8oYVtjXT1oLmdzQ2xhc3MsZC0tKTpsJiZoLnNjLnB1c2godGhpcyk7aWYoMD09PWQmJm4pZm9yKF89KFwiY29tLmdyZWVuc29jay5cIitpKS5zcGxpdChcIi5cIiksdT1fLnBvcCgpLG09byhfLmpvaW4oXCIuXCIpKVt1XT10aGlzLmdzQ2xhc3M9bi5hcHBseShuLGEpLHImJihlW3VdPW0sXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgodC5HcmVlblNvY2tBTURQYXRoP3QuR3JlZW5Tb2NrQU1EUGF0aCtcIi9cIjpcIlwiKStpLnNwbGl0KFwiLlwiKS5qb2luKFwiL1wiKSxbXSxmdW5jdGlvbigpe3JldHVybiBtfSk6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1tKSksYz0wO3RoaXMuc2MubGVuZ3RoPmM7YysrKXRoaXMuc2NbY10uY2hlY2soKX0sdGhpcy5jaGVjayghMCl9LGM9dC5fZ3NEZWZpbmU9ZnVuY3Rpb24odCxlLGkscyl7cmV0dXJuIG5ldyBwKHQsZSxpLHMpfSxkPWwuX2NsYXNzPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZT1lfHxmdW5jdGlvbigpe30sYyh0LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGV9LGkpLGV9O2MuZ2xvYmFscz1lO3ZhciB2PVswLDAsMSwxXSxnPVtdLFQ9ZChcImVhc2luZy5FYXNlXCIsZnVuY3Rpb24odCxlLGkscyl7dGhpcy5fZnVuYz10LHRoaXMuX3R5cGU9aXx8MCx0aGlzLl9wb3dlcj1zfHwwLHRoaXMuX3BhcmFtcz1lP3YuY29uY2F0KGUpOnZ9LCEwKSx5PVQubWFwPXt9LHc9VC5yZWdpc3Rlcj1mdW5jdGlvbih0LGUsaSxzKXtmb3IodmFyIG4scixhLG8saD1lLnNwbGl0KFwiLFwiKSxfPWgubGVuZ3RoLHU9KGl8fFwiZWFzZUluLGVhc2VPdXQsZWFzZUluT3V0XCIpLnNwbGl0KFwiLFwiKTstLV8+LTE7KWZvcihyPWhbX10sbj1zP2QoXCJlYXNpbmcuXCIrcixudWxsLCEwKTpsLmVhc2luZ1tyXXx8e30sYT11Lmxlbmd0aDstLWE+LTE7KW89dVthXSx5W3IrXCIuXCIrb109eVtvK3JdPW5bb109dC5nZXRSYXRpbz90OnRbb118fG5ldyB0fTtmb3Iobj1ULnByb3RvdHlwZSxuLl9jYWxjRW5kPSExLG4uZ2V0UmF0aW89ZnVuY3Rpb24odCl7aWYodGhpcy5fZnVuYylyZXR1cm4gdGhpcy5fcGFyYW1zWzBdPXQsdGhpcy5fZnVuYy5hcHBseShudWxsLHRoaXMuX3BhcmFtcyk7dmFyIGU9dGhpcy5fdHlwZSxpPXRoaXMuX3Bvd2VyLHM9MT09PWU/MS10OjI9PT1lP3Q6LjU+dD8yKnQ6MiooMS10KTtyZXR1cm4gMT09PWk/cyo9czoyPT09aT9zKj1zKnM6Mz09PWk/cyo9cypzKnM6ND09PWkmJihzKj1zKnMqcypzKSwxPT09ZT8xLXM6Mj09PWU/czouNT50P3MvMjoxLXMvMn0saT1bXCJMaW5lYXJcIixcIlF1YWRcIixcIkN1YmljXCIsXCJRdWFydFwiLFwiUXVpbnQsU3Ryb25nXCJdLHM9aS5sZW5ndGg7LS1zPi0xOyluPWlbc10rXCIsUG93ZXJcIitzLHcobmV3IFQobnVsbCxudWxsLDEscyksbixcImVhc2VPdXRcIiwhMCksdyhuZXcgVChudWxsLG51bGwsMixzKSxuLFwiZWFzZUluXCIrKDA9PT1zP1wiLGVhc2VOb25lXCI6XCJcIikpLHcobmV3IFQobnVsbCxudWxsLDMscyksbixcImVhc2VJbk91dFwiKTt5LmxpbmVhcj1sLmVhc2luZy5MaW5lYXIuZWFzZUluLHkuc3dpbmc9bC5lYXNpbmcuUXVhZC5lYXNlSW5PdXQ7dmFyIFA9ZChcImV2ZW50cy5FdmVudERpc3BhdGNoZXJcIixmdW5jdGlvbih0KXt0aGlzLl9saXN0ZW5lcnM9e30sdGhpcy5fZXZlbnRUYXJnZXQ9dHx8dGhpc30pO249UC5wcm90b3R5cGUsbi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxpLHMsbil7bj1ufHwwO3ZhciBvLGwsaD10aGlzLl9saXN0ZW5lcnNbdF0sXz0wO2ZvcihudWxsPT1oJiYodGhpcy5fbGlzdGVuZXJzW3RdPWg9W10pLGw9aC5sZW5ndGg7LS1sPi0xOylvPWhbbF0sby5jPT09ZSYmby5zPT09aT9oLnNwbGljZShsLDEpOjA9PT1fJiZuPm8ucHImJihfPWwrMSk7aC5zcGxpY2UoXywwLHtjOmUsczppLHVwOnMscHI6bn0pLHRoaXMhPT1yfHxhfHxyLndha2UoKX0sbi5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIGkscz10aGlzLl9saXN0ZW5lcnNbdF07aWYocylmb3IoaT1zLmxlbmd0aDstLWk+LTE7KWlmKHNbaV0uYz09PWUpcmV0dXJuIHMuc3BsaWNlKGksMSksdm9pZCAwfSxuLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGUsaSxzLG49dGhpcy5fbGlzdGVuZXJzW3RdO2lmKG4pZm9yKGU9bi5sZW5ndGgsaT10aGlzLl9ldmVudFRhcmdldDstLWU+LTE7KXM9bltlXSxzLnVwP3MuYy5jYWxsKHMuc3x8aSx7dHlwZTp0LHRhcmdldDppfSk6cy5jLmNhbGwocy5zfHxpKX07dmFyIGs9dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYj10LmNhbmNlbEFuaW1hdGlvbkZyYW1lLEE9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LFM9QSgpO2ZvcihpPVtcIm1zXCIsXCJtb3pcIixcIndlYmtpdFwiLFwib1wiXSxzPWkubGVuZ3RoOy0tcz4tMSYmIWs7KWs9dFtpW3NdK1wiUmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJdLGI9dFtpW3NdK1wiQ2FuY2VsQW5pbWF0aW9uRnJhbWVcIl18fHRbaVtzXStcIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZVwiXTtkKFwiVGlja2VyXCIsZnVuY3Rpb24odCxlKXt2YXIgaSxzLG4sbyxsLF89dGhpcyxtPUEoKSxmPWUhPT0hMSYmayxwPTUwMCxjPTMzLGQ9ZnVuY3Rpb24odCl7dmFyIGUscixhPUEoKS1TO2E+cCYmKG0rPWEtYyksUys9YSxfLnRpbWU9KFMtbSkvMWUzLGU9Xy50aW1lLWwsKCFpfHxlPjB8fHQ9PT0hMCkmJihfLmZyYW1lKyssbCs9ZSsoZT49bz8uMDA0Om8tZSkscj0hMCksdCE9PSEwJiYobj1zKGQpKSxyJiZfLmRpc3BhdGNoRXZlbnQoXCJ0aWNrXCIpfTtQLmNhbGwoXyksXy50aW1lPV8uZnJhbWU9MCxfLnRpY2s9ZnVuY3Rpb24oKXtkKCEwKX0sXy5sYWdTbW9vdGhpbmc9ZnVuY3Rpb24odCxlKXtwPXR8fDEvaCxjPU1hdGgubWluKGUscCwwKX0sXy5zbGVlcD1mdW5jdGlvbigpe251bGwhPW4mJihmJiZiP2Iobik6Y2xlYXJUaW1lb3V0KG4pLHM9dSxuPW51bGwsXz09PXImJihhPSExKSl9LF8ud2FrZT1mdW5jdGlvbigpe251bGwhPT1uP18uc2xlZXAoKTpfLmZyYW1lPjEwJiYoUz1BKCktcCs1KSxzPTA9PT1pP3U6ZiYmaz9rOmZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsMHwxZTMqKGwtXy50aW1lKSsxKX0sXz09PXImJihhPSEwKSxkKDIpfSxfLmZwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG89MS8oaXx8NjApLGw9dGhpcy50aW1lK28sXy53YWtlKCksdm9pZCAwKTppfSxfLnVzZVJBRj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXy5zbGVlcCgpLGY9dCxfLmZwcyhpKSx2b2lkIDApOmZ9LF8uZnBzKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtmJiYoIW58fDU+Xy5mcmFtZSkmJl8udXNlUkFGKCExKX0sMTUwMCl9KSxuPWwuVGlja2VyLnByb3RvdHlwZT1uZXcgbC5ldmVudHMuRXZlbnREaXNwYXRjaGVyLG4uY29uc3RydWN0b3I9bC5UaWNrZXI7dmFyIHg9ZChcImNvcmUuQW5pbWF0aW9uXCIsZnVuY3Rpb24odCxlKXtpZih0aGlzLnZhcnM9ZT1lfHx7fSx0aGlzLl9kdXJhdGlvbj10aGlzLl90b3RhbER1cmF0aW9uPXR8fDAsdGhpcy5fZGVsYXk9TnVtYmVyKGUuZGVsYXkpfHwwLHRoaXMuX3RpbWVTY2FsZT0xLHRoaXMuX2FjdGl2ZT1lLmltbWVkaWF0ZVJlbmRlcj09PSEwLHRoaXMuZGF0YT1lLmRhdGEsdGhpcy5fcmV2ZXJzZWQ9ZS5yZXZlcnNlZD09PSEwLEIpe2F8fHIud2FrZSgpO3ZhciBpPXRoaXMudmFycy51c2VGcmFtZXM/UTpCO2kuYWRkKHRoaXMsaS5fdGltZSksdGhpcy52YXJzLnBhdXNlZCYmdGhpcy5wYXVzZWQoITApfX0pO3I9eC50aWNrZXI9bmV3IGwuVGlja2VyLG49eC5wcm90b3R5cGUsbi5fZGlydHk9bi5fZ2M9bi5faW5pdHRlZD1uLl9wYXVzZWQ9ITEsbi5fdG90YWxUaW1lPW4uX3RpbWU9MCxuLl9yYXdQcmV2VGltZT0tMSxuLl9uZXh0PW4uX2xhc3Q9bi5fb25VcGRhdGU9bi5fdGltZWxpbmU9bi50aW1lbGluZT1udWxsLG4uX3BhdXNlZD0hMTt2YXIgQz1mdW5jdGlvbigpe2EmJkEoKS1TPjJlMyYmci53YWtlKCksc2V0VGltZW91dChDLDJlMyl9O0MoKSxuLnBsYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmdGhpcy5zZWVrKHQsZSksdGhpcy5yZXZlcnNlZCghMSkucGF1c2VkKCExKX0sbi5wYXVzZT1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZ0aGlzLnNlZWsodCxlKSx0aGlzLnBhdXNlZCghMCl9LG4ucmVzdW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJnRoaXMuc2Vlayh0LGUpLHRoaXMucGF1c2VkKCExKX0sbi5zZWVrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG90YWxUaW1lKE51bWJlcih0KSxlIT09ITEpfSxuLnJlc3RhcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXZlcnNlZCghMSkucGF1c2VkKCExKS50b3RhbFRpbWUodD8tdGhpcy5fZGVsYXk6MCxlIT09ITEsITApfSxuLnJldmVyc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmdGhpcy5zZWVrKHR8fHRoaXMudG90YWxEdXJhdGlvbigpLGUpLHRoaXMucmV2ZXJzZWQoITApLnBhdXNlZCghMSl9LG4ucmVuZGVyPWZ1bmN0aW9uKCl7fSxuLmludmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbi5pc0FjdGl2ZT1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fdGltZWxpbmUsaT10aGlzLl9zdGFydFRpbWU7cmV0dXJuIWV8fCF0aGlzLl9nYyYmIXRoaXMuX3BhdXNlZCYmZS5pc0FjdGl2ZSgpJiYodD1lLnJhd1RpbWUoKSk+PWkmJmkrdGhpcy50b3RhbER1cmF0aW9uKCkvdGhpcy5fdGltZVNjYWxlPnR9LG4uX2VuYWJsZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXx8ci53YWtlKCksdGhpcy5fZ2M9IXQsdGhpcy5fYWN0aXZlPXRoaXMuaXNBY3RpdmUoKSxlIT09ITAmJih0JiYhdGhpcy50aW1lbGluZT90aGlzLl90aW1lbGluZS5hZGQodGhpcyx0aGlzLl9zdGFydFRpbWUtdGhpcy5fZGVsYXkpOiF0JiZ0aGlzLnRpbWVsaW5lJiZ0aGlzLl90aW1lbGluZS5fcmVtb3ZlKHRoaXMsITApKSwhMX0sbi5fa2lsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkKCExLCExKX0sbi5raWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2tpbGwodCxlKSx0aGlzfSxuLl91bmNhY2hlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10P3RoaXM6dGhpcy50aW1lbGluZTtlOyllLl9kaXJ0eT0hMCxlPWUudGltZWxpbmU7cmV0dXJuIHRoaXN9LG4uX3N3YXBTZWxmSW5QYXJhbXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLGk9dC5jb25jYXQoKTstLWU+LTE7KVwie3NlbGZ9XCI9PT10W2VdJiYoaVtlXT10aGlzKTtyZXR1cm4gaX0sbi5ldmVudENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxpLHMpe2lmKFwib25cIj09PSh0fHxcIlwiKS5zdWJzdHIoMCwyKSl7dmFyIG49dGhpcy52YXJzO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBuW3RdO251bGw9PWU/ZGVsZXRlIG5bdF06KG5bdF09ZSxuW3QrXCJQYXJhbXNcIl09bShpKSYmLTEhPT1pLmpvaW4oXCJcIikuaW5kZXhPZihcIntzZWxmfVwiKT90aGlzLl9zd2FwU2VsZkluUGFyYW1zKGkpOmksblt0K1wiU2NvcGVcIl09cyksXCJvblVwZGF0ZVwiPT09dCYmKHRoaXMuX29uVXBkYXRlPWUpfXJldHVybiB0aGlzfSxuLmRlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl90aW1lbGluZS5zbW9vdGhDaGlsZFRpbWluZyYmdGhpcy5zdGFydFRpbWUodGhpcy5fc3RhcnRUaW1lK3QtdGhpcy5fZGVsYXkpLHRoaXMuX2RlbGF5PXQsdGhpcyk6dGhpcy5fZGVsYXl9LG4uZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2R1cmF0aW9uPXRoaXMuX3RvdGFsRHVyYXRpb249dCx0aGlzLl91bmNhY2hlKCEwKSx0aGlzLl90aW1lbGluZS5zbW9vdGhDaGlsZFRpbWluZyYmdGhpcy5fdGltZT4wJiZ0aGlzLl90aW1lPHRoaXMuX2R1cmF0aW9uJiYwIT09dCYmdGhpcy50b3RhbFRpbWUodGhpcy5fdG90YWxUaW1lKih0L3RoaXMuX2R1cmF0aW9uKSwhMCksdGhpcyk6KHRoaXMuX2RpcnR5PSExLHRoaXMuX2R1cmF0aW9uKX0sbi50b3RhbER1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXJ0eT0hMSxhcmd1bWVudHMubGVuZ3RoP3RoaXMuZHVyYXRpb24odCk6dGhpcy5fdG90YWxEdXJhdGlvbn0sbi50aW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2RpcnR5JiZ0aGlzLnRvdGFsRHVyYXRpb24oKSx0aGlzLnRvdGFsVGltZSh0PnRoaXMuX2R1cmF0aW9uP3RoaXMuX2R1cmF0aW9uOnQsZSkpOnRoaXMuX3RpbWV9LG4udG90YWxUaW1lPWZ1bmN0aW9uKHQsZSxpKXtpZihhfHxyLndha2UoKSwhYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdG90YWxUaW1lO2lmKHRoaXMuX3RpbWVsaW5lKXtpZigwPnQmJiFpJiYodCs9dGhpcy50b3RhbER1cmF0aW9uKCkpLHRoaXMuX3RpbWVsaW5lLnNtb290aENoaWxkVGltaW5nKXt0aGlzLl9kaXJ0eSYmdGhpcy50b3RhbER1cmF0aW9uKCk7dmFyIHM9dGhpcy5fdG90YWxEdXJhdGlvbixuPXRoaXMuX3RpbWVsaW5lO2lmKHQ+cyYmIWkmJih0PXMpLHRoaXMuX3N0YXJ0VGltZT0odGhpcy5fcGF1c2VkP3RoaXMuX3BhdXNlVGltZTpuLl90aW1lKS0odGhpcy5fcmV2ZXJzZWQ/cy10OnQpL3RoaXMuX3RpbWVTY2FsZSxuLl9kaXJ0eXx8dGhpcy5fdW5jYWNoZSghMSksbi5fdGltZWxpbmUpZm9yKDtuLl90aW1lbGluZTspbi5fdGltZWxpbmUuX3RpbWUhPT0obi5fc3RhcnRUaW1lK24uX3RvdGFsVGltZSkvbi5fdGltZVNjYWxlJiZuLnRvdGFsVGltZShuLl90b3RhbFRpbWUsITApLG49bi5fdGltZWxpbmV9dGhpcy5fZ2MmJnRoaXMuX2VuYWJsZWQoITAsITEpLCh0aGlzLl90b3RhbFRpbWUhPT10fHwwPT09dGhpcy5fZHVyYXRpb24pJiYodGhpcy5yZW5kZXIodCxlLCExKSx6Lmxlbmd0aCYmcSgpKX1yZXR1cm4gdGhpc30sbi5wcm9ncmVzcz1uLnRvdGFsUHJvZ3Jlc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnRvdGFsVGltZSh0aGlzLmR1cmF0aW9uKCkqdCxlKTp0aGlzLl90aW1lL3RoaXMuZHVyYXRpb24oKX0sbi5zdGFydFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQhPT10aGlzLl9zdGFydFRpbWUmJih0aGlzLl9zdGFydFRpbWU9dCx0aGlzLnRpbWVsaW5lJiZ0aGlzLnRpbWVsaW5lLl9zb3J0Q2hpbGRyZW4mJnRoaXMudGltZWxpbmUuYWRkKHRoaXMsdC10aGlzLl9kZWxheSkpLHRoaXMpOnRoaXMuX3N0YXJ0VGltZX0sbi50aW1lU2NhbGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3RpbWVTY2FsZTtpZih0PXR8fGgsdGhpcy5fdGltZWxpbmUmJnRoaXMuX3RpbWVsaW5lLnNtb290aENoaWxkVGltaW5nKXt2YXIgZT10aGlzLl9wYXVzZVRpbWUsaT1lfHwwPT09ZT9lOnRoaXMuX3RpbWVsaW5lLnRvdGFsVGltZSgpO3RoaXMuX3N0YXJ0VGltZT1pLShpLXRoaXMuX3N0YXJ0VGltZSkqdGhpcy5fdGltZVNjYWxlL3R9cmV0dXJuIHRoaXMuX3RpbWVTY2FsZT10LHRoaXMuX3VuY2FjaGUoITEpfSxuLnJldmVyc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0IT10aGlzLl9yZXZlcnNlZCYmKHRoaXMuX3JldmVyc2VkPXQsdGhpcy50b3RhbFRpbWUodGhpcy5fdGltZWxpbmUmJiF0aGlzLl90aW1lbGluZS5zbW9vdGhDaGlsZFRpbWluZz90aGlzLnRvdGFsRHVyYXRpb24oKS10aGlzLl90b3RhbFRpbWU6dGhpcy5fdG90YWxUaW1lLCEwKSksdGhpcyk6dGhpcy5fcmV2ZXJzZWR9LG4ucGF1c2VkPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9wYXVzZWQ7aWYodCE9dGhpcy5fcGF1c2VkJiZ0aGlzLl90aW1lbGluZSl7YXx8dHx8ci53YWtlKCk7dmFyIGU9dGhpcy5fdGltZWxpbmUsaT1lLnJhd1RpbWUoKSxzPWktdGhpcy5fcGF1c2VUaW1lOyF0JiZlLnNtb290aENoaWxkVGltaW5nJiYodGhpcy5fc3RhcnRUaW1lKz1zLHRoaXMuX3VuY2FjaGUoITEpKSx0aGlzLl9wYXVzZVRpbWU9dD9pOm51bGwsdGhpcy5fcGF1c2VkPXQsdGhpcy5fYWN0aXZlPXRoaXMuaXNBY3RpdmUoKSwhdCYmMCE9PXMmJnRoaXMuX2luaXR0ZWQmJnRoaXMuZHVyYXRpb24oKSYmdGhpcy5yZW5kZXIoZS5zbW9vdGhDaGlsZFRpbWluZz90aGlzLl90b3RhbFRpbWU6KGktdGhpcy5fc3RhcnRUaW1lKS90aGlzLl90aW1lU2NhbGUsITAsITApfXJldHVybiB0aGlzLl9nYyYmIXQmJnRoaXMuX2VuYWJsZWQoITAsITEpLHRoaXN9O3ZhciBSPWQoXCJjb3JlLlNpbXBsZVRpbWVsaW5lXCIsZnVuY3Rpb24odCl7eC5jYWxsKHRoaXMsMCx0KSx0aGlzLmF1dG9SZW1vdmVDaGlsZHJlbj10aGlzLnNtb290aENoaWxkVGltaW5nPSEwfSk7bj1SLnByb3RvdHlwZT1uZXcgeCxuLmNvbnN0cnVjdG9yPVIsbi5raWxsKCkuX2djPSExLG4uX2ZpcnN0PW4uX2xhc3Q9bnVsbCxuLl9zb3J0Q2hpbGRyZW49ITEsbi5hZGQ9bi5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgaSxzO2lmKHQuX3N0YXJ0VGltZT1OdW1iZXIoZXx8MCkrdC5fZGVsYXksdC5fcGF1c2VkJiZ0aGlzIT09dC5fdGltZWxpbmUmJih0Ll9wYXVzZVRpbWU9dC5fc3RhcnRUaW1lKyh0aGlzLnJhd1RpbWUoKS10Ll9zdGFydFRpbWUpL3QuX3RpbWVTY2FsZSksdC50aW1lbGluZSYmdC50aW1lbGluZS5fcmVtb3ZlKHQsITApLHQudGltZWxpbmU9dC5fdGltZWxpbmU9dGhpcyx0Ll9nYyYmdC5fZW5hYmxlZCghMCwhMCksaT10aGlzLl9sYXN0LHRoaXMuX3NvcnRDaGlsZHJlbilmb3Iocz10Ll9zdGFydFRpbWU7aSYmaS5fc3RhcnRUaW1lPnM7KWk9aS5fcHJldjtyZXR1cm4gaT8odC5fbmV4dD1pLl9uZXh0LGkuX25leHQ9dCk6KHQuX25leHQ9dGhpcy5fZmlyc3QsdGhpcy5fZmlyc3Q9dCksdC5fbmV4dD90Ll9uZXh0Ll9wcmV2PXQ6dGhpcy5fbGFzdD10LHQuX3ByZXY9aSx0aGlzLl90aW1lbGluZSYmdGhpcy5fdW5jYWNoZSghMCksdGhpc30sbi5fcmVtb3ZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudGltZWxpbmU9PT10aGlzJiYoZXx8dC5fZW5hYmxlZCghMSwhMCksdC50aW1lbGluZT1udWxsLHQuX3ByZXY/dC5fcHJldi5fbmV4dD10Ll9uZXh0OnRoaXMuX2ZpcnN0PT09dCYmKHRoaXMuX2ZpcnN0PXQuX25leHQpLHQuX25leHQ/dC5fbmV4dC5fcHJldj10Ll9wcmV2OnRoaXMuX2xhc3Q9PT10JiYodGhpcy5fbGFzdD10Ll9wcmV2KSx0aGlzLl90aW1lbGluZSYmdGhpcy5fdW5jYWNoZSghMCkpLHRoaXN9LG4ucmVuZGVyPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcyxuPXRoaXMuX2ZpcnN0O2Zvcih0aGlzLl90b3RhbFRpbWU9dGhpcy5fdGltZT10aGlzLl9yYXdQcmV2VGltZT10O247KXM9bi5fbmV4dCwobi5fYWN0aXZlfHx0Pj1uLl9zdGFydFRpbWUmJiFuLl9wYXVzZWQpJiYobi5fcmV2ZXJzZWQ/bi5yZW5kZXIoKG4uX2RpcnR5P24udG90YWxEdXJhdGlvbigpOm4uX3RvdGFsRHVyYXRpb24pLSh0LW4uX3N0YXJ0VGltZSkqbi5fdGltZVNjYWxlLGUsaSk6bi5yZW5kZXIoKHQtbi5fc3RhcnRUaW1lKSpuLl90aW1lU2NhbGUsZSxpKSksbj1zfSxuLnJhd1RpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gYXx8ci53YWtlKCksdGhpcy5fdG90YWxUaW1lfTt2YXIgRD1kKFwiVHdlZW5MaXRlXCIsZnVuY3Rpb24oZSxpLHMpe2lmKHguY2FsbCh0aGlzLGkscyksdGhpcy5yZW5kZXI9RC5wcm90b3R5cGUucmVuZGVyLG51bGw9PWUpdGhyb3dcIkNhbm5vdCB0d2VlbiBhIG51bGwgdGFyZ2V0LlwiO3RoaXMudGFyZ2V0PWU9XCJzdHJpbmdcIiE9dHlwZW9mIGU/ZTpELnNlbGVjdG9yKGUpfHxlO3ZhciBuLHIsYSxvPWUuanF1ZXJ5fHxlLmxlbmd0aCYmZSE9PXQmJmVbMF0mJihlWzBdPT09dHx8ZVswXS5ub2RlVHlwZSYmZVswXS5zdHlsZSYmIWUubm9kZVR5cGUpLGw9dGhpcy52YXJzLm92ZXJ3cml0ZTtpZih0aGlzLl9vdmVyd3JpdGU9bD1udWxsPT1sP0dbRC5kZWZhdWx0T3ZlcndyaXRlXTpcIm51bWJlclwiPT10eXBlb2YgbD9sPj4wOkdbbF0sKG98fGUgaW5zdGFuY2VvZiBBcnJheXx8ZS5wdXNoJiZtKGUpKSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF0pZm9yKHRoaXMuX3RhcmdldHM9YT1fLmNhbGwoZSwwKSx0aGlzLl9wcm9wTG9va3VwPVtdLHRoaXMuX3NpYmxpbmdzPVtdLG49MDthLmxlbmd0aD5uO24rKylyPWFbbl0scj9cInN0cmluZ1wiIT10eXBlb2Ygcj9yLmxlbmd0aCYmciE9PXQmJnJbMF0mJihyWzBdPT09dHx8clswXS5ub2RlVHlwZSYmclswXS5zdHlsZSYmIXIubm9kZVR5cGUpPyhhLnNwbGljZShuLS0sMSksdGhpcy5fdGFyZ2V0cz1hPWEuY29uY2F0KF8uY2FsbChyLDApKSk6KHRoaXMuX3NpYmxpbmdzW25dPU0ocix0aGlzLCExKSwxPT09bCYmdGhpcy5fc2libGluZ3Nbbl0ubGVuZ3RoPjEmJiQocix0aGlzLG51bGwsMSx0aGlzLl9zaWJsaW5nc1tuXSkpOihyPWFbbi0tXT1ELnNlbGVjdG9yKHIpLFwic3RyaW5nXCI9PXR5cGVvZiByJiZhLnNwbGljZShuKzEsMSkpOmEuc3BsaWNlKG4tLSwxKTtlbHNlIHRoaXMuX3Byb3BMb29rdXA9e30sdGhpcy5fc2libGluZ3M9TShlLHRoaXMsITEpLDE9PT1sJiZ0aGlzLl9zaWJsaW5ncy5sZW5ndGg+MSYmJChlLHRoaXMsbnVsbCwxLHRoaXMuX3NpYmxpbmdzKTsodGhpcy52YXJzLmltbWVkaWF0ZVJlbmRlcnx8MD09PWkmJjA9PT10aGlzLl9kZWxheSYmdGhpcy52YXJzLmltbWVkaWF0ZVJlbmRlciE9PSExKSYmKHRoaXMuX3RpbWU9LWgsdGhpcy5yZW5kZXIoLXRoaXMuX2RlbGF5KSl9LCEwKSxJPWZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aCYmZSE9PXQmJmVbMF0mJihlWzBdPT09dHx8ZVswXS5ub2RlVHlwZSYmZVswXS5zdHlsZSYmIWUubm9kZVR5cGUpfSxFPWZ1bmN0aW9uKHQsZSl7dmFyIGkscz17fTtmb3IoaSBpbiB0KWpbaV18fGkgaW4gZSYmXCJ0cmFuc2Zvcm1cIiE9PWkmJlwieFwiIT09aSYmXCJ5XCIhPT1pJiZcIndpZHRoXCIhPT1pJiZcImhlaWdodFwiIT09aSYmXCJjbGFzc05hbWVcIiE9PWkmJlwiYm9yZGVyXCIhPT1pfHwhKCFMW2ldfHxMW2ldJiZMW2ldLl9hdXRvQ1NTKXx8KHNbaV09dFtpXSxkZWxldGUgdFtpXSk7dC5jc3M9c307bj1ELnByb3RvdHlwZT1uZXcgeCxuLmNvbnN0cnVjdG9yPUQsbi5raWxsKCkuX2djPSExLG4ucmF0aW89MCxuLl9maXJzdFBUPW4uX3RhcmdldHM9bi5fb3ZlcndyaXR0ZW5Qcm9wcz1uLl9zdGFydEF0PW51bGwsbi5fbm90aWZ5UGx1Z2luc09mRW5hYmxlZD1uLl9sYXp5PSExLEQudmVyc2lvbj1cIjEuMTIuMVwiLEQuZGVmYXVsdEVhc2U9bi5fZWFzZT1uZXcgVChudWxsLG51bGwsMSwxKSxELmRlZmF1bHRPdmVyd3JpdGU9XCJhdXRvXCIsRC50aWNrZXI9cixELmF1dG9TbGVlcD0hMCxELmxhZ1Ntb290aGluZz1mdW5jdGlvbih0LGUpe3IubGFnU21vb3RoaW5nKHQsZSl9LEQuc2VsZWN0b3I9dC4kfHx0LmpRdWVyeXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQuJD8oRC5zZWxlY3Rvcj10LiQsdC4kKGUpKTp0LmRvY3VtZW50P3QuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjXCI9PT1lLmNoYXJBdCgwKT9lLnN1YnN0cigxKTplKTplfTt2YXIgej1bXSxPPXt9LE49RC5faW50ZXJuYWxzPXtpc0FycmF5Om0saXNTZWxlY3RvcjpJLGxhenlUd2VlbnM6en0sTD1ELl9wbHVnaW5zPXt9LFU9Ti50d2Vlbkxvb2t1cD17fSxGPTAsaj1OLnJlc2VydmVkUHJvcHM9e2Vhc2U6MSxkZWxheToxLG92ZXJ3cml0ZToxLG9uQ29tcGxldGU6MSxvbkNvbXBsZXRlUGFyYW1zOjEsb25Db21wbGV0ZVNjb3BlOjEsdXNlRnJhbWVzOjEscnVuQmFja3dhcmRzOjEsc3RhcnRBdDoxLG9uVXBkYXRlOjEsb25VcGRhdGVQYXJhbXM6MSxvblVwZGF0ZVNjb3BlOjEsb25TdGFydDoxLG9uU3RhcnRQYXJhbXM6MSxvblN0YXJ0U2NvcGU6MSxvblJldmVyc2VDb21wbGV0ZToxLG9uUmV2ZXJzZUNvbXBsZXRlUGFyYW1zOjEsb25SZXZlcnNlQ29tcGxldGVTY29wZToxLG9uUmVwZWF0OjEsb25SZXBlYXRQYXJhbXM6MSxvblJlcGVhdFNjb3BlOjEsZWFzZVBhcmFtczoxLHlveW86MSxpbW1lZGlhdGVSZW5kZXI6MSxyZXBlYXQ6MSxyZXBlYXREZWxheToxLGRhdGE6MSxwYXVzZWQ6MSxyZXZlcnNlZDoxLGF1dG9DU1M6MSxsYXp5OjF9LEc9e25vbmU6MCxhbGw6MSxhdXRvOjIsY29uY3VycmVudDozLGFsbE9uU3RhcnQ6NCxwcmVleGlzdGluZzo1LFwidHJ1ZVwiOjEsXCJmYWxzZVwiOjB9LFE9eC5fcm9vdEZyYW1lc1RpbWVsaW5lPW5ldyBSLEI9eC5fcm9vdFRpbWVsaW5lPW5ldyBSLHE9ZnVuY3Rpb24oKXt2YXIgdD16Lmxlbmd0aDtmb3IoTz17fTstLXQ+LTE7KWk9elt0XSxpJiZpLl9sYXp5IT09ITEmJihpLnJlbmRlcihpLl9sYXp5LCExLCEwKSxpLl9sYXp5PSExKTt6Lmxlbmd0aD0wfTtCLl9zdGFydFRpbWU9ci50aW1lLFEuX3N0YXJ0VGltZT1yLmZyYW1lLEIuX2FjdGl2ZT1RLl9hY3RpdmU9ITAsc2V0VGltZW91dChxLDEpLHguX3VwZGF0ZVJvb3Q9RC5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdCxlLGk7aWYoei5sZW5ndGgmJnEoKSxCLnJlbmRlcigoci50aW1lLUIuX3N0YXJ0VGltZSkqQi5fdGltZVNjYWxlLCExLCExKSxRLnJlbmRlcigoci5mcmFtZS1RLl9zdGFydFRpbWUpKlEuX3RpbWVTY2FsZSwhMSwhMSksei5sZW5ndGgmJnEoKSwhKHIuZnJhbWUlMTIwKSl7Zm9yKGkgaW4gVSl7Zm9yKGU9VVtpXS50d2VlbnMsdD1lLmxlbmd0aDstLXQ+LTE7KWVbdF0uX2djJiZlLnNwbGljZSh0LDEpOzA9PT1lLmxlbmd0aCYmZGVsZXRlIFVbaV19aWYoaT1CLl9maXJzdCwoIWl8fGkuX3BhdXNlZCkmJkQuYXV0b1NsZWVwJiYhUS5fZmlyc3QmJjE9PT1yLl9saXN0ZW5lcnMudGljay5sZW5ndGgpe2Zvcig7aSYmaS5fcGF1c2VkOylpPWkuX25leHQ7aXx8ci5zbGVlcCgpfX19LHIuYWRkRXZlbnRMaXN0ZW5lcihcInRpY2tcIix4Ll91cGRhdGVSb290KTt2YXIgTT1mdW5jdGlvbih0LGUsaSl7dmFyIHMsbixyPXQuX2dzVHdlZW5JRDtpZihVW3J8fCh0Ll9nc1R3ZWVuSUQ9cj1cInRcIitGKyspXXx8KFVbcl09e3RhcmdldDp0LHR3ZWVuczpbXX0pLGUmJihzPVVbcl0udHdlZW5zLHNbbj1zLmxlbmd0aF09ZSxpKSlmb3IoOy0tbj4tMTspc1tuXT09PWUmJnMuc3BsaWNlKG4sMSk7cmV0dXJuIFVbcl0udHdlZW5zfSwkPWZ1bmN0aW9uKHQsZSxpLHMsbil7dmFyIHIsYSxvLGw7aWYoMT09PXN8fHM+PTQpe2ZvcihsPW4ubGVuZ3RoLHI9MDtsPnI7cisrKWlmKChvPW5bcl0pIT09ZSlvLl9nY3x8by5fZW5hYmxlZCghMSwhMSkmJihhPSEwKTtlbHNlIGlmKDU9PT1zKWJyZWFrO3JldHVybiBhfXZhciBfLHU9ZS5fc3RhcnRUaW1lK2gsbT1bXSxmPTAscD0wPT09ZS5fZHVyYXRpb247Zm9yKHI9bi5sZW5ndGg7LS1yPi0xOykobz1uW3JdKT09PWV8fG8uX2djfHxvLl9wYXVzZWR8fChvLl90aW1lbGluZSE9PWUuX3RpbWVsaW5lPyhfPV98fEsoZSwwLHApLDA9PT1LKG8sXyxwKSYmKG1bZisrXT1vKSk6dT49by5fc3RhcnRUaW1lJiZvLl9zdGFydFRpbWUrby50b3RhbER1cmF0aW9uKCkvby5fdGltZVNjYWxlPnUmJigocHx8IW8uX2luaXR0ZWQpJiYyZS0xMD49dS1vLl9zdGFydFRpbWV8fChtW2YrK109bykpKTtmb3Iocj1mOy0tcj4tMTspbz1tW3JdLDI9PT1zJiZvLl9raWxsKGksdCkmJihhPSEwKSwoMiE9PXN8fCFvLl9maXJzdFBUJiZvLl9pbml0dGVkKSYmby5fZW5hYmxlZCghMSwhMSkmJihhPSEwKTtyZXR1cm4gYX0sSz1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBzPXQuX3RpbWVsaW5lLG49cy5fdGltZVNjYWxlLHI9dC5fc3RhcnRUaW1lO3MuX3RpbWVsaW5lOyl7aWYocis9cy5fc3RhcnRUaW1lLG4qPXMuX3RpbWVTY2FsZSxzLl9wYXVzZWQpcmV0dXJuLTEwMDtzPXMuX3RpbWVsaW5lfXJldHVybiByLz1uLHI+ZT9yLWU6aSYmcj09PWV8fCF0Ll9pbml0dGVkJiYyKmg+ci1lP2g6KHIrPXQudG90YWxEdXJhdGlvbigpL3QuX3RpbWVTY2FsZS9uKT5lK2g/MDpyLWUtaH07bi5faW5pdD1mdW5jdGlvbigpe3ZhciB0LGUsaSxzLG4scj10aGlzLnZhcnMsYT10aGlzLl9vdmVyd3JpdHRlblByb3BzLG89dGhpcy5fZHVyYXRpb24sbD0hIXIuaW1tZWRpYXRlUmVuZGVyLGg9ci5lYXNlO2lmKHIuc3RhcnRBdCl7dGhpcy5fc3RhcnRBdCYmKHRoaXMuX3N0YXJ0QXQucmVuZGVyKC0xLCEwKSx0aGlzLl9zdGFydEF0LmtpbGwoKSksbj17fTtmb3IocyBpbiByLnN0YXJ0QXQpbltzXT1yLnN0YXJ0QXRbc107aWYobi5vdmVyd3JpdGU9ITEsbi5pbW1lZGlhdGVSZW5kZXI9ITAsbi5sYXp5PWwmJnIubGF6eSE9PSExLG4uc3RhcnRBdD1uLmRlbGF5PW51bGwsdGhpcy5fc3RhcnRBdD1ELnRvKHRoaXMudGFyZ2V0LDAsbiksbClpZih0aGlzLl90aW1lPjApdGhpcy5fc3RhcnRBdD1udWxsO2Vsc2UgaWYoMCE9PW8pcmV0dXJufWVsc2UgaWYoci5ydW5CYWNrd2FyZHMmJjAhPT1vKWlmKHRoaXMuX3N0YXJ0QXQpdGhpcy5fc3RhcnRBdC5yZW5kZXIoLTEsITApLHRoaXMuX3N0YXJ0QXQua2lsbCgpLHRoaXMuX3N0YXJ0QXQ9bnVsbDtlbHNle2k9e307Zm9yKHMgaW4gcilqW3NdJiZcImF1dG9DU1NcIiE9PXN8fChpW3NdPXJbc10pO2lmKGkub3ZlcndyaXRlPTAsaS5kYXRhPVwiaXNGcm9tU3RhcnRcIixpLmxhenk9bCYmci5sYXp5IT09ITEsaS5pbW1lZGlhdGVSZW5kZXI9bCx0aGlzLl9zdGFydEF0PUQudG8odGhpcy50YXJnZXQsMCxpKSxsKXtpZigwPT09dGhpcy5fdGltZSlyZXR1cm59ZWxzZSB0aGlzLl9zdGFydEF0Ll9pbml0KCksdGhpcy5fc3RhcnRBdC5fZW5hYmxlZCghMSl9aWYodGhpcy5fZWFzZT1oP2ggaW5zdGFuY2VvZiBUP3IuZWFzZVBhcmFtcyBpbnN0YW5jZW9mIEFycmF5P2guY29uZmlnLmFwcGx5KGgsci5lYXNlUGFyYW1zKTpoOlwiZnVuY3Rpb25cIj09dHlwZW9mIGg/bmV3IFQoaCxyLmVhc2VQYXJhbXMpOnlbaF18fEQuZGVmYXVsdEVhc2U6RC5kZWZhdWx0RWFzZSx0aGlzLl9lYXNlVHlwZT10aGlzLl9lYXNlLl90eXBlLHRoaXMuX2Vhc2VQb3dlcj10aGlzLl9lYXNlLl9wb3dlcix0aGlzLl9maXJzdFBUPW51bGwsdGhpcy5fdGFyZ2V0cylmb3IodD10aGlzLl90YXJnZXRzLmxlbmd0aDstLXQ+LTE7KXRoaXMuX2luaXRQcm9wcyh0aGlzLl90YXJnZXRzW3RdLHRoaXMuX3Byb3BMb29rdXBbdF09e30sdGhpcy5fc2libGluZ3NbdF0sYT9hW3RdOm51bGwpJiYoZT0hMCk7ZWxzZSBlPXRoaXMuX2luaXRQcm9wcyh0aGlzLnRhcmdldCx0aGlzLl9wcm9wTG9va3VwLHRoaXMuX3NpYmxpbmdzLGEpO2lmKGUmJkQuX29uUGx1Z2luRXZlbnQoXCJfb25Jbml0QWxsUHJvcHNcIix0aGlzKSxhJiYodGhpcy5fZmlyc3RQVHx8XCJmdW5jdGlvblwiIT10eXBlb2YgdGhpcy50YXJnZXQmJnRoaXMuX2VuYWJsZWQoITEsITEpKSxyLnJ1bkJhY2t3YXJkcylmb3IoaT10aGlzLl9maXJzdFBUO2k7KWkucys9aS5jLGkuYz0taS5jLGk9aS5fbmV4dDt0aGlzLl9vblVwZGF0ZT1yLm9uVXBkYXRlLHRoaXMuX2luaXR0ZWQ9ITB9LG4uX2luaXRQcm9wcz1mdW5jdGlvbihlLGkscyxuKXt2YXIgcixhLG8sbCxoLF87aWYobnVsbD09ZSlyZXR1cm4hMTtPW2UuX2dzVHdlZW5JRF0mJnEoKSx0aGlzLnZhcnMuY3NzfHxlLnN0eWxlJiZlIT09dCYmZS5ub2RlVHlwZSYmTC5jc3MmJnRoaXMudmFycy5hdXRvQ1NTIT09ITEmJkUodGhpcy52YXJzLGUpO2ZvcihyIGluIHRoaXMudmFycyl7aWYoXz10aGlzLnZhcnNbcl0saltyXSlfJiYoXyBpbnN0YW5jZW9mIEFycmF5fHxfLnB1c2gmJm0oXykpJiYtMSE9PV8uam9pbihcIlwiKS5pbmRleE9mKFwie3NlbGZ9XCIpJiYodGhpcy52YXJzW3JdPV89dGhpcy5fc3dhcFNlbGZJblBhcmFtcyhfLHRoaXMpKTtlbHNlIGlmKExbcl0mJihsPW5ldyBMW3JdKS5fb25Jbml0VHdlZW4oZSx0aGlzLnZhcnNbcl0sdGhpcykpe2Zvcih0aGlzLl9maXJzdFBUPWg9e19uZXh0OnRoaXMuX2ZpcnN0UFQsdDpsLHA6XCJzZXRSYXRpb1wiLHM6MCxjOjEsZjohMCxuOnIscGc6ITAscHI6bC5fcHJpb3JpdHl9LGE9bC5fb3ZlcndyaXRlUHJvcHMubGVuZ3RoOy0tYT4tMTspaVtsLl9vdmVyd3JpdGVQcm9wc1thXV09dGhpcy5fZmlyc3RQVDsobC5fcHJpb3JpdHl8fGwuX29uSW5pdEFsbFByb3BzKSYmKG89ITApLChsLl9vbkRpc2FibGV8fGwuX29uRW5hYmxlKSYmKHRoaXMuX25vdGlmeVBsdWdpbnNPZkVuYWJsZWQ9ITApfWVsc2UgdGhpcy5fZmlyc3RQVD1pW3JdPWg9e19uZXh0OnRoaXMuX2ZpcnN0UFQsdDplLHA6cixmOlwiZnVuY3Rpb25cIj09dHlwZW9mIGVbcl0sbjpyLHBnOiExLHByOjB9LGgucz1oLmY/ZVtyLmluZGV4T2YoXCJzZXRcIil8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbXCJnZXRcIityLnN1YnN0cigzKV0/cjpcImdldFwiK3Iuc3Vic3RyKDMpXSgpOnBhcnNlRmxvYXQoZVtyXSksaC5jPVwic3RyaW5nXCI9PXR5cGVvZiBfJiZcIj1cIj09PV8uY2hhckF0KDEpP3BhcnNlSW50KF8uY2hhckF0KDApK1wiMVwiLDEwKSpOdW1iZXIoXy5zdWJzdHIoMikpOk51bWJlcihfKS1oLnN8fDA7aCYmaC5fbmV4dCYmKGguX25leHQuX3ByZXY9aCl9cmV0dXJuIG4mJnRoaXMuX2tpbGwobixlKT90aGlzLl9pbml0UHJvcHMoZSxpLHMsbik6dGhpcy5fb3ZlcndyaXRlPjEmJnRoaXMuX2ZpcnN0UFQmJnMubGVuZ3RoPjEmJiQoZSx0aGlzLGksdGhpcy5fb3ZlcndyaXRlLHMpPyh0aGlzLl9raWxsKGksZSksdGhpcy5faW5pdFByb3BzKGUsaSxzLG4pKToodGhpcy5fZmlyc3RQVCYmKHRoaXMudmFycy5sYXp5IT09ITEmJnRoaXMuX2R1cmF0aW9ufHx0aGlzLnZhcnMubGF6eSYmIXRoaXMuX2R1cmF0aW9uKSYmKE9bZS5fZ3NUd2VlbklEXT0hMCksbyl9LG4ucmVuZGVyPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcyxuLHIsYSxvPXRoaXMuX3RpbWUsbD10aGlzLl9kdXJhdGlvbixfPXRoaXMuX3Jhd1ByZXZUaW1lO2lmKHQ+PWwpdGhpcy5fdG90YWxUaW1lPXRoaXMuX3RpbWU9bCx0aGlzLnJhdGlvPXRoaXMuX2Vhc2UuX2NhbGNFbmQ/dGhpcy5fZWFzZS5nZXRSYXRpbygxKToxLHRoaXMuX3JldmVyc2VkfHwocz0hMCxuPVwib25Db21wbGV0ZVwiKSwwPT09bCYmKHRoaXMuX2luaXR0ZWR8fCF0aGlzLnZhcnMubGF6eXx8aSkmJih0aGlzLl9zdGFydFRpbWU9PT10aGlzLl90aW1lbGluZS5fZHVyYXRpb24mJih0PTApLCgwPT09dHx8MD5ffHxfPT09aCkmJl8hPT10JiYoaT0hMCxfPmgmJihuPVwib25SZXZlcnNlQ29tcGxldGVcIikpLHRoaXMuX3Jhd1ByZXZUaW1lPWE9IWV8fHR8fF89PT10P3Q6aCk7ZWxzZSBpZigxZS03PnQpdGhpcy5fdG90YWxUaW1lPXRoaXMuX3RpbWU9MCx0aGlzLnJhdGlvPXRoaXMuX2Vhc2UuX2NhbGNFbmQ/dGhpcy5fZWFzZS5nZXRSYXRpbygwKTowLCgwIT09b3x8MD09PWwmJl8+MCYmXyE9PWgpJiYobj1cIm9uUmV2ZXJzZUNvbXBsZXRlXCIscz10aGlzLl9yZXZlcnNlZCksMD50Pyh0aGlzLl9hY3RpdmU9ITEsMD09PWwmJih0aGlzLl9pbml0dGVkfHwhdGhpcy52YXJzLmxhenl8fGkpJiYoXz49MCYmKGk9ITApLHRoaXMuX3Jhd1ByZXZUaW1lPWE9IWV8fHR8fF89PT10P3Q6aCkpOnRoaXMuX2luaXR0ZWR8fChpPSEwKTtlbHNlIGlmKHRoaXMuX3RvdGFsVGltZT10aGlzLl90aW1lPXQsdGhpcy5fZWFzZVR5cGUpe3ZhciB1PXQvbCxtPXRoaXMuX2Vhc2VUeXBlLGY9dGhpcy5fZWFzZVBvd2VyOygxPT09bXx8Mz09PW0mJnU+PS41KSYmKHU9MS11KSwzPT09bSYmKHUqPTIpLDE9PT1mP3UqPXU6Mj09PWY/dSo9dSp1OjM9PT1mP3UqPXUqdSp1OjQ9PT1mJiYodSo9dSp1KnUqdSksdGhpcy5yYXRpbz0xPT09bT8xLXU6Mj09PW0/dTouNT50L2w/dS8yOjEtdS8yfWVsc2UgdGhpcy5yYXRpbz10aGlzLl9lYXNlLmdldFJhdGlvKHQvbCk7aWYodGhpcy5fdGltZSE9PW98fGkpe2lmKCF0aGlzLl9pbml0dGVkKXtpZih0aGlzLl9pbml0KCksIXRoaXMuX2luaXR0ZWR8fHRoaXMuX2djKXJldHVybjtpZighaSYmdGhpcy5fZmlyc3RQVCYmKHRoaXMudmFycy5sYXp5IT09ITEmJnRoaXMuX2R1cmF0aW9ufHx0aGlzLnZhcnMubGF6eSYmIXRoaXMuX2R1cmF0aW9uKSlyZXR1cm4gdGhpcy5fdGltZT10aGlzLl90b3RhbFRpbWU9byx0aGlzLl9yYXdQcmV2VGltZT1fLHoucHVzaCh0aGlzKSx0aGlzLl9sYXp5PXQsdm9pZCAwO3RoaXMuX3RpbWUmJiFzP3RoaXMucmF0aW89dGhpcy5fZWFzZS5nZXRSYXRpbyh0aGlzLl90aW1lL2wpOnMmJnRoaXMuX2Vhc2UuX2NhbGNFbmQmJih0aGlzLnJhdGlvPXRoaXMuX2Vhc2UuZ2V0UmF0aW8oMD09PXRoaXMuX3RpbWU/MDoxKSl9Zm9yKHRoaXMuX2xhenkhPT0hMSYmKHRoaXMuX2xhenk9ITEpLHRoaXMuX2FjdGl2ZXx8IXRoaXMuX3BhdXNlZCYmdGhpcy5fdGltZSE9PW8mJnQ+PTAmJih0aGlzLl9hY3RpdmU9ITApLDA9PT1vJiYodGhpcy5fc3RhcnRBdCYmKHQ+PTA/dGhpcy5fc3RhcnRBdC5yZW5kZXIodCxlLGkpOm58fChuPVwiX2R1bW15R1NcIikpLHRoaXMudmFycy5vblN0YXJ0JiYoMCE9PXRoaXMuX3RpbWV8fDA9PT1sKSYmKGV8fHRoaXMudmFycy5vblN0YXJ0LmFwcGx5KHRoaXMudmFycy5vblN0YXJ0U2NvcGV8fHRoaXMsdGhpcy52YXJzLm9uU3RhcnRQYXJhbXN8fGcpKSkscj10aGlzLl9maXJzdFBUO3I7KXIuZj9yLnRbci5wXShyLmMqdGhpcy5yYXRpbytyLnMpOnIudFtyLnBdPXIuYyp0aGlzLnJhdGlvK3IucyxyPXIuX25leHQ7dGhpcy5fb25VcGRhdGUmJigwPnQmJnRoaXMuX3N0YXJ0QXQmJnRoaXMuX3N0YXJ0VGltZSYmdGhpcy5fc3RhcnRBdC5yZW5kZXIodCxlLGkpLGV8fCh0aGlzLl90aW1lIT09b3x8cykmJnRoaXMuX29uVXBkYXRlLmFwcGx5KHRoaXMudmFycy5vblVwZGF0ZVNjb3BlfHx0aGlzLHRoaXMudmFycy5vblVwZGF0ZVBhcmFtc3x8ZykpLG4mJih0aGlzLl9nY3x8KDA+dCYmdGhpcy5fc3RhcnRBdCYmIXRoaXMuX29uVXBkYXRlJiZ0aGlzLl9zdGFydFRpbWUmJnRoaXMuX3N0YXJ0QXQucmVuZGVyKHQsZSxpKSxzJiYodGhpcy5fdGltZWxpbmUuYXV0b1JlbW92ZUNoaWxkcmVuJiZ0aGlzLl9lbmFibGVkKCExLCExKSx0aGlzLl9hY3RpdmU9ITEpLCFlJiZ0aGlzLnZhcnNbbl0mJnRoaXMudmFyc1tuXS5hcHBseSh0aGlzLnZhcnNbbitcIlNjb3BlXCJdfHx0aGlzLHRoaXMudmFyc1tuK1wiUGFyYW1zXCJdfHxnKSwwPT09bCYmdGhpcy5fcmF3UHJldlRpbWU9PT1oJiZhIT09aCYmKHRoaXMuX3Jhd1ByZXZUaW1lPTApKSl9fSxuLl9raWxsPWZ1bmN0aW9uKHQsZSl7aWYoXCJhbGxcIj09PXQmJih0PW51bGwpLG51bGw9PXQmJihudWxsPT1lfHxlPT09dGhpcy50YXJnZXQpKXJldHVybiB0aGlzLl9sYXp5PSExLHRoaXMuX2VuYWJsZWQoITEsITEpO2U9XCJzdHJpbmdcIiE9dHlwZW9mIGU/ZXx8dGhpcy5fdGFyZ2V0c3x8dGhpcy50YXJnZXQ6RC5zZWxlY3RvcihlKXx8ZTt2YXIgaSxzLG4scixhLG8sbCxoO2lmKChtKGUpfHxJKGUpKSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF0pZm9yKGk9ZS5sZW5ndGg7LS1pPi0xOyl0aGlzLl9raWxsKHQsZVtpXSkmJihvPSEwKTtlbHNle2lmKHRoaXMuX3RhcmdldHMpe2ZvcihpPXRoaXMuX3RhcmdldHMubGVuZ3RoOy0taT4tMTspaWYoZT09PXRoaXMuX3RhcmdldHNbaV0pe2E9dGhpcy5fcHJvcExvb2t1cFtpXXx8e30sdGhpcy5fb3ZlcndyaXR0ZW5Qcm9wcz10aGlzLl9vdmVyd3JpdHRlblByb3BzfHxbXSxzPXRoaXMuX292ZXJ3cml0dGVuUHJvcHNbaV09dD90aGlzLl9vdmVyd3JpdHRlblByb3BzW2ldfHx7fTpcImFsbFwiO2JyZWFrfX1lbHNle2lmKGUhPT10aGlzLnRhcmdldClyZXR1cm4hMTthPXRoaXMuX3Byb3BMb29rdXAscz10aGlzLl9vdmVyd3JpdHRlblByb3BzPXQ/dGhpcy5fb3ZlcndyaXR0ZW5Qcm9wc3x8e306XCJhbGxcIn1pZihhKXtsPXR8fGEsaD10IT09cyYmXCJhbGxcIiE9PXMmJnQhPT1hJiYoXCJvYmplY3RcIiE9dHlwZW9mIHR8fCF0Ll90ZW1wS2lsbCk7Zm9yKG4gaW4gbCkocj1hW25dKSYmKHIucGcmJnIudC5fa2lsbChsKSYmKG89ITApLHIucGcmJjAhPT1yLnQuX292ZXJ3cml0ZVByb3BzLmxlbmd0aHx8KHIuX3ByZXY/ci5fcHJldi5fbmV4dD1yLl9uZXh0OnI9PT10aGlzLl9maXJzdFBUJiYodGhpcy5fZmlyc3RQVD1yLl9uZXh0KSxyLl9uZXh0JiYoci5fbmV4dC5fcHJldj1yLl9wcmV2KSxyLl9uZXh0PXIuX3ByZXY9bnVsbCksZGVsZXRlIGFbbl0pLGgmJihzW25dPTEpOyF0aGlzLl9maXJzdFBUJiZ0aGlzLl9pbml0dGVkJiZ0aGlzLl9lbmFibGVkKCExLCExKX19cmV0dXJuIG99LG4uaW52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub3RpZnlQbHVnaW5zT2ZFbmFibGVkJiZELl9vblBsdWdpbkV2ZW50KFwiX29uRGlzYWJsZVwiLHRoaXMpLHRoaXMuX2ZpcnN0UFQ9bnVsbCx0aGlzLl9vdmVyd3JpdHRlblByb3BzPW51bGwsdGhpcy5fb25VcGRhdGU9bnVsbCx0aGlzLl9zdGFydEF0PW51bGwsdGhpcy5faW5pdHRlZD10aGlzLl9hY3RpdmU9dGhpcy5fbm90aWZ5UGx1Z2luc09mRW5hYmxlZD10aGlzLl9sYXp5PSExLHRoaXMuX3Byb3BMb29rdXA9dGhpcy5fdGFyZ2V0cz97fTpbXSx0aGlzfSxuLl9lbmFibGVkPWZ1bmN0aW9uKHQsZSl7aWYoYXx8ci53YWtlKCksdCYmdGhpcy5fZ2Mpe3ZhciBpLHM9dGhpcy5fdGFyZ2V0cztpZihzKWZvcihpPXMubGVuZ3RoOy0taT4tMTspdGhpcy5fc2libGluZ3NbaV09TShzW2ldLHRoaXMsITApO2Vsc2UgdGhpcy5fc2libGluZ3M9TSh0aGlzLnRhcmdldCx0aGlzLCEwKX1yZXR1cm4geC5wcm90b3R5cGUuX2VuYWJsZWQuY2FsbCh0aGlzLHQsZSksdGhpcy5fbm90aWZ5UGx1Z2luc09mRW5hYmxlZCYmdGhpcy5fZmlyc3RQVD9ELl9vblBsdWdpbkV2ZW50KHQ/XCJfb25FbmFibGVcIjpcIl9vbkRpc2FibGVcIix0aGlzKTohMX0sRC50bz1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBEKHQsZSxpKX0sRC5mcm9tPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gaS5ydW5CYWNrd2FyZHM9ITAsaS5pbW1lZGlhdGVSZW5kZXI9MCE9aS5pbW1lZGlhdGVSZW5kZXIsbmV3IEQodCxlLGkpfSxELmZyb21Ubz1mdW5jdGlvbih0LGUsaSxzKXtyZXR1cm4gcy5zdGFydEF0PWkscy5pbW1lZGlhdGVSZW5kZXI9MCE9cy5pbW1lZGlhdGVSZW5kZXImJjAhPWkuaW1tZWRpYXRlUmVuZGVyLG5ldyBEKHQsZSxzKX0sRC5kZWxheWVkQ2FsbD1mdW5jdGlvbih0LGUsaSxzLG4pe3JldHVybiBuZXcgRChlLDAse2RlbGF5OnQsb25Db21wbGV0ZTplLG9uQ29tcGxldGVQYXJhbXM6aSxvbkNvbXBsZXRlU2NvcGU6cyxvblJldmVyc2VDb21wbGV0ZTplLG9uUmV2ZXJzZUNvbXBsZXRlUGFyYW1zOmksb25SZXZlcnNlQ29tcGxldGVTY29wZTpzLGltbWVkaWF0ZVJlbmRlcjohMSx1c2VGcmFtZXM6bixvdmVyd3JpdGU6MH0pfSxELnNldD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRCh0LDAsZSl9LEQuZ2V0VHdlZW5zT2Y9ZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybltdO3Q9XCJzdHJpbmdcIiE9dHlwZW9mIHQ/dDpELnNlbGVjdG9yKHQpfHx0O3ZhciBpLHMsbixyO2lmKChtKHQpfHxJKHQpKSYmXCJudW1iZXJcIiE9dHlwZW9mIHRbMF0pe2ZvcihpPXQubGVuZ3RoLHM9W107LS1pPi0xOylzPXMuY29uY2F0KEQuZ2V0VHdlZW5zT2YodFtpXSxlKSk7Zm9yKGk9cy5sZW5ndGg7LS1pPi0xOylmb3Iocj1zW2ldLG49aTstLW4+LTE7KXI9PT1zW25dJiZzLnNwbGljZShpLDEpfWVsc2UgZm9yKHM9TSh0KS5jb25jYXQoKSxpPXMubGVuZ3RoOy0taT4tMTspKHNbaV0uX2djfHxlJiYhc1tpXS5pc0FjdGl2ZSgpKSYmcy5zcGxpY2UoaSwxKTtyZXR1cm4gc30sRC5raWxsVHdlZW5zT2Y9RC5raWxsRGVsYXllZENhbGxzVG89ZnVuY3Rpb24odCxlLGkpe1wib2JqZWN0XCI9PXR5cGVvZiBlJiYoaT1lLGU9ITEpO2Zvcih2YXIgcz1ELmdldFR3ZWVuc09mKHQsZSksbj1zLmxlbmd0aDstLW4+LTE7KXNbbl0uX2tpbGwoaSx0KX07dmFyIEg9ZChcInBsdWdpbnMuVHdlZW5QbHVnaW5cIixmdW5jdGlvbih0LGUpe3RoaXMuX292ZXJ3cml0ZVByb3BzPSh0fHxcIlwiKS5zcGxpdChcIixcIiksdGhpcy5fcHJvcE5hbWU9dGhpcy5fb3ZlcndyaXRlUHJvcHNbMF0sdGhpcy5fcHJpb3JpdHk9ZXx8MCx0aGlzLl9zdXBlcj1ILnByb3RvdHlwZX0sITApO2lmKG49SC5wcm90b3R5cGUsSC52ZXJzaW9uPVwiMS4xMC4xXCIsSC5BUEk9MixuLl9maXJzdFBUPW51bGwsbi5fYWRkVHdlZW49ZnVuY3Rpb24odCxlLGkscyxuLHIpe3ZhciBhLG87cmV0dXJuIG51bGwhPXMmJihhPVwibnVtYmVyXCI9PXR5cGVvZiBzfHxcIj1cIiE9PXMuY2hhckF0KDEpP051bWJlcihzKS1pOnBhcnNlSW50KHMuY2hhckF0KDApK1wiMVwiLDEwKSpOdW1iZXIocy5zdWJzdHIoMikpKT8odGhpcy5fZmlyc3RQVD1vPXtfbmV4dDp0aGlzLl9maXJzdFBULHQ6dCxwOmUsczppLGM6YSxmOlwiZnVuY3Rpb25cIj09dHlwZW9mIHRbZV0sbjpufHxlLHI6cn0sby5fbmV4dCYmKG8uX25leHQuX3ByZXY9byksbyk6dm9pZCAwfSxuLnNldFJhdGlvPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpPXRoaXMuX2ZpcnN0UFQscz0xZS02O2k7KWU9aS5jKnQraS5zLGkucj9lPU1hdGgucm91bmQoZSk6cz5lJiZlPi1zJiYoZT0wKSxpLmY/aS50W2kucF0oZSk6aS50W2kucF09ZSxpPWkuX25leHR9LG4uX2tpbGw9ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLl9vdmVyd3JpdGVQcm9wcyxzPXRoaXMuX2ZpcnN0UFQ7aWYobnVsbCE9dFt0aGlzLl9wcm9wTmFtZV0pdGhpcy5fb3ZlcndyaXRlUHJvcHM9W107ZWxzZSBmb3IoZT1pLmxlbmd0aDstLWU+LTE7KW51bGwhPXRbaVtlXV0mJmkuc3BsaWNlKGUsMSk7Zm9yKDtzOyludWxsIT10W3Mubl0mJihzLl9uZXh0JiYocy5fbmV4dC5fcHJldj1zLl9wcmV2KSxzLl9wcmV2PyhzLl9wcmV2Ll9uZXh0PXMuX25leHQscy5fcHJldj1udWxsKTp0aGlzLl9maXJzdFBUPT09cyYmKHRoaXMuX2ZpcnN0UFQ9cy5fbmV4dCkpLHM9cy5fbmV4dDtyZXR1cm4hMX0sbi5fcm91bmRQcm9wcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10aGlzLl9maXJzdFBUO2k7KSh0W3RoaXMuX3Byb3BOYW1lXXx8bnVsbCE9aS5uJiZ0W2kubi5zcGxpdCh0aGlzLl9wcm9wTmFtZStcIl9cIikuam9pbihcIlwiKV0pJiYoaS5yPWUpLGk9aS5fbmV4dH0sRC5fb25QbHVnaW5FdmVudD1mdW5jdGlvbih0LGUpe3ZhciBpLHMsbixyLGEsbz1lLl9maXJzdFBUO2lmKFwiX29uSW5pdEFsbFByb3BzXCI9PT10KXtmb3IoO287KXtmb3IoYT1vLl9uZXh0LHM9bjtzJiZzLnByPm8ucHI7KXM9cy5fbmV4dDsoby5fcHJldj1zP3MuX3ByZXY6cik/by5fcHJldi5fbmV4dD1vOm49bywoby5fbmV4dD1zKT9zLl9wcmV2PW86cj1vLG89YX1vPWUuX2ZpcnN0UFQ9bn1mb3IoO287KW8ucGcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG8udFt0XSYmby50W3RdKCkmJihpPSEwKSxvPW8uX25leHQ7cmV0dXJuIGl9LEguYWN0aXZhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoOy0tZT4tMTspdFtlXS5BUEk9PT1ILkFQSSYmKExbKG5ldyB0W2VdKS5fcHJvcE5hbWVdPXRbZV0pO3JldHVybiEwfSxjLnBsdWdpbj1mdW5jdGlvbih0KXtpZighKHQmJnQucHJvcE5hbWUmJnQuaW5pdCYmdC5BUEkpKXRocm93XCJpbGxlZ2FsIHBsdWdpbiBkZWZpbml0aW9uLlwiO3ZhciBlLGk9dC5wcm9wTmFtZSxzPXQucHJpb3JpdHl8fDAsbj10Lm92ZXJ3cml0ZVByb3BzLHI9e2luaXQ6XCJfb25Jbml0VHdlZW5cIixzZXQ6XCJzZXRSYXRpb1wiLGtpbGw6XCJfa2lsbFwiLHJvdW5kOlwiX3JvdW5kUHJvcHNcIixpbml0QWxsOlwiX29uSW5pdEFsbFByb3BzXCJ9LGE9ZChcInBsdWdpbnMuXCIraS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnN1YnN0cigxKStcIlBsdWdpblwiLGZ1bmN0aW9uKCl7SC5jYWxsKHRoaXMsaSxzKSx0aGlzLl9vdmVyd3JpdGVQcm9wcz1ufHxbXX0sdC5nbG9iYWw9PT0hMCksbz1hLnByb3RvdHlwZT1uZXcgSChpKTtvLmNvbnN0cnVjdG9yPWEsYS5BUEk9dC5BUEk7Zm9yKGUgaW4gcilcImZ1bmN0aW9uXCI9PXR5cGVvZiB0W2VdJiYob1tyW2VdXT10W2VdKTtyZXR1cm4gYS52ZXJzaW9uPXQudmVyc2lvbixILmFjdGl2YXRlKFthXSksYX0saT10Ll9nc1F1ZXVlKXtmb3Iocz0wO2kubGVuZ3RoPnM7cysrKWlbc10oKTtmb3IobiBpbiBmKWZbbl0uZnVuY3x8dC5jb25zb2xlLmxvZyhcIkdTQVAgZW5jb3VudGVyZWQgbWlzc2luZyBkZXBlbmRlbmN5OiBjb20uZ3JlZW5zb2NrLlwiK24pfWE9ITF9fSkod2luZG93KTsiLCIvKiFcclxuICogVkVSU0lPTjogYmV0YSAxLjkuM1xyXG4gKiBEQVRFOiAyMDEzLTA0LTAyXHJcbiAqIFVQREFURVMgQU5EIERPQ1MgQVQ6IGh0dHA6Ly93d3cuZ3JlZW5zb2NrLmNvbVxyXG4gKlxyXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxNCwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBUaGlzIHdvcmsgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYXQgaHR0cDovL3d3dy5ncmVlbnNvY2suY29tL3Rlcm1zX29mX3VzZS5odG1sIG9yIGZvclxyXG4gKiBDbHViIEdyZWVuU29jayBtZW1iZXJzLCB0aGUgc29mdHdhcmUgYWdyZWVtZW50IHRoYXQgd2FzIGlzc3VlZCB3aXRoIHlvdXIgbWVtYmVyc2hpcC5cclxuICogXHJcbiAqIEBhdXRob3I6IEphY2sgRG95bGUsIGphY2tAZ3JlZW5zb2NrLmNvbVxyXG4gKiovXHJcbih3aW5kb3cuX2dzUXVldWV8fCh3aW5kb3cuX2dzUXVldWU9W10pKS5wdXNoKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7d2luZG93Ll9nc0RlZmluZShcImVhc2luZy5CYWNrXCIsW1wiZWFzaW5nLkVhc2VcIl0sZnVuY3Rpb24odCl7dmFyIGUsaSxzLHI9d2luZG93LkdyZWVuU29ja0dsb2JhbHN8fHdpbmRvdyxuPXIuY29tLmdyZWVuc29jayxhPTIqTWF0aC5QSSxvPU1hdGguUEkvMixoPW4uX2NsYXNzLGw9ZnVuY3Rpb24oZSxpKXt2YXIgcz1oKFwiZWFzaW5nLlwiK2UsZnVuY3Rpb24oKXt9LCEwKSxyPXMucHJvdG90eXBlPW5ldyB0O3JldHVybiByLmNvbnN0cnVjdG9yPXMsci5nZXRSYXRpbz1pLHN9LF89dC5yZWdpc3Rlcnx8ZnVuY3Rpb24oKXt9LHU9ZnVuY3Rpb24odCxlLGkscyl7dmFyIHI9aChcImVhc2luZy5cIit0LHtlYXNlT3V0Om5ldyBlLGVhc2VJbjpuZXcgaSxlYXNlSW5PdXQ6bmV3IHN9LCEwKTtyZXR1cm4gXyhyLHQpLHJ9LGM9ZnVuY3Rpb24odCxlLGkpe3RoaXMudD10LHRoaXMudj1lLGkmJih0aGlzLm5leHQ9aSxpLnByZXY9dGhpcyx0aGlzLmM9aS52LWUsdGhpcy5nYXA9aS50LXQpfSxmPWZ1bmN0aW9uKGUsaSl7dmFyIHM9aChcImVhc2luZy5cIitlLGZ1bmN0aW9uKHQpe3RoaXMuX3AxPXR8fDA9PT10P3Q6MS43MDE1OCx0aGlzLl9wMj0xLjUyNSp0aGlzLl9wMX0sITApLHI9cy5wcm90b3R5cGU9bmV3IHQ7cmV0dXJuIHIuY29uc3RydWN0b3I9cyxyLmdldFJhdGlvPWksci5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHQpfSxzfSxwPXUoXCJCYWNrXCIsZihcIkJhY2tPdXRcIixmdW5jdGlvbih0KXtyZXR1cm4odC09MSkqdCooKHRoaXMuX3AxKzEpKnQrdGhpcy5fcDEpKzF9KSxmKFwiQmFja0luXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooKHRoaXMuX3AxKzEpKnQtdGhpcy5fcDEpfSksZihcIkJhY2tJbk91dFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxPih0Kj0yKT8uNSp0KnQqKCh0aGlzLl9wMisxKSp0LXRoaXMuX3AyKTouNSooKHQtPTIpKnQqKCh0aGlzLl9wMisxKSp0K3RoaXMuX3AyKSsyKX0pKSxtPWgoXCJlYXNpbmcuU2xvd01vXCIsZnVuY3Rpb24odCxlLGkpe2U9ZXx8MD09PWU/ZTouNyxudWxsPT10P3Q9Ljc6dD4xJiYodD0xKSx0aGlzLl9wPTEhPT10P2U6MCx0aGlzLl9wMT0oMS10KS8yLHRoaXMuX3AyPXQsdGhpcy5fcDM9dGhpcy5fcDErdGhpcy5fcDIsdGhpcy5fY2FsY0VuZD1pPT09ITB9LCEwKSxkPW0ucHJvdG90eXBlPW5ldyB0O3JldHVybiBkLmNvbnN0cnVjdG9yPW0sZC5nZXRSYXRpbz1mdW5jdGlvbih0KXt2YXIgZT10KyguNS10KSp0aGlzLl9wO3JldHVybiB0aGlzLl9wMT50P3RoaXMuX2NhbGNFbmQ/MS0odD0xLXQvdGhpcy5fcDEpKnQ6ZS0odD0xLXQvdGhpcy5fcDEpKnQqdCp0KmU6dD50aGlzLl9wMz90aGlzLl9jYWxjRW5kPzEtKHQ9KHQtdGhpcy5fcDMpL3RoaXMuX3AxKSp0OmUrKHQtZSkqKHQ9KHQtdGhpcy5fcDMpL3RoaXMuX3AxKSp0KnQqdDp0aGlzLl9jYWxjRW5kPzE6ZX0sbS5lYXNlPW5ldyBtKC43LC43KSxkLmNvbmZpZz1tLmNvbmZpZz1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBtKHQsZSxpKX0sZT1oKFwiZWFzaW5nLlN0ZXBwZWRFYXNlXCIsZnVuY3Rpb24odCl7dD10fHwxLHRoaXMuX3AxPTEvdCx0aGlzLl9wMj10KzF9LCEwKSxkPWUucHJvdG90eXBlPW5ldyB0LGQuY29uc3RydWN0b3I9ZSxkLmdldFJhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiAwPnQ/dD0wOnQ+PTEmJih0PS45OTk5OTk5OTkpLCh0aGlzLl9wMip0Pj4wKSp0aGlzLl9wMX0sZC5jb25maWc9ZS5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKHQpfSxpPWgoXCJlYXNpbmcuUm91Z2hFYXNlXCIsZnVuY3Rpb24oZSl7ZT1lfHx7fTtmb3IodmFyIGkscyxyLG4sYSxvLGg9ZS50YXBlcnx8XCJub25lXCIsbD1bXSxfPTAsdT0wfChlLnBvaW50c3x8MjApLGY9dSxwPWUucmFuZG9taXplIT09ITEsbT1lLmNsYW1wPT09ITAsZD1lLnRlbXBsYXRlIGluc3RhbmNlb2YgdD9lLnRlbXBsYXRlOm51bGwsZz1cIm51bWJlclwiPT10eXBlb2YgZS5zdHJlbmd0aD8uNCplLnN0cmVuZ3RoOi40Oy0tZj4tMTspaT1wP01hdGgucmFuZG9tKCk6MS91KmYscz1kP2QuZ2V0UmF0aW8oaSk6aSxcIm5vbmVcIj09PWg/cj1nOlwib3V0XCI9PT1oPyhuPTEtaSxyPW4qbipnKTpcImluXCI9PT1oP3I9aSppKmc6LjU+aT8obj0yKmkscj0uNSpuKm4qZyk6KG49MiooMS1pKSxyPS41Km4qbipnKSxwP3MrPU1hdGgucmFuZG9tKCkqci0uNSpyOmYlMj9zKz0uNSpyOnMtPS41KnIsbSYmKHM+MT9zPTE6MD5zJiYocz0wKSksbFtfKytdPXt4OmkseTpzfTtmb3IobC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KSxvPW5ldyBjKDEsMSxudWxsKSxmPXU7LS1mPi0xOylhPWxbZl0sbz1uZXcgYyhhLngsYS55LG8pO3RoaXMuX3ByZXY9bmV3IGMoMCwwLDAhPT1vLnQ/bzpvLm5leHQpfSwhMCksZD1pLnByb3RvdHlwZT1uZXcgdCxkLmNvbnN0cnVjdG9yPWksZC5nZXRSYXRpbz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcmV2O2lmKHQ+ZS50KXtmb3IoO2UubmV4dCYmdD49ZS50OyllPWUubmV4dDtlPWUucHJldn1lbHNlIGZvcig7ZS5wcmV2JiZlLnQ+PXQ7KWU9ZS5wcmV2O3JldHVybiB0aGlzLl9wcmV2PWUsZS52Kyh0LWUudCkvZS5nYXAqZS5jfSxkLmNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9LGkuZWFzZT1uZXcgaSx1KFwiQm91bmNlXCIsbChcIkJvdW5jZU91dFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxLzIuNzU+dD83LjU2MjUqdCp0OjIvMi43NT50PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OjIuNS8yLjc1PnQ/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzV9KSxsKFwiQm91bmNlSW5cIixmdW5jdGlvbih0KXtyZXR1cm4gMS8yLjc1Pih0PTEtdCk/MS03LjU2MjUqdCp0OjIvMi43NT50PzEtKDcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1KToyLjUvMi43NT50PzEtKDcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1KToxLSg3LjU2MjUqKHQtPTIuNjI1LzIuNzUpKnQrLjk4NDM3NSl9KSxsKFwiQm91bmNlSW5PdXRcIixmdW5jdGlvbih0KXt2YXIgZT0uNT50O3JldHVybiB0PWU/MS0yKnQ6Mip0LTEsdD0xLzIuNzU+dD83LjU2MjUqdCp0OjIvMi43NT50PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OjIuNS8yLjc1PnQ/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzUsZT8uNSooMS10KTouNSp0Ky41fSkpLHUoXCJDaXJjXCIsbChcIkNpcmNPdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDEtKHQtPTEpKnQpfSksbChcIkNpcmNJblwiLGZ1bmN0aW9uKHQpe3JldHVybi0oTWF0aC5zcXJ0KDEtdCp0KS0xKX0pLGwoXCJDaXJjSW5PdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gMT4odCo9Mik/LS41KihNYXRoLnNxcnQoMS10KnQpLTEpOi41KihNYXRoLnNxcnQoMS0odC09MikqdCkrMSl9KSkscz1mdW5jdGlvbihlLGkscyl7dmFyIHI9aChcImVhc2luZy5cIitlLGZ1bmN0aW9uKHQsZSl7dGhpcy5fcDE9dHx8MSx0aGlzLl9wMj1lfHxzLHRoaXMuX3AzPXRoaXMuX3AyL2EqKE1hdGguYXNpbigxL3RoaXMuX3AxKXx8MCl9LCEwKSxuPXIucHJvdG90eXBlPW5ldyB0O3JldHVybiBuLmNvbnN0cnVjdG9yPXIsbi5nZXRSYXRpbz1pLG4uY29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyByKHQsZSl9LHJ9LHUoXCJFbGFzdGljXCIscyhcIkVsYXN0aWNPdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcDEqTWF0aC5wb3coMiwtMTAqdCkqTWF0aC5zaW4oKHQtdGhpcy5fcDMpKmEvdGhpcy5fcDIpKzF9LC4zKSxzKFwiRWxhc3RpY0luXCIsZnVuY3Rpb24odCl7cmV0dXJuLSh0aGlzLl9wMSpNYXRoLnBvdygyLDEwKih0LT0xKSkqTWF0aC5zaW4oKHQtdGhpcy5fcDMpKmEvdGhpcy5fcDIpKX0sLjMpLHMoXCJFbGFzdGljSW5PdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gMT4odCo9Mik/LS41KnRoaXMuX3AxKk1hdGgucG93KDIsMTAqKHQtPTEpKSpNYXRoLnNpbigodC10aGlzLl9wMykqYS90aGlzLl9wMik6LjUqdGhpcy5fcDEqTWF0aC5wb3coMiwtMTAqKHQtPTEpKSpNYXRoLnNpbigodC10aGlzLl9wMykqYS90aGlzLl9wMikrMX0sLjQ1KSksdShcIkV4cG9cIixsKFwiRXhwb091dFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKnQpfSksbChcIkV4cG9JblwiLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKih0LTEpKS0uMDAxfSksbChcIkV4cG9Jbk91dFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxPih0Kj0yKT8uNSpNYXRoLnBvdygyLDEwKih0LTEpKTouNSooMi1NYXRoLnBvdygyLC0xMCoodC0xKSkpfSkpLHUoXCJTaW5lXCIsbChcIlNpbmVPdXRcIixmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zaW4odCpvKX0pLGwoXCJTaW5lSW5cIixmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5jb3ModCpvKSsxfSksbChcIlNpbmVJbk91dFwiLGZ1bmN0aW9uKHQpe3JldHVybi0uNSooTWF0aC5jb3MoTWF0aC5QSSp0KS0xKX0pKSxoKFwiZWFzaW5nLkVhc2VMb29rdXBcIix7ZmluZDpmdW5jdGlvbihlKXtyZXR1cm4gdC5tYXBbZV19fSwhMCksXyhyLlNsb3dNbyxcIlNsb3dNb1wiLFwiZWFzZSxcIiksXyhpLFwiUm91Z2hFYXNlXCIsXCJlYXNlLFwiKSxfKGUsXCJTdGVwcGVkRWFzZVwiLFwiZWFzZSxcIikscH0sITApfSksd2luZG93Ll9nc0RlZmluZSYmd2luZG93Ll9nc1F1ZXVlLnBvcCgpKCk7IiwiLyohXHJcbiAqIFZFUlNJT046IDEuMTIuMVxyXG4gKiBEQVRFOiAyMDE0LTA2LTI2XHJcbiAqIFVQREFURVMgQU5EIERPQ1MgQVQ6IGh0dHA6Ly93d3cuZ3JlZW5zb2NrLmNvbVxyXG4gKlxyXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxNCwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBUaGlzIHdvcmsgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYXQgaHR0cDovL3d3dy5ncmVlbnNvY2suY29tL3Rlcm1zX29mX3VzZS5odG1sIG9yIGZvclxyXG4gKiBDbHViIEdyZWVuU29jayBtZW1iZXJzLCB0aGUgc29mdHdhcmUgYWdyZWVtZW50IHRoYXQgd2FzIGlzc3VlZCB3aXRoIHlvdXIgbWVtYmVyc2hpcC5cclxuICogXHJcbiAqIEBhdXRob3I6IEphY2sgRG95bGUsIGphY2tAZ3JlZW5zb2NrLmNvbVxyXG4gKi9cclxuKHdpbmRvdy5fZ3NRdWV1ZXx8KHdpbmRvdy5fZ3NRdWV1ZT1bXSkpLnB1c2goZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt3aW5kb3cuX2dzRGVmaW5lKFwicGx1Z2lucy5DU1NQbHVnaW5cIixbXCJwbHVnaW5zLlR3ZWVuUGx1Z2luXCIsXCJUd2VlbkxpdGVcIl0sZnVuY3Rpb24odCxlKXt2YXIgaSxyLHMsbixhPWZ1bmN0aW9uKCl7dC5jYWxsKHRoaXMsXCJjc3NcIiksdGhpcy5fb3ZlcndyaXRlUHJvcHMubGVuZ3RoPTAsdGhpcy5zZXRSYXRpbz1hLnByb3RvdHlwZS5zZXRSYXRpb30sbz17fSxsPWEucHJvdG90eXBlPW5ldyB0KFwiY3NzXCIpO2wuY29uc3RydWN0b3I9YSxhLnZlcnNpb249XCIxLjEyLjFcIixhLkFQST0yLGEuZGVmYXVsdFRyYW5zZm9ybVBlcnNwZWN0aXZlPTAsYS5kZWZhdWx0U2tld1R5cGU9XCJjb21wZW5zYXRlZFwiLGw9XCJweFwiLGEuc3VmZml4TWFwPXt0b3A6bCxyaWdodDpsLGJvdHRvbTpsLGxlZnQ6bCx3aWR0aDpsLGhlaWdodDpsLGZvbnRTaXplOmwscGFkZGluZzpsLG1hcmdpbjpsLHBlcnNwZWN0aXZlOmwsbGluZUhlaWdodDpcIlwifTt2YXIgaCx1LGYsXyxwLGMsZD0vKD86XFxkfFxcLVxcZHxcXC5cXGR8XFwtXFwuXFxkKSsvZyxtPS8oPzpcXGR8XFwtXFxkfFxcLlxcZHxcXC1cXC5cXGR8XFwrPVxcZHxcXC09XFxkfFxcKz0uXFxkfFxcLT1cXC5cXGQpKy9nLGc9Lyg/OlxcKz18XFwtPXxcXC18XFxiKVtcXGRcXC1cXC5dK1thLXpBLVowLTldKig/OiV8XFxiKS9naSx2PS9bXlxcZFxcLVxcLl0vZyx5PS8oPzpcXGR8XFwtfFxcK3w9fCN8XFwuKSovZyxUPS9vcGFjaXR5ICo9ICooW14pXSopL2ksdz0vb3BhY2l0eTooW147XSopL2kseD0vYWxwaGFcXChvcGFjaXR5ICo9Lis/XFwpL2ksYj0vXihyZ2J8aHNsKS8sUD0vKFtBLVpdKS9nLFM9Ly0oW2Etel0pL2dpLEM9LyheKD86dXJsXFwoXFxcInx1cmxcXCgpKXwoPzooXFxcIlxcKSkkfFxcKSQpL2dpLFI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpfSxrPS8oPzpMZWZ0fFJpZ2h0fFdpZHRoKS9pLEE9LyhNMTF8TTEyfE0yMXxNMjIpPVtcXGRcXC1cXC5lXSsvZ2ksTz0vcHJvZ2lkXFw6RFhJbWFnZVRyYW5zZm9ybVxcLk1pY3Jvc29mdFxcLk1hdHJpeFxcKC4rP1xcKS9pLEQ9LywoPz1bXlxcKV0qKD86XFwofCQpKS9naSxNPU1hdGguUEkvMTgwLEw9MTgwL01hdGguUEksTj17fSxYPWRvY3VtZW50LHo9WC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLEk9WC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpLEU9YS5faW50ZXJuYWxzPXtfc3BlY2lhbFByb3BzOm99LEY9bmF2aWdhdG9yLnVzZXJBZ2VudCxZPWZ1bmN0aW9uKCl7dmFyIHQsZT1GLmluZGV4T2YoXCJBbmRyb2lkXCIpLGk9WC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBmPS0xIT09Ri5pbmRleE9mKFwiU2FmYXJpXCIpJiYtMT09PUYuaW5kZXhPZihcIkNocm9tZVwiKSYmKC0xPT09ZXx8TnVtYmVyKEYuc3Vic3RyKGUrOCwxKSk+MykscD1mJiY2Pk51bWJlcihGLnN1YnN0cihGLmluZGV4T2YoXCJWZXJzaW9uL1wiKSs4LDEpKSxfPS0xIT09Ri5pbmRleE9mKFwiRmlyZWZveFwiKSwvTVNJRSAoWzAtOV17MSx9W1xcLjAtOV17MCx9KS8uZXhlYyhGKSYmKGM9cGFyc2VGbG9hdChSZWdFeHAuJDEpKSxpLmlubmVySFRNTD1cIjxhIHN0eWxlPSd0b3A6MXB4O29wYWNpdHk6LjU1Oyc+YTwvYT5cIix0PWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJhXCIpWzBdLHQ/L14wLjU1Ly50ZXN0KHQuc3R5bGUub3BhY2l0eSk6ITF9KCksQj1mdW5jdGlvbih0KXtyZXR1cm4gVC50ZXN0KFwic3RyaW5nXCI9PXR5cGVvZiB0P3Q6KHQuY3VycmVudFN0eWxlP3QuY3VycmVudFN0eWxlLmZpbHRlcjp0LnN0eWxlLmZpbHRlcil8fFwiXCIpP3BhcnNlRmxvYXQoUmVnRXhwLiQxKS8xMDA6MX0sVT1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2codCl9LFc9XCJcIixqPVwiXCIsVj1mdW5jdGlvbih0LGUpe2U9ZXx8ejt2YXIgaSxyLHM9ZS5zdHlsZTtpZih2b2lkIDAhPT1zW3RdKXJldHVybiB0O2Zvcih0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSksaT1bXCJPXCIsXCJNb3pcIixcIm1zXCIsXCJNc1wiLFwiV2Via2l0XCJdLHI9NTstLXI+LTEmJnZvaWQgMD09PXNbaVtyXSt0XTspO3JldHVybiByPj0wPyhqPTM9PT1yP1wibXNcIjppW3JdLFc9XCItXCIrai50b0xvd2VyQ2FzZSgpK1wiLVwiLGordCk6bnVsbH0sSD1YLmRlZmF1bHRWaWV3P1guZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe30scT1hLmdldFN0eWxlPWZ1bmN0aW9uKHQsZSxpLHIscyl7dmFyIG47cmV0dXJuIFl8fFwib3BhY2l0eVwiIT09ZT8oIXImJnQuc3R5bGVbZV0/bj10LnN0eWxlW2VdOihpPWl8fEgodCkpP249aVtlXXx8aS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxpLmdldFByb3BlcnR5VmFsdWUoZS5yZXBsYWNlKFAsXCItJDFcIikudG9Mb3dlckNhc2UoKSk6dC5jdXJyZW50U3R5bGUmJihuPXQuY3VycmVudFN0eWxlW2VdKSxudWxsPT1zfHxuJiZcIm5vbmVcIiE9PW4mJlwiYXV0b1wiIT09biYmXCJhdXRvIGF1dG9cIiE9PW4/bjpzKTpCKHQpfSxRPUUuY29udmVydFRvUGl4ZWxzPWZ1bmN0aW9uKHQsaSxyLHMsbil7aWYoXCJweFwiPT09c3x8IXMpcmV0dXJuIHI7aWYoXCJhdXRvXCI9PT1zfHwhcilyZXR1cm4gMDt2YXIgbyxsLGgsdT1rLnRlc3QoaSksZj10LF89ei5zdHlsZSxwPTA+cjtpZihwJiYocj0tciksXCIlXCI9PT1zJiYtMSE9PWkuaW5kZXhPZihcImJvcmRlclwiKSlvPXIvMTAwKih1P3QuY2xpZW50V2lkdGg6dC5jbGllbnRIZWlnaHQpO2Vsc2V7aWYoXy5jc3NUZXh0PVwiYm9yZGVyOjAgc29saWQgcmVkO3Bvc2l0aW9uOlwiK3EodCxcInBvc2l0aW9uXCIpK1wiO2xpbmUtaGVpZ2h0OjA7XCIsXCIlXCIhPT1zJiZmLmFwcGVuZENoaWxkKV9bdT9cImJvcmRlckxlZnRXaWR0aFwiOlwiYm9yZGVyVG9wV2lkdGhcIl09citzO2Vsc2V7aWYoZj10LnBhcmVudE5vZGV8fFguYm9keSxsPWYuX2dzQ2FjaGUsaD1lLnRpY2tlci5mcmFtZSxsJiZ1JiZsLnRpbWU9PT1oKXJldHVybiBsLndpZHRoKnIvMTAwO19bdT9cIndpZHRoXCI6XCJoZWlnaHRcIl09citzfWYuYXBwZW5kQ2hpbGQoeiksbz1wYXJzZUZsb2F0KHpbdT9cIm9mZnNldFdpZHRoXCI6XCJvZmZzZXRIZWlnaHRcIl0pLGYucmVtb3ZlQ2hpbGQoeiksdSYmXCIlXCI9PT1zJiZhLmNhY2hlV2lkdGhzIT09ITEmJihsPWYuX2dzQ2FjaGU9Zi5fZ3NDYWNoZXx8e30sbC50aW1lPWgsbC53aWR0aD0xMDAqKG8vcikpLDAhPT1vfHxufHwobz1RKHQsaSxyLHMsITApKX1yZXR1cm4gcD8tbzpvfSxaPUUuY2FsY3VsYXRlT2Zmc2V0PWZ1bmN0aW9uKHQsZSxpKXtpZihcImFic29sdXRlXCIhPT1xKHQsXCJwb3NpdGlvblwiLGkpKXJldHVybiAwO3ZhciByPVwibGVmdFwiPT09ZT9cIkxlZnRcIjpcIlRvcFwiLHM9cSh0LFwibWFyZ2luXCIrcixpKTtyZXR1cm4gdFtcIm9mZnNldFwiK3JdLShRKHQsZSxwYXJzZUZsb2F0KHMpLHMucmVwbGFjZSh5LFwiXCIpKXx8MCl9LCQ9ZnVuY3Rpb24odCxlKXt2YXIgaSxyLHM9e307aWYoZT1lfHxIKHQsbnVsbCkpaWYoaT1lLmxlbmd0aClmb3IoOy0taT4tMTspc1tlW2ldLnJlcGxhY2UoUyxSKV09ZS5nZXRQcm9wZXJ0eVZhbHVlKGVbaV0pO2Vsc2UgZm9yKGkgaW4gZSlzW2ldPWVbaV07ZWxzZSBpZihlPXQuY3VycmVudFN0eWxlfHx0LnN0eWxlKWZvcihpIGluIGUpXCJzdHJpbmdcIj09dHlwZW9mIGkmJnZvaWQgMD09PXNbaV0mJihzW2kucmVwbGFjZShTLFIpXT1lW2ldKTtyZXR1cm4gWXx8KHMub3BhY2l0eT1CKHQpKSxyPVBlKHQsZSwhMSkscy5yb3RhdGlvbj1yLnJvdGF0aW9uLHMuc2tld1g9ci5za2V3WCxzLnNjYWxlWD1yLnNjYWxlWCxzLnNjYWxlWT1yLnNjYWxlWSxzLng9ci54LHMueT1yLnkseGUmJihzLno9ci56LHMucm90YXRpb25YPXIucm90YXRpb25YLHMucm90YXRpb25ZPXIucm90YXRpb25ZLHMuc2NhbGVaPXIuc2NhbGVaKSxzLmZpbHRlcnMmJmRlbGV0ZSBzLmZpbHRlcnMsc30sRz1mdW5jdGlvbih0LGUsaSxyLHMpe3ZhciBuLGEsbyxsPXt9LGg9dC5zdHlsZTtmb3IoYSBpbiBpKVwiY3NzVGV4dFwiIT09YSYmXCJsZW5ndGhcIiE9PWEmJmlzTmFOKGEpJiYoZVthXSE9PShuPWlbYV0pfHxzJiZzW2FdKSYmLTE9PT1hLmluZGV4T2YoXCJPcmlnaW5cIikmJihcIm51bWJlclwiPT10eXBlb2Ygbnx8XCJzdHJpbmdcIj09dHlwZW9mIG4pJiYobFthXT1cImF1dG9cIiE9PW58fFwibGVmdFwiIT09YSYmXCJ0b3BcIiE9PWE/XCJcIiE9PW4mJlwiYXV0b1wiIT09biYmXCJub25lXCIhPT1ufHxcInN0cmluZ1wiIT10eXBlb2YgZVthXXx8XCJcIj09PWVbYV0ucmVwbGFjZSh2LFwiXCIpP246MDpaKHQsYSksdm9pZCAwIT09aFthXSYmKG89bmV3IGZlKGgsYSxoW2FdLG8pKSk7aWYocilmb3IoYSBpbiByKVwiY2xhc3NOYW1lXCIhPT1hJiYobFthXT1yW2FdKTtyZXR1cm57ZGlmczpsLGZpcnN0TVBUOm99fSxLPXt3aWR0aDpbXCJMZWZ0XCIsXCJSaWdodFwiXSxoZWlnaHQ6W1wiVG9wXCIsXCJCb3R0b21cIl19LEo9W1wibWFyZ2luTGVmdFwiLFwibWFyZ2luUmlnaHRcIixcIm1hcmdpblRvcFwiLFwibWFyZ2luQm90dG9tXCJdLHRlPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcj1wYXJzZUZsb2F0KFwid2lkdGhcIj09PWU/dC5vZmZzZXRXaWR0aDp0Lm9mZnNldEhlaWdodCkscz1LW2VdLG49cy5sZW5ndGg7Zm9yKGk9aXx8SCh0LG51bGwpOy0tbj4tMTspci09cGFyc2VGbG9hdChxKHQsXCJwYWRkaW5nXCIrc1tuXSxpLCEwKSl8fDAsci09cGFyc2VGbG9hdChxKHQsXCJib3JkZXJcIitzW25dK1wiV2lkdGhcIixpLCEwKSl8fDA7cmV0dXJuIHJ9LGVlPWZ1bmN0aW9uKHQsZSl7KG51bGw9PXR8fFwiXCI9PT10fHxcImF1dG9cIj09PXR8fFwiYXV0byBhdXRvXCI9PT10KSYmKHQ9XCIwIDBcIik7dmFyIGk9dC5zcGxpdChcIiBcIikscj0tMSE9PXQuaW5kZXhPZihcImxlZnRcIik/XCIwJVwiOi0xIT09dC5pbmRleE9mKFwicmlnaHRcIik/XCIxMDAlXCI6aVswXSxzPS0xIT09dC5pbmRleE9mKFwidG9wXCIpP1wiMCVcIjotMSE9PXQuaW5kZXhPZihcImJvdHRvbVwiKT9cIjEwMCVcIjppWzFdO3JldHVybiBudWxsPT1zP3M9XCIwXCI6XCJjZW50ZXJcIj09PXMmJihzPVwiNTAlXCIpLChcImNlbnRlclwiPT09cnx8aXNOYU4ocGFyc2VGbG9hdChyKSkmJi0xPT09KHIrXCJcIikuaW5kZXhPZihcIj1cIikpJiYocj1cIjUwJVwiKSxlJiYoZS5veHA9LTEhPT1yLmluZGV4T2YoXCIlXCIpLGUub3lwPS0xIT09cy5pbmRleE9mKFwiJVwiKSxlLm94cj1cIj1cIj09PXIuY2hhckF0KDEpLGUub3lyPVwiPVwiPT09cy5jaGFyQXQoMSksZS5veD1wYXJzZUZsb2F0KHIucmVwbGFjZSh2LFwiXCIpKSxlLm95PXBhcnNlRmxvYXQocy5yZXBsYWNlKHYsXCJcIikpKSxyK1wiIFwiK3MrKGkubGVuZ3RoPjI/XCIgXCIraVsyXTpcIlwiKX0saWU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCI9XCI9PT10LmNoYXJBdCgxKT9wYXJzZUludCh0LmNoYXJBdCgwKStcIjFcIiwxMCkqcGFyc2VGbG9hdCh0LnN1YnN0cigyKSk6cGFyc2VGbG9hdCh0KS1wYXJzZUZsb2F0KGUpfSxyZT1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P2U6XCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiPVwiPT09dC5jaGFyQXQoMSk/cGFyc2VJbnQodC5jaGFyQXQoMCkrXCIxXCIsMTApKk51bWJlcih0LnN1YnN0cigyKSkrZTpwYXJzZUZsb2F0KHQpfSxzZT1mdW5jdGlvbih0LGUsaSxyKXt2YXIgcyxuLGEsbyxsPTFlLTY7cmV0dXJuIG51bGw9PXQ/bz1lOlwibnVtYmVyXCI9PXR5cGVvZiB0P289dDoocz0zNjAsbj10LnNwbGl0KFwiX1wiKSxhPU51bWJlcihuWzBdLnJlcGxhY2UodixcIlwiKSkqKC0xPT09dC5pbmRleE9mKFwicmFkXCIpPzE6TCktKFwiPVwiPT09dC5jaGFyQXQoMSk/MDplKSxuLmxlbmd0aCYmKHImJihyW2ldPWUrYSksLTEhPT10LmluZGV4T2YoXCJzaG9ydFwiKSYmKGElPXMsYSE9PWElKHMvMikmJihhPTA+YT9hK3M6YS1zKSksLTEhPT10LmluZGV4T2YoXCJfY3dcIikmJjA+YT9hPShhKzk5OTk5OTk5OTkqcyklcy0oMHxhL3MpKnM6LTEhPT10LmluZGV4T2YoXCJjY3dcIikmJmE+MCYmKGE9KGEtOTk5OTk5OTk5OSpzKSVzLSgwfGEvcykqcykpLG89ZSthKSxsPm8mJm8+LWwmJihvPTApLG99LG5lPXthcXVhOlswLDI1NSwyNTVdLGxpbWU6WzAsMjU1LDBdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLGJsYWNrOlswLDAsMF0sbWFyb29uOlsxMjgsMCwwXSx0ZWFsOlswLDEyOCwxMjhdLGJsdWU6WzAsMCwyNTVdLG5hdnk6WzAsMCwxMjhdLHdoaXRlOlsyNTUsMjU1LDI1NV0sZnVjaHNpYTpbMjU1LDAsMjU1XSxvbGl2ZTpbMTI4LDEyOCwwXSx5ZWxsb3c6WzI1NSwyNTUsMF0sb3JhbmdlOlsyNTUsMTY1LDBdLGdyYXk6WzEyOCwxMjgsMTI4XSxwdXJwbGU6WzEyOCwwLDEyOF0sZ3JlZW46WzAsMTI4LDBdLHJlZDpbMjU1LDAsMF0scGluazpbMjU1LDE5MiwyMDNdLGN5YW46WzAsMjU1LDI1NV0sdHJhbnNwYXJlbnQ6WzI1NSwyNTUsMjU1LDBdfSxhZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQ9MD50P3QrMTp0PjE/dC0xOnQsMHwyNTUqKDE+Nip0P2UrNiooaS1lKSp0Oi41PnQ/aToyPjMqdD9lKzYqKGktZSkqKDIvMy10KTplKSsuNX0sb2U9ZnVuY3Rpb24odCl7dmFyIGUsaSxyLHMsbixhO3JldHVybiB0JiZcIlwiIT09dD9cIm51bWJlclwiPT10eXBlb2YgdD9bdD4+MTYsMjU1JnQ+PjgsMjU1JnRdOihcIixcIj09PXQuY2hhckF0KHQubGVuZ3RoLTEpJiYodD10LnN1YnN0cigwLHQubGVuZ3RoLTEpKSxuZVt0XT9uZVt0XTpcIiNcIj09PXQuY2hhckF0KDApPyg0PT09dC5sZW5ndGgmJihlPXQuY2hhckF0KDEpLGk9dC5jaGFyQXQoMikscj10LmNoYXJBdCgzKSx0PVwiI1wiK2UrZStpK2krcityKSx0PXBhcnNlSW50KHQuc3Vic3RyKDEpLDE2KSxbdD4+MTYsMjU1JnQ+PjgsMjU1JnRdKTpcImhzbFwiPT09dC5zdWJzdHIoMCwzKT8odD10Lm1hdGNoKGQpLHM9TnVtYmVyKHRbMF0pJTM2MC8zNjAsbj1OdW1iZXIodFsxXSkvMTAwLGE9TnVtYmVyKHRbMl0pLzEwMCxpPS41Pj1hP2EqKG4rMSk6YStuLWEqbixlPTIqYS1pLHQubGVuZ3RoPjMmJih0WzNdPU51bWJlcih0WzNdKSksdFswXT1hZShzKzEvMyxlLGkpLHRbMV09YWUocyxlLGkpLHRbMl09YWUocy0xLzMsZSxpKSx0KToodD10Lm1hdGNoKGQpfHxuZS50cmFuc3BhcmVudCx0WzBdPU51bWJlcih0WzBdKSx0WzFdPU51bWJlcih0WzFdKSx0WzJdPU51bWJlcih0WzJdKSx0Lmxlbmd0aD4zJiYodFszXT1OdW1iZXIodFszXSkpLHQpKTpuZS5ibGFja30sbGU9XCIoPzpcXFxcYig/Oig/OnJnYnxyZ2JhfGhzbHxoc2xhKVxcXFwoLis/XFxcXCkpfFxcXFxCIy4rP1xcXFxiXCI7Zm9yKGwgaW4gbmUpbGUrPVwifFwiK2wrXCJcXFxcYlwiO2xlPVJlZ0V4cChsZStcIilcIixcImdpXCIpO3ZhciBoZT1mdW5jdGlvbih0LGUsaSxyKXtpZihudWxsPT10KXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdH07dmFyIHMsbj1lPyh0Lm1hdGNoKGxlKXx8W1wiXCJdKVswXTpcIlwiLGE9dC5zcGxpdChuKS5qb2luKFwiXCIpLm1hdGNoKGcpfHxbXSxvPXQuc3Vic3RyKDAsdC5pbmRleE9mKGFbMF0pKSxsPVwiKVwiPT09dC5jaGFyQXQodC5sZW5ndGgtMSk/XCIpXCI6XCJcIixoPS0xIT09dC5pbmRleE9mKFwiIFwiKT9cIiBcIjpcIixcIix1PWEubGVuZ3RoLGY9dT4wP2FbMF0ucmVwbGFjZShkLFwiXCIpOlwiXCI7cmV0dXJuIHU/cz1lP2Z1bmN0aW9uKHQpe3ZhciBlLF8scCxjO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXQrPWY7ZWxzZSBpZihyJiZELnRlc3QodCkpe2ZvcihjPXQucmVwbGFjZShELFwifFwiKS5zcGxpdChcInxcIikscD0wO2MubGVuZ3RoPnA7cCsrKWNbcF09cyhjW3BdKTtyZXR1cm4gYy5qb2luKFwiLFwiKX1pZihlPSh0Lm1hdGNoKGxlKXx8W25dKVswXSxfPXQuc3BsaXQoZSkuam9pbihcIlwiKS5tYXRjaChnKXx8W10scD1fLmxlbmd0aCx1PnAtLSlmb3IoO3U+KytwOylfW3BdPWk/X1swfChwLTEpLzJdOmFbcF07cmV0dXJuIG8rXy5qb2luKGgpK2grZStsKygtMSE9PXQuaW5kZXhPZihcImluc2V0XCIpP1wiIGluc2V0XCI6XCJcIil9OmZ1bmN0aW9uKHQpe3ZhciBlLG4sXztpZihcIm51bWJlclwiPT10eXBlb2YgdCl0Kz1mO2Vsc2UgaWYociYmRC50ZXN0KHQpKXtmb3Iobj10LnJlcGxhY2UoRCxcInxcIikuc3BsaXQoXCJ8XCIpLF89MDtuLmxlbmd0aD5fO18rKyluW19dPXMobltfXSk7cmV0dXJuIG4uam9pbihcIixcIil9aWYoZT10Lm1hdGNoKGcpfHxbXSxfPWUubGVuZ3RoLHU+Xy0tKWZvcig7dT4rK187KWVbX109aT9lWzB8KF8tMSkvMl06YVtfXTtyZXR1cm4gbytlLmpvaW4oaCkrbH06ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD10LnNwbGl0KFwiLFwiKSxmdW5jdGlvbihlLGkscixzLG4sYSxvKXt2YXIgbCxoPShpK1wiXCIpLnNwbGl0KFwiIFwiKTtmb3Iobz17fSxsPTA7ND5sO2wrKylvW3RbbF1dPWhbbF09aFtsXXx8aFsobC0xKS8yPj4wXTtyZXR1cm4gcy5wYXJzZShlLG8sbixhKX19LGZlPShFLl9zZXRQbHVnaW5SYXRpbz1mdW5jdGlvbih0KXt0aGlzLnBsdWdpbi5zZXRSYXRpbyh0KTtmb3IodmFyIGUsaSxyLHMsbj10aGlzLmRhdGEsYT1uLnByb3h5LG89bi5maXJzdE1QVCxsPTFlLTY7bzspZT1hW28udl0sby5yP2U9TWF0aC5yb3VuZChlKTpsPmUmJmU+LWwmJihlPTApLG8udFtvLnBdPWUsbz1vLl9uZXh0O2lmKG4uYXV0b1JvdGF0ZSYmKG4uYXV0b1JvdGF0ZS5yb3RhdGlvbj1hLnJvdGF0aW9uKSwxPT09dClmb3Iobz1uLmZpcnN0TVBUO287KXtpZihpPW8udCxpLnR5cGUpe2lmKDE9PT1pLnR5cGUpe2ZvcihzPWkueHMwK2kucytpLnhzMSxyPTE7aS5sPnI7cisrKXMrPWlbXCJ4blwiK3JdK2lbXCJ4c1wiKyhyKzEpXTtpLmU9c319ZWxzZSBpLmU9aS5zK2kueHMwO289by5fbmV4dH19LGZ1bmN0aW9uKHQsZSxpLHIscyl7dGhpcy50PXQsdGhpcy5wPWUsdGhpcy52PWksdGhpcy5yPXMsciYmKHIuX3ByZXY9dGhpcyx0aGlzLl9uZXh0PXIpfSksX2U9KEUuX3BhcnNlVG9Qcm94eT1mdW5jdGlvbih0LGUsaSxyLHMsbil7dmFyIGEsbyxsLGgsdSxmPXIsXz17fSxwPXt9LGM9aS5fdHJhbnNmb3JtLGQ9Tjtmb3IoaS5fdHJhbnNmb3JtPW51bGwsTj1lLHI9dT1pLnBhcnNlKHQsZSxyLHMpLE49ZCxuJiYoaS5fdHJhbnNmb3JtPWMsZiYmKGYuX3ByZXY9bnVsbCxmLl9wcmV2JiYoZi5fcHJldi5fbmV4dD1udWxsKSkpO3ImJnIhPT1mOyl7aWYoMT49ci50eXBlJiYobz1yLnAscFtvXT1yLnMrci5jLF9bb109ci5zLG58fChoPW5ldyBmZShyLFwic1wiLG8saCxyLnIpLHIuYz0wKSwxPT09ci50eXBlKSlmb3IoYT1yLmw7LS1hPjA7KWw9XCJ4blwiK2Esbz1yLnArXCJfXCIrbCxwW29dPXIuZGF0YVtsXSxfW29dPXJbbF0sbnx8KGg9bmV3IGZlKHIsbCxvLGgsci5yeHBbbF0pKTtyPXIuX25leHR9cmV0dXJue3Byb3h5Ol8sZW5kOnAsZmlyc3RNUFQ6aCxwdDp1fX0sRS5DU1NQcm9wVHdlZW49ZnVuY3Rpb24odCxlLHIscyxhLG8sbCxoLHUsZixfKXt0aGlzLnQ9dCx0aGlzLnA9ZSx0aGlzLnM9cix0aGlzLmM9cyx0aGlzLm49bHx8ZSx0IGluc3RhbmNlb2YgX2V8fG4ucHVzaCh0aGlzLm4pLHRoaXMucj1oLHRoaXMudHlwZT1vfHwwLHUmJih0aGlzLnByPXUsaT0hMCksdGhpcy5iPXZvaWQgMD09PWY/cjpmLHRoaXMuZT12b2lkIDA9PT1fP3IrczpfLGEmJih0aGlzLl9uZXh0PWEsYS5fcHJldj10aGlzKX0pLHBlPWEucGFyc2VDb21wbGV4PWZ1bmN0aW9uKHQsZSxpLHIscyxuLGEsbyxsLHUpe2k9aXx8bnx8XCJcIixhPW5ldyBfZSh0LGUsMCwwLGEsdT8yOjEsbnVsbCwhMSxvLGkscikscis9XCJcIjt2YXIgZixfLHAsYyxnLHYseSxULHcseCxQLFMsQz1pLnNwbGl0KFwiLCBcIikuam9pbihcIixcIikuc3BsaXQoXCIgXCIpLFI9ci5zcGxpdChcIiwgXCIpLmpvaW4oXCIsXCIpLnNwbGl0KFwiIFwiKSxrPUMubGVuZ3RoLEE9aCE9PSExO2ZvcigoLTEhPT1yLmluZGV4T2YoXCIsXCIpfHwtMSE9PWkuaW5kZXhPZihcIixcIikpJiYoQz1DLmpvaW4oXCIgXCIpLnJlcGxhY2UoRCxcIiwgXCIpLnNwbGl0KFwiIFwiKSxSPVIuam9pbihcIiBcIikucmVwbGFjZShELFwiLCBcIikuc3BsaXQoXCIgXCIpLGs9Qy5sZW5ndGgpLGshPT1SLmxlbmd0aCYmKEM9KG58fFwiXCIpLnNwbGl0KFwiIFwiKSxrPUMubGVuZ3RoKSxhLnBsdWdpbj1sLGEuc2V0UmF0aW89dSxmPTA7az5mO2YrKylpZihjPUNbZl0sZz1SW2ZdLFQ9cGFyc2VGbG9hdChjKSxUfHwwPT09VClhLmFwcGVuZFh0cmEoXCJcIixULGllKGcsVCksZy5yZXBsYWNlKG0sXCJcIiksQSYmLTEhPT1nLmluZGV4T2YoXCJweFwiKSwhMCk7ZWxzZSBpZihzJiYoXCIjXCI9PT1jLmNoYXJBdCgwKXx8bmVbY118fGIudGVzdChjKSkpUz1cIixcIj09PWcuY2hhckF0KGcubGVuZ3RoLTEpP1wiKSxcIjpcIilcIixjPW9lKGMpLGc9b2UoZyksdz1jLmxlbmd0aCtnLmxlbmd0aD42LHcmJiFZJiYwPT09Z1szXT8oYVtcInhzXCIrYS5sXSs9YS5sP1wiIHRyYW5zcGFyZW50XCI6XCJ0cmFuc3BhcmVudFwiLGEuZT1hLmUuc3BsaXQoUltmXSkuam9pbihcInRyYW5zcGFyZW50XCIpKTooWXx8KHc9ITEpLGEuYXBwZW5kWHRyYSh3P1wicmdiYShcIjpcInJnYihcIixjWzBdLGdbMF0tY1swXSxcIixcIiwhMCwhMCkuYXBwZW5kWHRyYShcIlwiLGNbMV0sZ1sxXS1jWzFdLFwiLFwiLCEwKS5hcHBlbmRYdHJhKFwiXCIsY1syXSxnWzJdLWNbMl0sdz9cIixcIjpTLCEwKSx3JiYoYz00PmMubGVuZ3RoPzE6Y1szXSxhLmFwcGVuZFh0cmEoXCJcIixjLCg0PmcubGVuZ3RoPzE6Z1szXSktYyxTLCExKSkpO2Vsc2UgaWYodj1jLm1hdGNoKGQpKXtpZih5PWcubWF0Y2gobSksIXl8fHkubGVuZ3RoIT09di5sZW5ndGgpcmV0dXJuIGE7Zm9yKHA9MCxfPTA7di5sZW5ndGg+XztfKyspUD12W19dLHg9Yy5pbmRleE9mKFAscCksYS5hcHBlbmRYdHJhKGMuc3Vic3RyKHAseC1wKSxOdW1iZXIoUCksaWUoeVtfXSxQKSxcIlwiLEEmJlwicHhcIj09PWMuc3Vic3RyKHgrUC5sZW5ndGgsMiksMD09PV8pLHA9eCtQLmxlbmd0aDthW1wieHNcIithLmxdKz1jLnN1YnN0cihwKX1lbHNlIGFbXCJ4c1wiK2EubF0rPWEubD9cIiBcIitjOmM7aWYoLTEhPT1yLmluZGV4T2YoXCI9XCIpJiZhLmRhdGEpe2ZvcihTPWEueHMwK2EuZGF0YS5zLGY9MTthLmw+ZjtmKyspUys9YVtcInhzXCIrZl0rYS5kYXRhW1wieG5cIitmXTthLmU9UythW1wieHNcIitmXX1yZXR1cm4gYS5sfHwoYS50eXBlPS0xLGEueHMwPWEuZSksYS54Zmlyc3R8fGF9LGNlPTk7Zm9yKGw9X2UucHJvdG90eXBlLGwubD1sLnByPTA7LS1jZT4wOylsW1wieG5cIitjZV09MCxsW1wieHNcIitjZV09XCJcIjtsLnhzMD1cIlwiLGwuX25leHQ9bC5fcHJldj1sLnhmaXJzdD1sLmRhdGE9bC5wbHVnaW49bC5zZXRSYXRpbz1sLnJ4cD1udWxsLGwuYXBwZW5kWHRyYT1mdW5jdGlvbih0LGUsaSxyLHMsbil7dmFyIGE9dGhpcyxvPWEubDtyZXR1cm4gYVtcInhzXCIrb10rPW4mJm8/XCIgXCIrdDp0fHxcIlwiLGl8fDA9PT1vfHxhLnBsdWdpbj8oYS5sKyssYS50eXBlPWEuc2V0UmF0aW8/MjoxLGFbXCJ4c1wiK2EubF09cnx8XCJcIixvPjA/KGEuZGF0YVtcInhuXCIrb109ZStpLGEucnhwW1wieG5cIitvXT1zLGFbXCJ4blwiK29dPWUsYS5wbHVnaW58fChhLnhmaXJzdD1uZXcgX2UoYSxcInhuXCIrbyxlLGksYS54Zmlyc3R8fGEsMCxhLm4scyxhLnByKSxhLnhmaXJzdC54czA9MCksYSk6KGEuZGF0YT17czplK2l9LGEucnhwPXt9LGEucz1lLGEuYz1pLGEucj1zLGEpKTooYVtcInhzXCIrb10rPWUrKHJ8fFwiXCIpLGEpfTt2YXIgZGU9ZnVuY3Rpb24odCxlKXtlPWV8fHt9LHRoaXMucD1lLnByZWZpeD9WKHQpfHx0OnQsb1t0XT1vW3RoaXMucF09dGhpcyx0aGlzLmZvcm1hdD1lLmZvcm1hdHRlcnx8aGUoZS5kZWZhdWx0VmFsdWUsZS5jb2xvcixlLmNvbGxhcHNpYmxlLGUubXVsdGkpLGUucGFyc2VyJiYodGhpcy5wYXJzZT1lLnBhcnNlciksdGhpcy5jbHJzPWUuY29sb3IsdGhpcy5tdWx0aT1lLm11bHRpLHRoaXMua2V5d29yZD1lLmtleXdvcmQsdGhpcy5kZmx0PWUuZGVmYXVsdFZhbHVlLHRoaXMucHI9ZS5wcmlvcml0eXx8MH0sbWU9RS5fcmVnaXN0ZXJDb21wbGV4U3BlY2lhbFByb3A9ZnVuY3Rpb24odCxlLGkpe1wib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17cGFyc2VyOml9KTt2YXIgcixzLG49dC5zcGxpdChcIixcIiksYT1lLmRlZmF1bHRWYWx1ZTtmb3IoaT1pfHxbYV0scj0wO24ubGVuZ3RoPnI7cisrKWUucHJlZml4PTA9PT1yJiZlLnByZWZpeCxlLmRlZmF1bHRWYWx1ZT1pW3JdfHxhLHM9bmV3IGRlKG5bcl0sZSl9LGdlPWZ1bmN0aW9uKHQpe2lmKCFvW3RdKXt2YXIgZT10LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpK1wiUGx1Z2luXCI7bWUodCx7cGFyc2VyOmZ1bmN0aW9uKHQsaSxyLHMsbixhLGwpe3ZhciBoPSh3aW5kb3cuR3JlZW5Tb2NrR2xvYmFsc3x8d2luZG93KS5jb20uZ3JlZW5zb2NrLnBsdWdpbnNbZV07cmV0dXJuIGg/KGguX2Nzc1JlZ2lzdGVyKCksb1tyXS5wYXJzZSh0LGkscixzLG4sYSxsKSk6KFUoXCJFcnJvcjogXCIrZStcIiBqcyBmaWxlIG5vdCBsb2FkZWQuXCIpLG4pfX0pfX07bD1kZS5wcm90b3R5cGUsbC5wYXJzZUNvbXBsZXg9ZnVuY3Rpb24odCxlLGkscixzLG4pe3ZhciBhLG8sbCxoLHUsZixfPXRoaXMua2V5d29yZDtpZih0aGlzLm11bHRpJiYoRC50ZXN0KGkpfHxELnRlc3QoZSk/KG89ZS5yZXBsYWNlKEQsXCJ8XCIpLnNwbGl0KFwifFwiKSxsPWkucmVwbGFjZShELFwifFwiKS5zcGxpdChcInxcIikpOl8mJihvPVtlXSxsPVtpXSkpLGwpe2ZvcihoPWwubGVuZ3RoPm8ubGVuZ3RoP2wubGVuZ3RoOm8ubGVuZ3RoLGE9MDtoPmE7YSsrKWU9b1thXT1vW2FdfHx0aGlzLmRmbHQsaT1sW2FdPWxbYV18fHRoaXMuZGZsdCxfJiYodT1lLmluZGV4T2YoXyksZj1pLmluZGV4T2YoXyksdSE9PWYmJihpPS0xPT09Zj9sOm8saVthXSs9XCIgXCIrXykpO2U9by5qb2luKFwiLCBcIiksaT1sLmpvaW4oXCIsIFwiKX1yZXR1cm4gcGUodCx0aGlzLnAsZSxpLHRoaXMuY2xycyx0aGlzLmRmbHQscix0aGlzLnByLHMsbil9LGwucGFyc2U9ZnVuY3Rpb24odCxlLGkscixuLGEpe3JldHVybiB0aGlzLnBhcnNlQ29tcGxleCh0LnN0eWxlLHRoaXMuZm9ybWF0KHEodCx0aGlzLnAscywhMSx0aGlzLmRmbHQpKSx0aGlzLmZvcm1hdChlKSxuLGEpfSxhLnJlZ2lzdGVyU3BlY2lhbFByb3A9ZnVuY3Rpb24odCxlLGkpe21lKHQse3BhcnNlcjpmdW5jdGlvbih0LHIscyxuLGEsbyl7dmFyIGw9bmV3IF9lKHQscywwLDAsYSwyLHMsITEsaSk7cmV0dXJuIGwucGx1Z2luPW8sbC5zZXRSYXRpbz1lKHQscixuLl90d2VlbixzKSxsfSxwcmlvcml0eTppfSl9O3ZhciB2ZT1cInNjYWxlWCxzY2FsZVksc2NhbGVaLHgseSx6LHNrZXdYLHNrZXdZLHJvdGF0aW9uLHJvdGF0aW9uWCxyb3RhdGlvblkscGVyc3BlY3RpdmVcIi5zcGxpdChcIixcIikseWU9VihcInRyYW5zZm9ybVwiKSxUZT1XK1widHJhbnNmb3JtXCIsd2U9VihcInRyYW5zZm9ybU9yaWdpblwiKSx4ZT1udWxsIT09VihcInBlcnNwZWN0aXZlXCIpLGJlPUUuVHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5za2V3WT0wfSxQZT1FLmdldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUsaSxyKXtpZih0Ll9nc1RyYW5zZm9ybSYmaSYmIXIpcmV0dXJuIHQuX2dzVHJhbnNmb3JtO3ZhciBzLG4sbyxsLGgsdSxmLF8scCxjLGQsbSxnLHY9aT90Ll9nc1RyYW5zZm9ybXx8bmV3IGJlOm5ldyBiZSx5PTA+di5zY2FsZVgsVD0yZS01LHc9MWU1LHg9MTc5Ljk5LGI9eCpNLFA9eGU/cGFyc2VGbG9hdChxKHQsd2UsZSwhMSxcIjAgMCAwXCIpLnNwbGl0KFwiIFwiKVsyXSl8fHYuek9yaWdpbnx8MDowO2Zvcih5ZT9zPXEodCxUZSxlLCEwKTp0LmN1cnJlbnRTdHlsZSYmKHM9dC5jdXJyZW50U3R5bGUuZmlsdGVyLm1hdGNoKEEpLHM9cyYmND09PXMubGVuZ3RoP1tzWzBdLnN1YnN0cig0KSxOdW1iZXIoc1syXS5zdWJzdHIoNCkpLE51bWJlcihzWzFdLnN1YnN0cig0KSksc1szXS5zdWJzdHIoNCksdi54fHwwLHYueXx8MF0uam9pbihcIixcIik6XCJcIiksbj0oc3x8XCJcIikubWF0Y2goLyg/OlxcLXxcXGIpW1xcZFxcLVxcLmVdK1xcYi9naSl8fFtdLG89bi5sZW5ndGg7LS1vPi0xOylsPU51bWJlcihuW29dKSxuW29dPShoPWwtKGx8PTApKT8oMHxoKncrKDA+aD8tLjU6LjUpKS93K2w6bDtpZigxNj09PW4ubGVuZ3RoKXt2YXIgUz1uWzhdLEM9bls5XSxSPW5bMTBdLGs9blsxMl0sTz1uWzEzXSxEPW5bMTRdO2lmKHYuek9yaWdpbiYmKEQ9LXYuek9yaWdpbixrPVMqRC1uWzEyXSxPPUMqRC1uWzEzXSxEPVIqRCt2LnpPcmlnaW4tblsxNF0pLCFpfHxyfHxudWxsPT12LnJvdGF0aW9uWCl7dmFyIE4sWCx6LEksRSxGLFksQj1uWzBdLFU9blsxXSxXPW5bMl0saj1uWzNdLFY9bls0XSxIPW5bNV0sUT1uWzZdLFo9bls3XSwkPW5bMTFdLEc9TWF0aC5hdGFuMihRLFIpLEs9LWI+R3x8Rz5iO3Yucm90YXRpb25YPUcqTCxHJiYoST1NYXRoLmNvcygtRyksRT1NYXRoLnNpbigtRyksTj1WKkkrUypFLFg9SCpJK0MqRSx6PVEqSStSKkUsUz1WKi1FK1MqSSxDPUgqLUUrQypJLFI9USotRStSKkksJD1aKi1FKyQqSSxWPU4sSD1YLFE9eiksRz1NYXRoLmF0YW4yKFMsQiksdi5yb3RhdGlvblk9RypMLEcmJihGPS1iPkd8fEc+YixJPU1hdGguY29zKC1HKSxFPU1hdGguc2luKC1HKSxOPUIqSS1TKkUsWD1VKkktQypFLHo9VypJLVIqRSxDPVUqRStDKkksUj1XKkUrUipJLCQ9aipFKyQqSSxCPU4sVT1YLFc9eiksRz1NYXRoLmF0YW4yKFUsSCksdi5yb3RhdGlvbj1HKkwsRyYmKFk9LWI+R3x8Rz5iLEk9TWF0aC5jb3MoLUcpLEU9TWF0aC5zaW4oLUcpLEI9QipJK1YqRSxYPVUqSStIKkUsSD1VKi1FK0gqSSxRPVcqLUUrUSpJLFU9WCksWSYmSz92LnJvdGF0aW9uPXYucm90YXRpb25YPTA6WSYmRj92LnJvdGF0aW9uPXYucm90YXRpb25ZPTA6RiYmSyYmKHYucm90YXRpb25ZPXYucm90YXRpb25YPTApLHYuc2NhbGVYPSgwfE1hdGguc3FydChCKkIrVSpVKSp3Ky41KS93LHYuc2NhbGVZPSgwfE1hdGguc3FydChIKkgrQypDKSp3Ky41KS93LHYuc2NhbGVaPSgwfE1hdGguc3FydChRKlErUipSKSp3Ky41KS93LHYuc2tld1g9MCx2LnBlcnNwZWN0aXZlPSQ/MS8oMD4kPy0kOiQpOjAsdi54PWssdi55PU8sdi56PUR9fWVsc2UgaWYoISh4ZSYmIXImJm4ubGVuZ3RoJiZ2Lng9PT1uWzRdJiZ2Lnk9PT1uWzVdJiYodi5yb3RhdGlvblh8fHYucm90YXRpb25ZKXx8dm9pZCAwIT09di54JiZcIm5vbmVcIj09PXEodCxcImRpc3BsYXlcIixlKSkpe3ZhciBKPW4ubGVuZ3RoPj02LHRlPUo/blswXToxLGVlPW5bMV18fDAsaWU9blsyXXx8MCxyZT1KP25bM106MTt2Lng9bls0XXx8MCx2Lnk9bls1XXx8MCx1PU1hdGguc3FydCh0ZSp0ZStlZSplZSksZj1NYXRoLnNxcnQocmUqcmUraWUqaWUpLF89dGV8fGVlP01hdGguYXRhbjIoZWUsdGUpKkw6di5yb3RhdGlvbnx8MCxwPWllfHxyZT9NYXRoLmF0YW4yKGllLHJlKSpMK186di5za2V3WHx8MCxjPXUtTWF0aC5hYnModi5zY2FsZVh8fDApLGQ9Zi1NYXRoLmFicyh2LnNjYWxlWXx8MCksTWF0aC5hYnMocCk+OTAmJjI3MD5NYXRoLmFicyhwKSYmKHk/KHUqPS0xLHArPTA+PV8/MTgwOi0xODAsXys9MD49Xz8xODA6LTE4MCk6KGYqPS0xLHArPTA+PXA/MTgwOi0xODApKSxtPShfLXYucm90YXRpb24pJTE4MCxnPShwLXYuc2tld1gpJTE4MCwodm9pZCAwPT09di5za2V3WHx8Yz5UfHwtVD5jfHxkPlR8fC1UPmR8fG0+LXgmJng+bSYmZmFsc2V8bSp3fHxnPi14JiZ4PmcmJmZhbHNlfGcqdykmJih2LnNjYWxlWD11LHYuc2NhbGVZPWYsdi5yb3RhdGlvbj1fLHYuc2tld1g9cCkseGUmJih2LnJvdGF0aW9uWD12LnJvdGF0aW9uWT12Lno9MCx2LnBlcnNwZWN0aXZlPXBhcnNlRmxvYXQoYS5kZWZhdWx0VHJhbnNmb3JtUGVyc3BlY3RpdmUpfHwwLHYuc2NhbGVaPTEpfXYuek9yaWdpbj1QO2ZvcihvIGluIHYpVD52W29dJiZ2W29dPi1UJiYodltvXT0wKTtyZXR1cm4gaSYmKHQuX2dzVHJhbnNmb3JtPXYpLHZ9LFNlPWZ1bmN0aW9uKHQpe3ZhciBlLGkscj10aGlzLmRhdGEscz0tci5yb3RhdGlvbipNLG49cytyLnNrZXdYKk0sYT0xZTUsbz0oMHxNYXRoLmNvcyhzKSpyLnNjYWxlWCphKS9hLGw9KDB8TWF0aC5zaW4ocykqci5zY2FsZVgqYSkvYSxoPSgwfE1hdGguc2luKG4pKi1yLnNjYWxlWSphKS9hLHU9KDB8TWF0aC5jb3Mobikqci5zY2FsZVkqYSkvYSxmPXRoaXMudC5zdHlsZSxfPXRoaXMudC5jdXJyZW50U3R5bGU7aWYoXyl7aT1sLGw9LWgsaD0taSxlPV8uZmlsdGVyLGYuZmlsdGVyPVwiXCI7dmFyIHAsZCxtPXRoaXMudC5vZmZzZXRXaWR0aCxnPXRoaXMudC5vZmZzZXRIZWlnaHQsdj1cImFic29sdXRlXCIhPT1fLnBvc2l0aW9uLHc9XCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT1cIitvK1wiLCBNMTI9XCIrbCtcIiwgTTIxPVwiK2grXCIsIE0yMj1cIit1LHg9ci54LGI9ci55O2lmKG51bGwhPXIub3gmJihwPShyLm94cD8uMDEqbSpyLm94OnIub3gpLW0vMixkPShyLm95cD8uMDEqZypyLm95OnIub3kpLWcvMix4Kz1wLShwKm8rZCpsKSxiKz1kLShwKmgrZCp1KSksdj8ocD1tLzIsZD1nLzIsdys9XCIsIER4PVwiKyhwLShwKm8rZCpsKSt4KStcIiwgRHk9XCIrKGQtKHAqaCtkKnUpK2IpK1wiKVwiKTp3Kz1cIiwgc2l6aW5nTWV0aG9kPSdhdXRvIGV4cGFuZCcpXCIsZi5maWx0ZXI9LTEhPT1lLmluZGV4T2YoXCJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5NYXRyaXgoXCIpP2UucmVwbGFjZShPLHcpOncrXCIgXCIrZSwoMD09PXR8fDE9PT10KSYmMT09PW8mJjA9PT1sJiYwPT09aCYmMT09PXUmJih2JiYtMT09PXcuaW5kZXhPZihcIkR4PTAsIER5PTBcIil8fFQudGVzdChlKSYmMTAwIT09cGFyc2VGbG9hdChSZWdFeHAuJDEpfHwtMT09PWUuaW5kZXhPZihcImdyYWRpZW50KFwiJiZlLmluZGV4T2YoXCJBbHBoYVwiKSkmJmYucmVtb3ZlQXR0cmlidXRlKFwiZmlsdGVyXCIpKSwhdil7dmFyIFAsUyxDLFI9OD5jPzE6LTE7Zm9yKHA9ci5pZU9mZnNldFh8fDAsZD1yLmllT2Zmc2V0WXx8MCxyLmllT2Zmc2V0WD1NYXRoLnJvdW5kKChtLSgoMD5vPy1vOm8pKm0rKDA+bD8tbDpsKSpnKSkvMit4KSxyLmllT2Zmc2V0WT1NYXRoLnJvdW5kKChnLSgoMD51Py11OnUpKmcrKDA+aD8taDpoKSptKSkvMitiKSxjZT0wOzQ+Y2U7Y2UrKylTPUpbY2VdLFA9X1tTXSxpPS0xIT09UC5pbmRleE9mKFwicHhcIik/cGFyc2VGbG9hdChQKTpRKHRoaXMudCxTLHBhcnNlRmxvYXQoUCksUC5yZXBsYWNlKHksXCJcIikpfHwwLEM9aSE9PXJbU10/Mj5jZT8tci5pZU9mZnNldFg6LXIuaWVPZmZzZXRZOjI+Y2U/cC1yLmllT2Zmc2V0WDpkLXIuaWVPZmZzZXRZLGZbU109KHJbU109TWF0aC5yb3VuZChpLUMqKDA9PT1jZXx8Mj09PWNlPzE6UikpKStcInB4XCJ9fX0sQ2U9RS5zZXQzRFRyYW5zZm9ybVJhdGlvPWZ1bmN0aW9uKHQpe3ZhciBlLGkscixzLG4sYSxvLGwsaCx1LGYscCxjLGQsbSxnLHYseSxULHcseCxiLFAsUz10aGlzLmRhdGEsQz10aGlzLnQuc3R5bGUsUj1TLnJvdGF0aW9uKk0saz1TLnNjYWxlWCxBPVMuc2NhbGVZLE89Uy5zY2FsZVosRD1TLnBlcnNwZWN0aXZlO2lmKCEoMSE9PXQmJjAhPT10fHxcImF1dG9cIiE9PVMuZm9yY2UzRHx8Uy5yb3RhdGlvbll8fFMucm90YXRpb25YfHwxIT09T3x8RHx8Uy56KSlyZXR1cm4gUmUuY2FsbCh0aGlzLHQpLHZvaWQgMDtpZihfKXt2YXIgTD0xZS00O0w+ayYmaz4tTCYmKGs9Tz0yZS01KSxMPkEmJkE+LUwmJihBPU89MmUtNSksIUR8fFMuenx8Uy5yb3RhdGlvblh8fFMucm90YXRpb25ZfHwoRD0wKX1pZihSfHxTLnNrZXdYKXk9TWF0aC5jb3MoUiksVD1NYXRoLnNpbihSKSxlPXksbj1ULFMuc2tld1gmJihSLT1TLnNrZXdYKk0seT1NYXRoLmNvcyhSKSxUPU1hdGguc2luKFIpLFwic2ltcGxlXCI9PT1TLnNrZXdUeXBlJiYodz1NYXRoLnRhbihTLnNrZXdYKk0pLHc9TWF0aC5zcXJ0KDErdyp3KSx5Kj13LFQqPXcpKSxpPS1ULGE9eTtlbHNle2lmKCEoUy5yb3RhdGlvbll8fFMucm90YXRpb25YfHwxIT09T3x8RCkpcmV0dXJuIENbeWVdPVwidHJhbnNsYXRlM2QoXCIrUy54K1wicHgsXCIrUy55K1wicHgsXCIrUy56K1wicHgpXCIrKDEhPT1rfHwxIT09QT9cIiBzY2FsZShcIitrK1wiLFwiK0ErXCIpXCI6XCJcIiksdm9pZCAwO2U9YT0xLGk9bj0wfWY9MSxyPXM9bz1sPWg9dT1wPWM9ZD0wLG09RD8tMS9EOjAsZz1TLnpPcmlnaW4sdj0xZTUsUj1TLnJvdGF0aW9uWSpNLFImJih5PU1hdGguY29zKFIpLFQ9TWF0aC5zaW4oUiksaD1mKi1ULGM9bSotVCxyPWUqVCxvPW4qVCxmKj15LG0qPXksZSo9eSxuKj15KSxSPVMucm90YXRpb25YKk0sUiYmKHk9TWF0aC5jb3MoUiksVD1NYXRoLnNpbihSKSx3PWkqeStyKlQseD1hKnkrbypULGI9dSp5K2YqVCxQPWQqeSttKlQscj1pKi1UK3IqeSxvPWEqLVQrbyp5LGY9dSotVCtmKnksbT1kKi1UK20qeSxpPXcsYT14LHU9YixkPVApLDEhPT1PJiYocio9TyxvKj1PLGYqPU8sbSo9TyksMSE9PUEmJihpKj1BLGEqPUEsdSo9QSxkKj1BKSwxIT09ayYmKGUqPWssbio9ayxoKj1rLGMqPWspLGcmJihwLT1nLHM9cipwLGw9bypwLHA9ZipwK2cpLHM9KHc9KHMrPVMueCktKHN8PTApKT8oMHx3KnYrKDA+dz8tLjU6LjUpKS92K3M6cyxsPSh3PShsKz1TLnkpLShsfD0wKSk/KDB8dyp2KygwPnc/LS41Oi41KSkvditsOmwscD0odz0ocCs9Uy56KS0ocHw9MCkpPygwfHcqdisoMD53Py0uNTouNSkpL3YrcDpwLENbeWVdPVwibWF0cml4M2QoXCIrWygwfGUqdikvdiwoMHxuKnYpL3YsKDB8aCp2KS92LCgwfGMqdikvdiwoMHxpKnYpL3YsKDB8YSp2KS92LCgwfHUqdikvdiwoMHxkKnYpL3YsKDB8cip2KS92LCgwfG8qdikvdiwoMHxmKnYpL3YsKDB8bSp2KS92LHMsbCxwLEQ/MSstcC9EOjFdLmpvaW4oXCIsXCIpK1wiKVwifSxSZT1FLnNldDJEVHJhbnNmb3JtUmF0aW89ZnVuY3Rpb24odCl7dmFyIGUsaSxyLHMsbixhPXRoaXMuZGF0YSxvPXRoaXMudCxsPW8uc3R5bGU7cmV0dXJuIGEucm90YXRpb25YfHxhLnJvdGF0aW9uWXx8YS56fHxhLmZvcmNlM0Q9PT0hMHx8XCJhdXRvXCI9PT1hLmZvcmNlM0QmJjEhPT10JiYwIT09dD8odGhpcy5zZXRSYXRpbz1DZSxDZS5jYWxsKHRoaXMsdCksdm9pZCAwKTooYS5yb3RhdGlvbnx8YS5za2V3WD8oZT1hLnJvdGF0aW9uKk0saT1lLWEuc2tld1gqTSxyPTFlNSxzPWEuc2NhbGVYKnIsbj1hLnNjYWxlWSpyLGxbeWVdPVwibWF0cml4KFwiKygwfE1hdGguY29zKGUpKnMpL3IrXCIsXCIrKDB8TWF0aC5zaW4oZSkqcykvcitcIixcIisoMHxNYXRoLnNpbihpKSotbikvcitcIixcIisoMHxNYXRoLmNvcyhpKSpuKS9yK1wiLFwiK2EueCtcIixcIithLnkrXCIpXCIpOmxbeWVdPVwibWF0cml4KFwiK2Euc2NhbGVYK1wiLDAsMCxcIithLnNjYWxlWStcIixcIithLngrXCIsXCIrYS55K1wiKVwiLHZvaWQgMCl9O21lKFwidHJhbnNmb3JtLHNjYWxlLHNjYWxlWCxzY2FsZVksc2NhbGVaLHgseSx6LHJvdGF0aW9uLHJvdGF0aW9uWCxyb3RhdGlvblkscm90YXRpb25aLHNrZXdYLHNrZXdZLHNob3J0Um90YXRpb24sc2hvcnRSb3RhdGlvblgsc2hvcnRSb3RhdGlvblksc2hvcnRSb3RhdGlvblosdHJhbnNmb3JtT3JpZ2luLHRyYW5zZm9ybVBlcnNwZWN0aXZlLGRpcmVjdGlvbmFsUm90YXRpb24scGFyc2VUcmFuc2Zvcm0sZm9yY2UzRCxza2V3VHlwZVwiLHtwYXJzZXI6ZnVuY3Rpb24odCxlLGkscixuLG8sbCl7aWYoci5fdHJhbnNmb3JtKXJldHVybiBuO3ZhciBoLHUsZixfLHAsYyxkLG09ci5fdHJhbnNmb3JtPVBlKHQscywhMCxsLnBhcnNlVHJhbnNmb3JtKSxnPXQuc3R5bGUsdj0xZS02LHk9dmUubGVuZ3RoLFQ9bCx3PXt9O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBULnRyYW5zZm9ybSYmeWUpZj16LnN0eWxlLGZbeWVdPVQudHJhbnNmb3JtLGYuZGlzcGxheT1cImJsb2NrXCIsZi5wb3NpdGlvbj1cImFic29sdXRlXCIsWC5ib2R5LmFwcGVuZENoaWxkKHopLGg9UGUoeixudWxsLCExKSxYLmJvZHkucmVtb3ZlQ2hpbGQoeik7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgVCl7aWYoaD17c2NhbGVYOnJlKG51bGwhPVQuc2NhbGVYP1Quc2NhbGVYOlQuc2NhbGUsbS5zY2FsZVgpLHNjYWxlWTpyZShudWxsIT1ULnNjYWxlWT9ULnNjYWxlWTpULnNjYWxlLG0uc2NhbGVZKSxzY2FsZVo6cmUoVC5zY2FsZVosbS5zY2FsZVopLHg6cmUoVC54LG0ueCkseTpyZShULnksbS55KSx6OnJlKFQueixtLnopLHBlcnNwZWN0aXZlOnJlKFQudHJhbnNmb3JtUGVyc3BlY3RpdmUsbS5wZXJzcGVjdGl2ZSl9LGQ9VC5kaXJlY3Rpb25hbFJvdGF0aW9uLG51bGwhPWQpaWYoXCJvYmplY3RcIj09dHlwZW9mIGQpZm9yKGYgaW4gZClUW2ZdPWRbZl07ZWxzZSBULnJvdGF0aW9uPWQ7aC5yb3RhdGlvbj1zZShcInJvdGF0aW9uXCJpbiBUP1Qucm90YXRpb246XCJzaG9ydFJvdGF0aW9uXCJpbiBUP1Quc2hvcnRSb3RhdGlvbitcIl9zaG9ydFwiOlwicm90YXRpb25aXCJpbiBUP1Qucm90YXRpb25aOm0ucm90YXRpb24sbS5yb3RhdGlvbixcInJvdGF0aW9uXCIsdykseGUmJihoLnJvdGF0aW9uWD1zZShcInJvdGF0aW9uWFwiaW4gVD9ULnJvdGF0aW9uWDpcInNob3J0Um90YXRpb25YXCJpbiBUP1Quc2hvcnRSb3RhdGlvblgrXCJfc2hvcnRcIjptLnJvdGF0aW9uWHx8MCxtLnJvdGF0aW9uWCxcInJvdGF0aW9uWFwiLHcpLGgucm90YXRpb25ZPXNlKFwicm90YXRpb25ZXCJpbiBUP1Qucm90YXRpb25ZOlwic2hvcnRSb3RhdGlvbllcImluIFQ/VC5zaG9ydFJvdGF0aW9uWStcIl9zaG9ydFwiOm0ucm90YXRpb25ZfHwwLG0ucm90YXRpb25ZLFwicm90YXRpb25ZXCIsdykpLGguc2tld1g9bnVsbD09VC5za2V3WD9tLnNrZXdYOnNlKFQuc2tld1gsbS5za2V3WCksaC5za2V3WT1udWxsPT1ULnNrZXdZP20uc2tld1k6c2UoVC5za2V3WSxtLnNrZXdZKSwodT1oLnNrZXdZLW0uc2tld1kpJiYoaC5za2V3WCs9dSxoLnJvdGF0aW9uKz11KX1mb3IoeGUmJm51bGwhPVQuZm9yY2UzRCYmKG0uZm9yY2UzRD1ULmZvcmNlM0QsYz0hMCksbS5za2V3VHlwZT1ULnNrZXdUeXBlfHxtLnNrZXdUeXBlfHxhLmRlZmF1bHRTa2V3VHlwZSxwPW0uZm9yY2UzRHx8bS56fHxtLnJvdGF0aW9uWHx8bS5yb3RhdGlvbll8fGguenx8aC5yb3RhdGlvblh8fGgucm90YXRpb25ZfHxoLnBlcnNwZWN0aXZlLHB8fG51bGw9PVQuc2NhbGV8fChoLnNjYWxlWj0xKTstLXk+LTE7KWk9dmVbeV0sXz1oW2ldLW1baV0sKF8+dnx8LXY+X3x8bnVsbCE9TltpXSkmJihjPSEwLG49bmV3IF9lKG0saSxtW2ldLF8sbiksaSBpbiB3JiYobi5lPXdbaV0pLG4ueHMwPTAsbi5wbHVnaW49byxyLl9vdmVyd3JpdGVQcm9wcy5wdXNoKG4ubikpO3JldHVybiBfPVQudHJhbnNmb3JtT3JpZ2luLChffHx4ZSYmcCYmbS56T3JpZ2luKSYmKHllPyhjPSEwLGk9d2UsXz0oX3x8cSh0LGkscywhMSxcIjUwJSA1MCVcIikpK1wiXCIsbj1uZXcgX2UoZyxpLDAsMCxuLC0xLFwidHJhbnNmb3JtT3JpZ2luXCIpLG4uYj1nW2ldLG4ucGx1Z2luPW8seGU/KGY9bS56T3JpZ2luLF89Xy5zcGxpdChcIiBcIiksbS56T3JpZ2luPShfLmxlbmd0aD4yJiYoMD09PWZ8fFwiMHB4XCIhPT1fWzJdKT9wYXJzZUZsb2F0KF9bMl0pOmYpfHwwLG4ueHMwPW4uZT1fWzBdK1wiIFwiKyhfWzFdfHxcIjUwJVwiKStcIiAwcHhcIixuPW5ldyBfZShtLFwiek9yaWdpblwiLDAsMCxuLC0xLG4ubiksbi5iPWYsbi54czA9bi5lPW0uek9yaWdpbik6bi54czA9bi5lPV8pOmVlKF8rXCJcIixtKSksYyYmKHIuX3RyYW5zZm9ybVR5cGU9cHx8Mz09PXRoaXMuX3RyYW5zZm9ybVR5cGU/MzoyKSxufSxwcmVmaXg6ITB9KSxtZShcImJveFNoYWRvd1wiLHtkZWZhdWx0VmFsdWU6XCIwcHggMHB4IDBweCAwcHggIzk5OVwiLHByZWZpeDohMCxjb2xvcjohMCxtdWx0aTohMCxrZXl3b3JkOlwiaW5zZXRcIn0pLG1lKFwiYm9yZGVyUmFkaXVzXCIse2RlZmF1bHRWYWx1ZTpcIjBweFwiLHBhcnNlcjpmdW5jdGlvbih0LGUsaSxuLGEpe2U9dGhpcy5mb3JtYXQoZSk7dmFyIG8sbCxoLHUsZixfLHAsYyxkLG0sZyx2LHksVCx3LHgsYj1bXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIl0sUD10LnN0eWxlO2ZvcihkPXBhcnNlRmxvYXQodC5vZmZzZXRXaWR0aCksbT1wYXJzZUZsb2F0KHQub2Zmc2V0SGVpZ2h0KSxvPWUuc3BsaXQoXCIgXCIpLGw9MDtiLmxlbmd0aD5sO2wrKyl0aGlzLnAuaW5kZXhPZihcImJvcmRlclwiKSYmKGJbbF09VihiW2xdKSksZj11PXEodCxiW2xdLHMsITEsXCIwcHhcIiksLTEhPT1mLmluZGV4T2YoXCIgXCIpJiYodT1mLnNwbGl0KFwiIFwiKSxmPXVbMF0sdT11WzFdKSxfPWg9b1tsXSxwPXBhcnNlRmxvYXQoZiksdj1mLnN1YnN0cigocCtcIlwiKS5sZW5ndGgpLHk9XCI9XCI9PT1fLmNoYXJBdCgxKSx5PyhjPXBhcnNlSW50KF8uY2hhckF0KDApK1wiMVwiLDEwKSxfPV8uc3Vic3RyKDIpLGMqPXBhcnNlRmxvYXQoXyksZz1fLnN1YnN0cigoYytcIlwiKS5sZW5ndGgtKDA+Yz8xOjApKXx8XCJcIik6KGM9cGFyc2VGbG9hdChfKSxnPV8uc3Vic3RyKChjK1wiXCIpLmxlbmd0aCkpLFwiXCI9PT1nJiYoZz1yW2ldfHx2KSxnIT09diYmKFQ9USh0LFwiYm9yZGVyTGVmdFwiLHAsdiksdz1RKHQsXCJib3JkZXJUb3BcIixwLHYpLFwiJVwiPT09Zz8oZj0xMDAqKFQvZCkrXCIlXCIsdT0xMDAqKHcvbSkrXCIlXCIpOlwiZW1cIj09PWc/KHg9USh0LFwiYm9yZGVyTGVmdFwiLDEsXCJlbVwiKSxmPVQveCtcImVtXCIsdT13L3grXCJlbVwiKTooZj1UK1wicHhcIix1PXcrXCJweFwiKSx5JiYoXz1wYXJzZUZsb2F0KGYpK2MrZyxoPXBhcnNlRmxvYXQodSkrYytnKSksYT1wZShQLGJbbF0sZitcIiBcIit1LF8rXCIgXCIraCwhMSxcIjBweFwiLGEpO3JldHVybiBhfSxwcmVmaXg6ITAsZm9ybWF0dGVyOmhlKFwiMHB4IDBweCAwcHggMHB4XCIsITEsITApfSksbWUoXCJiYWNrZ3JvdW5kUG9zaXRpb25cIix7ZGVmYXVsdFZhbHVlOlwiMCAwXCIscGFyc2VyOmZ1bmN0aW9uKHQsZSxpLHIsbixhKXt2YXIgbyxsLGgsdSxmLF8scD1cImJhY2tncm91bmQtcG9zaXRpb25cIixkPXN8fEgodCxudWxsKSxtPXRoaXMuZm9ybWF0KChkP2M/ZC5nZXRQcm9wZXJ0eVZhbHVlKHArXCIteFwiKStcIiBcIitkLmdldFByb3BlcnR5VmFsdWUocCtcIi15XCIpOmQuZ2V0UHJvcGVydHlWYWx1ZShwKTp0LmN1cnJlbnRTdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb25YK1wiIFwiK3QuY3VycmVudFN0eWxlLmJhY2tncm91bmRQb3NpdGlvblkpfHxcIjAgMFwiKSxnPXRoaXMuZm9ybWF0KGUpO2lmKC0xIT09bS5pbmRleE9mKFwiJVwiKSE9KC0xIT09Zy5pbmRleE9mKFwiJVwiKSkmJihfPXEodCxcImJhY2tncm91bmRJbWFnZVwiKS5yZXBsYWNlKEMsXCJcIiksXyYmXCJub25lXCIhPT1fKSl7Zm9yKG89bS5zcGxpdChcIiBcIiksbD1nLnNwbGl0KFwiIFwiKSxJLnNldEF0dHJpYnV0ZShcInNyY1wiLF8pLGg9MjstLWg+LTE7KW09b1toXSx1PS0xIT09bS5pbmRleE9mKFwiJVwiKSx1IT09KC0xIT09bFtoXS5pbmRleE9mKFwiJVwiKSkmJihmPTA9PT1oP3Qub2Zmc2V0V2lkdGgtSS53aWR0aDp0Lm9mZnNldEhlaWdodC1JLmhlaWdodCxvW2hdPXU/cGFyc2VGbG9hdChtKS8xMDAqZitcInB4XCI6MTAwKihwYXJzZUZsb2F0KG0pL2YpK1wiJVwiKTttPW8uam9pbihcIiBcIil9cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4KHQuc3R5bGUsbSxnLG4sYSl9LGZvcm1hdHRlcjplZX0pLG1lKFwiYmFja2dyb3VuZFNpemVcIix7ZGVmYXVsdFZhbHVlOlwiMCAwXCIsZm9ybWF0dGVyOmVlfSksbWUoXCJwZXJzcGVjdGl2ZVwiLHtkZWZhdWx0VmFsdWU6XCIwcHhcIixwcmVmaXg6ITB9KSxtZShcInBlcnNwZWN0aXZlT3JpZ2luXCIse2RlZmF1bHRWYWx1ZTpcIjUwJSA1MCVcIixwcmVmaXg6ITB9KSxtZShcInRyYW5zZm9ybVN0eWxlXCIse3ByZWZpeDohMH0pLG1lKFwiYmFja2ZhY2VWaXNpYmlsaXR5XCIse3ByZWZpeDohMH0pLG1lKFwidXNlclNlbGVjdFwiLHtwcmVmaXg6ITB9KSxtZShcIm1hcmdpblwiLHtwYXJzZXI6dWUoXCJtYXJnaW5Ub3AsbWFyZ2luUmlnaHQsbWFyZ2luQm90dG9tLG1hcmdpbkxlZnRcIil9KSxtZShcInBhZGRpbmdcIix7cGFyc2VyOnVlKFwicGFkZGluZ1RvcCxwYWRkaW5nUmlnaHQscGFkZGluZ0JvdHRvbSxwYWRkaW5nTGVmdFwiKX0pLG1lKFwiY2xpcFwiLHtkZWZhdWx0VmFsdWU6XCJyZWN0KDBweCwwcHgsMHB4LDBweClcIixwYXJzZXI6ZnVuY3Rpb24odCxlLGkscixuLGEpe3ZhciBvLGwsaDtyZXR1cm4gOT5jPyhsPXQuY3VycmVudFN0eWxlLGg9OD5jP1wiIFwiOlwiLFwiLG89XCJyZWN0KFwiK2wuY2xpcFRvcCtoK2wuY2xpcFJpZ2h0K2grbC5jbGlwQm90dG9tK2grbC5jbGlwTGVmdCtcIilcIixlPXRoaXMuZm9ybWF0KGUpLnNwbGl0KFwiLFwiKS5qb2luKGgpKToobz10aGlzLmZvcm1hdChxKHQsdGhpcy5wLHMsITEsdGhpcy5kZmx0KSksZT10aGlzLmZvcm1hdChlKSksdGhpcy5wYXJzZUNvbXBsZXgodC5zdHlsZSxvLGUsbixhKX19KSxtZShcInRleHRTaGFkb3dcIix7ZGVmYXVsdFZhbHVlOlwiMHB4IDBweCAwcHggIzk5OVwiLGNvbG9yOiEwLG11bHRpOiEwfSksbWUoXCJhdXRvUm91bmQsc3RyaWN0VW5pdHNcIix7cGFyc2VyOmZ1bmN0aW9uKHQsZSxpLHIscyl7cmV0dXJuIHN9fSksbWUoXCJib3JkZXJcIix7ZGVmYXVsdFZhbHVlOlwiMHB4IHNvbGlkICMwMDBcIixwYXJzZXI6ZnVuY3Rpb24odCxlLGkscixuLGEpe3JldHVybiB0aGlzLnBhcnNlQ29tcGxleCh0LnN0eWxlLHRoaXMuZm9ybWF0KHEodCxcImJvcmRlclRvcFdpZHRoXCIscywhMSxcIjBweFwiKStcIiBcIitxKHQsXCJib3JkZXJUb3BTdHlsZVwiLHMsITEsXCJzb2xpZFwiKStcIiBcIitxKHQsXCJib3JkZXJUb3BDb2xvclwiLHMsITEsXCIjMDAwXCIpKSx0aGlzLmZvcm1hdChlKSxuLGEpfSxjb2xvcjohMCxmb3JtYXR0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dC5zcGxpdChcIiBcIik7cmV0dXJuIGVbMF0rXCIgXCIrKGVbMV18fFwic29saWRcIikrXCIgXCIrKHQubWF0Y2gobGUpfHxbXCIjMDAwXCJdKVswXX19KSxtZShcImJvcmRlcldpZHRoXCIse3BhcnNlcjp1ZShcImJvcmRlclRvcFdpZHRoLGJvcmRlclJpZ2h0V2lkdGgsYm9yZGVyQm90dG9tV2lkdGgsYm9yZGVyTGVmdFdpZHRoXCIpfSksbWUoXCJmbG9hdCxjc3NGbG9hdCxzdHlsZUZsb2F0XCIse3BhcnNlcjpmdW5jdGlvbih0LGUsaSxyLHMpe3ZhciBuPXQuc3R5bGUsYT1cImNzc0Zsb2F0XCJpbiBuP1wiY3NzRmxvYXRcIjpcInN0eWxlRmxvYXRcIjtyZXR1cm4gbmV3IF9lKG4sYSwwLDAscywtMSxpLCExLDAsblthXSxlKX19KTt2YXIga2U9ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLnQscj1pLmZpbHRlcnx8cSh0aGlzLmRhdGEsXCJmaWx0ZXJcIikscz0wfHRoaXMucyt0aGlzLmMqdDsxMDA9PT1zJiYoLTE9PT1yLmluZGV4T2YoXCJhdHJpeChcIikmJi0xPT09ci5pbmRleE9mKFwicmFkaWVudChcIikmJi0xPT09ci5pbmRleE9mKFwib2FkZXIoXCIpPyhpLnJlbW92ZUF0dHJpYnV0ZShcImZpbHRlclwiKSxlPSFxKHRoaXMuZGF0YSxcImZpbHRlclwiKSk6KGkuZmlsdGVyPXIucmVwbGFjZSh4LFwiXCIpLGU9ITApKSxlfHwodGhpcy54bjEmJihpLmZpbHRlcj1yPXJ8fFwiYWxwaGEob3BhY2l0eT1cIitzK1wiKVwiKSwtMT09PXIuaW5kZXhPZihcInBhY2l0eVwiKT8wPT09cyYmdGhpcy54bjF8fChpLmZpbHRlcj1yK1wiIGFscGhhKG9wYWNpdHk9XCIrcytcIilcIik6aS5maWx0ZXI9ci5yZXBsYWNlKFQsXCJvcGFjaXR5PVwiK3MpKX07bWUoXCJvcGFjaXR5LGFscGhhLGF1dG9BbHBoYVwiLHtkZWZhdWx0VmFsdWU6XCIxXCIscGFyc2VyOmZ1bmN0aW9uKHQsZSxpLHIsbixhKXt2YXIgbz1wYXJzZUZsb2F0KHEodCxcIm9wYWNpdHlcIixzLCExLFwiMVwiKSksbD10LnN0eWxlLGg9XCJhdXRvQWxwaGFcIj09PWk7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJlwiPVwiPT09ZS5jaGFyQXQoMSkmJihlPShcIi1cIj09PWUuY2hhckF0KDApPy0xOjEpKnBhcnNlRmxvYXQoZS5zdWJzdHIoMikpK28pLGgmJjE9PT1vJiZcImhpZGRlblwiPT09cSh0LFwidmlzaWJpbGl0eVwiLHMpJiYwIT09ZSYmKG89MCksWT9uPW5ldyBfZShsLFwib3BhY2l0eVwiLG8sZS1vLG4pOihuPW5ldyBfZShsLFwib3BhY2l0eVwiLDEwMCpvLDEwMCooZS1vKSxuKSxuLnhuMT1oPzE6MCxsLnpvb209MSxuLnR5cGU9MixuLmI9XCJhbHBoYShvcGFjaXR5PVwiK24ucytcIilcIixuLmU9XCJhbHBoYShvcGFjaXR5PVwiKyhuLnMrbi5jKStcIilcIixuLmRhdGE9dCxuLnBsdWdpbj1hLG4uc2V0UmF0aW89a2UpLGgmJihuPW5ldyBfZShsLFwidmlzaWJpbGl0eVwiLDAsMCxuLC0xLG51bGwsITEsMCwwIT09bz9cImluaGVyaXRcIjpcImhpZGRlblwiLDA9PT1lP1wiaGlkZGVuXCI6XCJpbmhlcml0XCIpLG4ueHMwPVwiaW5oZXJpdFwiLHIuX292ZXJ3cml0ZVByb3BzLnB1c2gobi5uKSxyLl9vdmVyd3JpdGVQcm9wcy5wdXNoKGkpKSxufX0pO3ZhciBBZT1mdW5jdGlvbih0LGUpe2UmJih0LnJlbW92ZVByb3BlcnR5PyhcIm1zXCI9PT1lLnN1YnN0cigwLDIpJiYoZT1cIk1cIitlLnN1YnN0cigxKSksdC5yZW1vdmVQcm9wZXJ0eShlLnJlcGxhY2UoUCxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpKSk6dC5yZW1vdmVBdHRyaWJ1dGUoZSkpfSxPZT1mdW5jdGlvbih0KXtpZih0aGlzLnQuX2dzQ2xhc3NQVD10aGlzLDE9PT10fHwwPT09dCl7dGhpcy50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsMD09PXQ/dGhpcy5iOnRoaXMuZSk7Zm9yKHZhciBlPXRoaXMuZGF0YSxpPXRoaXMudC5zdHlsZTtlOyllLnY/aVtlLnBdPWUudjpBZShpLGUucCksZT1lLl9uZXh0OzE9PT10JiZ0aGlzLnQuX2dzQ2xhc3NQVD09PXRoaXMmJih0aGlzLnQuX2dzQ2xhc3NQVD1udWxsKX1lbHNlIHRoaXMudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSE9PXRoaXMuZSYmdGhpcy50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsdGhpcy5lKX07bWUoXCJjbGFzc05hbWVcIix7cGFyc2VyOmZ1bmN0aW9uKHQsZSxyLG4sYSxvLGwpe3ZhciBoLHUsZixfLHAsYz10LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwiLGQ9dC5zdHlsZS5jc3NUZXh0O2lmKGE9bi5fY2xhc3NOYW1lUFQ9bmV3IF9lKHQsciwwLDAsYSwyKSxhLnNldFJhdGlvPU9lLGEucHI9LTExLGk9ITAsYS5iPWMsdT0kKHQscyksZj10Ll9nc0NsYXNzUFQpe2ZvcihfPXt9LHA9Zi5kYXRhO3A7KV9bcC5wXT0xLHA9cC5fbmV4dDtmLnNldFJhdGlvKDEpfXJldHVybiB0Ll9nc0NsYXNzUFQ9YSxhLmU9XCI9XCIhPT1lLmNoYXJBdCgxKT9lOmMucmVwbGFjZShSZWdFeHAoXCJcXFxccypcXFxcYlwiK2Uuc3Vic3RyKDIpK1wiXFxcXGJcIiksXCJcIikrKFwiK1wiPT09ZS5jaGFyQXQoMCk/XCIgXCIrZS5zdWJzdHIoMik6XCJcIiksbi5fdHdlZW4uX2R1cmF0aW9uJiYodC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGEuZSksaD1HKHQsdSwkKHQpLGwsXyksdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGMpLGEuZGF0YT1oLmZpcnN0TVBULHQuc3R5bGUuY3NzVGV4dD1kLGE9YS54Zmlyc3Q9bi5wYXJzZSh0LGguZGlmcyxhLG8pKSxhfX0pO3ZhciBEZT1mdW5jdGlvbih0KXtpZigoMT09PXR8fDA9PT10KSYmdGhpcy5kYXRhLl90b3RhbFRpbWU9PT10aGlzLmRhdGEuX3RvdGFsRHVyYXRpb24mJlwiaXNGcm9tU3RhcnRcIiE9PXRoaXMuZGF0YS5kYXRhKXt2YXIgZSxpLHIscyxuPXRoaXMudC5zdHlsZSxhPW8udHJhbnNmb3JtLnBhcnNlO2lmKFwiYWxsXCI9PT10aGlzLmUpbi5jc3NUZXh0PVwiXCIscz0hMDtlbHNlIGZvcihlPXRoaXMuZS5zcGxpdChcIixcIikscj1lLmxlbmd0aDstLXI+LTE7KWk9ZVtyXSxvW2ldJiYob1tpXS5wYXJzZT09PWE/cz0hMDppPVwidHJhbnNmb3JtT3JpZ2luXCI9PT1pP3dlOm9baV0ucCksQWUobixpKTtzJiYoQWUobix5ZSksdGhpcy50Ll9nc1RyYW5zZm9ybSYmZGVsZXRlIHRoaXMudC5fZ3NUcmFuc2Zvcm0pfX07Zm9yKG1lKFwiY2xlYXJQcm9wc1wiLHtwYXJzZXI6ZnVuY3Rpb24odCxlLHIscyxuKXtyZXR1cm4gbj1uZXcgX2UodCxyLDAsMCxuLDIpLG4uc2V0UmF0aW89RGUsbi5lPWUsbi5wcj0tMTAsbi5kYXRhPXMuX3R3ZWVuLGk9ITAsbn19KSxsPVwiYmV6aWVyLHRocm93UHJvcHMscGh5c2ljc1Byb3BzLHBoeXNpY3MyRFwiLnNwbGl0KFwiLFwiKSxjZT1sLmxlbmd0aDtjZS0tOylnZShsW2NlXSk7bD1hLnByb3RvdHlwZSxsLl9maXJzdFBUPW51bGwsbC5fb25Jbml0VHdlZW49ZnVuY3Rpb24odCxlLG8pe2lmKCF0Lm5vZGVUeXBlKXJldHVybiExO3RoaXMuX3RhcmdldD10LHRoaXMuX3R3ZWVuPW8sdGhpcy5fdmFycz1lLGg9ZS5hdXRvUm91bmQsaT0hMSxyPWUuc3VmZml4TWFwfHxhLnN1ZmZpeE1hcCxzPUgodCxcIlwiKSxuPXRoaXMuX292ZXJ3cml0ZVByb3BzO3ZhciBsLF8sYyxkLG0sZyx2LHksVCx4PXQuc3R5bGU7aWYodSYmXCJcIj09PXguekluZGV4JiYobD1xKHQsXCJ6SW5kZXhcIixzKSwoXCJhdXRvXCI9PT1sfHxcIlwiPT09bCkmJnRoaXMuX2FkZExhenlTZXQoeCxcInpJbmRleFwiLDApKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmKGQ9eC5jc3NUZXh0LGw9JCh0LHMpLHguY3NzVGV4dD1kK1wiO1wiK2UsbD1HKHQsbCwkKHQpKS5kaWZzLCFZJiZ3LnRlc3QoZSkmJihsLm9wYWNpdHk9cGFyc2VGbG9hdChSZWdFeHAuJDEpKSxlPWwseC5jc3NUZXh0PWQpLHRoaXMuX2ZpcnN0UFQ9Xz10aGlzLnBhcnNlKHQsZSxudWxsKSx0aGlzLl90cmFuc2Zvcm1UeXBlKXtmb3IoVD0zPT09dGhpcy5fdHJhbnNmb3JtVHlwZSx5ZT9mJiYodT0hMCxcIlwiPT09eC56SW5kZXgmJih2PXEodCxcInpJbmRleFwiLHMpLChcImF1dG9cIj09PXZ8fFwiXCI9PT12KSYmdGhpcy5fYWRkTGF6eVNldCh4LFwiekluZGV4XCIsMCkpLHAmJnRoaXMuX2FkZExhenlTZXQoeCxcIldlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eVwiLHRoaXMuX3ZhcnMuV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5fHwoVD9cInZpc2libGVcIjpcImhpZGRlblwiKSkpOnguem9vbT0xLGM9XztjJiZjLl9uZXh0OyljPWMuX25leHQ7eT1uZXcgX2UodCxcInRyYW5zZm9ybVwiLDAsMCxudWxsLDIpLHRoaXMuX2xpbmtDU1NQKHksbnVsbCxjKSx5LnNldFJhdGlvPVQmJnhlP0NlOnllP1JlOlNlLHkuZGF0YT10aGlzLl90cmFuc2Zvcm18fFBlKHQscywhMCksbi5wb3AoKX1pZihpKXtmb3IoO187KXtmb3IoZz1fLl9uZXh0LGM9ZDtjJiZjLnByPl8ucHI7KWM9Yy5fbmV4dDsoXy5fcHJldj1jP2MuX3ByZXY6bSk/Xy5fcHJldi5fbmV4dD1fOmQ9XywoXy5fbmV4dD1jKT9jLl9wcmV2PV86bT1fLF89Z310aGlzLl9maXJzdFBUPWR9cmV0dXJuITB9LGwucGFyc2U9ZnVuY3Rpb24odCxlLGksbil7dmFyIGEsbCx1LGYsXyxwLGMsZCxtLGcsdj10LnN0eWxlO2ZvcihhIGluIGUpcD1lW2FdLGw9b1thXSxsP2k9bC5wYXJzZSh0LHAsYSx0aGlzLGksbixlKTooXz1xKHQsYSxzKStcIlwiLG09XCJzdHJpbmdcIj09dHlwZW9mIHAsXCJjb2xvclwiPT09YXx8XCJmaWxsXCI9PT1hfHxcInN0cm9rZVwiPT09YXx8LTEhPT1hLmluZGV4T2YoXCJDb2xvclwiKXx8bSYmYi50ZXN0KHApPyhtfHwocD1vZShwKSxwPShwLmxlbmd0aD4zP1wicmdiYShcIjpcInJnYihcIikrcC5qb2luKFwiLFwiKStcIilcIiksaT1wZSh2LGEsXyxwLCEwLFwidHJhbnNwYXJlbnRcIixpLDAsbikpOiFtfHwtMT09PXAuaW5kZXhPZihcIiBcIikmJi0xPT09cC5pbmRleE9mKFwiLFwiKT8odT1wYXJzZUZsb2F0KF8pLGM9dXx8MD09PXU/Xy5zdWJzdHIoKHUrXCJcIikubGVuZ3RoKTpcIlwiLChcIlwiPT09X3x8XCJhdXRvXCI9PT1fKSYmKFwid2lkdGhcIj09PWF8fFwiaGVpZ2h0XCI9PT1hPyh1PXRlKHQsYSxzKSxjPVwicHhcIik6XCJsZWZ0XCI9PT1hfHxcInRvcFwiPT09YT8odT1aKHQsYSxzKSxjPVwicHhcIik6KHU9XCJvcGFjaXR5XCIhPT1hPzA6MSxjPVwiXCIpKSxnPW0mJlwiPVwiPT09cC5jaGFyQXQoMSksZz8oZj1wYXJzZUludChwLmNoYXJBdCgwKStcIjFcIiwxMCkscD1wLnN1YnN0cigyKSxmKj1wYXJzZUZsb2F0KHApLGQ9cC5yZXBsYWNlKHksXCJcIikpOihmPXBhcnNlRmxvYXQocCksZD1tP3Auc3Vic3RyKChmK1wiXCIpLmxlbmd0aCl8fFwiXCI6XCJcIiksXCJcIj09PWQmJihkPWEgaW4gcj9yW2FdOmMpLHA9Znx8MD09PWY/KGc/Zit1OmYpK2Q6ZVthXSxjIT09ZCYmXCJcIiE9PWQmJihmfHwwPT09ZikmJnUmJih1PVEodCxhLHUsYyksXCIlXCI9PT1kPyh1Lz1RKHQsYSwxMDAsXCIlXCIpLzEwMCxlLnN0cmljdFVuaXRzIT09ITAmJihfPXUrXCIlXCIpKTpcImVtXCI9PT1kP3UvPVEodCxhLDEsXCJlbVwiKTpcInB4XCIhPT1kJiYoZj1RKHQsYSxmLGQpLGQ9XCJweFwiKSxnJiYoZnx8MD09PWYpJiYocD1mK3UrZCkpLGcmJihmKz11KSwhdSYmMCE9PXV8fCFmJiYwIT09Zj92b2lkIDAhPT12W2FdJiYocHx8XCJOYU5cIiE9cCtcIlwiJiZudWxsIT1wKT8oaT1uZXcgX2UodixhLGZ8fHV8fDAsMCxpLC0xLGEsITEsMCxfLHApLGkueHMwPVwibm9uZVwiIT09cHx8XCJkaXNwbGF5XCIhPT1hJiYtMT09PWEuaW5kZXhPZihcIlN0eWxlXCIpP3A6Xyk6VShcImludmFsaWQgXCIrYStcIiB0d2VlbiB2YWx1ZTogXCIrZVthXSk6KGk9bmV3IF9lKHYsYSx1LGYtdSxpLDAsYSxoIT09ITEmJihcInB4XCI9PT1kfHxcInpJbmRleFwiPT09YSksMCxfLHApLGkueHMwPWQpKTppPXBlKHYsYSxfLHAsITAsbnVsbCxpLDAsbikpLG4mJmkmJiFpLnBsdWdpbiYmKGkucGx1Z2luPW4pO3JldHVybiBpfSxsLnNldFJhdGlvPWZ1bmN0aW9uKHQpe3ZhciBlLGkscixzPXRoaXMuX2ZpcnN0UFQsbj0xZS02O2lmKDEhPT10fHx0aGlzLl90d2Vlbi5fdGltZSE9PXRoaXMuX3R3ZWVuLl9kdXJhdGlvbiYmMCE9PXRoaXMuX3R3ZWVuLl90aW1lKWlmKHR8fHRoaXMuX3R3ZWVuLl90aW1lIT09dGhpcy5fdHdlZW4uX2R1cmF0aW9uJiYwIT09dGhpcy5fdHdlZW4uX3RpbWV8fHRoaXMuX3R3ZWVuLl9yYXdQcmV2VGltZT09PS0xZS02KWZvcig7czspe2lmKGU9cy5jKnQrcy5zLHMucj9lPU1hdGgucm91bmQoZSk6bj5lJiZlPi1uJiYoZT0wKSxzLnR5cGUpaWYoMT09PXMudHlwZSlpZihyPXMubCwyPT09cilzLnRbcy5wXT1zLnhzMCtlK3MueHMxK3MueG4xK3MueHMyO2Vsc2UgaWYoMz09PXIpcy50W3MucF09cy54czArZStzLnhzMStzLnhuMStzLnhzMitzLnhuMitzLnhzMztlbHNlIGlmKDQ9PT1yKXMudFtzLnBdPXMueHMwK2Urcy54czErcy54bjErcy54czIrcy54bjIrcy54czMrcy54bjMrcy54czQ7ZWxzZSBpZig1PT09cilzLnRbcy5wXT1zLnhzMCtlK3MueHMxK3MueG4xK3MueHMyK3MueG4yK3MueHMzK3MueG4zK3MueHM0K3MueG40K3MueHM1O2Vsc2V7Zm9yKGk9cy54czArZStzLnhzMSxyPTE7cy5sPnI7cisrKWkrPXNbXCJ4blwiK3JdK3NbXCJ4c1wiKyhyKzEpXTtzLnRbcy5wXT1pfWVsc2UtMT09PXMudHlwZT9zLnRbcy5wXT1zLnhzMDpzLnNldFJhdGlvJiZzLnNldFJhdGlvKHQpO2Vsc2Ugcy50W3MucF09ZStzLnhzMDtzPXMuX25leHR9ZWxzZSBmb3IoO3M7KTIhPT1zLnR5cGU/cy50W3MucF09cy5iOnMuc2V0UmF0aW8odCkscz1zLl9uZXh0O2Vsc2UgZm9yKDtzOykyIT09cy50eXBlP3MudFtzLnBdPXMuZTpzLnNldFJhdGlvKHQpLHM9cy5fbmV4dH0sbC5fZW5hYmxlVHJhbnNmb3Jtcz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2Zvcm1UeXBlPXR8fDM9PT10aGlzLl90cmFuc2Zvcm1UeXBlPzM6Mix0aGlzLl90cmFuc2Zvcm09dGhpcy5fdHJhbnNmb3JtfHxQZSh0aGlzLl90YXJnZXQscywhMCl9O3ZhciBNZT1mdW5jdGlvbigpe3RoaXMudFt0aGlzLnBdPXRoaXMuZSx0aGlzLmRhdGEuX2xpbmtDU1NQKHRoaXMsdGhpcy5fbmV4dCxudWxsLCEwKX07bC5fYWRkTGF6eVNldD1mdW5jdGlvbih0LGUsaSl7dmFyIHI9dGhpcy5fZmlyc3RQVD1uZXcgX2UodCxlLDAsMCx0aGlzLl9maXJzdFBULDIpO3IuZT1pLHIuc2V0UmF0aW89TWUsci5kYXRhPXRoaXN9LGwuX2xpbmtDU1NQPWZ1bmN0aW9uKHQsZSxpLHIpe3JldHVybiB0JiYoZSYmKGUuX3ByZXY9dCksdC5fbmV4dCYmKHQuX25leHQuX3ByZXY9dC5fcHJldiksdC5fcHJldj90Ll9wcmV2Ll9uZXh0PXQuX25leHQ6dGhpcy5fZmlyc3RQVD09PXQmJih0aGlzLl9maXJzdFBUPXQuX25leHQscj0hMCksaT9pLl9uZXh0PXQ6cnx8bnVsbCE9PXRoaXMuX2ZpcnN0UFR8fCh0aGlzLl9maXJzdFBUPXQpLHQuX25leHQ9ZSx0Ll9wcmV2PWkpLHR9LGwuX2tpbGw9ZnVuY3Rpb24oZSl7dmFyIGkscixzLG49ZTtpZihlLmF1dG9BbHBoYXx8ZS5hbHBoYSl7bj17fTtmb3IociBpbiBlKW5bcl09ZVtyXTtuLm9wYWNpdHk9MSxuLmF1dG9BbHBoYSYmKG4udmlzaWJpbGl0eT0xKX1yZXR1cm4gZS5jbGFzc05hbWUmJihpPXRoaXMuX2NsYXNzTmFtZVBUKSYmKHM9aS54Zmlyc3QscyYmcy5fcHJldj90aGlzLl9saW5rQ1NTUChzLl9wcmV2LGkuX25leHQscy5fcHJldi5fcHJldik6cz09PXRoaXMuX2ZpcnN0UFQmJih0aGlzLl9maXJzdFBUPWkuX25leHQpLGkuX25leHQmJnRoaXMuX2xpbmtDU1NQKGkuX25leHQsaS5fbmV4dC5fbmV4dCxzLl9wcmV2KSx0aGlzLl9jbGFzc05hbWVQVD1udWxsKSx0LnByb3RvdHlwZS5fa2lsbC5jYWxsKHRoaXMsbil9O3ZhciBMZT1mdW5jdGlvbih0LGUsaSl7dmFyIHIscyxuLGE7aWYodC5zbGljZSlmb3Iocz10Lmxlbmd0aDstLXM+LTE7KUxlKHRbc10sZSxpKTtlbHNlIGZvcihyPXQuY2hpbGROb2RlcyxzPXIubGVuZ3RoOy0tcz4tMTspbj1yW3NdLGE9bi50eXBlLG4uc3R5bGUmJihlLnB1c2goJChuKSksaSYmaS5wdXNoKG4pKSwxIT09YSYmOSE9PWEmJjExIT09YXx8IW4uY2hpbGROb2Rlcy5sZW5ndGh8fExlKG4sZSxpKX07cmV0dXJuIGEuY2FzY2FkZVRvPWZ1bmN0aW9uKHQsaSxyKXt2YXIgcyxuLGEsbz1lLnRvKHQsaSxyKSxsPVtvXSxoPVtdLHU9W10sZj1bXSxfPWUuX2ludGVybmFscy5yZXNlcnZlZFByb3BzO2Zvcih0PW8uX3RhcmdldHN8fG8udGFyZ2V0LExlKHQsaCxmKSxvLnJlbmRlcihpLCEwKSxMZSh0LHUpLG8ucmVuZGVyKDAsITApLG8uX2VuYWJsZWQoITApLHM9Zi5sZW5ndGg7LS1zPi0xOylpZihuPUcoZltzXSxoW3NdLHVbc10pLG4uZmlyc3RNUFQpe249bi5kaWZzO1xyXG5mb3IoYSBpbiByKV9bYV0mJihuW2FdPXJbYV0pO2wucHVzaChlLnRvKGZbc10saSxuKSl9cmV0dXJuIGx9LHQuYWN0aXZhdGUoW2FdKSxhfSwhMCl9KSx3aW5kb3cuX2dzRGVmaW5lJiZ3aW5kb3cuX2dzUXVldWUucG9wKCkoKTsiLCIvKiFcclxuICogVkVSU0lPTjogMS43LjNcclxuICogREFURTogMjAxNC0wMS0xNFxyXG4gKiBVUERBVEVTIEFORCBET0NTIEFUOiBodHRwOi8vd3d3LmdyZWVuc29jay5jb21cclxuICpcclxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDA4LTIwMTQsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogVGhpcyB3b3JrIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHA6Ly93d3cuZ3JlZW5zb2NrLmNvbS90ZXJtc19vZl91c2UuaHRtbCBvciBmb3JcclxuICogQ2x1YiBHcmVlblNvY2sgbWVtYmVycywgdGhlIHNvZnR3YXJlIGFncmVlbWVudCB0aGF0IHdhcyBpc3N1ZWQgd2l0aCB5b3VyIG1lbWJlcnNoaXAuXHJcbiAqIFxyXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cclxuICoqL1xyXG4od2luZG93Ll9nc1F1ZXVlfHwod2luZG93Ll9nc1F1ZXVlPVtdKSkucHVzaChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlPXdpbmRvdyxpPWZ1bmN0aW9uKGkscyl7dmFyIHI9XCJ4XCI9PT1zP1wiV2lkdGhcIjpcIkhlaWdodFwiLG49XCJzY3JvbGxcIityLGE9XCJjbGllbnRcIityLG89ZG9jdW1lbnQuYm9keTtyZXR1cm4gaT09PWV8fGk9PT10fHxpPT09bz9NYXRoLm1heCh0W25dLG9bbl0pLShlW1wiaW5uZXJcIityXXx8TWF0aC5tYXgodFthXSxvW2FdKSk6aVtuXS1pW1wib2Zmc2V0XCIrcl19LHM9d2luZG93Ll9nc0RlZmluZS5wbHVnaW4oe3Byb3BOYW1lOlwic2Nyb2xsVG9cIixBUEk6Mix2ZXJzaW9uOlwiMS43LjNcIixpbml0OmZ1bmN0aW9uKHQscyxyKXtyZXR1cm4gdGhpcy5fd2R3PXQ9PT1lLHRoaXMuX3RhcmdldD10LHRoaXMuX3R3ZWVuPXIsXCJvYmplY3RcIiE9dHlwZW9mIHMmJihzPXt5OnN9KSx0aGlzLl9hdXRvS2lsbD1zLmF1dG9LaWxsIT09ITEsdGhpcy54PXRoaXMueFByZXY9dGhpcy5nZXRYKCksdGhpcy55PXRoaXMueVByZXY9dGhpcy5nZXRZKCksbnVsbCE9cy54Pyh0aGlzLl9hZGRUd2Vlbih0aGlzLFwieFwiLHRoaXMueCxcIm1heFwiPT09cy54P2kodCxcInhcIik6cy54LFwic2Nyb2xsVG9feFwiLCEwKSx0aGlzLl9vdmVyd3JpdGVQcm9wcy5wdXNoKFwic2Nyb2xsVG9feFwiKSk6dGhpcy5za2lwWD0hMCxudWxsIT1zLnk/KHRoaXMuX2FkZFR3ZWVuKHRoaXMsXCJ5XCIsdGhpcy55LFwibWF4XCI9PT1zLnk/aSh0LFwieVwiKTpzLnksXCJzY3JvbGxUb195XCIsITApLHRoaXMuX292ZXJ3cml0ZVByb3BzLnB1c2goXCJzY3JvbGxUb195XCIpKTp0aGlzLnNraXBZPSEwLCEwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIuc2V0UmF0aW8uY2FsbCh0aGlzLHQpO3ZhciBzPXRoaXMuX3dkd3x8IXRoaXMuc2tpcFg/dGhpcy5nZXRYKCk6dGhpcy54UHJldixyPXRoaXMuX3dkd3x8IXRoaXMuc2tpcFk/dGhpcy5nZXRZKCk6dGhpcy55UHJldixuPXItdGhpcy55UHJldixhPXMtdGhpcy54UHJldjt0aGlzLl9hdXRvS2lsbCYmKCF0aGlzLnNraXBYJiYoYT43fHwtNz5hKSYmaSh0aGlzLl90YXJnZXQsXCJ4XCIpPnMmJih0aGlzLnNraXBYPSEwKSwhdGhpcy5za2lwWSYmKG4+N3x8LTc+bikmJmkodGhpcy5fdGFyZ2V0LFwieVwiKT5yJiYodGhpcy5za2lwWT0hMCksdGhpcy5za2lwWCYmdGhpcy5za2lwWSYmdGhpcy5fdHdlZW4ua2lsbCgpKSx0aGlzLl93ZHc/ZS5zY3JvbGxUbyh0aGlzLnNraXBYP3M6dGhpcy54LHRoaXMuc2tpcFk/cjp0aGlzLnkpOih0aGlzLnNraXBZfHwodGhpcy5fdGFyZ2V0LnNjcm9sbFRvcD10aGlzLnkpLHRoaXMuc2tpcFh8fCh0aGlzLl90YXJnZXQuc2Nyb2xsTGVmdD10aGlzLngpKSx0aGlzLnhQcmV2PXRoaXMueCx0aGlzLnlQcmV2PXRoaXMueX19KSxyPXMucHJvdG90eXBlO3MubWF4PWksci5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dkdz9udWxsIT1lLnBhZ2VYT2Zmc2V0P2UucGFnZVhPZmZzZXQ6bnVsbCE9dC5zY3JvbGxMZWZ0P3Quc2Nyb2xsTGVmdDpkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ6dGhpcy5fdGFyZ2V0LnNjcm9sbExlZnR9LHIuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93ZHc/bnVsbCE9ZS5wYWdlWU9mZnNldD9lLnBhZ2VZT2Zmc2V0Om51bGwhPXQuc2Nyb2xsVG9wP3Quc2Nyb2xsVG9wOmRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOnRoaXMuX3RhcmdldC5zY3JvbGxUb3B9LHIuX2tpbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsVG9feCYmKHRoaXMuc2tpcFg9ITApLHQuc2Nyb2xsVG9feSYmKHRoaXMuc2tpcFk9ITApLHRoaXMuX3N1cGVyLl9raWxsLmNhbGwodGhpcyx0KX19KSx3aW5kb3cuX2dzRGVmaW5lJiZ3aW5kb3cuX2dzUXVldWUucG9wKCkoKTsiXX0= diff --git a/web/app/plugins/wp-rocket/assets/js/wpr-admin.min.js b/web/app/plugins/wp-rocket/assets/js/wpr-admin.min.js index bbb1f4f0e..855e668ca 100644 --- a/web/app/plugins/wp-rocket/assets/js/wpr-admin.min.js +++ b/web/app/plugins/wp-rocket/assets/js/wpr-admin.min.js @@ -1,2 +1,2 @@ -!function n(r,s,a){function o(e,t){if(!s[e]){if(!r[e]){var i="function"==typeof require&&require;if(!t&&i)return i(e,!0);if(l)return l(e,!0);throw(t=new Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND",t}i=s[e]={exports:{}},r[e][0].call(i.exports,function(t){return o(r[e][1][t]||t)},i,i.exports,n,r,s,a)}return s[e].exports}for(var l="function"==typeof require&&require,t=0;t{let e=i.querySelector(".select-button"),n=i.querySelector(".selected-value");e.addEventListener("click",()=>{i.classList.toggle("active"),e.setAttribute("aria-expanded","true"===e.getAttribute("aria-expanded")?"false":"true")}),i.addEventListener("click",function(t){var e;t.target.matches("label")&&(i.querySelectorAll("li").forEach(t=>t.classList.remove("active")),t=t.target.closest("li"))&&(t.classList.add("active"),t=t,e=new CustomEvent("custom-select-change",{detail:{selectedOption:t}}),n.textContent=t.textContent,i.classList.remove("active"),i.dispatchEvent(e))}),document.addEventListener("click",t=>{i.contains(t.target)||(i.classList.remove("active"),e.setAttribute("aria-expanded","false"))})})},{}],2:[function(t,e,i){var v=jQuery;v(document).ready(function(){var r=!1;v("#wpr-action-refresh_account").on("click",function(t){var e,i,n;return r||(e=v(this),i=v("#wpr-account-data"),n=v("#wpr-expiration-data"),t.preventDefault(),r=!0,e.trigger("blur"),n.removeClass("wpr-isValid wpr-isInvalid"),v.post(ajaxurl,{action:"rocket_refresh_customer_data",_ajax_nonce:rocket_ajax_data.nonce},function(t){e.removeClass("wpr-isLoading"),e.addClass("wpr-isHidden"),!0===t.success?(i.html(t.data.license_type),n.addClass(t.data.license_class).html(t.data.license_expiration),setTimeout(function(){e.removeClass("wpr-icon-refresh wpr-isHidden"),e.addClass("wpr-icon-check")},250)):setTimeout(function(){e.removeClass("wpr-icon-refresh wpr-isHidden"),e.addClass("wpr-icon-close")},250),setTimeout(function(){new TimelineLite({onComplete:function(){r=!1}}).set(e,{css:{className:"+=wpr-isHidden"}}).set(e,{css:{className:"-=wpr-icon-check"}},.25).set(e,{css:{className:"-=wpr-icon-close"}}).set(e,{css:{className:"+=wpr-icon-refresh"}},.25).set(e,{css:{className:"-=wpr-isHidden"}})},2e3)})),!1}),v(".wpr-radio input[type=checkbox]").on("change",function(t){t.preventDefault();var t=v(this).attr("id"),e=v(this).prop("checked")?1:0;0<=["cloudflare_auto_settings","cloudflare_devmode","analytics_enabled"].indexOf(t)||v.post(ajaxurl,{action:"rocket_toggle_option",_ajax_nonce:rocket_ajax_data.nonce,option:{name:t,value:e}},function(t){})}),v("#wpr-action-rocket_enable_mobile_cpcss").on("click",function(t){t.preventDefault(),v("#wpr-action-rocket_enable_mobile_cpcss").addClass("wpr-isLoading"),v.post(ajaxurl,{action:"rocket_enable_mobile_cpcss",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v("#wpr-action-rocket_enable_mobile_cpcss").hide(),v(".wpr-hide-on-click").hide(),v(".wpr-show-on-click").show(),v("#wpr-action-rocket_enable_mobile_cpcss").removeClass("wpr-isLoading"))})}),v("#wpr-action-rocket_enable_google_fonts").on("click",function(t){t.preventDefault(),v("#wpr-action-rocket_enable_google_fonts").addClass("wpr-isLoading"),v.post(ajaxurl,{action:"rocket_enable_google_fonts",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v("#wpr-action-rocket_enable_google_fonts").hide(),v(".wpr-hide-on-click").hide(),v(".wpr-show-on-click").show(),v("#wpr-action-rocket_enable_google_fonts").removeClass("wpr-isLoading"),v("#minify_google_fonts").val(1))})}),v("#rocket-dismiss-promotion").on("click",function(t){t.preventDefault(),v.post(ajaxurl,{action:"rocket_dismiss_promo",nonce:rocket_ajax_data.nonce},function(t){t.success&&v("#rocket-promo-banner").hide("slow")})}),v("#rocket-dismiss-renewal").on("click",function(t){t.preventDefault(),v.post(ajaxurl,{action:"rocket_dismiss_renewal",nonce:rocket_ajax_data.nonce},function(t){t.success&&v("#rocket-renewal-banner").hide("slow")})}),v("#wpr-update-exclusion-list").on("click",function(t){t.preventDefault(),v("#wpr-update-exclusion-msg").html(""),v.ajax({url:rocket_ajax_data.rest_url,beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",rocket_ajax_data.rest_nonce),t.setRequestHeader("Accept","application/json, */*;q=0.1"),t.setRequestHeader("Content-Type","application/json")},method:"PUT",success:function(e){let i=v("#wpr-update-exclusion-msg");i.html(""),void 0!==e.success?i.append('
'+e.message+"
"):Object.keys(e).forEach(t=>{i.append(""+t+": "),i.append(e[t].message),i.append("
")})}})}),v("#wpr_enable_mobile_cache").on("click",function(t){t.preventDefault(),v("#wpr_enable_mobile_cache").addClass("wpr-isLoading"),v.post(ajaxurl,{action:"rocket_enable_mobile_cache",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v("#wpr_enable_mobile_cache").hide(),v("#wpr_mobile_cache_default").hide(),v("#wpr_mobile_cache_response").show(),v("#wpr_enable_mobile_cache").removeClass("wpr-isLoading"),v("#cache_mobile").val(1),v("#do_caching_mobile_files").val(1))})})}),document.addEventListener("DOMContentLoaded",function(){var t=document.getElementById("analytics_enabled");t&&t.addEventListener("change",function(){var t=this.checked;"undefined"!=typeof rocket_mixpanel_data&&(rocket_mixpanel_data.optin_enabled=t?"1":"0"),fetch(ajaxurl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({action:"rocket_toggle_optin",value:t?1:0,_ajax_nonce:rocket_ajax_data.nonce})})})}),document.addEventListener("DOMContentLoaded",function(){let t=2e3,e=5e3,i=Array.isArray(window.rocket_ajax_data?.rocket_insights_ids)?window.rocket_ajax_data.rocket_insights_ids.slice():[],n=t,r=null,s=!0,a={data:{status:"",score:0,pages_num:0},html:"",row_html:"",disabled_btn_html:{global_score_widget:"",rocket_insights:""}},o=(window.rocket_ajax_data?.global_score_data&&(a=window.rocket_ajax_data.global_score_data),v("#wpr-speed-radar-url-input")),l=v(".wpr-ri-urls-table tbody"),c=v(".wpr-ri-urls-table");function p(t){i.includes(t)||i.push(t)}function d(t){var e=v(".wpr-ri-summary-info"),i="1"===window.rocket_ajax_data?.is_free,i=v(i?"#wpr-ri-quota-banner":"#rocket_insights_survey");!1===t||!s?(e.hide(),i.removeClass("hidden")):(e.show(),i.addClass("hidden"))}function h(t){void 0!==t&&s!==t&&(s=t,document.querySelectorAll(".wpr-action-speed_radar_refresh").forEach(t=>{var e=t.closest(".wpr-ri-item");e&&(e=parseInt(e.dataset.rocketInsightsId,10),e=i.includes(e),!s||e?(t.classList.add("wpr-ri-action--disabled"),t.setAttribute("disabled","true"),s||(t.classList.add("wpr-btn-with-tool-tip"),t.setAttribute("title",window.rocket_ajax_data?.rocket_insights_no_credit_tooltip||"Upgrade your plan to get access to re-test performance or run new tests"))):(t.classList.remove("wpr-ri-action--disabled","wpr-btn-with-tool-tip"),t.removeAttribute("disabled"),t.removeAttribute("title")))}))}function u(){r&&(clearTimeout(r),r=null),n=t}function _(){0{0===i.length?u():window.wp.apiFetch({path:window.wp.url.addQueryArgs("/wp-rocket/v1/rocket-insights/pages/progress",{ids:i})}).then(t=>{t.success&&Array.isArray(t.results)?(h(t.has_credit),d(t.can_add_pages),a.data.status===t.global_score_data.data.status&&a.data.pages_num===t.global_score_data.data.pages_num||(a=t.global_score_data,v(".wpr-global-score-widget").html(t.global_score_data.html),f(a),document.dispatchEvent(new CustomEvent("wprGlobalScoreUpdated",{detail:a.data}))),t.results.forEach(t=>{if(v(`.wpr-ri-item[data-rocket-insights-id="${t.id}"]`).replaceWith(t.html),v(document).trigger("rocket-insights-page-test-polling",[t.id]),"completed"===t.status&&v(document).trigger("rocket-insights-page-test-completed",[t.id]),"completed"===t.status||"failed"===t.status){t=t.id;let e=parseInt(t,10);i=i.filter(t=>parseInt(t,10)!==e)}}),n=Math.min(1.3*n,e),_()):(i=[],u(),console.error("Polling error:",t.results||t))})},n))}function f(t){var e=v(".wpr-ri-urls-table .wpr-global-score");0{try{var e=new URL(t);return e.hostname.includes(".")&&0{var e;t.success?(e=t.id,i.includes(e)||(o.val(""),l.append(t.html),v(document).trigger("rocket-insights-page-added"),c.removeClass("hidden"),p(t.id),(e=v("#rocket_rocket_insights_pages_num")).text(parseInt(e.text())+1),h(t.has_credit),f(a=t.global_score_data),"disabled_btn_html"in a&&v("#wpr_rocket_insights_add_page_btn_wrapper").html(a.disabled_btn_html.rocket_insights),d(t.can_add_pages),r&&u(),_())):(o.val(""),t?.message&&t.message.includes("Maximum number of URLs reached")&&(disableAddUrlElements(),d(void 0!==t.can_add_pages&&t.can_add_pages)),console.error(t?.message||t))})):alert("Please enter a valid URL"))}),v(document).on("click",".wpr-action-speed_radar_refresh",function(t){t.preventDefault();var e=(t=v(this)).parents(".wpr-ri-item").data("rocket-insights-id");e&&(t=t.data("source"),window.wp.apiFetch({path:"/wp-rocket/v1/rocket-insights/pages/"+e,method:"PATCH",data:{source:t}}).then(t=>{t.success?(p(t.id),v(`#ri_details_${t.id} .details-section-td`).remove(),v(`[data-rocket-insights-id="${t.id}"]`).replaceWith(t.html),v(document).trigger("rocket-insights-page-retest",[t.id]),h(t.has_credit),d(t.can_add_pages),f(a=t.global_score_data),r&&u(),_()):console.error(t?.message||t)}))}),v(document).on("keypress","#wpr-speed-radar-url-input",function(t){"Enter"===t.key&&(t.preventDefault(),v("#wpr-action-add_page_speed_radar").click())}),"wprocket"===new URLSearchParams(window.location.search).get("page")&&0{f(a)},30)}),v(document).on("click",".wpr-ri-item-toggle-single",function(){var t,e,i,n,r=v(this).closest(".wpr-ri-item").data("rocket-insights-id");t="url_expand",e=v("#ri_details_"+(r=r)),i=e.hasClass("wpr-ri-details--expanded"),n=v(`[data-rocket-insights-id="${r}"] .wpr-ri-item-toggle-single`).is(v(".wpr-ri-item-toggle-single").last()),i?(e.removeClass("wpr-ri-details--expanded"),v(`[data-rocket-insights-id="${r}"]`).removeClass("wpr-ri-item--expanded"),n&&w(!1)):(e.addClass("wpr-ri-details--expanded"),v(`[data-rocket-insights-id="${r}"]`).addClass("wpr-ri-item--expanded"),g("expand",r,t),n&&w())}),v(document).on("click",".wpr-ri-item-toggle-all",function(){0{var t,e,i;"wprocket"===new URLSearchParams(window.location.search).get("page")&&"#rocket_insights"===window.location.hash&&(m(!0),i=(t=new URLSearchParams(window.location.search)).get("ri_id"),e=v(".wpr-ri-item--expanded")?.first()?.data("rocket-insights-id"),i&&""!==i?(g("expand",i,"post type listing"),v("html, body").animate({scrollTop:v(`[data-rocket-insights-id="${i}"]`).offset().top-100},500),t.delete("ri_id"),i=window.location.pathname+"?"+t.toString()+window.location.hash,window.history.replaceState({},"",i)):e&&g("expand",e,"auto_expand_url"))})})},{}],3:[function(t,e,i){t("../lib/greensock/TweenLite.min.js"),t("../lib/greensock/TimelineLite.min.js"),t("../lib/greensock/easing/EasePack.min.js"),t("../lib/greensock/plugins/CSSPlugin.min.js"),t("../lib/greensock/plugins/ScrollToPlugin.min.js"),t("../global/pageManager.js"),t("../global/main.js"),t("../global/fields.js"),t("../global/beacon.js"),t("../global/ajax.js"),t("../global/recommendations-widget.js"),t("../global/rocketcdn.js"),t("../global/countdown.js"),t("../global/mixpanel.js")},{"../global/ajax.js":2,"../global/beacon.js":4,"../global/countdown.js":5,"../global/fields.js":6,"../global/main.js":7,"../global/mixpanel.js":8,"../global/pageManager.js":9,"../global/recommendations-widget.js":10,"../global/rocketcdn.js":11,"../lib/greensock/TimelineLite.min.js":12,"../lib/greensock/TweenLite.min.js":13,"../lib/greensock/easing/EasePack.min.js":14,"../lib/greensock/plugins/CSSPlugin.min.js":15,"../lib/greensock/plugins/ScrollToPlugin.min.js":16}],4:[function(t,e,i){var n=jQuery;n(document).ready(function(){function i(t,e){"undefined"!=typeof mixpanel&&mixpanel.track&&"undefined"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&"0"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&"function"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track("Button Clicked",{button:t,button_context:e,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,context:rocket_mixpanel_data.context,path:rocket_mixpanel_data.path}))}"Beacon"in window&&n(".wpr-infoAction--help").on("click",function(t){var e=n(this).data("beacon-id");return i(n(this).data("wpr_track_button")||"Beacon Help",n(this).data("wpr_track_context")||"Settings"),0!==(e=(e=e).split(",")).length&&(1{l(t).attr("checked",i?null:"checked")}):(e=l(e).closest(".wpr-list").find(".wpr-main-checkbox"),n=l.map(r,t=>{if(void 0!==l(t).attr("checked"))return t}),e.attr("checked",n.length===r.length?"checked":null))}),0{var i=l(e).parents(".wpr-list").find(".wpr-list-body input[type=checkbox]:not(:checked)").length;l(e).attr("checked",i<=0?"checked":null)});let a={checked:{},total:{}};l(".wpr-field--categorizedmultiselect .wpr-list").each(function(){var t=l(this).attr("id");t&&(a.checked[t]=l(`#${t} input[type='checkbox']:checked`).length,a.total[t]=l(`#${t} input[type='checkbox']:not(.wpr-main-checkbox)`).length,l(`#${t} .wpr-badge-counter span`).text(a.checked[t]),l(`#${t} .wpr-badge-counter`).toggle(0"symbol"==typeof(t=((t,e)=>{if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0===i)return("string"===e?String:Number)(t);if("object"!=typeof(i=i.call(t,e||"default")))return i;throw new TypeError("@@toPrimitive must return a primitive value.")})(t,"string"))?t:t+"")(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i}(class r{constructor(t){n(this,"trackedTabs",["dashboard","rocket_insights"]),this.config=t}init(){"undefined"!=typeof mixpanel&&mixpanel.track&&this.config.optin_enabled&&"0"!==this.config.optin_enabled&&(mixpanel.identify(this.config.user_id),this._initListeners(this))}_initListeners(t){window.addEventListener("hashchange",t._onHashChange.bind(t)),window.addEventListener("load",t._onPageLoad.bind(t))}_onHashChange(t){var e=this._cleanHash(new URL(t.oldURL).hash),t=this._cleanHash(new URL(t.newURL).hash);this._canTrackTab(t)&&this._sendPageViewedEvent(this._getSource(e),t)}_onPageLoad(){var t=this._cleanHash(window.location.hash);this._canTrackTab(t)&&this._sendPageViewedEvent(this._getSource(),t)}_cleanHash(t){return t&&t.startsWith("#")?t.substring(1):t}_canTrackTab(t){return this.trackedTabs.includes(t)}_getSource(t=""){return t?"settings_"+t:this._getSourceFromQueryStringAndRemoveIt()||this._getSourceFromReferrer()}_getSourceFromQueryStringAndRemoveIt(){var t,e=new URL(window.location.href),i=e.searchParams;return i.has("rocket_source")?(t=i.get("rocket_source"),i.delete("rocket_source"),window.history.replaceState(null,"",e.search?e.href:e.pathname),t):""}_getSourceFromReferrer(){var t=document.referrer;return t?t.includes(window.location.hostname)?"internal":"external":"noreferrer"}_sendPageViewedEvent(t,e){mixpanel.track("Page Viewed",{path:"/wp-admin/options-general.php?page=wprocket#"+e,page_name:e.replace("_"," "),source:t,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,context:rocket_mixpanel_data.context})}static run(){"undefined"!=typeof rocket_mixpanel_data&&new r(rocket_mixpanel_data).init()}}).run()},{}],9:[function(t,e,i){function n(t){var e,i=this;this.$body=document.querySelector(".wpr-body"),this.$menuItems=document.querySelectorAll(".wpr-menuItem"),this.$submitButton=document.querySelector(".wpr-Content > form > #wpr-options-submit"),this.$pages=document.querySelectorAll(".wpr-Page"),this.$sidebar=document.querySelector(".wpr-Sidebar"),this.$content=document.querySelector(".wpr-Content"),this.$tips=document.querySelector(".wpr-Content-tips"),this.$links=document.querySelectorAll(".wpr-body a"),this.$menuItem=null,this.$page=null,this.pageId=null,this.bodyTop=0,this.buttonText=this.$submitButton.value,i.getBodyTop(),window.onhashchange=function(){i.detectID()},window.location.hash?(this.bodyTop=0,this.detectID()):(e=localStorage.getItem("wpr-hash"),this.bodyTop=0,e?(window.location.hash=e,this.detectID()):(this.$menuItems[0].classList.add("isActive"),localStorage.setItem("wpr-hash","dashboard"),window.location.hash="#dashboard"));for(var n=0;n{window.wp&&window.wp.apiFetch?window.wp.apiFetch({path:"/wp-rocket/v1/recommendations"}).then(function(t){e(t)}).catch(function(t){console.error("Failed to fetch recommendations status:",t)}):fetch(window.wpApiSettings?.root+"wp-rocket/v1/recommendations",{headers:{"X-WP-Nonce":window.wpApiSettings?.nonce||""}}).then(function(t){if(t.ok)return t.json();throw new Error("Network response was not ok")}).then(function(t){e(t)}).catch(function(t){console.error("Failed to fetch recommendations status:",t)})})})},{}],11:[function(t,e,i){{var c=document,p=window;function d(){return"#page_cdn"===p.location.hash}c.addEventListener("DOMContentLoaded",()=>{if(c.querySelectorAll(".wpr-rocketcdn-open").forEach(e=>{e.addEventListener("click",t=>{t.preventDefault(),e.classList.contains("wpr-rocketcdn-pricing--cta")&&n("RocketCDN Upsell CTA Clicked"),p.rocketcdnButtonUrl&&""!==p.rocketcdnButtonUrl?setTimeout(function(){p.location.href=p.rocketcdnButtonUrl},100):MicroModal.show("wpr-rocketcdn-modal")})}),MicroModal.init({disableScroll:!0}),!p.rocketcdnButtonUrl||""===p.rocketcdnButtonUrl){{let t="",e=u(t=(t+="action=rocketcdn_process_status")+"&nonce="+rocket_ajax_data.nonce);e.onreadystatechange=()=>{e.readyState===XMLHttpRequest.DONE&&200===e.status&&!0===JSON.parse(e.responseText).success&&MicroModal.show("wpr-rocketcdn-modal")}}(e=new URLSearchParams(p.location.search)).has("rocketcdn_open_iframe")&&"1"===e.get("rocketcdn_open_iframe")&&(p.location.hash="#page_cdn",MicroModal.show("wpr-rocketcdn-modal"),e.delete("rocketcdn_open_iframe"),e=e.toString(),e=p.location.pathname+(e?"?"+e:"")+p.location.hash,p.history.replaceState({},"",e));e=c.getElementById("rocketcdn-iframe");let t=c.getElementById("wpr-rocketcdn-modal-loader");e&&t&&e.addEventListener("load",function(){t.style.display="none"})}var e});let l=!1;function h(){var t,e;!l&&d()&&(t=c.querySelector("#wpr-rocketcdn-cta-small"),(e=c.querySelector("#wpr-rocketcdn-cta"))&&!e.classList.contains("wpr-isHidden")||t&&!t.classList.contains("wpr-isHidden"))&&(_(),l=!0)}function u(t){var e=new XMLHttpRequest;return e.open("POST",ajaxurl),e.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),e.send(t),e}function n(t,e){if("undefined"!=typeof mixpanel&&mixpanel.track&&"undefined"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&"0"!==rocket_mixpanel_data.optin_enabled&&rocket_mixpanel_data.user_id&&"function"==typeof mixpanel.identify){mixpanel.identify(rocket_mixpanel_data.user_id);var i={context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,path:rocket_mixpanel_data.path};if(e&&"object"==typeof e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(i[n]=e[n]);mixpanel.track(t,i)}}function _(){n("RocketCDN Upsell Banner Viewed")}p.addEventListener("load",()=>{let t=c.querySelector("#wpr-rocketcdn-open-cta"),e=c.querySelector("#wpr-rocketcdn-close-cta"),i=c.querySelector("#wpr-rocketcdn-cta-small"),n=c.querySelector("#wpr-rocketcdn-cta"),r=c.querySelector(".wpr-rocketcdn-toggle--input"),s=(h(),p.addEventListener("hashchange",()=>{h()}),{monthly:{regular:c.querySelectorAll(".wpr-rocketcdn-pricing-regular-price--monthly"),current:c.querySelectorAll(".wpr-rocketcdn-pricing--monthly"),period:c.querySelectorAll(".wpr-rocketcdn-pricing--billing-period--monthly")},yearly:{regular:c.querySelectorAll(".wpr-rocketcdn-pricing-regular-price--yearly"),current:c.querySelectorAll(".wpr-rocketcdn-pricing--annual"),period:c.querySelectorAll(".wpr-rocketcdn-pricing--billing-period--yearly")}});function a(t){var e="";return e+"action=toggle_rocketcdn_cta"+("&status="+t)+("&nonce="+rocket_ajax_data.nonce)}null!==t&&null!==i&&null!==n&&t.addEventListener("click",t=>{t.preventDefault(),i.classList.add("wpr-isHidden"),n.classList.remove("wpr-isHidden"),d()&&!l&&(_(),l=!0),u(a("big"))}),null!==e&&null!==i&&null!==n&&e.addEventListener("click",t=>{t.preventDefault(),i.classList.remove("wpr-isHidden"),n.classList.add("wpr-isHidden"),u(a("small"))}),r.addEventListener("change",function(){var t=this.checked;t?(Object.values(s.monthly).forEach(t=>t.forEach(t=>t.classList.add("wpr-isHidden"))),Object.values(s.yearly).forEach(t=>t.forEach(t=>t.classList.remove("wpr-isHidden")))):(Object.values(s.monthly).forEach(t=>t.forEach(t=>t.classList.remove("wpr-isHidden"))),Object.values(s.yearly).forEach(t=>t.forEach(t=>t.classList.add("wpr-isHidden")))),t=t,p.rocketcdnButtonUrl&&""!==p.rocketcdnButtonUrl&&(p.rocketcdnButtonUrl=((t,e)=>{let i=t.replace(/([?&])is_monthly=[^&]*/g,""),n=i.includes("?")?"&":"?";return i+=n+"is_monthly="+(e?"0":"1")})(p.rocketcdnButtonUrl,t))});var o=c.querySelector("#wpr-rocketcdn-activation-cta");o&&o.addEventListener("click",()=>{"undefined"!=typeof mixpanel&&mixpanel.track&&"undefined"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&"0"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&"function"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track("RocketCDN Activation Failed CTA Clicked",{context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app}))})}),p.onmessage=t=>{var e=rocket_ajax_data.origin_url;if(t.origin===e){(n=t.data).hasOwnProperty("cdnFrameHeight")&&(c.getElementById("rocketcdn-iframe").style.height=n.cdnFrameHeight+"px"),(n=t.data).hasOwnProperty("cdnFrameClose")&&(MicroModal.close("wpr-rocketcdn-modal"),c.body.style.overflow="",n.hasOwnProperty("cdn_page_message"))&&-1!==["iframe-payment-success","iframe-unsubscribe-success"].indexOf(n.cdn_page_message)&&c.location.reload();{var n=t.data;var r=e;let i=c.querySelector("#rocketcdn-iframe").contentWindow;if(n.hasOwnProperty("rocketcdn_token")){var s="";let e=u(s+"action=save_rocketcdn_token"+("&value="+n.rocketcdn_token)+("&nonce="+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},r))}}else{s={process:"subscribe",message:"token_not_received"};i.postMessage({success:!1,data:s,rocketcdn:!0},r)}}(n=t.data).hasOwnProperty("rocketcdn_process")&&u(""+"action=rocketcdn_process_set"+("&status="+n.rocketcdn_process)+("&nonce="+rocket_ajax_data.nonce));{var n=t.data;var a=e;let i=c.querySelector("#rocketcdn-iframe").contentWindow;if(n.hasOwnProperty("rocketcdn_url")){var o="";let e=u(o+"action=rocketcdn_enable"+("&cdn_url="+n.rocketcdn_url)+("&nonce="+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},a))}}}{o=t.data;var l=e;let i=c.querySelector("#rocketcdn-iframe").contentWindow;if(o.hasOwnProperty("rocketcdn_disable")){o="";let e=u((o+="action=rocketcdn_disable")+("&nonce="+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},l))}}}(n=t.data).hasOwnProperty("rocketcdn_validate_token")&&n.hasOwnProperty("rocketcdn_validate_cname")&&u(""+"action=rocketcdn_validate_token_cname"+("&cdn_url="+n.rocketcdn_validate_cname)+("&cdn_token="+n.rocketcdn_validate_token)+("&nonce="+rocket_ajax_data.nonce))}}}},{}],12:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(p,d,h){function u(t){d.call(this,t),this._labels={},this.autoRemoveChildren=!0===this.vars.autoRemoveChildren,this.smoothChildTiming=!0===this.vars.smoothChildTiming,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var e,i,n=this.vars;for(i in n)e=n[i],g(e)&&-1!==e.join("").indexOf("{self}")&&(n[i]=this._swapSelfInParams(e));g(n.tweens)&&this.add(n.tweens,0,n.align,n.stagger)}function _(t){var e,i={};for(e in t)i[e]=t[e];return i}function r(t,e,i,n){t._timeline.pause(t._startTime),e&&e.apply(n||t._timeline,i||w)}var f=1e-10,m=h._internals.isSelector,g=h._internals.isArray,w=[],a=window._gsDefine.globals,v=w.slice,t=u.prototype=new d;return u.version="1.12.1",t.constructor=u,t.kill()._gc=!1,t.to=function(t,e,i,n){var r=i.repeat&&a.TweenMax||h;return e?this.add(new r(t,e,i),n):this.set(t,i,n)},t.from=function(t,e,i,n){return this.add((i.repeat&&a.TweenMax||h).from(t,e,i),n)},t.fromTo=function(t,e,i,n,r){var s=n.repeat&&a.TweenMax||h;return e?this.add(s.fromTo(t,e,i,n),r):this.set(t,n,r)},t.staggerTo=function(t,e,i,n,r,s,a,o){var l,c=new u({onComplete:s,onCompleteParams:a,onCompleteScope:o,smoothChildTiming:this.smoothChildTiming});for("string"==typeof t&&(t=h.selector(t)||t),m(t)&&(t=v.call(t,0)),n=n||0,l=0;t.length>l;l++)i.startAt&&(i.startAt=_(i.startAt)),c.to(t[l],e,_(i),l*n);return this.add(c,r)},t.staggerFrom=function(t,e,i,n,r,s,a,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,n,r,s,a,o)},t.staggerFromTo=function(t,e,i,n,r,s,a,o,l){return n.startAt=i,n.immediateRender=0!=n.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,n,r,s,a,o,l)},t.call=function(t,e,i,n){return this.add(h.delayedCall(0,t,e,i),n)},t.set=function(t,e,i){return i=this._parseTimeOrLabel(i,0,!0),null==e.immediateRender&&(e.immediateRender=i===this._time&&!this._paused),this.add(new h(t,0,e),i)},u.exportRoot=function(t,e){null==(t=t||{}).smoothChildTiming&&(t.smoothChildTiming=!0);var i,n,r=new u(t),t=r._timeline;for(null==e&&(e=!0),t._remove(r,!0),r._startTime=0,r._rawPrevTime=r._time=r._totalTime=t._time,i=t._first;i;)n=i._next,e&&i instanceof h&&i.target===i.vars.onComplete||r.add(i,i._startTime-i._delay),i=n;return t.add(r,0),r},t.add=function(t,e,i,n){var r,s,a,o,l,c;if("number"!=typeof e&&(e=this._parseTimeOrLabel(e,0,!0,t)),!(t instanceof p)){if(t instanceof Array||t&&t.push&&g(t)){for(i=i||"normal",n=n||0,r=e,s=t.length,a=0;at._startTime;l._timeline;)c&&l._timeline.smoothChildTiming?l.totalTime(l._totalTime,!0):l._gc&&l._enabled(!0,!1),l=l._timeline;return this},t.remove=function(t){if(t instanceof p)return this._remove(t,!1);if(t instanceof Array||t&&t.push&&g(t)){for(var e=t.length;-1<--e;)this.remove(t[e]);return this}return"string"==typeof t?this.removeLabel(t):this.kill(null,t)},t._remove=function(t,e){d.prototype._remove.call(this,t,e);t=this._last;return t?this._time>t._startTime+t._totalDuration/t._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},t.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},t.insert=t.insertMultiple=function(t,e,i,n){return this.add(t,e||0,i,n)},t.appendMultiple=function(t,e,i,n){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,n)},t.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},t.addPause=function(t,e,i,n){return this.call(r,["{self}",e,i,n],this,t)},t.removeLabel=function(t){return delete this._labels[t],this},t.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},t._parseTimeOrLabel=function(t,e,i,n){var r;if(n instanceof p&&n.timeline===this)this.remove(n);else if(n&&(n instanceof Array||n.push&&g(n)))for(r=n.length;-1<--r;)n[r]instanceof p&&n[r].timeline===this&&this.remove(n[r]);if("string"==typeof e)return this._parseTimeOrLabel(e,i&&"number"==typeof t&&null==this._labels[e]?t-this.duration():0,i);if(e=e||0,"string"!=typeof t||!isNaN(t)&&null==this._labels[t])null==t&&(t=this.duration());else{if(-1===(r=t.indexOf("=")))return null==this._labels[t]?i?this._labels[t]=this.duration()+e:e:this._labels[t]+e;e=parseInt(t.charAt(r-1)+"1",10)*Number(t.substr(r+1)),t=1f)&&(a="onReverseComplete")),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:f,t=l+1e-4):t<1e-7?(((this._totalTime=this._time=0)!==c||0===this._duration&&this._rawPrevTime!==f&&(0=c)for(n=this._first;n&&(s=n._next,!this._paused||h);)(n._active||n._startTime<=this._time&&!n._paused&&!n._gc)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=s;else for(n=this._last;n&&(s=n._prev,!this._paused||h);)(n._active||c>=n._startTime&&!n._paused&&!n._gc)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=s;this._onUpdate&&!e&&this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||w),!a||this._gc||p!==this._startTime&&d===this._timeScale||!(0===this._time||l>=this.totalDuration())||(r&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),e)||!this.vars[a]||this.vars[a].apply(this.vars[a+"Scope"]||this,this.vars[a+"Params"]||w)}},t._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof u&&t._hasPausedChild())return!0;t=t._next}return!1},t.getChildren=function(t,e,i,n){n=n||-9999999999;for(var r=[],s=this._first,a=0;s;)n>s._startTime||(s instanceof h?!1!==e&&(r[a++]=s):(!1!==i&&(r[a++]=s),!1!==t&&(a=(r=r.concat(s.getChildren(!0,e,i))).length))),s=s._next;return r},t.getTweensOf=function(t,e){var i,n,r=this._gc,s=[],a=0;for(r&&this._enabled(!0,!0),n=(i=h.getTweensOf(t)).length;-1<--n;)(i[n].timeline===this||e&&this._contains(i[n]))&&(s[a++]=i[n]);return r&&this._enabled(!1,!0),s},t._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},t.shiftChildren=function(t,e,i){i=i||0;for(var n,r=this._first,s=this._labels;r;)r._startTime>=i&&(r._startTime+=t),r=r._next;if(e)for(n in s)s[n]>=i&&(s[n]+=t);return this._uncache(!0)},t._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),n=i.length,r=!1;-1<--n;)i[n]._kill(t,e)&&(r=!0);return r},t.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;-1<--i;)e[i]._enabled(!1,!1);return!1!==t&&(this._labels={}),this._uncache(!0)},t.invalidate=function(){for(var t=this._first;t;)t.invalidate(),t=t._next;return this},t._enabled=function(t,e){if(t===this._gc)for(var i=this._first;i;)i._enabled(t,!0),i=i._next;return d.prototype._enabled.call(this,t,e)},t.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},t.totalDuration=function(t){if(arguments.length)return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this;if(this._dirty){for(var e,i,n=0,r=this._last,s=999999999999;r;)e=r._prev,r._dirty&&r.totalDuration(),r._startTime>s&&this._sortChildren&&!r._paused?this.add(r,r._startTime-r._delay):s=r._startTime,r._startTime<0&&!r._paused&&(n-=r._startTime,this._timeline.smoothChildTiming&&(this._startTime+=r._startTime/this._timeScale),this.shiftChildren(-r._startTime,!1,-9999999999),s=0),n<(i=r._startTime+r._totalDuration/r._timeScale)&&(n=i),r=e;this._duration=this._totalDuration=n,this._dirty=!1}return this._totalDuration},t.usesFrames=function(){for(var t=this._timeline;t._timeline;)t=t._timeline;return t===p._rootFramesTimeline},t.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},u},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],13:[function(E,h,X){var e,F,_=window,u=_.GreenSockGlobals||_;if(!u.TweenLite){var f,B=function(t){for(var e=t.split("."),i=u,n=0;e.length>n;n++)i[e[n]]=i=i[e[n]]||{};return i},d=B("com.greensock"),m=1e-10,N=[].slice,z=function(){},g=(e=Object.prototype.toString,F=e.call([]),function(t){return null!=t&&(t instanceof Array||"object"==typeof t&&!!t.push&&e.call(t)===F)}),w={},q=function(o,l,c,p){this.sc=w[o]?w[o].sc:[],(w[o]=this).gsClass=null,this.func=c;var d=[];this.check=function(t){for(var e,i,n,r,s=l.length,a=s;-1<--s;)(e=w[l[s]]||new q(l[s],[])).gsClass?(d[s]=e.gsClass,a--):t&&e.sc.push(this);if(0===a&&c)for(n=(i=("com.greensock."+o).split(".")).pop(),r=B(i.join("."))[n]=this.gsClass=c.apply(c,d),p&&(u[n]=r,"function"==typeof define&&define.amd?define((_.GreenSockAMDPath?_.GreenSockAMDPath+"/":"")+o.split(".").join("/"),[],function(){return r}):void 0!==h&&h.exports&&(h.exports=r)),s=0;this.sc.length>s;s++)this.sc[s].check()},this.check(!0)},n=_._gsDefine=function(t,e,i,n){return new q(t,e,i,n)},v=d._class=function(t,e,i){return e=e||function(){},n(t,[],function(){return e},i),e},Y=(n.globals=u,[0,0,1,1]),y=[],p=v("easing.Ease",function(t,e,i,n){this._func=t,this._type=i||0,this._power=n||0,this._params=e?Y.concat(e):Y},!0),x=p.map={},t=p.register=function(t,e,i,n){for(var r,s,a,o,l=e.split(","),c=l.length,p=(i||"easeIn,easeOut,easeInOut").split(",");-1<--c;)for(s=l[c],r=n?v("easing."+s,null,!0):d.easing[s]||{},a=p.length;-1<--a;)o=p[a],x[s+"."+o]=x[o+s]=r[o]=t.getRatio?t:t[o]||new t},i=p.prototype;for(i._calcEnd=!1,i.getRatio=function(t){var e,i,n;return this._func?(this._params[0]=t,this._func.apply(null,this._params)):(n=1===(e=this._type)?1-t:2===e?t:t<.5?2*t:2*(1-t),1===(i=this._power)?n*=n:2===i?n*=n*n:3===i?n*=n*n*n:4===i&&(n*=n*n*n*n),1===e?1-n:2===e?n:t<.5?n/2:1-n/2)},s=(r=["Linear","Quad","Cubic","Quart","Quint,Strong"]).length;-1<--s;)i=r[s]+",Power"+s,t(new p(null,null,1,s),i,"easeOut",!0),t(new p(null,null,2,s),i,"easeIn"+(0===s?",easeNone":"")),t(new p(null,null,3,s),i,"easeInOut");x.linear=d.easing.Linear.easeIn,x.swing=d.easing.Quad.easeInOut;for(var r,H=v("events.EventDispatcher",function(t){this._listeners={},this._eventTarget=t||this}),k=((i=H.prototype).addEventListener=function(t,e,i,n,r){r=r||0;var s,a,o=this._listeners[t],l=0;for(null==o&&(this._listeners[t]=o=[]),a=o.length;-1<--a;)(s=o[a]).c===e&&s.s===i?o.splice(a,1):0===l&&r>s.pr&&(l=a+1);o.splice(l,0,{c:e,s:i,up:n,pr:r}),this!==S||f||S.wake()},i.removeEventListener=function(t,e){var i,n=this._listeners[t];if(n)for(i=n.length;-1<--i;)if(n[i].c===e)return void n.splice(i,1)},i.dispatchEvent=function(t){var e,i,n,r=this._listeners[t];if(r)for(e=r.length,i=this._eventTarget;-1<--e;)(n=r[e]).up?n.c.call(n.s||i,{type:t,target:i}):n.c.call(n.s||i)},_.requestAnimationFrame),b=_.cancelAnimationFrame,T=Date.now||function(){return(new Date).getTime()},P=T(),s=(r=["ms","moz","webkit","o"]).length;-1<--s&&!k;)k=_[r[s]+"RequestAnimationFrame"],b=_[r[s]+"CancelAnimationFrame"]||_[r[s]+"CancelRequestAnimationFrame"];v("Ticker",function(t,e){var n,r,s,a,o,l=this,c=T(),i=!1!==e&&k,p=500,d=33,h=function(t){var e,i=T()-P;p=e&&e+this.totalDuration()/this._timeScale>t},i._enabled=function(t,e){return f||S.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},i._kill=function(){return this._enabled(!1,!1)},i.kill=function(t,e){return this._kill(t,e),this},i._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},i._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();-1<--e;)"{self}"===t[e]&&(i[e]=this);return i},i.eventCallback=function(t,e,i,n){if("on"===(t||"").substr(0,2)){var r=this.vars;if(1===arguments.length)return r[t];null==e?delete r[t]:(r[t]=e,r[t+"Params"]=g(i)&&-1!==i.join("").indexOf("{self}")?this._swapSelfInParams(i):i,r[t+"Scope"]=n),"onUpdate"===t&&(this._onUpdate=e)}return this},i.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},i.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&0this._duration?this._duration:t,e)):this._time},i.totalTime=function(t,e,i){if(f||S.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var n=this._totalDuration,r=this._timeline;if(nn;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._timeline&&this._uncache(!0),this},i._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t.timeline=null,t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),this._timeline)&&this._uncache(!0),this},i.render=function(t,e,i){var n,r=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;r;)n=r._next,(r._active||t>=r._startTime&&!r._paused)&&(r._reversed?r.render((r._dirty?r.totalDuration():r._totalDuration)-(t-r._startTime)*r._timeScale,e,i):r.render((t-r._startTime)*r._timeScale,e,i)),r=n},i.rawTime=function(){return f||S.wake(),this._totalTime},v("TweenLite",function(t,e,i){if(o.call(this,e,i),this.render=C.prototype.render,null==t)throw"Cannot tween a null target.";this.target=t="string"==typeof t&&C.selector(t)||t;var n,r,s,i=t.jquery||t.length&&t!==_&&t[0]&&(t[0]===_||t[0].nodeType&&t[0].style&&!t.nodeType),a=this.vars.overwrite;if(this._overwrite=a=null==a?Q[C.defaultOverwrite]:"number"==typeof a?a>>0:Q[a],(i||t instanceof Array||t.push&&g(t))&&"number"!=typeof t[0])for(this._targets=s=N.call(t,0),this._propLookup=[],this._siblings=[],n=0;s.length>n;n++)(r=s[n])?"string"!=typeof r?r.length&&r!==_&&r[0]&&(r[0]===_||r[0].nodeType&&r[0].style&&!r.nodeType)?(s.splice(n--,1),this._targets=s=s.concat(N.call(r,0))):(this._siblings[n]=I(r,this,!1),1===a&&1=a._startTime&&a._startTime+a.totalDuration()/a._timeScale>c&&((h||!a._initted)&&c-a._startTime<=2e-10||(p[d++]=a)));for(u=d;-1<--u;)a=p[u],2===n&&a._kill(i,t)&&(s=!0),(2!==n||!a._firstPT&&a._initted)&&a._enabled(!1,!1)&&(s=!0)}return s},Z=function(t,e,i){for(var n=t._timeline,r=n._timeScale,s=t._startTime;n._timeline;){if(s+=n._startTime,r*=n._timeScale,n._paused)return-100;n=n._timeline}return e<(s/=r)?s-e:i&&s===e||!t._initted&&s-e<2*m?m:(s+=t.totalDuration()/t._timeScale/r)>e+m?0:s-e-m},D=(i._init=function(){var t,e,i,n,r,s=this.vars,a=this._overwrittenProps,o=this._duration,l=!!s.immediateRender,c=s.ease;if(s.startAt){for(n in this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),r={},s.startAt)r[n]=s.startAt[n];if(r.overwrite=!1,r.immediateRender=!0,r.lazy=l&&!1!==s.lazy,r.startAt=r.delay=null,this._startAt=C.to(this.target,0,r),l)if(0o.pr;)n=n._next;(o._prev=n?n._prev:s)?o._prev._next=o:r=o,(o._next=n)?n._prev=o:s=o,o=a}o=e._firstPT=r}for(;o;)o.pg&&"function"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},D.activate=function(t){for(var e=t.length;-1<--e;)t[e].API===D.API&&(R[(new t[e])._propName]=t[e]);return!0},n.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw"illegal plugin definition.";var e,i=t.propName,n=t.priority||0,r=t.overwriteProps,s={init:"_onInitTween",set:"setRatio",kill:"_kill",round:"_roundProps",initAll:"_onInitAllProps"},a=v("plugins."+i.charAt(0).toUpperCase()+i.substr(1)+"Plugin",function(){D.call(this,i,n),this._overwriteProps=r||[]},!0===t.global),o=a.prototype=new D(i);for(e in(o.constructor=a).API=t.API,s)"function"==typeof t[e]&&(o[s[e]]=t[e]);return a.version=t.version,D.activate([a]),a},r=_._gsQueue){for(s=0;r.length>s;s++)r[s]();for(i in w)w[i].func||_.console.log("GSAP encountered missing dependency: com.greensock."+i)}f=!1}},{}],14:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("easing.Back",["easing.Ease"],function(m){function t(t,e){var i=(t=c("easing."+t,function(){},!0)).prototype=new m;return i.constructor=t,i.getRatio=e,t}function e(t,e,i,n){return e=c("easing."+t,{easeOut:new e,easeIn:new i,easeInOut:new n},!0),p(e,t),e}function g(t,e,i){this.t=t,this.v=e,i&&(((this.next=i).prev=this).c=i.v-e,this.gap=i.t-t)}function i(t,e){var i=c("easing."+t,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,t.config=function(t){return new i(t)},i}var n,r,s=window.GreenSockGlobals||window,a=s.com.greensock,o=2*Math.PI,l=Math.PI/2,c=a._class,p=m.register||function(){},a=e("Back",i("BackOut",function(t){return--t*t*((this._p1+1)*t+this._p1)+1}),i("BackIn",function(t){return t*t*((this._p1+1)*t-this._p1)}),i("BackInOut",function(t){return(t*=2)<1?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),d=c("easing.SlowMo",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:1t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},d.ease=new d(.7,.7),h.config=d.config=function(t,e,i){return new d(t,e,i)},(h=(n=c("easing.SteppedEase",function(t){this._p1=1/(t=t||1),this._p2=t+1},!0)).prototype=new m).constructor=n,h.getRatio=function(t){return t<0?t=0:1<=t&&(t=.999999999),(this._p2*t>>0)*this._p1},h.config=n.config=function(t){return new n(t)},(h=(r=c("easing.RoughEase",function(t){for(var e,i,n,r,s,a,o=(t=t||{}).taper||"none",l=[],c=0,p=0|(t.points||20),d=p,h=!1!==t.randomize,u=!0===t.clamp,_=t.template instanceof m?t.template:null,f="number"==typeof t.strength?.4*t.strength:.4;-1<--d;)e=h?Math.random():1/p*d,i=_?_.getRatio(e):e,n="none"===o?f:"out"===o?(r=1-e)*r*f:"in"===o?e*e*f:.5*(r=e<.5?2*e:2*(1-e))*r*f,h?i+=Math.random()*n-.5*n:d%2?i+=.5*n:i-=.5*n,u&&(1e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return(this._prev=e).v+(t-e.t)/e.gap*e.c},h.config=function(t){return new r(t)},r.ease=new r,e("Bounce",t("BounceOut",function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),t("BounceIn",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),t("BounceInOut",function(t){var e=t<.5;return t=(t=e?1-2*t:2*t-1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),e("Circ",t("CircOut",function(t){return Math.sqrt(1- --t*t)}),t("CircIn",function(t){return-(Math.sqrt(1-t*t)-1)}),t("CircInOut",function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),e("Elastic",(h=function(t,e,i){var n=c("easing."+t,function(t,e){this._p1=t||1,this._p2=e||i,this._p3=this._p2/o*(Math.asin(1/this._p1)||0)},!0),t=n.prototype=new m;return t.constructor=n,t.getRatio=e,t.config=function(t,e){return new n(t,e)},n})("ElasticOut",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*o/this._p2)+1},.3),h("ElasticIn",function(t){return-(this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2))},.3),h("ElasticInOut",function(t){return(t*=2)<1?-.5*this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2):.5*this._p1*Math.pow(2,-10*--t)*Math.sin((t-this._p3)*o/this._p2)+1},.45)),e("Expo",t("ExpoOut",function(t){return 1-Math.pow(2,-10*t)}),t("ExpoIn",function(t){return Math.pow(2,10*(t-1))-.001}),t("ExpoInOut",function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),e("Sine",t("SineOut",function(t){return Math.sin(t*l)}),t("SineIn",function(t){return 1-Math.cos(t*l)}),t("SineInOut",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),c("easing.EaseLookup",{find:function(t){return m.map[t]}},!0),p(s.SlowMo,"SlowMo","ease,"),p(r,"RoughEase","ease,"),p(n,"SteppedEase","ease,"),a},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],15:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(s,h){function B(){s.call(this,"css"),this._overwriteProps.length=0,this.setRatio=B.prototype.setRatio}var u,x,k,d,_={},t=B.prototype=new s("css");(t.constructor=B).version="1.12.1",B.API=2,B.defaultTransformPerspective=0,B.defaultSkewType="compensated",B.suffixMap={top:t="px",right:t,bottom:t,left:t,width:t,height:t,fontSize:t,padding:t,margin:t,perspective:t,lineHeight:""};function a(t,e){return e.toUpperCase()}function o(t){return tt.test("string"==typeof t?t:(t.currentStyle||t.style).filter||"")?parseFloat(RegExp.$1)/100:1}function D(t){window.console&&console.log(t)}function b(t,e){var i,n,r=(e=e||C).style;if(void 0!==r[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=["O","Moz","ms","Ms","Webkit"],n=5;-1<--n&&void 0===r[i[n]+t];);return 0<=n?(dt="-"+(ht=3===n?"ms":i[n]).toLowerCase()+"-",ht+t):null}function f(t,e){var i,n={};if(e=e||m(t,null))if(i=e.length)for(;-1<--i;)n[e[i].replace(st,a)]=e.getPropertyValue(e[i]);else for(i in e)n[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)"string"==typeof i&&void 0===n[i]&&(n[i.replace(st,a)]=e[i]);return O||(n.opacity=o(t)),t=I(t,e,!1),n.rotation=t.rotation,n.skewX=t.skewX,n.scaleX=t.scaleX,n.scaleY=t.scaleY,n.x=t.x,n.y=t.y,H&&(n.z=t.z,n.rotationX=t.rotationX,n.rotationY=t.rotationY,n.scaleZ=t.scaleZ),n.filters&&delete n.filters,n}function E(t,e,i,n,r){var s,a,o,l={},c=t.style;for(a in i)"cssText"!==a&&"length"!==a&&isNaN(a)&&(e[a]!==(s=i[a])||r&&r[a])&&-1===a.indexOf("Origin")&&("number"==typeof s||"string"==typeof s)&&(l[a]="auto"!==s||"left"!==a&&"top"!==a?""!==s&&"auto"!==s&&"none"!==s||"string"!=typeof e[a]||""===e[a].replace(p,"")?s:0:ut(t,a),void 0!==c[a])&&(o=new wt(c,a,c[a],o));if(n)for(a in n)"className"!==a&&(l[a]=n[a]);return{difs:l,firstMPT:o}}function X(t,e){var i=(t=null!=t&&""!==t&&"auto"!==t&&"auto auto"!==t?t:"0 0").split(" "),n=-1!==t.indexOf("left")?"0%":-1!==t.indexOf("right")?"100%":i[0];return null==(t=-1!==t.indexOf("top")?"0%":-1!==t.indexOf("bottom")?"100%":i[1])?t="0":"center"===t&&(t="50%"),("center"===n||isNaN(parseFloat(n))&&-1===(n+"").indexOf("="))&&(n="50%"),e&&(e.oxp=-1!==n.indexOf("%"),e.oyp=-1!==t.indexOf("%"),e.oxr="="===n.charAt(1),e.oyr="="===t.charAt(1),e.ox=parseFloat(n.replace(p,"")),e.oy=parseFloat(t.replace(p,""))),n+" "+t+(2>16,255&t>>8,255&t]:(","===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),L[t]||("#"===t.charAt(0)?(4===t.length&&(t="#"+(e=t.charAt(1))+e+(i=t.charAt(2))+i+(n=t.charAt(3))+n),[(t=parseInt(t.substr(1),16))>>16,255&t>>8,255&t]):("hsl"===t.substr(0,3)?(t=t.match(P),n=Number(t[0])%360/360,r=Number(t[1])/100,e=2*(s=Number(t[2])/100)-(i=s<=.5?s*(1+r):s+r-s*r),3a",!!(e=G.getElementsByTagName("a")[0])&&/^0.55/.test(e.style.opacity)),dt="",ht="",m=y.defaultView?y.defaultView.getComputedStyle:function(){},q=B.getStyle=function(t,e,i,n,r){var s;return O||"opacity"!==e?(!n&&t.style[e]?s=t.style[e]:(i=i||m(t))?s=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(rt,"-$1").toLowerCase()):t.currentStyle&&(s=t.currentStyle[e]),null==r||s&&"none"!==s&&"auto"!==s&&"auto auto"!==s?s:r):o(t)},A=i.convertToPixels=function(t,e,i,n,r){if("px"===n||!n)return i;if("auto"===n||!i)return 0;var s,a,o,l=ot.test(e),c=t,p=C.style,d=i<0;if(d&&(i=-i),"%"===n&&-1!==e.indexOf("border"))s=i/100*(l?t.clientWidth:t.clientHeight);else{if(p.cssText="border:0 solid red;position:"+q(t,"position")+";line-height:0;","%"!==n&&c.appendChild)p[l?"borderLeftWidth":"borderTopWidth"]=i+n;else{if(a=(c=t.parentNode||y.body)._gsCache,o=h.ticker.frame,a&&l&&a.time===o)return a.width*i/100;p[l?"width":"height"]=i+n}c.appendChild(C),s=parseFloat(C[l?"offsetWidth":"offsetHeight"]),c.removeChild(C),l&&"%"===n&&!1!==B.cacheWidths&&((a=c._gsCache=c._gsCache||{}).time=o,a.width=s/i*100),0!==s||r||(s=A(t,e,i,n,!0))}return d?-s:s},ut=i.calculateOffset=function(t,e,i){var n;return"absolute"!==q(t,"position",i)?0:(i=q(t,"margin"+(n="left"===e?"Left":"Top"),i),t["offset"+n]-(A(t,e,parseFloat(i),i.replace(J,""))||0))},_t={width:["Left","Right"],height:["Top","Bottom"]},ft=["marginLeft","marginRight","marginTop","marginBottom"],L={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},R="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b";for(t in L)R+="|"+t+"\\b";function mt(t,e,s,a){var o,l,c,p,d,h,u,_;return null==t?function(t){return t}:(l=e?(t.match(R)||[""])[0]:"",c=t.split(l).join("").match(K)||[],p=t.substr(0,t.indexOf(c[0])),d=")"===t.charAt(t.length-1)?")":"",h=-1!==t.indexOf(" ")?" ":",",u=c.length,_=0n;n++)r[n]=o(r[n]);return r.join(",")}if(e=(t.match(R)||[l])[0],n=(i=t.split(e).join("").match(K)||[]).length,u>n--)for(;u>++n;)i[n]=s?i[0|(n-1)/2]:c[n];return p+i.join(h)+h+e+d+(-1!==t.indexOf("inset")?" inset":"")}:function(t){var e,i,n;if("number"==typeof t)t+=_;else if(a&&S.test(t)){for(i=t.replace(S,"|").split("|"),n=0;i.length>n;n++)i[n]=o(i[n]);return i.join(",")}if(n=(e=t.match(K)||[]).length,u>n--)for(;u>++n;)e[n]=s?e[0|(n-1)/2]:c[n];return p+e.join(h)+d}:function(t){return t})}function gt(c){return c=c.split(","),function(t,e,i,n,r,s,a){var o,l=(e+"").split(" ");for(a={},o=0;o<4;o++)a[c[o]]=l[o]=l[o]||l[(o-1)/2>>0];return n.parse(t,a,r,s)}}function wt(t,e,i,n,r){this.t=t,this.p=e,this.v=i,this.r=r,n&&((n._prev=this)._next=n)}var R=RegExp(R+")","gi"),M=(i._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,n,r,s=this.data,a=s.proxy,o=s.firstMPT;o;)e=a[o.v],o.r?e=Math.round(e):e<1e-6&&-1e-6n;n++)r+=i["xn"+n]+i["xs"+(n+1)];i.e=r}}else i.e=i.s+i.xs0;o=o._next}},i._parseToProxy=function(t,e,i,n,r,s){var a,o,l,c,p=n,d={},h={},u=i._transform,_=v;for(i._transform=null,v=e,n=t=i.parse(t,e,n,r),v=_,s&&(i._transform=u,p)&&(p._prev=null,p._prev)&&(p._prev._next=null);n&&n!==p;){if(n.type<=1&&(h[o=n.p]=n.s+n.c,d[o]=n.s,s||(c=new wt(n,"s",o,c,n.r),n.c=0),1===n.type))for(a=n.l;0<--a;)h[o=n.p+"_"+(l="xn"+a)]=n.data[l],d[o]=n[l],s||(c=new wt(n,l,o,c,n.rxp[l]));n=n._next}return{proxy:d,end:h,firstMPT:c,pt:t}},i.CSSPropTween=function(t,e,i,n,r,s,a,o,l,c,p){this.t=t,this.p=e,this.s=i,this.c=n,this.n=a||e,t instanceof M||d.push(this.n),this.r=o,this.type=s||0,l&&(this.pr=l,u=!0),this.b=void 0===c?i:c,this.e=void 0===p?i+n:p,r&&((this._next=r)._prev=this)}),vt=B.parseComplex=function(t,e,i,n,r,s,a,o,l,c){a=new M(t,e,0,0,a,c?2:1,null,!1,o,i=i||s||"",n),n+="";var p,d,h,u,_,f,m,g,w,v,y,x=i.split(", ").join(",").split(" "),k=n.split(", ").join(",").split(" "),b=x.length,T=!1!==U;for(-1===n.indexOf(",")&&-1===i.indexOf(",")||(x=x.join(" ").replace(S,", ").split(" "),k=k.join(" ").replace(S,", ").split(" "),b=x.length),b!==k.length&&(b=(x=(s||"").split(" ")).length),a.plugin=l,a.setRatio=c,p=0;pd;d++)v=f[d],w=u.indexOf(v,h),a.appendXtra(u.substr(h,w-h),Number(v),F(m[d],v),"",T&&"px"===u.substr(w+v.length,2),0===d),h=w+v.length;a["xs"+a.l]+=u.substr(h)}else a["xs"+a.l]+=a.l?" "+u:u;if(-1!==n.indexOf("=")&&a.data){for(y=a.xs0+a.data.s,p=1;a.l>p;p++)y+=a["xs"+p]+a.data["xn"+p];a.e=y+a["xs"+p]}return a.l||(a.type=-1,a.xs0=a.e),a.xfirst||a},j=9;for((t=M.prototype).l=t.pr=0;0<--j;)t["xn"+j]=0,t["xs"+j]="";t.xs0="",t._next=t._prev=t.xfirst=t.data=t.plugin=t.setRatio=t.rxp=null,t.appendXtra=function(t,e,i,n,r,s){var a=this,o=a.l;return a["xs"+o]+=s&&o?" "+t:t||"",i||0===o||a.plugin?(a.l++,a.type=a.setRatio?2:1,a["xs"+a.l]=n||"",0n;n++)e.prefix=0===n&&e.prefix,e.defaultValue=i[n]||s,new yt(r[n],e)},St=((t=yt.prototype).parseComplex=function(t,e,i,n,r,s){var a,o,l,c,p,d=this.keyword;if(this.multi&&(S.test(i)||S.test(e)?(o=e.replace(S,"|").split("|"),l=i.replace(S,"|").split("|")):d&&(o=[e],l=[i])),l){for(c=(l.length>o.length?l:o).length,a=0;aR[s]&&R[s]>-M&&(R[s]=0);return i&&(t._gsTransform=R),R},Lt=i.set3DTransformRatio=function(t){var e,i,n,r,s,a,o,l,c,p,d,h,u,_,f,m,g,w,v,y,x,k,b=this.data,T=this.t.style,P=b.rotation*N,S=b.scaleX,C=b.scaleY,O=b.scaleZ,A=b.perspective;if(1!==t&&0!==t||"auto"!==b.force3D||b.rotationY||b.rotationX||1!==O||A||b.z){if(W&&(S<1e-4&&-1e-4{var l;_[t]||(l=t.charAt(0).toUpperCase()+t.substr(1)+"Plugin",r(t,{parser:function(t,e,i,n,r,s,a){var o=(window.GreenSockGlobals||window).com.greensock.plugins[l];return o?(o._cssRegister(),_[i].parse(t,e,i,n,r,s,a)):(D("Error: "+l+" js file not loaded."),r)}}))})(t[j]);(t=B.prototype)._firstPT=null,t._onInitTween=function(t,e,i){if(!t.nodeType)return!1;this._target=t,this._tween=i,this._vars=e,U=e.autoRound,u=!1,x=e.suffixMap||B.suffixMap,k=m(t,""),d=this._overwriteProps;var n,r,s,a,o,l,i=t.style;if(c&&""===i.zIndex&&("auto"===(l=q(t,"zIndex",k))||""===l)&&this._addLazySet(i,"zIndex",0),"string"==typeof e&&(s=i.cssText,l=f(t,k),i.cssText=s+";"+e,l=E(t,l,f(t)).difs,!O&&et.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,i.cssText=s),this._firstPT=n=this.parse(t,e,null),this._transformType){for(l=3===this._transformType,Y?V&&(c=!0,""===i.zIndex&&("auto"===(e=q(t,"zIndex",k))||""===e)&&this._addLazySet(i,"zIndex",0),Q)&&this._addLazySet(i,"WebkitBackfaceVisibility",this._vars.WebkitBackfaceVisibility||(l?"visible":"hidden")):i.zoom=1,r=n;r&&r._next;)r=r._next;e=new M(t,"transform",0,0,null,2),this._linkCSSP(e,null,r),e.setRatio=l&&H?Lt:Y?Rt:xt,e.data=this._transform||I(t,k,!0),d.pop()}if(u){for(;n;){for(o=n._next,r=s;r&&r.pr>n.pr;)r=r._next;(n._prev=r?r._prev:a)?n._prev._next=n:s=n,(n._next=r)?r._prev=n:a=n,n=o}this._firstPT=s}return!0},t.parse=function(t,e,i,n){var r,s,a,o,l,c,p,d,h=t.style;for(r in e)l=e[r],o=_[r],o?i=o.parse(t,l,r,this,i,n,e):(o=q(t,r,k)+"",p="string"==typeof l,"color"===r||"fill"===r||"stroke"===r||-1!==r.indexOf("Color")||p&&nt.test(l)?(p||(l=$(l),l=(3{var n=parseFloat("width"===e?t.offsetWidth:t.offsetHeight),r=_t[e],s=r.length;for(i=i||m(t,null);-1<--s;)n=(n-=parseFloat(q(t,"padding"+r[s],i,!0))||0)-(parseFloat(q(t,"border"+r[s]+"Width",i,!0))||0);return n})(t,r,k),"px"):"left"===r||"top"===r?(s=ut(t,r,k),"px"):(s="opacity"!==r?0:1,"")),d=p&&"="===l.charAt(1),p=d?(a=parseInt(l.charAt(0)+"1",10),l=l.substr(2),a*=parseFloat(l),l.replace(J,"")):(a=parseFloat(l),p&&l.substr((a+"").length)||""),""===p&&(p=r in x?x[r]:c),l=a||0===a?(d?a+s:a)+p:e[r],c!==p&&""!==p&&(a||0===a)&&s&&(s=A(t,r,s,c),"%"===p?(s/=A(t,r,100,"%")/100,!0!==e.strictUnits&&(o=s+"%")):"em"===p?s/=A(t,r,1,"em"):"px"!==p&&(a=A(t,r,a,p),p="px"),d)&&(a||0===a)&&(l=a+s+p),d&&(a+=s),!s&&0!==s||!a&&0!==a?void 0!==h[r]&&(l||"NaN"!=l+""&&null!=l)?(i=new M(h,r,a||s||0,0,i,-1,r,!1,0,o,l),i.xs0="none"!==l||"display"!==r&&-1===r.indexOf("Style")?l:o):D("invalid "+r+" tween value: "+e[r]):(i=new M(h,r,s,a-s,i,0,r,!1!==U&&("px"===p||"zIndex"===r),0,o,l),i.xs0=p)):i=vt(h,r,o,l,!0,null,i,0,n)),n&&i&&!i.plugin&&(i.plugin=n);return i},t.setRatio=function(t){var e,i,n,r=this._firstPT;if(1!==t||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(t||this._tween._time!==this._tween._duration&&0!==this._tween._time||-1e-6===this._tween._rawPrevTime)for(;r;){if(e=r.c*t+r.s,r.r?e=Math.round(e):e<1e-6&&-1e-6n;n++)i+=r["xn"+n]+r["xs"+(n+1)];r.t[r.p]=i}else-1===r.type?r.t[r.p]=r.xs0:r.setRatio&&r.setRatio(t);else r.t[r.p]=e+r.xs0;r=r._next}else for(;r;)2!==r.type?r.t[r.p]=r.b:r.setRatio(t),r=r._next;else for(;r;)2!==r.type?r.t[r.p]=r.e:r.setRatio(t),r=r._next},t._enableTransforms=function(t){this._transformType=t||3===this._transformType?3:2,this._transform=this._transform||I(this._target,k,!0)};function Mt(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)}function jt(t,e,i){var n,r,s,a;if(t.slice)for(r=t.length;-1<--r;)jt(t[r],e,i);else for(r=(n=t.childNodes).length;-1<--r;)a=(s=n[r]).type,s.style&&(e.push(f(s)),i)&&i.push(s),1!==a&&9!==a&&11!==a||!s.childNodes.length||jt(s,e,i)}t._addLazySet=function(t,e,i){t=this._firstPT=new M(t,e,0,0,this._firstPT,2);t.e=i,t.setRatio=Mt,t.data=this},t._linkCSSP=function(t,e,i,n){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,n=!0),i?i._next=t:n||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},t._kill=function(t){var e,i,n,r=t;if(t.autoAlpha||t.alpha){for(i in r={},t)r[i]=t[i];r.opacity=1,r.autoAlpha&&(r.visibility=1)}return t.className&&(e=this._classNamePT)&&((n=e.xfirst)&&n._prev?this._linkCSSP(n._prev,e._next,n._prev._prev):n===this._firstPT&&(this._firstPT=e._next),e._next&&this._linkCSSP(e._next,e._next._next,n._prev),this._classNamePT=null),s.prototype._kill.call(this,r)};return B.cascadeTo=function(t,e,i){var n,r,s,a=h.to(t,e,i),o=[a],l=[],c=[],p=[],d=h._internals.reservedProps;for(t=a._targets||a.target,jt(t,l,p),a.render(e,!0),jt(t,c),a.render(0,!0),a._enabled(!0),n=p.length;-1<--n;)if((r=E(p[n],l[n],c[n])).firstMPT){for(s in r=r.difs,i)d[s]&&(r[s]=i[s]);o.push(h.to(p[n],e,r))}return o},s.activate([B]),B},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],16:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){function r(t,e){var i="scroll"+(e="x"===e?"Width":"Height"),n="client"+e,r=document.body;return t===a||t===s||t===r?Math.max(s[i],r[i])-(a["inner"+e]||Math.max(s[n],r[n])):t[i]-t["offset"+e]}var s=document.documentElement,a=window,t=window._gsDefine.plugin({propName:"scrollTo",API:2,version:"1.7.3",init:function(t,e,i){return this._wdw=t===a,this._target=t,this._tween=i,this._autoKill=!1!==(e="object"!=typeof e?{y:e}:e).autoKill,this.x=this.xPrev=this.getX(),this.y=this.yPrev=this.getY(),null!=e.x?(this._addTween(this,"x",this.x,"max"===e.x?r(t,"x"):e.x,"scrollTo_x",!0),this._overwriteProps.push("scrollTo_x")):this.skipX=!0,null!=e.y?(this._addTween(this,"y",this.y,"max"===e.y?r(t,"y"):e.y,"scrollTo_y",!0),this._overwriteProps.push("scrollTo_y")):this.skipY=!0,!0},set:function(t){this._super.setRatio.call(this,t);var t=this._wdw||!this.skipX?this.getX():this.xPrev,e=this._wdw||!this.skipY?this.getY():this.yPrev,i=e-this.yPrev,n=t-this.xPrev;this._autoKill&&(!this.skipX&&(7t&&(this.skipX=!0),!this.skipY&&(7e&&(this.skipY=!0),this.skipX)&&this.skipY&&this._tween.kill(),this._wdw?a.scrollTo(this.skipX?t:this.x,this.skipY?e:this.y):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x)),this.xPrev=this.x,this.yPrev=this.y}}),e=t.prototype;t.max=r,e.getX=function(){return this._wdw?null!=a.pageXOffset?a.pageXOffset:(null!=s.scrollLeft?s:document.body).scrollLeft:this._target.scrollLeft},e.getY=function(){return this._wdw?null!=a.pageYOffset?a.pageYOffset:(null!=s.scrollTop?s:document.body).scrollTop:this._target.scrollTop},e._kill=function(t){return t.scrollTo_x&&(this.skipX=!0),t.scrollTo_y&&(this.skipY=!0),this._super._kill.call(this,t)}}),window._gsDefine&&window._gsQueue.pop()()},{}]},{},[3]); +!function n(r,a,s){function o(e,t){if(!a[e]){if(!r[e]){var i="function"==typeof require&&require;if(!t&&i)return i(e,!0);if(l)return l(e,!0);throw(t=new Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND",t}i=a[e]={exports:{}},r[e][0].call(i.exports,function(t){return o(r[e][1][t]||t)},i,i.exports,n,r,a,s)}return a[e].exports}for(var l="function"==typeof require&&require,t=0;t{let e=i.querySelector(".select-button"),n=i.querySelector(".selected-value");e.addEventListener("click",()=>{i.classList.toggle("active"),e.setAttribute("aria-expanded","true"===e.getAttribute("aria-expanded")?"false":"true")}),i.addEventListener("click",function(t){var e;t.target.matches("label")&&(i.querySelectorAll("li").forEach(t=>t.classList.remove("active")),t=t.target.closest("li"))&&(t.classList.add("active"),t=t,e=new CustomEvent("custom-select-change",{detail:{selectedOption:t}}),n.textContent=t.textContent,i.classList.remove("active"),i.dispatchEvent(e))}),document.addEventListener("click",t=>{i.contains(t.target)||(i.classList.remove("active"),e.setAttribute("aria-expanded","false"))})})},{}],2:[function(t,e,i){var v=jQuery;v(document).ready(function(){var r=!1;v("#wpr-action-refresh_account").on("click",function(t){var e,i,n;return r||(e=v(this),i=v("#wpr-account-data"),n=v("#wpr-expiration-data"),t.preventDefault(),r=!0,e.trigger("blur"),n.removeClass("wpr-isValid wpr-isInvalid"),v.post(ajaxurl,{action:"rocket_refresh_customer_data",_ajax_nonce:rocket_ajax_data.nonce},function(t){e.removeClass("wpr-isLoading"),e.addClass("wpr-isHidden"),!0===t.success?(i.html(t.data.license_type),n.addClass(t.data.license_class).html(t.data.license_expiration),setTimeout(function(){e.removeClass("wpr-icon-refresh wpr-isHidden"),e.addClass("wpr-icon-check")},250)):setTimeout(function(){e.removeClass("wpr-icon-refresh wpr-isHidden"),e.addClass("wpr-icon-close")},250),setTimeout(function(){new TimelineLite({onComplete:function(){r=!1}}).set(e,{css:{className:"+=wpr-isHidden"}}).set(e,{css:{className:"-=wpr-icon-check"}},.25).set(e,{css:{className:"-=wpr-icon-close"}}).set(e,{css:{className:"+=wpr-icon-refresh"}},.25).set(e,{css:{className:"-=wpr-isHidden"}})},2e3)})),!1}),v(".wpr-radio input[type=checkbox]").on("change",function(t){t.preventDefault();var t=v(this).attr("id"),e=v(this).prop("checked")?1:0;0<=["cloudflare_auto_settings","cloudflare_devmode","analytics_enabled"].indexOf(t)||v.post(ajaxurl,{action:"rocket_toggle_option",_ajax_nonce:rocket_ajax_data.nonce,option:{name:t,value:e}},function(t){})}),v("#wpr-action-rocket_enable_mobile_cpcss").on("click",function(t){t.preventDefault(),v("#wpr-action-rocket_enable_mobile_cpcss").addClass("wpr-isLoading"),v.post(ajaxurl,{action:"rocket_enable_mobile_cpcss",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v("#wpr-action-rocket_enable_mobile_cpcss").hide(),v(".wpr-hide-on-click").hide(),v(".wpr-show-on-click").show(),v("#wpr-action-rocket_enable_mobile_cpcss").removeClass("wpr-isLoading"))})}),v("#wpr-action-rocket_enable_google_fonts").on("click",function(t){t.preventDefault(),v("#wpr-action-rocket_enable_google_fonts").addClass("wpr-isLoading"),v.post(ajaxurl,{action:"rocket_enable_google_fonts",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v("#wpr-action-rocket_enable_google_fonts").hide(),v(".wpr-hide-on-click").hide(),v(".wpr-show-on-click").show(),v("#wpr-action-rocket_enable_google_fonts").removeClass("wpr-isLoading"),v("#minify_google_fonts").val(1))})}),v("#rocket-dismiss-promotion").on("click",function(t){t.preventDefault(),v.post(ajaxurl,{action:"rocket_dismiss_promo",nonce:rocket_ajax_data.nonce},function(t){t.success&&v("#rocket-promo-banner").hide("slow")})}),v("#rocket-dismiss-renewal").on("click",function(t){t.preventDefault(),v.post(ajaxurl,{action:"rocket_dismiss_renewal",nonce:rocket_ajax_data.nonce},function(t){t.success&&v("#rocket-renewal-banner").hide("slow")})}),v("#wpr-update-exclusion-list").on("click",function(t){t.preventDefault(),v("#wpr-update-exclusion-msg").html(""),v.ajax({url:rocket_ajax_data.rest_url,beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",rocket_ajax_data.rest_nonce),t.setRequestHeader("Accept","application/json, */*;q=0.1"),t.setRequestHeader("Content-Type","application/json")},method:"PUT",success:function(e){let i=v("#wpr-update-exclusion-msg");i.html(""),void 0!==e.success?i.append('
'+e.message+"
"):Object.keys(e).forEach(t=>{i.append(""+t+": "),i.append(e[t].message),i.append("
")})}})}),v("#wpr_enable_mobile_cache").on("click",function(t){t.preventDefault(),v("#wpr_enable_mobile_cache").addClass("wpr-isLoading"),v.post(ajaxurl,{action:"rocket_enable_mobile_cache",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v("#wpr_enable_mobile_cache").hide(),v("#wpr_mobile_cache_default").hide(),v("#wpr_mobile_cache_response").show(),v("#wpr_enable_mobile_cache").removeClass("wpr-isLoading"),v("#cache_mobile").val(1),v("#do_caching_mobile_files").val(1))})})}),document.addEventListener("DOMContentLoaded",function(){var t=document.getElementById("analytics_enabled");t&&t.addEventListener("change",function(){var t=this.checked;"undefined"!=typeof rocket_mixpanel_data&&(rocket_mixpanel_data.optin_enabled=t?"1":"0"),fetch(ajaxurl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({action:"rocket_toggle_optin",value:t?1:0,_ajax_nonce:rocket_ajax_data.nonce})})})}),document.addEventListener("DOMContentLoaded",function(){let t=2e3,e=5e3,i=Array.isArray(window.rocket_ajax_data?.rocket_insights_ids)?window.rocket_ajax_data.rocket_insights_ids.slice():[],n=t,r=null,a=!0,s={data:{status:"",score:0,pages_num:0},html:"",row_html:"",disabled_btn_html:{global_score_widget:"",rocket_insights:""}},o=(window.rocket_ajax_data?.global_score_data&&(s=window.rocket_ajax_data.global_score_data),v("#wpr-speed-radar-url-input")),l=v(".wpr-ri-urls-table tbody"),c=v(".wpr-ri-urls-table");function d(t){i.includes(t)||i.push(t)}function p(t){var e=v(".wpr-ri-summary-info"),i="1"===window.rocket_ajax_data?.is_free,i=v(i?"#wpr-ri-quota-banner":"#rocket_insights_survey");!1===t||!a?(e.hide(),i.removeClass("hidden")):(e.show(),i.addClass("hidden"))}function h(t){void 0!==t&&a!==t&&(a=t,document.querySelectorAll(".wpr-action-speed_radar_refresh").forEach(t=>{var e=t.closest(".wpr-ri-item");e&&(e=parseInt(e.dataset.rocketInsightsId,10),e=i.includes(e),!a||e?(t.classList.add("wpr-ri-action--disabled"),t.setAttribute("disabled","true"),a||(t.classList.add("wpr-btn-with-tool-tip"),t.setAttribute("title",window.rocket_ajax_data?.rocket_insights_no_credit_tooltip||"Upgrade your plan to get access to re-test performance or run new tests"))):(t.classList.remove("wpr-ri-action--disabled","wpr-btn-with-tool-tip"),t.removeAttribute("disabled"),t.removeAttribute("title")))}))}function u(){r&&(clearTimeout(r),r=null),n=t}function _(){0{0===i.length?u():window.wp.apiFetch({path:window.wp.url.addQueryArgs("/wp-rocket/v1/rocket-insights/pages/progress",{ids:i})}).then(t=>{t.success&&Array.isArray(t.results)?(h(t.has_credit),p(t.can_add_pages),s.data.status===t.global_score_data.data.status&&s.data.pages_num===t.global_score_data.data.pages_num||(s=t.global_score_data,v(".wpr-global-score-widget").html(t.global_score_data.html),f(s),document.dispatchEvent(new CustomEvent("wprGlobalScoreUpdated",{detail:s.data}))),t.results.forEach(t=>{if(v(`.wpr-ri-item[data-rocket-insights-id="${t.id}"]`).replaceWith(t.html),v(document).trigger("rocket-insights-page-test-polling",[t.id]),"completed"===t.status&&v(document).trigger("rocket-insights-page-test-completed",[t.id]),"completed"===t.status||"failed"===t.status){t=t.id;let e=parseInt(t,10);i=i.filter(t=>parseInt(t,10)!==e)}}),n=Math.min(1.3*n,e),_()):(i=[],u(),console.error("Polling error:",t.results||t))})},n))}function f(t){var e=v(".wpr-ri-urls-table .wpr-global-score");0{try{var e=new URL(t);return e.hostname.includes(".")&&0{var e;t.success?(e=t.id,i.includes(e)||(o.val(""),l.append(t.html),v(document).trigger("rocket-insights-page-added"),c.removeClass("hidden"),d(t.id),(e=v("#rocket_rocket_insights_pages_num")).text(parseInt(e.text())+1),h(t.has_credit),f(s=t.global_score_data),"disabled_btn_html"in s&&v("#wpr_rocket_insights_add_page_btn_wrapper").html(s.disabled_btn_html.rocket_insights),p(t.can_add_pages),r&&u(),_())):(o.val(""),t?.message&&t.message.includes("Maximum number of URLs reached")&&(disableAddUrlElements(),p(void 0!==t.can_add_pages&&t.can_add_pages)),console.error(t?.message||t))})):alert("Please enter a valid URL"))}),v(document).on("click",".wpr-action-speed_radar_refresh",function(t){t.preventDefault();var e=(t=v(this)).parents(".wpr-ri-item").data("rocket-insights-id");e&&(t=t.data("source"),window.wp.apiFetch({path:"/wp-rocket/v1/rocket-insights/pages/"+e,method:"PATCH",data:{source:t}}).then(t=>{t.success?(d(t.id),v(`#ri_details_${t.id} .details-section-td`).remove(),v(`[data-rocket-insights-id="${t.id}"]`).replaceWith(t.html),v(document).trigger("rocket-insights-page-retest",[t.id]),h(t.has_credit),p(t.can_add_pages),f(s=t.global_score_data),r&&u(),_()):console.error(t?.message||t)}))}),v(document).on("keypress","#wpr-speed-radar-url-input",function(t){"Enter"===t.key&&(t.preventDefault(),v("#wpr-action-add_page_speed_radar").click())}),"wprocket"===new URLSearchParams(window.location.search).get("page")&&0{f(s)},30)}),v(document).on("click",".wpr-ri-item-toggle-single",function(){var t,e,i,n,r=v(this).closest(".wpr-ri-item").data("rocket-insights-id");t="url_expand",e=v("#ri_details_"+(r=r)),i=e.hasClass("wpr-ri-details--expanded"),n=v(`[data-rocket-insights-id="${r}"] .wpr-ri-item-toggle-single`).is(v(".wpr-ri-item-toggle-single").last()),i?(e.removeClass("wpr-ri-details--expanded"),v(`[data-rocket-insights-id="${r}"]`).removeClass("wpr-ri-item--expanded"),n&&w(!1)):(e.addClass("wpr-ri-details--expanded"),v(`[data-rocket-insights-id="${r}"]`).addClass("wpr-ri-item--expanded"),g("expand",r,t),n&&w())}),v(document).on("click",".wpr-ri-item-toggle-all",function(){0{var t,e,i;"wprocket"===new URLSearchParams(window.location.search).get("page")&&"#rocket_insights"===window.location.hash&&(m(!0),i=(t=new URLSearchParams(window.location.search)).get("ri_id"),e=v(".wpr-ri-item--expanded")?.first()?.data("rocket-insights-id"),i&&""!==i?(g("expand",i,"post type listing"),v("html, body").animate({scrollTop:v(`[data-rocket-insights-id="${i}"]`).offset().top-100},500),t.delete("ri_id"),i=window.location.pathname+"?"+t.toString()+window.location.hash,window.history.replaceState({},"",i)):e&&g("expand",e,"auto_expand_url"))})})},{}],3:[function(t,e,i){t("../lib/greensock/TweenLite.min.js"),t("../lib/greensock/TimelineLite.min.js"),t("../lib/greensock/easing/EasePack.min.js"),t("../lib/greensock/plugins/CSSPlugin.min.js"),t("../lib/greensock/plugins/ScrollToPlugin.min.js"),t("../global/cdn-driver.js"),t("../global/pageManager.js"),t("../global/main.js"),t("../global/fields.js"),t("../global/beacon.js"),t("../global/ajax.js"),t("../global/recommendations-widget.js"),t("../global/rocketcdn.js"),t("../global/rocketcdn-subscription-polling.js"),t("../global/countdown.js"),t("../global/mixpanel.js")},{"../global/ajax.js":2,"../global/beacon.js":4,"../global/cdn-driver.js":5,"../global/countdown.js":6,"../global/fields.js":7,"../global/main.js":8,"../global/mixpanel.js":9,"../global/pageManager.js":10,"../global/recommendations-widget.js":11,"../global/rocketcdn-subscription-polling.js":12,"../global/rocketcdn.js":13,"../lib/greensock/TimelineLite.min.js":14,"../lib/greensock/TweenLite.min.js":15,"../lib/greensock/easing/EasePack.min.js":16,"../lib/greensock/plugins/CSSPlugin.min.js":17,"../lib/greensock/plugins/ScrollToPlugin.min.js":18}],4:[function(t,e,i){var n=jQuery;n(document).ready(function(){function i(t,e){"undefined"!=typeof mixpanel&&mixpanel.track&&"undefined"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&"0"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&"function"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track("Button Clicked",{button:t,button_context:e,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,context:rocket_mixpanel_data.context,path:rocket_mixpanel_data.path}))}"Beacon"in window&&n(".wpr-infoAction--help").on("click",function(t){var e=n(this).attr("data-beacon-id");return i(n(this).data("wpr_track_button")||"Beacon Help",n(this).data("wpr_track_context")||"Settings"),0!==(e=(e=e).split(",")).length&&(1{{let a=d.querySelectorAll(".wpr-cdn-tabs__tab"),t=d.querySelectorAll(".rocketcdn, .your-own-cdn");function s(e){t.forEach(t=>{t.classList.toggle("wpr-isHidden",!t.classList.contains(e))})}function o(t){let e=t.getAttribute("data-title");e&&d.querySelectorAll(".rocketcdn-driver-js").forEach(t=>{t.textContent=e})}function l(t){var e,i=d.querySelector(".exclude-cdn-help-js");i&&(e=(t="rocketcdn"===t)?i.dataset.rocketcdnUrl:i.dataset.otherCdnUrl,t=t?i.dataset.rocketcdnId:i.dataset.otherCdnId,e&&(i.href=e),t)&&(i.dataset.beaconId=t)}var e,i;a.length&&(a.forEach(r=>{r.addEventListener("click",()=>{var n=r.getAttribute("data-cdn-driver");if(n){a.forEach(t=>t.classList.remove("wpr-cdn-tabs__tab--active")),r.classList.add("wpr-cdn-tabs__tab--active"),s(n),o(r),l(n),p();let e=d.getElementById("cdn_type"),t=e.value,i="your-own-cdn"===n?"byocdn":"rocketcdn";window.wp.apiFetch({path:"/wp-rocket/v1/rocketcdn/driver",method:"POST",data:{driver:i}}).then(t=>{u(e.value=i,t.disable_rocket_cdn_elements)}).catch(()=>{e.value=t})}})}),e=d.querySelector(".wpr-cdn-tabs__tab--active"),(i=e?e.getAttribute("data-cdn-driver"):"rocketcdn")&&(s(i),p()),e)&&(o(e),l(i))}d.addEventListener("click",t=>{let a=t.target.closest(".wpr-cdn-pause");if(a){let n=a.classList.toggle("wpr-cdn-pause--paused"),r=(a.setAttribute("aria-pressed",n?"true":"false"),a.disabled=!0,d.querySelector(".rocketcdn .wpr-cdn-indicator__dot"));r&&(r.className="wpr-icon-orange-loader"),window.wp.apiFetch({path:"/wp-rocket/v1/rocketcdn/pause",method:"POST",data:{paused:n?0:1}}).then(()=>{r&&(r.className="wpr-cdn-indicator__dot"),a.disabled=!1,d.querySelector('label[for="cdn"]').click(),u("rocketcdn",n);var t,e,i=a.closest(".wpr-cdn-status");i&&(i.classList.toggle("wpr-cdn-status--paused",n),i.classList.toggle("wpr-cdn-status--long-details",n&&"1"===i.dataset.longDetails),(e=i.closest(".wpr-cdn-built-in"))&&e.classList.toggle("wpr-cdn-built-in--paused",n),p(),e=n?"pausedText":"activeText",(t=i.querySelector(".wpr-cdn-indicator__text"))&&i.dataset[e]&&(t.textContent=i.dataset[e]),t=n?"pausedDetails":"activeDetails",e=i.querySelector(".wpr-cdn-indicator__details"))&&i.dataset[t]&&(e.textContent=i.dataset[t])}).catch(()=>{a.classList.toggle("wpr-cdn-pause--paused",!n),a.setAttribute("aria-pressed",n?"false":"true"),a.disabled=!1,r&&(r.className="wpr-cdn-indicator__dot")})}}),d.addEventListener("click",t=>{let n=t.target.closest("#wpr_add_page_component .wpr-cdn-add-page__homepage");if(n){n.disabled=!0;let i=d.querySelector(".wpr-cdn-built-in");i&&i.classList.add("wpr-cdn-built-in--disabled"),window.wp.apiFetch({path:"/wp-rocket/v1/rocketcdn/pages/homepage",method:"POST"}).then(t=>{var e;n.classList.add("wpr-isHidden"),f(t.count,t.limit),i&&i.classList.remove("wpr-cdn-built-in--disabled"),t.items_html&&((e=d.querySelector(".wpr-cdn-built-in .wpr-table-list"))&&e.remove(),e=d.querySelector(".wpr-cdn-add-page"))&&e.insertAdjacentHTML("beforebegin",t.items_html),1===t.count&&d.dispatchEvent(new CustomEvent("rocketCDNBannerFirstVisible")),t.is_subscription_creation_loading&&m(),h(t.status_indicator_html)}).catch(()=>{n.disabled=!1,i&&i.classList.remove("wpr-cdn-built-in--disabled")})}});{let n=d.getElementById("wpr_cdn_add_page_input"),r=d.querySelector(".wpr-cdn-add-page__button");function a(){var t=n.value.trim();if((t=>{try{var e=new URL(t);return e.hostname.includes(".")&&0{var e;n.value="",n.disabled=!1,r.disabled=!1,c.classList.add("wpr-isHidden"),f(t.count,t.limit),i&&i.classList.remove("wpr-cdn-built-in--disabled"),t.items_html&&((e=d.querySelector(".wpr-cdn-built-in .wpr-table-list"))&&e.remove(),e=d.querySelector(".wpr-cdn-add-page"))&&e.insertAdjacentHTML("beforebegin",t.items_html),1===t.count&&d.dispatchEvent(new CustomEvent("rocketCDNBannerFirstVisible")),t.limit===t.count&&(d.querySelector(".wpr-cdn-built-in").classList.add("wpr-cdn-built-in--disabled"),(e=d.querySelector(".wpr-cdn-add-page__button-wrapper"))&&e.classList.add("wpr-btn-with-tool-tip"),(e=d.querySelector(".wpr-cdn-add-page__button"))&&(e.disabled=!0),_(!0)),t.is_subscription_creation_loading&&m(),h(t.status_indicator_html)}).catch(()=>{n.disabled=!1,r.disabled=!1,i&&i.classList.remove("wpr-cdn-built-in--disabled")})}else alert("Please enter a valid URL")}n&&r&&(r.addEventListener("click",a),n.addEventListener("keydown",t=>{"Enter"===t.key&&(t.preventDefault(),a())}))}{let i=d.querySelector("#wpr_add_page_component");i&&i.parentElement.addEventListener("click",t=>{let e=t.target.closest(".wpr-table-list__delete");e&&(t=e.dataset.id)&&(e.disabled=!0,window.wp.apiFetch({path:"/wp-rocket/v1/rocketcdn/pages/"+t,method:"DELETE"}).then(t=>{var e;f(t.count,t.limit),t.items_html&&((e=i.parentElement.querySelector(".wpr-cdn-built-in .wpr-table-list"))&&e.remove(),e=i.parentElement.querySelector(".wpr-cdn-add-page"))&&e.insertAdjacentHTML("beforebegin",t.items_html),0===t.count&&(d.querySelector(".wpr-cdn-built-in .wpr-table-list").remove(),e=i.querySelector(".wpr-cdn-add-page__homepage"))&&(e.classList.remove("wpr-isHidden"),e.disabled=!1),t.count{e.disabled=!1}))})}d.addEventListener("rocketJsAfterPageNavigation",t=>{var e;"none"!==getComputedStyle(t.detail.submitButton).display&&(e=[".wpr-icon-orange-loader",".wpr-cdn-built-in--disabled"].every(t=>null!==d.querySelector(t)),"page_cdn"!==t.detail.pageId?t.detail.submitButton.classList.contains("wpr-cdn-disabled")&&t.detail.submitButton.classList.remove("wpr-cdn-disabled"):e&&t.detail.submitButton.classList.add("wpr-cdn-disabled"))})});let c=d.querySelector("#wpr_add_page_component .wpr-cdn-add-page__homepage");function h(t){var e=d.querySelector(".wpr-cdn-built-in .wpr-cdn-status");e&&t&&(e.outerHTML=t)}function u(t,e){if("rocketcdn"===t)return e?void d.querySelectorAll(".cdn-shared-section, .rocketcdn-shared-section").forEach(t=>{t.classList.add("wpr-cdn-disabled")}):void d.querySelectorAll(".cdn-shared-section, .rocketcdn-shared-section").forEach(t=>{t.classList.remove("wpr-cdn-disabled")});d.querySelectorAll(".cdn-shared-section").forEach(t=>{t.classList.remove("wpr-cdn-disabled")})}function _(t){var e=d.querySelector(".wpr-cdn-add-page__button-wrapper .wpr-tooltip");e&&e.classList.toggle("wpr-isHidden",!t)}let r=null;function f(t,e){let i=d.getElementById("wpr-rocketcdn-cta");var n=d.getElementById("wpr-rocketcdn-reseller-limit-cta");(i||n)&&(null!==r&&(clearTimeout(r),r=null),e=e<=t,i&&i.classList.toggle("wpr-isHidden",0===t),n&&n.classList.toggle("wpr-isHidden",!e),i)&&(e?(i.classList.add("wpr-rocketcdn-cta---max-limit"),i.classList.contains("wpr-rocketcdn-cta--expanded")||(i.classList.add("wpr-rocketcdn-cta--collapsed"),i.classList.remove("wpr-rocketcdn-cta--expanded"),r=setTimeout(()=>{r=null,i.classList.remove("wpr-rocketcdn-cta--collapsed"),i.classList.add("wpr-rocketcdn-cta--expanded"),d.dispatchEvent(new CustomEvent("rocketCDNBannerAutoExpanded"))},15e3))):(i.classList.toggle("wpr-rocketcdn-cta--collapsed",0{t.classList.add("wpr-cdn-disabled");t=t.querySelector("textarea");t&&(t.disabled=!0)}),d.querySelector("#wpr-options-submit"));t&&t.classList.add("wpr-cdn-disabled"),d.dispatchEvent(new CustomEvent("rocketCDNSubscriptionLoading",{}))}d.addEventListener("rocketJsAfterPageNavigation",t=>{"page_cdn"!==t.detail.pageId&&null!==r&&(clearTimeout(r),r=null)})}},{}],6:[function(t,e,i){function n(t,r){t=document.getElementById(t);if(null===t)return;let a=t.querySelector(".rocket-countdown-days"),s=t.querySelector(".rocket-countdown-hours"),o=t.querySelector(".rocket-countdown-minutes"),l=t.querySelector(".rocket-countdown-seconds");function e(){n=1e3*(n=r)-Date.now(),t=Math.floor(n/1e3%60),e=Math.floor(n/1e3/60%60),i=Math.floor(n/36e5%24);var t,e,i,n={total:n,days:Math.floor(n/864e5),hours:i,minutes:e,seconds:t};n.total<0?clearInterval(c):(a.innerHTML=n.days,s.innerHTML=("0"+n.hours).slice(-2),o.innerHTML=("0"+n.minutes).slice(-2),l.innerHTML=("0"+n.seconds).slice(-2))}e();let c=setInterval(e,1e3)}if(Date.now||(Date.now=function(){return(new Date).getTime()}),void 0!==rocket_ajax_data.promo_end&&n("rocket-promo-countdown",rocket_ajax_data.promo_end),void 0!==rocket_ajax_data.license_expiration&&n("rocket-renew-countdown",rocket_ajax_data.license_expiration),void 0!==rocket_ajax_data.notice_end_time){var s="rocket-rucss-timer";var o=rocket_ajax_data.notice_end_time;let i=document.getElementById(s),n=document.getElementById("rocket-notice-saas-processing"),r=document.getElementById("rocket-notice-saas-success");if(null===i)return;function l(){var t,e=Date.now(),e=Math.floor((1e3*o-e)/1e3);if(e<=0)return clearInterval(a),null!==n&&n.classList.add("hidden"),null!==r&&r.classList.remove("hidden"),rocket_ajax_data.cron_disabled?void 0:((t=new FormData).append("action","rocket_spawn_cron"),t.append("nonce",rocket_ajax_data.nonce),void fetch(ajaxurl,{method:"POST",credentials:"same-origin",body:t}));i.innerHTML=e}l();let a=setInterval(l,1e3)}},{}],7:[function(t,e,i){t("../custom/custom-select.js");var l=jQuery;l(document).ready(function(){function t(t){var e=(t=l(t)).attr("id"),e=l('[data-parent="'+e+'"]');t.is(":checked")?(e.addClass("wpr-isOpen"),e.each(function(){var t;l(this).find("input[type=checkbox]").is(":checked")&&(t=l(this).find("input[type=checkbox]").attr("id"),l('[data-parent="'+t+'"]').addClass("wpr-isOpen"))})):(e.removeClass("wpr-isOpen"),e.each(function(){var t=l(this).find("input[type=checkbox]").attr("id");l('[data-parent="'+t+'"]').removeClass("wpr-isOpen")}))}function e(e,i){var t,n={val:i.val(),length:i.val().length};4{l(t).attr("checked",i?null:"checked")}):(e=l(e).closest(".wpr-list").find(".wpr-main-checkbox"),n=l.map(r,t=>{if(void 0!==l(t).attr("checked"))return t}),e.attr("checked",n.length===r.length?"checked":null))}),0{var i=l(e).parents(".wpr-list").find(".wpr-list-body input[type=checkbox]:not(:checked)").length;l(e).attr("checked",i<=0?"checked":null)});let s={checked:{},total:{}};l(".wpr-field--categorizedmultiselect .wpr-list").each(function(){var t=l(this).attr("id");t&&(s.checked[t]=l(`#${t} input[type='checkbox']:checked`).length,s.total[t]=l(`#${t} input[type='checkbox']:not(.wpr-main-checkbox)`).length,l(`#${t} .wpr-badge-counter span`).text(s.checked[t]),l(`#${t} .wpr-badge-counter`).toggle(0"symbol"==typeof(t=((t,e)=>{if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0===i)return("string"===e?String:Number)(t);if("object"!=typeof(i=i.call(t,e||"default")))return i;throw new TypeError("@@toPrimitive must return a primitive value.")})(t,"string"))?t:t+"")(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i}(class r{constructor(t){n(this,"trackedTabs",["dashboard","rocket_insights","page_cdn","file_optimization","media","preload","advanced_cache","database","heartbeat","addons","imagify","tutorials","plugins","tools"]),this.config=t}init(){"undefined"!=typeof mixpanel&&mixpanel.track&&this.config.optin_enabled&&"0"!==this.config.optin_enabled&&(mixpanel.identify(this.config.user_id),this._initListeners(this))}_initListeners(t){window.addEventListener("hashchange",t._onHashChange.bind(t)),window.addEventListener("load",t._onPageLoad.bind(t))}_onHashChange(t){var e=this._cleanHash(new URL(t.oldURL).hash),t=this._cleanHash(new URL(t.newURL).hash);this._canTrackTab(t)&&this._sendPageViewedEvent(this._getSource(e),t)}_onPageLoad(){var t=this._cleanHash(window.location.hash);this._canTrackTab(t)&&this._sendPageViewedEvent(this._getSource(),t)}_cleanHash(t){return t&&t.startsWith("#")?t.substring(1):t}_canTrackTab(t){return this.trackedTabs.includes(t)}_getSource(t=""){return t?"settings_"+t:this._getSourceFromQueryStringAndRemoveIt()||this._getSourceFromReferrer()}_getSourceFromQueryStringAndRemoveIt(){var t,e=new URL(window.location.href),i=e.searchParams;return i.has("rocket_source")?(t=i.get("rocket_source"),i.delete("rocket_source"),window.history.replaceState(null,"",e.search?e.href:e.pathname),t):""}_getSourceFromReferrer(){var t=document.referrer;return t?t.includes(window.location.hostname)?"internal":"external":"noreferrer"}_sendPageViewedEvent(t,e){mixpanel.track("Page Viewed",{path:"/wp-admin/options-general.php?page=wprocket#"+e,page_name:e.replace("_"," "),source:t,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,context:rocket_mixpanel_data.context})}static run(){"undefined"!=typeof rocket_mixpanel_data&&new r(rocket_mixpanel_data).init()}}).run()},{}],10:[function(t,e,i){function n(t){var e,i=this;this.$body=document.querySelector(".wpr-body"),this.$menuItems=document.querySelectorAll(".wpr-menuItem"),this.$submitButton=document.querySelector(".wpr-Content > form > #wpr-options-submit"),this.$pages=document.querySelectorAll(".wpr-Page"),this.$sidebar=document.querySelector(".wpr-Sidebar"),this.$content=document.querySelector(".wpr-Content"),this.$tips=document.querySelector(".wpr-Content-tips"),this.$links=document.querySelectorAll(".wpr-body a"),this.$menuItem=null,this.$page=null,this.pageId=null,this.bodyTop=0,this.buttonText=this.$submitButton.value,i.getBodyTop(),window.onhashchange=function(){i.detectID()},window.location.hash?(this.bodyTop=0,this.detectID()):(e=localStorage.getItem("wpr-hash"),this.bodyTop=0,e?(window.location.hash=e,this.detectID()):(this.$menuItems[0].classList.add("isActive"),localStorage.setItem("wpr-hash","dashboard"),window.location.hash="#dashboard"));for(var n=0;n{window.wp&&window.wp.apiFetch?window.wp.apiFetch({path:"/wp-rocket/v1/recommendations"}).then(function(t){e(t)}).catch(function(t){console.error("Failed to fetch recommendations status:",t)}):fetch(window.wpApiSettings?.root+"wp-rocket/v1/recommendations",{headers:{"X-WP-Nonce":window.wpApiSettings?.nonce||""}}).then(function(t){if(t.ok)return t.json();throw new Error("Network response was not ok")}).then(function(t){e(t)}).catch(function(t){console.error("Failed to fetch recommendations status:",t)})})})},{}],12:[function(t,e,i){var n;n=document,new class{constructor(){this.path="/wp-rocket/v1/rocketcdn/subscription",this.pollInterval=1e4,this.maxRetries=60,this.timerId=null,this.retryCount=0,n.addEventListener("rocketCDNSubscriptionLoading",()=>this.start());[".wpr-icon-orange-loader",".wpr-cdn-built-in--disabled"].every(t=>null!==n.querySelector(t))&&this.start()}start(){this.timerId||(this.retryCount=0,this.poll())}stop(){this.timerId&&(clearTimeout(this.timerId),this.timerId=null)}poll(){this.retryCount>=this.maxRetries?this.stop():(this.retryCount++,window.wp.apiFetch({path:this.path,method:"GET"}).then(t=>{t&&t.is_loading?this.timerId=setTimeout(()=>this.poll(),this.pollInterval):(this.stop(),window.location.reload())}).catch(()=>{this.timerId=setTimeout(()=>this.poll(),this.pollInterval)}))}}},{}],13:[function(t,e,i){{var c=document,s=window;let i={OPENED:!1,COLLAPSED:!0};function n(){return"#page_cdn"===s.location.hash}function o(){var t=c.querySelector("#wpr-rocketcdn-cta-small"),e=c.querySelector("#wpr-rocketcdn-cta");e&&!e.classList.contains("wpr-isHidden")?p(i.OPENED):t&&!t.classList.contains("wpr-isHidden")&&p(i.COLLAPSED)}function r(){var t=c.getElementById("rocketcdn-iframe");t&&t.dataset&&t.dataset.src&&t.dataset.src!==t.src&&(t.src=t.dataset.src,MicroModal.show("wpr-rocketcdn-modal"))}function d(t){var e=new XMLHttpRequest;return e.open("POST",ajaxurl),e.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),e.send(t),e}function l(){var t;n()&&(t=c.querySelector(".wpr-cdn-tabs__tab--active"))&&(t=t.getAttribute("data-cdn-mode"))&&"undefined"!=typeof mixpanel&&mixpanel.track&&"undefined"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&"0"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&"function"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track("RocketCDN Mode",{context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,cdn_mode:t}))}function a(t,e){if("undefined"!=typeof mixpanel&&mixpanel.track&&"undefined"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&"0"!==rocket_mixpanel_data.optin_enabled&&rocket_mixpanel_data.user_id&&"function"==typeof mixpanel.identify){mixpanel.identify(rocket_mixpanel_data.user_id);var i={context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,path:rocket_mixpanel_data.path};if(e&&"object"==typeof e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(i[n]=e[n]);mixpanel.track(t,i)}}function p(t=!1){n()&&a("RocketCDN Upsell Banner Viewed",{state:t?"collapsed":"opened",page_name:t=s.location.hash,path:("undefined"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.path?rocket_mixpanel_data.path:"")+t})}function h(t){a("RocketCDN Upsell Banner Expanded",{location:s.location.hash,trigger:t})}function u(t="manual"){a("RocketCDN Upsell Banner Collapsed",{location:s.location.hash,trigger:t})}c.addEventListener("wpr-cdn-state-change",l),c.addEventListener("rocketCDNBannerAutoExpanded",()=>h("auto_limit_reached")),c.addEventListener("rocketCDNBannerAutoCollapsed",()=>u("auto_limit_released")),c.addEventListener("rocketCDNBannerFirstVisible",()=>p(i.COLLAPSED)),c.addEventListener("DOMContentLoaded",()=>{if(c.querySelectorAll(".wpr-rocketcdn-open").forEach(n=>{n.addEventListener("click",t=>{t.preventDefault();var e,t=n.classList.contains("wpr-rocketcdn-pricing--cta"),i=!s.rocketcdnButtonUrl;t&&(t=i,e=(e=c.querySelector(".wpr-cdn-built-in .wpr-table-list"))?e.querySelectorAll("[data-id]").length:0,a("RocketCDN Upsell CTA Clicked",{destination:t?"iframe":"express-checkout",pages_count:e})),i?r():setTimeout(function(){s.location.href=s.rocketcdnButtonUrl},100)})}),MicroModal.init({disableScroll:!0}),(e=new URLSearchParams(s.location.search)).has("rocketcdn_open_iframe")&&"1"===e.get("rocketcdn_open_iframe")&&(s.location.hash="#page_cdn",r(),e.delete("rocketcdn_open_iframe"),e=e.toString(),e=s.location.pathname+(e?"?"+e:"")+s.location.hash,s.history.replaceState({},"",e)),!s.rocketcdnButtonUrl||""===s.rocketcdnButtonUrl){{let t="",e=d(t=(t+="action=rocketcdn_process_status")+"&nonce="+rocket_ajax_data.nonce);e.onreadystatechange=()=>{e.readyState===XMLHttpRequest.DONE&&200===e.status&&!0===JSON.parse(e.responseText).success&&r()}}var e=c.getElementById("rocketcdn-iframe");let t=c.getElementById("wpr-rocketcdn-modal-loader");e&&t&&e.addEventListener("load",function(){t.style.display="none"})}}),s.addEventListener("load",()=>{c.querySelector("#wpr-rocketcdn-open-cta"),c.querySelector("#wpr-rocketcdn-close-cta"),c.querySelector("#wpr-rocketcdn-cta-small");let t=c.querySelector("#wpr-rocketcdn-cta"),e=c.querySelector(".wpr-rocketcdn-toggle--input"),i=c.querySelectorAll(".wpr-rocketcdn-cta-toggle");function n(){if(t&&i.length){let e=t.classList.toggle("wpr-rocketcdn-cta--collapsed");t.classList.toggle("wpr-rocketcdn-cta--expanded",!e),i.forEach(t=>{t.setAttribute("aria-expanded",e?"false":"true")}),e?u():h("manual")}}i.length&&t&&i.forEach(t=>{t.addEventListener("click",n),t.addEventListener("keydown",t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),n())})}),o(),s.addEventListener("hashchange",()=>{o(),l()});let r={monthly:{regular:c.querySelectorAll(".wpr-rocketcdn-pricing-regular-price--monthly"),current:c.querySelectorAll(".wpr-rocketcdn-pricing--monthly"),period:c.querySelectorAll(".wpr-rocketcdn-pricing--billing-period--monthly")},yearly:{regular:c.querySelectorAll(".wpr-rocketcdn-pricing-regular-price--yearly"),current:c.querySelectorAll(".wpr-rocketcdn-pricing--annual"),period:c.querySelectorAll(".wpr-rocketcdn-pricing--billing-period--yearly")}};e&&e.addEventListener("change",function(){var t=this.checked;t?(Object.values(r.monthly).forEach(t=>t.forEach(t=>t.classList.add("wpr-isHidden"))),Object.values(r.yearly).forEach(t=>t.forEach(t=>t.classList.remove("wpr-isHidden")))):(Object.values(r.monthly).forEach(t=>t.forEach(t=>t.classList.remove("wpr-isHidden"))),Object.values(r.yearly).forEach(t=>t.forEach(t=>t.classList.add("wpr-isHidden")))),t=t,s.rocketcdnButtonUrl&&""!==s.rocketcdnButtonUrl&&(s.rocketcdnButtonUrl=((t,e)=>{let i=t.replace(/([?&])is_monthly=[^&]*/g,""),n=i.includes("?")?"&":"?";return i+=n+"is_monthly="+(e?"0":"1")})(s.rocketcdnButtonUrl,t))});var a=c.querySelector("#wpr-rocketcdn-activation-cta");a&&a.addEventListener("click",()=>{"undefined"!=typeof mixpanel&&mixpanel.track&&"undefined"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&"0"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&"function"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track("RocketCDN Activation Failed CTA Clicked",{context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app}))})}),s.onmessage=t=>{var e=rocket_ajax_data.origin_url;if(t.origin===e){(n=t.data).hasOwnProperty("cdnFrameHeight")&&(c.getElementById("rocketcdn-iframe").style.height=n.cdnFrameHeight+"px"),(n=t.data).hasOwnProperty("cdnFrameClose")&&(MicroModal.close("wpr-rocketcdn-modal"),c.body.style.overflow="",n.hasOwnProperty("cdn_page_message"))&&-1!==["iframe-payment-success","iframe-unsubscribe-success"].indexOf(n.cdn_page_message)&&c.location.reload();{var n=t.data;var r=e;let i=c.querySelector("#rocketcdn-iframe").contentWindow;if(n.hasOwnProperty("rocketcdn_token")){var a="";let e=d(a+"action=save_rocketcdn_token"+("&value="+n.rocketcdn_token)+("&nonce="+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},r))}}else{a={process:"subscribe",message:"token_not_received"};i.postMessage({success:!1,data:a,rocketcdn:!0},r)}}(n=t.data).hasOwnProperty("rocketcdn_process")&&d(""+"action=rocketcdn_process_set"+("&status="+n.rocketcdn_process)+("&nonce="+rocket_ajax_data.nonce));{var n=t.data;var s=e;let i=c.querySelector("#rocketcdn-iframe").contentWindow;if(n.hasOwnProperty("rocketcdn_url")){var o="";let e=d(o+"action=rocketcdn_enable"+("&cdn_url="+n.rocketcdn_url)+("&nonce="+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},s))}}}{o=t.data;var l=e;let i=c.querySelector("#rocketcdn-iframe").contentWindow;if(o.hasOwnProperty("rocketcdn_disable")){o="";let e=d((o+="action=rocketcdn_disable")+("&nonce="+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},l))}}}(n=t.data).hasOwnProperty("rocketcdn_validate_token")&&n.hasOwnProperty("rocketcdn_validate_cname")&&d(""+"action=rocketcdn_validate_token_cname"+("&cdn_url="+n.rocketcdn_validate_cname)+("&cdn_token="+n.rocketcdn_validate_token)+("&nonce="+rocket_ajax_data.nonce))}}}},{}],14:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(d,p,h){function u(t){p.call(this,t),this._labels={},this.autoRemoveChildren=!0===this.vars.autoRemoveChildren,this.smoothChildTiming=!0===this.vars.smoothChildTiming,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var e,i,n=this.vars;for(i in n)e=n[i],g(e)&&-1!==e.join("").indexOf("{self}")&&(n[i]=this._swapSelfInParams(e));g(n.tweens)&&this.add(n.tweens,0,n.align,n.stagger)}function _(t){var e,i={};for(e in t)i[e]=t[e];return i}function r(t,e,i,n){t._timeline.pause(t._startTime),e&&e.apply(n||t._timeline,i||w)}var f=1e-10,m=h._internals.isSelector,g=h._internals.isArray,w=[],s=window._gsDefine.globals,v=w.slice,t=u.prototype=new p;return u.version="1.12.1",t.constructor=u,t.kill()._gc=!1,t.to=function(t,e,i,n){var r=i.repeat&&s.TweenMax||h;return e?this.add(new r(t,e,i),n):this.set(t,i,n)},t.from=function(t,e,i,n){return this.add((i.repeat&&s.TweenMax||h).from(t,e,i),n)},t.fromTo=function(t,e,i,n,r){var a=n.repeat&&s.TweenMax||h;return e?this.add(a.fromTo(t,e,i,n),r):this.set(t,n,r)},t.staggerTo=function(t,e,i,n,r,a,s,o){var l,c=new u({onComplete:a,onCompleteParams:s,onCompleteScope:o,smoothChildTiming:this.smoothChildTiming});for("string"==typeof t&&(t=h.selector(t)||t),m(t)&&(t=v.call(t,0)),n=n||0,l=0;t.length>l;l++)i.startAt&&(i.startAt=_(i.startAt)),c.to(t[l],e,_(i),l*n);return this.add(c,r)},t.staggerFrom=function(t,e,i,n,r,a,s,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,n,r,a,s,o)},t.staggerFromTo=function(t,e,i,n,r,a,s,o,l){return n.startAt=i,n.immediateRender=0!=n.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,n,r,a,s,o,l)},t.call=function(t,e,i,n){return this.add(h.delayedCall(0,t,e,i),n)},t.set=function(t,e,i){return i=this._parseTimeOrLabel(i,0,!0),null==e.immediateRender&&(e.immediateRender=i===this._time&&!this._paused),this.add(new h(t,0,e),i)},u.exportRoot=function(t,e){null==(t=t||{}).smoothChildTiming&&(t.smoothChildTiming=!0);var i,n,r=new u(t),t=r._timeline;for(null==e&&(e=!0),t._remove(r,!0),r._startTime=0,r._rawPrevTime=r._time=r._totalTime=t._time,i=t._first;i;)n=i._next,e&&i instanceof h&&i.target===i.vars.onComplete||r.add(i,i._startTime-i._delay),i=n;return t.add(r,0),r},t.add=function(t,e,i,n){var r,a,s,o,l,c;if("number"!=typeof e&&(e=this._parseTimeOrLabel(e,0,!0,t)),!(t instanceof d)){if(t instanceof Array||t&&t.push&&g(t)){for(i=i||"normal",n=n||0,r=e,a=t.length,s=0;st._startTime;l._timeline;)c&&l._timeline.smoothChildTiming?l.totalTime(l._totalTime,!0):l._gc&&l._enabled(!0,!1),l=l._timeline;return this},t.remove=function(t){if(t instanceof d)return this._remove(t,!1);if(t instanceof Array||t&&t.push&&g(t)){for(var e=t.length;-1<--e;)this.remove(t[e]);return this}return"string"==typeof t?this.removeLabel(t):this.kill(null,t)},t._remove=function(t,e){p.prototype._remove.call(this,t,e);t=this._last;return t?this._time>t._startTime+t._totalDuration/t._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},t.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},t.insert=t.insertMultiple=function(t,e,i,n){return this.add(t,e||0,i,n)},t.appendMultiple=function(t,e,i,n){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,n)},t.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},t.addPause=function(t,e,i,n){return this.call(r,["{self}",e,i,n],this,t)},t.removeLabel=function(t){return delete this._labels[t],this},t.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},t._parseTimeOrLabel=function(t,e,i,n){var r;if(n instanceof d&&n.timeline===this)this.remove(n);else if(n&&(n instanceof Array||n.push&&g(n)))for(r=n.length;-1<--r;)n[r]instanceof d&&n[r].timeline===this&&this.remove(n[r]);if("string"==typeof e)return this._parseTimeOrLabel(e,i&&"number"==typeof t&&null==this._labels[e]?t-this.duration():0,i);if(e=e||0,"string"!=typeof t||!isNaN(t)&&null==this._labels[t])null==t&&(t=this.duration());else{if(-1===(r=t.indexOf("=")))return null==this._labels[t]?i?this._labels[t]=this.duration()+e:e:this._labels[t]+e;e=parseInt(t.charAt(r-1)+"1",10)*Number(t.substr(r+1)),t=1f)&&(s="onReverseComplete")),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:f,t=l+1e-4):t<1e-7?(((this._totalTime=this._time=0)!==c||0===this._duration&&this._rawPrevTime!==f&&(0=c)for(n=this._first;n&&(a=n._next,!this._paused||h);)(n._active||n._startTime<=this._time&&!n._paused&&!n._gc)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=a;else for(n=this._last;n&&(a=n._prev,!this._paused||h);)(n._active||c>=n._startTime&&!n._paused&&!n._gc)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=a;this._onUpdate&&!e&&this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||w),!s||this._gc||d!==this._startTime&&p===this._timeScale||!(0===this._time||l>=this.totalDuration())||(r&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),e)||!this.vars[s]||this.vars[s].apply(this.vars[s+"Scope"]||this,this.vars[s+"Params"]||w)}},t._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof u&&t._hasPausedChild())return!0;t=t._next}return!1},t.getChildren=function(t,e,i,n){n=n||-9999999999;for(var r=[],a=this._first,s=0;a;)n>a._startTime||(a instanceof h?!1!==e&&(r[s++]=a):(!1!==i&&(r[s++]=a),!1!==t&&(s=(r=r.concat(a.getChildren(!0,e,i))).length))),a=a._next;return r},t.getTweensOf=function(t,e){var i,n,r=this._gc,a=[],s=0;for(r&&this._enabled(!0,!0),n=(i=h.getTweensOf(t)).length;-1<--n;)(i[n].timeline===this||e&&this._contains(i[n]))&&(a[s++]=i[n]);return r&&this._enabled(!1,!0),a},t._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},t.shiftChildren=function(t,e,i){i=i||0;for(var n,r=this._first,a=this._labels;r;)r._startTime>=i&&(r._startTime+=t),r=r._next;if(e)for(n in a)a[n]>=i&&(a[n]+=t);return this._uncache(!0)},t._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),n=i.length,r=!1;-1<--n;)i[n]._kill(t,e)&&(r=!0);return r},t.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;-1<--i;)e[i]._enabled(!1,!1);return!1!==t&&(this._labels={}),this._uncache(!0)},t.invalidate=function(){for(var t=this._first;t;)t.invalidate(),t=t._next;return this},t._enabled=function(t,e){if(t===this._gc)for(var i=this._first;i;)i._enabled(t,!0),i=i._next;return p.prototype._enabled.call(this,t,e)},t.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},t.totalDuration=function(t){if(arguments.length)return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this;if(this._dirty){for(var e,i,n=0,r=this._last,a=999999999999;r;)e=r._prev,r._dirty&&r.totalDuration(),r._startTime>a&&this._sortChildren&&!r._paused?this.add(r,r._startTime-r._delay):a=r._startTime,r._startTime<0&&!r._paused&&(n-=r._startTime,this._timeline.smoothChildTiming&&(this._startTime+=r._startTime/this._timeScale),this.shiftChildren(-r._startTime,!1,-9999999999),a=0),n<(i=r._startTime+r._totalDuration/r._timeScale)&&(n=i),r=e;this._duration=this._totalDuration=n,this._dirty=!1}return this._totalDuration},t.usesFrames=function(){for(var t=this._timeline;t._timeline;)t=t._timeline;return t===d._rootFramesTimeline},t.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},u},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],15:[function(j,h,q){var e,B,_=window,u=_.GreenSockGlobals||_;if(!u.TweenLite){var f,X=function(t){for(var e=t.split("."),i=u,n=0;e.length>n;n++)i[e[n]]=i=i[e[n]]||{};return i},p=X("com.greensock"),m=1e-10,N=[].slice,F=function(){},g=(e=Object.prototype.toString,B=e.call([]),function(t){return null!=t&&(t instanceof Array||"object"==typeof t&&!!t.push&&e.call(t)===B)}),w={},z=function(o,l,c,d){this.sc=w[o]?w[o].sc:[],(w[o]=this).gsClass=null,this.func=c;var p=[];this.check=function(t){for(var e,i,n,r,a=l.length,s=a;-1<--a;)(e=w[l[a]]||new z(l[a],[])).gsClass?(p[a]=e.gsClass,s--):t&&e.sc.push(this);if(0===s&&c)for(n=(i=("com.greensock."+o).split(".")).pop(),r=X(i.join("."))[n]=this.gsClass=c.apply(c,p),d&&(u[n]=r,"function"==typeof define&&define.amd?define((_.GreenSockAMDPath?_.GreenSockAMDPath+"/":"")+o.split(".").join("/"),[],function(){return r}):void 0!==h&&h.exports&&(h.exports=r)),a=0;this.sc.length>a;a++)this.sc[a].check()},this.check(!0)},n=_._gsDefine=function(t,e,i,n){return new z(t,e,i,n)},v=p._class=function(t,e,i){return e=e||function(){},n(t,[],function(){return e},i),e},H=(n.globals=u,[0,0,1,1]),y=[],d=v("easing.Ease",function(t,e,i,n){this._func=t,this._type=i||0,this._power=n||0,this._params=e?H.concat(e):H},!0),b=d.map={},t=d.register=function(t,e,i,n){for(var r,a,s,o,l=e.split(","),c=l.length,d=(i||"easeIn,easeOut,easeInOut").split(",");-1<--c;)for(a=l[c],r=n?v("easing."+a,null,!0):p.easing[a]||{},s=d.length;-1<--s;)o=d[s],b[a+"."+o]=b[o+a]=r[o]=t.getRatio?t:t[o]||new t},i=d.prototype;for(i._calcEnd=!1,i.getRatio=function(t){var e,i,n;return this._func?(this._params[0]=t,this._func.apply(null,this._params)):(n=1===(e=this._type)?1-t:2===e?t:t<.5?2*t:2*(1-t),1===(i=this._power)?n*=n:2===i?n*=n*n:3===i?n*=n*n*n:4===i&&(n*=n*n*n*n),1===e?1-n:2===e?n:t<.5?n/2:1-n/2)},a=(r=["Linear","Quad","Cubic","Quart","Quint,Strong"]).length;-1<--a;)i=r[a]+",Power"+a,t(new d(null,null,1,a),i,"easeOut",!0),t(new d(null,null,2,a),i,"easeIn"+(0===a?",easeNone":"")),t(new d(null,null,3,a),i,"easeInOut");b.linear=p.easing.Linear.easeIn,b.swing=p.easing.Quad.easeInOut;for(var r,Y=v("events.EventDispatcher",function(t){this._listeners={},this._eventTarget=t||this}),k=((i=Y.prototype).addEventListener=function(t,e,i,n,r){r=r||0;var a,s,o=this._listeners[t],l=0;for(null==o&&(this._listeners[t]=o=[]),s=o.length;-1<--s;)(a=o[s]).c===e&&a.s===i?o.splice(s,1):0===l&&r>a.pr&&(l=s+1);o.splice(l,0,{c:e,s:i,up:n,pr:r}),this!==P||f||P.wake()},i.removeEventListener=function(t,e){var i,n=this._listeners[t];if(n)for(i=n.length;-1<--i;)if(n[i].c===e)return void n.splice(i,1)},i.dispatchEvent=function(t){var e,i,n,r=this._listeners[t];if(r)for(e=r.length,i=this._eventTarget;-1<--e;)(n=r[e]).up?n.c.call(n.s||i,{type:t,target:i}):n.c.call(n.s||i)},_.requestAnimationFrame),x=_.cancelAnimationFrame,T=Date.now||function(){return(new Date).getTime()},S=T(),a=(r=["ms","moz","webkit","o"]).length;-1<--a&&!k;)k=_[r[a]+"RequestAnimationFrame"],x=_[r[a]+"CancelAnimationFrame"]||_[r[a]+"CancelRequestAnimationFrame"];v("Ticker",function(t,e){var n,r,a,s,o,l=this,c=T(),i=!1!==e&&k,d=500,p=33,h=function(t){var e,i=T()-S;d=e&&e+this.totalDuration()/this._timeScale>t},i._enabled=function(t,e){return f||P.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},i._kill=function(){return this._enabled(!1,!1)},i.kill=function(t,e){return this._kill(t,e),this},i._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},i._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();-1<--e;)"{self}"===t[e]&&(i[e]=this);return i},i.eventCallback=function(t,e,i,n){if("on"===(t||"").substr(0,2)){var r=this.vars;if(1===arguments.length)return r[t];null==e?delete r[t]:(r[t]=e,r[t+"Params"]=g(i)&&-1!==i.join("").indexOf("{self}")?this._swapSelfInParams(i):i,r[t+"Scope"]=n),"onUpdate"===t&&(this._onUpdate=e)}return this},i.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},i.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&0this._duration?this._duration:t,e)):this._time},i.totalTime=function(t,e,i){if(f||P.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var n=this._totalDuration,r=this._timeline;if(nn;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._timeline&&this._uncache(!0),this},i._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t.timeline=null,t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),this._timeline)&&this._uncache(!0),this},i.render=function(t,e,i){var n,r=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;r;)n=r._next,(r._active||t>=r._startTime&&!r._paused)&&(r._reversed?r.render((r._dirty?r.totalDuration():r._totalDuration)-(t-r._startTime)*r._timeScale,e,i):r.render((t-r._startTime)*r._timeScale,e,i)),r=n},i.rawTime=function(){return f||P.wake(),this._totalTime},v("TweenLite",function(t,e,i){if(o.call(this,e,i),this.render=C.prototype.render,null==t)throw"Cannot tween a null target.";this.target=t="string"==typeof t&&C.selector(t)||t;var n,r,a,i=t.jquery||t.length&&t!==_&&t[0]&&(t[0]===_||t[0].nodeType&&t[0].style&&!t.nodeType),s=this.vars.overwrite;if(this._overwrite=s=null==s?Q[C.defaultOverwrite]:"number"==typeof s?s>>0:Q[s],(i||t instanceof Array||t.push&&g(t))&&"number"!=typeof t[0])for(this._targets=a=N.call(t,0),this._propLookup=[],this._siblings=[],n=0;a.length>n;n++)(r=a[n])?"string"!=typeof r?r.length&&r!==_&&r[0]&&(r[0]===_||r[0].nodeType&&r[0].style&&!r.nodeType)?(a.splice(n--,1),this._targets=a=a.concat(N.call(r,0))):(this._siblings[n]=M(r,this,!1),1===s&&1=s._startTime&&s._startTime+s.totalDuration()/s._timeScale>c&&((h||!s._initted)&&c-s._startTime<=2e-10||(d[p++]=s)));for(u=p;-1<--u;)s=d[u],2===n&&s._kill(i,t)&&(a=!0),(2!==n||!s._firstPT&&s._initted)&&s._enabled(!1,!1)&&(a=!0)}return a},Z=function(t,e,i){for(var n=t._timeline,r=n._timeScale,a=t._startTime;n._timeline;){if(a+=n._startTime,r*=n._timeScale,n._paused)return-100;n=n._timeline}return e<(a/=r)?a-e:i&&a===e||!t._initted&&a-e<2*m?m:(a+=t.totalDuration()/t._timeScale/r)>e+m?0:a-e-m},D=(i._init=function(){var t,e,i,n,r,a=this.vars,s=this._overwrittenProps,o=this._duration,l=!!a.immediateRender,c=a.ease;if(a.startAt){for(n in this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),r={},a.startAt)r[n]=a.startAt[n];if(r.overwrite=!1,r.immediateRender=!0,r.lazy=l&&!1!==a.lazy,r.startAt=r.delay=null,this._startAt=C.to(this.target,0,r),l)if(0o.pr;)n=n._next;(o._prev=n?n._prev:a)?o._prev._next=o:r=o,(o._next=n)?n._prev=o:a=o,o=s}o=e._firstPT=r}for(;o;)o.pg&&"function"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},D.activate=function(t){for(var e=t.length;-1<--e;)t[e].API===D.API&&(E[(new t[e])._propName]=t[e]);return!0},n.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw"illegal plugin definition.";var e,i=t.propName,n=t.priority||0,r=t.overwriteProps,a={init:"_onInitTween",set:"setRatio",kill:"_kill",round:"_roundProps",initAll:"_onInitAllProps"},s=v("plugins."+i.charAt(0).toUpperCase()+i.substr(1)+"Plugin",function(){D.call(this,i,n),this._overwriteProps=r||[]},!0===t.global),o=s.prototype=new D(i);for(e in(o.constructor=s).API=t.API,a)"function"==typeof t[e]&&(o[a[e]]=t[e]);return s.version=t.version,D.activate([s]),s},r=_._gsQueue){for(a=0;r.length>a;a++)r[a]();for(i in w)w[i].func||_.console.log("GSAP encountered missing dependency: com.greensock."+i)}f=!1}},{}],16:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("easing.Back",["easing.Ease"],function(m){function t(t,e){var i=(t=c("easing."+t,function(){},!0)).prototype=new m;return i.constructor=t,i.getRatio=e,t}function e(t,e,i,n){return e=c("easing."+t,{easeOut:new e,easeIn:new i,easeInOut:new n},!0),d(e,t),e}function g(t,e,i){this.t=t,this.v=e,i&&(((this.next=i).prev=this).c=i.v-e,this.gap=i.t-t)}function i(t,e){var i=c("easing."+t,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,t.config=function(t){return new i(t)},i}var n,r,a=window.GreenSockGlobals||window,s=a.com.greensock,o=2*Math.PI,l=Math.PI/2,c=s._class,d=m.register||function(){},s=e("Back",i("BackOut",function(t){return--t*t*((this._p1+1)*t+this._p1)+1}),i("BackIn",function(t){return t*t*((this._p1+1)*t-this._p1)}),i("BackInOut",function(t){return(t*=2)<1?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),p=c("easing.SlowMo",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:1t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},p.ease=new p(.7,.7),h.config=p.config=function(t,e,i){return new p(t,e,i)},(h=(n=c("easing.SteppedEase",function(t){this._p1=1/(t=t||1),this._p2=t+1},!0)).prototype=new m).constructor=n,h.getRatio=function(t){return t<0?t=0:1<=t&&(t=.999999999),(this._p2*t>>0)*this._p1},h.config=n.config=function(t){return new n(t)},(h=(r=c("easing.RoughEase",function(t){for(var e,i,n,r,a,s,o=(t=t||{}).taper||"none",l=[],c=0,d=0|(t.points||20),p=d,h=!1!==t.randomize,u=!0===t.clamp,_=t.template instanceof m?t.template:null,f="number"==typeof t.strength?.4*t.strength:.4;-1<--p;)e=h?Math.random():1/d*p,i=_?_.getRatio(e):e,n="none"===o?f:"out"===o?(r=1-e)*r*f:"in"===o?e*e*f:.5*(r=e<.5?2*e:2*(1-e))*r*f,h?i+=Math.random()*n-.5*n:p%2?i+=.5*n:i-=.5*n,u&&(1e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return(this._prev=e).v+(t-e.t)/e.gap*e.c},h.config=function(t){return new r(t)},r.ease=new r,e("Bounce",t("BounceOut",function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),t("BounceIn",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),t("BounceInOut",function(t){var e=t<.5;return t=(t=e?1-2*t:2*t-1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),e("Circ",t("CircOut",function(t){return Math.sqrt(1- --t*t)}),t("CircIn",function(t){return-(Math.sqrt(1-t*t)-1)}),t("CircInOut",function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),e("Elastic",(h=function(t,e,i){var n=c("easing."+t,function(t,e){this._p1=t||1,this._p2=e||i,this._p3=this._p2/o*(Math.asin(1/this._p1)||0)},!0),t=n.prototype=new m;return t.constructor=n,t.getRatio=e,t.config=function(t,e){return new n(t,e)},n})("ElasticOut",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*o/this._p2)+1},.3),h("ElasticIn",function(t){return-(this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2))},.3),h("ElasticInOut",function(t){return(t*=2)<1?-.5*this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2):.5*this._p1*Math.pow(2,-10*--t)*Math.sin((t-this._p3)*o/this._p2)+1},.45)),e("Expo",t("ExpoOut",function(t){return 1-Math.pow(2,-10*t)}),t("ExpoIn",function(t){return Math.pow(2,10*(t-1))-.001}),t("ExpoInOut",function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),e("Sine",t("SineOut",function(t){return Math.sin(t*l)}),t("SineIn",function(t){return 1-Math.cos(t*l)}),t("SineInOut",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),c("easing.EaseLookup",{find:function(t){return m.map[t]}},!0),d(a.SlowMo,"SlowMo","ease,"),d(r,"RoughEase","ease,"),d(n,"SteppedEase","ease,"),s},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],17:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(a,h){function X(){a.call(this,"css"),this._overwriteProps.length=0,this.setRatio=X.prototype.setRatio}var u,b,k,p,_={},t=X.prototype=new a("css");(t.constructor=X).version="1.12.1",X.API=2,X.defaultTransformPerspective=0,X.defaultSkewType="compensated",X.suffixMap={top:t="px",right:t,bottom:t,left:t,width:t,height:t,fontSize:t,padding:t,margin:t,perspective:t,lineHeight:""};function s(t,e){return e.toUpperCase()}function o(t){return tt.test("string"==typeof t?t:(t.currentStyle||t.style).filter||"")?parseFloat(RegExp.$1)/100:1}function D(t){window.console&&console.log(t)}function x(t,e){var i,n,r=(e=e||C).style;if(void 0!==r[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=["O","Moz","ms","Ms","Webkit"],n=5;-1<--n&&void 0===r[i[n]+t];);return 0<=n?(pt="-"+(ht=3===n?"ms":i[n]).toLowerCase()+"-",ht+t):null}function f(t,e){var i,n={};if(e=e||m(t,null))if(i=e.length)for(;-1<--i;)n[e[i].replace(at,s)]=e.getPropertyValue(e[i]);else for(i in e)n[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)"string"==typeof i&&void 0===n[i]&&(n[i.replace(at,s)]=e[i]);return L||(n.opacity=o(t)),t=M(t,e,!1),n.rotation=t.rotation,n.skewX=t.skewX,n.scaleX=t.scaleX,n.scaleY=t.scaleY,n.x=t.x,n.y=t.y,Y&&(n.z=t.z,n.rotationX=t.rotationX,n.rotationY=t.rotationY,n.scaleZ=t.scaleZ),n.filters&&delete n.filters,n}function j(t,e,i,n,r){var a,s,o,l={},c=t.style;for(s in i)"cssText"!==s&&"length"!==s&&isNaN(s)&&(e[s]!==(a=i[s])||r&&r[s])&&-1===s.indexOf("Origin")&&("number"==typeof a||"string"==typeof a)&&(l[s]="auto"!==a||"left"!==s&&"top"!==s?""!==a&&"auto"!==a&&"none"!==a||"string"!=typeof e[s]||""===e[s].replace(d,"")?a:0:ut(t,s),void 0!==c[s])&&(o=new wt(c,s,c[s],o));if(n)for(s in n)"className"!==s&&(l[s]=n[s]);return{difs:l,firstMPT:o}}function q(t,e){var i=(t=null!=t&&""!==t&&"auto"!==t&&"auto auto"!==t?t:"0 0").split(" "),n=-1!==t.indexOf("left")?"0%":-1!==t.indexOf("right")?"100%":i[0];return null==(t=-1!==t.indexOf("top")?"0%":-1!==t.indexOf("bottom")?"100%":i[1])?t="0":"center"===t&&(t="50%"),("center"===n||isNaN(parseFloat(n))&&-1===(n+"").indexOf("="))&&(n="50%"),e&&(e.oxp=-1!==n.indexOf("%"),e.oyp=-1!==t.indexOf("%"),e.oxr="="===n.charAt(1),e.oyr="="===t.charAt(1),e.ox=parseFloat(n.replace(d,"")),e.oy=parseFloat(t.replace(d,""))),n+" "+t+(2>16,255&t>>8,255&t]:(","===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),O[t]||("#"===t.charAt(0)?(4===t.length&&(t="#"+(e=t.charAt(1))+e+(i=t.charAt(2))+i+(n=t.charAt(3))+n),[(t=parseInt(t.substr(1),16))>>16,255&t>>8,255&t]):("hsl"===t.substr(0,3)?(t=t.match(S),n=Number(t[0])%360/360,r=Number(t[1])/100,e=2*(a=Number(t[2])/100)-(i=a<=.5?a*(1+r):a+r-a*r),3a",!!(e=G.getElementsByTagName("a")[0])&&/^0.55/.test(e.style.opacity)),pt="",ht="",m=y.defaultView?y.defaultView.getComputedStyle:function(){},z=X.getStyle=function(t,e,i,n,r){var a;return L||"opacity"!==e?(!n&&t.style[e]?a=t.style[e]:(i=i||m(t))?a=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(rt,"-$1").toLowerCase()):t.currentStyle&&(a=t.currentStyle[e]),null==r||a&&"none"!==a&&"auto"!==a&&"auto auto"!==a?a:r):o(t)},A=i.convertToPixels=function(t,e,i,n,r){if("px"===n||!n)return i;if("auto"===n||!i)return 0;var a,s,o,l=ot.test(e),c=t,d=C.style,p=i<0;if(p&&(i=-i),"%"===n&&-1!==e.indexOf("border"))a=i/100*(l?t.clientWidth:t.clientHeight);else{if(d.cssText="border:0 solid red;position:"+z(t,"position")+";line-height:0;","%"!==n&&c.appendChild)d[l?"borderLeftWidth":"borderTopWidth"]=i+n;else{if(s=(c=t.parentNode||y.body)._gsCache,o=h.ticker.frame,s&&l&&s.time===o)return s.width*i/100;d[l?"width":"height"]=i+n}c.appendChild(C),a=parseFloat(C[l?"offsetWidth":"offsetHeight"]),c.removeChild(C),l&&"%"===n&&!1!==X.cacheWidths&&((s=c._gsCache=c._gsCache||{}).time=o,s.width=a/i*100),0!==a||r||(a=A(t,e,i,n,!0))}return p?-a:a},ut=i.calculateOffset=function(t,e,i){var n;return"absolute"!==z(t,"position",i)?0:(i=z(t,"margin"+(n="left"===e?"Left":"Top"),i),t["offset"+n]-(A(t,e,parseFloat(i),i.replace(K,""))||0))},_t={width:["Left","Right"],height:["Top","Bottom"]},ft=["marginLeft","marginRight","marginTop","marginBottom"],O={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},E="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b";for(t in O)E+="|"+t+"\\b";function mt(t,e,a,s){var o,l,c,d,p,h,u,_;return null==t?function(t){return t}:(l=e?(t.match(E)||[""])[0]:"",c=t.split(l).join("").match(J)||[],d=t.substr(0,t.indexOf(c[0])),p=")"===t.charAt(t.length-1)?")":"",h=-1!==t.indexOf(" ")?" ":",",u=c.length,_=0n;n++)r[n]=o(r[n]);return r.join(",")}if(e=(t.match(E)||[l])[0],n=(i=t.split(e).join("").match(J)||[]).length,u>n--)for(;u>++n;)i[n]=a?i[0|(n-1)/2]:c[n];return d+i.join(h)+h+e+p+(-1!==t.indexOf("inset")?" inset":"")}:function(t){var e,i,n;if("number"==typeof t)t+=_;else if(s&&P.test(t)){for(i=t.replace(P,"|").split("|"),n=0;i.length>n;n++)i[n]=o(i[n]);return i.join(",")}if(n=(e=t.match(J)||[]).length,u>n--)for(;u>++n;)e[n]=a?e[0|(n-1)/2]:c[n];return d+e.join(h)+p}:function(t){return t})}function gt(c){return c=c.split(","),function(t,e,i,n,r,a,s){var o,l=(e+"").split(" ");for(s={},o=0;o<4;o++)s[c[o]]=l[o]=l[o]||l[(o-1)/2>>0];return n.parse(t,s,r,a)}}function wt(t,e,i,n,r){this.t=t,this.p=e,this.v=i,this.r=r,n&&((n._prev=this)._next=n)}var E=RegExp(E+")","gi"),R=(i._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,n,r,a=this.data,s=a.proxy,o=a.firstMPT;o;)e=s[o.v],o.r?e=Math.round(e):e<1e-6&&-1e-6n;n++)r+=i["xn"+n]+i["xs"+(n+1)];i.e=r}}else i.e=i.s+i.xs0;o=o._next}},i._parseToProxy=function(t,e,i,n,r,a){var s,o,l,c,d=n,p={},h={},u=i._transform,_=v;for(i._transform=null,v=e,n=t=i.parse(t,e,n,r),v=_,a&&(i._transform=u,d)&&(d._prev=null,d._prev)&&(d._prev._next=null);n&&n!==d;){if(n.type<=1&&(h[o=n.p]=n.s+n.c,p[o]=n.s,a||(c=new wt(n,"s",o,c,n.r),n.c=0),1===n.type))for(s=n.l;0<--s;)h[o=n.p+"_"+(l="xn"+s)]=n.data[l],p[o]=n[l],a||(c=new wt(n,l,o,c,n.rxp[l]));n=n._next}return{proxy:p,end:h,firstMPT:c,pt:t}},i.CSSPropTween=function(t,e,i,n,r,a,s,o,l,c,d){this.t=t,this.p=e,this.s=i,this.c=n,this.n=s||e,t instanceof R||p.push(this.n),this.r=o,this.type=a||0,l&&(this.pr=l,u=!0),this.b=void 0===c?i:c,this.e=void 0===d?i+n:d,r&&((this._next=r)._prev=this)}),vt=X.parseComplex=function(t,e,i,n,r,a,s,o,l,c){s=new R(t,e,0,0,s,c?2:1,null,!1,o,i=i||a||"",n),n+="";var d,p,h,u,_,f,m,g,w,v,y,b=i.split(", ").join(",").split(" "),k=n.split(", ").join(",").split(" "),x=b.length,T=!1!==U;for(-1===n.indexOf(",")&&-1===i.indexOf(",")||(b=b.join(" ").replace(P,", ").split(" "),k=k.join(" ").replace(P,", ").split(" "),x=b.length),x!==k.length&&(x=(b=(a||"").split(" ")).length),s.plugin=l,s.setRatio=c,d=0;dp;p++)v=f[p],w=u.indexOf(v,h),s.appendXtra(u.substr(h,w-h),Number(v),B(m[p],v),"",T&&"px"===u.substr(w+v.length,2),0===p),h=w+v.length;s["xs"+s.l]+=u.substr(h)}else s["xs"+s.l]+=s.l?" "+u:u;if(-1!==n.indexOf("=")&&s.data){for(y=s.xs0+s.data.s,d=1;s.l>d;d++)y+=s["xs"+d]+s.data["xn"+d];s.e=y+s["xs"+d]}return s.l||(s.type=-1,s.xs0=s.e),s.xfirst||s},I=9;for((t=R.prototype).l=t.pr=0;0<--I;)t["xn"+I]=0,t["xs"+I]="";t.xs0="",t._next=t._prev=t.xfirst=t.data=t.plugin=t.setRatio=t.rxp=null,t.appendXtra=function(t,e,i,n,r,a){var s=this,o=s.l;return s["xs"+o]+=a&&o?" "+t:t||"",i||0===o||s.plugin?(s.l++,s.type=s.setRatio?2:1,s["xs"+s.l]=n||"",0n;n++)e.prefix=0===n&&e.prefix,e.defaultValue=i[n]||a,new yt(r[n],e)},Pt=((t=yt.prototype).parseComplex=function(t,e,i,n,r,a){var s,o,l,c,d,p=this.keyword;if(this.multi&&(P.test(i)||P.test(e)?(o=e.replace(P,"|").split("|"),l=i.replace(P,"|").split("|")):p&&(o=[e],l=[i])),l){for(c=(l.length>o.length?l:o).length,s=0;sE[a]&&E[a]>-R&&(E[a]=0);return i&&(t._gsTransform=E),E},Ot=i.set3DTransformRatio=function(t){var e,i,n,r,a,s,o,l,c,d,p,h,u,_,f,m,g,w,v,y,b,k,x=this.data,T=this.t.style,S=x.rotation*N,P=x.scaleX,C=x.scaleY,L=x.scaleZ,A=x.perspective;if(1!==t&&0!==t||"auto"!==x.force3D||x.rotationY||x.rotationX||1!==L||A||x.z){if(W&&(P<1e-4&&-1e-4{var l;_[t]||(l=t.charAt(0).toUpperCase()+t.substr(1)+"Plugin",r(t,{parser:function(t,e,i,n,r,a,s){var o=(window.GreenSockGlobals||window).com.greensock.plugins[l];return o?(o._cssRegister(),_[i].parse(t,e,i,n,r,a,s)):(D("Error: "+l+" js file not loaded."),r)}}))})(t[I]);(t=X.prototype)._firstPT=null,t._onInitTween=function(t,e,i){if(!t.nodeType)return!1;this._target=t,this._tween=i,this._vars=e,U=e.autoRound,u=!1,b=e.suffixMap||X.suffixMap,k=m(t,""),p=this._overwriteProps;var n,r,a,s,o,l,i=t.style;if(c&&""===i.zIndex&&("auto"===(l=z(t,"zIndex",k))||""===l)&&this._addLazySet(i,"zIndex",0),"string"==typeof e&&(a=i.cssText,l=f(t,k),i.cssText=a+";"+e,l=j(t,l,f(t)).difs,!L&&et.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,i.cssText=a),this._firstPT=n=this.parse(t,e,null),this._transformType){for(l=3===this._transformType,H?V&&(c=!0,""===i.zIndex&&("auto"===(e=z(t,"zIndex",k))||""===e)&&this._addLazySet(i,"zIndex",0),Q)&&this._addLazySet(i,"WebkitBackfaceVisibility",this._vars.WebkitBackfaceVisibility||(l?"visible":"hidden")):i.zoom=1,r=n;r&&r._next;)r=r._next;e=new R(t,"transform",0,0,null,2),this._linkCSSP(e,null,r),e.setRatio=l&&Y?Ot:H?Et:bt,e.data=this._transform||M(t,k,!0),p.pop()}if(u){for(;n;){for(o=n._next,r=a;r&&r.pr>n.pr;)r=r._next;(n._prev=r?r._prev:s)?n._prev._next=n:a=n,(n._next=r)?r._prev=n:s=n,n=o}this._firstPT=a}return!0},t.parse=function(t,e,i,n){var r,a,s,o,l,c,d,p,h=t.style;for(r in e)l=e[r],o=_[r],o?i=o.parse(t,l,r,this,i,n,e):(o=z(t,r,k)+"",d="string"==typeof l,"color"===r||"fill"===r||"stroke"===r||-1!==r.indexOf("Color")||d&&nt.test(l)?(d||(l=$(l),l=(3{var n=parseFloat("width"===e?t.offsetWidth:t.offsetHeight),r=_t[e],a=r.length;for(i=i||m(t,null);-1<--a;)n=(n-=parseFloat(z(t,"padding"+r[a],i,!0))||0)-(parseFloat(z(t,"border"+r[a]+"Width",i,!0))||0);return n})(t,r,k),"px"):"left"===r||"top"===r?(a=ut(t,r,k),"px"):(a="opacity"!==r?0:1,"")),p=d&&"="===l.charAt(1),d=p?(s=parseInt(l.charAt(0)+"1",10),l=l.substr(2),s*=parseFloat(l),l.replace(K,"")):(s=parseFloat(l),d&&l.substr((s+"").length)||""),""===d&&(d=r in b?b[r]:c),l=s||0===s?(p?s+a:s)+d:e[r],c!==d&&""!==d&&(s||0===s)&&a&&(a=A(t,r,a,c),"%"===d?(a/=A(t,r,100,"%")/100,!0!==e.strictUnits&&(o=a+"%")):"em"===d?a/=A(t,r,1,"em"):"px"!==d&&(s=A(t,r,s,d),d="px"),p)&&(s||0===s)&&(l=s+a+d),p&&(s+=a),!a&&0!==a||!s&&0!==s?void 0!==h[r]&&(l||"NaN"!=l+""&&null!=l)?(i=new R(h,r,s||a||0,0,i,-1,r,!1,0,o,l),i.xs0="none"!==l||"display"!==r&&-1===r.indexOf("Style")?l:o):D("invalid "+r+" tween value: "+e[r]):(i=new R(h,r,a,s-a,i,0,r,!1!==U&&("px"===d||"zIndex"===r),0,o,l),i.xs0=d)):i=vt(h,r,o,l,!0,null,i,0,n)),n&&i&&!i.plugin&&(i.plugin=n);return i},t.setRatio=function(t){var e,i,n,r=this._firstPT;if(1!==t||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(t||this._tween._time!==this._tween._duration&&0!==this._tween._time||-1e-6===this._tween._rawPrevTime)for(;r;){if(e=r.c*t+r.s,r.r?e=Math.round(e):e<1e-6&&-1e-6n;n++)i+=r["xn"+n]+r["xs"+(n+1)];r.t[r.p]=i}else-1===r.type?r.t[r.p]=r.xs0:r.setRatio&&r.setRatio(t);else r.t[r.p]=e+r.xs0;r=r._next}else for(;r;)2!==r.type?r.t[r.p]=r.b:r.setRatio(t),r=r._next;else for(;r;)2!==r.type?r.t[r.p]=r.e:r.setRatio(t),r=r._next},t._enableTransforms=function(t){this._transformType=t||3===this._transformType?3:2,this._transform=this._transform||M(this._target,k,!0)};function Rt(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)}function It(t,e,i){var n,r,a,s;if(t.slice)for(r=t.length;-1<--r;)It(t[r],e,i);else for(r=(n=t.childNodes).length;-1<--r;)s=(a=n[r]).type,a.style&&(e.push(f(a)),i)&&i.push(a),1!==s&&9!==s&&11!==s||!a.childNodes.length||It(a,e,i)}t._addLazySet=function(t,e,i){t=this._firstPT=new R(t,e,0,0,this._firstPT,2);t.e=i,t.setRatio=Rt,t.data=this},t._linkCSSP=function(t,e,i,n){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,n=!0),i?i._next=t:n||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},t._kill=function(t){var e,i,n,r=t;if(t.autoAlpha||t.alpha){for(i in r={},t)r[i]=t[i];r.opacity=1,r.autoAlpha&&(r.visibility=1)}return t.className&&(e=this._classNamePT)&&((n=e.xfirst)&&n._prev?this._linkCSSP(n._prev,e._next,n._prev._prev):n===this._firstPT&&(this._firstPT=e._next),e._next&&this._linkCSSP(e._next,e._next._next,n._prev),this._classNamePT=null),a.prototype._kill.call(this,r)};return X.cascadeTo=function(t,e,i){var n,r,a,s=h.to(t,e,i),o=[s],l=[],c=[],d=[],p=h._internals.reservedProps;for(t=s._targets||s.target,It(t,l,d),s.render(e,!0),It(t,c),s.render(0,!0),s._enabled(!0),n=d.length;-1<--n;)if((r=j(d[n],l[n],c[n])).firstMPT){for(a in r=r.difs,i)p[a]&&(r[a]=i[a]);o.push(h.to(d[n],e,r))}return o},a.activate([X]),X},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],18:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){function r(t,e){var i="scroll"+(e="x"===e?"Width":"Height"),n="client"+e,r=document.body;return t===s||t===a||t===r?Math.max(a[i],r[i])-(s["inner"+e]||Math.max(a[n],r[n])):t[i]-t["offset"+e]}var a=document.documentElement,s=window,t=window._gsDefine.plugin({propName:"scrollTo",API:2,version:"1.7.3",init:function(t,e,i){return this._wdw=t===s,this._target=t,this._tween=i,this._autoKill=!1!==(e="object"!=typeof e?{y:e}:e).autoKill,this.x=this.xPrev=this.getX(),this.y=this.yPrev=this.getY(),null!=e.x?(this._addTween(this,"x",this.x,"max"===e.x?r(t,"x"):e.x,"scrollTo_x",!0),this._overwriteProps.push("scrollTo_x")):this.skipX=!0,null!=e.y?(this._addTween(this,"y",this.y,"max"===e.y?r(t,"y"):e.y,"scrollTo_y",!0),this._overwriteProps.push("scrollTo_y")):this.skipY=!0,!0},set:function(t){this._super.setRatio.call(this,t);var t=this._wdw||!this.skipX?this.getX():this.xPrev,e=this._wdw||!this.skipY?this.getY():this.yPrev,i=e-this.yPrev,n=t-this.xPrev;this._autoKill&&(!this.skipX&&(7t&&(this.skipX=!0),!this.skipY&&(7e&&(this.skipY=!0),this.skipX)&&this.skipY&&this._tween.kill(),this._wdw?s.scrollTo(this.skipX?t:this.x,this.skipY?e:this.y):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x)),this.xPrev=this.x,this.yPrev=this.y}}),e=t.prototype;t.max=r,e.getX=function(){return this._wdw?null!=s.pageXOffset?s.pageXOffset:(null!=a.scrollLeft?a:document.body).scrollLeft:this._target.scrollLeft},e.getY=function(){return this._wdw?null!=s.pageYOffset?s.pageYOffset:(null!=a.scrollTop?a:document.body).scrollTop:this._target.scrollTop},e._kill=function(t){return t.scrollTo_x&&(this.skipX=!0),t.scrollTo_y&&(this.skipY=!0),this._super._kill.call(this,t)}}),window._gsDefine&&window._gsQueue.pop()()},{}]},{},[3]); //# sourceMappingURL=wpr-admin.min.js.map diff --git a/web/app/plugins/wp-rocket/assets/js/wpr-admin.min.js.map b/web/app/plugins/wp-rocket/assets/js/wpr-admin.min.js.map index 2e0549f13..58f8b97f6 100644 --- a/web/app/plugins/wp-rocket/assets/js/wpr-admin.min.js.map +++ b/web/app/plugins/wp-rocket/assets/js/wpr-admin.min.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["wpr-admin.min.js"],"sourcesContent":["!function n(r,s,a){function o(e,t){if(!s[e]){if(!r[e]){var i=\"function\"==typeof require&&require;if(!t&&i)return i(e,!0);if(l)return l(e,!0);throw(t=new Error(\"Cannot find module '\"+e+\"'\")).code=\"MODULE_NOT_FOUND\",t}i=s[e]={exports:{}},r[e][0].call(i.exports,function(t){return o(r[e][1][t]||t)},i,i.exports,n,r,s,a)}return s[e].exports}for(var l=\"function\"==typeof require&&require,t=0;t{let e=i.querySelector(\".select-button\"),n=i.querySelector(\".selected-value\");e.addEventListener(\"click\",()=>{i.classList.toggle(\"active\"),e.setAttribute(\"aria-expanded\",\"true\"===e.getAttribute(\"aria-expanded\")?\"false\":\"true\")}),i.addEventListener(\"click\",function(t){var e;t.target.matches(\"label\")&&(i.querySelectorAll(\"li\").forEach(t=>t.classList.remove(\"active\")),t=t.target.closest(\"li\"))&&(t.classList.add(\"active\"),t=t,e=new CustomEvent(\"custom-select-change\",{detail:{selectedOption:t}}),n.textContent=t.textContent,i.classList.remove(\"active\"),i.dispatchEvent(e))}),document.addEventListener(\"click\",t=>{i.contains(t.target)||(i.classList.remove(\"active\"),e.setAttribute(\"aria-expanded\",\"false\"))})})},{}],2:[function(t,e,i){var v=jQuery;v(document).ready(function(){var r=!1;v(\"#wpr-action-refresh_account\").on(\"click\",function(t){var e,i,n;return r||(e=v(this),i=v(\"#wpr-account-data\"),n=v(\"#wpr-expiration-data\"),t.preventDefault(),r=!0,e.trigger(\"blur\"),n.removeClass(\"wpr-isValid wpr-isInvalid\"),v.post(ajaxurl,{action:\"rocket_refresh_customer_data\",_ajax_nonce:rocket_ajax_data.nonce},function(t){e.removeClass(\"wpr-isLoading\"),e.addClass(\"wpr-isHidden\"),!0===t.success?(i.html(t.data.license_type),n.addClass(t.data.license_class).html(t.data.license_expiration),setTimeout(function(){e.removeClass(\"wpr-icon-refresh wpr-isHidden\"),e.addClass(\"wpr-icon-check\")},250)):setTimeout(function(){e.removeClass(\"wpr-icon-refresh wpr-isHidden\"),e.addClass(\"wpr-icon-close\")},250),setTimeout(function(){new TimelineLite({onComplete:function(){r=!1}}).set(e,{css:{className:\"+=wpr-isHidden\"}}).set(e,{css:{className:\"-=wpr-icon-check\"}},.25).set(e,{css:{className:\"-=wpr-icon-close\"}}).set(e,{css:{className:\"+=wpr-icon-refresh\"}},.25).set(e,{css:{className:\"-=wpr-isHidden\"}})},2e3)})),!1}),v(\".wpr-radio input[type=checkbox]\").on(\"change\",function(t){t.preventDefault();var t=v(this).attr(\"id\"),e=v(this).prop(\"checked\")?1:0;0<=[\"cloudflare_auto_settings\",\"cloudflare_devmode\",\"analytics_enabled\"].indexOf(t)||v.post(ajaxurl,{action:\"rocket_toggle_option\",_ajax_nonce:rocket_ajax_data.nonce,option:{name:t,value:e}},function(t){})}),v(\"#wpr-action-rocket_enable_mobile_cpcss\").on(\"click\",function(t){t.preventDefault(),v(\"#wpr-action-rocket_enable_mobile_cpcss\").addClass(\"wpr-isLoading\"),v.post(ajaxurl,{action:\"rocket_enable_mobile_cpcss\",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v(\"#wpr-action-rocket_enable_mobile_cpcss\").hide(),v(\".wpr-hide-on-click\").hide(),v(\".wpr-show-on-click\").show(),v(\"#wpr-action-rocket_enable_mobile_cpcss\").removeClass(\"wpr-isLoading\"))})}),v(\"#wpr-action-rocket_enable_google_fonts\").on(\"click\",function(t){t.preventDefault(),v(\"#wpr-action-rocket_enable_google_fonts\").addClass(\"wpr-isLoading\"),v.post(ajaxurl,{action:\"rocket_enable_google_fonts\",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v(\"#wpr-action-rocket_enable_google_fonts\").hide(),v(\".wpr-hide-on-click\").hide(),v(\".wpr-show-on-click\").show(),v(\"#wpr-action-rocket_enable_google_fonts\").removeClass(\"wpr-isLoading\"),v(\"#minify_google_fonts\").val(1))})}),v(\"#rocket-dismiss-promotion\").on(\"click\",function(t){t.preventDefault(),v.post(ajaxurl,{action:\"rocket_dismiss_promo\",nonce:rocket_ajax_data.nonce},function(t){t.success&&v(\"#rocket-promo-banner\").hide(\"slow\")})}),v(\"#rocket-dismiss-renewal\").on(\"click\",function(t){t.preventDefault(),v.post(ajaxurl,{action:\"rocket_dismiss_renewal\",nonce:rocket_ajax_data.nonce},function(t){t.success&&v(\"#rocket-renewal-banner\").hide(\"slow\")})}),v(\"#wpr-update-exclusion-list\").on(\"click\",function(t){t.preventDefault(),v(\"#wpr-update-exclusion-msg\").html(\"\"),v.ajax({url:rocket_ajax_data.rest_url,beforeSend:function(t){t.setRequestHeader(\"X-WP-Nonce\",rocket_ajax_data.rest_nonce),t.setRequestHeader(\"Accept\",\"application/json, */*;q=0.1\"),t.setRequestHeader(\"Content-Type\",\"application/json\")},method:\"PUT\",success:function(e){let i=v(\"#wpr-update-exclusion-msg\");i.html(\"\"),void 0!==e.success?i.append('
'+e.message+\"
\"):Object.keys(e).forEach(t=>{i.append(\"\"+t+\": \"),i.append(e[t].message),i.append(\"
\")})}})}),v(\"#wpr_enable_mobile_cache\").on(\"click\",function(t){t.preventDefault(),v(\"#wpr_enable_mobile_cache\").addClass(\"wpr-isLoading\"),v.post(ajaxurl,{action:\"rocket_enable_mobile_cache\",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v(\"#wpr_enable_mobile_cache\").hide(),v(\"#wpr_mobile_cache_default\").hide(),v(\"#wpr_mobile_cache_response\").show(),v(\"#wpr_enable_mobile_cache\").removeClass(\"wpr-isLoading\"),v(\"#cache_mobile\").val(1),v(\"#do_caching_mobile_files\").val(1))})})}),document.addEventListener(\"DOMContentLoaded\",function(){var t=document.getElementById(\"analytics_enabled\");t&&t.addEventListener(\"change\",function(){var t=this.checked;\"undefined\"!=typeof rocket_mixpanel_data&&(rocket_mixpanel_data.optin_enabled=t?\"1\":\"0\"),fetch(ajaxurl,{method:\"POST\",headers:{\"Content-Type\":\"application/x-www-form-urlencoded\"},body:new URLSearchParams({action:\"rocket_toggle_optin\",value:t?1:0,_ajax_nonce:rocket_ajax_data.nonce})})})}),document.addEventListener(\"DOMContentLoaded\",function(){let t=2e3,e=5e3,i=Array.isArray(window.rocket_ajax_data?.rocket_insights_ids)?window.rocket_ajax_data.rocket_insights_ids.slice():[],n=t,r=null,s=!0,a={data:{status:\"\",score:0,pages_num:0},html:\"\",row_html:\"\",disabled_btn_html:{global_score_widget:\"\",rocket_insights:\"\"}},o=(window.rocket_ajax_data?.global_score_data&&(a=window.rocket_ajax_data.global_score_data),v(\"#wpr-speed-radar-url-input\")),l=v(\".wpr-ri-urls-table tbody\"),c=v(\".wpr-ri-urls-table\");function p(t){i.includes(t)||i.push(t)}function d(t){var e=v(\".wpr-ri-summary-info\"),i=\"1\"===window.rocket_ajax_data?.is_free,i=v(i?\"#wpr-ri-quota-banner\":\"#rocket_insights_survey\");!1===t||!s?(e.hide(),i.removeClass(\"hidden\")):(e.show(),i.addClass(\"hidden\"))}function h(t){void 0!==t&&s!==t&&(s=t,document.querySelectorAll(\".wpr-action-speed_radar_refresh\").forEach(t=>{var e=t.closest(\".wpr-ri-item\");e&&(e=parseInt(e.dataset.rocketInsightsId,10),e=i.includes(e),!s||e?(t.classList.add(\"wpr-ri-action--disabled\"),t.setAttribute(\"disabled\",\"true\"),s||(t.classList.add(\"wpr-btn-with-tool-tip\"),t.setAttribute(\"title\",window.rocket_ajax_data?.rocket_insights_no_credit_tooltip||\"Upgrade your plan to get access to re-test performance or run new tests\"))):(t.classList.remove(\"wpr-ri-action--disabled\",\"wpr-btn-with-tool-tip\"),t.removeAttribute(\"disabled\"),t.removeAttribute(\"title\")))}))}function u(){r&&(clearTimeout(r),r=null),n=t}function _(){0{0===i.length?u():window.wp.apiFetch({path:window.wp.url.addQueryArgs(\"/wp-rocket/v1/rocket-insights/pages/progress\",{ids:i})}).then(t=>{t.success&&Array.isArray(t.results)?(h(t.has_credit),d(t.can_add_pages),a.data.status===t.global_score_data.data.status&&a.data.pages_num===t.global_score_data.data.pages_num||(a=t.global_score_data,v(\".wpr-global-score-widget\").html(t.global_score_data.html),f(a),document.dispatchEvent(new CustomEvent(\"wprGlobalScoreUpdated\",{detail:a.data}))),t.results.forEach(t=>{if(v(`.wpr-ri-item[data-rocket-insights-id=\"${t.id}\"]`).replaceWith(t.html),v(document).trigger(\"rocket-insights-page-test-polling\",[t.id]),\"completed\"===t.status&&v(document).trigger(\"rocket-insights-page-test-completed\",[t.id]),\"completed\"===t.status||\"failed\"===t.status){t=t.id;let e=parseInt(t,10);i=i.filter(t=>parseInt(t,10)!==e)}}),n=Math.min(1.3*n,e),_()):(i=[],u(),console.error(\"Polling error:\",t.results||t))})},n))}function f(t){var e=v(\".wpr-ri-urls-table .wpr-global-score\");0{try{var e=new URL(t);return e.hostname.includes(\".\")&&0{var e;t.success?(e=t.id,i.includes(e)||(o.val(\"\"),l.append(t.html),v(document).trigger(\"rocket-insights-page-added\"),c.removeClass(\"hidden\"),p(t.id),(e=v(\"#rocket_rocket_insights_pages_num\")).text(parseInt(e.text())+1),h(t.has_credit),f(a=t.global_score_data),\"disabled_btn_html\"in a&&v(\"#wpr_rocket_insights_add_page_btn_wrapper\").html(a.disabled_btn_html.rocket_insights),d(t.can_add_pages),r&&u(),_())):(o.val(\"\"),t?.message&&t.message.includes(\"Maximum number of URLs reached\")&&(disableAddUrlElements(),d(void 0!==t.can_add_pages&&t.can_add_pages)),console.error(t?.message||t))})):alert(\"Please enter a valid URL\"))}),v(document).on(\"click\",\".wpr-action-speed_radar_refresh\",function(t){t.preventDefault();var e=(t=v(this)).parents(\".wpr-ri-item\").data(\"rocket-insights-id\");e&&(t=t.data(\"source\"),window.wp.apiFetch({path:\"/wp-rocket/v1/rocket-insights/pages/\"+e,method:\"PATCH\",data:{source:t}}).then(t=>{t.success?(p(t.id),v(`#ri_details_${t.id} .details-section-td`).remove(),v(`[data-rocket-insights-id=\"${t.id}\"]`).replaceWith(t.html),v(document).trigger(\"rocket-insights-page-retest\",[t.id]),h(t.has_credit),d(t.can_add_pages),f(a=t.global_score_data),r&&u(),_()):console.error(t?.message||t)}))}),v(document).on(\"keypress\",\"#wpr-speed-radar-url-input\",function(t){\"Enter\"===t.key&&(t.preventDefault(),v(\"#wpr-action-add_page_speed_radar\").click())}),\"wprocket\"===new URLSearchParams(window.location.search).get(\"page\")&&0{f(a)},30)}),v(document).on(\"click\",\".wpr-ri-item-toggle-single\",function(){var t,e,i,n,r=v(this).closest(\".wpr-ri-item\").data(\"rocket-insights-id\");t=\"url_expand\",e=v(\"#ri_details_\"+(r=r)),i=e.hasClass(\"wpr-ri-details--expanded\"),n=v(`[data-rocket-insights-id=\"${r}\"] .wpr-ri-item-toggle-single`).is(v(\".wpr-ri-item-toggle-single\").last()),i?(e.removeClass(\"wpr-ri-details--expanded\"),v(`[data-rocket-insights-id=\"${r}\"]`).removeClass(\"wpr-ri-item--expanded\"),n&&w(!1)):(e.addClass(\"wpr-ri-details--expanded\"),v(`[data-rocket-insights-id=\"${r}\"]`).addClass(\"wpr-ri-item--expanded\"),g(\"expand\",r,t),n&&w())}),v(document).on(\"click\",\".wpr-ri-item-toggle-all\",function(){0{var t,e,i;\"wprocket\"===new URLSearchParams(window.location.search).get(\"page\")&&\"#rocket_insights\"===window.location.hash&&(m(!0),i=(t=new URLSearchParams(window.location.search)).get(\"ri_id\"),e=v(\".wpr-ri-item--expanded\")?.first()?.data(\"rocket-insights-id\"),i&&\"\"!==i?(g(\"expand\",i,\"post type listing\"),v(\"html, body\").animate({scrollTop:v(`[data-rocket-insights-id=\"${i}\"]`).offset().top-100},500),t.delete(\"ri_id\"),i=window.location.pathname+\"?\"+t.toString()+window.location.hash,window.history.replaceState({},\"\",i)):e&&g(\"expand\",e,\"auto_expand_url\"))})})},{}],3:[function(t,e,i){t(\"../lib/greensock/TweenLite.min.js\"),t(\"../lib/greensock/TimelineLite.min.js\"),t(\"../lib/greensock/easing/EasePack.min.js\"),t(\"../lib/greensock/plugins/CSSPlugin.min.js\"),t(\"../lib/greensock/plugins/ScrollToPlugin.min.js\"),t(\"../global/pageManager.js\"),t(\"../global/main.js\"),t(\"../global/fields.js\"),t(\"../global/beacon.js\"),t(\"../global/ajax.js\"),t(\"../global/recommendations-widget.js\"),t(\"../global/rocketcdn.js\"),t(\"../global/countdown.js\"),t(\"../global/mixpanel.js\")},{\"../global/ajax.js\":2,\"../global/beacon.js\":4,\"../global/countdown.js\":5,\"../global/fields.js\":6,\"../global/main.js\":7,\"../global/mixpanel.js\":8,\"../global/pageManager.js\":9,\"../global/recommendations-widget.js\":10,\"../global/rocketcdn.js\":11,\"../lib/greensock/TimelineLite.min.js\":12,\"../lib/greensock/TweenLite.min.js\":13,\"../lib/greensock/easing/EasePack.min.js\":14,\"../lib/greensock/plugins/CSSPlugin.min.js\":15,\"../lib/greensock/plugins/ScrollToPlugin.min.js\":16}],4:[function(t,e,i){var n=jQuery;n(document).ready(function(){function i(t,e){\"undefined\"!=typeof mixpanel&&mixpanel.track&&\"undefined\"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&\"0\"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&\"function\"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track(\"Button Clicked\",{button:t,button_context:e,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,context:rocket_mixpanel_data.context,path:rocket_mixpanel_data.path}))}\"Beacon\"in window&&n(\".wpr-infoAction--help\").on(\"click\",function(t){var e=n(this).data(\"beacon-id\");return i(n(this).data(\"wpr_track_button\")||\"Beacon Help\",n(this).data(\"wpr_track_context\")||\"Settings\"),0!==(e=(e=e).split(\",\")).length&&(1{l(t).attr(\"checked\",i?null:\"checked\")}):(e=l(e).closest(\".wpr-list\").find(\".wpr-main-checkbox\"),n=l.map(r,t=>{if(void 0!==l(t).attr(\"checked\"))return t}),e.attr(\"checked\",n.length===r.length?\"checked\":null))}),0{var i=l(e).parents(\".wpr-list\").find(\".wpr-list-body input[type=checkbox]:not(:checked)\").length;l(e).attr(\"checked\",i<=0?\"checked\":null)});let a={checked:{},total:{}};l(\".wpr-field--categorizedmultiselect .wpr-list\").each(function(){var t=l(this).attr(\"id\");t&&(a.checked[t]=l(`#${t} input[type='checkbox']:checked`).length,a.total[t]=l(`#${t} input[type='checkbox']:not(.wpr-main-checkbox)`).length,l(`#${t} .wpr-badge-counter span`).text(a.checked[t]),l(`#${t} .wpr-badge-counter`).toggle(0\"symbol\"==typeof(t=((t,e)=>{if(\"object\"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0===i)return(\"string\"===e?String:Number)(t);if(\"object\"!=typeof(i=i.call(t,e||\"default\")))return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")})(t,\"string\"))?t:t+\"\")(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i}(class r{constructor(t){n(this,\"trackedTabs\",[\"dashboard\",\"rocket_insights\"]),this.config=t}init(){\"undefined\"!=typeof mixpanel&&mixpanel.track&&this.config.optin_enabled&&\"0\"!==this.config.optin_enabled&&(mixpanel.identify(this.config.user_id),this._initListeners(this))}_initListeners(t){window.addEventListener(\"hashchange\",t._onHashChange.bind(t)),window.addEventListener(\"load\",t._onPageLoad.bind(t))}_onHashChange(t){var e=this._cleanHash(new URL(t.oldURL).hash),t=this._cleanHash(new URL(t.newURL).hash);this._canTrackTab(t)&&this._sendPageViewedEvent(this._getSource(e),t)}_onPageLoad(){var t=this._cleanHash(window.location.hash);this._canTrackTab(t)&&this._sendPageViewedEvent(this._getSource(),t)}_cleanHash(t){return t&&t.startsWith(\"#\")?t.substring(1):t}_canTrackTab(t){return this.trackedTabs.includes(t)}_getSource(t=\"\"){return t?\"settings_\"+t:this._getSourceFromQueryStringAndRemoveIt()||this._getSourceFromReferrer()}_getSourceFromQueryStringAndRemoveIt(){var t,e=new URL(window.location.href),i=e.searchParams;return i.has(\"rocket_source\")?(t=i.get(\"rocket_source\"),i.delete(\"rocket_source\"),window.history.replaceState(null,\"\",e.search?e.href:e.pathname),t):\"\"}_getSourceFromReferrer(){var t=document.referrer;return t?t.includes(window.location.hostname)?\"internal\":\"external\":\"noreferrer\"}_sendPageViewedEvent(t,e){mixpanel.track(\"Page Viewed\",{path:\"/wp-admin/options-general.php?page=wprocket#\"+e,page_name:e.replace(\"_\",\" \"),source:t,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,context:rocket_mixpanel_data.context})}static run(){\"undefined\"!=typeof rocket_mixpanel_data&&new r(rocket_mixpanel_data).init()}}).run()},{}],9:[function(t,e,i){function n(t){var e,i=this;this.$body=document.querySelector(\".wpr-body\"),this.$menuItems=document.querySelectorAll(\".wpr-menuItem\"),this.$submitButton=document.querySelector(\".wpr-Content > form > #wpr-options-submit\"),this.$pages=document.querySelectorAll(\".wpr-Page\"),this.$sidebar=document.querySelector(\".wpr-Sidebar\"),this.$content=document.querySelector(\".wpr-Content\"),this.$tips=document.querySelector(\".wpr-Content-tips\"),this.$links=document.querySelectorAll(\".wpr-body a\"),this.$menuItem=null,this.$page=null,this.pageId=null,this.bodyTop=0,this.buttonText=this.$submitButton.value,i.getBodyTop(),window.onhashchange=function(){i.detectID()},window.location.hash?(this.bodyTop=0,this.detectID()):(e=localStorage.getItem(\"wpr-hash\"),this.bodyTop=0,e?(window.location.hash=e,this.detectID()):(this.$menuItems[0].classList.add(\"isActive\"),localStorage.setItem(\"wpr-hash\",\"dashboard\"),window.location.hash=\"#dashboard\"));for(var n=0;n{window.wp&&window.wp.apiFetch?window.wp.apiFetch({path:\"/wp-rocket/v1/recommendations\"}).then(function(t){e(t)}).catch(function(t){console.error(\"Failed to fetch recommendations status:\",t)}):fetch(window.wpApiSettings?.root+\"wp-rocket/v1/recommendations\",{headers:{\"X-WP-Nonce\":window.wpApiSettings?.nonce||\"\"}}).then(function(t){if(t.ok)return t.json();throw new Error(\"Network response was not ok\")}).then(function(t){e(t)}).catch(function(t){console.error(\"Failed to fetch recommendations status:\",t)})})})},{}],11:[function(t,e,i){{var c=document,p=window;function d(){return\"#page_cdn\"===p.location.hash}c.addEventListener(\"DOMContentLoaded\",()=>{if(c.querySelectorAll(\".wpr-rocketcdn-open\").forEach(e=>{e.addEventListener(\"click\",t=>{t.preventDefault(),e.classList.contains(\"wpr-rocketcdn-pricing--cta\")&&n(\"RocketCDN Upsell CTA Clicked\"),p.rocketcdnButtonUrl&&\"\"!==p.rocketcdnButtonUrl?setTimeout(function(){p.location.href=p.rocketcdnButtonUrl},100):MicroModal.show(\"wpr-rocketcdn-modal\")})}),MicroModal.init({disableScroll:!0}),!p.rocketcdnButtonUrl||\"\"===p.rocketcdnButtonUrl){{let t=\"\",e=u(t=(t+=\"action=rocketcdn_process_status\")+\"&nonce=\"+rocket_ajax_data.nonce);e.onreadystatechange=()=>{e.readyState===XMLHttpRequest.DONE&&200===e.status&&!0===JSON.parse(e.responseText).success&&MicroModal.show(\"wpr-rocketcdn-modal\")}}(e=new URLSearchParams(p.location.search)).has(\"rocketcdn_open_iframe\")&&\"1\"===e.get(\"rocketcdn_open_iframe\")&&(p.location.hash=\"#page_cdn\",MicroModal.show(\"wpr-rocketcdn-modal\"),e.delete(\"rocketcdn_open_iframe\"),e=e.toString(),e=p.location.pathname+(e?\"?\"+e:\"\")+p.location.hash,p.history.replaceState({},\"\",e));e=c.getElementById(\"rocketcdn-iframe\");let t=c.getElementById(\"wpr-rocketcdn-modal-loader\");e&&t&&e.addEventListener(\"load\",function(){t.style.display=\"none\"})}var e});let l=!1;function h(){var t,e;!l&&d()&&(t=c.querySelector(\"#wpr-rocketcdn-cta-small\"),(e=c.querySelector(\"#wpr-rocketcdn-cta\"))&&!e.classList.contains(\"wpr-isHidden\")||t&&!t.classList.contains(\"wpr-isHidden\"))&&(_(),l=!0)}function u(t){var e=new XMLHttpRequest;return e.open(\"POST\",ajaxurl),e.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\"),e.send(t),e}function n(t,e){if(\"undefined\"!=typeof mixpanel&&mixpanel.track&&\"undefined\"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&\"0\"!==rocket_mixpanel_data.optin_enabled&&rocket_mixpanel_data.user_id&&\"function\"==typeof mixpanel.identify){mixpanel.identify(rocket_mixpanel_data.user_id);var i={context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,path:rocket_mixpanel_data.path};if(e&&\"object\"==typeof e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(i[n]=e[n]);mixpanel.track(t,i)}}function _(){n(\"RocketCDN Upsell Banner Viewed\")}p.addEventListener(\"load\",()=>{let t=c.querySelector(\"#wpr-rocketcdn-open-cta\"),e=c.querySelector(\"#wpr-rocketcdn-close-cta\"),i=c.querySelector(\"#wpr-rocketcdn-cta-small\"),n=c.querySelector(\"#wpr-rocketcdn-cta\"),r=c.querySelector(\".wpr-rocketcdn-toggle--input\"),s=(h(),p.addEventListener(\"hashchange\",()=>{h()}),{monthly:{regular:c.querySelectorAll(\".wpr-rocketcdn-pricing-regular-price--monthly\"),current:c.querySelectorAll(\".wpr-rocketcdn-pricing--monthly\"),period:c.querySelectorAll(\".wpr-rocketcdn-pricing--billing-period--monthly\")},yearly:{regular:c.querySelectorAll(\".wpr-rocketcdn-pricing-regular-price--yearly\"),current:c.querySelectorAll(\".wpr-rocketcdn-pricing--annual\"),period:c.querySelectorAll(\".wpr-rocketcdn-pricing--billing-period--yearly\")}});function a(t){var e=\"\";return e+\"action=toggle_rocketcdn_cta\"+(\"&status=\"+t)+(\"&nonce=\"+rocket_ajax_data.nonce)}null!==t&&null!==i&&null!==n&&t.addEventListener(\"click\",t=>{t.preventDefault(),i.classList.add(\"wpr-isHidden\"),n.classList.remove(\"wpr-isHidden\"),d()&&!l&&(_(),l=!0),u(a(\"big\"))}),null!==e&&null!==i&&null!==n&&e.addEventListener(\"click\",t=>{t.preventDefault(),i.classList.remove(\"wpr-isHidden\"),n.classList.add(\"wpr-isHidden\"),u(a(\"small\"))}),r.addEventListener(\"change\",function(){var t=this.checked;t?(Object.values(s.monthly).forEach(t=>t.forEach(t=>t.classList.add(\"wpr-isHidden\"))),Object.values(s.yearly).forEach(t=>t.forEach(t=>t.classList.remove(\"wpr-isHidden\")))):(Object.values(s.monthly).forEach(t=>t.forEach(t=>t.classList.remove(\"wpr-isHidden\"))),Object.values(s.yearly).forEach(t=>t.forEach(t=>t.classList.add(\"wpr-isHidden\")))),t=t,p.rocketcdnButtonUrl&&\"\"!==p.rocketcdnButtonUrl&&(p.rocketcdnButtonUrl=((t,e)=>{let i=t.replace(/([?&])is_monthly=[^&]*/g,\"\"),n=i.includes(\"?\")?\"&\":\"?\";return i+=n+\"is_monthly=\"+(e?\"0\":\"1\")})(p.rocketcdnButtonUrl,t))});var o=c.querySelector(\"#wpr-rocketcdn-activation-cta\");o&&o.addEventListener(\"click\",()=>{\"undefined\"!=typeof mixpanel&&mixpanel.track&&\"undefined\"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&\"0\"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&\"function\"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track(\"RocketCDN Activation Failed CTA Clicked\",{context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app}))})}),p.onmessage=t=>{var e=rocket_ajax_data.origin_url;if(t.origin===e){(n=t.data).hasOwnProperty(\"cdnFrameHeight\")&&(c.getElementById(\"rocketcdn-iframe\").style.height=n.cdnFrameHeight+\"px\"),(n=t.data).hasOwnProperty(\"cdnFrameClose\")&&(MicroModal.close(\"wpr-rocketcdn-modal\"),c.body.style.overflow=\"\",n.hasOwnProperty(\"cdn_page_message\"))&&-1!==[\"iframe-payment-success\",\"iframe-unsubscribe-success\"].indexOf(n.cdn_page_message)&&c.location.reload();{var n=t.data;var r=e;let i=c.querySelector(\"#rocketcdn-iframe\").contentWindow;if(n.hasOwnProperty(\"rocketcdn_token\")){var s=\"\";let e=u(s+\"action=save_rocketcdn_token\"+(\"&value=\"+n.rocketcdn_token)+(\"&nonce=\"+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},r))}}else{s={process:\"subscribe\",message:\"token_not_received\"};i.postMessage({success:!1,data:s,rocketcdn:!0},r)}}(n=t.data).hasOwnProperty(\"rocketcdn_process\")&&u(\"\"+\"action=rocketcdn_process_set\"+(\"&status=\"+n.rocketcdn_process)+(\"&nonce=\"+rocket_ajax_data.nonce));{var n=t.data;var a=e;let i=c.querySelector(\"#rocketcdn-iframe\").contentWindow;if(n.hasOwnProperty(\"rocketcdn_url\")){var o=\"\";let e=u(o+\"action=rocketcdn_enable\"+(\"&cdn_url=\"+n.rocketcdn_url)+(\"&nonce=\"+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},a))}}}{o=t.data;var l=e;let i=c.querySelector(\"#rocketcdn-iframe\").contentWindow;if(o.hasOwnProperty(\"rocketcdn_disable\")){o=\"\";let e=u((o+=\"action=rocketcdn_disable\")+(\"&nonce=\"+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},l))}}}(n=t.data).hasOwnProperty(\"rocketcdn_validate_token\")&&n.hasOwnProperty(\"rocketcdn_validate_cname\")&&u(\"\"+\"action=rocketcdn_validate_token_cname\"+(\"&cdn_url=\"+n.rocketcdn_validate_cname)+(\"&cdn_token=\"+n.rocketcdn_validate_token)+(\"&nonce=\"+rocket_ajax_data.nonce))}}}},{}],12:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"TimelineLite\",[\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"],function(p,d,h){function u(t){d.call(this,t),this._labels={},this.autoRemoveChildren=!0===this.vars.autoRemoveChildren,this.smoothChildTiming=!0===this.vars.smoothChildTiming,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var e,i,n=this.vars;for(i in n)e=n[i],g(e)&&-1!==e.join(\"\").indexOf(\"{self}\")&&(n[i]=this._swapSelfInParams(e));g(n.tweens)&&this.add(n.tweens,0,n.align,n.stagger)}function _(t){var e,i={};for(e in t)i[e]=t[e];return i}function r(t,e,i,n){t._timeline.pause(t._startTime),e&&e.apply(n||t._timeline,i||w)}var f=1e-10,m=h._internals.isSelector,g=h._internals.isArray,w=[],a=window._gsDefine.globals,v=w.slice,t=u.prototype=new d;return u.version=\"1.12.1\",t.constructor=u,t.kill()._gc=!1,t.to=function(t,e,i,n){var r=i.repeat&&a.TweenMax||h;return e?this.add(new r(t,e,i),n):this.set(t,i,n)},t.from=function(t,e,i,n){return this.add((i.repeat&&a.TweenMax||h).from(t,e,i),n)},t.fromTo=function(t,e,i,n,r){var s=n.repeat&&a.TweenMax||h;return e?this.add(s.fromTo(t,e,i,n),r):this.set(t,n,r)},t.staggerTo=function(t,e,i,n,r,s,a,o){var l,c=new u({onComplete:s,onCompleteParams:a,onCompleteScope:o,smoothChildTiming:this.smoothChildTiming});for(\"string\"==typeof t&&(t=h.selector(t)||t),m(t)&&(t=v.call(t,0)),n=n||0,l=0;t.length>l;l++)i.startAt&&(i.startAt=_(i.startAt)),c.to(t[l],e,_(i),l*n);return this.add(c,r)},t.staggerFrom=function(t,e,i,n,r,s,a,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,n,r,s,a,o)},t.staggerFromTo=function(t,e,i,n,r,s,a,o,l){return n.startAt=i,n.immediateRender=0!=n.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,n,r,s,a,o,l)},t.call=function(t,e,i,n){return this.add(h.delayedCall(0,t,e,i),n)},t.set=function(t,e,i){return i=this._parseTimeOrLabel(i,0,!0),null==e.immediateRender&&(e.immediateRender=i===this._time&&!this._paused),this.add(new h(t,0,e),i)},u.exportRoot=function(t,e){null==(t=t||{}).smoothChildTiming&&(t.smoothChildTiming=!0);var i,n,r=new u(t),t=r._timeline;for(null==e&&(e=!0),t._remove(r,!0),r._startTime=0,r._rawPrevTime=r._time=r._totalTime=t._time,i=t._first;i;)n=i._next,e&&i instanceof h&&i.target===i.vars.onComplete||r.add(i,i._startTime-i._delay),i=n;return t.add(r,0),r},t.add=function(t,e,i,n){var r,s,a,o,l,c;if(\"number\"!=typeof e&&(e=this._parseTimeOrLabel(e,0,!0,t)),!(t instanceof p)){if(t instanceof Array||t&&t.push&&g(t)){for(i=i||\"normal\",n=n||0,r=e,s=t.length,a=0;at._startTime;l._timeline;)c&&l._timeline.smoothChildTiming?l.totalTime(l._totalTime,!0):l._gc&&l._enabled(!0,!1),l=l._timeline;return this},t.remove=function(t){if(t instanceof p)return this._remove(t,!1);if(t instanceof Array||t&&t.push&&g(t)){for(var e=t.length;-1<--e;)this.remove(t[e]);return this}return\"string\"==typeof t?this.removeLabel(t):this.kill(null,t)},t._remove=function(t,e){d.prototype._remove.call(this,t,e);t=this._last;return t?this._time>t._startTime+t._totalDuration/t._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},t.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},t.insert=t.insertMultiple=function(t,e,i,n){return this.add(t,e||0,i,n)},t.appendMultiple=function(t,e,i,n){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,n)},t.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},t.addPause=function(t,e,i,n){return this.call(r,[\"{self}\",e,i,n],this,t)},t.removeLabel=function(t){return delete this._labels[t],this},t.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},t._parseTimeOrLabel=function(t,e,i,n){var r;if(n instanceof p&&n.timeline===this)this.remove(n);else if(n&&(n instanceof Array||n.push&&g(n)))for(r=n.length;-1<--r;)n[r]instanceof p&&n[r].timeline===this&&this.remove(n[r]);if(\"string\"==typeof e)return this._parseTimeOrLabel(e,i&&\"number\"==typeof t&&null==this._labels[e]?t-this.duration():0,i);if(e=e||0,\"string\"!=typeof t||!isNaN(t)&&null==this._labels[t])null==t&&(t=this.duration());else{if(-1===(r=t.indexOf(\"=\")))return null==this._labels[t]?i?this._labels[t]=this.duration()+e:e:this._labels[t]+e;e=parseInt(t.charAt(r-1)+\"1\",10)*Number(t.substr(r+1)),t=1f)&&(a=\"onReverseComplete\")),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:f,t=l+1e-4):t<1e-7?(((this._totalTime=this._time=0)!==c||0===this._duration&&this._rawPrevTime!==f&&(0=c)for(n=this._first;n&&(s=n._next,!this._paused||h);)(n._active||n._startTime<=this._time&&!n._paused&&!n._gc)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=s;else for(n=this._last;n&&(s=n._prev,!this._paused||h);)(n._active||c>=n._startTime&&!n._paused&&!n._gc)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=s;this._onUpdate&&!e&&this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||w),!a||this._gc||p!==this._startTime&&d===this._timeScale||!(0===this._time||l>=this.totalDuration())||(r&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),e)||!this.vars[a]||this.vars[a].apply(this.vars[a+\"Scope\"]||this,this.vars[a+\"Params\"]||w)}},t._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof u&&t._hasPausedChild())return!0;t=t._next}return!1},t.getChildren=function(t,e,i,n){n=n||-9999999999;for(var r=[],s=this._first,a=0;s;)n>s._startTime||(s instanceof h?!1!==e&&(r[a++]=s):(!1!==i&&(r[a++]=s),!1!==t&&(a=(r=r.concat(s.getChildren(!0,e,i))).length))),s=s._next;return r},t.getTweensOf=function(t,e){var i,n,r=this._gc,s=[],a=0;for(r&&this._enabled(!0,!0),n=(i=h.getTweensOf(t)).length;-1<--n;)(i[n].timeline===this||e&&this._contains(i[n]))&&(s[a++]=i[n]);return r&&this._enabled(!1,!0),s},t._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},t.shiftChildren=function(t,e,i){i=i||0;for(var n,r=this._first,s=this._labels;r;)r._startTime>=i&&(r._startTime+=t),r=r._next;if(e)for(n in s)s[n]>=i&&(s[n]+=t);return this._uncache(!0)},t._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),n=i.length,r=!1;-1<--n;)i[n]._kill(t,e)&&(r=!0);return r},t.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;-1<--i;)e[i]._enabled(!1,!1);return!1!==t&&(this._labels={}),this._uncache(!0)},t.invalidate=function(){for(var t=this._first;t;)t.invalidate(),t=t._next;return this},t._enabled=function(t,e){if(t===this._gc)for(var i=this._first;i;)i._enabled(t,!0),i=i._next;return d.prototype._enabled.call(this,t,e)},t.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},t.totalDuration=function(t){if(arguments.length)return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this;if(this._dirty){for(var e,i,n=0,r=this._last,s=999999999999;r;)e=r._prev,r._dirty&&r.totalDuration(),r._startTime>s&&this._sortChildren&&!r._paused?this.add(r,r._startTime-r._delay):s=r._startTime,r._startTime<0&&!r._paused&&(n-=r._startTime,this._timeline.smoothChildTiming&&(this._startTime+=r._startTime/this._timeScale),this.shiftChildren(-r._startTime,!1,-9999999999),s=0),n<(i=r._startTime+r._totalDuration/r._timeScale)&&(n=i),r=e;this._duration=this._totalDuration=n,this._dirty=!1}return this._totalDuration},t.usesFrames=function(){for(var t=this._timeline;t._timeline;)t=t._timeline;return t===p._rootFramesTimeline},t.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},u},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],13:[function(E,h,X){var e,F,_=window,u=_.GreenSockGlobals||_;if(!u.TweenLite){var f,B=function(t){for(var e=t.split(\".\"),i=u,n=0;e.length>n;n++)i[e[n]]=i=i[e[n]]||{};return i},d=B(\"com.greensock\"),m=1e-10,N=[].slice,z=function(){},g=(e=Object.prototype.toString,F=e.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&e.call(t)===F)}),w={},q=function(o,l,c,p){this.sc=w[o]?w[o].sc:[],(w[o]=this).gsClass=null,this.func=c;var d=[];this.check=function(t){for(var e,i,n,r,s=l.length,a=s;-1<--s;)(e=w[l[s]]||new q(l[s],[])).gsClass?(d[s]=e.gsClass,a--):t&&e.sc.push(this);if(0===a&&c)for(n=(i=(\"com.greensock.\"+o).split(\".\")).pop(),r=B(i.join(\".\"))[n]=this.gsClass=c.apply(c,d),p&&(u[n]=r,\"function\"==typeof define&&define.amd?define((_.GreenSockAMDPath?_.GreenSockAMDPath+\"/\":\"\")+o.split(\".\").join(\"/\"),[],function(){return r}):void 0!==h&&h.exports&&(h.exports=r)),s=0;this.sc.length>s;s++)this.sc[s].check()},this.check(!0)},n=_._gsDefine=function(t,e,i,n){return new q(t,e,i,n)},v=d._class=function(t,e,i){return e=e||function(){},n(t,[],function(){return e},i),e},Y=(n.globals=u,[0,0,1,1]),y=[],p=v(\"easing.Ease\",function(t,e,i,n){this._func=t,this._type=i||0,this._power=n||0,this._params=e?Y.concat(e):Y},!0),x=p.map={},t=p.register=function(t,e,i,n){for(var r,s,a,o,l=e.split(\",\"),c=l.length,p=(i||\"easeIn,easeOut,easeInOut\").split(\",\");-1<--c;)for(s=l[c],r=n?v(\"easing.\"+s,null,!0):d.easing[s]||{},a=p.length;-1<--a;)o=p[a],x[s+\".\"+o]=x[o+s]=r[o]=t.getRatio?t:t[o]||new t},i=p.prototype;for(i._calcEnd=!1,i.getRatio=function(t){var e,i,n;return this._func?(this._params[0]=t,this._func.apply(null,this._params)):(n=1===(e=this._type)?1-t:2===e?t:t<.5?2*t:2*(1-t),1===(i=this._power)?n*=n:2===i?n*=n*n:3===i?n*=n*n*n:4===i&&(n*=n*n*n*n),1===e?1-n:2===e?n:t<.5?n/2:1-n/2)},s=(r=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;-1<--s;)i=r[s]+\",Power\"+s,t(new p(null,null,1,s),i,\"easeOut\",!0),t(new p(null,null,2,s),i,\"easeIn\"+(0===s?\",easeNone\":\"\")),t(new p(null,null,3,s),i,\"easeInOut\");x.linear=d.easing.Linear.easeIn,x.swing=d.easing.Quad.easeInOut;for(var r,H=v(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this}),k=((i=H.prototype).addEventListener=function(t,e,i,n,r){r=r||0;var s,a,o=this._listeners[t],l=0;for(null==o&&(this._listeners[t]=o=[]),a=o.length;-1<--a;)(s=o[a]).c===e&&s.s===i?o.splice(a,1):0===l&&r>s.pr&&(l=a+1);o.splice(l,0,{c:e,s:i,up:n,pr:r}),this!==S||f||S.wake()},i.removeEventListener=function(t,e){var i,n=this._listeners[t];if(n)for(i=n.length;-1<--i;)if(n[i].c===e)return void n.splice(i,1)},i.dispatchEvent=function(t){var e,i,n,r=this._listeners[t];if(r)for(e=r.length,i=this._eventTarget;-1<--e;)(n=r[e]).up?n.c.call(n.s||i,{type:t,target:i}):n.c.call(n.s||i)},_.requestAnimationFrame),b=_.cancelAnimationFrame,T=Date.now||function(){return(new Date).getTime()},P=T(),s=(r=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;-1<--s&&!k;)k=_[r[s]+\"RequestAnimationFrame\"],b=_[r[s]+\"CancelAnimationFrame\"]||_[r[s]+\"CancelRequestAnimationFrame\"];v(\"Ticker\",function(t,e){var n,r,s,a,o,l=this,c=T(),i=!1!==e&&k,p=500,d=33,h=function(t){var e,i=T()-P;p=e&&e+this.totalDuration()/this._timeScale>t},i._enabled=function(t,e){return f||S.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},i._kill=function(){return this._enabled(!1,!1)},i.kill=function(t,e){return this._kill(t,e),this},i._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},i._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();-1<--e;)\"{self}\"===t[e]&&(i[e]=this);return i},i.eventCallback=function(t,e,i,n){if(\"on\"===(t||\"\").substr(0,2)){var r=this.vars;if(1===arguments.length)return r[t];null==e?delete r[t]:(r[t]=e,r[t+\"Params\"]=g(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,r[t+\"Scope\"]=n),\"onUpdate\"===t&&(this._onUpdate=e)}return this},i.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},i.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&0this._duration?this._duration:t,e)):this._time},i.totalTime=function(t,e,i){if(f||S.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var n=this._totalDuration,r=this._timeline;if(nn;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._timeline&&this._uncache(!0),this},i._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t.timeline=null,t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),this._timeline)&&this._uncache(!0),this},i.render=function(t,e,i){var n,r=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;r;)n=r._next,(r._active||t>=r._startTime&&!r._paused)&&(r._reversed?r.render((r._dirty?r.totalDuration():r._totalDuration)-(t-r._startTime)*r._timeScale,e,i):r.render((t-r._startTime)*r._timeScale,e,i)),r=n},i.rawTime=function(){return f||S.wake(),this._totalTime},v(\"TweenLite\",function(t,e,i){if(o.call(this,e,i),this.render=C.prototype.render,null==t)throw\"Cannot tween a null target.\";this.target=t=\"string\"==typeof t&&C.selector(t)||t;var n,r,s,i=t.jquery||t.length&&t!==_&&t[0]&&(t[0]===_||t[0].nodeType&&t[0].style&&!t.nodeType),a=this.vars.overwrite;if(this._overwrite=a=null==a?Q[C.defaultOverwrite]:\"number\"==typeof a?a>>0:Q[a],(i||t instanceof Array||t.push&&g(t))&&\"number\"!=typeof t[0])for(this._targets=s=N.call(t,0),this._propLookup=[],this._siblings=[],n=0;s.length>n;n++)(r=s[n])?\"string\"!=typeof r?r.length&&r!==_&&r[0]&&(r[0]===_||r[0].nodeType&&r[0].style&&!r.nodeType)?(s.splice(n--,1),this._targets=s=s.concat(N.call(r,0))):(this._siblings[n]=I(r,this,!1),1===a&&1=a._startTime&&a._startTime+a.totalDuration()/a._timeScale>c&&((h||!a._initted)&&c-a._startTime<=2e-10||(p[d++]=a)));for(u=d;-1<--u;)a=p[u],2===n&&a._kill(i,t)&&(s=!0),(2!==n||!a._firstPT&&a._initted)&&a._enabled(!1,!1)&&(s=!0)}return s},Z=function(t,e,i){for(var n=t._timeline,r=n._timeScale,s=t._startTime;n._timeline;){if(s+=n._startTime,r*=n._timeScale,n._paused)return-100;n=n._timeline}return e<(s/=r)?s-e:i&&s===e||!t._initted&&s-e<2*m?m:(s+=t.totalDuration()/t._timeScale/r)>e+m?0:s-e-m},D=(i._init=function(){var t,e,i,n,r,s=this.vars,a=this._overwrittenProps,o=this._duration,l=!!s.immediateRender,c=s.ease;if(s.startAt){for(n in this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),r={},s.startAt)r[n]=s.startAt[n];if(r.overwrite=!1,r.immediateRender=!0,r.lazy=l&&!1!==s.lazy,r.startAt=r.delay=null,this._startAt=C.to(this.target,0,r),l)if(0o.pr;)n=n._next;(o._prev=n?n._prev:s)?o._prev._next=o:r=o,(o._next=n)?n._prev=o:s=o,o=a}o=e._firstPT=r}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},D.activate=function(t){for(var e=t.length;-1<--e;)t[e].API===D.API&&(R[(new t[e])._propName]=t[e]);return!0},n.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,n=t.priority||0,r=t.overwriteProps,s={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_roundProps\",initAll:\"_onInitAllProps\"},a=v(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){D.call(this,i,n),this._overwriteProps=r||[]},!0===t.global),o=a.prototype=new D(i);for(e in(o.constructor=a).API=t.API,s)\"function\"==typeof t[e]&&(o[s[e]]=t[e]);return a.version=t.version,D.activate([a]),a},r=_._gsQueue){for(s=0;r.length>s;s++)r[s]();for(i in w)w[i].func||_.console.log(\"GSAP encountered missing dependency: com.greensock.\"+i)}f=!1}},{}],14:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"easing.Back\",[\"easing.Ease\"],function(m){function t(t,e){var i=(t=c(\"easing.\"+t,function(){},!0)).prototype=new m;return i.constructor=t,i.getRatio=e,t}function e(t,e,i,n){return e=c(\"easing.\"+t,{easeOut:new e,easeIn:new i,easeInOut:new n},!0),p(e,t),e}function g(t,e,i){this.t=t,this.v=e,i&&(((this.next=i).prev=this).c=i.v-e,this.gap=i.t-t)}function i(t,e){var i=c(\"easing.\"+t,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,t.config=function(t){return new i(t)},i}var n,r,s=window.GreenSockGlobals||window,a=s.com.greensock,o=2*Math.PI,l=Math.PI/2,c=a._class,p=m.register||function(){},a=e(\"Back\",i(\"BackOut\",function(t){return--t*t*((this._p1+1)*t+this._p1)+1}),i(\"BackIn\",function(t){return t*t*((this._p1+1)*t-this._p1)}),i(\"BackInOut\",function(t){return(t*=2)<1?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),d=c(\"easing.SlowMo\",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:1t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},d.ease=new d(.7,.7),h.config=d.config=function(t,e,i){return new d(t,e,i)},(h=(n=c(\"easing.SteppedEase\",function(t){this._p1=1/(t=t||1),this._p2=t+1},!0)).prototype=new m).constructor=n,h.getRatio=function(t){return t<0?t=0:1<=t&&(t=.999999999),(this._p2*t>>0)*this._p1},h.config=n.config=function(t){return new n(t)},(h=(r=c(\"easing.RoughEase\",function(t){for(var e,i,n,r,s,a,o=(t=t||{}).taper||\"none\",l=[],c=0,p=0|(t.points||20),d=p,h=!1!==t.randomize,u=!0===t.clamp,_=t.template instanceof m?t.template:null,f=\"number\"==typeof t.strength?.4*t.strength:.4;-1<--d;)e=h?Math.random():1/p*d,i=_?_.getRatio(e):e,n=\"none\"===o?f:\"out\"===o?(r=1-e)*r*f:\"in\"===o?e*e*f:.5*(r=e<.5?2*e:2*(1-e))*r*f,h?i+=Math.random()*n-.5*n:d%2?i+=.5*n:i-=.5*n,u&&(1e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return(this._prev=e).v+(t-e.t)/e.gap*e.c},h.config=function(t){return new r(t)},r.ease=new r,e(\"Bounce\",t(\"BounceOut\",function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),t(\"BounceIn\",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),t(\"BounceInOut\",function(t){var e=t<.5;return t=(t=e?1-2*t:2*t-1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),e(\"Circ\",t(\"CircOut\",function(t){return Math.sqrt(1- --t*t)}),t(\"CircIn\",function(t){return-(Math.sqrt(1-t*t)-1)}),t(\"CircInOut\",function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),e(\"Elastic\",(h=function(t,e,i){var n=c(\"easing.\"+t,function(t,e){this._p1=t||1,this._p2=e||i,this._p3=this._p2/o*(Math.asin(1/this._p1)||0)},!0),t=n.prototype=new m;return t.constructor=n,t.getRatio=e,t.config=function(t,e){return new n(t,e)},n})(\"ElasticOut\",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*o/this._p2)+1},.3),h(\"ElasticIn\",function(t){return-(this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2))},.3),h(\"ElasticInOut\",function(t){return(t*=2)<1?-.5*this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2):.5*this._p1*Math.pow(2,-10*--t)*Math.sin((t-this._p3)*o/this._p2)+1},.45)),e(\"Expo\",t(\"ExpoOut\",function(t){return 1-Math.pow(2,-10*t)}),t(\"ExpoIn\",function(t){return Math.pow(2,10*(t-1))-.001}),t(\"ExpoInOut\",function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),e(\"Sine\",t(\"SineOut\",function(t){return Math.sin(t*l)}),t(\"SineIn\",function(t){return 1-Math.cos(t*l)}),t(\"SineInOut\",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),c(\"easing.EaseLookup\",{find:function(t){return m.map[t]}},!0),p(s.SlowMo,\"SlowMo\",\"ease,\"),p(r,\"RoughEase\",\"ease,\"),p(n,\"SteppedEase\",\"ease,\"),a},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],15:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"plugins.CSSPlugin\",[\"plugins.TweenPlugin\",\"TweenLite\"],function(s,h){function B(){s.call(this,\"css\"),this._overwriteProps.length=0,this.setRatio=B.prototype.setRatio}var u,x,k,d,_={},t=B.prototype=new s(\"css\");(t.constructor=B).version=\"1.12.1\",B.API=2,B.defaultTransformPerspective=0,B.defaultSkewType=\"compensated\",B.suffixMap={top:t=\"px\",right:t,bottom:t,left:t,width:t,height:t,fontSize:t,padding:t,margin:t,perspective:t,lineHeight:\"\"};function a(t,e){return e.toUpperCase()}function o(t){return tt.test(\"string\"==typeof t?t:(t.currentStyle||t.style).filter||\"\")?parseFloat(RegExp.$1)/100:1}function D(t){window.console&&console.log(t)}function b(t,e){var i,n,r=(e=e||C).style;if(void 0!==r[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=[\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"],n=5;-1<--n&&void 0===r[i[n]+t];);return 0<=n?(dt=\"-\"+(ht=3===n?\"ms\":i[n]).toLowerCase()+\"-\",ht+t):null}function f(t,e){var i,n={};if(e=e||m(t,null))if(i=e.length)for(;-1<--i;)n[e[i].replace(st,a)]=e.getPropertyValue(e[i]);else for(i in e)n[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)\"string\"==typeof i&&void 0===n[i]&&(n[i.replace(st,a)]=e[i]);return O||(n.opacity=o(t)),t=I(t,e,!1),n.rotation=t.rotation,n.skewX=t.skewX,n.scaleX=t.scaleX,n.scaleY=t.scaleY,n.x=t.x,n.y=t.y,H&&(n.z=t.z,n.rotationX=t.rotationX,n.rotationY=t.rotationY,n.scaleZ=t.scaleZ),n.filters&&delete n.filters,n}function E(t,e,i,n,r){var s,a,o,l={},c=t.style;for(a in i)\"cssText\"!==a&&\"length\"!==a&&isNaN(a)&&(e[a]!==(s=i[a])||r&&r[a])&&-1===a.indexOf(\"Origin\")&&(\"number\"==typeof s||\"string\"==typeof s)&&(l[a]=\"auto\"!==s||\"left\"!==a&&\"top\"!==a?\"\"!==s&&\"auto\"!==s&&\"none\"!==s||\"string\"!=typeof e[a]||\"\"===e[a].replace(p,\"\")?s:0:ut(t,a),void 0!==c[a])&&(o=new wt(c,a,c[a],o));if(n)for(a in n)\"className\"!==a&&(l[a]=n[a]);return{difs:l,firstMPT:o}}function X(t,e){var i=(t=null!=t&&\"\"!==t&&\"auto\"!==t&&\"auto auto\"!==t?t:\"0 0\").split(\" \"),n=-1!==t.indexOf(\"left\")?\"0%\":-1!==t.indexOf(\"right\")?\"100%\":i[0];return null==(t=-1!==t.indexOf(\"top\")?\"0%\":-1!==t.indexOf(\"bottom\")?\"100%\":i[1])?t=\"0\":\"center\"===t&&(t=\"50%\"),(\"center\"===n||isNaN(parseFloat(n))&&-1===(n+\"\").indexOf(\"=\"))&&(n=\"50%\"),e&&(e.oxp=-1!==n.indexOf(\"%\"),e.oyp=-1!==t.indexOf(\"%\"),e.oxr=\"=\"===n.charAt(1),e.oyr=\"=\"===t.charAt(1),e.ox=parseFloat(n.replace(p,\"\")),e.oy=parseFloat(t.replace(p,\"\"))),n+\" \"+t+(2>16,255&t>>8,255&t]:(\",\"===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),L[t]||(\"#\"===t.charAt(0)?(4===t.length&&(t=\"#\"+(e=t.charAt(1))+e+(i=t.charAt(2))+i+(n=t.charAt(3))+n),[(t=parseInt(t.substr(1),16))>>16,255&t>>8,255&t]):(\"hsl\"===t.substr(0,3)?(t=t.match(P),n=Number(t[0])%360/360,r=Number(t[1])/100,e=2*(s=Number(t[2])/100)-(i=s<=.5?s*(1+r):s+r-s*r),3a\",!!(e=G.getElementsByTagName(\"a\")[0])&&/^0.55/.test(e.style.opacity)),dt=\"\",ht=\"\",m=y.defaultView?y.defaultView.getComputedStyle:function(){},q=B.getStyle=function(t,e,i,n,r){var s;return O||\"opacity\"!==e?(!n&&t.style[e]?s=t.style[e]:(i=i||m(t))?s=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(rt,\"-$1\").toLowerCase()):t.currentStyle&&(s=t.currentStyle[e]),null==r||s&&\"none\"!==s&&\"auto\"!==s&&\"auto auto\"!==s?s:r):o(t)},A=i.convertToPixels=function(t,e,i,n,r){if(\"px\"===n||!n)return i;if(\"auto\"===n||!i)return 0;var s,a,o,l=ot.test(e),c=t,p=C.style,d=i<0;if(d&&(i=-i),\"%\"===n&&-1!==e.indexOf(\"border\"))s=i/100*(l?t.clientWidth:t.clientHeight);else{if(p.cssText=\"border:0 solid red;position:\"+q(t,\"position\")+\";line-height:0;\",\"%\"!==n&&c.appendChild)p[l?\"borderLeftWidth\":\"borderTopWidth\"]=i+n;else{if(a=(c=t.parentNode||y.body)._gsCache,o=h.ticker.frame,a&&l&&a.time===o)return a.width*i/100;p[l?\"width\":\"height\"]=i+n}c.appendChild(C),s=parseFloat(C[l?\"offsetWidth\":\"offsetHeight\"]),c.removeChild(C),l&&\"%\"===n&&!1!==B.cacheWidths&&((a=c._gsCache=c._gsCache||{}).time=o,a.width=s/i*100),0!==s||r||(s=A(t,e,i,n,!0))}return d?-s:s},ut=i.calculateOffset=function(t,e,i){var n;return\"absolute\"!==q(t,\"position\",i)?0:(i=q(t,\"margin\"+(n=\"left\"===e?\"Left\":\"Top\"),i),t[\"offset\"+n]-(A(t,e,parseFloat(i),i.replace(J,\"\"))||0))},_t={width:[\"Left\",\"Right\"],height:[\"Top\",\"Bottom\"]},ft=[\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],L={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},R=\"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#.+?\\\\b\";for(t in L)R+=\"|\"+t+\"\\\\b\";function mt(t,e,s,a){var o,l,c,p,d,h,u,_;return null==t?function(t){return t}:(l=e?(t.match(R)||[\"\"])[0]:\"\",c=t.split(l).join(\"\").match(K)||[],p=t.substr(0,t.indexOf(c[0])),d=\")\"===t.charAt(t.length-1)?\")\":\"\",h=-1!==t.indexOf(\" \")?\" \":\",\",u=c.length,_=0n;n++)r[n]=o(r[n]);return r.join(\",\")}if(e=(t.match(R)||[l])[0],n=(i=t.split(e).join(\"\").match(K)||[]).length,u>n--)for(;u>++n;)i[n]=s?i[0|(n-1)/2]:c[n];return p+i.join(h)+h+e+d+(-1!==t.indexOf(\"inset\")?\" inset\":\"\")}:function(t){var e,i,n;if(\"number\"==typeof t)t+=_;else if(a&&S.test(t)){for(i=t.replace(S,\"|\").split(\"|\"),n=0;i.length>n;n++)i[n]=o(i[n]);return i.join(\",\")}if(n=(e=t.match(K)||[]).length,u>n--)for(;u>++n;)e[n]=s?e[0|(n-1)/2]:c[n];return p+e.join(h)+d}:function(t){return t})}function gt(c){return c=c.split(\",\"),function(t,e,i,n,r,s,a){var o,l=(e+\"\").split(\" \");for(a={},o=0;o<4;o++)a[c[o]]=l[o]=l[o]||l[(o-1)/2>>0];return n.parse(t,a,r,s)}}function wt(t,e,i,n,r){this.t=t,this.p=e,this.v=i,this.r=r,n&&((n._prev=this)._next=n)}var R=RegExp(R+\")\",\"gi\"),M=(i._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,n,r,s=this.data,a=s.proxy,o=s.firstMPT;o;)e=a[o.v],o.r?e=Math.round(e):e<1e-6&&-1e-6n;n++)r+=i[\"xn\"+n]+i[\"xs\"+(n+1)];i.e=r}}else i.e=i.s+i.xs0;o=o._next}},i._parseToProxy=function(t,e,i,n,r,s){var a,o,l,c,p=n,d={},h={},u=i._transform,_=v;for(i._transform=null,v=e,n=t=i.parse(t,e,n,r),v=_,s&&(i._transform=u,p)&&(p._prev=null,p._prev)&&(p._prev._next=null);n&&n!==p;){if(n.type<=1&&(h[o=n.p]=n.s+n.c,d[o]=n.s,s||(c=new wt(n,\"s\",o,c,n.r),n.c=0),1===n.type))for(a=n.l;0<--a;)h[o=n.p+\"_\"+(l=\"xn\"+a)]=n.data[l],d[o]=n[l],s||(c=new wt(n,l,o,c,n.rxp[l]));n=n._next}return{proxy:d,end:h,firstMPT:c,pt:t}},i.CSSPropTween=function(t,e,i,n,r,s,a,o,l,c,p){this.t=t,this.p=e,this.s=i,this.c=n,this.n=a||e,t instanceof M||d.push(this.n),this.r=o,this.type=s||0,l&&(this.pr=l,u=!0),this.b=void 0===c?i:c,this.e=void 0===p?i+n:p,r&&((this._next=r)._prev=this)}),vt=B.parseComplex=function(t,e,i,n,r,s,a,o,l,c){a=new M(t,e,0,0,a,c?2:1,null,!1,o,i=i||s||\"\",n),n+=\"\";var p,d,h,u,_,f,m,g,w,v,y,x=i.split(\", \").join(\",\").split(\" \"),k=n.split(\", \").join(\",\").split(\" \"),b=x.length,T=!1!==U;for(-1===n.indexOf(\",\")&&-1===i.indexOf(\",\")||(x=x.join(\" \").replace(S,\", \").split(\" \"),k=k.join(\" \").replace(S,\", \").split(\" \"),b=x.length),b!==k.length&&(b=(x=(s||\"\").split(\" \")).length),a.plugin=l,a.setRatio=c,p=0;pd;d++)v=f[d],w=u.indexOf(v,h),a.appendXtra(u.substr(h,w-h),Number(v),F(m[d],v),\"\",T&&\"px\"===u.substr(w+v.length,2),0===d),h=w+v.length;a[\"xs\"+a.l]+=u.substr(h)}else a[\"xs\"+a.l]+=a.l?\" \"+u:u;if(-1!==n.indexOf(\"=\")&&a.data){for(y=a.xs0+a.data.s,p=1;a.l>p;p++)y+=a[\"xs\"+p]+a.data[\"xn\"+p];a.e=y+a[\"xs\"+p]}return a.l||(a.type=-1,a.xs0=a.e),a.xfirst||a},j=9;for((t=M.prototype).l=t.pr=0;0<--j;)t[\"xn\"+j]=0,t[\"xs\"+j]=\"\";t.xs0=\"\",t._next=t._prev=t.xfirst=t.data=t.plugin=t.setRatio=t.rxp=null,t.appendXtra=function(t,e,i,n,r,s){var a=this,o=a.l;return a[\"xs\"+o]+=s&&o?\" \"+t:t||\"\",i||0===o||a.plugin?(a.l++,a.type=a.setRatio?2:1,a[\"xs\"+a.l]=n||\"\",0n;n++)e.prefix=0===n&&e.prefix,e.defaultValue=i[n]||s,new yt(r[n],e)},St=((t=yt.prototype).parseComplex=function(t,e,i,n,r,s){var a,o,l,c,p,d=this.keyword;if(this.multi&&(S.test(i)||S.test(e)?(o=e.replace(S,\"|\").split(\"|\"),l=i.replace(S,\"|\").split(\"|\")):d&&(o=[e],l=[i])),l){for(c=(l.length>o.length?l:o).length,a=0;aR[s]&&R[s]>-M&&(R[s]=0);return i&&(t._gsTransform=R),R},Lt=i.set3DTransformRatio=function(t){var e,i,n,r,s,a,o,l,c,p,d,h,u,_,f,m,g,w,v,y,x,k,b=this.data,T=this.t.style,P=b.rotation*N,S=b.scaleX,C=b.scaleY,O=b.scaleZ,A=b.perspective;if(1!==t&&0!==t||\"auto\"!==b.force3D||b.rotationY||b.rotationX||1!==O||A||b.z){if(W&&(S<1e-4&&-1e-4{var l;_[t]||(l=t.charAt(0).toUpperCase()+t.substr(1)+\"Plugin\",r(t,{parser:function(t,e,i,n,r,s,a){var o=(window.GreenSockGlobals||window).com.greensock.plugins[l];return o?(o._cssRegister(),_[i].parse(t,e,i,n,r,s,a)):(D(\"Error: \"+l+\" js file not loaded.\"),r)}}))})(t[j]);(t=B.prototype)._firstPT=null,t._onInitTween=function(t,e,i){if(!t.nodeType)return!1;this._target=t,this._tween=i,this._vars=e,U=e.autoRound,u=!1,x=e.suffixMap||B.suffixMap,k=m(t,\"\"),d=this._overwriteProps;var n,r,s,a,o,l,i=t.style;if(c&&\"\"===i.zIndex&&(\"auto\"===(l=q(t,\"zIndex\",k))||\"\"===l)&&this._addLazySet(i,\"zIndex\",0),\"string\"==typeof e&&(s=i.cssText,l=f(t,k),i.cssText=s+\";\"+e,l=E(t,l,f(t)).difs,!O&&et.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,i.cssText=s),this._firstPT=n=this.parse(t,e,null),this._transformType){for(l=3===this._transformType,Y?V&&(c=!0,\"\"===i.zIndex&&(\"auto\"===(e=q(t,\"zIndex\",k))||\"\"===e)&&this._addLazySet(i,\"zIndex\",0),Q)&&this._addLazySet(i,\"WebkitBackfaceVisibility\",this._vars.WebkitBackfaceVisibility||(l?\"visible\":\"hidden\")):i.zoom=1,r=n;r&&r._next;)r=r._next;e=new M(t,\"transform\",0,0,null,2),this._linkCSSP(e,null,r),e.setRatio=l&&H?Lt:Y?Rt:xt,e.data=this._transform||I(t,k,!0),d.pop()}if(u){for(;n;){for(o=n._next,r=s;r&&r.pr>n.pr;)r=r._next;(n._prev=r?r._prev:a)?n._prev._next=n:s=n,(n._next=r)?r._prev=n:a=n,n=o}this._firstPT=s}return!0},t.parse=function(t,e,i,n){var r,s,a,o,l,c,p,d,h=t.style;for(r in e)l=e[r],o=_[r],o?i=o.parse(t,l,r,this,i,n,e):(o=q(t,r,k)+\"\",p=\"string\"==typeof l,\"color\"===r||\"fill\"===r||\"stroke\"===r||-1!==r.indexOf(\"Color\")||p&&nt.test(l)?(p||(l=$(l),l=(3{var n=parseFloat(\"width\"===e?t.offsetWidth:t.offsetHeight),r=_t[e],s=r.length;for(i=i||m(t,null);-1<--s;)n=(n-=parseFloat(q(t,\"padding\"+r[s],i,!0))||0)-(parseFloat(q(t,\"border\"+r[s]+\"Width\",i,!0))||0);return n})(t,r,k),\"px\"):\"left\"===r||\"top\"===r?(s=ut(t,r,k),\"px\"):(s=\"opacity\"!==r?0:1,\"\")),d=p&&\"=\"===l.charAt(1),p=d?(a=parseInt(l.charAt(0)+\"1\",10),l=l.substr(2),a*=parseFloat(l),l.replace(J,\"\")):(a=parseFloat(l),p&&l.substr((a+\"\").length)||\"\"),\"\"===p&&(p=r in x?x[r]:c),l=a||0===a?(d?a+s:a)+p:e[r],c!==p&&\"\"!==p&&(a||0===a)&&s&&(s=A(t,r,s,c),\"%\"===p?(s/=A(t,r,100,\"%\")/100,!0!==e.strictUnits&&(o=s+\"%\")):\"em\"===p?s/=A(t,r,1,\"em\"):\"px\"!==p&&(a=A(t,r,a,p),p=\"px\"),d)&&(a||0===a)&&(l=a+s+p),d&&(a+=s),!s&&0!==s||!a&&0!==a?void 0!==h[r]&&(l||\"NaN\"!=l+\"\"&&null!=l)?(i=new M(h,r,a||s||0,0,i,-1,r,!1,0,o,l),i.xs0=\"none\"!==l||\"display\"!==r&&-1===r.indexOf(\"Style\")?l:o):D(\"invalid \"+r+\" tween value: \"+e[r]):(i=new M(h,r,s,a-s,i,0,r,!1!==U&&(\"px\"===p||\"zIndex\"===r),0,o,l),i.xs0=p)):i=vt(h,r,o,l,!0,null,i,0,n)),n&&i&&!i.plugin&&(i.plugin=n);return i},t.setRatio=function(t){var e,i,n,r=this._firstPT;if(1!==t||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(t||this._tween._time!==this._tween._duration&&0!==this._tween._time||-1e-6===this._tween._rawPrevTime)for(;r;){if(e=r.c*t+r.s,r.r?e=Math.round(e):e<1e-6&&-1e-6n;n++)i+=r[\"xn\"+n]+r[\"xs\"+(n+1)];r.t[r.p]=i}else-1===r.type?r.t[r.p]=r.xs0:r.setRatio&&r.setRatio(t);else r.t[r.p]=e+r.xs0;r=r._next}else for(;r;)2!==r.type?r.t[r.p]=r.b:r.setRatio(t),r=r._next;else for(;r;)2!==r.type?r.t[r.p]=r.e:r.setRatio(t),r=r._next},t._enableTransforms=function(t){this._transformType=t||3===this._transformType?3:2,this._transform=this._transform||I(this._target,k,!0)};function Mt(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)}function jt(t,e,i){var n,r,s,a;if(t.slice)for(r=t.length;-1<--r;)jt(t[r],e,i);else for(r=(n=t.childNodes).length;-1<--r;)a=(s=n[r]).type,s.style&&(e.push(f(s)),i)&&i.push(s),1!==a&&9!==a&&11!==a||!s.childNodes.length||jt(s,e,i)}t._addLazySet=function(t,e,i){t=this._firstPT=new M(t,e,0,0,this._firstPT,2);t.e=i,t.setRatio=Mt,t.data=this},t._linkCSSP=function(t,e,i,n){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,n=!0),i?i._next=t:n||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},t._kill=function(t){var e,i,n,r=t;if(t.autoAlpha||t.alpha){for(i in r={},t)r[i]=t[i];r.opacity=1,r.autoAlpha&&(r.visibility=1)}return t.className&&(e=this._classNamePT)&&((n=e.xfirst)&&n._prev?this._linkCSSP(n._prev,e._next,n._prev._prev):n===this._firstPT&&(this._firstPT=e._next),e._next&&this._linkCSSP(e._next,e._next._next,n._prev),this._classNamePT=null),s.prototype._kill.call(this,r)};return B.cascadeTo=function(t,e,i){var n,r,s,a=h.to(t,e,i),o=[a],l=[],c=[],p=[],d=h._internals.reservedProps;for(t=a._targets||a.target,jt(t,l,p),a.render(e,!0),jt(t,c),a.render(0,!0),a._enabled(!0),n=p.length;-1<--n;)if((r=E(p[n],l[n],c[n])).firstMPT){for(s in r=r.difs,i)d[s]&&(r[s]=i[s]);o.push(h.to(p[n],e,r))}return o},s.activate([B]),B},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],16:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){function r(t,e){var i=\"scroll\"+(e=\"x\"===e?\"Width\":\"Height\"),n=\"client\"+e,r=document.body;return t===a||t===s||t===r?Math.max(s[i],r[i])-(a[\"inner\"+e]||Math.max(s[n],r[n])):t[i]-t[\"offset\"+e]}var s=document.documentElement,a=window,t=window._gsDefine.plugin({propName:\"scrollTo\",API:2,version:\"1.7.3\",init:function(t,e,i){return this._wdw=t===a,this._target=t,this._tween=i,this._autoKill=!1!==(e=\"object\"!=typeof e?{y:e}:e).autoKill,this.x=this.xPrev=this.getX(),this.y=this.yPrev=this.getY(),null!=e.x?(this._addTween(this,\"x\",this.x,\"max\"===e.x?r(t,\"x\"):e.x,\"scrollTo_x\",!0),this._overwriteProps.push(\"scrollTo_x\")):this.skipX=!0,null!=e.y?(this._addTween(this,\"y\",this.y,\"max\"===e.y?r(t,\"y\"):e.y,\"scrollTo_y\",!0),this._overwriteProps.push(\"scrollTo_y\")):this.skipY=!0,!0},set:function(t){this._super.setRatio.call(this,t);var t=this._wdw||!this.skipX?this.getX():this.xPrev,e=this._wdw||!this.skipY?this.getY():this.yPrev,i=e-this.yPrev,n=t-this.xPrev;this._autoKill&&(!this.skipX&&(7t&&(this.skipX=!0),!this.skipY&&(7e&&(this.skipY=!0),this.skipX)&&this.skipY&&this._tween.kill(),this._wdw?a.scrollTo(this.skipX?t:this.x,this.skipY?e:this.y):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x)),this.xPrev=this.x,this.yPrev=this.y}}),e=t.prototype;t.max=r,e.getX=function(){return this._wdw?null!=a.pageXOffset?a.pageXOffset:(null!=s.scrollLeft?s:document.body).scrollLeft:this._target.scrollLeft},e.getY=function(){return this._wdw?null!=a.pageYOffset?a.pageYOffset:(null!=s.scrollTop?s:document.body).scrollTop:this._target.scrollTop},e._kill=function(t){return t.scrollTo_x&&(this.skipX=!0),t.scrollTo_y&&(this.skipY=!0),this._super._kill.call(this,t)}}),window._gsDefine&&window._gsQueue.pop()()},{}]},{},[3]);"],"file":"wpr-admin.min.js"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["wpr-admin.min.js"],"sourcesContent":["!function n(r,a,s){function o(e,t){if(!a[e]){if(!r[e]){var i=\"function\"==typeof require&&require;if(!t&&i)return i(e,!0);if(l)return l(e,!0);throw(t=new Error(\"Cannot find module '\"+e+\"'\")).code=\"MODULE_NOT_FOUND\",t}i=a[e]={exports:{}},r[e][0].call(i.exports,function(t){return o(r[e][1][t]||t)},i,i.exports,n,r,a,s)}return a[e].exports}for(var l=\"function\"==typeof require&&require,t=0;t{let e=i.querySelector(\".select-button\"),n=i.querySelector(\".selected-value\");e.addEventListener(\"click\",()=>{i.classList.toggle(\"active\"),e.setAttribute(\"aria-expanded\",\"true\"===e.getAttribute(\"aria-expanded\")?\"false\":\"true\")}),i.addEventListener(\"click\",function(t){var e;t.target.matches(\"label\")&&(i.querySelectorAll(\"li\").forEach(t=>t.classList.remove(\"active\")),t=t.target.closest(\"li\"))&&(t.classList.add(\"active\"),t=t,e=new CustomEvent(\"custom-select-change\",{detail:{selectedOption:t}}),n.textContent=t.textContent,i.classList.remove(\"active\"),i.dispatchEvent(e))}),document.addEventListener(\"click\",t=>{i.contains(t.target)||(i.classList.remove(\"active\"),e.setAttribute(\"aria-expanded\",\"false\"))})})},{}],2:[function(t,e,i){var v=jQuery;v(document).ready(function(){var r=!1;v(\"#wpr-action-refresh_account\").on(\"click\",function(t){var e,i,n;return r||(e=v(this),i=v(\"#wpr-account-data\"),n=v(\"#wpr-expiration-data\"),t.preventDefault(),r=!0,e.trigger(\"blur\"),n.removeClass(\"wpr-isValid wpr-isInvalid\"),v.post(ajaxurl,{action:\"rocket_refresh_customer_data\",_ajax_nonce:rocket_ajax_data.nonce},function(t){e.removeClass(\"wpr-isLoading\"),e.addClass(\"wpr-isHidden\"),!0===t.success?(i.html(t.data.license_type),n.addClass(t.data.license_class).html(t.data.license_expiration),setTimeout(function(){e.removeClass(\"wpr-icon-refresh wpr-isHidden\"),e.addClass(\"wpr-icon-check\")},250)):setTimeout(function(){e.removeClass(\"wpr-icon-refresh wpr-isHidden\"),e.addClass(\"wpr-icon-close\")},250),setTimeout(function(){new TimelineLite({onComplete:function(){r=!1}}).set(e,{css:{className:\"+=wpr-isHidden\"}}).set(e,{css:{className:\"-=wpr-icon-check\"}},.25).set(e,{css:{className:\"-=wpr-icon-close\"}}).set(e,{css:{className:\"+=wpr-icon-refresh\"}},.25).set(e,{css:{className:\"-=wpr-isHidden\"}})},2e3)})),!1}),v(\".wpr-radio input[type=checkbox]\").on(\"change\",function(t){t.preventDefault();var t=v(this).attr(\"id\"),e=v(this).prop(\"checked\")?1:0;0<=[\"cloudflare_auto_settings\",\"cloudflare_devmode\",\"analytics_enabled\"].indexOf(t)||v.post(ajaxurl,{action:\"rocket_toggle_option\",_ajax_nonce:rocket_ajax_data.nonce,option:{name:t,value:e}},function(t){})}),v(\"#wpr-action-rocket_enable_mobile_cpcss\").on(\"click\",function(t){t.preventDefault(),v(\"#wpr-action-rocket_enable_mobile_cpcss\").addClass(\"wpr-isLoading\"),v.post(ajaxurl,{action:\"rocket_enable_mobile_cpcss\",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v(\"#wpr-action-rocket_enable_mobile_cpcss\").hide(),v(\".wpr-hide-on-click\").hide(),v(\".wpr-show-on-click\").show(),v(\"#wpr-action-rocket_enable_mobile_cpcss\").removeClass(\"wpr-isLoading\"))})}),v(\"#wpr-action-rocket_enable_google_fonts\").on(\"click\",function(t){t.preventDefault(),v(\"#wpr-action-rocket_enable_google_fonts\").addClass(\"wpr-isLoading\"),v.post(ajaxurl,{action:\"rocket_enable_google_fonts\",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v(\"#wpr-action-rocket_enable_google_fonts\").hide(),v(\".wpr-hide-on-click\").hide(),v(\".wpr-show-on-click\").show(),v(\"#wpr-action-rocket_enable_google_fonts\").removeClass(\"wpr-isLoading\"),v(\"#minify_google_fonts\").val(1))})}),v(\"#rocket-dismiss-promotion\").on(\"click\",function(t){t.preventDefault(),v.post(ajaxurl,{action:\"rocket_dismiss_promo\",nonce:rocket_ajax_data.nonce},function(t){t.success&&v(\"#rocket-promo-banner\").hide(\"slow\")})}),v(\"#rocket-dismiss-renewal\").on(\"click\",function(t){t.preventDefault(),v.post(ajaxurl,{action:\"rocket_dismiss_renewal\",nonce:rocket_ajax_data.nonce},function(t){t.success&&v(\"#rocket-renewal-banner\").hide(\"slow\")})}),v(\"#wpr-update-exclusion-list\").on(\"click\",function(t){t.preventDefault(),v(\"#wpr-update-exclusion-msg\").html(\"\"),v.ajax({url:rocket_ajax_data.rest_url,beforeSend:function(t){t.setRequestHeader(\"X-WP-Nonce\",rocket_ajax_data.rest_nonce),t.setRequestHeader(\"Accept\",\"application/json, */*;q=0.1\"),t.setRequestHeader(\"Content-Type\",\"application/json\")},method:\"PUT\",success:function(e){let i=v(\"#wpr-update-exclusion-msg\");i.html(\"\"),void 0!==e.success?i.append('
'+e.message+\"
\"):Object.keys(e).forEach(t=>{i.append(\"\"+t+\": \"),i.append(e[t].message),i.append(\"
\")})}})}),v(\"#wpr_enable_mobile_cache\").on(\"click\",function(t){t.preventDefault(),v(\"#wpr_enable_mobile_cache\").addClass(\"wpr-isLoading\"),v.post(ajaxurl,{action:\"rocket_enable_mobile_cache\",_ajax_nonce:rocket_ajax_data.nonce},function(t){t.success&&(v(\"#wpr_enable_mobile_cache\").hide(),v(\"#wpr_mobile_cache_default\").hide(),v(\"#wpr_mobile_cache_response\").show(),v(\"#wpr_enable_mobile_cache\").removeClass(\"wpr-isLoading\"),v(\"#cache_mobile\").val(1),v(\"#do_caching_mobile_files\").val(1))})})}),document.addEventListener(\"DOMContentLoaded\",function(){var t=document.getElementById(\"analytics_enabled\");t&&t.addEventListener(\"change\",function(){var t=this.checked;\"undefined\"!=typeof rocket_mixpanel_data&&(rocket_mixpanel_data.optin_enabled=t?\"1\":\"0\"),fetch(ajaxurl,{method:\"POST\",headers:{\"Content-Type\":\"application/x-www-form-urlencoded\"},body:new URLSearchParams({action:\"rocket_toggle_optin\",value:t?1:0,_ajax_nonce:rocket_ajax_data.nonce})})})}),document.addEventListener(\"DOMContentLoaded\",function(){let t=2e3,e=5e3,i=Array.isArray(window.rocket_ajax_data?.rocket_insights_ids)?window.rocket_ajax_data.rocket_insights_ids.slice():[],n=t,r=null,a=!0,s={data:{status:\"\",score:0,pages_num:0},html:\"\",row_html:\"\",disabled_btn_html:{global_score_widget:\"\",rocket_insights:\"\"}},o=(window.rocket_ajax_data?.global_score_data&&(s=window.rocket_ajax_data.global_score_data),v(\"#wpr-speed-radar-url-input\")),l=v(\".wpr-ri-urls-table tbody\"),c=v(\".wpr-ri-urls-table\");function d(t){i.includes(t)||i.push(t)}function p(t){var e=v(\".wpr-ri-summary-info\"),i=\"1\"===window.rocket_ajax_data?.is_free,i=v(i?\"#wpr-ri-quota-banner\":\"#rocket_insights_survey\");!1===t||!a?(e.hide(),i.removeClass(\"hidden\")):(e.show(),i.addClass(\"hidden\"))}function h(t){void 0!==t&&a!==t&&(a=t,document.querySelectorAll(\".wpr-action-speed_radar_refresh\").forEach(t=>{var e=t.closest(\".wpr-ri-item\");e&&(e=parseInt(e.dataset.rocketInsightsId,10),e=i.includes(e),!a||e?(t.classList.add(\"wpr-ri-action--disabled\"),t.setAttribute(\"disabled\",\"true\"),a||(t.classList.add(\"wpr-btn-with-tool-tip\"),t.setAttribute(\"title\",window.rocket_ajax_data?.rocket_insights_no_credit_tooltip||\"Upgrade your plan to get access to re-test performance or run new tests\"))):(t.classList.remove(\"wpr-ri-action--disabled\",\"wpr-btn-with-tool-tip\"),t.removeAttribute(\"disabled\"),t.removeAttribute(\"title\")))}))}function u(){r&&(clearTimeout(r),r=null),n=t}function _(){0{0===i.length?u():window.wp.apiFetch({path:window.wp.url.addQueryArgs(\"/wp-rocket/v1/rocket-insights/pages/progress\",{ids:i})}).then(t=>{t.success&&Array.isArray(t.results)?(h(t.has_credit),p(t.can_add_pages),s.data.status===t.global_score_data.data.status&&s.data.pages_num===t.global_score_data.data.pages_num||(s=t.global_score_data,v(\".wpr-global-score-widget\").html(t.global_score_data.html),f(s),document.dispatchEvent(new CustomEvent(\"wprGlobalScoreUpdated\",{detail:s.data}))),t.results.forEach(t=>{if(v(`.wpr-ri-item[data-rocket-insights-id=\"${t.id}\"]`).replaceWith(t.html),v(document).trigger(\"rocket-insights-page-test-polling\",[t.id]),\"completed\"===t.status&&v(document).trigger(\"rocket-insights-page-test-completed\",[t.id]),\"completed\"===t.status||\"failed\"===t.status){t=t.id;let e=parseInt(t,10);i=i.filter(t=>parseInt(t,10)!==e)}}),n=Math.min(1.3*n,e),_()):(i=[],u(),console.error(\"Polling error:\",t.results||t))})},n))}function f(t){var e=v(\".wpr-ri-urls-table .wpr-global-score\");0{try{var e=new URL(t);return e.hostname.includes(\".\")&&0{var e;t.success?(e=t.id,i.includes(e)||(o.val(\"\"),l.append(t.html),v(document).trigger(\"rocket-insights-page-added\"),c.removeClass(\"hidden\"),d(t.id),(e=v(\"#rocket_rocket_insights_pages_num\")).text(parseInt(e.text())+1),h(t.has_credit),f(s=t.global_score_data),\"disabled_btn_html\"in s&&v(\"#wpr_rocket_insights_add_page_btn_wrapper\").html(s.disabled_btn_html.rocket_insights),p(t.can_add_pages),r&&u(),_())):(o.val(\"\"),t?.message&&t.message.includes(\"Maximum number of URLs reached\")&&(disableAddUrlElements(),p(void 0!==t.can_add_pages&&t.can_add_pages)),console.error(t?.message||t))})):alert(\"Please enter a valid URL\"))}),v(document).on(\"click\",\".wpr-action-speed_radar_refresh\",function(t){t.preventDefault();var e=(t=v(this)).parents(\".wpr-ri-item\").data(\"rocket-insights-id\");e&&(t=t.data(\"source\"),window.wp.apiFetch({path:\"/wp-rocket/v1/rocket-insights/pages/\"+e,method:\"PATCH\",data:{source:t}}).then(t=>{t.success?(d(t.id),v(`#ri_details_${t.id} .details-section-td`).remove(),v(`[data-rocket-insights-id=\"${t.id}\"]`).replaceWith(t.html),v(document).trigger(\"rocket-insights-page-retest\",[t.id]),h(t.has_credit),p(t.can_add_pages),f(s=t.global_score_data),r&&u(),_()):console.error(t?.message||t)}))}),v(document).on(\"keypress\",\"#wpr-speed-radar-url-input\",function(t){\"Enter\"===t.key&&(t.preventDefault(),v(\"#wpr-action-add_page_speed_radar\").click())}),\"wprocket\"===new URLSearchParams(window.location.search).get(\"page\")&&0{f(s)},30)}),v(document).on(\"click\",\".wpr-ri-item-toggle-single\",function(){var t,e,i,n,r=v(this).closest(\".wpr-ri-item\").data(\"rocket-insights-id\");t=\"url_expand\",e=v(\"#ri_details_\"+(r=r)),i=e.hasClass(\"wpr-ri-details--expanded\"),n=v(`[data-rocket-insights-id=\"${r}\"] .wpr-ri-item-toggle-single`).is(v(\".wpr-ri-item-toggle-single\").last()),i?(e.removeClass(\"wpr-ri-details--expanded\"),v(`[data-rocket-insights-id=\"${r}\"]`).removeClass(\"wpr-ri-item--expanded\"),n&&w(!1)):(e.addClass(\"wpr-ri-details--expanded\"),v(`[data-rocket-insights-id=\"${r}\"]`).addClass(\"wpr-ri-item--expanded\"),g(\"expand\",r,t),n&&w())}),v(document).on(\"click\",\".wpr-ri-item-toggle-all\",function(){0{var t,e,i;\"wprocket\"===new URLSearchParams(window.location.search).get(\"page\")&&\"#rocket_insights\"===window.location.hash&&(m(!0),i=(t=new URLSearchParams(window.location.search)).get(\"ri_id\"),e=v(\".wpr-ri-item--expanded\")?.first()?.data(\"rocket-insights-id\"),i&&\"\"!==i?(g(\"expand\",i,\"post type listing\"),v(\"html, body\").animate({scrollTop:v(`[data-rocket-insights-id=\"${i}\"]`).offset().top-100},500),t.delete(\"ri_id\"),i=window.location.pathname+\"?\"+t.toString()+window.location.hash,window.history.replaceState({},\"\",i)):e&&g(\"expand\",e,\"auto_expand_url\"))})})},{}],3:[function(t,e,i){t(\"../lib/greensock/TweenLite.min.js\"),t(\"../lib/greensock/TimelineLite.min.js\"),t(\"../lib/greensock/easing/EasePack.min.js\"),t(\"../lib/greensock/plugins/CSSPlugin.min.js\"),t(\"../lib/greensock/plugins/ScrollToPlugin.min.js\"),t(\"../global/cdn-driver.js\"),t(\"../global/pageManager.js\"),t(\"../global/main.js\"),t(\"../global/fields.js\"),t(\"../global/beacon.js\"),t(\"../global/ajax.js\"),t(\"../global/recommendations-widget.js\"),t(\"../global/rocketcdn.js\"),t(\"../global/rocketcdn-subscription-polling.js\"),t(\"../global/countdown.js\"),t(\"../global/mixpanel.js\")},{\"../global/ajax.js\":2,\"../global/beacon.js\":4,\"../global/cdn-driver.js\":5,\"../global/countdown.js\":6,\"../global/fields.js\":7,\"../global/main.js\":8,\"../global/mixpanel.js\":9,\"../global/pageManager.js\":10,\"../global/recommendations-widget.js\":11,\"../global/rocketcdn-subscription-polling.js\":12,\"../global/rocketcdn.js\":13,\"../lib/greensock/TimelineLite.min.js\":14,\"../lib/greensock/TweenLite.min.js\":15,\"../lib/greensock/easing/EasePack.min.js\":16,\"../lib/greensock/plugins/CSSPlugin.min.js\":17,\"../lib/greensock/plugins/ScrollToPlugin.min.js\":18}],4:[function(t,e,i){var n=jQuery;n(document).ready(function(){function i(t,e){\"undefined\"!=typeof mixpanel&&mixpanel.track&&\"undefined\"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&\"0\"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&\"function\"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track(\"Button Clicked\",{button:t,button_context:e,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,context:rocket_mixpanel_data.context,path:rocket_mixpanel_data.path}))}\"Beacon\"in window&&n(\".wpr-infoAction--help\").on(\"click\",function(t){var e=n(this).attr(\"data-beacon-id\");return i(n(this).data(\"wpr_track_button\")||\"Beacon Help\",n(this).data(\"wpr_track_context\")||\"Settings\"),0!==(e=(e=e).split(\",\")).length&&(1{{let a=d.querySelectorAll(\".wpr-cdn-tabs__tab\"),t=d.querySelectorAll(\".rocketcdn, .your-own-cdn\");function s(e){t.forEach(t=>{t.classList.toggle(\"wpr-isHidden\",!t.classList.contains(e))})}function o(t){let e=t.getAttribute(\"data-title\");e&&d.querySelectorAll(\".rocketcdn-driver-js\").forEach(t=>{t.textContent=e})}function l(t){var e,i=d.querySelector(\".exclude-cdn-help-js\");i&&(e=(t=\"rocketcdn\"===t)?i.dataset.rocketcdnUrl:i.dataset.otherCdnUrl,t=t?i.dataset.rocketcdnId:i.dataset.otherCdnId,e&&(i.href=e),t)&&(i.dataset.beaconId=t)}var e,i;a.length&&(a.forEach(r=>{r.addEventListener(\"click\",()=>{var n=r.getAttribute(\"data-cdn-driver\");if(n){a.forEach(t=>t.classList.remove(\"wpr-cdn-tabs__tab--active\")),r.classList.add(\"wpr-cdn-tabs__tab--active\"),s(n),o(r),l(n),p();let e=d.getElementById(\"cdn_type\"),t=e.value,i=\"your-own-cdn\"===n?\"byocdn\":\"rocketcdn\";window.wp.apiFetch({path:\"/wp-rocket/v1/rocketcdn/driver\",method:\"POST\",data:{driver:i}}).then(t=>{u(e.value=i,t.disable_rocket_cdn_elements)}).catch(()=>{e.value=t})}})}),e=d.querySelector(\".wpr-cdn-tabs__tab--active\"),(i=e?e.getAttribute(\"data-cdn-driver\"):\"rocketcdn\")&&(s(i),p()),e)&&(o(e),l(i))}d.addEventListener(\"click\",t=>{let a=t.target.closest(\".wpr-cdn-pause\");if(a){let n=a.classList.toggle(\"wpr-cdn-pause--paused\"),r=(a.setAttribute(\"aria-pressed\",n?\"true\":\"false\"),a.disabled=!0,d.querySelector(\".rocketcdn .wpr-cdn-indicator__dot\"));r&&(r.className=\"wpr-icon-orange-loader\"),window.wp.apiFetch({path:\"/wp-rocket/v1/rocketcdn/pause\",method:\"POST\",data:{paused:n?0:1}}).then(()=>{r&&(r.className=\"wpr-cdn-indicator__dot\"),a.disabled=!1,d.querySelector('label[for=\"cdn\"]').click(),u(\"rocketcdn\",n);var t,e,i=a.closest(\".wpr-cdn-status\");i&&(i.classList.toggle(\"wpr-cdn-status--paused\",n),i.classList.toggle(\"wpr-cdn-status--long-details\",n&&\"1\"===i.dataset.longDetails),(e=i.closest(\".wpr-cdn-built-in\"))&&e.classList.toggle(\"wpr-cdn-built-in--paused\",n),p(),e=n?\"pausedText\":\"activeText\",(t=i.querySelector(\".wpr-cdn-indicator__text\"))&&i.dataset[e]&&(t.textContent=i.dataset[e]),t=n?\"pausedDetails\":\"activeDetails\",e=i.querySelector(\".wpr-cdn-indicator__details\"))&&i.dataset[t]&&(e.textContent=i.dataset[t])}).catch(()=>{a.classList.toggle(\"wpr-cdn-pause--paused\",!n),a.setAttribute(\"aria-pressed\",n?\"false\":\"true\"),a.disabled=!1,r&&(r.className=\"wpr-cdn-indicator__dot\")})}}),d.addEventListener(\"click\",t=>{let n=t.target.closest(\"#wpr_add_page_component .wpr-cdn-add-page__homepage\");if(n){n.disabled=!0;let i=d.querySelector(\".wpr-cdn-built-in\");i&&i.classList.add(\"wpr-cdn-built-in--disabled\"),window.wp.apiFetch({path:\"/wp-rocket/v1/rocketcdn/pages/homepage\",method:\"POST\"}).then(t=>{var e;n.classList.add(\"wpr-isHidden\"),f(t.count,t.limit),i&&i.classList.remove(\"wpr-cdn-built-in--disabled\"),t.items_html&&((e=d.querySelector(\".wpr-cdn-built-in .wpr-table-list\"))&&e.remove(),e=d.querySelector(\".wpr-cdn-add-page\"))&&e.insertAdjacentHTML(\"beforebegin\",t.items_html),1===t.count&&d.dispatchEvent(new CustomEvent(\"rocketCDNBannerFirstVisible\")),t.is_subscription_creation_loading&&m(),h(t.status_indicator_html)}).catch(()=>{n.disabled=!1,i&&i.classList.remove(\"wpr-cdn-built-in--disabled\")})}});{let n=d.getElementById(\"wpr_cdn_add_page_input\"),r=d.querySelector(\".wpr-cdn-add-page__button\");function a(){var t=n.value.trim();if((t=>{try{var e=new URL(t);return e.hostname.includes(\".\")&&0{var e;n.value=\"\",n.disabled=!1,r.disabled=!1,c.classList.add(\"wpr-isHidden\"),f(t.count,t.limit),i&&i.classList.remove(\"wpr-cdn-built-in--disabled\"),t.items_html&&((e=d.querySelector(\".wpr-cdn-built-in .wpr-table-list\"))&&e.remove(),e=d.querySelector(\".wpr-cdn-add-page\"))&&e.insertAdjacentHTML(\"beforebegin\",t.items_html),1===t.count&&d.dispatchEvent(new CustomEvent(\"rocketCDNBannerFirstVisible\")),t.limit===t.count&&(d.querySelector(\".wpr-cdn-built-in\").classList.add(\"wpr-cdn-built-in--disabled\"),(e=d.querySelector(\".wpr-cdn-add-page__button-wrapper\"))&&e.classList.add(\"wpr-btn-with-tool-tip\"),(e=d.querySelector(\".wpr-cdn-add-page__button\"))&&(e.disabled=!0),_(!0)),t.is_subscription_creation_loading&&m(),h(t.status_indicator_html)}).catch(()=>{n.disabled=!1,r.disabled=!1,i&&i.classList.remove(\"wpr-cdn-built-in--disabled\")})}else alert(\"Please enter a valid URL\")}n&&r&&(r.addEventListener(\"click\",a),n.addEventListener(\"keydown\",t=>{\"Enter\"===t.key&&(t.preventDefault(),a())}))}{let i=d.querySelector(\"#wpr_add_page_component\");i&&i.parentElement.addEventListener(\"click\",t=>{let e=t.target.closest(\".wpr-table-list__delete\");e&&(t=e.dataset.id)&&(e.disabled=!0,window.wp.apiFetch({path:\"/wp-rocket/v1/rocketcdn/pages/\"+t,method:\"DELETE\"}).then(t=>{var e;f(t.count,t.limit),t.items_html&&((e=i.parentElement.querySelector(\".wpr-cdn-built-in .wpr-table-list\"))&&e.remove(),e=i.parentElement.querySelector(\".wpr-cdn-add-page\"))&&e.insertAdjacentHTML(\"beforebegin\",t.items_html),0===t.count&&(d.querySelector(\".wpr-cdn-built-in .wpr-table-list\").remove(),e=i.querySelector(\".wpr-cdn-add-page__homepage\"))&&(e.classList.remove(\"wpr-isHidden\"),e.disabled=!1),t.count{e.disabled=!1}))})}d.addEventListener(\"rocketJsAfterPageNavigation\",t=>{var e;\"none\"!==getComputedStyle(t.detail.submitButton).display&&(e=[\".wpr-icon-orange-loader\",\".wpr-cdn-built-in--disabled\"].every(t=>null!==d.querySelector(t)),\"page_cdn\"!==t.detail.pageId?t.detail.submitButton.classList.contains(\"wpr-cdn-disabled\")&&t.detail.submitButton.classList.remove(\"wpr-cdn-disabled\"):e&&t.detail.submitButton.classList.add(\"wpr-cdn-disabled\"))})});let c=d.querySelector(\"#wpr_add_page_component .wpr-cdn-add-page__homepage\");function h(t){var e=d.querySelector(\".wpr-cdn-built-in .wpr-cdn-status\");e&&t&&(e.outerHTML=t)}function u(t,e){if(\"rocketcdn\"===t)return e?void d.querySelectorAll(\".cdn-shared-section, .rocketcdn-shared-section\").forEach(t=>{t.classList.add(\"wpr-cdn-disabled\")}):void d.querySelectorAll(\".cdn-shared-section, .rocketcdn-shared-section\").forEach(t=>{t.classList.remove(\"wpr-cdn-disabled\")});d.querySelectorAll(\".cdn-shared-section\").forEach(t=>{t.classList.remove(\"wpr-cdn-disabled\")})}function _(t){var e=d.querySelector(\".wpr-cdn-add-page__button-wrapper .wpr-tooltip\");e&&e.classList.toggle(\"wpr-isHidden\",!t)}let r=null;function f(t,e){let i=d.getElementById(\"wpr-rocketcdn-cta\");var n=d.getElementById(\"wpr-rocketcdn-reseller-limit-cta\");(i||n)&&(null!==r&&(clearTimeout(r),r=null),e=e<=t,i&&i.classList.toggle(\"wpr-isHidden\",0===t),n&&n.classList.toggle(\"wpr-isHidden\",!e),i)&&(e?(i.classList.add(\"wpr-rocketcdn-cta---max-limit\"),i.classList.contains(\"wpr-rocketcdn-cta--expanded\")||(i.classList.add(\"wpr-rocketcdn-cta--collapsed\"),i.classList.remove(\"wpr-rocketcdn-cta--expanded\"),r=setTimeout(()=>{r=null,i.classList.remove(\"wpr-rocketcdn-cta--collapsed\"),i.classList.add(\"wpr-rocketcdn-cta--expanded\"),d.dispatchEvent(new CustomEvent(\"rocketCDNBannerAutoExpanded\"))},15e3))):(i.classList.toggle(\"wpr-rocketcdn-cta--collapsed\",0{t.classList.add(\"wpr-cdn-disabled\");t=t.querySelector(\"textarea\");t&&(t.disabled=!0)}),d.querySelector(\"#wpr-options-submit\"));t&&t.classList.add(\"wpr-cdn-disabled\"),d.dispatchEvent(new CustomEvent(\"rocketCDNSubscriptionLoading\",{}))}d.addEventListener(\"rocketJsAfterPageNavigation\",t=>{\"page_cdn\"!==t.detail.pageId&&null!==r&&(clearTimeout(r),r=null)})}},{}],6:[function(t,e,i){function n(t,r){t=document.getElementById(t);if(null===t)return;let a=t.querySelector(\".rocket-countdown-days\"),s=t.querySelector(\".rocket-countdown-hours\"),o=t.querySelector(\".rocket-countdown-minutes\"),l=t.querySelector(\".rocket-countdown-seconds\");function e(){n=1e3*(n=r)-Date.now(),t=Math.floor(n/1e3%60),e=Math.floor(n/1e3/60%60),i=Math.floor(n/36e5%24);var t,e,i,n={total:n,days:Math.floor(n/864e5),hours:i,minutes:e,seconds:t};n.total<0?clearInterval(c):(a.innerHTML=n.days,s.innerHTML=(\"0\"+n.hours).slice(-2),o.innerHTML=(\"0\"+n.minutes).slice(-2),l.innerHTML=(\"0\"+n.seconds).slice(-2))}e();let c=setInterval(e,1e3)}if(Date.now||(Date.now=function(){return(new Date).getTime()}),void 0!==rocket_ajax_data.promo_end&&n(\"rocket-promo-countdown\",rocket_ajax_data.promo_end),void 0!==rocket_ajax_data.license_expiration&&n(\"rocket-renew-countdown\",rocket_ajax_data.license_expiration),void 0!==rocket_ajax_data.notice_end_time){var s=\"rocket-rucss-timer\";var o=rocket_ajax_data.notice_end_time;let i=document.getElementById(s),n=document.getElementById(\"rocket-notice-saas-processing\"),r=document.getElementById(\"rocket-notice-saas-success\");if(null===i)return;function l(){var t,e=Date.now(),e=Math.floor((1e3*o-e)/1e3);if(e<=0)return clearInterval(a),null!==n&&n.classList.add(\"hidden\"),null!==r&&r.classList.remove(\"hidden\"),rocket_ajax_data.cron_disabled?void 0:((t=new FormData).append(\"action\",\"rocket_spawn_cron\"),t.append(\"nonce\",rocket_ajax_data.nonce),void fetch(ajaxurl,{method:\"POST\",credentials:\"same-origin\",body:t}));i.innerHTML=e}l();let a=setInterval(l,1e3)}},{}],7:[function(t,e,i){t(\"../custom/custom-select.js\");var l=jQuery;l(document).ready(function(){function t(t){var e=(t=l(t)).attr(\"id\"),e=l('[data-parent=\"'+e+'\"]');t.is(\":checked\")?(e.addClass(\"wpr-isOpen\"),e.each(function(){var t;l(this).find(\"input[type=checkbox]\").is(\":checked\")&&(t=l(this).find(\"input[type=checkbox]\").attr(\"id\"),l('[data-parent=\"'+t+'\"]').addClass(\"wpr-isOpen\"))})):(e.removeClass(\"wpr-isOpen\"),e.each(function(){var t=l(this).find(\"input[type=checkbox]\").attr(\"id\");l('[data-parent=\"'+t+'\"]').removeClass(\"wpr-isOpen\")}))}function e(e,i){var t,n={val:i.val(),length:i.val().length};4{l(t).attr(\"checked\",i?null:\"checked\")}):(e=l(e).closest(\".wpr-list\").find(\".wpr-main-checkbox\"),n=l.map(r,t=>{if(void 0!==l(t).attr(\"checked\"))return t}),e.attr(\"checked\",n.length===r.length?\"checked\":null))}),0{var i=l(e).parents(\".wpr-list\").find(\".wpr-list-body input[type=checkbox]:not(:checked)\").length;l(e).attr(\"checked\",i<=0?\"checked\":null)});let s={checked:{},total:{}};l(\".wpr-field--categorizedmultiselect .wpr-list\").each(function(){var t=l(this).attr(\"id\");t&&(s.checked[t]=l(`#${t} input[type='checkbox']:checked`).length,s.total[t]=l(`#${t} input[type='checkbox']:not(.wpr-main-checkbox)`).length,l(`#${t} .wpr-badge-counter span`).text(s.checked[t]),l(`#${t} .wpr-badge-counter`).toggle(0\"symbol\"==typeof(t=((t,e)=>{if(\"object\"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0===i)return(\"string\"===e?String:Number)(t);if(\"object\"!=typeof(i=i.call(t,e||\"default\")))return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")})(t,\"string\"))?t:t+\"\")(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i}(class r{constructor(t){n(this,\"trackedTabs\",[\"dashboard\",\"rocket_insights\",\"page_cdn\",\"file_optimization\",\"media\",\"preload\",\"advanced_cache\",\"database\",\"heartbeat\",\"addons\",\"imagify\",\"tutorials\",\"plugins\",\"tools\"]),this.config=t}init(){\"undefined\"!=typeof mixpanel&&mixpanel.track&&this.config.optin_enabled&&\"0\"!==this.config.optin_enabled&&(mixpanel.identify(this.config.user_id),this._initListeners(this))}_initListeners(t){window.addEventListener(\"hashchange\",t._onHashChange.bind(t)),window.addEventListener(\"load\",t._onPageLoad.bind(t))}_onHashChange(t){var e=this._cleanHash(new URL(t.oldURL).hash),t=this._cleanHash(new URL(t.newURL).hash);this._canTrackTab(t)&&this._sendPageViewedEvent(this._getSource(e),t)}_onPageLoad(){var t=this._cleanHash(window.location.hash);this._canTrackTab(t)&&this._sendPageViewedEvent(this._getSource(),t)}_cleanHash(t){return t&&t.startsWith(\"#\")?t.substring(1):t}_canTrackTab(t){return this.trackedTabs.includes(t)}_getSource(t=\"\"){return t?\"settings_\"+t:this._getSourceFromQueryStringAndRemoveIt()||this._getSourceFromReferrer()}_getSourceFromQueryStringAndRemoveIt(){var t,e=new URL(window.location.href),i=e.searchParams;return i.has(\"rocket_source\")?(t=i.get(\"rocket_source\"),i.delete(\"rocket_source\"),window.history.replaceState(null,\"\",e.search?e.href:e.pathname),t):\"\"}_getSourceFromReferrer(){var t=document.referrer;return t?t.includes(window.location.hostname)?\"internal\":\"external\":\"noreferrer\"}_sendPageViewedEvent(t,e){mixpanel.track(\"Page Viewed\",{path:\"/wp-admin/options-general.php?page=wprocket#\"+e,page_name:e.replace(\"_\",\" \"),source:t,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,context:rocket_mixpanel_data.context})}static run(){\"undefined\"!=typeof rocket_mixpanel_data&&new r(rocket_mixpanel_data).init()}}).run()},{}],10:[function(t,e,i){function n(t){var e,i=this;this.$body=document.querySelector(\".wpr-body\"),this.$menuItems=document.querySelectorAll(\".wpr-menuItem\"),this.$submitButton=document.querySelector(\".wpr-Content > form > #wpr-options-submit\"),this.$pages=document.querySelectorAll(\".wpr-Page\"),this.$sidebar=document.querySelector(\".wpr-Sidebar\"),this.$content=document.querySelector(\".wpr-Content\"),this.$tips=document.querySelector(\".wpr-Content-tips\"),this.$links=document.querySelectorAll(\".wpr-body a\"),this.$menuItem=null,this.$page=null,this.pageId=null,this.bodyTop=0,this.buttonText=this.$submitButton.value,i.getBodyTop(),window.onhashchange=function(){i.detectID()},window.location.hash?(this.bodyTop=0,this.detectID()):(e=localStorage.getItem(\"wpr-hash\"),this.bodyTop=0,e?(window.location.hash=e,this.detectID()):(this.$menuItems[0].classList.add(\"isActive\"),localStorage.setItem(\"wpr-hash\",\"dashboard\"),window.location.hash=\"#dashboard\"));for(var n=0;n{window.wp&&window.wp.apiFetch?window.wp.apiFetch({path:\"/wp-rocket/v1/recommendations\"}).then(function(t){e(t)}).catch(function(t){console.error(\"Failed to fetch recommendations status:\",t)}):fetch(window.wpApiSettings?.root+\"wp-rocket/v1/recommendations\",{headers:{\"X-WP-Nonce\":window.wpApiSettings?.nonce||\"\"}}).then(function(t){if(t.ok)return t.json();throw new Error(\"Network response was not ok\")}).then(function(t){e(t)}).catch(function(t){console.error(\"Failed to fetch recommendations status:\",t)})})})},{}],12:[function(t,e,i){var n;n=document,new class{constructor(){this.path=\"/wp-rocket/v1/rocketcdn/subscription\",this.pollInterval=1e4,this.maxRetries=60,this.timerId=null,this.retryCount=0,n.addEventListener(\"rocketCDNSubscriptionLoading\",()=>this.start());[\".wpr-icon-orange-loader\",\".wpr-cdn-built-in--disabled\"].every(t=>null!==n.querySelector(t))&&this.start()}start(){this.timerId||(this.retryCount=0,this.poll())}stop(){this.timerId&&(clearTimeout(this.timerId),this.timerId=null)}poll(){this.retryCount>=this.maxRetries?this.stop():(this.retryCount++,window.wp.apiFetch({path:this.path,method:\"GET\"}).then(t=>{t&&t.is_loading?this.timerId=setTimeout(()=>this.poll(),this.pollInterval):(this.stop(),window.location.reload())}).catch(()=>{this.timerId=setTimeout(()=>this.poll(),this.pollInterval)}))}}},{}],13:[function(t,e,i){{var c=document,s=window;let i={OPENED:!1,COLLAPSED:!0};function n(){return\"#page_cdn\"===s.location.hash}function o(){var t=c.querySelector(\"#wpr-rocketcdn-cta-small\"),e=c.querySelector(\"#wpr-rocketcdn-cta\");e&&!e.classList.contains(\"wpr-isHidden\")?p(i.OPENED):t&&!t.classList.contains(\"wpr-isHidden\")&&p(i.COLLAPSED)}function r(){var t=c.getElementById(\"rocketcdn-iframe\");t&&t.dataset&&t.dataset.src&&t.dataset.src!==t.src&&(t.src=t.dataset.src,MicroModal.show(\"wpr-rocketcdn-modal\"))}function d(t){var e=new XMLHttpRequest;return e.open(\"POST\",ajaxurl),e.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\"),e.send(t),e}function l(){var t;n()&&(t=c.querySelector(\".wpr-cdn-tabs__tab--active\"))&&(t=t.getAttribute(\"data-cdn-mode\"))&&\"undefined\"!=typeof mixpanel&&mixpanel.track&&\"undefined\"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&\"0\"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&\"function\"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track(\"RocketCDN Mode\",{context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,cdn_mode:t}))}function a(t,e){if(\"undefined\"!=typeof mixpanel&&mixpanel.track&&\"undefined\"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&\"0\"!==rocket_mixpanel_data.optin_enabled&&rocket_mixpanel_data.user_id&&\"function\"==typeof mixpanel.identify){mixpanel.identify(rocket_mixpanel_data.user_id);var i={context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app,path:rocket_mixpanel_data.path};if(e&&\"object\"==typeof e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(i[n]=e[n]);mixpanel.track(t,i)}}function p(t=!1){n()&&a(\"RocketCDN Upsell Banner Viewed\",{state:t?\"collapsed\":\"opened\",page_name:t=s.location.hash,path:(\"undefined\"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.path?rocket_mixpanel_data.path:\"\")+t})}function h(t){a(\"RocketCDN Upsell Banner Expanded\",{location:s.location.hash,trigger:t})}function u(t=\"manual\"){a(\"RocketCDN Upsell Banner Collapsed\",{location:s.location.hash,trigger:t})}c.addEventListener(\"wpr-cdn-state-change\",l),c.addEventListener(\"rocketCDNBannerAutoExpanded\",()=>h(\"auto_limit_reached\")),c.addEventListener(\"rocketCDNBannerAutoCollapsed\",()=>u(\"auto_limit_released\")),c.addEventListener(\"rocketCDNBannerFirstVisible\",()=>p(i.COLLAPSED)),c.addEventListener(\"DOMContentLoaded\",()=>{if(c.querySelectorAll(\".wpr-rocketcdn-open\").forEach(n=>{n.addEventListener(\"click\",t=>{t.preventDefault();var e,t=n.classList.contains(\"wpr-rocketcdn-pricing--cta\"),i=!s.rocketcdnButtonUrl;t&&(t=i,e=(e=c.querySelector(\".wpr-cdn-built-in .wpr-table-list\"))?e.querySelectorAll(\"[data-id]\").length:0,a(\"RocketCDN Upsell CTA Clicked\",{destination:t?\"iframe\":\"express-checkout\",pages_count:e})),i?r():setTimeout(function(){s.location.href=s.rocketcdnButtonUrl},100)})}),MicroModal.init({disableScroll:!0}),(e=new URLSearchParams(s.location.search)).has(\"rocketcdn_open_iframe\")&&\"1\"===e.get(\"rocketcdn_open_iframe\")&&(s.location.hash=\"#page_cdn\",r(),e.delete(\"rocketcdn_open_iframe\"),e=e.toString(),e=s.location.pathname+(e?\"?\"+e:\"\")+s.location.hash,s.history.replaceState({},\"\",e)),!s.rocketcdnButtonUrl||\"\"===s.rocketcdnButtonUrl){{let t=\"\",e=d(t=(t+=\"action=rocketcdn_process_status\")+\"&nonce=\"+rocket_ajax_data.nonce);e.onreadystatechange=()=>{e.readyState===XMLHttpRequest.DONE&&200===e.status&&!0===JSON.parse(e.responseText).success&&r()}}var e=c.getElementById(\"rocketcdn-iframe\");let t=c.getElementById(\"wpr-rocketcdn-modal-loader\");e&&t&&e.addEventListener(\"load\",function(){t.style.display=\"none\"})}}),s.addEventListener(\"load\",()=>{c.querySelector(\"#wpr-rocketcdn-open-cta\"),c.querySelector(\"#wpr-rocketcdn-close-cta\"),c.querySelector(\"#wpr-rocketcdn-cta-small\");let t=c.querySelector(\"#wpr-rocketcdn-cta\"),e=c.querySelector(\".wpr-rocketcdn-toggle--input\"),i=c.querySelectorAll(\".wpr-rocketcdn-cta-toggle\");function n(){if(t&&i.length){let e=t.classList.toggle(\"wpr-rocketcdn-cta--collapsed\");t.classList.toggle(\"wpr-rocketcdn-cta--expanded\",!e),i.forEach(t=>{t.setAttribute(\"aria-expanded\",e?\"false\":\"true\")}),e?u():h(\"manual\")}}i.length&&t&&i.forEach(t=>{t.addEventListener(\"click\",n),t.addEventListener(\"keydown\",t=>{\"Enter\"!==t.key&&\" \"!==t.key||(t.preventDefault(),n())})}),o(),s.addEventListener(\"hashchange\",()=>{o(),l()});let r={monthly:{regular:c.querySelectorAll(\".wpr-rocketcdn-pricing-regular-price--monthly\"),current:c.querySelectorAll(\".wpr-rocketcdn-pricing--monthly\"),period:c.querySelectorAll(\".wpr-rocketcdn-pricing--billing-period--monthly\")},yearly:{regular:c.querySelectorAll(\".wpr-rocketcdn-pricing-regular-price--yearly\"),current:c.querySelectorAll(\".wpr-rocketcdn-pricing--annual\"),period:c.querySelectorAll(\".wpr-rocketcdn-pricing--billing-period--yearly\")}};e&&e.addEventListener(\"change\",function(){var t=this.checked;t?(Object.values(r.monthly).forEach(t=>t.forEach(t=>t.classList.add(\"wpr-isHidden\"))),Object.values(r.yearly).forEach(t=>t.forEach(t=>t.classList.remove(\"wpr-isHidden\")))):(Object.values(r.monthly).forEach(t=>t.forEach(t=>t.classList.remove(\"wpr-isHidden\"))),Object.values(r.yearly).forEach(t=>t.forEach(t=>t.classList.add(\"wpr-isHidden\")))),t=t,s.rocketcdnButtonUrl&&\"\"!==s.rocketcdnButtonUrl&&(s.rocketcdnButtonUrl=((t,e)=>{let i=t.replace(/([?&])is_monthly=[^&]*/g,\"\"),n=i.includes(\"?\")?\"&\":\"?\";return i+=n+\"is_monthly=\"+(e?\"0\":\"1\")})(s.rocketcdnButtonUrl,t))});var a=c.querySelector(\"#wpr-rocketcdn-activation-cta\");a&&a.addEventListener(\"click\",()=>{\"undefined\"!=typeof mixpanel&&mixpanel.track&&\"undefined\"!=typeof rocket_mixpanel_data&&rocket_mixpanel_data.optin_enabled&&\"0\"!==rocket_mixpanel_data.optin_enabled&&(rocket_mixpanel_data.user_id&&\"function\"==typeof mixpanel.identify&&mixpanel.identify(rocket_mixpanel_data.user_id),mixpanel.track(\"RocketCDN Activation Failed CTA Clicked\",{context:rocket_mixpanel_data.context,plugin:rocket_mixpanel_data.plugin,brand:rocket_mixpanel_data.brand,application:rocket_mixpanel_data.app}))})}),s.onmessage=t=>{var e=rocket_ajax_data.origin_url;if(t.origin===e){(n=t.data).hasOwnProperty(\"cdnFrameHeight\")&&(c.getElementById(\"rocketcdn-iframe\").style.height=n.cdnFrameHeight+\"px\"),(n=t.data).hasOwnProperty(\"cdnFrameClose\")&&(MicroModal.close(\"wpr-rocketcdn-modal\"),c.body.style.overflow=\"\",n.hasOwnProperty(\"cdn_page_message\"))&&-1!==[\"iframe-payment-success\",\"iframe-unsubscribe-success\"].indexOf(n.cdn_page_message)&&c.location.reload();{var n=t.data;var r=e;let i=c.querySelector(\"#rocketcdn-iframe\").contentWindow;if(n.hasOwnProperty(\"rocketcdn_token\")){var a=\"\";let e=d(a+\"action=save_rocketcdn_token\"+(\"&value=\"+n.rocketcdn_token)+(\"&nonce=\"+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},r))}}else{a={process:\"subscribe\",message:\"token_not_received\"};i.postMessage({success:!1,data:a,rocketcdn:!0},r)}}(n=t.data).hasOwnProperty(\"rocketcdn_process\")&&d(\"\"+\"action=rocketcdn_process_set\"+(\"&status=\"+n.rocketcdn_process)+(\"&nonce=\"+rocket_ajax_data.nonce));{var n=t.data;var s=e;let i=c.querySelector(\"#rocketcdn-iframe\").contentWindow;if(n.hasOwnProperty(\"rocketcdn_url\")){var o=\"\";let e=d(o+\"action=rocketcdn_enable\"+(\"&cdn_url=\"+n.rocketcdn_url)+(\"&nonce=\"+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},s))}}}{o=t.data;var l=e;let i=c.querySelector(\"#rocketcdn-iframe\").contentWindow;if(o.hasOwnProperty(\"rocketcdn_disable\")){o=\"\";let e=d((o+=\"action=rocketcdn_disable\")+(\"&nonce=\"+rocket_ajax_data.nonce));e.onreadystatechange=()=>{var t;e.readyState===XMLHttpRequest.DONE&&200===e.status&&(t=JSON.parse(e.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},l))}}}(n=t.data).hasOwnProperty(\"rocketcdn_validate_token\")&&n.hasOwnProperty(\"rocketcdn_validate_cname\")&&d(\"\"+\"action=rocketcdn_validate_token_cname\"+(\"&cdn_url=\"+n.rocketcdn_validate_cname)+(\"&cdn_token=\"+n.rocketcdn_validate_token)+(\"&nonce=\"+rocket_ajax_data.nonce))}}}},{}],14:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"TimelineLite\",[\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"],function(d,p,h){function u(t){p.call(this,t),this._labels={},this.autoRemoveChildren=!0===this.vars.autoRemoveChildren,this.smoothChildTiming=!0===this.vars.smoothChildTiming,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var e,i,n=this.vars;for(i in n)e=n[i],g(e)&&-1!==e.join(\"\").indexOf(\"{self}\")&&(n[i]=this._swapSelfInParams(e));g(n.tweens)&&this.add(n.tweens,0,n.align,n.stagger)}function _(t){var e,i={};for(e in t)i[e]=t[e];return i}function r(t,e,i,n){t._timeline.pause(t._startTime),e&&e.apply(n||t._timeline,i||w)}var f=1e-10,m=h._internals.isSelector,g=h._internals.isArray,w=[],s=window._gsDefine.globals,v=w.slice,t=u.prototype=new p;return u.version=\"1.12.1\",t.constructor=u,t.kill()._gc=!1,t.to=function(t,e,i,n){var r=i.repeat&&s.TweenMax||h;return e?this.add(new r(t,e,i),n):this.set(t,i,n)},t.from=function(t,e,i,n){return this.add((i.repeat&&s.TweenMax||h).from(t,e,i),n)},t.fromTo=function(t,e,i,n,r){var a=n.repeat&&s.TweenMax||h;return e?this.add(a.fromTo(t,e,i,n),r):this.set(t,n,r)},t.staggerTo=function(t,e,i,n,r,a,s,o){var l,c=new u({onComplete:a,onCompleteParams:s,onCompleteScope:o,smoothChildTiming:this.smoothChildTiming});for(\"string\"==typeof t&&(t=h.selector(t)||t),m(t)&&(t=v.call(t,0)),n=n||0,l=0;t.length>l;l++)i.startAt&&(i.startAt=_(i.startAt)),c.to(t[l],e,_(i),l*n);return this.add(c,r)},t.staggerFrom=function(t,e,i,n,r,a,s,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,n,r,a,s,o)},t.staggerFromTo=function(t,e,i,n,r,a,s,o,l){return n.startAt=i,n.immediateRender=0!=n.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,n,r,a,s,o,l)},t.call=function(t,e,i,n){return this.add(h.delayedCall(0,t,e,i),n)},t.set=function(t,e,i){return i=this._parseTimeOrLabel(i,0,!0),null==e.immediateRender&&(e.immediateRender=i===this._time&&!this._paused),this.add(new h(t,0,e),i)},u.exportRoot=function(t,e){null==(t=t||{}).smoothChildTiming&&(t.smoothChildTiming=!0);var i,n,r=new u(t),t=r._timeline;for(null==e&&(e=!0),t._remove(r,!0),r._startTime=0,r._rawPrevTime=r._time=r._totalTime=t._time,i=t._first;i;)n=i._next,e&&i instanceof h&&i.target===i.vars.onComplete||r.add(i,i._startTime-i._delay),i=n;return t.add(r,0),r},t.add=function(t,e,i,n){var r,a,s,o,l,c;if(\"number\"!=typeof e&&(e=this._parseTimeOrLabel(e,0,!0,t)),!(t instanceof d)){if(t instanceof Array||t&&t.push&&g(t)){for(i=i||\"normal\",n=n||0,r=e,a=t.length,s=0;st._startTime;l._timeline;)c&&l._timeline.smoothChildTiming?l.totalTime(l._totalTime,!0):l._gc&&l._enabled(!0,!1),l=l._timeline;return this},t.remove=function(t){if(t instanceof d)return this._remove(t,!1);if(t instanceof Array||t&&t.push&&g(t)){for(var e=t.length;-1<--e;)this.remove(t[e]);return this}return\"string\"==typeof t?this.removeLabel(t):this.kill(null,t)},t._remove=function(t,e){p.prototype._remove.call(this,t,e);t=this._last;return t?this._time>t._startTime+t._totalDuration/t._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},t.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},t.insert=t.insertMultiple=function(t,e,i,n){return this.add(t,e||0,i,n)},t.appendMultiple=function(t,e,i,n){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,n)},t.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},t.addPause=function(t,e,i,n){return this.call(r,[\"{self}\",e,i,n],this,t)},t.removeLabel=function(t){return delete this._labels[t],this},t.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},t._parseTimeOrLabel=function(t,e,i,n){var r;if(n instanceof d&&n.timeline===this)this.remove(n);else if(n&&(n instanceof Array||n.push&&g(n)))for(r=n.length;-1<--r;)n[r]instanceof d&&n[r].timeline===this&&this.remove(n[r]);if(\"string\"==typeof e)return this._parseTimeOrLabel(e,i&&\"number\"==typeof t&&null==this._labels[e]?t-this.duration():0,i);if(e=e||0,\"string\"!=typeof t||!isNaN(t)&&null==this._labels[t])null==t&&(t=this.duration());else{if(-1===(r=t.indexOf(\"=\")))return null==this._labels[t]?i?this._labels[t]=this.duration()+e:e:this._labels[t]+e;e=parseInt(t.charAt(r-1)+\"1\",10)*Number(t.substr(r+1)),t=1f)&&(s=\"onReverseComplete\")),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:f,t=l+1e-4):t<1e-7?(((this._totalTime=this._time=0)!==c||0===this._duration&&this._rawPrevTime!==f&&(0=c)for(n=this._first;n&&(a=n._next,!this._paused||h);)(n._active||n._startTime<=this._time&&!n._paused&&!n._gc)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=a;else for(n=this._last;n&&(a=n._prev,!this._paused||h);)(n._active||c>=n._startTime&&!n._paused&&!n._gc)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=a;this._onUpdate&&!e&&this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||w),!s||this._gc||d!==this._startTime&&p===this._timeScale||!(0===this._time||l>=this.totalDuration())||(r&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),e)||!this.vars[s]||this.vars[s].apply(this.vars[s+\"Scope\"]||this,this.vars[s+\"Params\"]||w)}},t._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof u&&t._hasPausedChild())return!0;t=t._next}return!1},t.getChildren=function(t,e,i,n){n=n||-9999999999;for(var r=[],a=this._first,s=0;a;)n>a._startTime||(a instanceof h?!1!==e&&(r[s++]=a):(!1!==i&&(r[s++]=a),!1!==t&&(s=(r=r.concat(a.getChildren(!0,e,i))).length))),a=a._next;return r},t.getTweensOf=function(t,e){var i,n,r=this._gc,a=[],s=0;for(r&&this._enabled(!0,!0),n=(i=h.getTweensOf(t)).length;-1<--n;)(i[n].timeline===this||e&&this._contains(i[n]))&&(a[s++]=i[n]);return r&&this._enabled(!1,!0),a},t._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},t.shiftChildren=function(t,e,i){i=i||0;for(var n,r=this._first,a=this._labels;r;)r._startTime>=i&&(r._startTime+=t),r=r._next;if(e)for(n in a)a[n]>=i&&(a[n]+=t);return this._uncache(!0)},t._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),n=i.length,r=!1;-1<--n;)i[n]._kill(t,e)&&(r=!0);return r},t.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;-1<--i;)e[i]._enabled(!1,!1);return!1!==t&&(this._labels={}),this._uncache(!0)},t.invalidate=function(){for(var t=this._first;t;)t.invalidate(),t=t._next;return this},t._enabled=function(t,e){if(t===this._gc)for(var i=this._first;i;)i._enabled(t,!0),i=i._next;return p.prototype._enabled.call(this,t,e)},t.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},t.totalDuration=function(t){if(arguments.length)return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this;if(this._dirty){for(var e,i,n=0,r=this._last,a=999999999999;r;)e=r._prev,r._dirty&&r.totalDuration(),r._startTime>a&&this._sortChildren&&!r._paused?this.add(r,r._startTime-r._delay):a=r._startTime,r._startTime<0&&!r._paused&&(n-=r._startTime,this._timeline.smoothChildTiming&&(this._startTime+=r._startTime/this._timeScale),this.shiftChildren(-r._startTime,!1,-9999999999),a=0),n<(i=r._startTime+r._totalDuration/r._timeScale)&&(n=i),r=e;this._duration=this._totalDuration=n,this._dirty=!1}return this._totalDuration},t.usesFrames=function(){for(var t=this._timeline;t._timeline;)t=t._timeline;return t===d._rootFramesTimeline},t.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},u},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],15:[function(j,h,q){var e,B,_=window,u=_.GreenSockGlobals||_;if(!u.TweenLite){var f,X=function(t){for(var e=t.split(\".\"),i=u,n=0;e.length>n;n++)i[e[n]]=i=i[e[n]]||{};return i},p=X(\"com.greensock\"),m=1e-10,N=[].slice,F=function(){},g=(e=Object.prototype.toString,B=e.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&e.call(t)===B)}),w={},z=function(o,l,c,d){this.sc=w[o]?w[o].sc:[],(w[o]=this).gsClass=null,this.func=c;var p=[];this.check=function(t){for(var e,i,n,r,a=l.length,s=a;-1<--a;)(e=w[l[a]]||new z(l[a],[])).gsClass?(p[a]=e.gsClass,s--):t&&e.sc.push(this);if(0===s&&c)for(n=(i=(\"com.greensock.\"+o).split(\".\")).pop(),r=X(i.join(\".\"))[n]=this.gsClass=c.apply(c,p),d&&(u[n]=r,\"function\"==typeof define&&define.amd?define((_.GreenSockAMDPath?_.GreenSockAMDPath+\"/\":\"\")+o.split(\".\").join(\"/\"),[],function(){return r}):void 0!==h&&h.exports&&(h.exports=r)),a=0;this.sc.length>a;a++)this.sc[a].check()},this.check(!0)},n=_._gsDefine=function(t,e,i,n){return new z(t,e,i,n)},v=p._class=function(t,e,i){return e=e||function(){},n(t,[],function(){return e},i),e},H=(n.globals=u,[0,0,1,1]),y=[],d=v(\"easing.Ease\",function(t,e,i,n){this._func=t,this._type=i||0,this._power=n||0,this._params=e?H.concat(e):H},!0),b=d.map={},t=d.register=function(t,e,i,n){for(var r,a,s,o,l=e.split(\",\"),c=l.length,d=(i||\"easeIn,easeOut,easeInOut\").split(\",\");-1<--c;)for(a=l[c],r=n?v(\"easing.\"+a,null,!0):p.easing[a]||{},s=d.length;-1<--s;)o=d[s],b[a+\".\"+o]=b[o+a]=r[o]=t.getRatio?t:t[o]||new t},i=d.prototype;for(i._calcEnd=!1,i.getRatio=function(t){var e,i,n;return this._func?(this._params[0]=t,this._func.apply(null,this._params)):(n=1===(e=this._type)?1-t:2===e?t:t<.5?2*t:2*(1-t),1===(i=this._power)?n*=n:2===i?n*=n*n:3===i?n*=n*n*n:4===i&&(n*=n*n*n*n),1===e?1-n:2===e?n:t<.5?n/2:1-n/2)},a=(r=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;-1<--a;)i=r[a]+\",Power\"+a,t(new d(null,null,1,a),i,\"easeOut\",!0),t(new d(null,null,2,a),i,\"easeIn\"+(0===a?\",easeNone\":\"\")),t(new d(null,null,3,a),i,\"easeInOut\");b.linear=p.easing.Linear.easeIn,b.swing=p.easing.Quad.easeInOut;for(var r,Y=v(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this}),k=((i=Y.prototype).addEventListener=function(t,e,i,n,r){r=r||0;var a,s,o=this._listeners[t],l=0;for(null==o&&(this._listeners[t]=o=[]),s=o.length;-1<--s;)(a=o[s]).c===e&&a.s===i?o.splice(s,1):0===l&&r>a.pr&&(l=s+1);o.splice(l,0,{c:e,s:i,up:n,pr:r}),this!==P||f||P.wake()},i.removeEventListener=function(t,e){var i,n=this._listeners[t];if(n)for(i=n.length;-1<--i;)if(n[i].c===e)return void n.splice(i,1)},i.dispatchEvent=function(t){var e,i,n,r=this._listeners[t];if(r)for(e=r.length,i=this._eventTarget;-1<--e;)(n=r[e]).up?n.c.call(n.s||i,{type:t,target:i}):n.c.call(n.s||i)},_.requestAnimationFrame),x=_.cancelAnimationFrame,T=Date.now||function(){return(new Date).getTime()},S=T(),a=(r=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;-1<--a&&!k;)k=_[r[a]+\"RequestAnimationFrame\"],x=_[r[a]+\"CancelAnimationFrame\"]||_[r[a]+\"CancelRequestAnimationFrame\"];v(\"Ticker\",function(t,e){var n,r,a,s,o,l=this,c=T(),i=!1!==e&&k,d=500,p=33,h=function(t){var e,i=T()-S;d=e&&e+this.totalDuration()/this._timeScale>t},i._enabled=function(t,e){return f||P.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},i._kill=function(){return this._enabled(!1,!1)},i.kill=function(t,e){return this._kill(t,e),this},i._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},i._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();-1<--e;)\"{self}\"===t[e]&&(i[e]=this);return i},i.eventCallback=function(t,e,i,n){if(\"on\"===(t||\"\").substr(0,2)){var r=this.vars;if(1===arguments.length)return r[t];null==e?delete r[t]:(r[t]=e,r[t+\"Params\"]=g(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,r[t+\"Scope\"]=n),\"onUpdate\"===t&&(this._onUpdate=e)}return this},i.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},i.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&0this._duration?this._duration:t,e)):this._time},i.totalTime=function(t,e,i){if(f||P.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var n=this._totalDuration,r=this._timeline;if(nn;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._timeline&&this._uncache(!0),this},i._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t.timeline=null,t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),this._timeline)&&this._uncache(!0),this},i.render=function(t,e,i){var n,r=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;r;)n=r._next,(r._active||t>=r._startTime&&!r._paused)&&(r._reversed?r.render((r._dirty?r.totalDuration():r._totalDuration)-(t-r._startTime)*r._timeScale,e,i):r.render((t-r._startTime)*r._timeScale,e,i)),r=n},i.rawTime=function(){return f||P.wake(),this._totalTime},v(\"TweenLite\",function(t,e,i){if(o.call(this,e,i),this.render=C.prototype.render,null==t)throw\"Cannot tween a null target.\";this.target=t=\"string\"==typeof t&&C.selector(t)||t;var n,r,a,i=t.jquery||t.length&&t!==_&&t[0]&&(t[0]===_||t[0].nodeType&&t[0].style&&!t.nodeType),s=this.vars.overwrite;if(this._overwrite=s=null==s?Q[C.defaultOverwrite]:\"number\"==typeof s?s>>0:Q[s],(i||t instanceof Array||t.push&&g(t))&&\"number\"!=typeof t[0])for(this._targets=a=N.call(t,0),this._propLookup=[],this._siblings=[],n=0;a.length>n;n++)(r=a[n])?\"string\"!=typeof r?r.length&&r!==_&&r[0]&&(r[0]===_||r[0].nodeType&&r[0].style&&!r.nodeType)?(a.splice(n--,1),this._targets=a=a.concat(N.call(r,0))):(this._siblings[n]=M(r,this,!1),1===s&&1=s._startTime&&s._startTime+s.totalDuration()/s._timeScale>c&&((h||!s._initted)&&c-s._startTime<=2e-10||(d[p++]=s)));for(u=p;-1<--u;)s=d[u],2===n&&s._kill(i,t)&&(a=!0),(2!==n||!s._firstPT&&s._initted)&&s._enabled(!1,!1)&&(a=!0)}return a},Z=function(t,e,i){for(var n=t._timeline,r=n._timeScale,a=t._startTime;n._timeline;){if(a+=n._startTime,r*=n._timeScale,n._paused)return-100;n=n._timeline}return e<(a/=r)?a-e:i&&a===e||!t._initted&&a-e<2*m?m:(a+=t.totalDuration()/t._timeScale/r)>e+m?0:a-e-m},D=(i._init=function(){var t,e,i,n,r,a=this.vars,s=this._overwrittenProps,o=this._duration,l=!!a.immediateRender,c=a.ease;if(a.startAt){for(n in this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),r={},a.startAt)r[n]=a.startAt[n];if(r.overwrite=!1,r.immediateRender=!0,r.lazy=l&&!1!==a.lazy,r.startAt=r.delay=null,this._startAt=C.to(this.target,0,r),l)if(0o.pr;)n=n._next;(o._prev=n?n._prev:a)?o._prev._next=o:r=o,(o._next=n)?n._prev=o:a=o,o=s}o=e._firstPT=r}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},D.activate=function(t){for(var e=t.length;-1<--e;)t[e].API===D.API&&(E[(new t[e])._propName]=t[e]);return!0},n.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,n=t.priority||0,r=t.overwriteProps,a={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_roundProps\",initAll:\"_onInitAllProps\"},s=v(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){D.call(this,i,n),this._overwriteProps=r||[]},!0===t.global),o=s.prototype=new D(i);for(e in(o.constructor=s).API=t.API,a)\"function\"==typeof t[e]&&(o[a[e]]=t[e]);return s.version=t.version,D.activate([s]),s},r=_._gsQueue){for(a=0;r.length>a;a++)r[a]();for(i in w)w[i].func||_.console.log(\"GSAP encountered missing dependency: com.greensock.\"+i)}f=!1}},{}],16:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"easing.Back\",[\"easing.Ease\"],function(m){function t(t,e){var i=(t=c(\"easing.\"+t,function(){},!0)).prototype=new m;return i.constructor=t,i.getRatio=e,t}function e(t,e,i,n){return e=c(\"easing.\"+t,{easeOut:new e,easeIn:new i,easeInOut:new n},!0),d(e,t),e}function g(t,e,i){this.t=t,this.v=e,i&&(((this.next=i).prev=this).c=i.v-e,this.gap=i.t-t)}function i(t,e){var i=c(\"easing.\"+t,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,t.config=function(t){return new i(t)},i}var n,r,a=window.GreenSockGlobals||window,s=a.com.greensock,o=2*Math.PI,l=Math.PI/2,c=s._class,d=m.register||function(){},s=e(\"Back\",i(\"BackOut\",function(t){return--t*t*((this._p1+1)*t+this._p1)+1}),i(\"BackIn\",function(t){return t*t*((this._p1+1)*t-this._p1)}),i(\"BackInOut\",function(t){return(t*=2)<1?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),p=c(\"easing.SlowMo\",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:1t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},p.ease=new p(.7,.7),h.config=p.config=function(t,e,i){return new p(t,e,i)},(h=(n=c(\"easing.SteppedEase\",function(t){this._p1=1/(t=t||1),this._p2=t+1},!0)).prototype=new m).constructor=n,h.getRatio=function(t){return t<0?t=0:1<=t&&(t=.999999999),(this._p2*t>>0)*this._p1},h.config=n.config=function(t){return new n(t)},(h=(r=c(\"easing.RoughEase\",function(t){for(var e,i,n,r,a,s,o=(t=t||{}).taper||\"none\",l=[],c=0,d=0|(t.points||20),p=d,h=!1!==t.randomize,u=!0===t.clamp,_=t.template instanceof m?t.template:null,f=\"number\"==typeof t.strength?.4*t.strength:.4;-1<--p;)e=h?Math.random():1/d*p,i=_?_.getRatio(e):e,n=\"none\"===o?f:\"out\"===o?(r=1-e)*r*f:\"in\"===o?e*e*f:.5*(r=e<.5?2*e:2*(1-e))*r*f,h?i+=Math.random()*n-.5*n:p%2?i+=.5*n:i-=.5*n,u&&(1e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return(this._prev=e).v+(t-e.t)/e.gap*e.c},h.config=function(t){return new r(t)},r.ease=new r,e(\"Bounce\",t(\"BounceOut\",function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),t(\"BounceIn\",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),t(\"BounceInOut\",function(t){var e=t<.5;return t=(t=e?1-2*t:2*t-1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),e(\"Circ\",t(\"CircOut\",function(t){return Math.sqrt(1- --t*t)}),t(\"CircIn\",function(t){return-(Math.sqrt(1-t*t)-1)}),t(\"CircInOut\",function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),e(\"Elastic\",(h=function(t,e,i){var n=c(\"easing.\"+t,function(t,e){this._p1=t||1,this._p2=e||i,this._p3=this._p2/o*(Math.asin(1/this._p1)||0)},!0),t=n.prototype=new m;return t.constructor=n,t.getRatio=e,t.config=function(t,e){return new n(t,e)},n})(\"ElasticOut\",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*o/this._p2)+1},.3),h(\"ElasticIn\",function(t){return-(this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2))},.3),h(\"ElasticInOut\",function(t){return(t*=2)<1?-.5*this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2):.5*this._p1*Math.pow(2,-10*--t)*Math.sin((t-this._p3)*o/this._p2)+1},.45)),e(\"Expo\",t(\"ExpoOut\",function(t){return 1-Math.pow(2,-10*t)}),t(\"ExpoIn\",function(t){return Math.pow(2,10*(t-1))-.001}),t(\"ExpoInOut\",function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),e(\"Sine\",t(\"SineOut\",function(t){return Math.sin(t*l)}),t(\"SineIn\",function(t){return 1-Math.cos(t*l)}),t(\"SineInOut\",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),c(\"easing.EaseLookup\",{find:function(t){return m.map[t]}},!0),d(a.SlowMo,\"SlowMo\",\"ease,\"),d(r,\"RoughEase\",\"ease,\"),d(n,\"SteppedEase\",\"ease,\"),s},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],17:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"plugins.CSSPlugin\",[\"plugins.TweenPlugin\",\"TweenLite\"],function(a,h){function X(){a.call(this,\"css\"),this._overwriteProps.length=0,this.setRatio=X.prototype.setRatio}var u,b,k,p,_={},t=X.prototype=new a(\"css\");(t.constructor=X).version=\"1.12.1\",X.API=2,X.defaultTransformPerspective=0,X.defaultSkewType=\"compensated\",X.suffixMap={top:t=\"px\",right:t,bottom:t,left:t,width:t,height:t,fontSize:t,padding:t,margin:t,perspective:t,lineHeight:\"\"};function s(t,e){return e.toUpperCase()}function o(t){return tt.test(\"string\"==typeof t?t:(t.currentStyle||t.style).filter||\"\")?parseFloat(RegExp.$1)/100:1}function D(t){window.console&&console.log(t)}function x(t,e){var i,n,r=(e=e||C).style;if(void 0!==r[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=[\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"],n=5;-1<--n&&void 0===r[i[n]+t];);return 0<=n?(pt=\"-\"+(ht=3===n?\"ms\":i[n]).toLowerCase()+\"-\",ht+t):null}function f(t,e){var i,n={};if(e=e||m(t,null))if(i=e.length)for(;-1<--i;)n[e[i].replace(at,s)]=e.getPropertyValue(e[i]);else for(i in e)n[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)\"string\"==typeof i&&void 0===n[i]&&(n[i.replace(at,s)]=e[i]);return L||(n.opacity=o(t)),t=M(t,e,!1),n.rotation=t.rotation,n.skewX=t.skewX,n.scaleX=t.scaleX,n.scaleY=t.scaleY,n.x=t.x,n.y=t.y,Y&&(n.z=t.z,n.rotationX=t.rotationX,n.rotationY=t.rotationY,n.scaleZ=t.scaleZ),n.filters&&delete n.filters,n}function j(t,e,i,n,r){var a,s,o,l={},c=t.style;for(s in i)\"cssText\"!==s&&\"length\"!==s&&isNaN(s)&&(e[s]!==(a=i[s])||r&&r[s])&&-1===s.indexOf(\"Origin\")&&(\"number\"==typeof a||\"string\"==typeof a)&&(l[s]=\"auto\"!==a||\"left\"!==s&&\"top\"!==s?\"\"!==a&&\"auto\"!==a&&\"none\"!==a||\"string\"!=typeof e[s]||\"\"===e[s].replace(d,\"\")?a:0:ut(t,s),void 0!==c[s])&&(o=new wt(c,s,c[s],o));if(n)for(s in n)\"className\"!==s&&(l[s]=n[s]);return{difs:l,firstMPT:o}}function q(t,e){var i=(t=null!=t&&\"\"!==t&&\"auto\"!==t&&\"auto auto\"!==t?t:\"0 0\").split(\" \"),n=-1!==t.indexOf(\"left\")?\"0%\":-1!==t.indexOf(\"right\")?\"100%\":i[0];return null==(t=-1!==t.indexOf(\"top\")?\"0%\":-1!==t.indexOf(\"bottom\")?\"100%\":i[1])?t=\"0\":\"center\"===t&&(t=\"50%\"),(\"center\"===n||isNaN(parseFloat(n))&&-1===(n+\"\").indexOf(\"=\"))&&(n=\"50%\"),e&&(e.oxp=-1!==n.indexOf(\"%\"),e.oyp=-1!==t.indexOf(\"%\"),e.oxr=\"=\"===n.charAt(1),e.oyr=\"=\"===t.charAt(1),e.ox=parseFloat(n.replace(d,\"\")),e.oy=parseFloat(t.replace(d,\"\"))),n+\" \"+t+(2>16,255&t>>8,255&t]:(\",\"===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),O[t]||(\"#\"===t.charAt(0)?(4===t.length&&(t=\"#\"+(e=t.charAt(1))+e+(i=t.charAt(2))+i+(n=t.charAt(3))+n),[(t=parseInt(t.substr(1),16))>>16,255&t>>8,255&t]):(\"hsl\"===t.substr(0,3)?(t=t.match(S),n=Number(t[0])%360/360,r=Number(t[1])/100,e=2*(a=Number(t[2])/100)-(i=a<=.5?a*(1+r):a+r-a*r),3a\",!!(e=G.getElementsByTagName(\"a\")[0])&&/^0.55/.test(e.style.opacity)),pt=\"\",ht=\"\",m=y.defaultView?y.defaultView.getComputedStyle:function(){},z=X.getStyle=function(t,e,i,n,r){var a;return L||\"opacity\"!==e?(!n&&t.style[e]?a=t.style[e]:(i=i||m(t))?a=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(rt,\"-$1\").toLowerCase()):t.currentStyle&&(a=t.currentStyle[e]),null==r||a&&\"none\"!==a&&\"auto\"!==a&&\"auto auto\"!==a?a:r):o(t)},A=i.convertToPixels=function(t,e,i,n,r){if(\"px\"===n||!n)return i;if(\"auto\"===n||!i)return 0;var a,s,o,l=ot.test(e),c=t,d=C.style,p=i<0;if(p&&(i=-i),\"%\"===n&&-1!==e.indexOf(\"border\"))a=i/100*(l?t.clientWidth:t.clientHeight);else{if(d.cssText=\"border:0 solid red;position:\"+z(t,\"position\")+\";line-height:0;\",\"%\"!==n&&c.appendChild)d[l?\"borderLeftWidth\":\"borderTopWidth\"]=i+n;else{if(s=(c=t.parentNode||y.body)._gsCache,o=h.ticker.frame,s&&l&&s.time===o)return s.width*i/100;d[l?\"width\":\"height\"]=i+n}c.appendChild(C),a=parseFloat(C[l?\"offsetWidth\":\"offsetHeight\"]),c.removeChild(C),l&&\"%\"===n&&!1!==X.cacheWidths&&((s=c._gsCache=c._gsCache||{}).time=o,s.width=a/i*100),0!==a||r||(a=A(t,e,i,n,!0))}return p?-a:a},ut=i.calculateOffset=function(t,e,i){var n;return\"absolute\"!==z(t,\"position\",i)?0:(i=z(t,\"margin\"+(n=\"left\"===e?\"Left\":\"Top\"),i),t[\"offset\"+n]-(A(t,e,parseFloat(i),i.replace(K,\"\"))||0))},_t={width:[\"Left\",\"Right\"],height:[\"Top\",\"Bottom\"]},ft=[\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],O={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},E=\"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#.+?\\\\b\";for(t in O)E+=\"|\"+t+\"\\\\b\";function mt(t,e,a,s){var o,l,c,d,p,h,u,_;return null==t?function(t){return t}:(l=e?(t.match(E)||[\"\"])[0]:\"\",c=t.split(l).join(\"\").match(J)||[],d=t.substr(0,t.indexOf(c[0])),p=\")\"===t.charAt(t.length-1)?\")\":\"\",h=-1!==t.indexOf(\" \")?\" \":\",\",u=c.length,_=0n;n++)r[n]=o(r[n]);return r.join(\",\")}if(e=(t.match(E)||[l])[0],n=(i=t.split(e).join(\"\").match(J)||[]).length,u>n--)for(;u>++n;)i[n]=a?i[0|(n-1)/2]:c[n];return d+i.join(h)+h+e+p+(-1!==t.indexOf(\"inset\")?\" inset\":\"\")}:function(t){var e,i,n;if(\"number\"==typeof t)t+=_;else if(s&&P.test(t)){for(i=t.replace(P,\"|\").split(\"|\"),n=0;i.length>n;n++)i[n]=o(i[n]);return i.join(\",\")}if(n=(e=t.match(J)||[]).length,u>n--)for(;u>++n;)e[n]=a?e[0|(n-1)/2]:c[n];return d+e.join(h)+p}:function(t){return t})}function gt(c){return c=c.split(\",\"),function(t,e,i,n,r,a,s){var o,l=(e+\"\").split(\" \");for(s={},o=0;o<4;o++)s[c[o]]=l[o]=l[o]||l[(o-1)/2>>0];return n.parse(t,s,r,a)}}function wt(t,e,i,n,r){this.t=t,this.p=e,this.v=i,this.r=r,n&&((n._prev=this)._next=n)}var E=RegExp(E+\")\",\"gi\"),R=(i._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,n,r,a=this.data,s=a.proxy,o=a.firstMPT;o;)e=s[o.v],o.r?e=Math.round(e):e<1e-6&&-1e-6n;n++)r+=i[\"xn\"+n]+i[\"xs\"+(n+1)];i.e=r}}else i.e=i.s+i.xs0;o=o._next}},i._parseToProxy=function(t,e,i,n,r,a){var s,o,l,c,d=n,p={},h={},u=i._transform,_=v;for(i._transform=null,v=e,n=t=i.parse(t,e,n,r),v=_,a&&(i._transform=u,d)&&(d._prev=null,d._prev)&&(d._prev._next=null);n&&n!==d;){if(n.type<=1&&(h[o=n.p]=n.s+n.c,p[o]=n.s,a||(c=new wt(n,\"s\",o,c,n.r),n.c=0),1===n.type))for(s=n.l;0<--s;)h[o=n.p+\"_\"+(l=\"xn\"+s)]=n.data[l],p[o]=n[l],a||(c=new wt(n,l,o,c,n.rxp[l]));n=n._next}return{proxy:p,end:h,firstMPT:c,pt:t}},i.CSSPropTween=function(t,e,i,n,r,a,s,o,l,c,d){this.t=t,this.p=e,this.s=i,this.c=n,this.n=s||e,t instanceof R||p.push(this.n),this.r=o,this.type=a||0,l&&(this.pr=l,u=!0),this.b=void 0===c?i:c,this.e=void 0===d?i+n:d,r&&((this._next=r)._prev=this)}),vt=X.parseComplex=function(t,e,i,n,r,a,s,o,l,c){s=new R(t,e,0,0,s,c?2:1,null,!1,o,i=i||a||\"\",n),n+=\"\";var d,p,h,u,_,f,m,g,w,v,y,b=i.split(\", \").join(\",\").split(\" \"),k=n.split(\", \").join(\",\").split(\" \"),x=b.length,T=!1!==U;for(-1===n.indexOf(\",\")&&-1===i.indexOf(\",\")||(b=b.join(\" \").replace(P,\", \").split(\" \"),k=k.join(\" \").replace(P,\", \").split(\" \"),x=b.length),x!==k.length&&(x=(b=(a||\"\").split(\" \")).length),s.plugin=l,s.setRatio=c,d=0;dp;p++)v=f[p],w=u.indexOf(v,h),s.appendXtra(u.substr(h,w-h),Number(v),B(m[p],v),\"\",T&&\"px\"===u.substr(w+v.length,2),0===p),h=w+v.length;s[\"xs\"+s.l]+=u.substr(h)}else s[\"xs\"+s.l]+=s.l?\" \"+u:u;if(-1!==n.indexOf(\"=\")&&s.data){for(y=s.xs0+s.data.s,d=1;s.l>d;d++)y+=s[\"xs\"+d]+s.data[\"xn\"+d];s.e=y+s[\"xs\"+d]}return s.l||(s.type=-1,s.xs0=s.e),s.xfirst||s},I=9;for((t=R.prototype).l=t.pr=0;0<--I;)t[\"xn\"+I]=0,t[\"xs\"+I]=\"\";t.xs0=\"\",t._next=t._prev=t.xfirst=t.data=t.plugin=t.setRatio=t.rxp=null,t.appendXtra=function(t,e,i,n,r,a){var s=this,o=s.l;return s[\"xs\"+o]+=a&&o?\" \"+t:t||\"\",i||0===o||s.plugin?(s.l++,s.type=s.setRatio?2:1,s[\"xs\"+s.l]=n||\"\",0n;n++)e.prefix=0===n&&e.prefix,e.defaultValue=i[n]||a,new yt(r[n],e)},Pt=((t=yt.prototype).parseComplex=function(t,e,i,n,r,a){var s,o,l,c,d,p=this.keyword;if(this.multi&&(P.test(i)||P.test(e)?(o=e.replace(P,\"|\").split(\"|\"),l=i.replace(P,\"|\").split(\"|\")):p&&(o=[e],l=[i])),l){for(c=(l.length>o.length?l:o).length,s=0;sE[a]&&E[a]>-R&&(E[a]=0);return i&&(t._gsTransform=E),E},Ot=i.set3DTransformRatio=function(t){var e,i,n,r,a,s,o,l,c,d,p,h,u,_,f,m,g,w,v,y,b,k,x=this.data,T=this.t.style,S=x.rotation*N,P=x.scaleX,C=x.scaleY,L=x.scaleZ,A=x.perspective;if(1!==t&&0!==t||\"auto\"!==x.force3D||x.rotationY||x.rotationX||1!==L||A||x.z){if(W&&(P<1e-4&&-1e-4{var l;_[t]||(l=t.charAt(0).toUpperCase()+t.substr(1)+\"Plugin\",r(t,{parser:function(t,e,i,n,r,a,s){var o=(window.GreenSockGlobals||window).com.greensock.plugins[l];return o?(o._cssRegister(),_[i].parse(t,e,i,n,r,a,s)):(D(\"Error: \"+l+\" js file not loaded.\"),r)}}))})(t[I]);(t=X.prototype)._firstPT=null,t._onInitTween=function(t,e,i){if(!t.nodeType)return!1;this._target=t,this._tween=i,this._vars=e,U=e.autoRound,u=!1,b=e.suffixMap||X.suffixMap,k=m(t,\"\"),p=this._overwriteProps;var n,r,a,s,o,l,i=t.style;if(c&&\"\"===i.zIndex&&(\"auto\"===(l=z(t,\"zIndex\",k))||\"\"===l)&&this._addLazySet(i,\"zIndex\",0),\"string\"==typeof e&&(a=i.cssText,l=f(t,k),i.cssText=a+\";\"+e,l=j(t,l,f(t)).difs,!L&&et.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,i.cssText=a),this._firstPT=n=this.parse(t,e,null),this._transformType){for(l=3===this._transformType,H?V&&(c=!0,\"\"===i.zIndex&&(\"auto\"===(e=z(t,\"zIndex\",k))||\"\"===e)&&this._addLazySet(i,\"zIndex\",0),Q)&&this._addLazySet(i,\"WebkitBackfaceVisibility\",this._vars.WebkitBackfaceVisibility||(l?\"visible\":\"hidden\")):i.zoom=1,r=n;r&&r._next;)r=r._next;e=new R(t,\"transform\",0,0,null,2),this._linkCSSP(e,null,r),e.setRatio=l&&Y?Ot:H?Et:bt,e.data=this._transform||M(t,k,!0),p.pop()}if(u){for(;n;){for(o=n._next,r=a;r&&r.pr>n.pr;)r=r._next;(n._prev=r?r._prev:s)?n._prev._next=n:a=n,(n._next=r)?r._prev=n:s=n,n=o}this._firstPT=a}return!0},t.parse=function(t,e,i,n){var r,a,s,o,l,c,d,p,h=t.style;for(r in e)l=e[r],o=_[r],o?i=o.parse(t,l,r,this,i,n,e):(o=z(t,r,k)+\"\",d=\"string\"==typeof l,\"color\"===r||\"fill\"===r||\"stroke\"===r||-1!==r.indexOf(\"Color\")||d&&nt.test(l)?(d||(l=$(l),l=(3{var n=parseFloat(\"width\"===e?t.offsetWidth:t.offsetHeight),r=_t[e],a=r.length;for(i=i||m(t,null);-1<--a;)n=(n-=parseFloat(z(t,\"padding\"+r[a],i,!0))||0)-(parseFloat(z(t,\"border\"+r[a]+\"Width\",i,!0))||0);return n})(t,r,k),\"px\"):\"left\"===r||\"top\"===r?(a=ut(t,r,k),\"px\"):(a=\"opacity\"!==r?0:1,\"\")),p=d&&\"=\"===l.charAt(1),d=p?(s=parseInt(l.charAt(0)+\"1\",10),l=l.substr(2),s*=parseFloat(l),l.replace(K,\"\")):(s=parseFloat(l),d&&l.substr((s+\"\").length)||\"\"),\"\"===d&&(d=r in b?b[r]:c),l=s||0===s?(p?s+a:s)+d:e[r],c!==d&&\"\"!==d&&(s||0===s)&&a&&(a=A(t,r,a,c),\"%\"===d?(a/=A(t,r,100,\"%\")/100,!0!==e.strictUnits&&(o=a+\"%\")):\"em\"===d?a/=A(t,r,1,\"em\"):\"px\"!==d&&(s=A(t,r,s,d),d=\"px\"),p)&&(s||0===s)&&(l=s+a+d),p&&(s+=a),!a&&0!==a||!s&&0!==s?void 0!==h[r]&&(l||\"NaN\"!=l+\"\"&&null!=l)?(i=new R(h,r,s||a||0,0,i,-1,r,!1,0,o,l),i.xs0=\"none\"!==l||\"display\"!==r&&-1===r.indexOf(\"Style\")?l:o):D(\"invalid \"+r+\" tween value: \"+e[r]):(i=new R(h,r,a,s-a,i,0,r,!1!==U&&(\"px\"===d||\"zIndex\"===r),0,o,l),i.xs0=d)):i=vt(h,r,o,l,!0,null,i,0,n)),n&&i&&!i.plugin&&(i.plugin=n);return i},t.setRatio=function(t){var e,i,n,r=this._firstPT;if(1!==t||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(t||this._tween._time!==this._tween._duration&&0!==this._tween._time||-1e-6===this._tween._rawPrevTime)for(;r;){if(e=r.c*t+r.s,r.r?e=Math.round(e):e<1e-6&&-1e-6n;n++)i+=r[\"xn\"+n]+r[\"xs\"+(n+1)];r.t[r.p]=i}else-1===r.type?r.t[r.p]=r.xs0:r.setRatio&&r.setRatio(t);else r.t[r.p]=e+r.xs0;r=r._next}else for(;r;)2!==r.type?r.t[r.p]=r.b:r.setRatio(t),r=r._next;else for(;r;)2!==r.type?r.t[r.p]=r.e:r.setRatio(t),r=r._next},t._enableTransforms=function(t){this._transformType=t||3===this._transformType?3:2,this._transform=this._transform||M(this._target,k,!0)};function Rt(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)}function It(t,e,i){var n,r,a,s;if(t.slice)for(r=t.length;-1<--r;)It(t[r],e,i);else for(r=(n=t.childNodes).length;-1<--r;)s=(a=n[r]).type,a.style&&(e.push(f(a)),i)&&i.push(a),1!==s&&9!==s&&11!==s||!a.childNodes.length||It(a,e,i)}t._addLazySet=function(t,e,i){t=this._firstPT=new R(t,e,0,0,this._firstPT,2);t.e=i,t.setRatio=Rt,t.data=this},t._linkCSSP=function(t,e,i,n){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,n=!0),i?i._next=t:n||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},t._kill=function(t){var e,i,n,r=t;if(t.autoAlpha||t.alpha){for(i in r={},t)r[i]=t[i];r.opacity=1,r.autoAlpha&&(r.visibility=1)}return t.className&&(e=this._classNamePT)&&((n=e.xfirst)&&n._prev?this._linkCSSP(n._prev,e._next,n._prev._prev):n===this._firstPT&&(this._firstPT=e._next),e._next&&this._linkCSSP(e._next,e._next._next,n._prev),this._classNamePT=null),a.prototype._kill.call(this,r)};return X.cascadeTo=function(t,e,i){var n,r,a,s=h.to(t,e,i),o=[s],l=[],c=[],d=[],p=h._internals.reservedProps;for(t=s._targets||s.target,It(t,l,d),s.render(e,!0),It(t,c),s.render(0,!0),s._enabled(!0),n=d.length;-1<--n;)if((r=j(d[n],l[n],c[n])).firstMPT){for(a in r=r.difs,i)p[a]&&(r[a]=i[a]);o.push(h.to(d[n],e,r))}return o},a.activate([X]),X},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],18:[function(t,e,i){(window._gsQueue||(window._gsQueue=[])).push(function(){function r(t,e){var i=\"scroll\"+(e=\"x\"===e?\"Width\":\"Height\"),n=\"client\"+e,r=document.body;return t===s||t===a||t===r?Math.max(a[i],r[i])-(s[\"inner\"+e]||Math.max(a[n],r[n])):t[i]-t[\"offset\"+e]}var a=document.documentElement,s=window,t=window._gsDefine.plugin({propName:\"scrollTo\",API:2,version:\"1.7.3\",init:function(t,e,i){return this._wdw=t===s,this._target=t,this._tween=i,this._autoKill=!1!==(e=\"object\"!=typeof e?{y:e}:e).autoKill,this.x=this.xPrev=this.getX(),this.y=this.yPrev=this.getY(),null!=e.x?(this._addTween(this,\"x\",this.x,\"max\"===e.x?r(t,\"x\"):e.x,\"scrollTo_x\",!0),this._overwriteProps.push(\"scrollTo_x\")):this.skipX=!0,null!=e.y?(this._addTween(this,\"y\",this.y,\"max\"===e.y?r(t,\"y\"):e.y,\"scrollTo_y\",!0),this._overwriteProps.push(\"scrollTo_y\")):this.skipY=!0,!0},set:function(t){this._super.setRatio.call(this,t);var t=this._wdw||!this.skipX?this.getX():this.xPrev,e=this._wdw||!this.skipY?this.getY():this.yPrev,i=e-this.yPrev,n=t-this.xPrev;this._autoKill&&(!this.skipX&&(7t&&(this.skipX=!0),!this.skipY&&(7e&&(this.skipY=!0),this.skipX)&&this.skipY&&this._tween.kill(),this._wdw?s.scrollTo(this.skipX?t:this.x,this.skipY?e:this.y):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x)),this.xPrev=this.x,this.yPrev=this.y}}),e=t.prototype;t.max=r,e.getX=function(){return this._wdw?null!=s.pageXOffset?s.pageXOffset:(null!=a.scrollLeft?a:document.body).scrollLeft:this._target.scrollLeft},e.getY=function(){return this._wdw?null!=s.pageYOffset?s.pageYOffset:(null!=a.scrollTop?a:document.body).scrollTop:this._target.scrollTop},e._kill=function(t){return t.scrollTo_x&&(this.skipX=!0),t.scrollTo_y&&(this.skipY=!0),this._super._kill.call(this,t)}}),window._gsDefine&&window._gsQueue.pop()()},{}]},{},[3]);"],"file":"wpr-admin.min.js"} \ No newline at end of file diff --git a/web/app/plugins/wp-rocket/composer.json b/web/app/plugins/wp-rocket/composer.json index 0a314d5ec..93298dfe0 100644 --- a/web/app/plugins/wp-rocket/composer.json +++ b/web/app/plugins/wp-rocket/composer.json @@ -40,15 +40,16 @@ } ], "require": { - "php": ">=7.3", + "php": ">=7.4", "cloudflare/cf-ip-rewrite": "^1.0", "voku/simple_html_dom": "^4.8", "wp-media/apply-filters-typed": "^1.0", + "wp-media/mcp-oauth": "^1.0.1", "wp-media/plugin-family": "1.0.8", - "wp-media/wp-mixpanel": "^1.0" + "wp-media/wp-mixpanel": "^1.4.4" }, "require-dev": { - "php": "^7 || ^8", + "php": "^7.4 || ^8", "berlindb/core": "2.0.2", "brain/monkey": "^2.0", "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", @@ -57,6 +58,7 @@ "mnsami/composer-custom-directory-installer": "^2.0", "mobiledetect/mobiledetectlib": "^2.8", "php-stubs/wordpress-tests-stubs": "^6.8", + "php-stubs/wp-cli-stubs": "^2.12", "phpcompatibility/phpcompatibility-wp": "^2.0", "phpstan/extension-installer": "^1.3", "phpstan/phpstan-mockery": "^1.1", diff --git a/web/app/plugins/wp-rocket/composer.lock b/web/app/plugins/wp-rocket/composer.lock index f232887bb..3e5842129 100644 --- a/web/app/plugins/wp-rocket/composer.lock +++ b/web/app/plugins/wp-rocket/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "67a7d630f954ae28e857be6bfc759cab", + "content-hash": "b037f786402fcc0bdba73e8a6afa97df", "packages": [ { "name": "cloudflare/cf-ip-rewrite", @@ -123,16 +123,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { @@ -183,7 +183,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" }, "funding": [ { @@ -203,7 +203,7 @@ "type": "tidelift" } ], - "time": "2025-01-02T08:10:11+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "voku/simple_html_dom", @@ -286,6 +286,130 @@ ], "time": "2024-07-03T16:05:14+00:00" }, + { + "name": "wordpress/mcp-adapter", + "version": "v0.5.0", + "source": { + "type": "git", + "url": "https://github.com/WordPress/mcp-adapter.git", + "reference": "7bfc49f46b3ea7544dded49d5a606089f825a80b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/WordPress/mcp-adapter/zipball/7bfc49f46b3ea7544dded49d5a606089f825a80b", + "reference": "7bfc49f46b3ea7544dded49d5a606089f825a80b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0", + "wordpress/php-mcp-schema": "^0.1.0" + }, + "require-dev": { + "automattic/vipwpcs": "^3.0", + "php-stubs/wordpress-stubs": "^6.9", + "php-stubs/wp-cli-stubs": "^2.12", + "phpcompatibility/php-compatibility": "10.x-dev as 9.99.99", + "phpcompatibility/phpcompatibility-wp": "^2.1", + "phpstan/extension-installer": "^1.3", + "phpstan/php-8-stubs": "^0.4.24", + "phpstan/phpstan": "^2.1.22", + "phpstan/phpstan-deprecation-rules": "^2.0.3", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.0", + "szepeviktor/phpstan-wordpress": "^2.0", + "wp-phpunit/wp-phpunit": "^6.5", + "wpackagist-plugin/plugin-check": "^1.6", + "yoast/phpunit-polyfills": "^4.0" + }, + "type": "wordpress-plugin", + "extra": { + "installer-paths": { + "vendor/{$vendor}/{$name}/": [ + "wpackagist-plugin/plugin-check" + ] + } + }, + "autoload": { + "psr-4": { + "WP\\MCP\\": "includes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "WordPress AI Team", + "homepage": "https://make.wordpress.org/ai/" + } + ], + "description": "Adapter for Abilities API, letting WordPress abilities to be used as MCP tools, resources or prompts", + "homepage": "https://github.com/wordpress/mcp-adapter", + "keywords": [ + "abilities-api", + "adapter", + "ai", + "api", + "integration", + "mcp", + "model-context-protocol", + "wordpress" + ], + "support": { + "issues": "https://github.com/wordpress/mcp-adapter/issues", + "source": "https://github.com/wordpress/mcp-adapter" + }, + "time": "2026-04-14T12:12:58+00:00" + }, + { + "name": "wordpress/php-mcp-schema", + "version": "v0.1.3", + "source": { + "type": "git", + "url": "https://github.com/WordPress/php-mcp-schema", + "reference": "b2fcf97aa023ce46e9f03493c194a72d5a46bea2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/WordPress/php-mcp-schema/zipball/b2fcf97aa023ce46e9f03493c194a72d5a46bea2", + "reference": "b2fcf97aa023ce46e9f03493c194a72d5a46bea2", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "phpstan/phpstan": "^1.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "WP\\McpSchema\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "WordPress", + "homepage": "https://wordpress.org" + } + ], + "description": "PHP DTOs for the Model Context Protocol (MCP) specification", + "homepage": "https://github.com/WordPress/php-mcp-schema", + "keywords": [ + "dto", + "mcp", + "model-context-protocol", + "php", + "schema" + ], + "time": "2026-08-10T09:12:14+00:00" + }, { "name": "wp-media/apply-filters-typed", "version": "v1.2", @@ -330,6 +454,67 @@ }, "time": "2024-09-16T12:21:47+00:00" }, + { + "name": "wp-media/mcp-oauth", + "version": "v1.1", + "source": { + "type": "git", + "url": "https://github.com/wp-media/mcp-oauth.git", + "reference": "0d170542ffe5435f8bfaf4852ea1567f043790f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wp-media/mcp-oauth/zipball/0d170542ffe5435f8bfaf4852ea1567f043790f2", + "reference": "0d170542ffe5435f8bfaf4852ea1567f043790f2", + "shasum": "" + }, + "require": { + "php": ">=7.4", + "wordpress/mcp-adapter": "^0.5", + "wp-media/apply-filters-typed": "^1.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1", + "php": ">=7.4", + "php-stubs/wordpress-tests-stubs": "^6.8", + "phpcompatibility/phpcompatibility-wp": "^2.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "roave/security-advisories": "dev-master", + "szepeviktor/phpstan-wordpress": "^2.0", + "wp-coding-standards/wpcs": "^3", + "wp-media/phpunit": "^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "WPMedia\\MCP\\OAuth\\": "inc/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "WP Media", + "email": "contact@wp-media.me" + } + ], + "description": "MCP OAuth layer for the WordPress MCP Adapter", + "homepage": "https://github.com/wp-media/mcp-oauth", + "keywords": [ + "plugin", + "wordpress", + "wp" + ], + "support": { + "issues": "https://github.com/wp-media/mcp-oauth/issues", + "source": "https://github.com/wp-media/mcp-oauth/tree/v1.1" + }, + "time": "2026-08-13T12:37:37+00:00" + }, { "name": "wp-media/plugin-family", "version": "v1.0.8", @@ -381,16 +566,16 @@ }, { "name": "wp-media/wp-mixpanel", - "version": "v1.4.0", + "version": "v1.4.4", "source": { "type": "git", "url": "https://github.com/wp-media/wp-mixpanel.git", - "reference": "dfedab2014e816a1040c57d544a6180f1d446624" + "reference": "424106dea366f96cb21d9ccb537e388ec1187a57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-media/wp-mixpanel/zipball/dfedab2014e816a1040c57d544a6180f1d446624", - "reference": "dfedab2014e816a1040c57d544a6180f1d446624", + "url": "https://api.github.com/repos/wp-media/wp-mixpanel/zipball/424106dea366f96cb21d9ccb537e388ec1187a57", + "reference": "424106dea366f96cb21d9ccb537e388ec1187a57", "shasum": "" }, "require": { @@ -430,9 +615,9 @@ "description": "WordPress Mixpanel Integration", "support": { "issues": "https://github.com/wp-media/wp-mixpanel/issues", - "source": "https://github.com/wp-media/wp-mixpanel/tree/v1.4.0" + "source": "https://github.com/wp-media/wp-mixpanel/tree/v1.4.4" }, - "time": "2025-11-12T09:51:35+00:00" + "time": "2026-08-05T15:47:15+00:00" } ], "packages-dev": [ @@ -878,20 +1063,22 @@ }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b61cd040da1a4925bc90a51c074f5297e7c0fa52", + "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" + "ext-ctype": "*", + "ext-dom": "*", + "php": "^7.4|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -899,13 +1086,15 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -923,9 +1112,9 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v3.0.0" }, - "time": "2020-07-09T08:09:16+00:00" + "time": "2026-03-17T11:56:53+00:00" }, { "name": "league/container", @@ -1118,16 +1307,16 @@ }, { "name": "mobiledetect/mobiledetectlib", - "version": "2.8.45", + "version": "2.8.47", "source": { "type": "git", "url": "https://github.com/serbanghita/Mobile-Detect.git", - "reference": "96aaebcf4f50d3d2692ab81d2c5132e425bca266" + "reference": "28e9045958dcaf771f9b56564549d5b174e38b0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/96aaebcf4f50d3d2692ab81d2c5132e425bca266", - "reference": "96aaebcf4f50d3d2692ab81d2c5132e425bca266", + "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/28e9045958dcaf771f9b56564549d5b174e38b0e", + "reference": "28e9045958dcaf771f9b56564549d5b174e38b0e", "shasum": "" }, "require": { @@ -1168,7 +1357,7 @@ ], "support": { "issues": "https://github.com/serbanghita/Mobile-Detect/issues", - "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.45" + "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.47" }, "funding": [ { @@ -1176,33 +1365,32 @@ "type": "github" } ], - "time": "2023-11-07T21:57:25+00:00" + "time": "2026-04-14T12:32:34+00:00" }, { "name": "mockery/mockery", - "version": "1.6.12", + "version": "1.6.15", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + "reference": "967a801bd188989a5669bd280f252d51c0fdc9ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "url": "https://api.github.com/repos/mockery/mockery/zipball/967a801bd188989a5669bd280f252d51c0fdc9ee", + "reference": "967a801bd188989a5669bd280f252d51c0fdc9ee", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", + "hamcrest/hamcrest-php": "^2.0 || ^3.0", "php": ">=7.3" }, "conflict": { "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.17", - "symplify/easy-coding-standard": "^12.1.14" + "phpunit/phpunit": "^9.6.36", + "symplify/easy-coding-standard": "^13.2.17" }, "type": "library", "autoload": { @@ -1259,7 +1447,7 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2024-05-16T03:13:13+00:00" + "time": "2026-08-19T19:37:52+00:00" }, { "name": "myclabs/deep-copy", @@ -1323,30 +1511,36 @@ }, { "name": "nikic/php-parser", - "version": "v4.19.5", + "version": "v5.8.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837" + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", - "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", "shasum": "" }, "require": { + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" @@ -1368,9 +1562,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.5" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" }, - "time": "2025-12-06T11:45:25+00:00" + "time": "2026-07-04T14:30:18+00:00" }, { "name": "phar-io/manifest", @@ -1492,16 +1686,16 @@ }, { "name": "php-stubs/wordpress-stubs", - "version": "v6.9.1", + "version": "v6.9.4", "source": { "type": "git", "url": "https://github.com/php-stubs/wordpress-stubs.git", - "reference": "f12220f303e0d7c0844c0e5e957b0c3cee48d2f7" + "reference": "90a9412826b9944f93b10bf41d795b5fe68abcd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/f12220f303e0d7c0844c0e5e957b0c3cee48d2f7", - "reference": "f12220f303e0d7c0844c0e5e957b0c3cee48d2f7", + "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/90a9412826b9944f93b10bf41d795b5fe68abcd5", + "reference": "90a9412826b9944f93b10bf41d795b5fe68abcd5", "shasum": "" }, "conflict": { @@ -1511,7 +1705,7 @@ "dealerdirect/phpcodesniffer-composer-installer": "^1.0", "nikic/php-parser": "^5.5", "php": "^7.4 || ^8.0", - "php-stubs/generator": "^0.8.3", + "php-stubs/generator": "^0.8.6", "phpdocumentor/reflection-docblock": "^6.0", "phpstan/phpstan": "^2.1", "phpunit/phpunit": "^9.5", @@ -1538,26 +1732,26 @@ ], "support": { "issues": "https://github.com/php-stubs/wordpress-stubs/issues", - "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.9.1" + "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.9.4" }, - "time": "2026-02-03T19:29:21+00:00" + "time": "2026-05-01T20:36:01+00:00" }, { "name": "php-stubs/wordpress-tests-stubs", - "version": "v6.9.0", + "version": "v6.9.7", "source": { "type": "git", "url": "https://github.com/php-stubs/wordpress-tests-stubs.git", - "reference": "1f60fb7b70b7e9e3fe02bf0a3b7d69c10e5e2953" + "reference": "c6878d4aee7b6cdd7bdc53c30653c4a8bb0c417f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-stubs/wordpress-tests-stubs/zipball/1f60fb7b70b7e9e3fe02bf0a3b7d69c10e5e2953", - "reference": "1f60fb7b70b7e9e3fe02bf0a3b7d69c10e5e2953", + "url": "https://api.github.com/repos/php-stubs/wordpress-tests-stubs/zipball/c6878d4aee7b6cdd7bdc53c30653c4a8bb0c417f", + "reference": "c6878d4aee7b6cdd7bdc53c30653c4a8bb0c417f", "shasum": "" }, "require-dev": { - "php": "^7.3 || ^8.0", + "php": "^7.4 || ^8.0", "php-stubs/generator": "^0.8.0" }, "suggest": { @@ -1578,9 +1772,53 @@ ], "support": { "issues": "https://github.com/php-stubs/wordpress-tests-stubs/issues", - "source": "https://github.com/php-stubs/wordpress-tests-stubs/tree/v6.9.0" + "source": "https://github.com/php-stubs/wordpress-tests-stubs/tree/v6.9.7" + }, + "time": "2026-08-13T08:31:51+00:00" + }, + { + "name": "php-stubs/wp-cli-stubs", + "version": "v2.12.0", + "source": { + "type": "git", + "url": "https://github.com/php-stubs/wp-cli-stubs.git", + "reference": "af16401e299a3fd2229bd0fa9a037638a4174a9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-stubs/wp-cli-stubs/zipball/af16401e299a3fd2229bd0fa9a037638a4174a9d", + "reference": "af16401e299a3fd2229bd0fa9a037638a4174a9d", + "shasum": "" + }, + "require": { + "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0" + }, + "require-dev": { + "php": "~7.3 || ~8.0", + "php-stubs/generator": "^0.8.0" + }, + "suggest": { + "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "WP-CLI function and class declaration stubs for static analysis.", + "homepage": "https://github.com/php-stubs/wp-cli-stubs", + "keywords": [ + "PHPStan", + "static analysis", + "wordpress", + "wp-cli" + ], + "support": { + "issues": "https://github.com/php-stubs/wp-cli-stubs/issues", + "source": "https://github.com/php-stubs/wp-cli-stubs/tree/v2.12.0" }, - "time": "2025-12-07T09:14:02+00:00" + "time": "2025-06-10T09:58:05+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -1797,21 +2035,21 @@ }, { "name": "phpcsstandards/phpcsextra", - "version": "1.5.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHPCSExtra.git", - "reference": "b598aa890815b8df16363271b659d73280129101" + "reference": "39467533fdb742446d68c1d10ac33d625ee0311c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/b598aa890815b8df16363271b659d73280129101", - "reference": "b598aa890815b8df16363271b659d73280129101", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/39467533fdb742446d68c1d10ac33d625ee0311c", + "reference": "39467533fdb742446d68c1d10ac33d625ee0311c", "shasum": "" }, "require": { "php": ">=5.4", - "phpcsstandards/phpcsutils": "^1.2.0", + "phpcsstandards/phpcsutils": "^1.2.3", "squizlabs/php_codesniffer": "^3.13.5 || ^4.0.1" }, "require-dev": { @@ -1875,20 +2113,20 @@ "type": "thanks_dev" } ], - "time": "2025-11-12T23:06:57+00:00" + "time": "2026-07-27T11:13:17+00:00" }, { "name": "phpcsstandards/phpcsutils", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", - "reference": "c216317e96c8b3f5932808f9b0f1f7a14e3bbf55" + "reference": "5f35d9408c54d7b529501f3c688b6eae562aea1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/c216317e96c8b3f5932808f9b0f1f7a14e3bbf55", - "reference": "c216317e96c8b3f5932808f9b0f1f7a14e3bbf55", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/5f35d9408c54d7b529501f3c688b6eae562aea1f", + "reference": "5f35d9408c54d7b529501f3c688b6eae562aea1f", "shasum": "" }, "require": { @@ -1968,7 +2206,7 @@ "type": "thanks_dev" } ], - "time": "2025-12-08T14:27:58+00:00" + "time": "2026-07-27T10:28:41+00:00" }, { "name": "phpstan/extension-installer", @@ -2020,11 +2258,11 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.33", + "version": "1.12.34", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/37982d6fc7cbb746dda7773530cda557cdf119e1", - "reference": "37982d6fc7cbb746dda7773530cda557cdf119e1", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/4dd89ca7aa30fdc6760be21550d583bcc32e8476", + "reference": "4dd89ca7aa30fdc6760be21550d583bcc32e8476", "shasum": "" }, "require": { @@ -2069,7 +2307,7 @@ "type": "github" } ], - "time": "2026-02-28T20:30:03+00:00" + "time": "2026-07-28T10:04:39+00:00" }, { "name": "phpstan/phpstan-mockery", @@ -2494,25 +2732,25 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.34", + "version": "9.6.36", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b36f02317466907a230d3aa1d34467041271ef4a" + "reference": "abab27ed286d3e1246fbbfe6b56bfd732d945ec9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b36f02317466907a230d3aa1d34467041271ef4a", - "reference": "b36f02317466907a230d3aa1d34467041271ef4a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/abab27ed286d3e1246fbbfe6b56bfd732d945ec9", + "reference": "abab27ed286d3e1246fbbfe6b56bfd732d945ec9", "shasum": "" }, "require": { "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", + "ext-filter": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", - "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", @@ -2528,7 +2766,7 @@ "sebastian/comparator": "^4.0.10", "sebastian/diff": "^4.0.6", "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.8", + "sebastian/exporter": "^4.0.9", "sebastian/global-state": "^5.0.8", "sebastian/object-enumerator": "^4.0.4", "sebastian/resource-operations": "^3.0.4", @@ -2577,31 +2815,15 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.34" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.36" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" + "url": "https://phpunit.de/sponsoring.html", + "type": "other" } ], - "time": "2026-01-27T05:45:00+00:00" + "time": "2026-08-11T06:25:15+00:00" }, { "name": "psr/container", @@ -2707,18 +2929,19 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "1fefaf7d2b314c21903bef8f4fab046539e4e654" + "reference": "4a8b10995f6b62488cf92b121cfcc644d060cd94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/1fefaf7d2b314c21903bef8f4fab046539e4e654", - "reference": "1fefaf7d2b314c21903bef8f4fab046539e4e654", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/4a8b10995f6b62488cf92b121cfcc644d060cd94", + "reference": "4a8b10995f6b62488cf92b121cfcc644d060cd94", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", "adaptcms/adaptcms": "<=1.3", - "admidio/admidio": "<=5.0.6", + "adawolfa/isdoc": "<1.4.3|>=1.5,<1.5.1|>=1.6,<1.6.1", + "admidio/admidio": "<=5.0.11", "adodb/adodb-php": "<=5.22.9", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", @@ -2729,12 +2952,14 @@ "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-laravel": "==2021.10", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", + "aimeos/pagible": "<0.10.4", "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<=1.5.2", "alexusmai/laravel-file-manager": "<=3.3.1", "algolia/algoliasearch-magento-2": "<=3.16.1|>=3.17.0.0-beta1,<=3.17.1", + "almirhodzic/nova-toggle-5": "<1.3", "alt-design/alt-redirect": "<1.6.4", "altcha-org/altcha": "<1.3.1", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", @@ -2750,8 +2975,10 @@ "aoe/restler": "<1.7.1", "apache-solr-for-typo3/solr": "<2.8.3", "apereo/phpcas": "<1.6", - "api-platform/core": "<3.4.17|>=4,<4.0.22|>=4.1,<4.1.5", + "api-platform/core": "<4.1.30|>=4.2,<4.2.26|>=4.3,<4.3.12", "api-platform/graphql": "<3.4.17|>=4,<4.0.22|>=4.1,<4.1.5", + "api-platform/hal": ">=4,<4.1.29|>=4.2,<4.2.25|>=4.3,<4.3.8", + "api-platform/json-api": ">=4,<4.1.29|>=4.2,<4.2.25|>=4.3,<4.3.8", "appwrite/server-ce": "<=1.2.1", "arc/web": "<3", "area17/twill": "<1.2.5|>=2,<2.5.3", @@ -2762,28 +2989,28 @@ "athlon1600/youtube-downloader": "<=4", "aureuserp/aureuserp": "<1.3.0.0-beta1", "austintoddj/canvas": "<=3.4.2", - "auth0/auth0-php": ">=3.3,<8.18", - "auth0/login": "<7.20", - "auth0/symfony": "<=5.5", - "auth0/wordpress": "<=5.4", - "automad/automad": "<2.0.0.0-alpha5", + "auth0/auth0-php": ">=3.3,<=8.18", + "auth0/login": "<=7.20", + "auth0/symfony": "<=5.8", + "auth0/wordpress": "<=5.5", + "automad/automad": "<=2.0.0.0-beta27", "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": "<3.368", + "aws/aws-sdk-php": "<=3.371.3", "ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5", - "azuracast/azuracast": "<=0.23.3", + "azuracast/azuracast": "<=0.23.5", "b13/seo_basics": "<0.8.2", "backdrop/backdrop": "<=1.32", - "backpack/crud": "<3.4.9", + "backpack/crud": "<4.0.63|>=4.1,<4.1.69|>=5,<5.0.13", "backpack/filemanager": "<2.0.2|>=3,<3.0.9", "bacula-web/bacula-web": "<9.7.1", "badaso/core": "<=2.9.11", - "bagisto/bagisto": "<2.3.10", + "bagisto/bagisto": "<=2.3.15", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.8", "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<=5.1.1", + "baserproject/basercms": "<=5.2.2", "bassjobsen/bootstrap-3-typeahead": ">4.0.2", "bbpress/bbpress": "<2.6.5", "bcit-ci/codeigniter": "<3.1.3", @@ -2791,6 +3018,7 @@ "bedita/bedita": "<4", "bednee/cooluri": "<1.0.30", "bigfork/silverstripe-form-capture": ">=3,<3.1.1", + "billabear/billabear": "<=2025.01.03", "billz/raspap-webgui": "<3.3.6", "binarytorch/larecipe": "<2.8.1", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", @@ -2805,19 +3033,20 @@ "brotkrueml/codehighlight": "<2.7", "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", "brotkrueml/typo3-matomo-integration": "<1.3.2", - "buddypress/buddypress": "<7.2.1", + "buddypress/buddypress": "<14.5", "bugsnag/bugsnag-laravel": ">=2,<2.0.2", "bvbmedia/multishop": "<2.0.39", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", "cadmium-org/cadmium-cms": "<=0.4.9", - "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10|>=5.2.10,<5.2.12|==5.3", + "cakephp/authentication": "<2.11.1|>=3,<3.3.6|>=4,<4.1.1", + "cakephp/cakephp": "<4.5.11|>=4.6,<4.6.4|>=5,<5.1.7|>=5.2,<5.2.13|>=5.3,<5.3.6", "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cardgate/magento2": "<2.0.33", "cardgate/woocommerce": "<=3.1.15", - "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cart2quote/module-quotation": ">=4.1.6,<4.4.6|>=5,<5.4.4", "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", - "cartalyst/sentry": "<=2.1.6", + "cartalyst/sentry": "<2.1.7", "catfan/medoo": "<1.7.5", "causal/oidc": "<4", "cecil/cecil": "<7.47.1", @@ -2826,41 +3055,42 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", - "ci4-cms-erp/ci4ms": "<0.28.5", + "ci4-cms-erp/ci4ms": "<=0.31.8", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", "co-stack/fal_sftp": "<0.2.6", - "cockpit-hq/cockpit": "<2.13.5", - "code16/sharp": "<9.11.1", + "cockpit-hq/cockpit": "<=2.14", + "code16/sharp": "<9.22.3", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.10", - "codeigniter4/framework": "<4.6.2", + "codeigniter4/framework": "<4.7.4", "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", "codingms/additional-tca": ">=1.7,<1.15.17|>=1.16,<1.16.9", "codingms/modules": "<4.3.11|>=5,<5.7.4|>=6,<6.4.2|>=7,<7.5.5", "commerceteam/commerce": ">=0.9.6,<0.9.9", "components/jquery": ">=1.0.3,<3.5", - "composer/composer": "<1.10.27|>=2,<2.2.26|>=2.3,<2.9.3", - "concrete5/concrete5": "<9.4.8", + "composer/composer": "<2.2.29|>=2.3,<2.10.2", + "concrete5/concrete5": "<9.5.2", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", - "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.13.56|>=5,<5.3.38|>=5.4.0.0-RC1-dev,<5.6.1", + "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<5.3.48|>=5.4,<5.7.9", "contao/core": "<3.5.39", - "contao/core-bundle": "<4.13.57|>=5,<5.3.42|>=5.4,<5.6.5", + "contao/core-bundle": "<5.3.48|>=5.4,<5.7.9", "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", "contao/managed-edition": "<=1.5", - "coreshop/core-shop": "<4.1.9", + "coreshop/core-shop": "<4.1.9|==5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", + "cotonti/cotonti": "<=1", "couleurcitron/tarteaucitron-wp": "<0.3", "cpsit/typo3-mailqueue": "<0.4.5|>=0.5,<0.5.2", "craftcms/aws-s3": ">=2.0.2,<=2.2.4", "craftcms/azure-blob": ">=2.0.0.0-beta1,<=2.1", - "craftcms/cms": "<=4.17.5|>=5,<=5.9.11", - "craftcms/commerce": ">=4,<4.11|>=5,<5.6", + "craftcms/cms": "<4.18.3|>=5,<5.10.8", + "craftcms/commerce": ">=4,<=4.11.1|>=5,<=5.6.4", "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", "craftcms/google-cloud": ">=2.0.0.0-beta1,<=2.2", @@ -2878,11 +3108,12 @@ "david-garcia/phpwhois": "<=4.3.1", "dbrisinajumi/d2files": "<1", "dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta", + "dedoc/scramble": ">=0.13.2,<0.13.22", "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", "desperado/xml-bundle": "<=0.1.7", "dev-lancer/minecraft-motd-parser": "<=1.0.5", - "devcode-it/openstamanager": "<=2.9.8", + "devcode-it/openstamanager": "<=2.10.1", "devgroup/dotplant": "<2020.09.14-dev", "digimix/wp-svg-upload": "<=1", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", @@ -2899,9 +3130,10 @@ "doctrine/mongodb-odm": "<1.0.2", "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<21.0.3", - "dompdf/dompdf": "<2.0.4", + "dolibarr/dolibarr": "<=23.0.2", + "dompdf/dompdf": "<3.1.6", "doublethreedigital/guest-entries": "<3.1.2", + "dreamfactory/df-core": "<1.0.4", "drupal-pattern-lab/unified-twig-extensions": "<=0.1", "drupal/access_code": "<2.0.5", "drupal/acquia_dam": "<1.1.5", @@ -2913,7 +3145,7 @@ "drupal/commerce_alphabank_redirect": "<1.0.3", "drupal/commerce_eurobank_redirect": "<2.1.1", "drupal/config_split": "<1.10|>=2,<2.0.2", - "drupal/core": ">=6,<6.38|>=7,<7.103|>=8,<10.4.9|>=10.5,<10.5.6|>=11,<11.1.9|>=11.2,<11.2.8", + "drupal/core": ">=6,<6.38|>=7,<7.103|>=8,<10.5.10|>=10.6,<10.6.9|>=11,<11.2.12|>=11.3,<11.3.10", "drupal/core-recommended": ">=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", "drupal/currency": "<3.5", "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", @@ -2940,10 +3172,11 @@ "drupal/umami_analytics": "<1.0.1", "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", + "easycorp/easyadmin-bundle": ">=4,<4.29.16|>=5,<5.5.1", "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.3.1", "ecodev/newsletter": "<=4", "ectouch/ectouch": "<=2.7.2", - "egroupware/egroupware": "<23.1.20260113|>=26.0.20251208,<26.0.20260113", + "egroupware/egroupware": "<23.1.20260601|>=26.0.20251208,<26.5.20260507", "elefant/cms": "<2.0.7", "elgg/elgg": "<3.3.24|>=4,<4.0.5", "elijaa/phpmemcacheadmin": "<=1.3", @@ -2955,6 +3188,7 @@ "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", "evolutioncms/evolution": "<=3.2.3", + "evoweb/sf-register": "<13.2.4|>=14,<14.0.2", "exceedone/exment": "<4.4.3|>=5,<5.0.3", "exceedone/laravel-admin": "<2.2.3|==3", "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", @@ -2977,15 +3211,16 @@ "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<=4.2", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<2025.81", + "facturascripts/facturascripts": "<=2026.2", "fastly/magento2": "<1.2.26", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", - "filament/actions": ">=3.2,<3.2.123", - "filament/filament": ">=4,<4.3.1", - "filament/infolists": ">=3,<3.2.115", - "filament/tables": ">=3,<3.2.115|>=4,<4.8.5|>=5,<5.3.5", + "filament/actions": ">=3.2,<3.2.123|>=4,<=4.11.3|>=5,<=5.6.3", + "filament/filament": ">=3,<=3.3.51|>=4,<4.11.5|>=5,<5.6.5", + "filament/forms": ">=3,<=3.3.52", + "filament/infolists": ">=3,<3.2.115|>=4,<=4.11.4|>=5,<=5.6.4", + "filament/tables": ">=3,<=3.3.50|>=4,<=4.11.4|>=5,<=5.6.4", "filegator/filegator": "<7.8", "filp/whoops": "<2.1.13", "fineuploader/php-traditional-server": "<=1.2.2", @@ -2993,13 +3228,14 @@ "fisharebest/webtrees": "<=2.1.18", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.8.10", + "flarum/core": "<=1.8.15|>=2.0.0.0-beta1,<=2.0.0.0-beta8", "flarum/flarum": "<0.1.0.0-beta8", "flarum/framework": "<1.8.10", "flarum/mentions": "<1.6.3", "flarum/nicknames": "<1.8.3", "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", "flarum/tags": "<=0.1.0.0-beta13", + "flightphp/core": "<3.18.1", "floriangaerber/magnesium": "<0.3.1", "fluidtypo3/vhs": "<5.1.1", "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", @@ -3018,19 +3254,22 @@ "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "friendsoftypo3/tt-address": "<8.1.2|>=9,<9.1.1|>=10,<10.0.1", "froala/wysiwyg-editor": "<=4.3", "frosh/adminer-platform": "<2.2.1", - "froxlor/froxlor": "<=2.3.3", + "froxlor/froxlor": "<2.3.8", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=7.1.0.0-RC4", + "funadmin/funadmin": "<=7.1.0.0-RC6", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "georgringer/news": "<1.3.3", + "georgringer/news": "<10.0.4|>=11,<11.4.4|>=12,<12.3.2|>=13,<13.0.2|>=14,<14.0.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<=2.3.3", - "getgrav/grav": "<1.11.0.0-beta1", - "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<=5.2.1", + "getgrav/grav": "<2.0.4", + "getgrav/grav-plugin-api": "<1.0.0.0-beta15", + "getgrav/grav-plugin-form": "<9.1", + "getkirby/cms": "<=4.9.3|>=5,<=5.4.3", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", @@ -3039,16 +3278,18 @@ "globalpayments/php-sdk": "<2", "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11", "gogentooss/samlbase": "<1.2.7", - "google/protobuf": "<3.4", + "goodoneuz/pay-uz": "<=2.2.24", + "google/protobuf": "<4.33.6", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gp247/core": "<1.1.24", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<6.1.17|>=6.4.23,<=6.5", + "grumpydictator/firefly-iii": "<=6.6.2", "gugoan/economizzer": "<=0.9.0.0-beta1", - "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", + "guzzlehttp/guzzle": "<7.15.2|>=8,<8.0.1", + "guzzlehttp/guzzle-services": "<1.5.4", "guzzlehttp/oauth-subscriber": "<0.8.1", - "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "guzzlehttp/psr7": "<2.12.3", "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", "handcraftedinthealps/goodby-csv": "<1.4.3", "harvesthq/chosen": "<1.8.7", @@ -3059,6 +3300,7 @@ "hjue/justwriting": "<=1", "hov/jobfair": "<1.0.13|>=2,<2.0.2", "httpsoft/http-message": "<1.0.12", + "hybridauth/hybridauth": "<=3.12.2", "hyn/multi-tenant": ">=5.6,<5.7.2", "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.25|>=5,<5.0.3", "ibexa/admin-ui-assets": ">=4.6.0.0-alpha1,<4.6.21", @@ -3076,6 +3318,7 @@ "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", + "illuminate/mail": ">=9,<12.60|>=13,<13.10", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", "imdbphp/imdbphp": "<=5.1.1", "impresscms/impresscms": "<=1.4.5", @@ -3087,10 +3330,13 @@ "innologi/typo3-appointments": "<2.0.6", "intelliants/subrion": "<4.2.2", "inter-mediator/inter-mediator": "==5.5", - "ipl/web": "<0.10.1", + "intercom/intercom-php": "==5.0.2", + "invoiceninja/invoiceninja": "<5.13.4", + "ipl/web": "<=0.10.2|>=0.11,<=0.13", "islandora/crayfish": "<4.1", "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", + "j0k3r/graby": "<=2.5", "jackalope/jackalope-doctrine-dbal": "<1.7.4", "jambagecom/div2007": "<0.10.2", "james-heinrich/getid3": "<1.9.21", @@ -3098,7 +3344,10 @@ "jasig/phpcas": "<1.3.3", "jbartels/wec-map": "<3.0.3", "jcbrand/converse.js": "<3.3.3", + "jleehr/canto-saas-api": "<=2", + "joedolson/my-calendar": "<3.7.7", "joelbutcher/socialstream": "<5.6|>=6,<6.2", + "johnbillion/query-monitor": "<3.20.4", "johnbillion/wp-crontrol": "<1.16.2|>=1.17,<1.19.2", "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", @@ -3116,29 +3365,32 @@ "juzaweb/cms": "<=3.4.2", "jweiland/events2": "<8.3.8|>=9,<9.0.6", "jweiland/kk-downloader": "<1.2.2", + "kantorge/yaffa": "<=2", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplejwt": "<=1.1", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", - "khodakhah/nodcms": "<=3", - "kimai/kimai": "<=2.50", + "khodakhah/nodcms": "<=3.4.1", + "kimai/kimai": "<2.59", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", - "knplabs/knp-snappy": "<=1.4.2", + "knplabs/knp-snappy": "<=1.7", "kohana/core": "<3.3.3", "koillection/koillection": "<1.6.12", - "krayin/laravel-crm": "<=1.3", + "krayin/laravel-crm": "<=2.2", "kreait/firebase-php": ">=3.2,<3.8.1", "kumbiaphp/kumbiapp": "<=1.1.1", "la-haute-societe/tcpdf": "<6.2.22", + "laktak/hjson": "<2.3", "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", "laminas/laminas-http": "<2.14.2", "lara-zeus/artemis": ">=1,<=1.0.6", "lara-zeus/dynamic-dashboard": ">=3,<=3.0.1", "laravel/fortify": "<1.11.1", - "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1", + "laravel/framework": "<12.61.1|>=13,<13.12", "laravel/laravel": ">=5.4,<5.4.22", + "laravel/passport": ">=13,<13.7.1", "laravel/pulse": "<1.3.1", "laravel/reverb": "<1.7", "laravel/socialite": ">=1,<2.0.10", @@ -3146,16 +3398,16 @@ "lavalite/cms": "<=10.1", "lavitto/typo3-form-to-database": "<2.2.5|>=3,<3.2.2|>=4,<4.2.3|>=5,<5.0.2", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<=2.8", + "league/commonmark": "<2.9", "league/flysystem": "<1.1.4|>=2,<2.1.1", "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<26.2", + "librenms/librenms": "<26.7", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", - "limesurvey/limesurvey": "<6.15.4", + "limesurvey/limesurvey": "<=7.0.0.0-beta1", "livehelperchat/livehelperchat": "<=3.91", "livewire-filemanager/filemanager": "<=1.0.4", "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.6.4", @@ -3178,20 +3430,24 @@ "maikuolan/phpmussel": ">=1,<1.6", "mainwp/mainwp": "<=4.4.3.3", "manogi/nova-tiptap": "<=3.2.6", - "mantisbt/mantisbt": "<2.27.2", + "mantisbt/mantisbt": "<=2.28.3", "marcwillmann/turn": "<0.3.3", + "markhuot/craftql": "<=1.3.7", "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.10|>=6,<6.0.8|>=7.0.0.0-alpha,<7.0.1", + "mautic/core": "<5.2.11|>=6,<6.0.9|>=7,<7.1.2", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", + "mckenziearts/livewire-markdown-editor": "<1.3", + "mcp/sdk": ">=0.5,<0.7.1", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", "mediawiki/cargo": "<3.8.3", "mediawiki/core": "<1.39.5|==1.40", "mediawiki/data-transfer": ">=1.39,<1.39.11|>=1.41,<1.41.3|>=1.42,<1.42.2", + "mediawiki/maps": "<12.1.3", "mediawiki/matomo": "<2.4.3", "mediawiki/semantic-media-wiki": "<4.0.2", "mehrwert/phpmyadmin": "<3.2", @@ -3207,9 +3463,12 @@ "microsoft/microsoft-graph-core": "<2.0.2", "microweber/microweber": "<2.0.20", "mikehaertl/php-shellcommand": "<1.6.1", - "mineadmin/mineadmin": "<=3.0.9", + "mineadmin/mineadmin": "<3.2.0.0-alpha2", "miniorange/miniorange-saml": "<1.4.3", + "miraheze/ts-portal": "<=33", "mittwald/typo3_forum": "<1.2.1", + "mix/mix": ">=2,<=2.2.17", + "mmc/ceselector": "<3.0.3|>=4,<4.0.2|>=5,<5.0.1|>=6,<6.0.1", "mobiledetect/mobiledetectlib": "<2.8.32", "modx/revolution": "<=3.1", "mojo42/jirafeau": "<4.4", @@ -3222,6 +3481,7 @@ "movim/moxl": ">=0.8,<=0.10", "movingbytes/social-network": "<=1.2.1", "mpdf/mpdf": "<=7.1.7", + "mtdowling/jmespath.php": "<2.9.1", "munkireport/comment": "<4", "munkireport/managedinstalls": "<2.6", "munkireport/munki_facts": "<1.5", @@ -3229,6 +3489,7 @@ "munkireport/softwareupdate": "<1.6", "mustache/mustache": ">=2,<2.14.1", "mwdelaney/wp-enable-svg": "<=0.2", + "nabeel/phpvms": "<7.0.6", "namshi/jose": "<2.2", "nasirkhan/laravel-starter": "<11.11", "nategood/httpful": "<1", @@ -3248,20 +3509,20 @@ "nilsteampassnet/teampass": "<3.1.3.1-dev", "nitsan/ns-backup": "<13.0.1", "nonfiction/nterchange": "<4.1.1", - "notrinos/notrinos-erp": "<=0.7", + "notrinos/notrinos-erp": "<=1", "noumo/easyii": "<=0.9", "novaksolutions/infusionsoft-php-sdk": "<1", "novosga/novosga": "<=2.2.12", - "nukeviet/nukeviet": "<4.5.02", + "nukeviet/nukeviet": "<4.6.00", "nyholm/psr7": "<1.6.1", "nystudio107/craft-seomatic": "<3.4.12", "nzedb/nzedb": "<0.8", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", - "october/october": "<3.7.5", - "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<=3.7.12|>=4,<=4.0.11", + "october/october": "<3.7.14|>=4,<4.1.10", + "october/rain": "<=3.7.13|>=4,<=4.1.9", + "october/system": "<3.7.16|>=4,<4.1.16", "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.21.1|>=3,<3.8.1|>=4,<4.3.1", @@ -3269,9 +3530,9 @@ "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.16.1", + "openmage/magento-lts": "<=20.17", "opensolutions/vimbadmin": "<=3.0.15", - "opensource-workshop/connect-cms": "<1.8.7|>=2,<2.4.7", + "opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1", "orchid/platform": ">=8,<14.43", "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", @@ -3280,16 +3541,19 @@ "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", - "oxid-esales/oxideshop-ce": "<=7.0.5", + "oxid-esales/oxideshop-ce": "<4.5|>=6,<6.14.4", + "oxid-esales/oxideshop-metapackage-ce": ">=6,<6.5.5", "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", + "oxid-esales/smarty-component": "<1.0.1", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", "pagarme/pagarme-php": "<3", "pagekit/pagekit": "<=1.0.18", "paragonie/ecc": "<2.0.1", "paragonie/random_compat": "<2", - "paragonie/sodium_compat": "<1.24|>=2,<2.5", + "paragonie/sodium_compat": "<1.24.1|>=2,<2.5.1", "passbolt/passbolt_api": "<4.6.2", + "paymenter/paymenter": "<=1.5.4", "paypal/adaptivepayments-sdk-php": "<=3.9.2", "paypal/invoice-sdk-php": "<=3.9", "paypal/merchant-sdk-php": "<3.12", @@ -3302,70 +3566,78 @@ "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", "ph7software/ph7builder": "<=17.9.1", - "phanan/koel": "<5.1.4", + "phanan/koel": "<=9.7", + "pheditor/pheditor": "<2.0.8", "phenx/php-svg-lib": "<0.5.2", "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", "php-mod/curl": "<2.3.2", - "phpbb/phpbb": "<3.3.11", + "php-standard-library/h2": ">=6.1,<6.1.2|>=6.2,<6.2.1", + "php-standard-library/php-standard-library": ">=6.1,<6.1.2|>=6.2,<6.2.1", + "phpbb/phpbb": "<3.3.16|==4.0.0.0-alpha1", + "phpcsstandards/phpcsutils": ">=1.0.0.0-alpha1,<1.2.3", "phpems/phpems": ">=6,<=6.1.3", "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.2", - "phpmyfaq/phpmyfaq": "<=4.0.16", + "phpmyfaq/phpmyfaq": "<4.1.4", "phpoffice/common": "<0.2.9", "phpoffice/math": "<=0.2", "phpoffice/phpexcel": "<=1.8.2", - "phpoffice/phpspreadsheet": "<1.30|>=2,<2.1.12|>=2.2,<2.4|>=3,<3.10|>=4,<5", + "phpoffice/phpspreadsheet": "<=1.30.5|>=2,<=2.1.17|>=2.2,<=2.4.6|>=3,<=3.10.6|>=4,<=5.8", "phppgadmin/phppgadmin": "<=7.13", - "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", + "phpseclib/phpseclib": "<=2.0.54|>=3,<=3.0.53", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", - "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8", + "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8|>=12.5.21,<12.5.22|>=13.1.5,<13.1.6", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "phraseanet/phraseanet": "==4.0.3", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<=1.7.15|>=2.0.0.0-RC1-dev,<=2.2.2", + "pimcore/admin-ui-classic-bundle": "<1.7.18|>=2.0.0.0-RC1-dev,<=2.3.5", "pimcore/customer-management-framework-bundle": "<4.2.1", "pimcore/data-hub": "<1.2.4", "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<=11.5.14.1|>=12,<12.3.3", + "pimcore/pimcore": "<12.3.9|>=2026.1,<=2026.1.4", "pimcore/web2print-tools-bundle": "<=5.2.1|>=6.0.0.0-RC1-dev,<=6.1", "piwik/piwik": "<1.11", "pixelfed/pixelfed": "<0.12.5", + "plank/laravel-mediable": "<7", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.32.1", + "pocketmine/pocketmine-mp": "<5.42.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", + "pontedilana/php-weasyprint": "<=2.5.1", + "poweradmin/poweradmin": "<4.2.5|>=4.3,<4.3.4", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", "prestashop/blockreassurance": "<=5.1.3", "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.2.4|>=9.0.0.0-alpha1,<9.0.3", + "prestashop/prestashop": "<8.2.6|>=9,<9.1.1", "prestashop/productcomments": "<5.0.2", - "prestashop/ps_checkout": "<4.4.1|>=5,<5.0.5", + "prestashop/ps_checkout": "<5.3", "prestashop/ps_contactinfo": "<=3.3.2", "prestashop/ps_emailsubscription": "<2.6.1", - "prestashop/ps_facetedsearch": "<3.4.1", + "prestashop/ps_facetedsearch": "<4.0.4", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4|>=1.5,<1.7.4|>=1.7.7,<2.0.3", - "processwire/processwire": "<=3.0.246", - "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", - "propel/propel1": ">=1,<=1.7.1", + "processwire/processwire": "<=3.0.255", + "propel/propel": ">=2.0.0.0-alpha1,<2.0.0.0-alpha8", + "propel/propel1": ">=1,<1.7.2", "psy/psysh": "<=0.11.22|>=0.12,<=0.12.18", - "pterodactyl/panel": "<1.12.1", + "pterodactyl/panel": "<=1.12.4", "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", "pubnub/pubnub": "<6.1", "punktde/pt_extbase": "<1.5.1", "pusher/pusher-php-server": "<2.2.1", + "putyourlightson/craft-sprig": ">=2,<2.15.2|>=3,<3.7.2", "pwweb/laravel-core": "<=0.3.6.0-beta", "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", "pyrocms/pyrocms": "<=3.9.1", @@ -3374,48 +3646,54 @@ "rainlab/blog-plugin": "<1.4.1", "rainlab/debugbar-plugin": "<3.1", "rainlab/user-plugin": "<=1.4.5", - "ralffreit/mfa-email": "<=2", + "ralffreit/mfa-email": "<1.0.7|==2", "rankmath/seo-by-rank-math": "<=1.0.95", "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "redaxo/source": "<=5.20.1", + "redaxo/source": "<5.21.1", "remdex/livehelperchat": "<4.29", "renolit/reint-downloadmanager": "<4.0.2|>=5,<5.0.1", "reportico-web/reportico": "<=8.1", - "rhukster/dom-sanitizer": "<1.0.7", + "rhukster/dom-sanitizer": "<1.0.10", "rmccue/requests": ">=1.6,<1.8", + "roadiz/documents": "<2.3.42|>=2.4,<2.5.44|>=2.6,<2.6.28|>=2.7,<2.7.9", + "roadiz/openid": "<2.3.43|>=2.5,<2.5.45|>=2.6,<2.6.31|>=2.7,<2.7.18", "robrichards/xmlseclibs": "<3.1.5", "roots/soil": "<4.1", - "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", + "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11|>=1.7.0.0-beta,<1.7.0.0-RC5-dev", "rudloff/alltube": "<3.0.3", "rudloff/rtmpdump-bin": "<=2.3.1", "s-cart/core": "<=9.0.5", "s-cart/s-cart": "<6.9", + "s9y/serendipity": "<2.6", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "saloonphp/saloon": "<4", "samwilson/unlinked-wikibase": "<1.42", "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", - "setasign/fpdi": "<2.6.4", + "setasign/fpdi": "<2.6.7", "sfroemken/url_redirect": "<=1.2.1", "sheng/yiicms": "<1.2.1", - "shopware/core": "<6.6.10.15-dev|>=6.7,<6.7.8.1-dev", - "shopware/platform": "<6.6.10.15-dev|>=6.7,<6.7.8.1-dev", + "shopper/cart": "<2.8", + "shopper/framework": "<2.8", + "shopware/core": "<6.6.10.18-dev|>=6.7,<6.7.10.1-dev", + "shopware/platform": "<6.6.10.18-dev|>=6.7,<6.7.10.1-dev", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev", + "shopware/shopware": "<=6.3.5.2|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev", "shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", "shopxo/shopxo": "<=6.4", - "showdoc/showdoc": "<2.10.4", + "showdoc/showdoc": "<3.8.1", "shuchkin/simplexlsx": ">=1.0.12,<1.1.13", "silverstripe-australia/advancedreports": ">=1,<=2", "silverstripe/admin": "<1.13.19|>=2,<2.1.8", - "silverstripe/assets": ">=1,<1.11.1", - "silverstripe/cms": "<4.11.3", + "silverstripe/assets": "<2.4.5|>=3,<3.1.3", + "silverstripe/cms": "<6.2.1", "silverstripe/comments": ">=1.3,<3.1.1", - "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<5.3.23", + "silverstripe/forum": "<0.6.2|>=0.7,<0.7.4", + "silverstripe/framework": "<6.2.2", "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", "silverstripe/recipe-cms": ">=4.5,<4.5.3", @@ -3425,13 +3703,15 @@ "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", "silverstripe/subsites": ">=2,<2.6.1", "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", - "silverstripe/userforms": "<3|>=5,<5.4.2", + "silverstripe/userforms": "<6.4.9|>=7,<7.0.7|>=7.1,<7.1.1", + "silverstripe/versioned": "<3.2.1", "silverstripe/versioned-admin": ">=1,<1.11.1", "simogeo/filemanager": "<=2.5", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<=4.16.15|>=5.0.0.0-alpha1,<=5.0.0.0-alpha19", - "simplesamlphp/saml2-legacy": "<=4.16.15", - "simplesamlphp/simplesamlphp": "<1.18.6", + "simplesamlphp/saml2": "<4.19.3|>=4.20,<=4.20.2|>=5,<5.0.6|>=6,<6.2.1", + "simplesamlphp/saml2-legacy": "<4.19.3|>=4.20,<=4.20.2", + "simplesamlphp/simplesamlphp": "<=2.4.6|>=2.5,<=2.5.1", + "simplesamlphp/simplesamlphp-module-casserver": "<=7.0.2", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", @@ -3443,35 +3723,39 @@ "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", "sjbr/static-info-tables": "<2.3.1", "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", - "slim/slim": "<2.6", + "slim/slim": "<2.6|>=4.4,<=4.15.1", "slub/slub-events": "<3.0.3", - "smarty/smarty": "<4.5.3|>=5,<5.1.1", - "snipe/snipe-it": "<8.3.7", + "smarty/smarty": "<4.5.7|>=5,<5.8.4", + "snipe/snipe-it": "<8.6.3", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", + "solidinvoice/solidinvoice": "<=2.3.15", "solspace/craft-freeform": "<4.1.29|>=5,<=5.14.6", "soosyze/soosyze": "<=2", "spatie/browsershot": "<5.0.5", "spatie/image-optimizer": "<1.7.3", + "spatie/laravel-medialibrary": "<11.23", + "spatie/schema-org": ">=3.23.1,<3.23.2|>=4,<4.0.2", "spencer14420/sp-php-email-handler": "<1", "spipu/html2pdf": "<5.2.8", "spiral/roadrunner": "<2025.1", + "spomky-labs/otphp": "<11.4.3", "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", - "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "squizlabs/php_codesniffer": "<3.13.6|>=4,<4.0.2", "ssddanbrown/bookstack": "<24.05.1", "starcitizentools/citizen-skin": ">=1.9.4,<3.9", "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.14|>=6,<6.7", + "statamic/cms": "<5.74.3|>=6,<6.24.2", "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<=2.1.64", + "studio-42/elfinder": "<=2.1.67", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", "sulu/form-bundle": ">=2,<2.5.3", - "sulu/sulu": "<1.6.44|>=2,<2.5.25|>=2.6,<2.6.9|>=3.0.0.0-alpha1,<3.0.0.0-alpha3", + "sulu/sulu": "<=2.6.22|>=3,<=3.0.5", "sumocoders/framework-user-bundle": "<1.4", "superbig/craft-audit": "<3.0.2", "svewap/a21glossary": "<=0.4.10", @@ -3481,50 +3765,65 @@ "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", "sylius/grid-bundle": "<1.10.1", + "sylius/mollie-plugin": "<2.2.8|>=3,<3.2.4|>=3.3,<3.3.1", "sylius/paypal-plugin": "<1.6.2|>=1.7,<1.7.2|>=2,<2.0.2", "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.9.12|>=1.10,<1.10.16|>=1.11,<1.11.17|>=1.12,<=1.12.22|>=1.13,<=1.13.14|>=1.14,<=1.14.17|>=2,<=2.0.15|>=2.1,<=2.1.11|>=2.2,<=2.2.2", + "sylius/sylius": "<1.9.12|>=1.10,<1.10.16|>=1.11,<1.11.17|>=1.12,<=1.12.22|>=1.13,<=1.13.14|>=1.14,<=1.14.17|>=2,<2.0.18|>=2.1,<2.1.15|>=2.2,<2.2.6", + "symbiote/silverstripe-advancedworkflow": "<6.4.5|>=7,<7.1.3|>=7.2,<7.2.1", "symbiote/silverstripe-multivaluefield": ">=3,<3.1", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", "symbiote/silverstripe-seed": "<6.0.3", "symbiote/silverstripe-versionedfiles": "<=2.0.3", "symfont/process": ">=0", - "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", + "symfony/cache": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/dom-crawler": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", - "symfony/http-client": ">=4.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", - "symfony/http-foundation": "<5.4.50|>=6,<6.4.29|>=7,<7.3.7", - "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/html-sanitizer": ">=6.1,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", + "symfony/http-client": ">=4.3,<5.4.53|>=6,<6.4.15|>=7,<7.1.8", + "symfony/http-foundation": "<5.4.50|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", + "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6|>=7.4,<7.4.12|>=8,<8.0.12", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", + "symfony/json-path": ">=7.3,<7.4.12|>=8,<8.0.12", + "symfony/lox24-notifier": ">=7.1,<7.4.12|>=8,<8.0.12", + "symfony/mailer": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", + "symfony/mailjet-mailer": ">=6.4,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", + "symfony/mailomat-mailer": ">=7.2,<7.4.13|>=8,<8.0.13", + "symfony/mailtrap-mailer": ">=7.2,<7.4.12|>=8,<8.0.12", "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", - "symfony/mime": ">=4.3,<4.3.8", + "symfony/mime": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", + "symfony/monolog-bridge": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/polyfill": ">=1,<1.10", + "symfony/polyfill": ">=1,<1.10|>=1.17.1,<1.38.1", + "symfony/polyfill-intl-idn": ">=1.17.1,<1.38.1", "symfony/polyfill-php55": ">=1,<1.10", "symfony/process": "<5.4.51|>=6,<6.4.33|>=7,<7.1.7|>=7.3,<7.3.11|>=7.4,<7.4.5|>=8,<8.0.5", "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/routing": ">=2,<2.0.19", - "symfony/runtime": ">=5.3,<5.4.46|>=6,<6.4.14|>=7,<7.1.7", + "symfony/routing": "<5.4.53|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", + "symfony/runtime": ">=5.3,<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.4.10|>=7,<7.0.10|>=7.1,<7.1.3", "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", + "symfony/security-http": "<5.4.53|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<5.4.51|>=6,<6.4.33|>=7,<7.3.11|>=7.4,<7.4.5|>=8,<8.0.5", + "symfony/symfony": "<5.4.53|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", "symfony/translation": ">=2,<2.0.17", - "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", - "symfony/ux-autocomplete": "<2.11.2", - "symfony/ux-live-component": "<2.25.1", + "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8|>=6.4.24,<6.4.40", + "symfony/twilio-notifier": ">=6.4,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", + "symfony/ux-autocomplete": "<2.36|>=3,<3.1", + "symfony/ux-icons": ">=2.17,<2.36.1|>=3,<3.2", + "symfony/ux-live-component": "<2.36|>=3,<3.1", + "symfony/ux-toolkit": ">=2.32,<2.36.1|>=3,<3.2", "symfony/ux-twig-component": "<2.25.1", "symfony/validator": "<5.4.43|>=6,<6.4.11|>=7,<7.1.4", "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", - "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4|>=7.2.9,<7.4.12|>=8,<8.0.12", "symfony/webhook": ">=6.3,<6.3.8", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", + "symfony/yaml": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symphonycms/symphony-2": "<2.6.4", "t3/dce": "<0.11.5|>=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", @@ -3535,45 +3834,50 @@ "tecnickcom/tcpdf": "<6.8", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1,<2.1.3", + "thelia/thelia": ">=2.0.0.0-beta1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<4.0.18|>=4.1.0.0-alpha,<=4.1.0.0-beta2", + "thorsten/phpmyfaq": "<4.2.0.0-alpha", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", - "tinymce/tinymce": "<7.2", + "tinymce/tinymce": "<7.9.3|>=8,<8.5.1", "tinymighty/wiki-seo": "<1.2.2", "titon/framework": "<9.9.99", "tltneon/lgsl": "<7", "tobiasbg/tablepress": "<=2.0.0.0-RC1", + "tomasnorre/crawler": "<11.0.13|>=12,<12.0.11", "topthink/framework": "<6.0.17|>=6.1,<=8.0.4", "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3|>=6.1.3,<=8.0.4", "torrentpier/torrentpier": "<=2.8.8", - "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", + "tpwd/ke_search": "<5.6.2|>=6,<6.6.1|>=7,<7.0.1", "tribalsystems/zenario": "<=9.7.61188", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", "twbs/bootstrap": "<3.4.1|>=4,<4.3.1", - "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19", - "typicms/core": "<16.1.7", + "twig/cssinliner-extra": "<3.26", + "twig/intl-extra": "<3.26", + "twig/markdown-extra": "<3.26", + "twig/twig": "<3.27", + "typicms/core": "<12.0.5|>=13,<13.0.9|>=14,<14.0.27|>=15,<15.0.29|>=16,<16.1.7", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", + "typo3/cms-backend": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.3", "typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", "typo3/cms-beuser": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", - "typo3/cms-core": "<=8.7.56|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", + "typo3/cms-core": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.34|>=14,<14.3.6", "typo3/cms-dashboard": ">=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", "typo3/cms-extensionmanager": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", "typo3/cms-felogin": ">=4.2,<4.2.3", - "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", - "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", + "typo3/cms-filelist": ">=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.3", + "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1|>=8,<8.7.23|>=9,<9.5.4", + "typo3/cms-form": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.5", "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", - "typo3/cms-indexed-search": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", + "typo3/cms-indexed-search": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<13.4.31|>=14,<14.3.3", "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8|==13.4.2", "typo3/cms-lowlevel": ">=11,<=11.5.41", "typo3/cms-recordlist": ">=11,<11.5.48", - "typo3/cms-recycler": ">=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", + "typo3/cms-recycler": "<10.4.57|>=11,<11.5.51|>=12,<12.4.46|>=13,<13.4.31|>=14,<14.3.3", "typo3/cms-redirects": ">=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", "typo3/cms-scheduler": ">=11,<=11.5.41", @@ -3581,7 +3885,7 @@ "typo3/cms-webhooks": ">=12,<=12.4.30|>=13,<=13.4.11", "typo3/cms-workspaces": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", + "typo3/html-sanitizer": "<2.3.2", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", @@ -3597,7 +3901,7 @@ "uvdesk/core-framework": "<=1.1.1", "vanilla/safecurl": "<0.9.2", "verbb/comments": "<1.5.5", - "verbb/formie": "<=2.1.43", + "verbb/formie": "<3.1.28", "verbb/image-resizer": "<2.0.9", "verbb/knock-knock": "<1.2.8", "verot/class.upload.php": "<=2.1.6", @@ -3611,44 +3915,52 @@ "wallabag/wallabag": "<2.6.11", "wanglelecc/laracms": "<=1.0.3", "wapplersystems/a21glossary": "<=0.4.10", - "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9|>=5.2,<5.2.4", - "web-auth/webauthn-lib": ">=4.5,<4.9|>=5.2,<5.2.4", - "web-auth/webauthn-symfony-bundle": ">=5.2,<5.2.4", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9|>=5.2,<5.2.4|>=5.3,<5.3.1", + "web-auth/webauthn-lib": ">=4.5,<5.3.5", + "web-auth/webauthn-symfony-bundle": "<5.3.4", "web-feet/coastercms": "==5.5", + "web-token/jwt-bundle": "<3.4.10|>=4,<4.0.7|>=4.1,<4.1.7", + "web-token/jwt-experimental": "<4.1.7", + "web-token/jwt-framework": "<4.1.7", + "web-token/jwt-library": "<3.4.10|>=4,<4.0.7|>=4.1,<4.1.7", "web-tp3/wec_map": "<3.0.3", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", "webcoast/deferred-image-processing": "<1.0.2", "webklex/laravel-imap": "<5.3", "webklex/php-imap": "<5.3", + "webonyx/graphql-php": "<=15.32.2", "webpa/webpa": "<3.1.2", "webreinvent/vaahcms": "<=2.3.1", "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", - "winter/wn-backend-module": "<1.2.12", - "winter/wn-cms-module": "<=1.2.9", + "winter/wn-backend-module": "<1.2.13", + "winter/wn-cms-module": "<=1.2.12", "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", "wintercms/winter": "<=1.2.3", "wireui/wireui": "<1.19.3|>=2,<2.1.3", + "wnx/laravel-backup-restore": "<=1.9.3", "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", "wp-cli/wp-cli": ">=0.12,<2.5", - "wp-graphql/wp-graphql": "<=1.14.5", + "wp-coding-standards/wpcs": ">=0.14.1,<3.4.1", + "wp-graphql/wp-graphql": "<=2.6", "wp-premium/gravityforms": "<2.4.21", "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", "wpmetabox/meta-box": "<5.11.2", - "wwbn/avideo": "<=25", + "wwbn/avideo": "<=29", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", - "yeswiki/yeswiki": "<=4.5.4", + "yansongda/pay": "<=3.7.19", + "yeswiki/yeswiki": "<4.6.6", "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": "<1.1.31", - "yiisoft/yii2": "<2.0.52", + "yiisoft/yii2": "<2.0.55", "yiisoft/yii2-authclient": "<2.2.15", "yiisoft/yii2-bootstrap": "<2.0.4", "yiisoft/yii2-dev": "<=2.0.45", @@ -3658,6 +3970,7 @@ "yiisoft/yii2-redis": "<2.0.20", "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", + "yoast/duplicate-post": "<=4.5", "yourls/yourls": "<=1.10.2", "yuan1994/tpadmin": "<=1.3.12", "yungifez/skuul": "<=2.6.5", @@ -3736,7 +4049,7 @@ "type": "tidelift" } ], - "time": "2026-03-18T21:14:35+00:00" + "time": "2026-08-19T20:26:39+00:00" }, { "name": "sebastian/cli-parser", @@ -4179,16 +4492,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.8", + "version": "4.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c" + "reference": "4352c1a3df741a7ba9e61af6fed51d1fee41cbf7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c", - "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/4352c1a3df741a7ba9e61af6fed51d1fee41cbf7", + "reference": "4352c1a3df741a7ba9e61af6fed51d1fee41cbf7", "shasum": "" }, "require": { @@ -4244,7 +4557,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.9" }, "funding": [ { @@ -4264,7 +4577,7 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:03:27+00:00" + "time": "2026-08-11T04:55:59+00:00" }, { "name": "sebastian/global-state", @@ -4513,16 +4826,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.6", + "version": "4.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "539c6691e0623af6dc6f9c20384c120f963465a0" + "reference": "c85be6922b7fd365942b986b9a50397d65407611" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/539c6691e0623af6dc6f9c20384c120f963465a0", - "reference": "539c6691e0623af6dc6f9c20384c120f963465a0", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/c85be6922b7fd365942b986b9a50397d65407611", + "reference": "c85be6922b7fd365942b986b9a50397d65407611", "shasum": "" }, "require": { @@ -4564,7 +4877,7 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.7" }, "funding": [ { @@ -4584,7 +4897,7 @@ "type": "tidelift" } ], - "time": "2025-08-10T06:57:39+00:00" + "time": "2026-08-11T05:25:24+00:00" }, { "name": "sebastian/resource-operations", @@ -4751,16 +5064,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.13.5", + "version": "3.13.6", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4" + "reference": "4c378e1a528ea066890fc2397cbdd2f94eb2fc91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4", - "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/4c378e1a528ea066890fc2397cbdd2f94eb2fc91", + "reference": "4c378e1a528ea066890fc2397cbdd2f94eb2fc91", "shasum": "" }, "require": { @@ -4826,11 +5139,11 @@ "type": "thanks_dev" } ], - "time": "2025-11-04T16:30:35+00:00" + "time": "2026-08-06T00:17:32+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -4886,7 +5199,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.37.0" }, "funding": [ { @@ -5066,16 +5379,16 @@ }, { "name": "wp-coding-standards/wpcs", - "version": "3.3.0", + "version": "3.4.1", "source": { "type": "git", "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", - "reference": "7795ec6fa05663d716a549d0b44e47ffc8b0d4a6" + "reference": "ec2ff942335f33683a5957a85d138753876a05cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7795ec6fa05663d716a549d0b44e47ffc8b0d4a6", - "reference": "7795ec6fa05663d716a549d0b44e47ffc8b0d4a6", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/ec2ff942335f33683a5957a85d138753876a05cf", + "reference": "ec2ff942335f33683a5957a85d138753876a05cf", "shasum": "" }, "require": { @@ -5084,9 +5397,9 @@ "ext-tokenizer": "*", "ext-xmlreader": "*", "php": ">=7.2", - "phpcsstandards/phpcsextra": "^1.5.0", - "phpcsstandards/phpcsutils": "^1.1.0", - "squizlabs/php_codesniffer": "^3.13.4" + "phpcsstandards/phpcsextra": "^1.5.1", + "phpcsstandards/phpcsutils": "^1.2.3", + "squizlabs/php_codesniffer": "^3.13.5" }, "require-dev": { "php-parallel-lint/php-console-highlighter": "^1.0.0", @@ -5128,7 +5441,7 @@ "type": "custom" } ], - "time": "2025-11-25T12:08:04+00:00" + "time": "2026-07-27T11:53:23+00:00" }, { "name": "wp-media/background-processing", @@ -5265,30 +5578,41 @@ }, { "name": "wp-media/phpunit", - "version": "v3.0.4", + "version": "v3.3", "source": { "type": "git", "url": "https://github.com/wp-media/phpunit.git", - "reference": "8914099b403041725fea9f0239534c414674eeca" + "reference": "1aff2adca36bde1191c004557703f6cde01856ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-media/phpunit/zipball/8914099b403041725fea9f0239534c414674eeca", - "reference": "8914099b403041725fea9f0239534c414674eeca", + "url": "https://api.github.com/repos/wp-media/phpunit/zipball/1aff2adca36bde1191c004557703f6cde01856ae", + "reference": "1aff2adca36bde1191c004557703f6cde01856ae", "shasum": "" }, "require": { "mikey179/vfsstream": "^1.6", - "php": "^7 || ^8", + "php": ">=7.4", "yoast/wp-test-utils": "^1.0.0" }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1", + "php-stubs/wordpress-tests-stubs": "^6.8", + "phpcompatibility/phpcompatibility-wp": "^2.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "szepeviktor/phpstan-wordpress": "^2.0", + "wp-coding-standards/wpcs": "^3" + }, "bin": [ "wpmedia-phpunit" ], "type": "library", "autoload": { "psr-4": { - "WPMedia\\PHPUnit\\": "." + "WPMedia\\PHPUnit\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -5308,7 +5632,7 @@ "issues": "https://github.com/wp-media/phpunit/issues", "source": "https://github.com/wp-media/phpunit" }, - "time": "2025-05-09T19:38:19+00:00" + "time": "2026-08-19T15:40:08+00:00" }, { "name": "wp-media/rocket-lazyload-common", @@ -5437,15 +5761,15 @@ }, { "name": "wpackagist-plugin/ewww-image-optimizer", - "version": "8.4.1", + "version": "8.7.5", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/ewww-image-optimizer/", - "reference": "tags/8.4.1" + "reference": "tags/8.7.5" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/ewww-image-optimizer.8.4.1.zip" + "url": "https://downloads.wordpress.org/plugin/ewww-image-optimizer.8.7.5.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" @@ -5527,15 +5851,15 @@ }, { "name": "wpackagist-plugin/spinupwp", - "version": "1.9.0", + "version": "1.9.1", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/spinupwp/", - "reference": "tags/1.9.0" + "reference": "tags/1.9.1" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/spinupwp.1.9.0.zip" + "url": "https://downloads.wordpress.org/plugin/spinupwp.1.9.1.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" @@ -5741,10 +6065,10 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.3" + "php": ">=7.4" }, "platform-dev": { - "php": "^7 || ^8" + "php": "^7.4 || ^8" }, "plugin-api-version": "2.9.0" } diff --git a/web/app/plugins/wp-rocket/dynamic-lists-delayjs.json b/web/app/plugins/wp-rocket/dynamic-lists-delayjs.json index 6d916f1a8..7877f832f 100644 --- a/web/app/plugins/wp-rocket/dynamic-lists-delayjs.json +++ b/web/app/plugins/wp-rocket/dynamic-lists-delayjs.json @@ -1 +1 @@ -{"plugins":{"ffc21030-519a-4853-8cea-49f959e82731":{"title":"Additional Variation Images Gallery for WooCommerce","condition":"woo-variation-gallery\/woo-variation-gallery.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woo-variation-gallery\/assets\/js\/slick.min.js","\/woo-variation-gallery\/assets\/js\/frontend.min.js","\/wp-includes\/js\/underscore.min.js","variation_custom_fields"],"icon_url":"","summary":"Prevents delay in the loading of product images.","type":"plugin","id":"plugin:def67a2c1ddd6df2353e4772b6fd4e5b","is_default":0,"created_at":1724424735},"0e7dc253-acd0-4421-877f-a7101d848717":{"title":"Advanced Ads","condition":"advanced-ads\/advanced-ads.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/(.*).js","advanced_ads_ready","advadsCfpQueue","adsbygoogle","adservice.google","\/advanced-ads(.*)","advads_items","advads_tracking_ads"],"icon_url":"","summary":"The latest versions of Advanced Ads include automatic compatibility with Delay JS. So please update them first: Advanced Ads 1.27.0, Advanced Ads Pro 2.13.0, and Advanced Ads Tracking 2.1.0","type":"plugin","id":"plugin:4b82cc7379d46c6272f5d556bb264eec","is_default":0,"created_at":1724424826},"a4d5c058-9120-47ee-977c-f30f83fb1a75":{"id":"plugin:a076fbb79772f497349a76ee74a7f708","title":"All-in-one Compliance for GDPR \/ CCPA Cookie Consent","type":"plugin","icon":"","exclusions":["iubenda_cs.js","var _iub"],"is_default":0,"condition":"iubenda-cookie-law-solution\/iubenda_cookie_solution.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"88457e92-0f24-458e-b7b5-bab59074ebef":{"title":"Amelia","condition":"ameliabooking\/ameliabooking.php","exclusions":["\/wp-content\/plugins\/ameliabooking\/(.*).js","var hasAmeliaEvent","var ameliaShortcodeData"],"icon_url":"","summary":"Display booking options without user interaction.","type":"plugin","category":"analytics","id":"plugin:93ea6597c3cbd06e93a46b9f5368732d","is_default":0,"created_at":1758013982},"79a5082f-821a-4a4b-a0e3-caaf22cf3f75":{"title":"AMO Team Showcase","condition":"amo-team-showcase\/amo-team-showcase.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/amo-team-showcase\/public\/js\/wookmark.js","\/amo-team-showcase\/public\/js\/amo-team-showcase-public.js","\/wp-includes\/js\/imagesloaded.min.js","amoTeamVars"],"icon_url":"","summary":"To display team members.","type":"plugin","id":"plugin:9bdceaa1bb89135730a3b2aa4db94c22","is_default":0,"created_at":1724425072},"90c7fd90-3adf-4cb7-8a92-845bdbd95d27":{"title":"Anti-Spam by CleanTalk - Prevent console error","condition":"cleantalk-spam-protect\/cleantalk.php","exclusions":["ctPublicFunctions","ctPublic"],"icon_url":"","summary":"Prevent console error","type":"plugin","id":"plugin:ed2ade77cd44e21b1703b093c002a903","is_default":0,"created_at":1724425107},"e054f840-700a-4549-bbba-485473a53f71":{"title":"AnWP Football Leagues - Calendar Widget","condition":"football-leagues-by-anwppro\/anwp-football-leagues.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/football-leagues-by-anwppro\/(.*)","\/football-leagues-by-anwppro-premium-premium\/(.*)","window.AnWPFLPro","window.AnWPFLTabulator","\/elementor\/assets\/lib\/flatpickr\/flatpickr.min.js"],"icon_url":"","summary":"Display FL Calendar Widget","type":"plugin","id":"plugin:e7581089f33fdf0a970d5c5deb16ff50","is_default":0,"created_at":1724425139},"1d058cae-4460-4354-bab3-a96445650bd8":{"title":"AnyWhere Elementor Pro","condition":"anywhere-elementor-pro\/anywhere-elementor-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/anywhere-elementor-pro\/build\/index.js"],"icon_url":"","summary":"Make links clickable","type":"plugin","id":"plugin:b739df50f3f5bf400075f17dca652517","is_default":0,"created_at":1724425158},"8a1614c7-55b1-4b6d-88e5-6e8ddc630dae":{"id":"plugin:46741e77eaf4d13a0c80be6b86379758","title":"Astra - Pro Addon","type":"plugin","icon":"","exclusions":["\/astra-addon\/astra-addon-(.*).js"],"is_default":0,"condition":"astra-addon\/astra-addon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"24bc7cdf-0c51-4d93-a74d-57344689a4f6":{"title":"Beaver Builder - Background Images","condition":"bb-theme-builder\/bb-theme-builder.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/uploads\/bb-plugin\/cache\/(.*)-layout.js"],"summary":"When Delay JavaScript Execution is enabled, background images don't show until user interaction.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:b509b5b21236c81836daf74954b9109e","is_default":0,"created_at":1737120060},"37d96403-f9ea-4481-b2f8-374d7c93e61a":{"title":"Beaver Builder Lite","condition":"beaver-builder-lite-version\/fl-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/bb-plugin\/","\/bb-plugin\/js\/yui3.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/bb-plugin\/js\/fl-slideshow.min.js"],"summary":"To show parallax background, slideshow background and some animations instantly.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:3fab17e6c8338e2dcc7a5c8a06abf093","is_default":0,"created_at":1737118681},"f83dbf3b-783e-4ef9-9b18-8a469ca7102d":{"title":"Bloom","condition":"bloom\/bloom.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/bloom\/"],"icon_url":"","type":"plugin","id":"plugin:e57cdfbc09f4e0f7445c279d9f580bdd","is_default":0,"created_at":1685189070},"a95fbc8a-c32d-4a4b-90b4-ab6d203501a6":{"title":"Bold Builder - Load Page Content","condition":"bold-page-builder\/bold-builder.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/plugins\/bold-page-builder\/content_elements_misc\/js\/content_elements.js"],"summary":"When Delay JavaScript Execution is enabled, the Bold Builder page content doesn't load until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:b4e303b649e8a20c016a51f35647cf35","is_default":0,"created_at":1754073080},"135aadd2-cd4a-44ae-8dcf-801f3f2316c0":{"id":"plugin:055ef01accbad6378e3d1a4965600964","title":"Booked","type":"plugin","icon":"","exclusions":["\/booked\/","\/js\/jquery\/ui\/datepicker.min.js"],"is_default":0,"condition":"booked\/booked.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ddfee9b0-e5a9-4d3f-8c21-b999cbb61c33":{"title":"Bookly","condition":"bookly-responsive-appointment-booking-tool\/main.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/bookly-responsive-appointment-booking-tool\/frontend\/","window.bookly"],"icon_url":"","summary":"To load the booking form on page load.","type":"plugin","id":"plugin:492f9b0d55f3bf07c68e915ea1dfb72a","is_default":0,"created_at":1724427886},"7a013fd6-0881-4dbe-8e93-33edefe7f717":{"title":"Borlabs Cookie","condition":"borlabs-cookie\/borlabs-cookie.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","borlabsCookieConfig","borlabs-cookie.min.js","borlabsCookieContentBlocker","BorlabsCookieBox","allFbWidgets","\/borlabs-cookie\/assets\/javascript\/","borlabs-cookie-config"],"icon_url":"","type":"plugin","id":"plugin:e1ec2daca513de476bd3dae79366e9ab","is_default":0,"created_at":1702497952},"3999e680-4049-4494-945c-768cecc1a2c4":{"title":"Brizy","condition":"brizy\/brizy.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/brizy\/public\/editor-build\/(.*)-wp\/editor\/js\/group-(.*).js","\/brizy\/public\/editor-build\/(.*)-wp\/editor\/js\/preview.js","Brizy.emit","\/brizy\/public\/editor-build\/prod\/editor\/js\/group-(.*).js","\/brizy-pro\/public\/editor-build\/prod\/js\/preview.pro.min.js","Brz.emit"],"icon_url":"","summary":"Prevents partially loading the slider. When Delay JavaScript Execution is enabled, the page content don't load until user interaction.","type":"plugin","category":"analytics","id":"plugin:43019d66af7b41e65bb602c01e10c6a0","is_default":0,"created_at":1744729591},"af4d9357-3def-42a1-86b7-419553444b4d":{"title":"Carousel Upsells and Related Product for WooCommerce","condition":"carousel-upsells-and-related-product-for-woocommerce\/ffxf-woo-glide-related-and-upsells.php","exclusions":["\/carousel-upsells-and-related-product-for-woocommerce\/assets\/js\/glide.min.js","carusel_poduct_related"],"icon_url":"","summary":"To load the carousel products with the correct spacing without interaction.","type":"plugin","id":"plugin:5c317f9f244597d8f236ecb7d8e41752","is_default":0,"created_at":1724428163},"fd98f80b-c23b-410d-9dc3-a8ce3e993ac1":{"title":"Chaty Pro","condition":"chaty-pro\/cht-icons.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/chaty-pro\/js\/cht-front-script.min.js","\/chaty-pro\/js\/mailcheck.js"],"summary":"Makes the chat widget load without need for user interaction.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:b96ceb22b2d39fb4efd313c0820815ea","is_default":0,"created_at":1741370727},"a3008eca-48a0-472d-9a07-5dca76f92a44":{"title":"Click to Chat - HoliThemes \u2013 Load Widget","condition":"click-to-chat-for-whatsapp\/click-to-chat.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/click-to-chat-for-whatsapp\/"],"summary":"Allow the Click to Chat widget (free version) from HoliThemes to load without user interaction","icon_url":"","type":"plugin","category":"analytics","id":"plugin:a972e5b5e65713a2ac6902079728cce0","is_default":0,"created_at":1747894280},"a9bfc345-2da1-413e-bbe7-800245df5f1f":{"title":"Click to Chat Pro - HoliThemes \u2013 Load Widget","condition":"click-to-chat-pro\/click-to-chat-pro.php","exclusions":["\/click-to-chat-pro\/"],"summary":"Allow the Click to Chat widget (Pro version) by HoliThemes to load without user interaction","icon_url":"","type":"plugin","category":"analytics","id":"plugin:9bc0ad7f761a99e2bf2c3df3fa43dc5a","is_default":0,"created_at":1747894256},"1d866d90-5451-43ba-a4d1-75b64f9235e1":{"title":"clickskeks.at Cookiebanner","condition":"clickskeks\/index.php","exclusions":["clickskeks"],"icon_url":"","summary":"Load the cookie banner without interaction.","type":"plugin","id":"plugin:0a3a29603ebac8fe0808f64f5c8edbb2","is_default":0,"created_at":1724428285},"866ceb37-0285-4ce6-9f2a-9a99b03ad0c1":{"title":"CMSMasters Elementor Addon - Mobile Menu","condition":"cmsmasters-elementor-addon\/cmsmasters-elementor-addon.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/cmsmasters-elementor-addon\/assets\/lib\/perfect-scrollbar\/perfect-scrollbar.min.js","\/cmsmasters-elementor-addon\/assets\/lib\/basicScroll\/basicScroll.min.js","\/cmsmasters-elementor-addon\/assets\/js\/webpack.runtime.min.js","\/cmsmasters-elementor-addon\/assets\/js\/frontend.min.js","elementorCmsmastersFrontendConfig"],"summary":"Mobile menu won't open without these exclusions.\r\n\r\nUsed the same exclusions as Elementor, as that's a required plugin to use this one.","icon_url":"","type":"plugin","category":null,"id":"plugin:0e953e89f00b7ba303c8cc9c26eae84e","is_default":0,"created_at":1744056425},"bd275cce-a8ba-48a1-aa37-b9106a287075":{"title":"CommerceGurus CommerceKit - Load featured image","condition":"commercegurus-commercekit\/commercegurus-commercekit.php","exclusions":["\/wp-content\/plugins\/commercegurus-commercekit\/","cgkit_attr_gallery","commercekit_ajs"],"summary":"The featured product images don't load until user interaction with page.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:e081beb69f2208167beb93dfbe596591","is_default":0,"created_at":1758734403},"c09695cc-2387-4416-881a-c0b392188a26":{"title":"Complianz","condition":"complianz-gdpr\/complianz-gpdr.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","complianz"],"icon_url":"","type":"plugin","id":"plugin:a766f95208154cd69a3e15150a42f325","is_default":0,"created_at":1685188788},"bfb36984-e2a1-40ba-a8cd-f29b0b6f720f":{"title":"Complianz Premium","condition":"complianz-gdpr-premium\/complianz-gpdr-premium.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","complianz"],"icon_url":"","type":"plugin","id":"plugin:89d54385816dd2d5ae92cfda9d95bbfd","is_default":0,"created_at":1712163685},"b5e146fc-0b7c-4c6c-a631-8da246d3bd89":{"title":"Conerstone Builder - Fix mobile menu","condition":"cornerstone\/cornerstone.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/cornerstone\/assets\/js\/site\/cs-classic.(.*).js"],"icon_url":"","summary":"Fix the issue with the hamburger menu, when Delay JavaScript execution is enabled the menu doesn't open.","type":"plugin","id":"plugin:f8f8c81535b5e0073aa3c56b6dd3df5b","is_default":0,"created_at":1724428497},"368bc394-b74e-4b62-b359-cd967f78c6ea":{"title":"ConsentMagic Pro - Show popup without user interaction","condition":"consent-magic-pro\/consent-magic-pro.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/plugins\/consent-magic-pro\/js\/cs-public.min.js","\/wp-content\/plugins\/pixelyoursite-pro\/(.*)"],"icon_url":"","summary":"Load the consent popup without user interaction.","type":"plugin","id":"plugin:9e0701a214f49a057f17b00e39df2e7e","is_default":0,"created_at":1724428306},"7e551e3b-fbe4-4235-87a9-b476bc9e2020":{"title":"Content Egg","condition":"content-egg\/content-egg.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/content-egg\/res\/js\/morrisjs\/morris.min.js","\/content-egg\/res\/js\/morrisjs\/raphael.min.js","Morris.Area"],"icon_url":"","summary":"Show charts on page load.","type":"plugin","id":"plugin:949b1b923d51d10a2fb67a2a39d166b3","is_default":0,"created_at":1724428456},"7fbca6c5-9239-4550-a755-6f041f867a57":{"title":"Cookie Notice & Compliance for GDPR \/ CCPA","condition":"cookie-notice\/cookie-notice.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/cookie-notice\/","var cnArgs"],"icon_url":"","summary":"Loads the cookie notice on the screen.","type":"plugin","id":"plugin:213d0f883ae27aefb3a7937656bbd11e","is_default":0,"created_at":1724428382},"26722567-fe35-44b5-a5a7-fb0f3a38c3f2":{"title":"Cookiebot CMP","condition":"cookiebot\/cookiebot.php","exclusions":["consent.cookiebot.com"],"icon_url":"","summary":"Resolves issue with links not being clickable.","type":"plugin","id":"plugin:1d10ad30bbcf0fd4b26e9625a07abcfc","is_default":0,"created_at":1724428418},"1547249a-ce0c-40e4-91f6-148a5f9652d7":{"title":"CookieYes Lite - Show on page load","condition":"cookie-law-info\/cookie-law-info.php","exclusions":["\/cookie-law-info\/lite\/frontend\/js\/script.min.js"],"icon_url":"","type":"plugin","id":"plugin:29d4d4ccd077232b111581043bbd8d81","is_default":0,"created_at":1721422981},"74110e36-89e5-440d-bec3-7133da3277c2":{"title":"Coupon Referral Program","condition":"coupon-referral-program\/coupon-referral-program.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/coupon-referral-program\/","\/wp-includes\/js\/jquery\/ui\/draggable.min.js"],"icon_url":"","summary":"Fixes non-breaking dependency error.\r\n\r\nAlso requires excluding the following from JavaScript deferring:\r\n\r\n\/coupon-referral-program\/","type":"plugin","id":"plugin:edcf103293ceab711e999d419d038ca1","is_default":0,"created_at":1724428687},"408fa396-20f2-4b1f-820d-52882af281cc":{"title":"CozyStay Core - Fix background images","condition":"cozystay-core\/cozystay-core.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/cozystay-core\/assets\/scripts\/front\/parallax-bundle.min.js"],"icon_url":"","summary":"Fixes background images loading.","type":"plugin","id":"plugin:872b5eef05c1fc3b00cda07ee966938d","is_default":0,"created_at":1724428721},"919e07d3-df99-4ebd-a119-dca6c7cb4e22":{"title":"CP Live - Show Videos on Page Load","condition":"cp-live\/cp-live.php","exclusions":["\/cp-library\/build\/src\/app.js","\/feather-icons\/(.*)\/feather.min.js","\/wp-includes\/js\/dist\/vendor\/react.min.js","\/wp-includes\/js\/dist\/vendor\/react-dom.min.js","\/wp-includes\/js\/dist\/element.min.js","\/wp-includes\/js\/dist\/escape-html.min.js"],"summary":"When Delay JavaScript Execution is enabled, videos don't show on page until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:a589057eec49aeea28adecba9585059f","is_default":0,"created_at":1744115729},"ed63e02f-d6c5-481a-bcb9-aae15f72aa21":{"title":"Crisp - Live Chat and Chatbot","condition":"crisp\/crisp.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","CRISP_RUNTIME_CONFIG","l.js"],"icon_url":"","summary":"Allow the chat icon to be displayed.","type":"plugin","id":"plugin:c3e26264dcfd25802805b4fd1a2a449c","is_default":0,"created_at":1724428819},"a8eb622b-279c-4f84-86e0-785e9497add7":{"title":"Custom Twitter Feeds pro","condition":"custom-twitter-feeds-pro\/custom-twitter-feed.php","exclusions":["\/custom-twitter-feeds-pro\/js\/ctf-scripts.min.js"],"icon_url":"","summary":"Allow Twitter feed pro to display a Twitter feed","type":"plugin","id":"plugin:6e4bf949e12f0bebfefb48f6c316102a","is_default":0,"created_at":1724428839},"1624ef15-e25b-406d-bdf9-d4b78d7a59e7":{"title":"Customer Reviews for WooCommerce Plugin","condition":"customer-reviews-woocommerce\/ivole.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/customer-reviews-woocommerce\/js\/colcade.js"],"icon_url":"","type":"plugin","id":"plugin:1f893b343e72ce55e6c9013fbda172fa","is_default":0,"created_at":1704734788},"b0614843-afed-4377-9d8d-e869221be331":{"title":"Depicter Slider","condition":"depicter\/depicter.php","exclusions":["\/depicter\/"],"icon_url":"","type":"plugin","id":"plugin:77c42a041f1c40d128f4bb3714a6d20d","is_default":0,"created_at":1713878881},"396cc03a-8946-4ee8-ab15-7e48261df79a":{"title":"Divi - Carousel Module 2.0","condition":"dg-divi-carousel","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/plugins\/dg-divi-carousel\/"],"icon_url":"","type":"plugin","id":"plugin:fcd789b7d02699f89720aa5ff3627912","is_default":0,"created_at":1709126476},"c15fe3b3-0eaa-48f9-bf04-0e778b1f8c63":{"title":"Divi - Supreme","condition":"supreme-modules-for-divi\/supreme-modules-for-divi.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI","\/supreme-modules-for-divi\/"],"icon_url":"","type":"plugin","id":"plugin:b5489ae4d8b949f536d6dd2e5b0c1a95","is_default":0,"created_at":1679738701},"dd31451b-989a-4517-b02a-e2c2e2023366":{"title":"Divi Den Pro","condition":"ddpro\/ddpro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ddpro\/build\/freddie\/js\/freddieScriptPageTransition.js","\/ddpro\/build\/freddie\/js\/freddieScriptsHeaders.js","\/ddpro\/build\/freddie\/js\/freddieScriptsContents.js","\/ddpro\/build\/freddie\/js\/gsap\/gsap.min.js"],"icon_url":"","summary":"Fires animations and content created with Divi Den Pro.","type":"plugin","id":"plugin:5caed322df984bbfd3ecb506cf12b688","is_default":0,"created_at":1724429225},"2b006370-cc90-42c1-9656-a30fbfbc91c6":{"title":"Divi Mobile","condition":"divi-mobile\/divi-mobile.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","divi-menu","dm_nav"],"icon_url":"","summary":"Avoid double click when using the mobile menu.","type":"plugin","id":"plugin:402d9b241b04934dd30f32e7ba490e63","is_default":0,"created_at":1724429325},"666bbed9-7ce3-457c-ad6e-b5e056d05010":{"title":"Divi Overlays","condition":"divi-overlays\/divi-overlays.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","var DIVI","\/divi-overlays\/"],"icon_url":"","summary":"Enable modals to be displayed on screen","type":"plugin","id":"plugin:1c828c93d87298d2a27c76e13d0880ba","is_default":0,"created_at":1724429242},"42a404af-7792-44be-9baa-565dc3baf25d":{"title":"Divi Pixel","condition":"divi-pixel\/divi-pixel.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/divi-pixel\/dist\/public\/js\/hamburger.min.js","\/divi-pixel\/dist\/vendor\/js\/easypiechart.js"],"icon_url":"","summary":"Page Preloader","type":"plugin","id":"plugin:dd2494945a487a6cc74d3ab1b2137ccb","is_default":0,"created_at":1724429347},"85f5c099-c481-4c38-bbb9-8b76113bdfd5":{"title":"Divi Supreme Pro","condition":"supreme-modules-pro-for-divi\/supreme-modules-pro-for-divi.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","elm.style.display","\/supreme-modules-pro-for-divi\/includes\/modules\/ImageCarousel\/frontend.min.js","\/supreme-modules-pro-for-divi\/public\/js\/swiper-bundle.min.js"],"icon_url":"","summary":"Avoid white screen before user interaction","type":"plugin","id":"plugin:3d5f0ae7751702fd1bb490fcf991a334","is_default":0,"created_at":1724429378},"0b78d762-c7be-45de-9aae-0c5078ec0619":{"id":"plugin:b5fc0101608d0b0627268dc49e3e1f8f","title":"Divi Toolbox","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","jQuery('.preloader')","\/divi-toolbox\/assets\/js\/toolbox-scripts.js"],"is_default":0,"condition":"divi-toolbox\/divi-toolbox.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"fe4f05d8-f90a-4547-9717-1b51a2dc8c5f":{"title":"Divi Torque - Carousel Images","condition":"addons-for-divi\/addons-for-divi.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/plugins\/addons-for-divi\/assets\/libs\/slick\/slick.min.js","\/plugins\/addons-for-divi\/assets\/libs\/magnific-popup\/magnific-popup.js","\/plugins\/addons-for-divi\/assets\/js\/frontend.js","\/plugins\/addons-for-divi\/assets\/libs\/counter-up\/counter-up.min.js","\/themes\/Divi\/js\/scripts.min.js","\/themes\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js","\/themes\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/jquery.mobile.js","cdn.userway.org\/widget.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, carousel images have incorrect dimensions until user interaction with page.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/213","type":"plugin","category":"analytics","id":"plugin:0c5e37ad7075d749ed195f856431d4e7","is_default":0,"created_at":1751983104},"9714d442-1c18-4b5d-a840-9eae2054f047":{"title":"Divi Torque - Gallery Images","condition":"addons-for-divi\/addons-for-divi.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/plugins\/diviflash\/public\/js\/lib\/packery.pkgd.js","\/wp-content\/plugins\/diviflash\/public\/js\/lib\/imagesloaded.pkgd.min.js","\/wp-content\/plugins\/diviflash\/public\/js\/df-packery.js","\/themes\/Divi\/js\/scripts.min.js","\/themes\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js","\/themes\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/jquery.mobile.js","cdn.userway.org\/widget.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the gallery images do not show until user interaction with page.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/214","type":"plugin","category":"analytics","id":"plugin:a6b73cee8978dfce1c881b8301445741","is_default":0,"created_at":1751983856},"aa07b744-a9cc-4de2-8caf-c203da1a8517":{"title":"DiviMenus - Mobile Menu","condition":"divimenus\/divimenus.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/divimenus\/scripts\/frontend-bundle.min.js"],"summary":"When Delay JavaScript Execution is enabled, the mobile menu loads as open until interaction with the page.","icon_url":"","type":"plugin","category":null,"id":"plugin:5041c45e48cd10836174e158078bdce6","is_default":0,"created_at":1745522929},"31a34440-1383-40c4-8920-effcf99f2165":{"title":"Dracula Dark Mode","condition":"dracula-dark-mode-premium\/plugin.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/plugins\/dracula-dark-mode-premium\/assets\/js\/dark-mode.js","\/wp-content\/plugins\/dracula-dark-mode-premium\/assets\/js\/frontend.js","\/wp-includes\/js\/dist\/vendor\/react-dom.min.js","\/wp-includes\/js\/dist\/vendor\/react.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","draculaDarkMode"],"icon_url":"","summary":"Show dark mode toggle button and apply styles without need for user interaction with page.","type":"plugin","id":"plugin:5e8a5d8d3830136d84d0f3676f1bf5a5","is_default":0,"created_at":1724429514},"8baba0f8-4449-47d8-a87d-9b6a116e7684":{"title":"Dynamic Pricing & Discounts Lite for WooCommerce","condition":"woo-dynamic-pricing-discounts-lite\/dynamic-pricing-discounts-lite-for-woocommerce.php","exclusions":["\/woo-dynamic-pricing-discounts-lite\/assets\/OwlCarousel\/dist\/owl.carousel.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:185062bf08db42515488e1853d1f4917","is_default":0,"created_at":1677857247},"0fa129f2-5869-4db7-9bf0-69e4b3549ee2":{"id":"plugin:27478327aa44075a86176fad95640d76","title":"Dynamic Product Gallery for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-dynamic-gallery\/","a3revWCDynamicGallery"],"is_default":0,"condition":"woocommerce-dynamic-gallery\/wc_dynamic_gallery_woocommerce.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"9958c6be-2f67-4791-95c3-a7ad96d599c0":{"title":"Dynamic Product Gallery Premium for WooCommerce","condition":"woocommerce-dynamic-gallery-pro\/wc_dynamic_gallery_woocommerce.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/woocommerce-dynamic-gallery-pro\/assets\/js\/mygallery\/jquery.a3-dgallery.js","settings_defaults_","a3revWCDynamicGallery"],"icon_url":"","summary":"Load the gallery content without user interaction.","type":"plugin","id":"plugin:11dc02a76019f00422f4ac85f47f5135","is_default":0,"created_at":1724429541},"ce26ed21-1be5-481f-80d4-31edfac6d890":{"title":"Dynamic.ooo - Dynamic Content for Elementor","condition":"dynamic-content-for-elementor\/dynamic-content-for-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/dynamic-content-for-elementor\/assets\/","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","summary":"Show dynamic content","type":"plugin","id":"plugin:d2bd5b348abe016bdc722acce7755062","is_default":0,"created_at":1724429557},"6a3161a6-1a6f-457a-a9ee-54b376981927":{"title":"Easy Table of Contents","condition":"easy-table-of-contents\/easy-table-of-contents.php","exclusions":["\/easy-table-of-contents\/assets\/js\/front.min.js"],"icon_url":"","summary":"Avoid the Easy Table of Contents to briefly open when the page loads.","type":"plugin","id":"plugin:ee1dec033c6481a77fe88de5bef1a02d","is_default":0,"created_at":1724429629},"25a534a0-2c1f-4cf4-9e19-7941bc032b3a":{"title":"Ecwid Ecommerce Shopping Cart","condition":"ecwid-shopping-cart\/ecwid-shopping-cart.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","app.ecwid.com\/script.js","\/ecwid-shopping-cart\/js\/frontend.js","\/ecwid-shopping-cart\/js\/static-page.js","ecwidParamswindow.ec","jQuery.mobile","xSearch","xCategoriesV2","xProductBrowser","Ecwid.init"],"icon_url":"","type":"plugin","id":"plugin:41c8f5f0ab00cb39654aedd783d194e0","is_default":0,"created_at":1704734846},"a0d681db-991a-4220-8f05-c54a4857aa42":{"title":"Element Pack Pro","condition":"bdthemes-element-pack\/bdthemes-element-pack.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/bdthemes-element-pack\/assets\/js\/modules\/ep-static-carousel.min.js","\/bdthemes-element-pack\/assets\/js\/modules\/ep-custom-carousel.min.js","\/bdthemes-element-pack\/assets\/js\/modules\/ep-slideshow.min.js","\/bdthemes-element-pack\/assets\/js\/modules\/ep-product-carousel.min.js","\/bdthemes-element-pack\/assets\/js\/modules\/ep-stacker.min.js","\/bdthemes-element-pack\/assets\/js\/bdt-uikit.min.js","\/bdthemes-element-pack\/assets\/js\/common\/helper.min.js","\/bdthemes-element-pack\/assets\/vendor\/js\/ScrollTrigger.min.js","\/bdthemes-element-pack\/assets\/vendor\/js\/gsap.min.js"],"icon_url":"","summary":"Fix issues with gallery and product carousels.","type":"plugin","id":"plugin:ced76c4da718a667537dc6c9d5e0244d","is_default":0,"created_at":1724429901},"40464325-5bae-4a20-bc97-553499e09a73":{"title":"Elementor","condition":"elementor\/elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","type":"plugin","id":"plugin:1d15783218a3137bec4ee8df5353e218","is_default":0,"created_at":1694425872},"ac86b64c-c80a-4053-894d-6caa8b4fdce8":{"title":"Elementor Loop Carrousel","condition":"elementor\/elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","type":"plugin","id":"plugin:0eb8d0bbd1c7ca05ac133ea634f676b7","is_default":0,"created_at":1694442056},"a8fc9fd1-f6d3-41eb-abe9-ef176de6d7e2":{"title":"Elementor - Lazy Load Background Images","condition":"elementor\/elementor.php","exclusions":["lazyloadRunObserver"],"icon_url":"","summary":"Start background images so they load immediately","type":"plugin","id":"plugin:bf248cb2876558452a566c5dd89262b8","is_default":0,"created_at":1724430300},"1948aff5-7850-4979-91fa-0ce181484508":{"title":"Elementor Custom Skin","condition":"ele-custom-skin\/ele-custom-skin.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ele-custom-skin(.*)\/assets\/js\/"],"icon_url":"","summary":"Fixes console error when Elementor scripts are excluded","type":"plugin","id":"plugin:de658ae6c2d05a5a4a947efecf5e0c16","is_default":0,"created_at":1724429916},"25708299-c596-4416-8ad8-740aee0f2752":{"title":"Elementor Pro","condition":"elementor-pro\/elementor-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js"],"icon_url":"","summary":"Show elements, galleries, and start animations. \r\n\r\nWhen User Cache is active the following exclusions will resolve console errors:\r\n\r\n\/wp-includes\/js\/underscore.min.js\r\n\/wp-includes\/js\/jquery\/ui\/core.min.js\r\n\/wp-includes\/js\/backbone.min.js\r\nelementorAdminBarConfig\r\nelementorCommonConfig\r\nelementorWebCliConfig\r\nelementorDevToolsConfig","type":"plugin","id":"plugin:030ad23e3851ed7adfa7b9b6c13cf5a6","is_default":0,"created_at":1724430189},"f34dd874-4b34-41e6-a31c-ece3c1efbffc":{"title":"Elementor Pro - SmartMenus","condition":"elementor-pro\/elementor-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/assets\/lib\/smartmenus\/jquery.smartmenus.min.js","\/elementor-pro\/assets\/js\/preloaded-elements-handlers.min.js"],"icon_url":"","summary":"Fixes the mobile menu","type":"plugin","id":"plugin:305581ad4294a30eeb1247982f626005","is_default":0,"created_at":1724430219},"111cc8b2-0be9-438b-9aa3-7f1e301a5697":{"id":"plugin:5ae9f5d99224d5ebc7d0c0bbf5b99787","title":"Elementor Pro - User Cache","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/backbone.min.js","elementorAdminBarConfig","elementorCommonConfig","elementorWebCliConfig","elementorDevToolsConfig"],"is_default":0,"condition":"elementor-pro\/elementor-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c1713bf8-e0c3-4cb5-8b3f-841b06aa87ed":{"title":"ElementsKit Lite - Megamenu","condition":"elementskit-lite\/elementskit-lite.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/elementskit(.*)\/"],"icon_url":"","type":"plugin","id":"plugin:b91fed2fc4478dbb7067742c1ee4691b","is_default":0,"created_at":1683270249},"236c2a9e-9668-4a80-9b66-d2222d812dd6":{"title":"Elfsight Slider CC","condition":"elfsight-slider-cc\/elfsight-slider-cc.php","exclusions":["\/elfsight-slider-cc\/assets\/elfsight-slider.js"],"icon_url":"","summary":"Load slider on page loading","type":"plugin","id":"plugin:b0e259c84df5e120d6113dd0eef9da4b","is_default":0,"created_at":1724430233},"706ff35d-8e33-4b04-a986-346faff704e9":{"title":"Essential Addons for Elementor","condition":"essential-addons-for-elementor-lite\/essential_adons_elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/essential-addons(-for)?-elementor(-lite)?\/.*(.min)?.js"],"icon_url":"","summary":"Start the carousel on page load","type":"plugin","id":"plugin:417192424139d89fb2a5b1ee1f2b9613","is_default":0,"created_at":1724430272},"b38556dc-2bc4-430f-9c55-7191cf7773db":{"title":"Essential Addons for Elementor Pro","condition":"essential-addons-elementor\/essential_adons_elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/essential-addons(-for)?-elementor(-lite)?\/.*(.min)?.js"],"icon_url":"","summary":"Start the carousel on page load","type":"plugin","id":"plugin:057757d0593ad9d2dc58124f0077a5df","is_default":0,"created_at":1724430280},"719b988f-0d60-40c2-ba46-88f943119cb1":{"title":"Essential Grid","condition":"essential-grid\/essential-grid.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/essential-grid\/","lightboxOptions"],"icon_url":"","summary":"Load grid without interaction.","type":"plugin","id":"plugin:c8e6c490f6438f566ade600c33531a85","is_default":0,"created_at":1724430960},"47d3d2ab-160d-4b07-ac25-8250b9e6a951":{"title":"EventON Lite","condition":"eventon-lite\/eventon.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/eventon-lite\/assets\/js\/(.*)"],"icon_url":"","summary":"Load the events calendar on page load","type":"plugin","id":"plugin:dafd19fa48a1fef890dc4348052fcb75","is_default":0,"created_at":1724430313},"219968d7-cf1f-4ee0-917a-db35dcc93a3e":{"id":"plugin:49ff465628fc3cb6d7f23ff81d9b8339","title":"FacetWP","type":"plugin","icon":"","exclusions":["\/facetwp\/assets\/js\/dist\/front.min.js","window.FWP_"],"is_default":0,"condition":"facetwp\/index.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"acce5701-5917-48d5-83ab-3e626aa420c5":{"id":"plugin:78a1c88a56fa957c802074b6418c6fac","title":"FacetWP - Flyout menu","type":"plugin","icon":"","exclusions":["\/facetwp-flyout\/assets\/js\/front.js"],"is_default":0,"condition":"facetwp-flyout\/facetwp-flyout.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"081461cf-dbd0-42f3-9557-10cdc16cf145":{"title":"FiboFilters Premium","condition":"fibofilters-pro\/fibofilters.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/fibofilters-pro\/build\/front-pro\/front.js"],"icon_url":"","summary":"Display filter without need for user interaction.","type":"plugin","id":"plugin:d9f62725f1470d35c3f220645bc2e473","is_default":0,"created_at":1724431277},"f2a5b95f-1a22-46d2-8b72-42a53e46ae3f":{"title":"FiboSearch - Ajax Search for WooCommerce","condition":"ajax-search-for-woocommerce\/ajax-search-for-woocommerce.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.js","\/wp-includes\/js\/jquery\/jquery-migrate.js","\/ajax-search-for-woocommerce-premium\/assets\/js\/search.js"],"icon_url":"","summary":"Avoid search modals moving to the top when adding keyword in the input field.","type":"plugin","id":"plugin:5d7555892a3a9968fde3fa3a335fc3d8","is_default":0,"created_at":1724431295},"7d1404e9-be76-449c-87aa-919557abe82d":{"title":"FlexBlock","condition":"flo-flex-builder\/flo-flex-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/flo-flex-builder\/dist\/flex-public.min.js","flexDebug"],"icon_url":"","summary":"Fire animations and show images on pageload.","type":"plugin","id":"plugin:ad46179e8b0584abaf52056b846da227","is_default":0,"created_at":1724431336},"b9c6a2dc-b226-4e2c-b85e-29ee55b8f751":{"title":"Fluent Forms","condition":"fluentform\/fluentform.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/fluentform\/public\/js\/(.*).js","\/fluentformpro\/public\/js\/(.*).js"],"icon_url":"","summary":"Fixes files upload field.\r\n\r\n*Requires exlcuding jQuery from JavaScript deferring as well","type":"plugin","id":"plugin:567a2b15db30ef6bd4904e4317139aac","is_default":0,"created_at":1724431366},"10874f8a-2855-4e80-bc46-e484589b76a8":{"title":"Flying Images","condition":"nazy-load\/flying-images.php","exclusions":["flyingImages"],"icon_url":"","summary":"Fixes images not being loaded until there is user interaction","type":"plugin","id":"plugin:e78c153103f698b2b34892332d6b3b62","is_default":0,"created_at":1724431386},"53958499-dacd-41d6-93bc-1534fe7d9eda":{"title":"FooGallery Premium","condition":"foogallery-premium\/foogallery.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/foobox-image-lightbox\/free\/js\/foobox.free.min.js","\/plugins\/foogallery-premium\/pro\/extensions\/default-templates\/shared\/js\/foogallery.min.js"],"icon_url":"","summary":"Prevents delay in the loading of product images.","type":"plugin","id":"plugin:5a0e40a6c5783856893b803189de1404","is_default":0,"created_at":1724431261},"7870d704-2024-4622-838c-fad37d5c6753":{"title":"Formidable Forms","condition":"formidable\/formidable.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","frmSigs","\/formidable-signature\/js\/frm.signature.min.js"],"icon_url":"","summary":"Prevent the delay of the function and the file that processes the signature.","type":"plugin","id":"plugin:ebb5efb57b19ae60e734e456ca2df3f8","is_default":0,"created_at":1724431311},"3f24f9b3-e59e-400f-a784-999f93f60fab":{"title":"Forminator","condition":"forminator\/forminator.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","forminatorFront","\/forminator\/build\/front\/front.multi.min.js","\/forminator\/assets\/js\/library\/jquery.validate.min.js","\/forminator\/assets\/forminator-ui\/js\/forminator-form.min.js","\/forminator\/assets\/forminator-ui\/js\/select2.full.min.js","\/wp-includes\/js\/jquery\/ui\/datepicker.min.js","\/wp-includes\/js\/dist\/vendor\/moment.min.js","\/forminator\/assets\/js\/library\/intlTelInput.min.js"],"icon_url":"","summary":"Display form without interaction","type":"plugin","category":"analytics","id":"plugin:0b08523445b8869a67ca40e777704692","is_default":0,"created_at":1769789399},"cef612ad-2a33-4e0c-b2d2-0831bb35e682":{"title":"Funnelforms Free","condition":"funnelforms-free\/Funnelforms-free.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/funnelforms-free\/res\/frontend\/scripts\/frontend.js"],"summary":"When Delay JavaScript Execution is enabled, the Form doesn\u2019t load.","icon_url":"","type":"plugin","category":null,"id":"plugin:2cc4ab9bdadb915b68d466b87f5f2934","is_default":0,"created_at":1750261265},"2e1a34f6-21cd-46d1-af05-8ba575170f44":{"title":"Gallery Slider for WooCommerce - Pro - Fix Product Gallery","condition":"woo-gallery-slider-pro\/woo-gallery-slider-pro.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/woo-gallery-slider-pro\/public\/js\/woo-gallery-slider-public.min.js","\/woo-gallery-slider-pro\/public\/js\/swiper-bundle.min.js","\/woo-gallery-slider-pro\/public\/js\/zoom.min.js","\/woo-gallery-slider-pro\/public\/js\/jquery.fancybox.min.js","\/woo-gallery-slider-pro\/public\/js\/video.min.js"],"icon_url":"","summary":"Makes the gallery to load at page load","type":"plugin","id":"plugin:04761f78cbc0a1ed05c65d7e20ddda5b","is_default":0,"created_at":1732823624},"3a600ded-3454-48fb-9811-46afa2ab3c05":{"title":"GDPR Cookie Compliance","condition":"gdpr-cookie-compliance\/moove-gdpr.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/gdpr-cookie-compliance\/dist\/scripts\/main.js"],"icon_url":"","summary":"Show the consent banner on page load.","type":"plugin","id":"plugin:5759bf0d47ac3457485314b381a9b528","is_default":0,"created_at":1724431440},"e21aaa5e-7354-471d-ab86-85f99f48830c":{"title":"GDPR Cookie Consent","condition":"webtoffee-gdpr-cookie-consent\/cookie-law-info.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/public\/js\/cookie-law-info-public.js","Cli_Data"],"icon_url":"","summary":"Show the consent banner on page load.","type":"plugin","id":"plugin:ffb40036ab0583218561de7c28c6bd9b","is_default":0,"created_at":1724431421},"1f8bdec1-9c4c-4080-8ac0-5f8b49967047":{"title":"GetPaid - Fix console errors","condition":"invoicing\/invoicing.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/invoicing\/vendor\/ayecode\/wp-ayecode-ui\/assets\/js\/select2.min.js","\/invoicing\/vendor\/ayecode\/wp-ayecode-ui\/assets\/js\/bootstrap.bundle.min.js"],"summary":"It fixes some errors with jQuery in the browser's console.","icon_url":"","type":"plugin","id":"plugin:6756935a144cf0a74b252db5f8229ee9","is_default":0,"created_at":1728404861},"c11ca4ea-1a23-49ee-9a6b-1e549de50ea2":{"title":"Getwid - Gutenberg Blocks","condition":"getwid\/getwid.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/jquery\/ui\/tabs.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js"],"icon_url":"","summary":"Fixes tabs when jQuery is excluded from Delay JavaScript Execution.","type":"plugin","id":"plugin:3877953c5ec1e66db92ad844ae8ebafc","is_default":0,"created_at":1724431639},"79b33eb9-bc92-4d8a-afd8-1c61e70bed8f":{"title":"GiveWP","condition":"give\/give.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/give\/assets\/dist\/js\/give.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","summary":"Closes the preloader.","type":"plugin","id":"plugin:0fb3af06fc5c710a670220b054c292c5","is_default":0,"created_at":1724431653},"3773bb33-b168-4f68-9963-512da24ac4da":{"title":"GoodLayers Core","condition":"goodlayers-core\/goodlayers-core.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/goodlayers-core\/plugins\/script.js","\/goodlayers-core\/include\/js\/page-builder.js"],"icon_url":"","type":"plugin","id":"plugin:5f124509a56ca2e0644246919ec70434","is_default":0,"created_at":1704734904},"2adabe9b-6e03-4a67-959f-492813d40f69":{"title":"Google Tag Manager for WooCommerce PRO","condition":"gtm-ecommerce-woo-pro\/gtm-ecommerce-woo-pro.php","exclusions":["\/gtm-ecommerce-woo-pro\/assets\/gtm-ecommerce-woo-pro.js"],"icon_url":"","summary":"Fire tracker on page load.","type":"plugin","id":"plugin:e54fd4313007b6fedf8ab4df0e05277a","is_default":0,"created_at":1724431759},"7bf261ac-89d4-492f-8a3d-1c5809b9579a":{"title":"Gravity Forms","condition":"gravityforms\/gravityforms.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/gravityforms\/","gform","recaptcha","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/plupload\/plupload.min.js","\/wp-includes\/js\/plupload\/moxie.min.js"],"icon_url":"","type":"plugin","id":"plugin:7a1c1606d094f6bff83c0ee155908367","is_default":0,"created_at":1694457903},"fbaf4a19-f675-441a-b75c-7fd748a59827":{"title":"Gravity Forms Page Transitions","condition":"gp-page-transitions\/gp-page-transitions.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/gp-page-transitions\/js\/"],"icon_url":"","summary":"To load the form without interaction - Gravity Forms one-click exclusion should also be checked.","type":"plugin","id":"plugin:53ef8d0ee1f9fdf0bbf87676e449eef5","is_default":0,"created_at":1724432081},"12340193-5c35-4b0d-b0bc-bea690cf1cae":{"title":"Green Forms","condition":"green-forms\/green-forms.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","leform.min.js","leform_customjs_handlers","leform_ajax_url"],"icon_url":"","summary":"Load forms without any delay","type":"plugin","id":"plugin:2f3112dd98c39aeb6bde618c9026a29f","is_default":0,"created_at":1724432097},"4d20b427-47cf-4cdf-91c7-ff53602d3b2a":{"id":"plugin:0eb769dddc58f998e913345841b1d0b3","title":"GTM4WP","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","dataLayer"],"is_default":0,"condition":"duracelltomi-google-tag-manager\/duracelltomi-google-tag-manager-for-wordpress.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"a2b3c237-728c-49d6-882a-e3885444e9b4":{"title":"GTranslate","condition":"gtranslate\/gtranslate.php","exclusions":["translate.google.com","googleTranslateElementInit"],"icon_url":"","summary":"To enable immediate translation on the page without user interaction","type":"plugin","id":"plugin:3b085ccda851ccf129d9506462f0cd65","is_default":0,"created_at":1724432146},"79dfc946-6b96-4b6d-bcaf-8cae6330581a":{"title":"GTranslate - Show language switcher on page load","condition":"gtranslate\/gtranslate.php","exclusions":["window.gtranslateSettings","\/gtranslate\/js\/dwf.js","\/gtranslate\/js\/flags.js"],"icon_url":"","summary":"To show language switcher on page load.","type":"plugin","category":"analytics","id":"plugin:0aedfaa0f543c47c4b0fcf57307c6691","is_default":0,"created_at":1737550549},"40cd9336-e73f-4a61-a7f6-27ec1ca6892c":{"title":"HBook","condition":"hbook\/hbook.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/hbook\/","hb_booking_form_data","hb_max_date"],"icon_url":"","summary":"Render the form on page load.","type":"plugin","id":"plugin:e1f17c1eac230219e6fec3ac07406a0d","is_default":0,"created_at":1724432162},"52cec6ac-f2a4-415f-83f4-ca0db789401d":{"title":"hCaptcha for WP","condition":"hcaptcha-for-forms-and-more\/hcaptcha.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","hcaptcha"],"summary":"Load hcaptcha without error on page load","icon_url":"","type":"plugin","category":null,"id":"plugin:19677c6ace86eadfd1269341071f3481","is_default":0,"created_at":1770201198},"192224c7-df72-4e3d-8f13-3206ac5b2e90":{"title":"Helper - OpenAI Chatbot for WordPress","condition":"\/helper\/index.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/helper\/js\/helper.min.js","mdpHelper"],"icon_url":"","summary":"Allow for chatbot icon load without user interaction.","type":"plugin","id":"plugin:07311d992a8a9d6af91e4766d2cb9ac9","is_default":0,"created_at":1724433592},"99cfbb2e-5678-42c2-928f-5cb09d7e43da":{"title":"HUSKY - Products Filter for WooCommerce","condition":"woocommerce-products-filter\/index.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-products-filter\/(.*)","woof"],"icon_url":"","summary":"Avoid console error (no impact on the functionality of WOOF)","type":"plugin","id":"plugin:269c5766fba124a838ac012a4b5a1a13","is_default":0,"created_at":1724432177},"b98640e1-c483-4032-99fe-4fa96093d261":{"title":"Hustle","condition":"wordpress-popup\/popover.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/underscore.min.js","\/wp-content\/plugins\/wordpress-popup\/"],"summary":"When Delay JavaScript Execution is enabled, the Popup doesn't load.","icon_url":"","type":"plugin","category":null,"id":"plugin:d9fc141690ff6b022b7f15b533daac7f","is_default":0,"created_at":1759750548},"3a964eac-4aeb-49a7-9fd6-4c31b2645dee":{"id":"plugin:d457acfec0f86aac6733f1446f4fc94f","title":"Instagram Feed Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/instagram-feed-pro\/js\/sbi-scripts.min.js","sb_instagram_js_options"],"is_default":0,"condition":"instagram-feed-pro\/instagram-feed.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8f9f4788-1b8d-468b-b291-1fcbd48618b9":{"id":"plugin:513b0c0ec8e12130af9b4bbbb17d7275","title":"Interactive Geo Maps","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/interactive-geo-maps-premium\/assets\/public\/map-service\/app.min.js","\/interactive-geo-maps\/assets\/public\/map-service\/app.js","iMapsData","cdn.amcharts.com\/lib\/"],"is_default":0,"condition":"interactive-geo-maps\/interactive-geo-maps.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cf650ca3-afa0-4a13-9e4f-f7cca19abac6":{"title":"Ivory Search","condition":"add-search-to-menu\/add-search-to-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/add-search-to-menu\/public\/js\/ivory-search.min.js"],"icon_url":"","type":"plugin","id":"plugin:7430e9d2c985ae0a3339a7b7e1acc318","is_default":0,"created_at":1677852711},"17a5dd54-1f5e-4d57-a56d-a8a970651954":{"title":"JetBlocks","condition":"jet-blocks\/jet-blocks.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-blocks\/assets\/js\/jet-blocks.min.js"],"icon_url":"","summary":"Enable dropdown on hover on the Cart and enable Mobile Sticky Header","type":"plugin","id":"plugin:1c8a1e1ba89a601f88654f094139b469","is_default":0,"created_at":1724432217},"b6f78c90-9823-459a-8dc1-1257e5f0d4e3":{"title":"JetBlog","condition":"jet-blog\/jet-blog.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/","\/elementor\/","\/jet-blog\/","ElementorProFrontendConfig","elementorFrontendConfig","hasJetBlogPlaylist"],"icon_url":"","summary":"News ticker to work on pageload (in addition to any other Jet exclusions).","type":"plugin","id":"plugin:dac9ec782180f33d0fcc7c4e0e569b9d","is_default":0,"created_at":1724432242},"e17173d8-6ef8-4e27-ba0f-379c9aea7eda":{"title":"JetElements","condition":"jet-elements\/jet-elements.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/jet-elements\/","hasJetBlogPlaylist","jetElements","\/wp-includes\/js\/jquery\/ui\/"],"icon_url":"","summary":"Load JetElements on page load.","type":"plugin","id":"plugin:0fe8895d1da5247b73a5d0b482df4ac4","is_default":0,"created_at":1724432253},"cfd77501-9c9e-4f11-b994-0178a592fc08":{"title":"JetEngine","condition":"jet-engine\/jet-engine.php","exclusions":["\/jet-engine\/"],"icon_url":"","type":"plugin","id":"plugin:bc998e71546860c8c7f70c45a6c18972","is_default":0,"created_at":1686208296},"f320c661-4a2b-4299-bada-110f9e931e3c":{"title":"JetFormBuilder - Load without interaction","condition":"jetformbuilder\/jet-form-builder.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/jetformbuilder\/","var JetFormBuilderSettings","\/wp-includes\/js\/dist\/i18n.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/jet-plugins\/jet-plugins.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig"],"summary":"The form is loaded without interaction, and styles are applied immediately.","icon_url":"","type":"plugin","id":"plugin:5ad00a39ed79f888daca19429bc59989","is_default":0,"created_at":1730300985},"36fed829-a2d9-41b5-94f6-2c3b9f07a94e":{"title":"JetMenu","condition":"jet-menu\/jet-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/","\/elementor\/","\/jet-blog\/assets\/js\/lib\/slick\/slick.min.js","\/jet-elements\/","\/jet-menu\/","elementorFrontendConfig","ElementorProFrontendConfig","hasJetBlogPlaylist","JetEngineSettings","jetMenuPublicSettings","\/jet-reviews\/assets\/js\/lib\/vue.min.js"],"icon_url":"","summary":"Mobile menu to show on page load.","type":"plugin","id":"plugin:433a3173f2d06f7d02c7b91c06ed215d","is_default":0,"created_at":1724432268},"580cfed7-f034-4e39-bc7a-cdd01923ce87":{"title":"JetPopup","condition":"jet-popup\/jet-popup.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/jet-popup\/assets\/js\/lib\/anime-js\/anime.min.js","\/jet-popup\/assets\/js\/jet-popup-frontend.js","\/jet-woo-builder\/","var jetPopupData","JetEngine.popupData"],"icon_url":"","summary":"To show the pop up","type":"plugin","category":"analytics","id":"plugin:51714cfdb43f231a1c93e7cffb1007ab","is_default":0,"created_at":1755872236},"d9cd2730-12e2-42d7-a082-6f0efcd466cc":{"title":"JetProductGallery","condition":"jet-woo-product-gallery\/jet-woo-product-gallery.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-woo-product-gallery\/assets\/lib\/swiper\/swiper.min.js","\/jet-woo-product-gallery\/assets\/js\/jet-woo-product-gallery.min.js","JetSwiper"],"icon_url":"","summary":"To avoid issues with the product gallery on the product page","type":"plugin","category":"analytics","id":"plugin:df3bc4b6a8a9f28a5ba24cb7496bbc72","is_default":0,"created_at":1740662940},"544aa37b-4d52-4182-99e8-abe23585da14":{"title":"JetReviews","condition":"jet-reviews\/jet-reviews.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-reviews\/assets\/js\/jet-reviews-frontend.js","\/jet-reviews\/assets\/js\/lib\/vue.min.js","jetReviewsWidget"],"icon_url":"","summary":"To show the reviews on the product page","type":"plugin","id":"plugin:5921fc95965ac7fccb7296957bd9abff","is_default":0,"created_at":1724432349},"963c7804-eede-4570-bd63-67066588b758":{"title":"JetSearch - Search results popup","condition":"jet-search\/jet-search.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/jet-search\/assets\/lib\/chosen\/chosen.jquery.min.js","\/jet-search\/assets\/js\/jet-search.js","\/jet-search\/assets\/lib\/jet-plugins\/jet-plugins.js"],"icon_url":"","summary":"To display the list of results when using the search box.","type":"plugin","id":"plugin:13e8760379022187de982df2226a5be4","is_default":0,"created_at":1724432367},"a8460089-34b4-4f8f-8694-5d92fa48aa82":{"title":"JetSmartFilters","condition":"jet-smart-filters\/jet-smart-filters.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/jet-smart-filters\/assets\/js\/public.js","jet-smart-filters-js-extra","\/jet-engine\/assets\/lib\/jet-plugins\/jet-plugins.js","jetOffcanvasInitialized"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the right filters doesn't load until user interaction.","type":"plugin","category":"analytics","id":"plugin:0cd63a514de1f1acb88e2bde65c4bc8d","is_default":0,"created_at":1756996542},"fe3c4915-6f8b-49b7-aa9c-c97b264d9f12":{"title":"JetSticky","condition":"jetsticky-for-elementor\/jetsticky-for-elementor.php","exclusions":["\/jetsticky-for-elementor\/"],"icon_url":"","summary":"Allows sticky menu and sidebar to be displayed","type":"plugin","id":"plugin:a346b60514ef52afeffc6e2ef2793da3","is_default":0,"created_at":1724432399},"853479dc-fff5-47cf-9a60-bf9b00f71fc4":{"title":"JetTabs for Elementor","condition":"jet-tabs\/jet-tabs.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/wp-content\/plugins\/jet-tabs\/assets\/js\/jet-tabs-frontend.min.js"],"icon_url":"","summary":"To make the tab functionality work correctly.","type":"plugin","id":"plugin:d887a6ffea25d759e8aecdb6b78917f7","is_default":0,"created_at":1724432416},"b7f89562-230c-4f63-8360-7aad6df31e02":{"title":"JetTricks","condition":"jet-tricks\/jet-tricks.php","exclusions":["\/jet-tricks\/"],"icon_url":"","summary":"To display animations.","type":"plugin","id":"plugin:829272546b040d5aaeeeaf976b6cd4ec","is_default":0,"created_at":1724432431},"90451e2a-553a-4496-9fa4-cffedbe69d43":{"title":"JetWoo Widgets For Elementor","condition":"jet-woo-builder\/jet-woo-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/jetwoo-widgets-for-elementor\/assets\/js\/jet-woo-widgets.js","\/jet-woo-builder\/assets\/js\/jet-woo-builder.min.js","\/jet-woo-builder\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Load JetWoo carousel on page load.","type":"plugin","id":"plugin:f44f3dbd09149f57db370e4132b057db","is_default":0,"created_at":1724432447},"944718c2-48c6-4f53-aaa2-460d07e033cc":{"title":"JetWooBuilder","condition":"jet-woo-builder\/jet-woo-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/elementor-pro\/","\/elementor\/","elementorFrontendConfig","ElementorProFrontendConfig","JetEngineSettings","\/jet-woo-builder\/","\/jet-woo-builder-custom-quantity-selectors-main\/assets\/js\/main.js"],"icon_url":"","summary":"Add quantity buttons to add to cart.","type":"plugin","id":"plugin:ed318a971f8a047bed5b02ad546a9c18","is_default":0,"created_at":1724432462},"b7807939-54f8-4d5c-8363-a42a154d9592":{"title":"Joinchat","condition":"creame-whatsapp-me\/joinchat.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/creame-whatsapp-me\/public\/js\/joinchat.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the icon to open new chat does not display for mobile unless we apply these exclusions.","type":"plugin","id":"plugin:1c3ec728d37052f3a3055d415618342f","is_default":0,"created_at":1727103514},"8cdeadfc-f686-4c58-bf01-8d6ad43dfef8":{"title":"Kadence Blocks Pro - Load Content","condition":"kadence-blocks-pro\/kadence-blocks-pro.php","exclusions":["\/plugins\/kadence-blocks-pro\/includes\/assets\/js\/aos.min.js"],"summary":"When Delay JavaScript Execution is enabled, the page content doesn't load until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:ea96ffb0858920541f6a6144f7d2289f","is_default":0,"created_at":1754052401},"46d50db6-61ae-4703-aeaa-39f12a46f872":{"title":"Kadence Slider","condition":"kadence-slider\/kadence-slider.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/kadence-slider\/js\/min\/ksp-min.js"],"summary":"When Delay JavaScript Execution is enabled, the slides don't show until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:6a6b1a4de6dc21770d6d044b7dd7a2e4","is_default":0,"created_at":1759413099},"f5b62f59-1dae-4cdf-ac3f-f5e846fc9918":{"id":"plugin:9562e253cd4ac2b1e1f70e32cb4e32dc","title":"Layer Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.utils.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.kreaturamedia.jquery.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.transitions.js","initLayerSlider"],"is_default":0,"condition":"LayerSlider\/layerslider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e2be718d-83a2-4fa0-bc98-f0df52be3dc1":{"title":"LoftLoader Pro","condition":"loftloader-pro\/loftloader-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","loftloader.min.js"],"icon_url":"","summary":"Prevent the page from getting stuck in the loader and load the page content without user interaction.","type":"plugin","id":"plugin:1425e2735306796fe1539d9184a77e10","is_default":0,"created_at":1724432664},"cfa18552-656e-453c-9e14-c07522dc6598":{"title":"MailUp for WordPress","condition":"mailup-email-and-newsletter-subscription-form\/mailup.php","exclusions":["\/mailup-email-and-newsletter-subscription-form\/public\/js\/mailup-public.js","mailup-js-extra"],"icon_url":"","summary":"Enables subscription from to be submitted","type":"plugin","id":"plugin:0bf67b8ba84771e1a367fe24590ef09c","is_default":0,"created_at":1724433004},"c5330c66-ba7b-45b1-87e4-ce590ab005dd":{"title":"Maintenance","condition":"maintenance\/maintenance.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/maintenance\/"],"icon_url":"","summary":"Removes the preload spinner without interaction.","type":"plugin","id":"plugin:10d0de28911c5f66463b9c8783f8148a","is_default":0,"created_at":1724433020},"62f6663a-a15f-4bca-b9b5-79f1770e2c5a":{"title":"MapifyLite- Show map on page load","condition":"mapifylite\/mapify_lite.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/mapifylite\/assets\/vendor\/leaflet-1.7.1\/leaflet.js","\/plugins\/mapifylite\/assets\/vendor\/leaflet\/markercluster\/leaflet.markercluster.js","\/plugins\/mapifylite\/assets\/vendor\/leaflet\/locatecontrol\/L.Control.Locate.min.js","\/plugins\/mapifylite\/assets\/vendor\/tooltip.js","\/plugins\/mapifylite\/assets\/js\/dist\/bundle.js","var map"],"icon_url":"","summary":"Load map on pageload.","type":"plugin","id":"plugin:48c30c0f37b64accf88126d4ef58e17b","is_default":0,"created_at":1724432876},"267aef71-afa0-4848-b6f8-3e1ca15c3a23":{"title":"Maps Marker Pro","condition":"maps-marker-pro\/maps-marker-pro.php","exclusions":["\/maps-marker-pro\/js\/mapsmarkerpro.js","var mapsMarkerPro"],"icon_url":"","summary":"Load map on pageload.","type":"plugin","id":"plugin:9460789bdfe77425c895f130991a4cb4","is_default":0,"created_at":1724432891},"b5a88b63-e906-49b3-8134-420139915ea6":{"title":"Master Popups","condition":"master-popups\/master-popups.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/master-popups\/assets\/public\/js\/master-popups-libs.min.js"],"icon_url":"","type":"plugin","id":"plugin:8fd7bd2c8b0a33e62798573abd12be63","is_default":0,"created_at":1681305305},"4be41549-bf4d-4c49-8346-0f8a3b88fdba":{"title":"Master Slider","condition":"master-slider\/master-slider.php","exclusions":["masterslider"],"icon_url":"","summary":"Prevents Master Slider to be initially hidden","type":"plugin","id":"plugin:de888634cc4bd51576eed319d5a528fd","is_default":0,"created_at":1724432981},"087bee18-7cd1-4c10-8acc-19e1b7c4f4cd":{"title":"Max Mega Menu","condition":"megamenu\/megamenu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/hoverIntent.min.js","\/megamenu\/js\/maxmegamenu.js","var megamenu"],"icon_url":"","summary":"For the Pro version this file may need to be excluded too:\r\n\r\n\/megamenu-pro\/assets\/public.js","type":"plugin","id":"plugin:b71309a89bf3c8b558b6fca5d6531919","is_default":0,"created_at":1724433045},"cf22f0b9-01f4-409e-8a93-ad6743095abd":{"title":"Meta Slider","condition":"ml-slider\/ml-slider.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ml-slider\/","var metaslider"],"icon_url":"","summary":"Shows the slider on page load","type":"plugin","id":"plugin:94a7bae84ef2816494be4af66c577bfc","is_default":0,"created_at":1724433102},"beb2e088-1354-42db-b803-13e725e8916c":{"title":"MetForm","condition":"metform\/metform.php","exclusions":["\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(?(.*))?( |'|\"|>|$)","\/metform\/public\/assets\/js\/htm.js","\/metform\/public\/assets\/js\/app.js","\/wp-includes\/js\/dist\/vendor\/react-dom.min.js","\/wp-includes\/js\/dist\/vendor\/react.min.js"],"summary":"Allows the form to load without user interaction","icon_url":"","type":"plugin","category":null,"id":"plugin:0aa559d4482eb485c12cd1ad71418523","is_default":0,"created_at":1744280463},"bb2cbc0d-20da-415e-8218-c17f1db53579":{"title":"Monarch","condition":"monarch\/monarch.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","dt-place-monarch-icons"],"icon_url":"","type":"plugin","id":"plugin:b7335d6d6d5c5134ea10ac2d9b04226c","is_default":0,"created_at":1677853476},"a98d6a80-4610-4ede-bd33-c3e15bed0a95":{"id":"plugin:4f8651262425ef6d7c223c68a2ec2063","title":"Monster Insights","type":"plugin","icon":"","exclusions":["__gtagTracker","monsterinsights_frontend","\/google-analytics-for-wordpress\/assets\/js\/frontend-gtag.min.js"],"is_default":0,"condition":"google-analytics-for-wordpress\/googleanalytics.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"26e1a36e-7a03-449e-8ecc-e42c41ca291c":{"title":"Motion.page","condition":"motionpage\/motionpage.php","exclusions":["\/motionpage\/core\/includes\/assets\/js\/(.*)","\/motionpage\/core\/includes\/assets\/js\/gsap\/(.*)","\/motionpage\/assets\/js\/(.*)","\/motionpage\/assets\/js\/gsap\/(.*)"],"icon_url":"","summary":"Fixes any issue with Motion.page animations","type":"plugin","id":"plugin:f8fc66b302dec2327bdec0434a3b275b","is_default":0,"created_at":1724433236},"459fd663-7f80-45fd-8308-d3484981e161":{"title":"Ninja Forms","condition":"ninja-forms\/ninja-forms.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/ninja-forms\/assets\/js\/min\/front-end-deps.js","\/ninja-forms\/assets\/js\/min\/front-end.js","nf-"],"icon_url":"","summary":"Show the form on pageload","type":"plugin","id":"plugin:1d3ae9c1a96d5062616968b81eef319d","is_default":0,"created_at":1724433463},"c97440dd-7592-40e7-8c98-dac20d39808f":{"title":"Ninja Tables","condition":"ninja-tables\/ninja-tables.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ninja-tables(.*)\/assets\/","\/ninja-tables(.*)\/public\/","\/wp-includes\/js\/dist\/vendor\/moment.min.js","ninja_table_instance_","ninja_filter_","ninja_table_ready_init_table_id"],"icon_url":"","summary":"Show the table on pageload","type":"plugin","id":"plugin:723a588dcd49285ea9f7404e2379b47f","is_default":0,"created_at":1724433481},"ebc01f06-8c35-47fa-9c63-8959c5cbd915":{"title":"NotificationX","condition":"notificationx\/notificationx.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/notificationx\/assets\/public\/js\/(.*).js","notificationXArr"],"icon_url":"","summary":"Show the pop-up notification","type":"plugin","id":"plugin:f41a52ab1dd50a81cd3a5e341af0007c","is_default":0,"created_at":1724433494},"5fcd4cb7-1916-4995-973e-6d9def619e12":{"title":"Nova Blocks","condition":"nova-blocks\/nova-blocks.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/js\/dist\/dom-ready.min.js","has-loaded","wf-active","nova-blocks"],"summary":"Allows rendering the layout on page load for themes based on the Nova Blocks framework (Pixelgrade themes)","icon_url":"","type":"plugin","category":null,"id":"plugin:72b8526ce363ca9b7e5d82b245379cbb","is_default":0,"created_at":1733813516},"3aaf4a1b-591a-48b7-8d60-e6d65c0f94c9":{"title":"Ocean Elementor Widgets","condition":"ocean-elementor-widgets\/ocean-elementor-widgets.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ocean-elementor-widgets\/"],"icon_url":"","summary":"Avoid console errors (Elements added with this plugin should work)","type":"plugin","id":"plugin:be8fc72a8b8e8eb5958be13737cff47c","is_default":0,"created_at":1724433526},"90bfaf32-fa1d-4b48-bf64-3bf6f2c7c93b":{"title":"Ocean Extra - Load Preloader","condition":"ocean-extra\/ocean-extra.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ocean-extra\/includes\/preloader\/assets\/js\/preloader.min.js"],"summary":"When DJE is enabled, Ocean Extra preloader is not loaded until user interaction on the page.","icon_url":"","type":"plugin","category":null,"id":"plugin:1584fd7b07ef3eed359694c0f3046931","is_default":0,"created_at":1754297770},"f053a7d3-62b0-4312-b0ca-6ff63380eb0b":{"title":"One Click Accessibility","condition":"pojo-accessibility\/pojo-accessibility.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pojo-accessibility\/assets\/js\/app.min.js"],"icon_url":"","summary":"Allow One Click Accessibility to work on all pages","type":"plugin","id":"plugin:1a14afe852fefe7b22ccad3893672a29","is_default":0,"created_at":1724433541},"61e11800-48a9-4354-8a4c-ac9a2b4b033a":{"title":"OoohBoi Steroids for Elementor","condition":"ooohboi-steroids-for-elementor\/ooohboi-steroids.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ooohboi-steroids-for-elementor\/"],"icon_url":"","summary":"Display OohhBoi elements on page load","type":"plugin","id":"plugin:b9ed0fe6f2cdbd305691a6b857f4b3dc","is_default":0,"created_at":1724433511},"560b78a2-f051-490b-9dc6-a602dece0d81":{"title":"Optimole","condition":"optimole-wp\/optimole-wp.php","exclusions":["optimoleData"],"icon_url":"","summary":"To fire excluded JavaScript files served through the Optimole CDN","type":"plugin","id":"plugin:f1ff18a3e04c4e0995fca9cabffe57a7","is_default":0,"created_at":1724433610},"b0fda458-4bf2-41e9-a159-60d4bb6102a6":{"title":"OSM - OpenStreetMap","condition":"osm\/osm.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/osm\/js\/OL\/","\/osm\/js\/osm-v3-plugin-lib.js","vectorM"],"icon_url":"","summary":"Display the map and avoid console errors.","type":"plugin","id":"plugin:48ec18bd3f59772d98f85dddab75e305","is_default":0,"created_at":1724433624},"3743ed67-e0d1-4243-bb1f-ee48a445dd10":{"title":"OxyExtras","condition":"oxyextras\/plugin.php","exclusions":["vime","vime.esm.js"],"icon_url":"","summary":"When using Pro Media Player","type":"plugin","id":"plugin:9eacf0b76484af0259cd788f4923f20c","is_default":0,"created_at":1724433698},"52a21e27-af5b-4476-8d6d-54c323fd1443":{"title":"Oxygen Builder","condition":"oxygen\/functions.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/component-framework\/vendor\/aos\/aos.js","AOS.init","oxygen_init_pro_menu","oxy-pro-menu-show-dropdown","oxy-shape-divider","oxygenVSBInitToggleJs"],"icon_url":"","summary":"When using the \"Pro Menu\" element.\r\nPrevents incorrect positioning of the Shape Divider on page load\r\nAllow tabs toggles to be closed when the page loads","type":"plugin","id":"plugin:e852555c4b4789d78a96d76f503b3262","is_default":0,"created_at":1724433680},"ebd282b9-e175-4b83-90a2-fe12389ccd11":{"id":"plugin:6f9419e58ec86c94e7698aaaaf9dc715","title":"PageLoader by Bonfire","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pageloader-by-bonfire\/pageloader.js","bonfire-pageloader-overlay"],"is_default":0,"condition":"pageloader-by-bonfire\/pageloader-by-bonfire.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"0baf6353-aa70-41a9-a3bc-d89870a5839b":{"title":"PDF Embedder","condition":"pdf-embedder\/pdf_embedder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pdf-embedder\/js\/(.*).js"],"icon_url":"","summary":"Load the PDF's without user interaction.\r\nPlease note that if Defer Javascript Execution is enabled, you also need to exclude these files from being deferred.","type":"plugin","id":"plugin:3a4c4518eb0f60108ab4934fab27d335","is_default":0,"created_at":1724433747},"cba51ec1-87cc-44eb-b12b-d652e3446507":{"title":"Perfect Brands for WooCommerce","condition":"perfect-woocommerce-brands\/perfect-woocommerce-brands.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/perfect-woocommerce-brands\/assets\/lib\/slick\/slick.min.js","\/perfect-woocommerce-brands\/assets\/js\/functions-frontend.min.js"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:4f90aca5957cccbf623e3bbc31afa204","is_default":0,"created_at":1724433762},"808e7a4e-025c-4fae-bf82-de3716e5eb0d":{"title":"Photonic","condition":"photonic\/photonic.php","exclusions":["\/photonic\/include\/js\/front-end\/module\/photonic-baguettebox.min.js"],"icon_url":"","summary":"Display the gallery without user interaction.","type":"plugin","id":"plugin:84fe214646388d7c021dda25003ac165","is_default":0,"created_at":1724434241},"936aff7d-a8ac-4473-a7b5-4b1611b6c557":{"title":"Pixel Caffein","condition":"pixel-caffeine\/pixel-caffeine.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/pixel-caffeine\/build\/frontend.js","aepc_pixel"],"icon_url":"","summary":"Fire the tracker on pageload.","type":"plugin","id":"plugin:6838be282f853f71be282783cb1c162b","is_default":0,"created_at":1724434253},"ab3a4ef5-2732-4b46-a7c3-17b4e9405cd1":{"title":"Pixel Manager for WooCommerce","condition":"woocommerce-pixel-manager-pro\/woocommerce-pixel-manager.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/woocommerce-pixel-manager-pro\/js\/public\/","wpm"],"icon_url":"","summary":"Fire the tracker on pageload.","type":"plugin","id":"plugin:afe0eb7c64d4556a7111c56dd8c4d307","is_default":0,"created_at":1724434270},"2774f964-50b2-425e-8a30-0a02f421b7e4":{"title":"Popup Builder","condition":"popup-builder\/popup-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/popup-builder\/public\/js\/(.*).js","\/popupbuilder-exit-intent\/public\/javascript\/ExitIntent.js","var sgpbPublicUrl","SGPB_POPUP_PARAMS"],"icon_url":"","summary":"Show popup on exit","type":"plugin","id":"plugin:38d4b2986868f543639cd1ebc3e510aa","is_default":0,"created_at":1724433776},"82dbb1e5-31f9-43d7-b522-52819aa49ba5":{"title":"Popup Maker","condition":"popup-maker\/popup-maker.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/pum\/pum-site-scripts.js","pum","\/plugins\/popup-maker\/assets\/js\/site.min.js"],"icon_url":"","summary":"Show popup on one click","type":"plugin","id":"plugin:786717922362642f34a7ff58e919bd95","is_default":0,"created_at":1724433839},"48e08305-1f1c-4ef4-9f13-24af1b155abc":{"title":"PowerPack Addons for Elementor","condition":"powerpack-lite-for-elementor\/powerpack-lite-elementor.php","exclusions":["\/powerpack-lite-for-elementor\/assets\/js\/min\/frontend.min.js"],"icon_url":"","summary":"Show animations","type":"plugin","id":"plugin:17831cbb64e469c7f66224c8c63d0a58","is_default":0,"created_at":1724433893},"e037ae2f-e36b-4f1a-ada8-eb8fde6746f2":{"title":"Preloader Plus","condition":"preloader-plus\/preloader-plus.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/preloader-plus\/(.*)"],"icon_url":"","summary":"Prevents the preloader from being stuck until there's user interaction","type":"plugin","id":"plugin:80e1283ea1afead3ca904fad792643c5","is_default":0,"created_at":1724434032},"90fed478-e89a-455c-8371-836bee58fb81":{"title":"Premium Addons for Elementor","condition":"premium-addons-for-elementor\/premium-addons-for-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/premium-addons.min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/isotope.min.js","\/premium-addons-elementor\/pa-frontend-(.*).min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/slick.min.js","\/premium-addons-pro\/assets\/frontend\/min-js\/tooltipster.min.js","window.scopes_array","lottie.min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/premium-nav-menu.min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/typed.min.js","\/premium-addons-pro\/assets\/frontend\/min-js\/imgcompare.min.js","\/premium-addons-pro\/assets\/frontend\/min-js\/event-move.min.js"],"icon_url":"","summary":"The above will cover:\r\n\r\n- Make equal height work\r\n- Make filters work\r\n- Make lottie animations work\r\n- Make the testimonials' carousel work\r\n- Allow Animated Text to load without User interaction\r\n- Allow Image comparison to show","type":"plugin","category":"analytics","id":"plugin:debbfbbcbdf9ffb465bbc40008d99f02","is_default":0,"created_at":1744729898},"24bb14b1-f934-4f9d-adbd-4e186e0a0ecd":{"title":"Premium Addons PRO","condition":"premium-addons-pro\/premium-addons-pro-for-elementor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/premium-addons-pro\/assets\/frontend\/min-js\/premium-badge.min.js"],"icon_url":"","summary":"- Allow Global badges to show","type":"plugin","category":"analytics","id":"plugin:c7220a8a2a42faf4072977c623bc88c7","is_default":0,"created_at":1744729892},"7e43c261-77be-48fc-b25a-8953a654ae85":{"title":"Presto Player","condition":"presto-player\/presto-player.php","exclusions":["\/wp-includes\/js\/dist\/vendor\/regenerator-runtime.min.js","\/presto-player\/dist\/components\/web-components\/web-components.esm.js","\/presto-player\/src\/player\/player-static.js","var player","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","summary":"Load the video player","type":"plugin","id":"plugin:100a0382fcf3d1b6b22da928bce46ea8","is_default":0,"created_at":1724434113},"3d6f509f-d040-4279-9a2f-a4e6eae1e9df":{"title":"Price Based on Country for WooCommerce Pro","condition":"woocommerce-price-based-country-pro-addon\/woocommerce-price-based-country-pro-addon.php","exclusions":["\/woocommerce-product-price-based-on-countries\/assets\/js\/ajax-geolocation.min.js","\/woocommerce-price-based-country-pro-addon\/assets\/js\/currency-switcher.min.js","add-to-cart.min.js","cart-fragments.min.js"],"icon_url":"","summary":"To load the prices and currency switcher without interaction","type":"plugin","id":"plugin:c0fce700121492b566517e68301db382","is_default":0,"created_at":1724434128},"b970bc8a-bcbe-4d08-8ac0-a6853ab3f036":{"title":"Prime Slider","condition":"bdthemes-prime-slider-lite\/bdthemes-prime-slider.php","exclusions":["\/plugins\/bdthemes-prime-slider-lite\/assets\/js\/bdt-uikit.min.js"],"icon_url":"","summary":"Display slider without interaction","type":"plugin","id":"plugin:f1ecfe258440b371124999ca3bfbfff3","is_default":0,"created_at":1724434141},"e5458963-f167-4b68-88e4-77dd39af2842":{"title":"PRO Elements","condition":"pro-elements\/pro-elements.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pro-elements\/"],"icon_url":"","summary":"Fixes functions execution when the jQuery library is already excluded","type":"plugin","id":"plugin:29ea8f4dd72f5a5c5927917fb0665a05","is_default":0,"created_at":1724434176},"b119ad72-f498-4576-bb71-9e6d8c37b68f":{"title":"Product Filter by WBW (for WooCommerce)","condition":"woo-product-filter\/woo-product-filter.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/wp-content\/plugins\/woo-product-filter\/modules\/woofilters\/js\/frontend.woofilters.js","\/woofilters\/js\/frontend.multiselect.js","\/wp-includes\/js\/jquery\/ui\/mouse.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/jquery\/ui\/slider.min.js","opened closed"],"icon_url":"","summary":"Resolves issue where the product filter won't load on the page, there's a 'loading' gif stuck in its place, and there's a console error.","type":"plugin","category":"analytics","id":"plugin:e57ad91e0d94fab011353af544873743","is_default":0,"created_at":1743105367},"7b779aca-e497-4da3-8e51-fa12837d15ab":{"title":"Product Filters for WooCommerce","condition":"woocommerce-product-filters\/woocommerce-product-filters.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-product-filters\/","\/woocommerce\/assets\/js\/accounting\/accounting.min.js","\/wp-includes\/js\/jquery\/ui\/","wcpf-load-project","WCPFData"],"icon_url":"","summary":"Make the filters work","type":"plugin","id":"plugin:719469f1c977f7109d3d6ee21ecd5a16","is_default":0,"created_at":1724434226},"2b2a51f2-bd47-4591-92d8-4a690bce5d99":{"title":"Product Gallery Slider for WooCommerce","condition":"twist\/twist.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/twist\/assets\/js\/slick.min.js","wpgs-public-js-after"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:a898898b2b0ea2cd82e20a6d3a3aa47b","is_default":0,"created_at":1724434162},"badb569e-f821-4f90-b2c7-69c286c1bda5":{"title":"Product Gallery Slider for WooCommerce By Codeixer - Fix Product Gallery","condition":"woo-product-gallery-slider\/woo-product-gallery-slider.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/woo-product-gallery-slider\/assets\/js\/slick.min.js","\/woo-product-gallery-slider\/assets\/js\/wpgs.js"],"summary":"Show Product Gallery on page load","icon_url":"","type":"plugin","category":null,"id":"plugin:d7fe72709580a4c9b3d23e482485ed0d","is_default":0,"created_at":1746519887},"9b63d036-595f-477b-918e-049121c29765":{"title":"Product Slider for WooCommerce","condition":"woo-product-slider\/main.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/woo-product-slider\/src\/Frontend\/assets\/js\/swiper.min.js","\/woo-product-slider\/src\/Frontend\/assets\/js\/scripts.min.js"],"summary":"When Delay JavaScript Execution is enabled, the product sliders don't load until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:e8da84c8281e41723851607361a77a92","is_default":0,"created_at":1738076099},"062c5be3-e5ea-4958-9619-44e3410f237e":{"title":"Product Video Gallery for Woocommerce","condition":"product-video-gallery-slider-for-woocommerce\/product-video-gallery-slider-for-woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/product-video-gallery-slider-for-woocommerce\/public\/js\/nickx.front.js","\/product-video-gallery-slider-for-woocommerce\/public\/js\/swiper-bundle.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the video gallery slider doesn't work until user interaction - images don't slide and thumbs appear much larger than they should.","type":"plugin","category":"analytics","id":"plugin:bbc653a91f0635cd2edb0b741aa62b85","is_default":0,"created_at":1767792522},"34d225a4-688c-476b-846b-420774160d6b":{"id":"plugin:e0b123d324c6fc85b8682660c34f8829","title":"Rank Math SEO","type":"plugin","icon":"","exclusions":["local_ga_js"],"is_default":0,"condition":"seo-by-rank-math\/rank-math.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"02305ca0-2c2a-4eef-a802-b8a942771ecc":{"title":"Retainful","condition":"retainful-next-order-coupon-for-woocommerce\/retainful-next-order-coupon-for-woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/retainful-next-order-coupon-for-woocommerce\/src\/premium\/assets\/js\/atc-popup.min.js","\/retainful-next-order-coupon-for-woocommerce\/src\/premium\/assets\/js\/exit-intent-popup.js","retainful.com","rnoc-add-to-cart-js-before","rnoc_redirect_coupon_popup"],"icon_url":"","summary":"Show the pop-up","type":"plugin","id":"plugin:f9fdee19ba6aed961d96d86e1521a761","is_default":0,"created_at":1724434370},"b4055250-5813-400f-b663-d390fee989e4":{"title":"Revolution Slider","condition":"revslider\/revslider.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/revslider\/public\/assets\/js\/","\/revslider\/sr6\/assets\/js\/","\/revslider-(.*)-addon\/","setREVStartSize","rev_slider_","revslider_","window.RS_MODULES","\/revslider\/public\/js\/libs\/tptools.js","\/revslider\/public\/js\/sr7.js","SR7","_tpt.R.fonts.domFonts"],"icon_url":"","summary":"Show the slider on page load","type":"plugin","category":"analytics","id":"plugin:d6a4d07d1b4022d886df52322dcd8a6f","is_default":0,"created_at":1770043380},"0b4e061a-b366-4d5a-a00e-bded4b107133":{"title":"Royal Elementor Addons","condition":"royal-elementor-addons\/wpr-addons.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/royal-elementor-addons\/assets\/js\/frontend.min.js","\/royal-elementor-addons\/assets\/js\/lib\/jarallax\/jarallax.min.js","\/royal-elementor-addons\/assets\/js\/lib\/slick\/slick.min.js"],"icon_url":"","summary":"Fixes mobile menu not opening","type":"plugin","category":"analytics","id":"plugin:c4b464373716d7ac8e3cfb019aaa6102","is_default":0,"created_at":1747684976},"1b19ec89-171a-4f85-8c4b-b1bcfc6b1433":{"id":"plugin:5e3f85d8c82cc184b945415d1a862601","title":"Sassy Social Share","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/sassy-social-share\/public\/js\/sassy-social-share-public.js","heateorSssLoadEvent"],"is_default":0,"condition":"sassy-social-share\/sassy-social-share.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"f5899925-2ab7-43b6-abc4-51b76d664ca6":{"title":"Scrollsequence","condition":"scrollsequence-pro\/scrollsequence-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/scrollsequence-pro\/public\/js\/gsap__premium_only.js","\/scrollsequence-pro\/public\/js\/gsap-scrolltrigger__premium_only.js","\/scrollsequence-pro\/public\/js\/ssq-lib__premium_only.js","scrollsequence-input-script"],"icon_url":"","summary":"Show images and animation on pageload","type":"plugin","id":"plugin:3df51830b6b80668fc342c8dcea495cf","is_default":0,"created_at":1724434606},"043827fc-3df8-45d6-9cd2-14fbe962987a":{"title":"ShiftNav Pro - Responsive Mobile Menu","condition":"shiftnav-pro\/shiftnav.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shiftnav-pro\/assets\/js\/shiftnav(.*).js"],"icon_url":"","summary":"Displays without interaction.","type":"plugin","id":"plugin:9d60b5d2de4d828b78c7b088024377d6","is_default":0,"created_at":1724434657},"bcbaf240-e76f-4620-b7d5-4852c46d4be7":{"title":"ShiftNav \u2013 Responsive Mobile Menu","condition":"shiftnav-responsive-mobile-menu\/shiftnav-responsive-mobile-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shiftnav-responsive-mobile-menu\/"],"icon_url":"","summary":"Displays without interaction.","type":"plugin","id":"plugin:56279bd768c8f27ad1972b6774738bcf","is_default":0,"created_at":1724434651},"bbe0543b-b5af-467b-a90d-e2975d892d8d":{"title":"Short Pixel Adaptive Image","condition":"shortpixel-adaptive-images\/short-pixel-ai.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shortpixel-adaptive-images\/assets\/js\/ai(.*).min.js","spai_settings"],"icon_url":"","type":"plugin","id":"plugin:1bc7ac87d8ab2301a1b904919dc7a798","is_default":0,"created_at":1704734942},"543ab43a-6bd3-4948-a09e-3b95e7c9209d":{"title":"Showcase IDX","condition":"showcase-idx\/showcaseidx.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","SIDX","search.showcaseidx.com\/js\/app-(.*).js","cdn.shortpixel.ai"],"icon_url":"","summary":"Prevents requiring double click on iOS to use filters.\r\n\r\nExclusion when the option New AI engine is enabled (You don't need the above, only this one):\r\n\r\ncdn.shortpixel.ai","type":"plugin","id":"plugin:ce4dea8ddc3caa8d00e95cec3202d32a","is_default":0,"created_at":1724434768},"a16bcab7-1169-46b9-a425-b091478d8312":{"title":"Side Cart WooCommerce","condition":"side-cart-woocommerce\/xoo-wsc-main.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/plugins\/woocommerce\/assets\/js\/frontend\/add-to-cart.min.js","\/plugins\/woocommerce\/assets\/js\/jquery-blockui\/jquery.blockUI.min.js","\/plugins\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js"],"icon_url":"","summary":"Makes cart icon work to slide in the cart menu.","type":"plugin","id":"plugin:3ea7d9f75ad03620b0bce2517bd5b8d1","is_default":0,"created_at":1724434681},"521f748e-cf09-4019-bd28-b52daef5f16f":{"title":"Simple Banner","condition":"simple-banner\/simple-banner.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/simple-banner\/","simpleBannerScriptParams"],"icon_url":"","summary":"Show the banner on pageload.","type":"plugin","id":"plugin:7843983bf90dbae16c6e889382c71b23","is_default":0,"created_at":1724434695},"76026e82-d9cf-482c-b480-55c57693a184":{"title":"Site Kit by Google","condition":"google-site-kit\/google-site-kit.php","exclusions":["google-analytics.com\/analytics.js","ga\\( '","ga\\('","\/gtag\/js","gtag\\(","\/gtm.js"],"icon_url":"","summary":"Fixes issues with Google Analytics.","type":"plugin","id":"plugin:b6825f971d35a5515d095564a2e40936","is_default":0,"created_at":1724434707},"4f9be7dd-fa19-401c-a5a5-81654990f9c4":{"title":"SiteOrigin Widgets Bundle - Load images","condition":"so-widgets-bundle\/so-widgets-bundle.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/so-widgets-bundle\/js\/slider\/jquery.slider.min.js","\/so-widgets-bundle\/js\/jquery.cycle.min.js","\/so-widgets-bundle\/js\/jquery.cycle.swipe.min.js","\/so-widgets-bundle\/js\/sow.jquery.fittext.min.js","\/so-widgets-bundle\/js\/lib\/jquery.fitvids.min.js","\/siteorigin-panels\/js\/styling.min.js","siteorigin-panels-before-js","page_id"],"icon_url":"","summary":"Load the images on the page load.","type":"plugin","id":"plugin:3968480c93d7f92ed1cb78a54b47fc9f","is_default":0,"created_at":1724434720},"79c458d7-f7f7-4072-919d-ad337bde6ae3":{"title":"Slick Menu","condition":"slick-menu\/slick-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/slick-menu\/"],"icon_url":"","summary":"Show menu on pageload","type":"plugin","id":"plugin:5ce5dfecdc9d3292c69a1413bbd17d3c","is_default":0,"created_at":1724434809},"99cf4942-49ea-4687-b156-405ed1ce1cfa":{"title":"Slide Anything","condition":"slide-anything\/slide-anything.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/slide-anything\/owl-carousel\/owl.carousel.min.js","owl_goto.trigger"],"icon_url":"","summary":"Show slider without user interaction","type":"plugin","id":"plugin:fff874cc48b80940210228c975df395c","is_default":0,"created_at":1724434788},"dd0ea584-0c99-4c30-b46d-da35b94c9f0a":{"title":"Slider by Soliloquy","condition":"soliloquy-lite\/soliloquy-lite.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","soliloquy-min.js","soliloquy_slider"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:ffb5f8cc0ea17886dbd05f601ca3eec0","is_default":0,"created_at":1724434937},"20efe964-7ba6-411e-98eb-f2f9bc75dd5a":{"title":"Slider Revolution","condition":"slider-revolution\/revslider.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/revslider\/public\/assets\/js\/","\/revslider\/sr6\/assets\/js\/","\/revslider-(.*)-addon\/","setREVStartSize","rev_slider_","revslider_","window.RS_MODULES","\/slider-revolution\/public\/js\/libs\/tptools.js","\/slider-revolution\/public\/js\/sr7.js","SR7","_tpt.R.fonts.domFonts"],"summary":"- Load Slider without user interaction\r\n- For new Slider Revolution version, the \/revslider\/public\/js\/libs\/tptools.js and \/revslider\/public\/js\/sr7.js were updated to: \/slider-revolution\/public\/js\/sr7.js and \/slider-revolution\/public\/js\/libs\/tptools.js. \r\n- The plugin slug was also updated from revslider\/revslider.php to slider-revolution\/revslider.php.\r\n- This backend entry is to allow compatiblity for the new version.","icon_url":"","type":"plugin","category":null,"id":"plugin:41ff48dde3715a47d1ee63fdac32cc4a","is_default":0,"created_at":1770042676},"ecb2fffc-d289-4f68-ae94-71131f17deee":{"title":"Smart Slider 3","condition":"smart-slider-3\/smart-slider-3.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/smart-slider-3\/(.*).js","_N2"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:2f373822dceb191c31c8ad2183d51869","is_default":0,"created_at":1724434826},"284ede43-bf80-419e-8414-46c26cb746f0":{"title":"Smart Slider 3 Pro","condition":"nextend-smart-slider3-pro\/nextend-smart-slider3-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/SmartSlider3\/(.*).js","_N2"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:720ec9fbbd8a52ce525959a68a5310b3","is_default":0,"created_at":1724434836},"4f3a2a29-eb96-42b5-a6ba-38442123d077":{"title":"Spectra - Lottie","condition":"ultimate-addons-for-gutenberg\/ultimate-addons-for-gutenberg.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ultimate-addons-for-gutenberg\/assets\/js\/lottie.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/uagb-bodymovin.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/table-of-contents.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/tabs.min.js","UAGBLottie"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the Lottie animation doesn't load.","type":"plugin","category":"analytics","id":"plugin:138e02cf173082dfff34d8d50b5b1b5f","is_default":0,"created_at":1755608389},"be70034f-def5-4771-9b3f-662eb218da2a":{"title":"Spectra - Show Gallery Images","condition":"ultimate-addons-for-gutenberg\/ultimate-addons-for-gutenberg.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ultimate-addons-for-gutenberg\/assets\/js\/spectra-animations.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/post.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/aos.min.js","\/slick.min.js","\/imagesloaded.min.js","UAGBPostCarousel"],"summary":"Show the gallery on pageload","icon_url":"","type":"plugin","category":"analytics","id":"plugin:ca362d462a44a9622dd8542db373d3d6","is_default":0,"created_at":1738865101},"5ed91dc6-b172-4d45-8406-71689bdb1fef":{"title":"Spectra - Slider","condition":"ultimate-addons-for-gutenberg\/ultimate-addons-for-gutenberg.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/uploads\/uag-plugin\/assets\/(.*)\/uag-js-(.*).js","\/ultimate-addons-for-gutenberg\/assets\/js\/swiper-bundle.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/uagb-button-child.min.js"],"summary":"While Delay JavaScript Execution is enabled, sliders only show the first slide and do not autoplay.","icon_url":"","type":"plugin","category":null,"id":"plugin:f263043f4ed2c766c758fb139b6d50a0","is_default":0,"created_at":1738865295},"c3334c29-4160-42df-a1ce-f8aeeaee8668":{"title":"Super Socializer","condition":"super-socializer\/super_socializer.php","exclusions":["theChamp","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:660defe26748470c3a47366cd4012579","is_default":0,"created_at":1677853633},"f18b4242-fe3f-4e2b-bfc9-ac2fb3939a90":{"title":"Superfly Menu","condition":"superfly-menu\/main.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate((.*?)(.min?)?).js","\/superfly-menu\/includes\/vendor\/looks_awesome\/icon_manager\/js\/md5.js","\/superfly-menu\/includes\/vendor\/looks_awesome\/icon_manager\/js\/util.js","\/superfly-menu\/js\/public.min.js","\/superfly-menu\/js\/superfly-menu.js","window.SFM_is_mobile","var SFM_skew_disabled","var SFM_template"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the menu don't load until user interaction.","type":"plugin","category":"analytics","id":"plugin:ccb15175093bc6c437b78797f0698a7b","is_default":0,"created_at":1756121213},"1a05c00a-8562-45bc-80e8-987a4574b1c9":{"title":"Symplr Ads","condition":"symplr-ads\/symplr-plugin.php","exclusions":["\/symplr-ads\/","cdns.symplr.de"],"icon_url":"","summary":"Loads Ads right away","type":"plugin","id":"plugin:3b6d39e28a87e86c4659491e2368ff61","is_default":0,"created_at":1724442756},"858d2d7f-bdac-4d27-ba26-baa9ace96ba4":{"title":"Tabby Responsive Tabs","condition":"tabby-responsive-tabs\/tabby-responsive-tabs.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/tabby-responsive-tabs\/js\/tabby.js","RESPONSIVEUI"],"icon_url":"","summary":"Load tabs without delay","type":"plugin","id":"plugin:7d93008296bb5c7c43d4cba185ed2632","is_default":0,"created_at":1724442869},"caf3b2cc-5a9f-450a-b680-99987b342417":{"title":"tagDiv - Product Filters","condition":"td-woo\/td-woo.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/plugins\/td-composer\/legacy\/Newspaper\/js\/tagdiv_theme.min.js","\/plugins\/td-woo\/assets\/js\/tdwLoop.js","\/plugins\/td-woo\/assets\/js\/tdwFilter.js","\/plugins\/td-woo\/assets\/js\/tdwMenuCart.js","\/plugins\/td-woo\/assets\/js\/tdwFiltersList.js","tds_more_articles_on_post_pages_distance_from_top"],"summary":"When Delay JavaScript Execution is enabled, the product filters feature won't function.","icon_url":"","type":"plugin","category":null,"id":"plugin:aae992c4a586cfcfd481d64047480570","is_default":0,"created_at":1753968799},"26c21e36-9d91-4395-a1e2-3641c9ddea0b":{"title":"tagDiv - Product Variation Switches","condition":"td-woo\/td-woo.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/plugins\/td-woo\/assets\/js\/tdwVariationSwitches.js"],"summary":"When Delay JavaScript Execution is enabled, product variations don't work.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:6cd05d959fa42829c9135ffc13a9d715","is_default":0,"created_at":1754079213},"e44a5c93-bb77-4624-a121-d846905137ea":{"title":"The Plus Addons for Elementor","condition":"the-plus-addons-for-elementor-page-builder\/theplus_elementor_addon.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/theplus-addons\/(.*)"],"icon_url":"","summary":"Start animations on page load","type":"plugin","id":"plugin:2f563bbb7e92363ec3fb2989a1c7dffe","is_default":0,"created_at":1724442902},"2bbac961-b000-4802-ae97-d52472ec6750":{"title":"The Plus Addons for Elementor Premium","condition":"theplus_elementor_addon\/theplus_elementor_addon.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/plugins\/theplus_elementor_addon\/","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig"],"icon_url":"","summary":"Solve issues with sliders and tabs","type":"plugin","id":"plugin:6e127deaaeefbe57ff945b1f9e274518","is_default":0,"created_at":1724442911},"c3b5d7fd-a1e0-4aca-a0b6-405018a37266":{"title":"The Post Grid","condition":"the-post-grid\/","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","the-post-grid"],"icon_url":"","summary":"Makes the content of single post appearing immediately","type":"plugin","id":"plugin:93c3354976453458cf67f8ec0fdfce5a","is_default":0,"created_at":1724442928},"666b45e8-749c-4140-bd17-e1cd589e03ee":{"title":"ThemeREX Addons","condition":"trx_addons\/trx_addons.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/trx_addons\/js\/__scripts-full.js","\/trx_addons\/components\/cpt\/layouts\/shortcodes\/menu\/superfish.min.js","\/trx_addons\/js\/trx_addons.utils.js","\/trx_addons\/js\/tweenmax\/GSAP\/3.12.2\/gsap.min.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/NavMenu\/assets\/NavMenu.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/Counter\/assets\/odometer\/odometer.min.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/Counter\/assets\/Counter.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/AdvancedTitle\/assets\/AdvancedTitle.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/Testimonials\/assets\/Testimonials.js","\/trx_addons\/js\/trx_addons.front.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, Preloader and Popup don't work until user interaction. And the menu don't work at all.","type":"plugin","category":"analytics","id":"plugin:b9c418b47c986935a1151ab9b42f8971","is_default":0,"created_at":1767882265},"a750cada-eb58-4df4-9966-21c8a69332ba":{"title":"Thrive Architect","condition":"thrive-visual-editor\/thrive-visual-editor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-includes\/js\/masonry.min.js","\/thrive-theme\/inc\/assets\/dist\/frontend.min.js","\/thrive-theme\/thrive-dashboard\/js\/dist\/frontend.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/general.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/video.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/menu.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/pricing-table.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/toc.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/lead-generation.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, most related scripts do not work.\r\n\r\nThis backend entry existed for some time with the following exclusions (though there was no GH issue or info available about it):\r\n\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js\r\n\/jquery-migrate(.min)?.js\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/170","type":"plugin","category":"analytics","id":"plugin:75af9efe22c5cc776636266feb55adf1","is_default":0,"created_at":1741639113},"13714cde-680e-4ca4-8607-c35952d6a5f2":{"title":"Thrive Comments","condition":"thrive-comments\/thrive-comments.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-leads\/","window.TL_Const","var ml=","\/thrive-comments\/assets\/js\/","ThriveComments","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js"],"icon_url":"","type":"plugin","id":"plugin:6a72d06ca2f6a888b0d9d5ea93af2edc","is_default":0,"created_at":1677852974},"aa7ca898-499f-4f04-b419-3de199996969":{"title":"Thrive Leads","condition":"thrive-leads\/thrive-leads.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-leads\/","window.TL_Const","var ml=","\/thrive-comments\/assets\/js\/","ThriveComments","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js"],"icon_url":"","summary":"Show the form on pageload & Fix comment box not showing","type":"plugin","id":"plugin:b84d82c02cade64ade00712b9c5652aa","is_default":0,"created_at":1724443176},"9eee297a-8241-4ef2-af97-46074bd0898c":{"id":"plugin:5bb61b0559b0a3fd578315b553451327","title":"Thrive Quiz Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"is_default":0,"condition":"thrive-quiz-builder\/thrive-quiz-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c2f3ec2a-5b09-4845-aa95-84841783fbfc":{"id":"plugin:a7f3e5206abff19ca7cf142260181738","title":"Thrive Ultimatum","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-ultimatum\/","var TVE_Ult_"],"is_default":0,"condition":"thrive-ultimatum\/thrive-ultimatum.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"d48b8d2f-e071-4a30-840a-306154a115a0":{"title":"Tidio Chat","condition":"tidio-live-chat\/tidio-elements.php","exclusions":["document.tidioChatCode"],"icon_url":"","summary":"Display the chat icon.","type":"plugin","id":"plugin:f57be2014b6a489d053f8367fa6c0f9f","is_default":0,"created_at":1724442883},"cb6d33ed-7eb4-4ff9-9ad0-7fc54fbecf6f":{"id":"plugin:c9e0485ec256d4a6a8d92a98c18d76fc","title":"Toolset Blocks","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","toolsetCommonEs.fontToHead","toolsetCommonEs.styleToHead","\/toolset-blocks\/vendor\/toolset\/blocks\/public\/js\/frontend.js","\/toolset-blocks\/vendor\/toolset\/common-es\/public\/toolset-common-es-frontend.js","\/toolset-blocks\/public\/js\/views-frontend.js","\/wp-includes\/js\/underscore.min.js"],"is_default":0,"condition":"toolset-blocks\/wp-views.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"4bac6350-0925-49fb-904a-372f22fd6baf":{"title":"Top Bar Pro","condition":"topbar-pro\/topbar_pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/topbar-pro\/js\/tpbr_front.min.js","\/plugins\/topbar-pro\/js\/jquery.cookie.js"],"icon_url":"","summary":"To prevent top bar from getting overlapped with other content.","type":"plugin","id":"plugin:71beda322b37f7fc7d456822493cb972","is_default":0,"created_at":1724443222},"033486e7-0ddc-4915-a848-31504d00448e":{"title":"Twenty20 Image Before-After","condition":"twenty20\/ttwenty.php","exclusions":["\/twenty20\/assets\/js\/(.*).js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","twentytwenty-container"],"icon_url":"","type":"plugin","id":"plugin:23441bba9d3602bc932d697c7cb8aa1f","is_default":0,"created_at":1677858089},"bef2147e-2d0b-431d-ac29-5e8430c0d809":{"title":"Typing Effect","condition":"animated-typing-effect\/typingeffect.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/animated-typing-effect\/assets\/js\/typed.js","\/plugins\/animated-typing-effect\/assets\/js\/typed.fe.js"],"icon_url":"","summary":"Show the animated typing effect on page load","type":"plugin","id":"plugin:e4e1a3e63d09a28dcb20577efbcb5a48","is_default":0,"created_at":1724443336},"7675a34d-006e-4672-99d5-a81e1b8e47f9":{"title":"UberMenu","condition":"ubermenu\/ubermenu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ubermenu\/assets\/js\/ubermenu.min.js"],"icon_url":"","summary":"To make mobile menu responsive immediately without any user interaction","type":"plugin","id":"plugin:3d59cc34167a7f8123e66b627148e0b7","is_default":0,"created_at":1724443357},"8233178a-e7b3-43ce-b193-bd0d9c960933":{"title":"Ultimate Addons for Elementor","condition":"ultimate-elementor\/ultimate-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ultimate-elementor\/assets\/lib\/slick\/slick.min.js","\/ultimate-elementor\/assets\/min-js\/uael-frontend.min.js","\/ultimate-elementor\/assets\/lib\/isotope\/isotope.min.js","\/ultimate-elementor\/assets\/lib\/jquery-element-resize\/jquery_resize.min.js","\/ultimate-elementor\/assets\/lib\/fancybox\/jquery_fancybox.min.js","\/ultimate-elementor\/assets\/lib\/justifiedgallery\/justifiedgallery.min.js","\/ultimate-elementor\/assets\/min-js\/uael-posts.min.js","\/elementor-pro\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js","\/elementor\/assets\/lib\/swiper\/swiper.min.js","\/nasa-core\/assets\/js\/min\/jquery.slick.min.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig"],"icon_url":"","summary":"To make header slider be displayed correctly on page load","type":"plugin","category":"analytics","id":"plugin:86424c46157c1c7e2e1571055813beee","is_default":0,"created_at":1742911351},"dfb47495-8a46-4caa-8c2a-50b02769dcb5":{"title":"Ultimate Addons for Elementor - Fancy Text Effects","condition":"ultimate-elementor\/ultimate-elementor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js","\/plugins\/ultimate-elementor\/assets\/lib\/typed\/typed.min.js","\/plugins\/ultimate-elementor\/assets\/min-js\/uael-frontend.min.js"],"summary":"When Delay JavaScript Execution is enabled, the text effects don't work until user interaction.","icon_url":"","type":"plugin","id":"plugin:031c5b0ea0dce0a98a766aec5617b017","is_default":0,"created_at":1732107991},"42f39902-a813-4536-a561-29e2795ac097":{"title":"Ultimate Addons for Elementor - Google Maps","condition":"ultimate-elementor\/ultimate-elementor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ultimate-elementor\/assets\/lib\/slick\/slick.min.js","\/ultimate-elementor\/assets\/min-js\/uael-frontend.min.js","\/ultimate-elementor\/assets\/lib\/isotope\/isotope.min.js","\/ultimate-elementor\/assets\/lib\/jquery-element-resize\/jquery_resize.min.js","\/ultimate-elementor\/assets\/lib\/fancybox\/jquery_fancybox.min.js","\/ultimate-elementor\/assets\/lib\/justifiedgallery\/justifiedgallery.min.js","\/elementor-pro\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js","\/elementor\/assets\/lib\/swiper\/swiper.min.js","\/nasa-core\/assets\/js\/min\/jquery.slick.min.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ultimate-elementor\/assets\/js\/uael-google-map.js","maps.googleapis.com","maps.google.com"],"summary":"Fixes an issue in which the map doesn't work","icon_url":"","type":"plugin","id":"plugin:a3256509256803fa8e9ebfedf73c4843","is_default":0,"created_at":1732565293},"8bddf484-6c78-4147-a4e6-d3039904e5f6":{"title":"Ultimate Addons for Elementor - Mobile Menu","condition":"ultimate-elementor\/ultimate-elementor.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/ultimate-elementor\/assets\/js\/uael-nav-menu.js","\/ultimate-elementor\/assets\/min-js\/uael-nav-menu.min.js"],"icon_url":"","summary":"To make the mobile menu icon work as expected","type":"plugin","id":"plugin:70cfade3a7adbb54196f6acccc5a176f","is_default":0,"created_at":1724443394},"028504f7-b1cd-4318-8a6d-ce186197e89d":{"id":"plugin:0f0a91f0c454021a5ff9fc25c3ed419f","title":"Ultimate Addons for WPBakery Page Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Ultimate_VC_Addons\/assets\/"],"is_default":0,"condition":"Ultimate_VC_Addons\/Ultimate_VC_Addons.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"5754af3d-a6af-49eb-b731-bdd82f26dc4e":{"title":"Ultimate Responsive Image Slider","condition":"ultimate-responsive-image-slider\/ultimate-responsive-image-slider.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","sliderPro"],"icon_url":"","summary":"To load the slider without any user interaction","type":"plugin","id":"plugin:34db8636812bad84c8aea037c2ddc8c2","is_default":0,"created_at":1724443418},"78ae882d-ae31-4179-b677-8893814938c7":{"title":"Unlimited Elements for Elementor Premium - Slider","condition":"unlimited-elements-for-elementor-premium\/unlimited-elements-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/unlimited-elements-for-elementor-premium\/","uc_"],"icon_url":"","type":"plugin","id":"plugin:17260bc347b8c29bee0010e9ec164184","is_default":0,"created_at":1683270377},"051cbfbb-7ad2-4f06-a493-3cf423a80904":{"title":"Variation Swatches for WooCommerce","condition":"woo-variation-swatches\/woo-variation-swatches.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jquery\/ui\/","\/woo-variation-swatches\/","\/woo-variation-swatches-pro\/","underscore.min.js"],"icon_url":"","summary":"Make some elements to load","type":"plugin","id":"plugin:6717ef5673a956bc08ca4a5117065d53","is_default":0,"created_at":1724443437},"6879caba-7224-4eca-bcb2-370785b495ea":{"title":"Web Accessibility By accessiBe","condition":"accessibe\/accessiebe.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/accessibe\/","acsbJS"],"icon_url":"","summary":"To preserve the functions of the plugin","type":"plugin","id":"plugin:57597b7683e01892932083413f085134","is_default":0,"created_at":1724443688},"bd6732fe-4c2b-40a1-9035-8464057e2da5":{"title":"WooCommerce - Cart Fragments","condition":"woocommerce\/woocommerce.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js"],"icon_url":"","type":"plugin","id":"plugin:201de694c6fc28c8d580a3b2ca484218","is_default":0,"created_at":1680937567},"d044900d-07e1-4533-9516-33106efcb259":{"title":"WooCommerce - Product description","condition":"woocommerce\/woocommerce.php","exclusions":["\/plugins\/woocommerce\/assets\/js\/frontend\/single-product.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:a82644b4c9417ea3a240939a73344700","is_default":0,"created_at":1679309756},"bff953b1-2213-4666-8112-76a84a3cc207":{"title":"WooCommerce - Product Gallery","condition":"woocommerce\/woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce\/?(.*)\/assets\/js\/zoom\/jquery.zoom(.min)?.js","\/woocommerce\/?(.*)\/assets\/js\/photoswipe\/","\/woocommerce\/?(.*)\/assets\/js\/flexslider\/jquery.flexslider(.min)?.js","\/woocommerce\/?(.*)\/assets\/js\/frontend\/single-product(.min)?.js","wc_single_product_params"],"icon_url":"","type":"plugin","id":"plugin:7665868ff97c265628f376523a4f9ecc","is_default":0,"created_at":1686579689},"016e6ddf-c6e7-49ec-bd3f-2585d9e45895":{"title":"WooCommerce - Select2 library","condition":"woocommerce\/woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce\/assets\/js\/select2\/select2(.*).js"],"icon_url":"","type":"plugin","id":"plugin:4bca670bd5d55dd24b17fb0193b0891e","is_default":0,"created_at":1681459540},"b9b2c6d7-944f-4ae3-ae04-c9e2204b9dab":{"title":"WooCommerce Attribute Swatches","condition":"iconic-woo-attribute-swatches-premium\/iconic-woo-attribute-swatches.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/iconic-woo-attribute-swatches-premium\/assets\/frontend\/js\/main.min.js","\/iconic-woo-attribute-swatches-premium\/assets\/vendor\/flickity\/flickity.pkgd.min.js","iconic_was_vars"],"icon_url":"","summary":"Makes using attribute swatches not require two clicks","type":"plugin","id":"plugin:9165c768e978d6ad3f696db8c78ccbb2","is_default":0,"created_at":1724443452},"4506c5e9-7349-44c9-9967-34370c83facb":{"title":"WooCommerce Bookings","condition":"woocommerce-bookings\/woocommerce-bookings.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/woocommerce-bookings\/dist\/frontend.js","\/wp-includes\/js\/dist\/date.min.js","\/wp-includes\/js\/dist\/vendor\/moment.min.js","\/wp-includes\/js\/jquery\/ui\/datepicker.min.js","\/wp-includes\/js\/underscore.min.js","\/woocommerce\/assets\/js\/jquery-blockui\/jquery.blockUI.min.js","\/wp-includes\/js\/dist\/hooks.min.js"],"icon_url":"","summary":"Make sure the calendar is displayed correctly","type":"plugin","id":"plugin:14dec6d289b9977fa3a74116feecebcc","is_default":0,"created_at":1724443469},"d1266110-86a0-4f84-af8e-512714e53010":{"title":"WooCommerce Food Menu | Foodify","condition":"woo-food-menu\/woo-food-menu.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/plugins\/woo-food-menu\/js\/ddaccordion.js","\/plugins\/woo-food-menu\/magnific-popup\/jquery.magnific-popup.js","\/plugins\/woo-food-menu\/js\/wfm.js","\/plugins\/woo-food-menu\/js\/jquery.colorbox.js"],"summary":"When Delay JavaScript Execution is enabled, the plus icon for the food items does not appear until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:4b2fb252dd4125dc63a5a849f29b96f0","is_default":0,"created_at":1765479354},"fec9cd04-c358-45da-a1a8-1668b964016b":{"id":"plugin:456f3b849ba3b6647246aca9d7cdaed5","title":"WooCommerce Product Reviews Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","wc_product_reviews_pro","\/woocommerce-product-reviews-pro\/assets\/js\/frontend\/wc-product-reviews-pro-frontend.min.js","\/woocommerce\/assets\/js\/jquery-tiptip\/jquery.tipTip.min.js"],"is_default":0,"condition":"woocommerce-product-reviews-pro\/woocommerce-product-reviews-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"551a9399-627f-4978-9bae-5cc8e0aefc82":{"id":"plugin:c8577e74eef3b082fb6403760d53f68c","title":"WooCommerce TM Extra Product Options","type":"plugin","icon":"","exclusions":["\/woocommerce-tm-extra-product-options\/assets\/js\/epo.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/jquery\/ui\/mouse.min.js","\/wp-includes\/js\/jquery\/ui\/slider.min.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/wp-util.min.js","\/wp-includes\/js\/dist\/hooks.js","\/wp-includes\/js\/dist\/i18n.js"],"is_default":0,"condition":"woocommerce-tm-extra-product-options\/tm-woo-extra-product-options.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"779b8e37-c537-4485-a23d-a5e7477ea965":{"title":"WooGallery - Product Gallery","condition":"gallery-slider-for-woocommerce\/woo-gallery-slider.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/gallery-slider-for-woocommerce\/public\/js\/woo-gallery-slider-public.min.js"],"summary":"When Delay JavaScript Execution is enabled, the product gallery don't load until user interaction.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:1b347b79ee74db1ff3b408370465e520","is_default":0,"created_at":1744711266},"3cac4650-6a52-448e-8e48-e99a772a59a2":{"title":"WooLentor","condition":"woolentor-addons\/woolentor_addons_elementor.php","exclusions":["\/woolementor\/assets\/third-party\/slick\/slick.min.js","\/woolentor-addons","woolentor_addons"],"icon_url":"","summary":"Display the carousel without interaction.","type":"plugin","id":"plugin:c6e6cab8c80fa3fe57d609f72d2d5c56","is_default":0,"created_at":1724443648},"21af073d-d2ec-4d46-bbda-2c69f87f3f98":{"title":"Woolentor - Fix product gallery","condition":"woolentor-addons\/woolentor_addons_elementor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)",".woolentor-learg-img","\/woolentor-addons\/assets\/js\/slick.min.js","\/woolentor-addons-pro\/assets\/lib\/js\/tippy.min.js"],"icon_url":"","summary":"Display the product gallery without interaction.","type":"plugin","id":"plugin:c5315e06dfc353cd57f85a60abe4e320","is_default":0,"created_at":1724443660},"67aeb4cb-1a00-4d10-a00c-34888b4c0dba":{"title":"WooThumbs for WooCommerce","condition":"woothumbs-premium\/woothumbs-premium.php","exclusions":["\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/wp-embed.min.js","\/wp-includes\/js\/wp-util.min.js","\/woothumbs-premium\/(.*)"],"icon_url":"","summary":"To preserve the display of product variation images","type":"plugin","id":"plugin:b97b1d3f627769e1dd8305aa25af993c","is_default":0,"created_at":1724443675},"c7a14763-88d0-4344-a6af-e0a8dc5fa8d5":{"title":"WordPress Mega Menu \u2013 QuadMenu","condition":"quadmenu\/quadmenu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/quadmenu","#private-menu","#public-menu"],"icon_url":"","summary":"Show the menu on pageload","type":"plugin","id":"plugin:31b9e812a025e5750a6ef0980ee7d2db","is_default":0,"created_at":1724443871},"f699fdbd-84a7-4f24-b729-3e4a4f83a4dd":{"title":"WP Armour","condition":"wp-armour-extended\/wp-armour-extended.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/honeypot\/includes\/js\/wpa.js","\/wp-armour-extended\/includes\/js\/wpae.js","wpa_hidden_field","wpa_add_test"],"icon_url":"","summary":"To prevent marking all product reviews as spam.","type":"plugin","id":"plugin:601f8fc7d10cad1c2ec2949c0d9b1651","is_default":0,"created_at":1724443705},"697239fe-74f5-42a4-a504-97ee85bf43ff":{"title":"WP Booking Calendar","condition":"booking\/wpdev-booking.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/plugins\/booking(.*)\/_dist\/all\/_out\/wpbc_all.js","\/wp-content\/plugins\/booking(.*)\/js\/datepick\/jquery.datepick.wpbc.9.0.js","\/wp-content\/plugins\/booking(.*)\/js\/wpbc_time-selector.js","\/wp-content\/plugins\/booking(.*)\/assets\/libs\/tippy.js","\/wp-content\/plugins\/booking(.*)\/assets\/libs\/popper\/popper.js","wpbc_init__head","wpbc_url_ajax","booking_max_monthes_in_calendar","wpbc_define_tippy_popover","flex_tl_table_loading"],"icon_url":"","type":"plugin","id":"plugin:fdaf786c076fa0f17eec1e321fee0b3f","is_default":0,"created_at":1720571754},"6a28aae5-ef91-43fc-8204-92e3a25642b4":{"id":"plugin:5728f3b9856dfe37a36ab15b0a637198","title":"WP Go Maps","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","maps.googleapis.com"],"is_default":0,"condition":"wp-google-maps\/wpGoogleMaps.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c9b991d1-a653-404b-be85-e276b1814e7d":{"title":"WP Go Maps Gold","condition":"wp-google-maps-gold\/wp-google-maps-gold.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","maps.google.com\/maps\/api\/js","\/wp-includes\/js\/masonry.min.js","\/wp-google-maps-gold\/(.*)"],"summary":"Loads map on page load and fixes map not displayed after user interaction","icon_url":"","type":"plugin","category":"analytics","id":"plugin:b08baa6d8ba316accee727f2fa23efef","is_default":0,"created_at":1765279015},"1f8f9fbf-fbf0-4e3a-b77c-af0fa47e950d":{"title":"WP Go Maps Pro","condition":"wp-google-maps-pro\/wp-google-maps-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-google-maps(.*)","maps.googleapis.com","mgl_","wpgmza"],"summary":"Loads map on page load and fixes map not displayed after user interaction","icon_url":"","type":"plugin","category":"analytics","id":"plugin:8dad943d1b93e677e2290b2bc13aa36d","is_default":0,"created_at":1765278929},"41e4b98c-e63f-4800-a478-02592562322b":{"title":"WP iCal Availability","condition":"wp-ical-availability\/wp-ical-availability.php","exclusions":["\/wp-ical-availability\/js\/custom-select.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-ical-availability\/"],"icon_url":"","summary":"Fixes error when jQuery is already excluded, & Fully render the calendar on page load","type":"plugin","id":"plugin:3735ca768ede98b25795f4cb057ff4ed","is_default":0,"created_at":1724444622},"2b06c5b8-dc32-4bb0-8504-3a9f1c3a1ec0":{"title":"WP MapIt","condition":"wp-mapit\/wp_mapit.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-mapit\/wp_mapit\/js\/leaflet.js","\/wp-mapit\/wp_mapit\/js\/wp_mapit_multipin.js"],"icon_url":"","summary":"Display the map on page load","type":"plugin","id":"plugin:ba8d1c7f294a3f5b593556eb3b0bc7d9","is_default":0,"created_at":1724443719},"2039eafd-1c11-4e21-a61b-30857f291ae3":{"title":"WP Responsive Menu","condition":"wp-responsive-menu\/wp-responsive-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-responsive-menu\/(.*)"],"icon_url":"","summary":"Render the menu on page load","type":"plugin","id":"plugin:927b8bf7806f2d287559b86a0b455a59","is_default":0,"created_at":1724443736},"e06be942-cccd-4b2d-a268-06dc78f0b820":{"title":"WP Search with Algolia","condition":"wp-search-with-algolia\/algolia.php","exclusions":["\/wp-search-with-algolia\/js\/algoliasearch\/dist\/algoliasearch-lite.umd.js","\/wp-search-with-algolia\/js\/autocomplete-noconflict.js","\/wp-search-with-algolia\/js\/autocomplete.js\/dist\/autocomplete.min.js","var algolia"],"icon_url":"","summary":"Fixes the search function and its related console errors.","type":"plugin","id":"plugin:43267e659d599fbb6b42c719b49bb7a7","is_default":0,"created_at":1724443749},"4fc2a7ae-b9e6-410e-93cf-e6d1962add6a":{"title":"WP Smart Preloader","condition":"wp-smart-preloader\/wp-preloader.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-smart-preloader\/assets\/js\/wsp-main-script(.min)?.js"],"icon_url":"","summary":"Allows the preloader to work without user interaction, and resolves GTMetrix\/PageSpeed Insights test.","type":"plugin","id":"plugin:4fb90fc73fc2b5d1e37ea2dadfd3cef3","is_default":0,"created_at":1724443814},"7ecf40ce-2bcd-412c-bb01-9e71fecf6be8":{"title":"WP Store Locator","condition":"wp-store-locator\/wp-store-locator.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-store-locator\/","\/wp-includes\/js\/underscore.min.js","maps.google.com"],"icon_url":"","summary":"Show the map on page load.","type":"plugin","id":"plugin:d37bb5054a24471ca1675d9ab49d01b0","is_default":0,"created_at":1724443828},"7a1d19a2-3a48-40ab-8051-f642fc63ce2d":{"title":"WP Ultimate Post Grid","condition":"wp-ultimate-post-grid\/wp-ultimate-post-grid.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/wp-ultimate-post-grid\/dist\/public.js","\/wp-ultimate-post-grid-premium\/dist\/public-premium.js","wpupg_grid_args"],"icon_url":"","summary":"Show the dropdown selector\/filter option","type":"plugin","id":"plugin:e24341fef49bd64b89682d583218c108","is_default":0,"created_at":1724443858},"76c86163-ddf3-4113-b620-de9d5058f505":{"title":"WPBakery Page Builder","condition":"js_composer\/js_composer.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js"],"icon_url":"","summary":"Fire sliders, animations, full-width elements resizing without user interaction","type":"plugin","id":"plugin:517d7d24da9a7072ed389d0fb30374a0","is_default":0,"created_at":1724444340},"0b8ff2c0-c3cd-4ec1-b7f5-c7751de6101b":{"title":"WPBakery Page Builder - Carousel","condition":"js_composer\/js_composer.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/js_composer\/assets\/lib\/vc_carousel\/js\/vc_carousel.min.js"],"icon_url":"","summary":"Fire carousels without user interaction.","type":"plugin","id":"plugin:76336ed3f04df091e669f89d908ef2ed","is_default":0,"created_at":1724444319},"4f5e5b98-c326-4b9f-9ada-3b257862132c":{"id":"plugin:1ec7138c950c355e7af60d49c81139fc","title":"wpDataTables","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wpdatatables\/","highcharts"],"is_default":0,"condition":"wpdatatables\/wpdatatables.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"18be1b8c-0bc4-4a01-abc6-a127aff380c6":{"title":"WPForms","condition":"wpforms\/wpforms.php","exclusions":["\/wpforms-offline-forms\/assets\/js\/wpforms-offline-forms.min.js","wpforms-offline-forms-js-extra","wpformsRecaptchaLoad","\/wpforms\/assets\/lib\/jquery.validate.min.js","\/wpforms\/assets\/js\/share\/utils.min.js"],"icon_url":"","summary":"Prevents issues with redirect to Thank you page.","type":"plugin","category":"analytics","id":"plugin:c62ca58ea081c1271de8dadfa7daac69","is_default":0,"created_at":1742578021},"3ee8683e-e9d2-4c5c-b6f5-13c38827d2a2":{"title":"WPForms - Fix telephone field","condition":"wpforms\/wpforms.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wpforms\/assets\/pro\/lib\/intl-tel-input\/module.intl-tel-input.min.js","\/wpforms\/assets\/js\/frontend\/wpforms.min.js","\/wpforms-signatures\/assets\/js\/wpforms-signatures.min.js","\/wpforms-signatures\/assets\/js\/signature_pad.min.js","\/wpforms\/assets\/pro\/js\/frontend\/fields\/phone.min.js","\/wpforms\/assets\/pro\/lib\/intl-tel-input\/intlTelInputWithUtils.min.js"],"icon_url":"","summary":"Fix an issue with the telephone field in which this needs interaction to load.","type":"plugin","category":"analytics","id":"plugin:737442051c0ae65ebfbc06316a63c6ce","is_default":0,"created_at":1767635598},"138b2894-25d2-47ce-b33d-cbf1256d8f45":{"title":"WPForms - Loader GIF","condition":"wpforms\/wpforms.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wpforms-conversational-forms\/assets\/js\/conversational-forms.es5.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the loader GIF stays until user interaction.","type":"plugin","id":"plugin:03dc6ae2848dd60e1d4f4f86015c22f0","is_default":0,"created_at":1724444364},"8a3cacb6-81bd-456a-a1cc-a4025f8e5234":{"id":"plugin:0992ac952c0a05bb35e18b1d5744d346","title":"WPForms Lite","type":"plugin","icon":"","exclusions":["wpformsRecaptchaLoad","\/wpforms-offline-forms\/assets\/js\/wpforms-offline-forms.min.js","wpforms-offline-forms-js-extra"],"is_default":0,"condition":"wpforms-lite\/wpforms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"98bbd410-5b01-4244-a8eb-715765180328":{"title":"XL WooCommerce Sales Triggers","condition":"xl-woocommerce-sales-triggers\/xl-woocommerce-sales-triggers.php","exclusions":["\/xl-woocommerce-sales-triggers\/assets\/js\/wcst_combined.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:ba9e526ddb0157e69757530c6b18b714","is_default":0,"created_at":1677856813},"9d471012-ed59-486b-87ca-d52eb80c29a4":{"title":"YayCurrency Pro - Show Currency Switcher","condition":"yaycurrency-pro\/yay-currency.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/plugins\/yaycurrency-pro\/"],"summary":"Show currency switcher without user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:8cf794ac4ebf3cd651971fe30c75b26d","is_default":0,"created_at":1742845339},"bf9f9620-dd0e-4e6f-9a45-4eb78a148f42":{"title":"YITH WooCommerce Ajax Product Filter","condition":"yith-woocommerce-ajax-navigation\/init.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/yith-woocommerce-ajax-navigation\/assets\/js\/yith-wcan-shortcodes.min.js"],"icon_url":"","summary":"Display product filters on mobile without interaction","type":"plugin","id":"plugin:58663fc781232169e865f6fe7cf1afaa","is_default":0,"created_at":1724444671},"b053279d-e07c-438c-bb3e-3a1f4f5d7c5e":{"title":"YITH WooCommerce AJAX Product Filter Premium","condition":"yith-woocommerce-ajax-product-filter-premium\/init.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/yith-woocommerce-ajax-product-filter-premium\/assets\/js\/yith-wcan-shortcodes.min.js"],"icon_url":"","summary":"Display product filters on mobile without interaction","type":"plugin","id":"plugin:68b637fd247e40c8e135e4771d739b07","is_default":0,"created_at":1724444677},"62056165-8bd9-4ff0-b21f-e4ed0ae45fae":{"title":"YITH WooCommerce Points and Rewards","condition":"yith-woocommerce-points-and-rewards-premium\/init.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/yith-woocommerce-points-and-rewards-premium\/assets\/js\/frontend.min.js","\/woo-variation-swatches-pro\/assets\/js\/add-to-cart-variation.min.js"],"icon_url":"","summary":"Display rewards points notification without interaction","type":"plugin","id":"plugin:4acc87d4eb72c86cdea76d180b61a098","is_default":0,"created_at":1724444693},"106395a7-bee9-41d9-8bd5-0e8ad84b478e":{"title":"YITH WooCommerce Wishlist","condition":"yith-woocommerce-wishlist-premium\/init.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/plugins\/yith-woocommerce-wishlist-premium\/assets\/js\/add-to-wishlist-gutenberg.min.js","\/plugins\/yith-woocommerce-wishlist-premium\/assets\/js\/dist\/components\/add-to-wishlist\/index.js","\/plugins\/yith-woocommerce-wishlist-premium\/assets\/js\/jquery.selectBox.min.js","\/plugins\/yith-woocommerce-wishlist-premium\/assets\/js\/jquery.yith-wcwl.min.js","\/plugins\/yith-woocommerce-wishlist-premium\/plugin-fw\/dist\/lapilli-ui\/components\/index.js","\/plugins\/yith-woocommerce-wishlist-premium\/plugin-fw\/dist\/lapilli-ui\/date\/index.js","\/plugins\/yith-woocommerce-wishlist-premium\/plugin-fw\/dist\/lapilli-ui\/styles\/index.js","\/wp-includes\/js\/dist\/vendor\/react-dom.min.js","\/wp-includes\/js\/dist\/vendor\/react.min.js","\/wp-includes\/js\/dist\/vendor\/lodash.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/url.min.js","wp\\.apiFetch\\.createRootURLMiddleware\\(","window\\.lodash"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the add to wishlist button does not show or work.\r\n\r\nThis allowed the add to wishlist button work while Load JavaScript Deferred was also enabled, but enabling Load JavaScript Deferred caused some console errors, which were may be resolved using these exclusions:\r\n\r\n\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)\r\n\/wp-includes\/js\/dist\/date.min.js\r\n\/wp-includes\/js\/dist\/vendor\/moment.min.js","type":"plugin","category":"analytics","id":"plugin:dfc96a6440c1b9f9bdcb5806af7cc2f9","is_default":0,"created_at":1771882657},"d94dbbf3-bcab-4e47-9fbb-6b3a7cf92787":{"title":"Yotpo Social Reviews for Woocommerce","condition":"yotpo-social-reviews-for-woocommerce\/wc_yotpo.php","exclusions":["\/yotpo-social-reviews-for-woocommerce\/assets\/js\/headerScript.js"],"icon_url":"","type":"plugin","id":"plugin:45ab742b3fccbd04d7bc973c8582be87","is_default":0,"created_at":1680686421},"51dccf53-5cc7-4283-9ab1-01d34c6cce22":{"title":"Zoho SalesIQ","condition":"zoho-salesiq\/index.php","exclusions":["zoho.salesiq"],"icon_url":"","summary":"Display chat without interaction","type":"plugin","id":"plugin:b96c3865575068aac82c973eb3e3c52a","is_default":0,"created_at":1724444708}},"themes":{"9aeea459-91d3-44b6-8a26-b883dca8b402":{"title":"Agensy - Load page without User Interaction","condition":"agensy","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/agensy\/js\/scripts.js","\/themes\/agensy\/js\/scripts-single.js","\/themes\/agensy\/js\/wow.min.js","\/themes\/agensy\/js\/TweenMax.min.js","\/themes\/agensy\/js\/swiper.min.js","\/plugins\/visualcomposer\/assets\/lib\/bower\/isotope\/dist\/isotope.pkgd.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Load page without user interaction.","type":"theme","id":"theme:7ab7dfeb0db9c0c74c020be318c2e6d9","is_default":0,"created_at":1724424755},"9c623554-5834-4669-9e96-1b894c1939b2":{"title":"Andaman","condition":"andaman","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/andaman\/assets\/js\/","\/wp-andaman-plugins\/shortcodes\/vc_extend\/"],"icon_url":"","summary":"Unstuck the page loader (only use when jQuery is already excluded).","type":"theme","id":"theme:0193ea55fce2ada93b262f2824008c0f","is_default":0,"created_at":1724424778},"7374c5a5-69f8-460f-b44f-dee884a824cd":{"title":"Artale","condition":"artale","exclusions":["\/artale-elementor\/assets\/js\/modulobox.js","\/artale-elementor\/assets\/js\/artale-elementor.js","\/artale\/js\/jquery-stellar.js","\/artale\/js\/core\/artale-plugins.js","\/artale\/js\/core\/artale-custom.js","var loader"],"icon_url":"","summary":"Fixes the page loader (not closing) and display the main menu.","type":"theme","id":"theme:24cbda63f1b898ade5562ab4ec6d97a5","is_default":0,"created_at":1724424807},"23b01203-2a70-4394-9326-d59824def2d7":{"title":"Ashe Pro Premium","condition":"ashe-pro-premium","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ashe-pro-premium\/"],"icon_url":"","summary":"Display mobile header without user interaction","type":"theme","id":"theme:4791da3cbbd1ed86253a087f0287aeb4","is_default":0,"created_at":1724426464},"03a9cc62-c167-447d-beb2-65c76c96b056":{"title":"Astra","condition":"astra","exclusions":["\/astra\/assets\/js\/minified\/frontend.min.js","replace\\(\/woocommerce-no-js\/,"],"icon_url":"","type":"theme","id":"theme:3cce5f3eaf76e098ba8e28f7bbba3f92","is_default":0,"created_at":1712608792},"2a2b54cb-8e1d-49d2-bfca-93eee231e470":{"title":"Astra - Carousel","condition":"astra","exclusions":["var astra","\/astra\/assets\/js\/minified\/style.min.js"],"icon_url":"","summary":"Load carousel","type":"theme","id":"theme:72a8d63e59c10bdf512a62b862d143a7","is_default":0,"created_at":1724426844},"ff22ab98-07e0-4faa-8994-4c811410acec":{"title":"Astra Pro - Reveal Effect option","condition":"astra","exclusions":["\/plugins\/astra-addon\/assets\/js\/minified\/blog-reveal.min.js","\/plugins\/astra-addon\/assets\/js\/minified\/reveal-effect.min.js"],"summary":"Show elements without interaction","icon_url":"","type":"theme","category":"analytics","id":"theme:10f23506c0da1886b9594093cbf3463e","is_default":0,"created_at":1758832506},"7783361f-66fc-4d95-a054-4e9545bb5b48":{"title":"Auteur","condition":"g5plus-auteur","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/g5plus-auteur\/assets\/js\/core.min.js","\/g5plus-auteur\/assets\/vendors\/","\/auteur-framework\/libs\/smart-framework\/assets\/vendors\/perfect-scrollbar\/js\/perfect-scrollbar.jquery.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Fire the slider on pageload","type":"theme","id":"theme:6207fe478e269e7547bda70a46607a49","is_default":0,"created_at":1724427467},"4c618038-8fc7-4d48-8d41-a32da14e5c1e":{"title":"AutoTrader","condition":"autotrader","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/autotrader\/(.*).js"],"icon_url":"","type":"theme","id":"theme:046dfeee2b77390c53e0e7f93b6a3792","is_default":0,"created_at":1679736741},"18f04f23-35a0-4c45-8cb6-a91d57ca1790":{"id":"theme:835da12f43373029659f766920e81b47","title":"Avada - Animations & mobile-specific actions","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/fusion-scripts\/(.*).js","window.off_canvas_","\/plugins\/fusion-builder\/","\/plugins\/fusion-core\/","\/Avada\/includes\/"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"90135867-1b95-498b-80d6-f5dbf2f6b318":{"title":"Avada - FAQ shortcode","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/fusion-core\/js\/min\/avada-faqs.js"],"icon_url":"","summary":"Displays content created with the FAQ shortcode","type":"theme","id":"theme:b084708c80d8582546e5430219aa4670","is_default":0,"created_at":1724427150},"d23b5bb1-1d7f-4109-bf69-b20a2be2d337":{"title":"Avada - Fusion carousel","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.carouFredSel.js","\/includes\/lib\/assets\/min\/js\/general\/fusion-carousel.js","fusionCarouselVars"],"icon_url":"","summary":"Display carousel on pageload","type":"theme","id":"theme:5e7a2248e1a53d9bb27b187deb541248","is_default":0,"created_at":1724427016},"98dfa8c1-e72a-4cef-a0b2-8f0c322490fc":{"title":"Avada - Fusion form","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-form.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-form-logics.js","\/includes\/lib\/assets\/min\/js\/library\/cssua.js","\/includes\/lib\/assets\/min\/js\/general\/fusion.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js"],"icon_url":"","summary":"To allow submitting forms","type":"theme","id":"theme:f16fb109027f4994a7649a8b1663e6f7","is_default":0,"created_at":1724427132},"026801fa-af67-47ba-b966-347693f0585f":{"title":"Avada - Fusion grid gallery","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-gallery.js","\/includes\/lib\/assets\/min\/js\/library\/imagesLoaded.js","\/includes\/lib\/assets\/min\/js\/library\/isotope.js","\/includes\/lib\/assets\/min\/js\/library\/packery.js","\/includes\/lib\/assets\/min\/js\/library\/lazysizes.js"],"icon_url":"","summary":"Display fusion grid gallery without delay","type":"theme","id":"theme:33f50696d353d8bd4eb59ff6e8f44c97","is_default":0,"created_at":1724426998},"c8349314-15a3-481e-973b-e4d936e4420e":{"title":"Avada - Fusion slider","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-core\/js\/min\/avada-fusion-slider.js","\/Avada\/includes\/"],"icon_url":"","summary":"Display fusion slider without delay","type":"theme","id":"theme:56fa9993a573540c83eda9c49fae5e3c","is_default":0,"created_at":1724426978},"7a04bc85-0fec-4487-ae05-bb2e5d8d0420":{"title":"Avada - Load Portfolio on pageload","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/library\/packery.js","\/library\/isotope.js","\/library\/imagesLoaded.js","\/general\/fusion-lightbox.js","\/fusion-core\/js\/min\/avada-portfolio.js"],"icon_url":"","summary":"Load Portfolio on pageload","type":"theme","id":"theme:c3f0ed4d94499b68c77d95db37d1d399","is_default":0,"created_at":1724427228},"55bd510c-78aa-49d5-8304-8be2ee2ab0da":{"title":"Avada - Mobile menu","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/assets\/min\/js\/general\/avada-menu.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.easing.js"],"icon_url":"","summary":"Load mobile menu scripts without a delay","type":"theme","id":"theme:2189c1c769d65cfc2182e4822847071b","is_default":0,"created_at":1724427273},"ddf00672-c35c-4b68-aeca-925e68bf12b2":{"title":"Avada - OffCanvas","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/fusion-scripts\/(.*).min.js","window.off_canvas_"],"icon_url":"","summary":"Load Off Canvas pop-ups without user interaction","type":"theme","id":"theme:97a185f08af70c39c7e221faab0f73eb","is_default":0,"created_at":1724427179},"17544cc3-9d3a-4611-bc5d-44d04e2786fa":{"title":"Avada - Show the Portfolio grid on page load","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/includes\/lib\/assets\/min\/js\/library\/imagesLoaded.js","\/includes\/lib\/assets\/min\/js\/library\/isotope.js","\/includes\/lib\/assets\/min\/js\/library\/lazysizes.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js","\/includes\/lib\/assets\/min\/js\/library\/packery.js","\/fusion-core\/js\/min\/avada-portfolio.js","avadaPortfolioVars"],"icon_url":"","type":"theme","id":"theme:9d1a9b0c2ca20fca764a82f197b962fd","is_default":0,"created_at":1696601823},"c6c3347c-14e0-4766-afa5-df33a47f5a5a":{"title":"Avada - Sticky menu","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Avada\/assets\/min\/js\/general\/avada-menu.js"],"icon_url":"","summary":"Fix sticky menu","type":"theme","id":"theme:3ff44421b404c5efffa25e78e479e4ea","is_default":0,"created_at":1724427248},"232596c1-6a6a-4fe8-a5c3-a60fa74a9456":{"id":"theme:0d727d80bb132f17c737e55883fe4be0","title":"Avada - WooCommerce product gallery","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/assets\/min\/js\/general\/avada-woo-product-images.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.flexslider.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"95ece7e4-3b19-45e5-aa28-14f833c9afca":{"title":"Avesa","condition":"avesa","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/avesa\/js\/main.js","\/avesa\/js\/isotope.js","\/sw_core\/js\/slick.min.js","\/avesa\/js\/bootstrap-datetimepicker.min.js","\/avesa\/js\/bootstrap.min.js"],"icon_url":"","summary":"Display images on product pages.","type":"theme","id":"theme:aad8bfcc594eec02e3b0d635198dee5e","is_default":0,"created_at":1724427449},"88f58a9c-8312-4a4c-8183-b3192eedbe17":{"title":"Bambino - Show Header on Page Load","condition":"bambino","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/themes\/bambino\/framework\/js\/header.misc.js","\/plugins\/bold-page-builder\/content_elements\/bt_bb_section\/bt_bb_elements.js","\/plugins\/bold-page-builder\/content_elements_misc\/js\/content_elements.js","maps.googleapis.com","maps.google.com"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the header doesn't show until interaction with the page.\r\n\r\nNotes:\r\n\r\n\u2022 The Bold Page Builder plugin is made by the same party as the theme and they work closely together\r\n\r\n\u2022 Google maps exclusions are included because console errors happen otherwise. It's okay to include these exclusions because the Bold Page Builder is applying the code related to Google Maps and related to the error:\r\nhttps:\/\/imagizer.imageshack.com\/a\/img924\/1328\/UCCTbc.png","type":"theme","category":"analytics","id":"theme:768bafdd8382fa03d858f585230c3c51","is_default":0,"created_at":1744389947},"f2bfe477-4e45-4e52-a7d9-4d0ba3a92258":{"title":"Besa","condition":"besa","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/besa\/js\/"],"icon_url":"","summary":"Trigger animations and makes the mobile menu immediately responsive","type":"theme","id":"theme:c238e89523c46ca28b08e401f42f6ccc","is_default":0,"created_at":1724427619},"bd94908c-8138-4995-986b-47ec66494bdd":{"title":"BeTheme","condition":"betheme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/betheme\/","mfn","\/wp-includes\/js\/jquery\/ui\/tabs.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js"],"icon_url":"","summary":"Trigger animations and makes the mobile menu immediately responsive","type":"theme","id":"theme:b99156eb9eeb357c0a70bd3bda6861cc","is_default":0,"created_at":1724427590},"190d2f1a-72a6-40ca-b08a-5c7ee7b0a6a5":{"title":"Bosa Online Education - Fixes animations and preloader","condition":"bosa-online-education","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/bosa\/assets\/js\/jquery.slicknav.min.js","\/bosa\/assets\/slick\/slick.min.js","\/bosa\/assets\/js\/navigation.js","\/bosa\/assets\/js\/custom.min.js","\/bosa\/assets\/js\/theia-sticky-sidebar.min.js"],"icon_url":"","summary":"Fix for the loading animation and displaying mobile menu.","type":"theme","id":"theme:5430bf7b83c83a3687b3b7b437e961b0","is_default":0,"created_at":1724427748},"7ae0e798-ea3b-43c6-b741-a46801b6e6ba":{"title":"Bricks - Load Content","condition":"bricks","exclusions":["\/themes\/bricks\/assets\/js\/bricks.min.js","\/themes\/bricks\/assets\/js\/libs\/splide.min.js"],"summary":"When Delay JavaScript Execution is enabled, videos that should autoplay don't play and image carousels don't load until user interaction.","icon_url":"","type":"theme","category":"analytics","id":"theme:c0d4df9616ecbbeb395b520043817e84","is_default":0,"created_at":1755805528},"6fb2b9d7-6ecc-4260-999c-938fbebdbf01":{"title":"Bridge","condition":"bridge","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/bridge-creative\/bridge\/js\/","\/wp-includes\/js\/","\/themes\/bridge\/js\/plugins\/abstractBaseClass.js"],"icon_url":"","summary":"This was created some time ago and with no notes, so hard to know why it was created.\r\n\r\nIn an update, I needed to add the following exclusion to prevent a console error:\r\n\/themes\/bridge\/js\/plugins\/abstractBaseClass.js\r\n\r\nIt should be noted that this uses the old regex for excluding jQuery, which appears to accidentally match and exclude over 20 other scripts as well:\r\n\r\nhttps:\/\/mega.wp-rocket.me\/bridge\/\r\nhttps:\/\/regex101.com\/r\/hstZ0q\/1","type":"theme","id":"theme:de8504b73ea228d0ea9bbce69752092e","is_default":0,"created_at":1730991059},"1dd63427-b4c9-4596-b952-ac711e3637f9":{"title":"Bridge - Load elements without user interaction","condition":"bridge","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/hoverIntent.min.js","\/wp-includes\/js\/mediaelement\/wp-mediaelement.min.js","\/wp-includes\/js\/mediaelement\/mediaelement-migrate.min.js","\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js","\/wp-content\/themes\/bridge\/js\/default.min.js","\/wp-content\/themes\/bridge\/js\/plugins.js","\/wp-content\/themes\/bridge\/js\/default_dynamic.js","\/wp-content\/themes\/bridge\/js\/jquery.touchSwipe.min.js","\/themes\/bridge\/js\/default_dynamic_callback.js","\/themes\/bridge\/js\/plugins\/doubletaptogo.js","\/themes\/bridge\/js\/plugins\/abstractBaseClass.js","\/themes\/bridge\/js\/plugins\/mixitup.js","\/themes\/bridge\/js\/plugins\/jquery.appear.js","\/themes\/bridge\/js\/plugins\/jquery.prettyPhoto.js","\/themes\/bridge\/js\/plugins\/jquery.flexslider-min.js","\/themes\/bridge\/js\/plugins\/jquery.fitvids.js","\/themes\/bridge\/js\/plugins\/jquery.carouFredSel-(.*).min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, some elements don't load without user interaction.\r\n\r\nUpdate: Needed to add some additional exclusions to prevent console errors and allow the mobile menu to work (mobile menu works without any exclusions, but enabling this one-click exclusion caused the menu to not work before these additional exclusions were added):\r\n\r\n\/themes\/bridge\/js\/default_dynamic_callback.js\r\n\/themes\/bridge\/js\/plugins\/doubletaptogo.js\r\n\/themes\/bridge\/js\/plugins\/abstractBaseClass.js\r\n\/themes\/bridge\/js\/plugins\/mixitup.js\r\n\/themes\/bridge\/js\/plugins\/jquery.appear.js\r\n\/themes\/bridge\/js\/plugins\/jquery.prettyPhoto.js\r\n\/themes\/bridge\/js\/plugins\/jquery.flexslider-min.js\r\n\/themes\/bridge\/js\/plugins\/jquery.fitvids.js\r\n\/themes\/bridge\/js\/plugins\/jquery.carouFredSel-(.*).min.js\r\n\/wp-includes\/js\/hoverIntent.min.js\r\n\/wp-includes\/js\/mediaelement\/wp-mediaelement.min.js\r\n\/wp-includes\/js\/mediaelement\/mediaelement-migrate.min.js\r\n\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js","type":"theme","id":"theme:ad9b810efd365ad9a27987d2912b94cd","is_default":0,"created_at":1730991278},"e1afeb67-fd2b-404c-84e3-a6927765d1a3":{"title":"BuddyBoss","condition":"buddyboss-theme","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-includes\/js\/masonry.min.js","\/wp-includes\/js\/underscore.min.js","\/plugins\/buddyboss-platform\/bp-core\/js\/vendor\/magnific-popup.js","\/plugins\/buddyboss-platform\/bp-templates\/bp-nouveau\/js\/buddypress-nouveau.min.js","\/themes\/buddyboss-theme\/assets\/js\/main.js","\/themes\/buddyboss-theme\/assets\/js\/main.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/menu.js","\/themes\/buddyboss-theme\/assets\/js\/plugins\/bb-woocommerce.js","\/themes\/buddyboss-theme\/assets\/js\/plugins\/elementor.js","\/themes\/buddyboss-theme\/assets\/js\/plugins\/learndash.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/fitvids.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/jssocials.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/mousewheel.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/panelslider.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/progressbar.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/select2.full.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/slick.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/sticky-kit.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/validate.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, content won't load until user interaction. \r\n\r\nAlso fixes issue where menu popups don't work.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/173","type":"theme","category":"analytics","id":"theme:be1f26c456c46c5089be61f5e4d4428c","is_default":0,"created_at":1755263118},"65698b6b-85dd-41ef-8fd7-718f1e983dba":{"title":"Car Dealer","condition":"cardealer","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/(.*)","\/cardealer\/js\/(.*)"],"icon_url":"","summary":"Fix slider and form console errors","type":"theme","id":"theme:b1111424fff61af8d1e152dcdd6810f6","is_default":0,"created_at":1724428045},"3927d724-5a0a-402b-a838-858d30b54ea9":{"title":"Cardea - Show Page Content on Load","condition":"cardea-wp","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/cardea-wp\/js\/main.js","\/themes\/cardea-wp\/js\/jquery.sticky.js","\/themes\/cardea-wp\/js\/jquery.fitvids.js","\/themes\/cardea-wp\/js\/jquery.smartmenus.min.js"],"icon_url":"","summary":"Show content on page load","type":"theme","id":"theme:d65d1a8303b0c7508278884520e4bec7","is_default":0,"created_at":1724428028},"087fb457-a09d-4140-84bd-c9bc1e8195b7":{"title":"CheerUp","condition":"cheerup","exclusions":["\/cheerup\/js\/jquery.sticky-sidebar.js","\/cheerup\/js\/object-fit-images.js","\/cheerup\/js\/jquery.fitvids.js","\/cheerup\/js\/jquery.mfp-lightbox.js","\/cheerup\/js\/ie-polyfills.js","\/cheerup\/js\/theme.js","\/wp-includes\/js\/imagesloaded.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/jquery\/jquery.min.js"],"icon_url":"","summary":"Fix an issue with the links in the menu.","type":"theme","id":"theme:13bcf562f45afb245dc4f76fecfba6d6","is_default":0,"created_at":1724428063},"eb86aedb-91e6-480c-b76c-756ac1da41be":{"title":"Clover","condition":"clover-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/clover-theme\/"],"icon_url":"","summary":"Load the hamburger menu.","type":"theme","id":"theme:89372f3d9321ae09c94488592084da29","is_default":0,"created_at":1724428083},"6e90b649-5736-497f-9bc6-515900cfea8a":{"title":"Divi 4 - Animations","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI"],"summary":"When Delay JavaScript Execution is enabled, some content does not load until user interaction.","icon_url":"","type":"theme","category":"analytics","id":"theme:f232d8d7c7a5ac7f86040ebad08c295c","is_default":0,"created_at":1773241287},"70916c43-4e02-4932-b6aa-91a1815bc755":{"title":"Divi 4 - Background video","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/Divi\/js\/custom.unified.js","\/js\/mediaelement\/(.*)","mejs"],"summary":"Play video background on page load","icon_url":"","type":"theme","category":"analytics","id":"theme:713fcea72b704a77a2b01e65e3b9b4be","is_default":0,"created_at":1773241342},"08531785-9818-4e30-903e-564637a2ad7a":{"title":"Divi 4 - Counter module","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js"],"summary":"Compatibility with the Number Counter module","icon_url":"","type":"theme","category":"analytics","id":"theme:5cde03e83c588cd8c4e7490a2e84a7ef","is_default":0,"created_at":1773240138},"1d63dd7c-7bc7-4629-b03d-0437e177af32":{"title":"Divi 4 - Load Animated Elements on Page Load","condition":"Divi","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/salvattore.js"],"summary":"When Delay JavaScript Execution is enabled, some content does not load until user interaction.","icon_url":"","type":"theme","category":"analytics","id":"theme:422470ae1a30f4f0fd99a8f15751ed92","is_default":0,"created_at":1773240205},"b996762a-84ef-440d-a089-73a187936fbf":{"title":"Divi 4 - Mobile menu","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js"],"summary":"Avoids a double tap to open the mobile menu","icon_url":"","type":"theme","category":"analytics","id":"theme:8105de36585b460f035e378abaf066ad","is_default":0,"created_at":1773241393},"ae096e1e-9c36-46ad-a3d1-c26ea507276b":{"title":"Divi 4 - Sticky elements","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/sticky-elements.js","var DIVI"],"summary":"Enable sticky elements on page load.","icon_url":"","type":"theme","category":"analytics","id":"theme:c5dbde7698f50b02f3991975280e1f99","is_default":0,"created_at":1773241365},"349f31f0-dd10-41d3-b0a4-9c5df64879f8":{"title":"Divi 4 - Sticky menu","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/js\/jquery\/jquery-migrate.min.js","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/magnific-popup.js","jqueryParams","firstHeader"],"summary":"Hide sticky menu on page load.\r\n\r\nAvoid white flash when using this trick to prevent Divi's own flashing: \r\n\r\nelm.style.display","icon_url":"","type":"theme","category":"analytics","id":"theme:577daf839a4d88bba14d1462db2da031","is_default":0,"created_at":1773241380},"59563458-5f04-4959-b3e2-53e49e169d67":{"title":"Divi 4 - WooCommerce Single Product Images","condition":"Divi","exclusions":["\/Divi\/js\/scripts.min.js"],"summary":"When Delay JavaScript Execution is enabled, some content does not load until user interaction.","icon_url":"","type":"theme","category":"analytics","id":"theme:338556af431f9e85d226bbbf8d635cf1","is_default":0,"created_at":1773241317},"6426539e-4e43-4fef-ab5a-3eb7b2a8b057":{"title":"Eikra","condition":"eikra","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/eikra\/assets\/js\/","EikraObj"],"icon_url":"","summary":"Fixes preloader not closing.","type":"theme","id":"theme:55d2581ad975eb6325bc97fc3d3b0cb8","is_default":0,"created_at":1724429672},"59020bd6-069f-4f2d-afa2-fbdefa03211c":{"title":"Ekko","condition":"ekko","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ekko\/"],"icon_url":"","summary":"Fixes preloader (blank page) not closing.","type":"theme","id":"theme:2c06f4a1949f8ba4e77042a47674fd9e","is_default":0,"created_at":1724429886},"d82f5cdd-c5d3-4596-94dc-1e25aaff2083":{"title":"Elessi","condition":"elessi-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elessi-theme\/assets\/js\/min\/functions.min.js","\/elessi-theme\/assets\/js\/min\/main.min.js"],"icon_url":"","type":"theme","id":"theme:d5d2b7fda7b8a2b5b91d430f7602e230","is_default":0,"created_at":1679737773},"f0587c21-54d0-429d-8efe-18a93dacb18d":{"id":"theme:5fc04cc678cb54567aedb51027933002","title":"Enfold","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/dynamic_avia\/avia-footer-scripts-(.*).js","var avia_is_mobile"],"is_default":0,"condition":"enfold","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c93ee1ee-3956-4278-9ee9-1a0968753e86":{"title":"Enfold - Fix hamburger menu","condition":"enfold","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/enfold\/js\/avia-snippet-hamburger-menu.js","\/enfold\/js\/avia.js","\/enfold\/js\/shortcodes.js","\/enfold\/js\/waypoints\/waypoints.js"],"icon_url":"","type":"theme","id":"theme:2b0c22c5169b94c2eabb125d18915246","is_default":0,"created_at":1715090218},"cc0550cb-918e-419d-b4f2-1809cf666dbb":{"title":"Enfold - LayerSlider","condition":"enfold","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","layerslider"],"icon_url":"","summary":"Loads the slider without user interaction when using Enfold's Layerslider implementation","type":"theme","id":"theme:eb759a03d0ca292c948f09d004a2963f","is_default":0,"created_at":1724430516},"ec883654-4f63-4fae-a3ef-923dcbc2426d":{"title":"Enfold - Shortcodes","condition":"enfold","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/enfold\/js\/avia(.min)?.js","\/enfold\/js\/shortcodes(.min)?.js","\/enfold\/config-templatebuilder\/avia-shortcodes\/","\/enfold\/js\/avia-compat(.min)?.js","\/enfold\/js\/waypoints\/waypoints.min.js","\/enfold\/js\/avia-snippet-(.*).js","\/enfold\/js\/avia-js(.min)?.js","\/enfold\/js\/aviapopup\/jquery.magnific-popup(.min)?.js"],"icon_url":"","type":"theme","id":"theme:072fc4077d7071791d774d6ddbf5dc2a","is_default":0,"created_at":1712954619},"fe3546f0-be3e-4173-8992-a7f6f203b82f":{"title":"Envision","condition":"envision","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/envision\/lib\/js\/app.min.js","var CloudFwOp"],"is_default":1,"icon_url":"","type":"theme","id":"theme:fc5f7d69b646ed95835badc0fc23bc11","created_at":1679737494},"45b060fe-fd61-48c5-8cc9-694b5b6c103f":{"title":"Erios - Fix Mobile Menu","condition":"erios","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/themes\/erios\/assets\/js\/libs\/mlpushmenu.js","\/wp-content\/themes\/erios\/assets\/js\/libs\/modernizr.custom.js","\/wp-content\/themes\/erios\/assets\/js\/libs\/classie.js"],"summary":"Fixes an issue in which the mobile menu doesn't appear when clicking the hamburger button","icon_url":"","type":"theme","category":null,"id":"theme:06c4f62aa28eb5d407096ea7c27939ec","is_default":0,"created_at":1738617553},"d997b942-19de-4710-9c81-79d3c65cbd76":{"title":"Ewebot","condition":"ewebot","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/gt3-themes-core\/","\/uploads\/gt3-assets\/js\/(.*)","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Fire animations on pageload.\r\n\r\nAllow the page to load without interaction.\r\n\r\n\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js\r\n\/jquery-migrate(.min)?.js\r\n\/wp-content\/themes\/ewebot\/dist\/js\/theme.js","type":"theme","id":"theme:047f009f2a1f4cdf2088c46be47e385b","is_default":0,"created_at":1724430887},"53d29aec-8ae4-4273-b748-f5bd52dfe177":{"title":"Farvis","condition":"farvis","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/farvis\/"],"icon_url":"","summary":"Fire animations and layout rendering on pageload.","type":"theme","id":"theme:26bff2f3a6ff6347d35edf5c77a35687","is_default":0,"created_at":1724430981},"fb01246b-a5f8-4021-b514-c02cf55e80bd":{"title":"Flatsome","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/flatsome\/assets\/js\/flatsome.js","\/flatsome\/assets\/libs\/packery.pkgd.min.js","\/flatsome\/assets\/js\/woocommerce.js","\/flatsome\/assets\/js\/extensions\/flatsome-variation-images-frontend.js"],"icon_url":"","summary":"Avoid homepage slider delay. Allow zoom on the product image gallery.","type":"theme","category":"analytics","id":"theme:26fb1cf80f074ca199d8a7e94c5fc796","is_default":0,"created_at":1735226064},"4d65dc12-9ce7-4171-94a7-9821fd95240e":{"title":"Flatsome - Google map","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","maps.googleapis.com","google.maps.LatLng","\/wp-includes\/js\/hoverIntent.min.js"],"icon_url":"","summary":"Show Google Map on page load","type":"theme","id":"theme:28a6f8b3319c107a34603be0f01a4bcf","is_default":0,"created_at":1724431100},"890e15b6-c66b-4a9e-9b7d-55417df94916":{"title":"Flatsome - Images","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/flatsome\/inc\/integrations\/wp-rocket\/flatsome-wp-rocket.js","\/flatsome\/assets\/js\/flatsome.js","\/flatsome\/inc\/extensions\/flatsome-lazy-load\/flatsome-lazy-load.js","\/wp-includes\/js\/hoverIntent.min.js"],"icon_url":"","summary":"Allow images to load immediately.","type":"theme","id":"theme:f2d60aad9f2f5395e3e145cf8f8ab165","is_default":0,"created_at":1725978870},"ee1a892b-c906-4e35-8684-827919f64bef":{"title":"Foxiz - Load Slider","condition":"foxiz","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/foxiz\/assets\/js\/rbswiper.min.js","\/plugins\/foxiz-core\/assets\/core.js","\/themes\/foxiz\/assets\/js\/global.js","\/themes\/foxiz\/assets\/js\/jquery.ui.totop.min.js"],"summary":"When Delay JavaScript Execution is enabled, the slider doesn't load until there is a user interaction. These exclusions make the slider load immediately.","icon_url":"","type":"theme","id":"theme:ee6e7f08495a961a7bcbfe4e0a283b6e","is_default":0,"created_at":1725039417},"cb54d070-8ee0-4c35-9fa9-b2bac73ccf39":{"title":"Frida","condition":"frida","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/frida\/"],"icon_url":"","summary":"Display images without user interaction and avoid issues with simpleLighbox images","type":"theme","id":"theme:109ddf56796a5133e12279f3daa5ff62","is_default":0,"created_at":1724431195},"435fe79f-47ba-422e-aca6-cea566f6b8a1":{"title":"Gardena Theme","condition":"gardena","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/gardena\/"],"icon_url":"","summary":"Fixes the error message for Largest contentful paint in PageSpeed report, when feature is enabled.","type":"theme","id":"theme:993e6f0fc44b9e55c0a565b84a449340","is_default":0,"created_at":1724431464},"e5428837-d182-44c0-9b8d-66e225e78a42":{"title":"GeneratePress - Back To Top Button","condition":"generatepress","exclusions":["\/themes\/generatepress\/assets\/js\/back-to-top.min.js","generate-back-to-top-js-before"],"summary":"The back to top button will not show or work without these exclusions.","icon_url":"","type":"theme","category":null,"id":"theme:92eb3fe27f152d99a70b3ff7fa51b50a","is_default":0,"created_at":1746819839},"9e78539a-03d9-442b-ab94-dd3b7a9658e4":{"title":"GeneratePress - Mobile menu","condition":"generatepress","exclusions":["\/generatepress\/assets\/js\/menu.min.js","generatepressMenu","\/gp-premium\/menu-plus\/functions\/js\/offside.min.js"],"icon_url":"","summary":"Fixes the mobile menu requiring a double touch, if touching the mobile menu is the first interaction of a visitor with the page.","type":"theme","id":"theme:80a330247d61d729fcd78dc01de6ed2f","is_default":0,"created_at":1724431524},"7d2a6472-83d4-4620-8b9e-ff8872b98c1c":{"title":"Genesis sample","condition":"genesis-sample-develop","exclusions":["\/jquery\/jquery.min.js","\/jquery\/jquery-migrate.min.js","\/js\/hoverIntent.min.js","\/genesis\/lib\/js\/menu\/","\/genesis\/lib\/js\/skip-links.min.js","\/custom-genesis\/js\/custom.js","var c = document.body.classList"],"icon_url":"","summary":"https:\/\/github.com\/wp-media\/delay-javascript-loading\/issues\/33#issuecomment-1201266660 , display mobile menu with DJS","type":"theme","id":"theme:7c14d7a05ad7f4f39b719e015a4723ff","is_default":0,"created_at":1727089078},"02d47d01-56f5-4801-b319-cff1707dd59d":{"title":"Harmuny - Modern WordPress Blog Theme","condition":"harmuny","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/harmuny\/"],"icon_url":"","summary":"Load slideshow without user interaction.","type":"theme","id":"theme:1ff9662c2a3e3221052cbe229feed18c","is_default":0,"created_at":1724427976},"6373bbb2-877c-4075-b6e4-7c58d686b25c":{"title":"HealthFirst","condition":"healthfirst","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/hoverIntent.min.js","\/wp-content\/plugins\/healthfirst-core\/assets\/js\/healthfirst-core.min.js","\/wp-content\/plugins\/healthfirst-core\/assets\/plugins\/modernizr\/modernizr.js","\/wp-content\/plugins\/healthfirst-core\/assets\/plugins\/perfect-scrollbar\/perfect-scrollbar.jquery.min.js","\/wp-content\/themes\/healthfirst\/assets\/js\/main.min.js","\/wp-content\/themes\/healthfirst\/assets\/plugins\/waitforimages\/jquery.waitforimages.js"],"summary":"When Delay JavaScript Execution is enabled, there are console errors.","icon_url":"","type":"theme","id":"theme:882ee30ccc8ed2b36e93c7b6e2c4b98e","is_default":0,"created_at":1724431542},"2c72e7e6-cb77-44e9-af87-d5c42ae6db52":{"title":"Honor - WPBakery fix","condition":"honor","exclusions":["\/honor\/js\/__scripts.js","HONOR_STORAGE","\/js_composer\/"],"icon_url":"","summary":"Only required if used with WPBakery plugin to fix some dependencies issues","type":"theme","id":"theme:9f228373ff4d172655dbf5cb3b1bc23a","is_default":0,"created_at":1724431564},"9309d1d3-1035-4a2c-8ced-075bc3ff9957":{"title":"HotelMaster","condition":"hotelmaster","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/hotelmaster\/javascript\/gdlr-script.js","\/hotelmaster\/plugins\/dl-menu\/modernizr.custom.js","\/hotelmaster\/plugins\/dl-menu\/jquery.dlmenu.js","\/hotelmaster\/plugins\/superfish\/js\/superfish.js","\/hotelmaster\/plugins\/jquery.easing.js"],"icon_url":"","summary":"Fixes double touch required to use the menu on mobile.","type":"theme","id":"theme:978eaddad3b1047e479407b6d92197aa","is_default":0,"created_at":1724431621},"4a09f745-cbb1-47c8-b50a-c8014d5d1335":{"title":"HotelMaster - Blog","condition":"hotelmaster","exclusions":["\/wp-includes\/js\/masonry.min.js","\/gp-premium\/blog\/functions\/js\/scripts.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Loads the blog","type":"theme","id":"theme:e813a548bceac6765a1cdf2316f1a6ab","is_default":0,"created_at":1724431587},"f2d8f704-ec68-4278-9ca2-885daa0c1ce5":{"title":"HotelMaster - Masonry","condition":"hotelmaster","exclusions":["\/gp-premium\/menu-plus\/functions\/js\/offside.min.js","offSide"],"icon_url":"","summary":"Display blog archive posts in a masonry layout without user interaction.","type":"theme","id":"theme:398a264e302e42640553681e8759cd07","is_default":0,"created_at":1724431607},"d62a5509-f311-4ec4-a27b-d808842cebc0":{"title":"Impreza - Image Popups","condition":"Impreza","exclusions":["\/themes\/Impreza\/common\/js\/vendor\/magnific-popup.js","\/uploads\/us-assets\/kuechenstudio-reissig.de.js","magnificPopup"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the image popups do not work correctly.","type":"theme","category":"analytics","id":"theme:76e58bbda03bb74e93ec1d97828501b0","is_default":0,"created_at":1747237800},"92b2e258-1f44-41c1-b1bd-f117f61ee49d":{"title":"Jannah Theme - Fix masonry grid","condition":"jannah","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/masonry.min.js","\/wp-includes\/js\/jquery\/jquery.masonry.min.js","tie-"],"icon_url":"","summary":"Fix masonry grid","type":"theme","id":"theme:35f7f183089309f52046377ca65e905a","is_default":0,"created_at":1724432477},"df52436c-53d6-461a-b81a-cd0b21680524":{"title":"JNews","condition":"jnews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/jnews\/assets\/js\/","jnews","jfla"],"icon_url":"","summary":"Toggle the search box on mobile.\r\n\r\nLoad images without interaction:\r\n\r\n\/jnews\/assets\/js\/modernizr-custom.js","type":"theme","id":"theme:5d90e451984f9d894b1aabb0d00f30a2","is_default":0,"created_at":1724432551},"87ed69a2-3295-4fad-a82e-eeb02925a5dc":{"title":"Jobify","condition":"jobify","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jobify\/js\/jobify.min.js","\/jobify\/js\/select2.full.min.js"],"icon_url":"","summary":"Prevent white space on the mobile header before user interaction","type":"theme","id":"theme:592006aa4562a6915e344e5e2a09e5ee","is_default":0,"created_at":1724432575},"28a0b1ea-8d2f-4931-a48a-166b8df8a773":{"title":"JOYN","condition":"joyn","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/swift-framework\/includes\/page-builder\/frontend-assets\/js\/lib\/modernizr-custom.js","\/swift-framework\/includes\/page-builder\/frontend-assets\/js\/spb-functions.min.js","\/swift-framework\/includes\/swift-slider\/assets\/js\/swift-slider.min.js","\/swift-framework\/public\/js\/lib\/imagesloaded.pkgd.min.js","\/joyn\/js\/owl.carousel.min.js","\/joyn\/js\/theme-scripts.js","\/joyn\/js\/functions.js"],"icon_url":"","summary":"Prevent the page from not loading on mobile devices","type":"theme","id":"theme:c395470ad2d4d681836cd942bbb03120","is_default":0,"created_at":1724432590},"542be60a-2346-4740-9a41-8a580c4f013c":{"title":"Juno Toys","condition":"junotoys","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/junotoys\/fw\/js\/core.init.js","\/junotoys\/fw\/js\/core.utils.js","\/junotoys\/fw\/js\/superfish.js","\/junotoys\/fw\/js\/swiper\/swiper.js","\/trx_utils\/shortcodes\/theme.shortcodes.js","\/wp-includes\/js\/jquery\/ui\/(.*)"],"icon_url":"","summary":"Display the swiper\/carousel products","type":"theme","id":"theme:2acab38e8356d36355bb81d931e7fba4","is_default":0,"created_at":1724432608},"06167710-10c7-446e-a08b-ce676e444102":{"title":"Jupiter","condition":"jupiter","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jupiter\/","\/wp-includes\/js\/underscore.min.js","WebFont.load"],"icon_url":"","type":"theme","id":"theme:89c5c30498c2989611f9044be006197c","is_default":0,"created_at":1679738430},"5d042e1f-7e62-4ec4-ba31-30d396004522":{"title":"JupiterX","condition":"jupiterx","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jupiterx\/(.*).js","\/wp-includes\/js\/underscore.min.js","WebFont.load"],"icon_url":"","type":"theme","id":"theme:b06632962a4948d4944fd8d79ffbfceb","is_default":0,"created_at":1679737312},"c4b030ea-66a1-4729-85bf-a484e373a316":{"title":"Kadence","condition":"kadence","exclusions":["\/kadence\/assets\/js\/navigation.min.js","mobile_menu_breakpoint","kadenceConfig"],"icon_url":"","summary":"Avoid double click to open mobile menu and search button","type":"theme","id":"theme:4b7907ee68218db279648da9bf7102d1","is_default":0,"created_at":1724432769},"20c605b4-3e3a-4bb0-a5e5-a08e2cb0f31f":{"title":"Kalium","condition":"kalium","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/kalium\/assets\/js\/main.min.js","mobile_menu_breakpoint","var _k"],"icon_url":"","summary":"Fixes the hamburger menu.","type":"theme","id":"theme:1fcb99a1ab06e1e36635365ed3e59ce5","is_default":0,"created_at":1724432784},"e1e04a7d-635a-4e28-83d9-e345ce40e354":{"title":"Kava","condition":"kava","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/kava\/assets\/js\/theme-script.js"],"icon_url":"","summary":"Fixes the header color issue.","type":"theme","id":"theme:359d67efbf530c998245225dd3245a88","is_default":0,"created_at":1724432796},"e833c36e-ee89-4924-b608-3f28327c2f85":{"title":"Lay","condition":"lay","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/backbone.min.js","\/wp-includes\/js\/underscore.min.js","\/lay\/","\/laytheme-carousel\/","window.laytheme"],"icon_url":"","summary":"Start showing content on pageload.","type":"theme","id":"theme:7c718c6da874ea6e4b27c6d70bc4e7e8","is_default":0,"created_at":1724432836},"2df2ef47-a833-4711-ba54-48dc62586f37":{"title":"LazaNews","condition":"lazanews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jquery.custom.js"],"icon_url":"","summary":"Prevents the page preloading animation from being stuck until user interaction.","type":"theme","id":"theme:85d9922ac61ed833fd047a67029df8e5","is_default":0,"created_at":1724432810},"9443304a-34e9-4700-a03a-5f8f62f83ed1":{"title":"Listeo","condition":"listeo","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/listeo\/js\/"],"icon_url":"","summary":"Render the page on pageload","type":"theme","id":"theme:db7da585545001f5ae614a2810f08f3a","is_default":0,"created_at":1724432849},"77afa73c-c4a8-42a8-aaee-43f6a761364e":{"title":"ListingPro","condition":"listingpro","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/listingpro\/assets\/lib\/jquerym.menu\/js\/jquery.mmenu.min.all.js","\/listingpro\/assets\/lib\/Magnific-Popup-master\/jquery.magnific-popup.min.js","\/listingpro\/assets\/js\/select2.full.min.js","\/listingpro\/assets\/js\/jquery.city-autocomplete.js","\/listingpro\/assets\/js\/chosen.jquery.min.js","\/listingpro\/assets\/lib\/bootstrap\/js\/bootstrap-slider.js","\/listingpro\/assets\/js\/jquery-ui.js","\/listingpro\/assets\/js\/mapbox.js","\/listingpro\/assets\/js\/main.js","\/listingpro\/assets\/js\/leaflet.markercluster.js","maps"],"icon_url":"","summary":"Display the map and avoid console errors.","type":"theme","id":"theme:0b365e43dfc65d2b1b70fac6510c7c9c","is_default":0,"created_at":1724432862},"164e73e5-0603-42de-9ae6-837d822636a3":{"title":"Lycka - Load Menu","condition":"lycka","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/themes\/lycka\/framework\/js\/header.misc.js"],"summary":"When Delay JavaScript Execution is enabled, the menu does not appear until interaction with the page.","icon_url":"","type":"theme","category":null,"id":"theme:16544487fefeb35553d3abb52856b73c","is_default":0,"created_at":1754072604},"47de96e2-016b-4a8b-a707-286242f0077b":{"title":"Magbook - Show Slider","condition":"magbook","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/themes\/magbook\/js\/flexslider-setting.js","\/wp-content\/themes\/magbook\/js\/jquery.flexslider-min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the slider doesn't show until user interaction.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/180","type":"theme","category":"analytics","id":"theme:a1be05a01927e084ea948e15017ee3d3","is_default":0,"created_at":1743179866},"01b369b5-b578-4314-8e95-40b67a41d75a":{"title":"Master Study","condition":"masterstudy","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/masterstudy\/assets\/js\/custom.js","\/masterstudy\/assets\/vendors\/jquery.fancybox.min.js","\/masterstudy\/assets\/js\/select2.full.min.js"],"icon_url":"","summary":"Prevents the page preloading animation from being stuck until user interaction.","type":"theme","id":"theme:0ee224c20e4ef7d546733d933db598f2","is_default":0,"created_at":1724432905},"6b000cc7-d33b-4109-9c39-6119a5d81cde":{"title":"Maya","condition":"maya","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/maya\/js\/jquery.mobilemenu.js","\/maya\/js\/jquery.custom.js","\/maya\/core\/includes\/js\/jquery.tipsy.js"],"icon_url":"","summary":"Convert the mobile menu into a selector form on mobile devices without user interaction.","type":"theme","id":"theme:719fe28004fcdd81a820602924aa8074","is_default":0,"created_at":1724432964},"ef3c76d6-1041-473d-81ea-a5a6e8c86735":{"title":"MH Magazine","condition":"mh-magazine","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/mh-magazine\/"],"icon_url":"","summary":"Display menus on page load.","type":"theme","id":"theme:2a0cd6efc2f46be69de61712729a2ec9","is_default":0,"created_at":1724433164},"9cbb2777-5524-43b8-af36-692b27452c0d":{"title":"Minimog","condition":"minimog","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/minimog\/"],"icon_url":"","summary":"Display menus on page load.","type":"theme","id":"theme:61c0c235042359ee7d2a9035e79a7da2","is_default":0,"created_at":1724433180},"7eb81c74-8062-4a6c-bf66-b7c5bc160141":{"title":"Moozo Elementor","condition":"moozo-elementor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/moozo-elementor\/assets\/js\/countdown.js","\/moozo-elementor\/assets\/vendor\/countdown\/countdown.min.js"],"icon_url":"","summary":"Display the countdown timer without interaction.","type":"theme","id":"theme:2ddb538c8e6b6c766fffd0d5c861fd82","is_default":0,"created_at":1724433254},"e90b7bfa-9ff6-4e1a-bf29-6207d55fdd39":{"title":"Motor","condition":"motor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/motor\/js\/"],"icon_url":"","type":"theme","id":"theme:b33538179f5661a86cbe327a1793e199","is_default":0,"created_at":1683973354},"d4607fcd-296f-4235-ba8e-2be508181877":{"title":"Movedo - Autoplay Video","condition":"movedo","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/themes\/movedo\/js\/main.js","\/themes\/movedo\/js\/plugins.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, autoplay videos don't play until user interaction with page.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/181","type":"theme","category":"analytics","id":"theme:08e2673c5f3e451c281eba504f57290e","is_default":0,"created_at":1743424232},"445e625a-f955-41fa-84de-65d9ea19be07":{"title":"My Listing","condition":"my-listing","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/my-listing\/assets\/","\/wp-includes\/js\/dist\/vendor\/moment.min.js","maps.googleapis.com","MyListing","_Explore_Settings"],"icon_url":"","summary":"Show the content on page load:","type":"theme","id":"theme:afacb777229ddf5cabceacc64948057d","is_default":0,"created_at":1724433267},"677d9967-ca17-4602-8f63-4c3937f7a5c2":{"title":"Nature One PRO - Nivo Slider","condition":"natureone-pro","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","nivoSlider"],"summary":"When Delay JavaScript Execution is enabled, the Nivo Slider doesn't load until user interaction.","icon_url":"","type":"theme","id":"theme:53ae74a161c1588f5539b6883825d3ee","is_default":0,"created_at":1729860774},"00b8cd2d-2781-4fbb-ac5d-00750ba94ac9":{"title":"Neve - Mobile menu","condition":"neve","exclusions":["\/neve\/assets\/js\/build\/modern\/frontend.js"],"icon_url":"","summary":"Prevents the need for a double tap on the mobile menu.","type":"theme","id":"theme:5ae731cc06dd9284f8172675a6fe81ab","is_default":0,"created_at":1724432677},"483abc54-f1fc-47dc-bfc1-a269c7d1c849":{"title":"Newspaper - Images","condition":"Newspaper","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","tagdiv_theme.min.js","tdBlocksArray","\/wp-includes\/js\/underscore.min.js","\/td-cloud-library\/assets\/js\/","\/npm\/slick-carousel@1.8.1\/slick\/slick.min.js","tdb-gallery-wrap","tdBlocksArray","tdb_"],"icon_url":"","summary":"Loads images without delay","type":"theme","id":"theme:649ff22527bac2b1c8e0115cd3851d53","is_default":0,"created_at":1724432710},"50db8d14-d421-4237-be14-a6f7b5c11ec5":{"title":"Newspaper - Slider & YouTube","condition":"Newspaper","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","tagdiv_theme.min.js","tdBlocksArray","tdb_globals","td_youtube_list_ids","iosSlider","\/td-cloud-library\/assets\/js\/js_files_for_front.min.js","\/wp-includes\/js\/underscore.min.js","\/td-cloud-library\/assets\/js\/","\/npm\/slick-carousel@1.8.1\/slick\/slick.min.js","tdb-gallery-wrap","tdBlocksArray","tdb_"],"icon_url":"","summary":"Render the slider and Youtube videos on pageload","type":"theme","id":"theme:7e2eeee57ae458c5959342eda6526bf1","is_default":0,"created_at":1724432700},"514f4c30-2b67-4648-960e-dfe1cc401ca5":{"title":"Niva","condition":"niva","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/niva\/js\/","\/sweetthemes-framework\/js\/","mt_typed"],"icon_url":"","summary":"Trigger the page loader and the typewriter","type":"theme","id":"theme:c4838f73a344b829ed626635e210dcf4","is_default":0,"created_at":1724432724},"e67ee504-c3b1-455e-88ab-1fae8c830652":{"title":"OceanWP","condition":"oceanwp","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/oceanwp\/"],"icon_url":"","summary":"Fixes some non-function breaking browser console errors.","type":"theme","id":"theme:db37af4b7d12695d37d9256313a5f37a","is_default":0,"created_at":1724432755},"e44e240a-8765-4f4f-b67e-d54e4b727506":{"title":"OceanWP - Mobile menu","condition":"oceanwp","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ocean-side-panel\/assets\/js\/side-panel.min.js","\/oceanwp\/assets\/js\/theme.vanilla.min.js"],"icon_url":"","summary":"Avoids double tap on mobile menu","type":"theme","id":"theme:9babbcd52b2ce558d299a06cd1130a11","is_default":0,"created_at":1724432740},"51ac8cbb-6018-45a5-917f-6ce48bc7fc67":{"title":"Ohio","condition":"ohio","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/ohio\/assets\/js\/main.min.js","\/themes\/ohio\/assets\/js\/libs\/jquery.mega-menu.min.js","\/themes\/ohio\/assets\/js\/libs\/typed.min.js","\/themes\/ohio\/assets\/js\/libs\/isotope.pkgd.min.js"],"summary":"Load the mobile menu on page load without user interaction\r\nLoad dynamic typing text without user interaction","icon_url":"","type":"theme","category":"analytics","id":"theme:4ec96adb9cc39333f3d2024b28f2503f","is_default":0,"created_at":1769790675},"69a88ebb-b958-4ef0-be66-a1ceab623773":{"title":"Pelicula Theme","condition":"pelicula","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/qi-blocks\/assets\/js\/plugins\/fslightbox\/fslightbox.min.js","\/plugins\/qi-blocks\/inc\/masonry\/assets\/plugins\/isotope.pkgd.min.js","\/plugins\/qi-blocks\/inc\/masonry\/assets\/plugins\/packery-mode.pkgd.min.js","\/pelicula\/","\/pelicula-core\/assets\/","\/qi-addons-for-elementor\/","\/wp-includes\/js\/hoverIntent.min.js"],"icon_url":"","summary":"Allow the Pelicula theme's Galleries to show on the page without user interaction\r\nFix broken animated title effects so they animate properly.\r\nFix testimonial not showing until user interaction.\r\nFix Modal not triggering when clicked.","type":"theme","category":"analytics","id":"theme:56bb7d07cce915321f3ed45b09b9e9e5","is_default":0,"created_at":1742986303},"897b0100-958d-4a02-b6b2-1e753e9869f4":{"title":"PenNews","condition":"pennews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pennews\/js\/script.min.js","\/pennews\/js\/script.lib.min.js"],"icon_url":"","summary":"When the theme's lazyload functionality is used, lazyload images without interaction.","type":"theme","id":"theme:02811fa00bc1471bb5be0457ce0ee005","is_default":0,"created_at":1724433732},"edd3ba03-e0fd-4b6e-911b-60b29f3471bf":{"title":"Pharmacy Mentor","condition":"pharmacymentor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/pharmacymentor\/"],"icon_url":"","summary":"Load slider and animations on pageload.","type":"theme","id":"theme:3188aaf1ef2c39937450f2a14ebb1174","is_default":0,"created_at":1724442943},"449a1b7e-5c4b-43d6-8a33-195254bfb184":{"title":"Phlox Pro","condition":"phlox-pro","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/phlox-pro\/"],"summary":"When Delay JavaScript Execution is enabled, we have a white page until user interaction.\r\nNo preload or transition page to deactivate on the theme setting.","icon_url":"","type":"theme","category":null,"id":"theme:9cf68c2d2861c6cc6ad4ab1c3c8480eb","is_default":0,"created_at":1756733274},"725415ff-cc76-45cc-a131-3170e5aa30fc":{"title":"Porto","condition":"porto","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/","\/porto\/js\/theme.js","\/porto\/js\/theme.min.js"],"icon_url":"","summary":"Load animations","type":"theme","id":"theme:8493f398f200c8dffe60d46439dd3360","is_default":0,"created_at":1724442964},"a4f6d50c-2ee9-40d6-b13e-502bda0ab18e":{"title":"Porto - Load Product Archive Listing","condition":"porto","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/themes\/porto\/js\/skeleton.min.js","\/porto\/js\/theme.js"],"summary":"Load Porto product archive listing in shop pages without user interaction","icon_url":"","type":"theme","category":null,"id":"theme:1315f133b62df536d891c6a9c93ef4a7","is_default":0,"created_at":1746008976},"2c19bcec-f3ff-4873-bfd7-db6bc0f6433c":{"title":"Porto - Owl Carousel","condition":"porto","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-includes\/js\/jquery\/ui\/","\/porto\/js\/theme(|.min).js","\/porto\/js\/libs\/owl.carousel(|.min).js","\/porto\/js\/theme-async(|.min).js","\/prettyPhoto\/jquery.prettyPhoto(|.min).js"],"icon_url":"","summary":"Load Owl Carousel without interaction","type":"theme","id":"theme:f34f5199fb7fca78852cd3fb7758f178","is_default":0,"created_at":1724442974},"f7779ea7-3b3a-441a-8fe7-44e3ee9350d8":{"title":"Porto - Product Gallery","condition":"porto","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/jquery\/ui\/","\/porto\/js\/theme(|.min).js","\/porto\/js\/libs\/owl.carousel(|.min).js","\/porto\/js\/theme-async(|.min).js","\/porto\/js\/woocommerce-theme.js","\/wp-includes\/js\/imagesloaded.min.js","\/wp-includes\/js\/underscore.min.js","\/woocommerce\/assets\/js\/jquery-cookie\/jquery.cookie.min.js"],"summary":"When Delay JavaScript Execution is enabled, the product gallery dots navigation don't load until user interaction.","icon_url":"","type":"theme","category":null,"id":"theme:ddb85625312fec570f0a85e1e11fbba4","is_default":0,"created_at":1746791452},"5b11ec89-1cb2-4793-8b77-79e917e810a0":{"title":"Pro Theme - Fix menu and accordions","condition":"pro","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/pro\/cornerstone\/assets\/js\/site\/cs-classic.(.*).js"],"icon_url":"","summary":"Fix menu and accordions","type":"theme","id":"theme:8f30d70dd2d9a0386445aef8fdd534a9","is_default":0,"created_at":1724443035},"31347ccb-f69e-4cd3-bd47-b80ce14ac76e":{"title":"ProPhoto","condition":"prophoto7","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/prophoto7\/js\/bundle.front.js","\/wp-includes\/js\/underscore.min.js","PROPHOTO"],"icon_url":"","summary":"Fire animations","type":"theme","id":"theme:a5836a56c4472fade4dc6ebfe2281554","is_default":0,"created_at":1724443049},"a8208c04-865c-49aa-ab96-41e378d391c8":{"title":"Publisher","condition":"publisher","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/publisher\/js\/"],"icon_url":"","summary":"Make the mobile menu expend from the first click and the cookie notice to show on pageload.","type":"theme","id":"theme:32c73be0cb175da278c8e2af0811b0d1","is_default":0,"created_at":1724443063},"a0d69f3d-1356-4a1d-a600-2f2f788b8a9a":{"title":"REHub","condition":"rehub-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/rehub-theme\/js\/custom_floatpanel.js"],"icon_url":"","summary":"Fix the sticky menu","type":"theme","id":"theme:321af1febb74f488cf911380893739b2","is_default":0,"created_at":1724434339},"8b74bbe5-7f32-42df-908f-78c99a8cad82":{"title":"Rey","condition":"rey","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/rey\/scripts-(.*).js","\/rey-core\/assets\/js\/"],"icon_url":"","summary":"Fix the sticky menu on mobile and animations","type":"theme","id":"theme:e46567cd0f3ec9b37e7230dc87eac367","is_default":0,"created_at":1724434354},"5c9115d3-bcbd-49d6-8feb-4880d2b82bfe":{"title":"Rife Free","condition":"rife-free","exclusions":["\/rife-free\/js\/script.min.js","\/rife-free\/js\/isotope.pkgd.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","var reJS"],"icon_url":"","type":"theme","id":"theme:74a449954de79625eccc6750e87af8f6","is_default":0,"created_at":1679738107},"6542b2fd-1f91-4862-aa18-11eecc02faaf":{"title":"Roisin","condition":"roisin","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/themes\/roisin\/assets\/js\/main.min.js","\/plugins\/roisin-core\/assets\/js\/roisin-core.min.js","\/wp-includes\/js\/hoverIntent.min.js"],"icon_url":"","type":"theme","id":"theme:8f38fe58034772931110930b91cb6797","is_default":0,"created_at":1685964523},"5a192ad9-d150-4aa0-8efc-d68131cb7a37":{"title":"Sahifa - Mobile Menu","condition":"sahifa","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/themes\/sahifa\/js\/ilightbox.packed.js","\/translate_a\/element.js"],"icon_url":"","summary":"Allow mobile menu slideout to work for Safari mobile","type":"theme","id":"theme:06ebe49f4c1e5b04cece831f8bb198a3","is_default":0,"created_at":1724434427},"7ae9d978-d63c-4a58-beb3-418bebb5b23c":{"title":"Salient","condition":"salient","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/salient\/","winW > bodyW"],"icon_url":"","summary":"Close mobile menu when using anchor links & Show the menu and animations on page load","type":"theme","id":"theme:b3e12d57ac23897be1bb2c673e3fc761","is_default":0,"created_at":1724434525},"35aaa6c5-4a37-4161-b504-fb3ebc4b1148":{"title":"Salient - Nectar slider","condition":"salient","exclusions":["\/salient-nectar-slider\/js\/nectar-slider.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","summary":"load the images without interaction","type":"theme","id":"theme:d612db1dd8dc76faa6a36a9ebfd336dc","is_default":0,"created_at":1724434498},"84c95206-3e59-4eb3-a0c9-e2231a1c0a48":{"title":"SEO Lounge","condition":"seolounge","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js","\/seolounge\/js\/radiantthemes-custom.js","\/seolounge\/js\/radiantthemes-core.min.js"],"icon_url":"","summary":"Avoid the loader being delayed so the page can be displayed before user interaction.","type":"theme","id":"theme:3d72b779d9c4ba6b51cc5b245b141433","is_default":0,"created_at":1724434624},"cd44aa56-088a-40dd-bf1e-f835efa68626":{"title":"Shoptimizer","condition":"shoptimizer","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shoptimizer\/assets\/js\/lazyload-bg.js","\/shoptimizer\/assets\/js\/main.min.js"],"icon_url":"","summary":"Shows background images and fix the double tap on mobile menu","type":"theme","id":"theme:6c32b43f4da639e5901574fac6b7d387","is_default":0,"created_at":1724434579},"d2c48a48-430a-4eea-bc05-99b66f1f6a7b":{"title":"SmartMag","condition":"smart-mag","exclusions":["\/smart-mag\/js\/lazyload.js"],"icon_url":"","summary":"Fixes the images not being displayed because of the theme's Lazyload.","type":"theme","id":"theme:23d6b7878bd0087addb067db3fa39864","is_default":0,"created_at":1724434887},"dd0d9133-ef17-4dac-b174-9f25d535838f":{"title":"Soledad","condition":"soledad","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/soledad\/js\/main.js","\/soledad\/js\/more-post.js","\/soledad\/js\/libs-script.min.js"],"icon_url":"","summary":"Fixes the images not being displayed because of the theme's Lazyload.","type":"theme","id":"theme:d3f78b26c2d11c99230171cc6378d06e","is_default":0,"created_at":1724434902},"3b85dd6e-9534-477e-9b15-940d0e155c8d":{"title":"Spacious - Mobile Menu","condition":"spacious","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/spacious\/js\/navigation.js"],"icon_url":"","summary":"Fixes mobile menu functionality.","type":"theme","id":"theme:d423c1f002b10b8682ee24d616b19c9c","is_default":0,"created_at":1724434916},"d657dc56-5c04-439a-8987-401f89a65bf9":{"title":"Stockholm","condition":"stockholm","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/stockholm\/js\/"],"icon_url":"","summary":"To show the logo and prevent JavaScript errors","type":"theme","id":"theme:fcfff492e00727b63cf5dff9f59bc2a4","is_default":0,"created_at":1724443889},"121f9b1b-d3cd-4dde-915e-0b348abf6687":{"title":"Storefront","condition":"storefront","exclusions":["\/storefront\/assets\/js\/navigation.min.js"],"icon_url":"","summary":"Reveals menu from the first click.\r\n\r\nSome elements on the page (Link sliders) are showed on page load:\r\n\r\n\/storefront\/assets\/js\/homepage.min.js","type":"theme","id":"theme:f0dca7e4eaedf573d4664be249845942","is_default":0,"created_at":1724443926},"41cfc83f-ff02-4a35-a3b7-e92db213b224":{"title":"StreamTube","condition":"streamtube","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/streamtube\/","\/streamtube-core\/"],"icon_url":"","summary":"Fixes the display video error on the mobile version.","type":"theme","id":"theme:9772ccddd470688f6bc6aee86e34d29b","is_default":0,"created_at":1724444002},"c31366fe-9045-4767-a405-52a11e08b82e":{"title":"Sydney - Load elements on page load","condition":"sydney-pro-ii","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/themes\/sydney-pro-ii\/js\/scripts.js","\/wp-content\/themes\/sydney-pro-ii\/js\/functions.min.js","\/wp-content\/themes\/sydney-pro-ii\/js\/elementor.js","\/wp-content\/themes\/sydney-pro-ii\/js\/hero-slider.js","\/wp-content\/plugins\/sydney-toolbox\/js\/main.js"],"icon_url":"","summary":"Load elements on pages without user interaction","type":"theme","id":"theme:1fb15693856451537e331adeaf2c7d6f","is_default":0,"created_at":1724442744},"aec0a548-4c6b-400a-80ed-19a49e0faef0":{"title":"The7","condition":"dt-the7","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","loader-removed","\/Ultimate_VC_Addons\/assets\/min-js\/","\/dt-the7\/","\/js_composer\/","underscore.min.js"],"icon_url":"","summary":"Remove the loader and fire animations","type":"theme","category":"analytics","id":"theme:7934c689fd20e30b6bfc69bb9d46cb63","is_default":0,"created_at":1754635920},"538354ff-d69f-40be-b0cc-df3790599dd2":{"title":"TheGem","condition":"thegem","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thegem\/js\/","gemSettings","thegemSlideshow","tgpLazyItemsOptions"],"icon_url":"","summary":"To show the logo, slider, animations and prevent JavaScript errors","type":"theme","id":"theme:153c54fe73897da838ce39152b1db5a8","is_default":0,"created_at":1724444019},"84d95a79-270c-4223-b459-bb49c6acfaf1":{"title":"Theme Electiman - Mobile Menu","condition":"electiman","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/electiman\/assets\/js\/navigation.js","\/themes\/electiman\/assets\/js\/theme-pluginjs.js","\/themes\/electiman\/assets\/js\/theme.js","\/themes\/electiman\/assets\/js\/slick.min.js","\/themes\/electiman\/venobox\/venobox.min.js","\/themes\/electiman\/assets\/js\/owl.carousel.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","type":"theme","id":"theme:a59c888391c869ed4f3417c02d71fe15","is_default":0,"created_at":1702923332},"3a59bf59-4fe5-4690-8ab7-33e6a976e2e3":{"title":"Thrive Theme Builder","condition":"thrive-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/(.*).js","TVE_Event_Manager_Registered_Callbacks","ThriveGlobal","TCB_Front","TL_Front","TVE_Ult","thrive-","thrive_","tve_","tve-"],"icon_url":"","type":"theme","id":"theme:7492fc8f8a90ad7ef680d9c560da2b0f","is_default":0,"created_at":1710767440},"68f2de3b-e2b8-4edf-b82f-93fd7834c65f":{"title":"Total","condition":"Total","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Total\/assets\/js\/total.min.js"],"icon_url":"","summary":"Allow the search to work","type":"theme","id":"theme:96b0141273eabab320119c467cdcaf17","is_default":0,"created_at":1724444033},"6dc1cb35-6b50-4da0-9834-dddf169edaa6":{"title":"Townhub","condition":"townhub","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/townhub-add-ons\/assets\/js\/(.*)","\/wp-includes\/js\/dist\/vendor\/react.js","\/wp-includes\/js\/dist\/vendor\/react-dom.js"],"icon_url":"","summary":"Prevent add-ons from breaking the site","type":"theme","id":"theme:7c37c885d7fecf788f635734f99e8610","is_default":0,"created_at":1724444055},"f484f86b-e316-4871-9322-dee3925349fe":{"title":"Travel Monster - Owl Carousel","condition":"travel-monster","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/plugins\/wp-travel-engine\/assets\/lib\/owl-carousel(.*)\/owl.carousel(|.min).js","var isRtl"],"icon_url":"","summary":"Load Owl Carousel Slider without user interaction","type":"theme","id":"theme:d3e8da87b3affd399205438fbc8a4f05","is_default":0,"created_at":1724444075},"3ec96c3f-a6bf-4748-9b7e-78864bd24add":{"title":"uDesign - Mobile Menu","condition":"u-design","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/themes\/u-design\/assets\/js\/theme.min.js","\/wp-content\/themes\/u-design\/framework\/assets\/js\/framework.min.js","\/wp-content\/themes\/u-design\/framework\/assets\/js\/framework-async.min.js"],"icon_url":"","summary":"Keep the mobile menu working properly.","type":"theme","id":"theme:31ce70b0a02f8720a86d993816676943","is_default":0,"created_at":1724444158},"cb523239-27cc-461e-973d-c984a83223ac":{"title":"uDesign - Show Page Content on Load","condition":"u-design","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/themes\/u-design\/assets\/js\/theme.min.js","\/wp-content\/themes\/u-design\/framework\/assets\/js\/framework.min.js"],"icon_url":"","summary":"Display page content on load without user interaction.","type":"theme","id":"theme:c55edd40ad3f9321da577dad70bb130c","is_default":0,"created_at":1724444147},"14cb0a85-8bee-491e-99d7-5f20a07f4bdd":{"title":"Uncode","condition":"uncode","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uncode\/library\/js\/init(.min)?.js","\/uncode\/library\/js\/plugins(.min)?.js","\/uncode\/library\/js\/app(.min)?.js","\/uncode\/library\/js\/woocommerce-uncode(.min)?.js","\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js","initHeader","initBox","fixMenuHeight","initRow"],"icon_url":"","summary":"Hides Uncode's preloader without user interaction.","type":"theme","id":"theme:18ba19b98aefbb6c0fde6c6bf92e9cfc","is_default":0,"created_at":1724444172},"ff97a78f-9c62-4bc0-9340-1ad98aa6f2fa":{"title":"Uncode - Display Media Items","condition":"uncode","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/uncode\/library\/js\/lib\/vivus.min.js","\/uncode\/library\/js\/utils.min.js"],"summary":"When Delay JavaScript Execution is enabled, media items don't load on the page.","icon_url":"","type":"theme","category":null,"id":"theme:c0802221090418af389a07024262d71d","is_default":0,"created_at":1745441048},"c580ba92-2ab9-418d-a5d6-801ba6ceb9ce":{"title":"Uncode - Show Content on Page Load","condition":"uncode","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/uncode\/library\/js\/lib\/jquery.smartmenus.min.js","\/uncode\/library\/js\/lib\/jquery.waypoints.min.js","\/uncode\/library\/js\/utils.min.js","\/uncode\/library\/js\/app-loader.min.js","\/uncode\/library\/js\/preventDoubleTransition.min.js","\/uncode\/library\/js\/animations.min.js","\/uncode\/library\/js\/menuSystem.min.js","\/uncode\/library\/js\/backgroundSelfVideos.min.js","\/uncode\/library\/js\/carousel.min.js","\/uncode\/library\/js\/uncode-owl-nav.min.js","\/uncode\/library\/js\/tapHover.min.js","\/uncode\/library\/js\/lib\/inview.min.js","\/uncode\/library\/js\/disableHoverScroll.min.js","\/uncode\/library\/js\/printScreen.min.js","\/uncode\/library\/js\/lib\/owl.carousel(.*).min.js","\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js"],"summary":"When Delay JavaScript Execution is enabled, much of the page content doesn't load until user interaction.","icon_url":"","type":"theme","category":null,"id":"theme:befde4783fdb847bc562ea6a5882381f","is_default":0,"created_at":1745440617},"96aa49eb-6372-4b4c-b70d-f29dede8a8f2":{"title":"Utouch - Load menu on page load","condition":"utouch","exclusions":["\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/jquery\/jquery.min.js","\/utouch\/js\/main.js","\/utouch\/js\/swiper.jquery.min.js","\/utouch\/js\/fitvids.js","\/utouch\/js\/theme-plugins.js","\/utouch\/js\/crum-mega-menu.js"],"icon_url":"","summary":"Display menu on page load.","type":"theme","id":"theme:18284bf26abf49a1d5d60b3fb34e4c2d","is_default":0,"created_at":1724444186},"4cc603bb-f291-4096-aeb6-7d54832541dc":{"title":"Vehica - Mobile Menu","condition":"vehica","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/plugins\/vehica-core\/assets\/js\/elements.min.js"],"icon_url":"","summary":"Mobile menu requires double click to open if it's the first action taken.","type":"theme","category":"analytics","id":"theme:14220090cf75437b8926ea110498274a","is_default":0,"created_at":1754069979},"a1fbf155-720a-4704-9794-d6749ad6df59":{"title":"Vivo theme - Fix blank page","condition":"vivo","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/vivo\/framework\/assets\/js\/bt_framework_misc.js"],"icon_url":"","summary":"Fixes a blank page.","type":"theme","id":"theme:a140e640fed504586e24e7c0df30376b","is_default":0,"created_at":1724444202},"5acb5d19-caa6-4deb-b7db-0051df4c3c3b":{"title":"Voxel Theme","condition":"voxel","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/voxel\/","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig"],"icon_url":"","type":"theme","id":"theme:240a2be0a2b66b01f83abdcd83da7c7c","is_default":0,"created_at":1720444241},"88e96479-1aa2-4adc-8f07-20bc0368a63f":{"title":"Werkstatt","condition":"werkstatt","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/js\/underscore.min.js","\/werkstatt\/assets\/js\/vendor.min.js","\/werkstatt\/assets\/js\/fullscreen.min.js","\/werkstatt\/assets\/js\/app.min.js"],"icon_url":"","summary":"Show animated elements on page load.","type":"theme","id":"theme:38faa29db5a07b8fef6aee9cc11cafec","is_default":0,"created_at":1724444798},"60c4110b-a960-4d44-b619-6d79514dbf75":{"title":"Woodmart","condition":"woodmart","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/imagesloaded.min.js","\/woodmart\/js\/scripts\/wc\/","\/woodmart\/js\/scripts\/global\/","\/woodmart\/js\/libs\/owl.carousel.min.js","\/woodmart\/js\/libs\/owl.carousel.js","\/woodmart\/js\/libs\/slick.js","\/woodmart\/js\/libs\/autocomplete.min.js"],"icon_url":"","summary":"Show WooCommerce thumbnails on pageload & Show product image gallery","type":"theme","id":"theme:06338f13cb89e5309ad2eb7e4d457be4","is_default":0,"created_at":1724444297},"a4547b5b-10ab-407c-969c-269fddec07b8":{"title":"Woodmart - Cart Fragments","condition":"woodmart","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js","\/woodmart\/js\/scripts\/wc\/updateCartFragmentsFix.js"],"icon_url":"","summary":"Fix problem with the quantity icon of the mini cart","type":"theme","id":"theme:591f4f1b2e86b1e987cd8789df3ffce3","is_default":0,"created_at":1724444280},"c385fdb6-ac41-4b00-a350-1e2e82445e22":{"title":"Woodmart - Menu","condition":"woodmart","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/woodmart\/js\/scripts\/global\/helpers.min.js","\/themes\/woodmart\/js\/scripts\/menu\/menuOffsets.min.js","\/themes\/woodmart\/js\/libs\/swiper.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, menu dropdowns won't work consistently when clicked (seems to happen if page is refreshed and no user interaction happens until after page is fully loaded).","type":"theme","id":"theme:d8453e5704ad631dd785e452ce75c9f6","is_default":0,"created_at":1729535544},"97066e39-027a-4cd6-9152-7b6b53f365f5":{"title":"Woodmart - Mobile Menu","condition":"woodmart","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/woodmart\/js\/scripts\/menu\/mobileNavigation.min.js","\/themes\/woodmart\/js\/scripts\/global\/helpers.min.js"],"icon_url":"","summary":"Allow mobile menu to work with just one click.","type":"theme","id":"theme:d79a3941e2f12fb93ffc980ebeb1d7f4","is_default":0,"created_at":1724444264},"b654d55b-8094-40a6-b145-48572d2c396d":{"title":"Woodmart - Sticky Header","condition":"woodmart","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/woodmart\/js\/scripts\/global\/helpers.min.js","\/themes\/woodmart\/js\/scripts\/header\/headerBuilder.min.js"],"summary":"When Delay JavaScript Execution is enabled, the header is no longer sticky when scrolling down the page.","icon_url":"","type":"theme","id":"theme:aa0d7919216f3bb2e405069d206dfda4","is_default":0,"created_at":1729604626},"926d3769-8ce6-4137-b682-44124909d2cc":{"title":"WooVina - Fix Preloader and Hero section","condition":"woovina","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/woovina-preloader\/assets\/js\/wvp-main-script.js","\/woovina\/assets\/js\/main.min.js","\/woovina-elementor-widgets\/assets\/js\/wew-frontend.min.js","\/woovina-elementor-widgets\/assets\/js\/blog-carousel.min.js","\/woovina-elementor-widgets\/assets\/js\/tabs.min.js"],"icon_url":"","summary":"Fixes preloader and hero section","type":"theme","category":"analytics","id":"theme:23a0047d6cddc8e93a6695e42aa24da0","is_default":0,"created_at":1739814571},"119ebd1c-6b46-4f07-8d6a-3498d9c8814f":{"title":"XStore","condition":"xstore","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/xstore\/js\/","\/et-core-plugin\/packages\/st-woo-swatches\/public\/js\/frontend.min.js"],"icon_url":"","type":"theme","id":"theme:3de9d9ba385200548f177d9c704ae92a","is_default":0,"created_at":1679738190},"9a7a548c-07a1-4dff-93fc-6e8230b67853":{"title":"YOOtheme Pro","condition":"yootheme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","uikit.min.js"],"icon_url":"","summary":"Show animations and image in header on page load.\r\n\r\n\r\n\/yootheme\/","type":"theme","id":"theme:119d329456073aa10969d7cbd9760f28","is_default":0,"created_at":1724444774},"f74c499e-b7d9-4590-8671-379f51f468c8":{"title":"Zeen","condition":"zeen","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/zeen\/assets\/js\/","\/js.cookie.min.js"],"icon_url":"","summary":"Starts animations on pageload","type":"theme","id":"theme:acb52844f996627788836366404a3245","is_default":0,"created_at":1724444815}},"scripts":{"analytics":{"2499bb90-0753-4b2b-9bd4-1525f94c7437":{"title":"Google Analytics","exclusions":["google-analytics.com\/analytics.js","ga\\( '","ga\\('"],"icon_url":"","summary":"Google Analytics","type":"script","category":"analytics","id":"script:d86cf69a8b82547a94ca3f6a307cf9a6","is_default":0,"created_at":1734096382},"ac2d5720-9418-468c-80a0-3874ee743c0f":{"title":"Google Optimize","exclusions":["a,s,y,n,c,h,i,d,e","googleoptimize.com\/optimize.js","async-hide"],"icon_url":"","summary":"Prevent a flicker or blank screen.","type":"script","category":"analytics","id":"script:031a0cece38c4739df67f910dcabf1bd","is_default":0,"created_at":1734096440},"219277ae-b2ac-4d42-913d-eaea40985295":{"title":"Google Tag Manager","exclusions":["\/gtag\/js","gtag\\(","\/gtm.js","async-hide"],"icon_url":"","summary":"","type":"script","category":"analytics","id":"script:1d3c65b2b03ef35e14df6b163ea3a1f6","is_default":0,"created_at":1733481215},"f632e3f4-20e6-471e-a78d-86afbea63586":{"title":"HubSpot","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","js(.*).hsforms.net","hbspt.forms.create","MeetingsEmbed\/ex\/MeetingsEmbedCode.js"],"icon_url":"","summary":"Display the form","type":"script","category":"analytics","id":"script:de4bd8ef4675ebb85a055955de76d0ee","is_default":0,"created_at":1742318463}},"ad_networks":{"dd0c5a5b-ec56-49f9-9aa4-89e1e3a6a28a":{"title":"Amazon Ads","exclusions":["amazon-adsystem.com"],"icon_url":"","summary":"To show the ads","type":"script","category":"ad_networks","id":"script:b82a5936d8ea0745016caeb71629ae5d","is_default":0,"created_at":1734083105},"980edf32-c64b-4370-bf23-c62b079e71c3":{"title":"Google AdSense","exclusions":["adsbygoogle"],"icon_url":"","summary":"Google Adsense","type":"script","category":"ad_networks","id":"script:0206e6040c8ff64b8d6ee5fef2ce1c90","is_default":0,"created_at":1734096273},"49c38c0a-43b9-4237-88cb-57ddd519f0ad":{"title":"Venatus Media","exclusions":["\/ad-manager.min.js","__vm_add"],"icon_url":"","summary":"Show ads on page load.","type":"script","category":"ad_networks","id":"script:abe11528732aed9a19a97e73b242faa5","is_default":0,"created_at":1734096334},"0627fe24-7e9d-400f-b064-d98bec2ba85e":{"title":"Yandex Ads","exclusions":["yandex.ru","window.yaContextCb"],"icon_url":"","summary":"Display Ads without interaction","type":"script","category":"ad_networks","id":"script:dbd1875130c71eb4b2ef768ad18d820c","is_default":0,"created_at":1734096360}},"payment_processors":{"05d3eb78-f574-49be-95e1-3f11714005d1":{"title":"Stripe","exclusions":["js.stripe.com"],"icon_url":"","summary":"Fixes ReferenceError: Stripe is not defined","type":"script","category":"payment_processors","id":"script:ce7566d1d08cc094b74cf283cf9c56a5","is_default":0,"created_at":1734077637}},"other_services":{"6f2f3fce-7671-416a-a322-08875c4badb5":{"title":"Cloudflare Turnstile","exclusions":["cloudflare.com\/turnstile\/","cf-turnstile"],"summary":"While DJE applied, the Cloudflare Turnstile Captcha doesn't appear at all.","icon_url":"","type":"script","category":"other_services","id":"script:7b1ae689f336775afa7835a9da7be645","is_default":0,"created_at":1742993345},"6f460036-3106-4b8c-9951-d32de9b1258f":{"title":"Google Maps","exclusions":["maps.googleapis.com","maps.google.com"],"icon_url":"","summary":"Google Maps","type":"script","category":"other_services","id":"script:4d60ab2c6d11d753267484006c23e54c","is_default":0,"created_at":1734096371},"122e6ebb-51fd-477f-97fb-559593f1a48b":{"title":"Google Recaptcha","exclusions":["recaptcha"],"icon_url":"","summary":"Fixes dependency issues related to Google Recaptcha","type":"script","category":"other_services","id":"script:032cb16577cbf07bc7c02bac83bd936d","is_default":0,"created_at":1734096345},"668df886-2f43-46fa-8426-7be3d7f7d150":{"title":"LeadConnector Chatbox","exclusions":["\/chat-widget\/loader.js"],"icon_url":"","summary":"The chatbox icon\/button does not display until user interaction.\r\n\r\nThis should likely be moved to a new category aside from 'Other Services' once the categories are expanded. Most likely 'Widgets'.\r\n\r\nRelated discussion:\r\nhttps:\/\/wp-media.slack.com\/archives\/C43T1AYMQ\/p1734619420716789?thread_ts=1734605228.860859&cid=C43T1AYMQ\r\n\r\nWebsite using this Chatbox:\r\nhttps:\/\/premiermarketingus.com\r\n\r\nIt uses a custom element for the Chatbox that could be used for limiting display in UI to only sites using this widget: ","type":"script","category":"other_services","id":"script:eeda31f2e95b6f4c2107aebe2887bfe8","is_default":0,"created_at":1734620886},"5d606add-ffb8-4a06-b295-5f722710fbfd":{"title":"Refari","exclusions":["widget.refari.co","refari"],"icon_url":"","summary":"www.refari.co","type":"script","category":"other_services","id":"script:a705e197b13b47e72a105c923e044358","is_default":0,"created_at":1734096181},"742ec14a-27a1-4789-b9c8-a9c3a3cf7042":{"title":"Reviews.io","exclusions":["\/carousel-inline-iframeless\/dist.js","carouselInlineWidget"],"icon_url":"","summary":"Prevents the widget from breaking","type":"script","category":"other_services","id":"script:4df445c576f45889506ba175a4c39fdc","is_default":0,"created_at":1734096412},"0a37e528-8718-49f7-a26d-059aa29f867d":{"title":"Trustindex","exclusions":["cdn.trustindex.io\/loader.js","cdn.trustindex.io\/loader-cert.js"],"icon_url":"","summary":"Trustindex element is shown immediately","type":"script","category":"other_services","id":"script:1d38d6195597e8bb81966870f0a4f939","is_default":0,"created_at":1734096229},"dda024ec-4539-4a00-aee8-d9522aa9ba27":{"title":"Trustindex - Load Rich Snippets","exclusions":["cdn.trustindex.io\/assets\/js\/richsnippet.js"],"icon_url":"","summary":"Allow Trustindex Rich Snippets JavaScript to be loaded on the page and show up in Google's Rich Snippet Testing Tool.","type":"script","category":"other_services","id":"script:55d971acbd86a7676772bca65c37c0c0","is_default":0,"created_at":1752130743},"ce9a3865-9efa-4e98-ae10-4f842a4ecc22":{"title":"Typeform","exclusions":["\/next\/embed.js"],"icon_url":"","summary":"Load Typeforms without interaction","type":"script","category":"other_services","id":"script:cd3889ae3b96f891186ae270dbbcc9bb","is_default":0,"created_at":1734096391},"b56bf06c-2f8c-4757-b536-a689fb0e75f9":{"title":"Typekit","exclusions":["typekit"],"icon_url":"","summary":"Load Typekit fonts on page load","type":"script","category":"other_services","id":"script:7815e38b93e3b500a632681bd594bd61","is_default":0,"created_at":1734096353},"03819e72-abf5-4057-9047-16d45db4641e":{"title":"Vidalytics - Autoplay","exclusions":["vidalytics_embed"],"summary":"Allows the autoplay functionality to work for videos without need for user interaction first.","icon_url":"","type":"script","category":"other_services","id":"script:113087c8df349e7c8b86875b46071855","is_default":0,"created_at":1736531452},"2c1d0998-8ab5-478c-8eb9-9e375b46363e":{"title":"Wistia","exclusions":["fast.wistia.com","\/assets\/external\/E-v1.js"],"icon_url":"","summary":"Show video on page load","type":"script","category":"other_services","id":"script:9a0111f8c3186c1cb3113587c660c041","is_default":0,"created_at":1734096254}}}} \ No newline at end of file +{"plugins":{"ffc21030-519a-4853-8cea-49f959e82731":{"title":"Additional Variation Images Gallery for WooCommerce","condition":"woo-variation-gallery\/woo-variation-gallery.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woo-variation-gallery\/assets\/js\/slick.min.js","\/woo-variation-gallery\/assets\/js\/frontend.min.js","\/wp-includes\/js\/underscore.min.js","variation_custom_fields"],"icon_url":"","summary":"Prevents delay in the loading of product images.","type":"plugin","id":"plugin:def67a2c1ddd6df2353e4772b6fd4e5b","is_default":0,"created_at":1724424735},"0e7dc253-acd0-4421-877f-a7101d848717":{"title":"Advanced Ads","condition":"advanced-ads\/advanced-ads.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/(.*).js","advanced_ads_ready","advadsCfpQueue","adsbygoogle","adservice.google","\/advanced-ads(.*)","advads_items","advads_tracking_ads"],"icon_url":"","summary":"The latest versions of Advanced Ads include automatic compatibility with Delay JS. So please update them first: Advanced Ads 1.27.0, Advanced Ads Pro 2.13.0, and Advanced Ads Tracking 2.1.0","type":"plugin","id":"plugin:4b82cc7379d46c6272f5d556bb264eec","is_default":0,"created_at":1724424826},"a4d5c058-9120-47ee-977c-f30f83fb1a75":{"id":"plugin:a076fbb79772f497349a76ee74a7f708","title":"All-in-one Compliance for GDPR \/ CCPA Cookie Consent","type":"plugin","icon":"","exclusions":["iubenda_cs.js","var _iub"],"is_default":0,"condition":"iubenda-cookie-law-solution\/iubenda_cookie_solution.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"88457e92-0f24-458e-b7b5-bab59074ebef":{"title":"Amelia","condition":"ameliabooking\/ameliabooking.php","exclusions":["\/wp-content\/plugins\/ameliabooking\/(.*).js","var hasAmeliaEvent","var ameliaShortcodeData"],"icon_url":"","summary":"Display booking options without user interaction.","type":"plugin","category":"analytics","id":"plugin:93ea6597c3cbd06e93a46b9f5368732d","is_default":0,"created_at":1758013982},"79a5082f-821a-4a4b-a0e3-caaf22cf3f75":{"title":"AMO Team Showcase","condition":"amo-team-showcase\/amo-team-showcase.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/amo-team-showcase\/public\/js\/wookmark.js","\/amo-team-showcase\/public\/js\/amo-team-showcase-public.js","\/wp-includes\/js\/imagesloaded.min.js","amoTeamVars"],"icon_url":"","summary":"To display team members.","type":"plugin","id":"plugin:9bdceaa1bb89135730a3b2aa4db94c22","is_default":0,"created_at":1724425072},"90c7fd90-3adf-4cb7-8a92-845bdbd95d27":{"title":"Anti-Spam by CleanTalk - Prevent console error","condition":"cleantalk-spam-protect\/cleantalk.php","exclusions":["ctPublicFunctions","ctPublic"],"icon_url":"","summary":"Prevent console error","type":"plugin","id":"plugin:ed2ade77cd44e21b1703b093c002a903","is_default":0,"created_at":1724425107},"e054f840-700a-4549-bbba-485473a53f71":{"title":"AnWP Football Leagues - Calendar Widget","condition":"football-leagues-by-anwppro\/anwp-football-leagues.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/football-leagues-by-anwppro\/(.*)","\/football-leagues-by-anwppro-premium-premium\/(.*)","window.AnWPFLPro","window.AnWPFLTabulator","\/elementor\/assets\/lib\/flatpickr\/flatpickr.min.js"],"icon_url":"","summary":"Display FL Calendar Widget","type":"plugin","id":"plugin:e7581089f33fdf0a970d5c5deb16ff50","is_default":0,"created_at":1724425139},"1d058cae-4460-4354-bab3-a96445650bd8":{"title":"AnyWhere Elementor Pro","condition":"anywhere-elementor-pro\/anywhere-elementor-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/anywhere-elementor-pro\/build\/index.js"],"icon_url":"","summary":"Make links clickable","type":"plugin","id":"plugin:b739df50f3f5bf400075f17dca652517","is_default":0,"created_at":1724425158},"8a1614c7-55b1-4b6d-88e5-6e8ddc630dae":{"id":"plugin:46741e77eaf4d13a0c80be6b86379758","title":"Astra - Pro Addon","type":"plugin","icon":"","exclusions":["\/astra-addon\/astra-addon-(.*).js"],"is_default":0,"condition":"astra-addon\/astra-addon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"24bc7cdf-0c51-4d93-a74d-57344689a4f6":{"title":"Beaver Builder - Background Images","condition":"bb-theme-builder\/bb-theme-builder.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/uploads\/bb-plugin\/cache\/(.*)-layout.js"],"summary":"When Delay JavaScript Execution is enabled, background images don't show until user interaction.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:b509b5b21236c81836daf74954b9109e","is_default":0,"created_at":1737120060},"37d96403-f9ea-4481-b2f8-374d7c93e61a":{"title":"Beaver Builder Lite","condition":"beaver-builder-lite-version\/fl-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/bb-plugin\/","\/bb-plugin\/js\/yui3.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/bb-plugin\/js\/fl-slideshow.min.js"],"summary":"To show parallax background, slideshow background and some animations instantly.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:3fab17e6c8338e2dcc7a5c8a06abf093","is_default":0,"created_at":1737118681},"f83dbf3b-783e-4ef9-9b18-8a469ca7102d":{"title":"Bloom","condition":"bloom\/bloom.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/bloom\/"],"icon_url":"","type":"plugin","id":"plugin:e57cdfbc09f4e0f7445c279d9f580bdd","is_default":0,"created_at":1685189070},"a95fbc8a-c32d-4a4b-90b4-ab6d203501a6":{"title":"Bold Builder - Load Page Content","condition":"bold-page-builder\/bold-builder.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/plugins\/bold-page-builder\/content_elements_misc\/js\/content_elements.js"],"summary":"When Delay JavaScript Execution is enabled, the Bold Builder page content doesn't load until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:b4e303b649e8a20c016a51f35647cf35","is_default":0,"created_at":1754073080},"135aadd2-cd4a-44ae-8dcf-801f3f2316c0":{"id":"plugin:055ef01accbad6378e3d1a4965600964","title":"Booked","type":"plugin","icon":"","exclusions":["\/booked\/","\/js\/jquery\/ui\/datepicker.min.js"],"is_default":0,"condition":"booked\/booked.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ddfee9b0-e5a9-4d3f-8c21-b999cbb61c33":{"title":"Bookly","condition":"bookly-responsive-appointment-booking-tool\/main.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/bookly-responsive-appointment-booking-tool\/frontend\/","window.bookly"],"icon_url":"","summary":"To load the booking form on page load.","type":"plugin","id":"plugin:492f9b0d55f3bf07c68e915ea1dfb72a","is_default":0,"created_at":1724427886},"7a013fd6-0881-4dbe-8e93-33edefe7f717":{"title":"Borlabs Cookie","condition":"borlabs-cookie\/borlabs-cookie.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","borlabsCookieConfig","borlabs-cookie.min.js","borlabsCookieContentBlocker","BorlabsCookieBox","allFbWidgets","\/borlabs-cookie\/assets\/javascript\/","borlabs-cookie-config"],"icon_url":"","type":"plugin","id":"plugin:e1ec2daca513de476bd3dae79366e9ab","is_default":0,"created_at":1702497952},"3999e680-4049-4494-945c-768cecc1a2c4":{"title":"Brizy","condition":"brizy\/brizy.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/brizy\/public\/editor-build\/(.*)-wp\/editor\/js\/group-(.*).js","\/brizy\/public\/editor-build\/(.*)-wp\/editor\/js\/preview.js","Brizy.emit","\/brizy\/public\/editor-build\/prod\/editor\/js\/group-(.*).js","\/brizy-pro\/public\/editor-build\/prod\/js\/preview.pro.min.js","Brz.emit"],"icon_url":"","summary":"Prevents partially loading the slider. When Delay JavaScript Execution is enabled, the page content don't load until user interaction.","type":"plugin","category":"analytics","id":"plugin:43019d66af7b41e65bb602c01e10c6a0","is_default":0,"created_at":1744729591},"af4d9357-3def-42a1-86b7-419553444b4d":{"title":"Carousel Upsells and Related Product for WooCommerce","condition":"carousel-upsells-and-related-product-for-woocommerce\/ffxf-woo-glide-related-and-upsells.php","exclusions":["\/carousel-upsells-and-related-product-for-woocommerce\/assets\/js\/glide.min.js","carusel_poduct_related"],"icon_url":"","summary":"To load the carousel products with the correct spacing without interaction.","type":"plugin","id":"plugin:5c317f9f244597d8f236ecb7d8e41752","is_default":0,"created_at":1724428163},"fd98f80b-c23b-410d-9dc3-a8ce3e993ac1":{"title":"Chaty Pro","condition":"chaty-pro\/cht-icons.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/chaty-pro\/js\/cht-front-script.min.js","\/chaty-pro\/js\/mailcheck.js"],"summary":"Makes the chat widget load without need for user interaction.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:b96ceb22b2d39fb4efd313c0820815ea","is_default":0,"created_at":1741370727},"a3008eca-48a0-472d-9a07-5dca76f92a44":{"title":"Click to Chat - HoliThemes \u2013 Load Widget","condition":"click-to-chat-for-whatsapp\/click-to-chat.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/click-to-chat-for-whatsapp\/"],"summary":"Allow the Click to Chat widget (free version) from HoliThemes to load without user interaction","icon_url":"","type":"plugin","category":"analytics","id":"plugin:a972e5b5e65713a2ac6902079728cce0","is_default":0,"created_at":1747894280},"a9bfc345-2da1-413e-bbe7-800245df5f1f":{"title":"Click to Chat Pro - HoliThemes \u2013 Load Widget","condition":"click-to-chat-pro\/click-to-chat-pro.php","exclusions":["\/click-to-chat-pro\/"],"summary":"Allow the Click to Chat widget (Pro version) by HoliThemes to load without user interaction","icon_url":"","type":"plugin","category":"analytics","id":"plugin:9bc0ad7f761a99e2bf2c3df3fa43dc5a","is_default":0,"created_at":1747894256},"1d866d90-5451-43ba-a4d1-75b64f9235e1":{"title":"clickskeks.at Cookiebanner","condition":"clickskeks\/index.php","exclusions":["clickskeks"],"icon_url":"","summary":"Load the cookie banner without interaction.","type":"plugin","id":"plugin:0a3a29603ebac8fe0808f64f5c8edbb2","is_default":0,"created_at":1724428285},"866ceb37-0285-4ce6-9f2a-9a99b03ad0c1":{"title":"CMSMasters Elementor Addon - Mobile Menu","condition":"cmsmasters-elementor-addon\/cmsmasters-elementor-addon.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/cmsmasters-elementor-addon\/assets\/lib\/perfect-scrollbar\/perfect-scrollbar.min.js","\/cmsmasters-elementor-addon\/assets\/lib\/basicScroll\/basicScroll.min.js","\/cmsmasters-elementor-addon\/assets\/js\/webpack.runtime.min.js","\/cmsmasters-elementor-addon\/assets\/js\/frontend.min.js","elementorCmsmastersFrontendConfig"],"summary":"Mobile menu won't open without these exclusions.\r\n\r\nUsed the same exclusions as Elementor, as that's a required plugin to use this one.","icon_url":"","type":"plugin","category":null,"id":"plugin:0e953e89f00b7ba303c8cc9c26eae84e","is_default":0,"created_at":1744056425},"bd275cce-a8ba-48a1-aa37-b9106a287075":{"title":"CommerceGurus CommerceKit - Load featured image","condition":"commercegurus-commercekit\/commercegurus-commercekit.php","exclusions":["\/wp-content\/plugins\/commercegurus-commercekit\/","cgkit_attr_gallery","commercekit_ajs"],"summary":"The featured product images don't load until user interaction with page.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:e081beb69f2208167beb93dfbe596591","is_default":0,"created_at":1758734403},"c09695cc-2387-4416-881a-c0b392188a26":{"title":"Complianz","condition":"complianz-gdpr\/complianz-gpdr.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","complianz"],"icon_url":"","type":"plugin","id":"plugin:a766f95208154cd69a3e15150a42f325","is_default":0,"created_at":1685188788},"bfb36984-e2a1-40ba-a8cd-f29b0b6f720f":{"title":"Complianz Premium","condition":"complianz-gdpr-premium\/complianz-gpdr-premium.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","complianz"],"icon_url":"","type":"plugin","id":"plugin:89d54385816dd2d5ae92cfda9d95bbfd","is_default":0,"created_at":1712163685},"b5e146fc-0b7c-4c6c-a631-8da246d3bd89":{"title":"Conerstone Builder - Fix mobile menu","condition":"cornerstone\/cornerstone.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/cornerstone\/assets\/js\/site\/cs-classic.(.*).js"],"icon_url":"","summary":"Fix the issue with the hamburger menu, when Delay JavaScript execution is enabled the menu doesn't open.","type":"plugin","id":"plugin:f8f8c81535b5e0073aa3c56b6dd3df5b","is_default":0,"created_at":1724428497},"368bc394-b74e-4b62-b359-cd967f78c6ea":{"title":"ConsentMagic Pro - Show popup without user interaction","condition":"consent-magic-pro\/consent-magic-pro.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/plugins\/consent-magic-pro\/js\/cs-public.min.js","\/wp-content\/plugins\/pixelyoursite-pro\/(.*)"],"icon_url":"","summary":"Load the consent popup without user interaction.","type":"plugin","id":"plugin:9e0701a214f49a057f17b00e39df2e7e","is_default":0,"created_at":1724428306},"7e551e3b-fbe4-4235-87a9-b476bc9e2020":{"title":"Content Egg","condition":"content-egg\/content-egg.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/content-egg\/res\/js\/morrisjs\/morris.min.js","\/content-egg\/res\/js\/morrisjs\/raphael.min.js","Morris.Area"],"icon_url":"","summary":"Show charts on page load.","type":"plugin","id":"plugin:949b1b923d51d10a2fb67a2a39d166b3","is_default":0,"created_at":1724428456},"7fbca6c5-9239-4550-a755-6f041f867a57":{"title":"Cookie Notice & Compliance for GDPR \/ CCPA","condition":"cookie-notice\/cookie-notice.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/cookie-notice\/","var cnArgs"],"icon_url":"","summary":"Loads the cookie notice on the screen.","type":"plugin","id":"plugin:213d0f883ae27aefb3a7937656bbd11e","is_default":0,"created_at":1724428382},"26722567-fe35-44b5-a5a7-fb0f3a38c3f2":{"title":"Cookiebot CMP","condition":"cookiebot\/cookiebot.php","exclusions":["consent.cookiebot.com"],"icon_url":"","summary":"Resolves issue with links not being clickable.","type":"plugin","id":"plugin:1d10ad30bbcf0fd4b26e9625a07abcfc","is_default":0,"created_at":1724428418},"1547249a-ce0c-40e4-91f6-148a5f9652d7":{"title":"CookieYes Lite - Show on page load","condition":"cookie-law-info\/cookie-law-info.php","exclusions":["\/cookie-law-info\/lite\/frontend\/js\/script.min.js"],"icon_url":"","type":"plugin","id":"plugin:29d4d4ccd077232b111581043bbd8d81","is_default":0,"created_at":1721422981},"74110e36-89e5-440d-bec3-7133da3277c2":{"title":"Coupon Referral Program","condition":"coupon-referral-program\/coupon-referral-program.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/coupon-referral-program\/","\/wp-includes\/js\/jquery\/ui\/draggable.min.js"],"icon_url":"","summary":"Fixes non-breaking dependency error.\r\n\r\nAlso requires excluding the following from JavaScript deferring:\r\n\r\n\/coupon-referral-program\/","type":"plugin","id":"plugin:edcf103293ceab711e999d419d038ca1","is_default":0,"created_at":1724428687},"408fa396-20f2-4b1f-820d-52882af281cc":{"title":"CozyStay Core - Fix background images","condition":"cozystay-core\/cozystay-core.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/cozystay-core\/assets\/scripts\/front\/parallax-bundle.min.js"],"icon_url":"","summary":"Fixes background images loading.","type":"plugin","id":"plugin:872b5eef05c1fc3b00cda07ee966938d","is_default":0,"created_at":1724428721},"919e07d3-df99-4ebd-a119-dca6c7cb4e22":{"title":"CP Live - Show Videos on Page Load","condition":"cp-live\/cp-live.php","exclusions":["\/cp-library\/build\/src\/app.js","\/feather-icons\/(.*)\/feather.min.js","\/wp-includes\/js\/dist\/vendor\/react.min.js","\/wp-includes\/js\/dist\/vendor\/react-dom.min.js","\/wp-includes\/js\/dist\/element.min.js","\/wp-includes\/js\/dist\/escape-html.min.js"],"summary":"When Delay JavaScript Execution is enabled, videos don't show on page until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:a589057eec49aeea28adecba9585059f","is_default":0,"created_at":1744115729},"ed63e02f-d6c5-481a-bcb9-aae15f72aa21":{"title":"Crisp - Live Chat and Chatbot","condition":"crisp\/crisp.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","CRISP_RUNTIME_CONFIG","l.js"],"icon_url":"","summary":"Allow the chat icon to be displayed.","type":"plugin","id":"plugin:c3e26264dcfd25802805b4fd1a2a449c","is_default":0,"created_at":1724428819},"a8eb622b-279c-4f84-86e0-785e9497add7":{"title":"Custom Twitter Feeds pro","condition":"custom-twitter-feeds-pro\/custom-twitter-feed.php","exclusions":["\/custom-twitter-feeds-pro\/js\/ctf-scripts.min.js"],"icon_url":"","summary":"Allow Twitter feed pro to display a Twitter feed","type":"plugin","id":"plugin:6e4bf949e12f0bebfefb48f6c316102a","is_default":0,"created_at":1724428839},"1624ef15-e25b-406d-bdf9-d4b78d7a59e7":{"title":"Customer Reviews for WooCommerce Plugin","condition":"customer-reviews-woocommerce\/ivole.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/customer-reviews-woocommerce\/js\/colcade.js"],"icon_url":"","type":"plugin","id":"plugin:1f893b343e72ce55e6c9013fbda172fa","is_default":0,"created_at":1704734788},"b0614843-afed-4377-9d8d-e869221be331":{"title":"Depicter Slider","condition":"depicter\/depicter.php","exclusions":["\/depicter\/"],"icon_url":"","type":"plugin","id":"plugin:77c42a041f1c40d128f4bb3714a6d20d","is_default":0,"created_at":1713878881},"396cc03a-8946-4ee8-ab15-7e48261df79a":{"title":"Divi - Carousel Module 2.0","condition":"dg-divi-carousel","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/plugins\/dg-divi-carousel\/"],"icon_url":"","type":"plugin","id":"plugin:fcd789b7d02699f89720aa5ff3627912","is_default":0,"created_at":1709126476},"c15fe3b3-0eaa-48f9-bf04-0e778b1f8c63":{"title":"Divi - Supreme","condition":"supreme-modules-for-divi\/supreme-modules-for-divi.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI","\/supreme-modules-for-divi\/"],"icon_url":"","type":"plugin","id":"plugin:b5489ae4d8b949f536d6dd2e5b0c1a95","is_default":0,"created_at":1679738701},"dd31451b-989a-4517-b02a-e2c2e2023366":{"title":"Divi Den Pro","condition":"ddpro\/ddpro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ddpro\/build\/freddie\/js\/freddieScriptPageTransition.js","\/ddpro\/build\/freddie\/js\/freddieScriptsHeaders.js","\/ddpro\/build\/freddie\/js\/freddieScriptsContents.js","\/ddpro\/build\/freddie\/js\/gsap\/gsap.min.js"],"icon_url":"","summary":"Fires animations and content created with Divi Den Pro.","type":"plugin","id":"plugin:5caed322df984bbfd3ecb506cf12b688","is_default":0,"created_at":1724429225},"2b006370-cc90-42c1-9656-a30fbfbc91c6":{"title":"Divi Mobile","condition":"divi-mobile\/divi-mobile.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","divi-menu","dm_nav"],"icon_url":"","summary":"Avoid double click when using the mobile menu.","type":"plugin","id":"plugin:402d9b241b04934dd30f32e7ba490e63","is_default":0,"created_at":1724429325},"666bbed9-7ce3-457c-ad6e-b5e056d05010":{"title":"Divi Overlays","condition":"divi-overlays\/divi-overlays.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","var DIVI","\/divi-overlays\/"],"icon_url":"","summary":"Enable modals to be displayed on screen","type":"plugin","id":"plugin:1c828c93d87298d2a27c76e13d0880ba","is_default":0,"created_at":1724429242},"42a404af-7792-44be-9baa-565dc3baf25d":{"title":"Divi Pixel","condition":"divi-pixel\/divi-pixel.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/divi-pixel\/dist\/public\/js\/hamburger.min.js","\/divi-pixel\/dist\/vendor\/js\/easypiechart.js"],"icon_url":"","summary":"Page Preloader","type":"plugin","id":"plugin:dd2494945a487a6cc74d3ab1b2137ccb","is_default":0,"created_at":1724429347},"85f5c099-c481-4c38-bbb9-8b76113bdfd5":{"title":"Divi Supreme Pro","condition":"supreme-modules-pro-for-divi\/supreme-modules-pro-for-divi.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","elm.style.display","\/supreme-modules-pro-for-divi\/includes\/modules\/ImageCarousel\/frontend.min.js","\/supreme-modules-pro-for-divi\/public\/js\/swiper-bundle.min.js"],"icon_url":"","summary":"Avoid white screen before user interaction","type":"plugin","id":"plugin:3d5f0ae7751702fd1bb490fcf991a334","is_default":0,"created_at":1724429378},"0b78d762-c7be-45de-9aae-0c5078ec0619":{"id":"plugin:b5fc0101608d0b0627268dc49e3e1f8f","title":"Divi Toolbox","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","jQuery('.preloader')","\/divi-toolbox\/assets\/js\/toolbox-scripts.js"],"is_default":0,"condition":"divi-toolbox\/divi-toolbox.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"fe4f05d8-f90a-4547-9717-1b51a2dc8c5f":{"title":"Divi Torque - Carousel Images","condition":"addons-for-divi\/addons-for-divi.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/plugins\/addons-for-divi\/assets\/libs\/slick\/slick.min.js","\/plugins\/addons-for-divi\/assets\/libs\/magnific-popup\/magnific-popup.js","\/plugins\/addons-for-divi\/assets\/js\/frontend.js","\/plugins\/addons-for-divi\/assets\/libs\/counter-up\/counter-up.min.js","\/themes\/Divi\/js\/scripts.min.js","\/themes\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js","\/themes\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/jquery.mobile.js","cdn.userway.org\/widget.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, carousel images have incorrect dimensions until user interaction with page.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/213","type":"plugin","category":"analytics","id":"plugin:0c5e37ad7075d749ed195f856431d4e7","is_default":0,"created_at":1751983104},"9714d442-1c18-4b5d-a840-9eae2054f047":{"title":"Divi Torque - Gallery Images","condition":"addons-for-divi\/addons-for-divi.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/plugins\/diviflash\/public\/js\/lib\/packery.pkgd.js","\/wp-content\/plugins\/diviflash\/public\/js\/lib\/imagesloaded.pkgd.min.js","\/wp-content\/plugins\/diviflash\/public\/js\/df-packery.js","\/themes\/Divi\/js\/scripts.min.js","\/themes\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js","\/themes\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/jquery.mobile.js","cdn.userway.org\/widget.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the gallery images do not show until user interaction with page.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/214","type":"plugin","category":"analytics","id":"plugin:a6b73cee8978dfce1c881b8301445741","is_default":0,"created_at":1751983856},"aa07b744-a9cc-4de2-8caf-c203da1a8517":{"title":"DiviMenus - Mobile Menu","condition":"divimenus\/divimenus.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/divimenus\/scripts\/frontend-bundle.min.js"],"summary":"When Delay JavaScript Execution is enabled, the mobile menu loads as open until interaction with the page.","icon_url":"","type":"plugin","category":null,"id":"plugin:5041c45e48cd10836174e158078bdce6","is_default":0,"created_at":1745522929},"31a34440-1383-40c4-8920-effcf99f2165":{"title":"Dracula Dark Mode","condition":"dracula-dark-mode-premium\/plugin.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/plugins\/dracula-dark-mode-premium\/assets\/js\/dark-mode.js","\/wp-content\/plugins\/dracula-dark-mode-premium\/assets\/js\/frontend.js","\/wp-includes\/js\/dist\/vendor\/react-dom.min.js","\/wp-includes\/js\/dist\/vendor\/react.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","draculaDarkMode"],"icon_url":"","summary":"Show dark mode toggle button and apply styles without need for user interaction with page.","type":"plugin","id":"plugin:5e8a5d8d3830136d84d0f3676f1bf5a5","is_default":0,"created_at":1724429514},"8baba0f8-4449-47d8-a87d-9b6a116e7684":{"title":"Dynamic Pricing & Discounts Lite for WooCommerce","condition":"woo-dynamic-pricing-discounts-lite\/dynamic-pricing-discounts-lite-for-woocommerce.php","exclusions":["\/woo-dynamic-pricing-discounts-lite\/assets\/OwlCarousel\/dist\/owl.carousel.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:185062bf08db42515488e1853d1f4917","is_default":0,"created_at":1677857247},"0fa129f2-5869-4db7-9bf0-69e4b3549ee2":{"id":"plugin:27478327aa44075a86176fad95640d76","title":"Dynamic Product Gallery for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-dynamic-gallery\/","a3revWCDynamicGallery"],"is_default":0,"condition":"woocommerce-dynamic-gallery\/wc_dynamic_gallery_woocommerce.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"9958c6be-2f67-4791-95c3-a7ad96d599c0":{"title":"Dynamic Product Gallery Premium for WooCommerce","condition":"woocommerce-dynamic-gallery-pro\/wc_dynamic_gallery_woocommerce.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/woocommerce-dynamic-gallery-pro\/assets\/js\/mygallery\/jquery.a3-dgallery.js","settings_defaults_","a3revWCDynamicGallery"],"icon_url":"","summary":"Load the gallery content without user interaction.","type":"plugin","id":"plugin:11dc02a76019f00422f4ac85f47f5135","is_default":0,"created_at":1724429541},"ce26ed21-1be5-481f-80d4-31edfac6d890":{"title":"Dynamic.ooo - Dynamic Content for Elementor","condition":"dynamic-content-for-elementor\/dynamic-content-for-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/dynamic-content-for-elementor\/assets\/","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","summary":"Show dynamic content","type":"plugin","id":"plugin:d2bd5b348abe016bdc722acce7755062","is_default":0,"created_at":1724429557},"6a3161a6-1a6f-457a-a9ee-54b376981927":{"title":"Easy Table of Contents","condition":"easy-table-of-contents\/easy-table-of-contents.php","exclusions":["\/easy-table-of-contents\/assets\/js\/front.min.js"],"icon_url":"","summary":"Avoid the Easy Table of Contents to briefly open when the page loads.","type":"plugin","id":"plugin:ee1dec033c6481a77fe88de5bef1a02d","is_default":0,"created_at":1724429629},"25a534a0-2c1f-4cf4-9e19-7941bc032b3a":{"title":"Ecwid Ecommerce Shopping Cart","condition":"ecwid-shopping-cart\/ecwid-shopping-cart.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","app.ecwid.com\/script.js","\/ecwid-shopping-cart\/js\/frontend.js","\/ecwid-shopping-cart\/js\/static-page.js","ecwidParamswindow.ec","jQuery.mobile","xSearch","xCategoriesV2","xProductBrowser","Ecwid.init"],"icon_url":"","type":"plugin","id":"plugin:41c8f5f0ab00cb39654aedd783d194e0","is_default":0,"created_at":1704734846},"a0d681db-991a-4220-8f05-c54a4857aa42":{"title":"Element Pack Pro","condition":"bdthemes-element-pack\/bdthemes-element-pack.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/bdthemes-element-pack\/assets\/js\/modules\/ep-static-carousel.min.js","\/bdthemes-element-pack\/assets\/js\/modules\/ep-custom-carousel.min.js","\/bdthemes-element-pack\/assets\/js\/modules\/ep-slideshow.min.js","\/bdthemes-element-pack\/assets\/js\/modules\/ep-product-carousel.min.js","\/bdthemes-element-pack\/assets\/js\/modules\/ep-stacker.min.js","\/bdthemes-element-pack\/assets\/js\/bdt-uikit.min.js","\/bdthemes-element-pack\/assets\/js\/common\/helper.min.js","\/bdthemes-element-pack\/assets\/vendor\/js\/ScrollTrigger.min.js","\/bdthemes-element-pack\/assets\/vendor\/js\/gsap.min.js"],"icon_url":"","summary":"Fix issues with gallery and product carousels.","type":"plugin","id":"plugin:ced76c4da718a667537dc6c9d5e0244d","is_default":0,"created_at":1724429901},"40464325-5bae-4a20-bc97-553499e09a73":{"title":"Elementor","condition":"elementor\/elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","type":"plugin","id":"plugin:1d15783218a3137bec4ee8df5353e218","is_default":0,"created_at":1694425872},"ac86b64c-c80a-4053-894d-6caa8b4fdce8":{"title":"Elementor Loop Carrousel","condition":"elementor\/elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","type":"plugin","id":"plugin:0eb8d0bbd1c7ca05ac133ea634f676b7","is_default":0,"created_at":1694442056},"a8fc9fd1-f6d3-41eb-abe9-ef176de6d7e2":{"title":"Elementor - Lazy Load Background Images","condition":"elementor\/elementor.php","exclusions":["lazyloadRunObserver"],"icon_url":"","summary":"Start background images so they load immediately","type":"plugin","id":"plugin:bf248cb2876558452a566c5dd89262b8","is_default":0,"created_at":1724430300},"1948aff5-7850-4979-91fa-0ce181484508":{"title":"Elementor Custom Skin","condition":"ele-custom-skin\/ele-custom-skin.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ele-custom-skin(.*)\/assets\/js\/"],"icon_url":"","summary":"Fixes console error when Elementor scripts are excluded","type":"plugin","id":"plugin:de658ae6c2d05a5a4a947efecf5e0c16","is_default":0,"created_at":1724429916},"25708299-c596-4416-8ad8-740aee0f2752":{"title":"Elementor Pro","condition":"elementor-pro\/elementor-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js"],"icon_url":"","summary":"Show elements, galleries, and start animations. \r\n\r\nWhen User Cache is active the following exclusions will resolve console errors:\r\n\r\n\/wp-includes\/js\/underscore.min.js\r\n\/wp-includes\/js\/jquery\/ui\/core.min.js\r\n\/wp-includes\/js\/backbone.min.js\r\nelementorAdminBarConfig\r\nelementorCommonConfig\r\nelementorWebCliConfig\r\nelementorDevToolsConfig","type":"plugin","id":"plugin:030ad23e3851ed7adfa7b9b6c13cf5a6","is_default":0,"created_at":1724430189},"f34dd874-4b34-41e6-a31c-ece3c1efbffc":{"title":"Elementor Pro - SmartMenus","condition":"elementor-pro\/elementor-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/assets\/lib\/smartmenus\/jquery.smartmenus.min.js","\/elementor-pro\/assets\/js\/preloaded-elements-handlers.min.js"],"icon_url":"","summary":"Fixes the mobile menu","type":"plugin","id":"plugin:305581ad4294a30eeb1247982f626005","is_default":0,"created_at":1724430219},"111cc8b2-0be9-438b-9aa3-7f1e301a5697":{"id":"plugin:5ae9f5d99224d5ebc7d0c0bbf5b99787","title":"Elementor Pro - User Cache","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/backbone.min.js","elementorAdminBarConfig","elementorCommonConfig","elementorWebCliConfig","elementorDevToolsConfig"],"is_default":0,"condition":"elementor-pro\/elementor-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c1713bf8-e0c3-4cb5-8b3f-841b06aa87ed":{"title":"ElementsKit Lite - Megamenu","condition":"elementskit-lite\/elementskit-lite.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/elementskit(.*)\/"],"icon_url":"","type":"plugin","id":"plugin:b91fed2fc4478dbb7067742c1ee4691b","is_default":0,"created_at":1683270249},"236c2a9e-9668-4a80-9b66-d2222d812dd6":{"title":"Elfsight Slider CC","condition":"elfsight-slider-cc\/elfsight-slider-cc.php","exclusions":["\/elfsight-slider-cc\/assets\/elfsight-slider.js"],"icon_url":"","summary":"Load slider on page loading","type":"plugin","id":"plugin:b0e259c84df5e120d6113dd0eef9da4b","is_default":0,"created_at":1724430233},"706ff35d-8e33-4b04-a986-346faff704e9":{"title":"Essential Addons for Elementor","condition":"essential-addons-for-elementor-lite\/essential_adons_elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/essential-addons(-for)?-elementor(-lite)?\/.*(.min)?.js"],"icon_url":"","summary":"Start the carousel on page load","type":"plugin","id":"plugin:417192424139d89fb2a5b1ee1f2b9613","is_default":0,"created_at":1724430272},"b38556dc-2bc4-430f-9c55-7191cf7773db":{"title":"Essential Addons for Elementor Pro","condition":"essential-addons-elementor\/essential_adons_elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/essential-addons(-for)?-elementor(-lite)?\/.*(.min)?.js"],"icon_url":"","summary":"Start the carousel on page load","type":"plugin","id":"plugin:057757d0593ad9d2dc58124f0077a5df","is_default":0,"created_at":1724430280},"719b988f-0d60-40c2-ba46-88f943119cb1":{"title":"Essential Grid","condition":"essential-grid\/essential-grid.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/essential-grid\/","lightboxOptions"],"icon_url":"","summary":"Load grid without interaction.","type":"plugin","id":"plugin:c8e6c490f6438f566ade600c33531a85","is_default":0,"created_at":1724430960},"47d3d2ab-160d-4b07-ac25-8250b9e6a951":{"title":"EventON Lite","condition":"eventon-lite\/eventon.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/eventon-lite\/assets\/js\/(.*)"],"icon_url":"","summary":"Load the events calendar on page load","type":"plugin","id":"plugin:dafd19fa48a1fef890dc4348052fcb75","is_default":0,"created_at":1724430313},"219968d7-cf1f-4ee0-917a-db35dcc93a3e":{"id":"plugin:49ff465628fc3cb6d7f23ff81d9b8339","title":"FacetWP","type":"plugin","icon":"","exclusions":["\/facetwp\/assets\/js\/dist\/front.min.js","window.FWP_"],"is_default":0,"condition":"facetwp\/index.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"acce5701-5917-48d5-83ab-3e626aa420c5":{"id":"plugin:78a1c88a56fa957c802074b6418c6fac","title":"FacetWP - Flyout menu","type":"plugin","icon":"","exclusions":["\/facetwp-flyout\/assets\/js\/front.js"],"is_default":0,"condition":"facetwp-flyout\/facetwp-flyout.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"081461cf-dbd0-42f3-9557-10cdc16cf145":{"title":"FiboFilters Premium","condition":"fibofilters-pro\/fibofilters.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/fibofilters-pro\/build\/front-pro\/front.js"],"icon_url":"","summary":"Display filter without need for user interaction.","type":"plugin","id":"plugin:d9f62725f1470d35c3f220645bc2e473","is_default":0,"created_at":1724431277},"f2a5b95f-1a22-46d2-8b72-42a53e46ae3f":{"title":"FiboSearch - Ajax Search for WooCommerce","condition":"ajax-search-for-woocommerce\/ajax-search-for-woocommerce.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.js","\/wp-includes\/js\/jquery\/jquery-migrate.js","\/ajax-search-for-woocommerce\/assets\/js\/search.js","\/ajax-search-for-woocommerce\/assets\/js\/search.min.js"],"icon_url":"","summary":"Avoid search modals moving to the top when adding keyword in the input field.","type":"plugin","category":"analytics","id":"plugin:5d7555892a3a9968fde3fa3a335fc3d8","is_default":0,"created_at":1775676297},"7d1404e9-be76-449c-87aa-919557abe82d":{"title":"FlexBlock","condition":"flo-flex-builder\/flo-flex-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/flo-flex-builder\/dist\/flex-public.min.js","flexDebug"],"icon_url":"","summary":"Fire animations and show images on pageload.","type":"plugin","id":"plugin:ad46179e8b0584abaf52056b846da227","is_default":0,"created_at":1724431336},"b9c6a2dc-b226-4e2c-b85e-29ee55b8f751":{"title":"Fluent Forms","condition":"fluentform\/fluentform.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/fluentform\/public\/js\/(.*).js","\/fluentformpro\/public\/js\/(.*).js"],"icon_url":"","summary":"Fixes files upload field.\r\n\r\n*Requires exlcuding jQuery from JavaScript deferring as well","type":"plugin","id":"plugin:567a2b15db30ef6bd4904e4317139aac","is_default":0,"created_at":1724431366},"10874f8a-2855-4e80-bc46-e484589b76a8":{"title":"Flying Images","condition":"nazy-load\/flying-images.php","exclusions":["flyingImages"],"icon_url":"","summary":"Fixes images not being loaded until there is user interaction","type":"plugin","id":"plugin:e78c153103f698b2b34892332d6b3b62","is_default":0,"created_at":1724431386},"53958499-dacd-41d6-93bc-1534fe7d9eda":{"title":"FooGallery Premium","condition":"foogallery-premium\/foogallery.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/foobox-image-lightbox\/free\/js\/foobox.free.min.js","\/plugins\/foogallery-premium\/pro\/extensions\/default-templates\/shared\/js\/foogallery.min.js"],"icon_url":"","summary":"Prevents delay in the loading of product images.","type":"plugin","id":"plugin:5a0e40a6c5783856893b803189de1404","is_default":0,"created_at":1724431261},"7870d704-2024-4622-838c-fad37d5c6753":{"title":"Formidable Forms","condition":"formidable\/formidable.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","frmSigs","\/formidable-signature\/js\/frm.signature.min.js"],"icon_url":"","summary":"Prevent the delay of the function and the file that processes the signature.","type":"plugin","id":"plugin:ebb5efb57b19ae60e734e456ca2df3f8","is_default":0,"created_at":1724431311},"3f24f9b3-e59e-400f-a784-999f93f60fab":{"title":"Forminator","condition":"forminator\/forminator.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","forminatorFront","\/forminator\/build\/front\/front.multi.min.js","\/forminator\/assets\/js\/library\/jquery.validate.min.js","\/forminator\/assets\/forminator-ui\/js\/forminator-form.min.js","\/forminator\/assets\/forminator-ui\/js\/select2.full.min.js","\/wp-includes\/js\/jquery\/ui\/datepicker.min.js","\/wp-includes\/js\/dist\/vendor\/moment.min.js","\/forminator\/assets\/js\/library\/intlTelInput.min.js"],"icon_url":"","summary":"Display form without interaction","type":"plugin","category":"analytics","id":"plugin:0b08523445b8869a67ca40e777704692","is_default":0,"created_at":1769789399},"cef612ad-2a33-4e0c-b2d2-0831bb35e682":{"title":"Funnelforms Free","condition":"funnelforms-free\/Funnelforms-free.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/funnelforms-free\/res\/frontend\/scripts\/frontend.js"],"summary":"When Delay JavaScript Execution is enabled, the Form doesn\u2019t load.","icon_url":"","type":"plugin","category":null,"id":"plugin:2cc4ab9bdadb915b68d466b87f5f2934","is_default":0,"created_at":1750261265},"2e1a34f6-21cd-46d1-af05-8ba575170f44":{"title":"Gallery Slider for WooCommerce - Pro - Fix Product Gallery","condition":"woo-gallery-slider-pro\/woo-gallery-slider-pro.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/woo-gallery-slider-pro\/public\/js\/woo-gallery-slider-public.min.js","\/woo-gallery-slider-pro\/public\/js\/swiper-bundle.min.js","\/woo-gallery-slider-pro\/public\/js\/zoom.min.js","\/woo-gallery-slider-pro\/public\/js\/jquery.fancybox.min.js","\/woo-gallery-slider-pro\/public\/js\/video.min.js"],"icon_url":"","summary":"Makes the gallery to load at page load","type":"plugin","id":"plugin:04761f78cbc0a1ed05c65d7e20ddda5b","is_default":0,"created_at":1732823624},"3a600ded-3454-48fb-9811-46afa2ab3c05":{"title":"GDPR Cookie Compliance","condition":"gdpr-cookie-compliance\/moove-gdpr.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/gdpr-cookie-compliance\/dist\/scripts\/main.js"],"icon_url":"","summary":"Show the consent banner on page load.","type":"plugin","id":"plugin:5759bf0d47ac3457485314b381a9b528","is_default":0,"created_at":1724431440},"e21aaa5e-7354-471d-ab86-85f99f48830c":{"title":"GDPR Cookie Consent","condition":"webtoffee-gdpr-cookie-consent\/cookie-law-info.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/public\/js\/cookie-law-info-public.js","Cli_Data"],"icon_url":"","summary":"Show the consent banner on page load.","type":"plugin","id":"plugin:ffb40036ab0583218561de7c28c6bd9b","is_default":0,"created_at":1724431421},"1f8bdec1-9c4c-4080-8ac0-5f8b49967047":{"title":"GetPaid - Fix console errors","condition":"invoicing\/invoicing.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/invoicing\/vendor\/ayecode\/wp-ayecode-ui\/assets\/js\/select2.min.js","\/invoicing\/vendor\/ayecode\/wp-ayecode-ui\/assets\/js\/bootstrap.bundle.min.js"],"summary":"It fixes some errors with jQuery in the browser's console.","icon_url":"","type":"plugin","id":"plugin:6756935a144cf0a74b252db5f8229ee9","is_default":0,"created_at":1728404861},"c11ca4ea-1a23-49ee-9a6b-1e549de50ea2":{"title":"Getwid - Gutenberg Blocks","condition":"getwid\/getwid.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/jquery\/ui\/tabs.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js"],"icon_url":"","summary":"Fixes tabs when jQuery is excluded from Delay JavaScript Execution.","type":"plugin","id":"plugin:3877953c5ec1e66db92ad844ae8ebafc","is_default":0,"created_at":1724431639},"79b33eb9-bc92-4d8a-afd8-1c61e70bed8f":{"title":"GiveWP","condition":"give\/give.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/give\/assets\/dist\/js\/give.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","summary":"Closes the preloader.","type":"plugin","id":"plugin:0fb3af06fc5c710a670220b054c292c5","is_default":0,"created_at":1724431653},"3773bb33-b168-4f68-9963-512da24ac4da":{"title":"GoodLayers Core","condition":"goodlayers-core\/goodlayers-core.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/goodlayers-core\/plugins\/script.js","\/goodlayers-core\/include\/js\/page-builder.js"],"icon_url":"","type":"plugin","id":"plugin:5f124509a56ca2e0644246919ec70434","is_default":0,"created_at":1704734904},"2adabe9b-6e03-4a67-959f-492813d40f69":{"title":"Google Tag Manager for WooCommerce PRO","condition":"gtm-ecommerce-woo-pro\/gtm-ecommerce-woo-pro.php","exclusions":["\/gtm-ecommerce-woo-pro\/assets\/gtm-ecommerce-woo-pro.js"],"icon_url":"","summary":"Fire tracker on page load.","type":"plugin","id":"plugin:e54fd4313007b6fedf8ab4df0e05277a","is_default":0,"created_at":1724431759},"7bf261ac-89d4-492f-8a3d-1c5809b9579a":{"title":"Gravity Forms","condition":"gravityforms\/gravityforms.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/gravityforms\/","gform","recaptcha","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/plupload\/plupload.min.js","\/wp-includes\/js\/plupload\/moxie.min.js"],"icon_url":"","type":"plugin","id":"plugin:7a1c1606d094f6bff83c0ee155908367","is_default":0,"created_at":1694457903},"fbaf4a19-f675-441a-b75c-7fd748a59827":{"title":"Gravity Forms Page Transitions","condition":"gp-page-transitions\/gp-page-transitions.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/gp-page-transitions\/js\/"],"icon_url":"","summary":"To load the form without interaction - Gravity Forms one-click exclusion should also be checked.","type":"plugin","id":"plugin:53ef8d0ee1f9fdf0bbf87676e449eef5","is_default":0,"created_at":1724432081},"12340193-5c35-4b0d-b0bc-bea690cf1cae":{"title":"Green Forms","condition":"green-forms\/green-forms.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","leform.min.js","leform_customjs_handlers","leform_ajax_url"],"icon_url":"","summary":"Load forms without any delay","type":"plugin","id":"plugin:2f3112dd98c39aeb6bde618c9026a29f","is_default":0,"created_at":1724432097},"4d20b427-47cf-4cdf-91c7-ff53602d3b2a":{"id":"plugin:0eb769dddc58f998e913345841b1d0b3","title":"GTM4WP","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","dataLayer"],"is_default":0,"condition":"duracelltomi-google-tag-manager\/duracelltomi-google-tag-manager-for-wordpress.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"a2b3c237-728c-49d6-882a-e3885444e9b4":{"title":"GTranslate","condition":"gtranslate\/gtranslate.php","exclusions":["translate.google.com","googleTranslateElementInit"],"icon_url":"","summary":"To enable immediate translation on the page without user interaction","type":"plugin","id":"plugin:3b085ccda851ccf129d9506462f0cd65","is_default":0,"created_at":1724432146},"79dfc946-6b96-4b6d-bcaf-8cae6330581a":{"title":"GTranslate - Show language switcher on page load","condition":"gtranslate\/gtranslate.php","exclusions":["window.gtranslateSettings","\/gtranslate\/js\/dwf.js","\/gtranslate\/js\/flags.js"],"icon_url":"","summary":"To show language switcher on page load.","type":"plugin","category":"analytics","id":"plugin:0aedfaa0f543c47c4b0fcf57307c6691","is_default":0,"created_at":1737550549},"40cd9336-e73f-4a61-a7f6-27ec1ca6892c":{"title":"HBook","condition":"hbook\/hbook.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/hbook\/","hb_booking_form_data","hb_max_date"],"icon_url":"","summary":"Render the form on page load.","type":"plugin","id":"plugin:e1f17c1eac230219e6fec3ac07406a0d","is_default":0,"created_at":1724432162},"52cec6ac-f2a4-415f-83f4-ca0db789401d":{"title":"hCaptcha for WP","condition":"hcaptcha-for-forms-and-more\/hcaptcha.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","hcaptcha"],"summary":"Load hcaptcha without error on page load","icon_url":"","type":"plugin","category":null,"id":"plugin:19677c6ace86eadfd1269341071f3481","is_default":0,"created_at":1770201198},"192224c7-df72-4e3d-8f13-3206ac5b2e90":{"title":"Helper - OpenAI Chatbot for WordPress","condition":"\/helper\/index.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/helper\/js\/helper.min.js","mdpHelper"],"icon_url":"","summary":"Allow for chatbot icon load without user interaction.","type":"plugin","id":"plugin:07311d992a8a9d6af91e4766d2cb9ac9","is_default":0,"created_at":1724433592},"99cfbb2e-5678-42c2-928f-5cb09d7e43da":{"title":"HUSKY - Products Filter for WooCommerce","condition":"woocommerce-products-filter\/index.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-products-filter\/(.*)","woof"],"icon_url":"","summary":"Avoid console error (no impact on the functionality of WOOF)","type":"plugin","id":"plugin:269c5766fba124a838ac012a4b5a1a13","is_default":0,"created_at":1724432177},"b98640e1-c483-4032-99fe-4fa96093d261":{"title":"Hustle","condition":"wordpress-popup\/popover.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/underscore.min.js","\/wp-content\/plugins\/wordpress-popup\/"],"summary":"When Delay JavaScript Execution is enabled, the Popup doesn't load.","icon_url":"","type":"plugin","category":null,"id":"plugin:d9fc141690ff6b022b7f15b533daac7f","is_default":0,"created_at":1759750548},"3a964eac-4aeb-49a7-9fd6-4c31b2645dee":{"id":"plugin:d457acfec0f86aac6733f1446f4fc94f","title":"Instagram Feed Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/instagram-feed-pro\/js\/sbi-scripts.min.js","sb_instagram_js_options"],"is_default":0,"condition":"instagram-feed-pro\/instagram-feed.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8f9f4788-1b8d-468b-b291-1fcbd48618b9":{"id":"plugin:513b0c0ec8e12130af9b4bbbb17d7275","title":"Interactive Geo Maps","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/interactive-geo-maps-premium\/assets\/public\/map-service\/app.min.js","\/interactive-geo-maps\/assets\/public\/map-service\/app.js","iMapsData","cdn.amcharts.com\/lib\/"],"is_default":0,"condition":"interactive-geo-maps\/interactive-geo-maps.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cf650ca3-afa0-4a13-9e4f-f7cca19abac6":{"title":"Ivory Search","condition":"add-search-to-menu\/add-search-to-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/add-search-to-menu\/public\/js\/ivory-search.min.js"],"icon_url":"","type":"plugin","id":"plugin:7430e9d2c985ae0a3339a7b7e1acc318","is_default":0,"created_at":1677852711},"17a5dd54-1f5e-4d57-a56d-a8a970651954":{"title":"JetBlocks","condition":"jet-blocks\/jet-blocks.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-blocks\/assets\/js\/jet-blocks.min.js"],"icon_url":"","summary":"Enable dropdown on hover on the Cart and enable Mobile Sticky Header","type":"plugin","id":"plugin:1c8a1e1ba89a601f88654f094139b469","is_default":0,"created_at":1724432217},"b6f78c90-9823-459a-8dc1-1257e5f0d4e3":{"title":"JetBlog","condition":"jet-blog\/jet-blog.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/","\/elementor\/","\/jet-blog\/","ElementorProFrontendConfig","elementorFrontendConfig","hasJetBlogPlaylist"],"icon_url":"","summary":"News ticker to work on pageload (in addition to any other Jet exclusions).","type":"plugin","id":"plugin:dac9ec782180f33d0fcc7c4e0e569b9d","is_default":0,"created_at":1724432242},"e17173d8-6ef8-4e27-ba0f-379c9aea7eda":{"title":"JetElements","condition":"jet-elements\/jet-elements.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/jet-elements\/","hasJetBlogPlaylist","jetElements","\/wp-includes\/js\/jquery\/ui\/"],"icon_url":"","summary":"Load JetElements on page load.","type":"plugin","id":"plugin:0fe8895d1da5247b73a5d0b482df4ac4","is_default":0,"created_at":1724432253},"cfd77501-9c9e-4f11-b994-0178a592fc08":{"title":"JetEngine","condition":"jet-engine\/jet-engine.php","exclusions":["\/jet-engine\/"],"icon_url":"","type":"plugin","id":"plugin:bc998e71546860c8c7f70c45a6c18972","is_default":0,"created_at":1686208296},"f320c661-4a2b-4299-bada-110f9e931e3c":{"title":"JetFormBuilder - Load without interaction","condition":"jetformbuilder\/jet-form-builder.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/jetformbuilder\/","var JetFormBuilderSettings","\/wp-includes\/js\/dist\/i18n.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/jet-plugins\/jet-plugins.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig"],"summary":"The form is loaded without interaction, and styles are applied immediately.","icon_url":"","type":"plugin","id":"plugin:5ad00a39ed79f888daca19429bc59989","is_default":0,"created_at":1730300985},"36fed829-a2d9-41b5-94f6-2c3b9f07a94e":{"title":"JetMenu","condition":"jet-menu\/jet-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/","\/elementor\/","\/jet-blog\/assets\/js\/lib\/slick\/slick.min.js","\/jet-elements\/","\/jet-menu\/","elementorFrontendConfig","ElementorProFrontendConfig","hasJetBlogPlaylist","JetEngineSettings","jetMenuPublicSettings","\/jet-reviews\/assets\/js\/lib\/vue.min.js"],"icon_url":"","summary":"Mobile menu to show on page load.","type":"plugin","id":"plugin:433a3173f2d06f7d02c7b91c06ed215d","is_default":0,"created_at":1724432268},"580cfed7-f034-4e39-bc7a-cdd01923ce87":{"title":"JetPopup","condition":"jet-popup\/jet-popup.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/jet-popup\/assets\/js\/lib\/anime-js\/anime.min.js","\/jet-popup\/assets\/js\/jet-popup-frontend.js","\/jet-woo-builder\/","var jetPopupData","JetEngine.popupData"],"icon_url":"","summary":"To show the pop up","type":"plugin","category":"analytics","id":"plugin:51714cfdb43f231a1c93e7cffb1007ab","is_default":0,"created_at":1755872236},"d9cd2730-12e2-42d7-a082-6f0efcd466cc":{"title":"JetProductGallery","condition":"jet-woo-product-gallery\/jet-woo-product-gallery.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-woo-product-gallery\/assets\/lib\/swiper\/swiper.min.js","\/jet-woo-product-gallery\/assets\/js\/jet-woo-product-gallery.min.js","JetSwiper"],"icon_url":"","summary":"To avoid issues with the product gallery on the product page","type":"plugin","category":"analytics","id":"plugin:df3bc4b6a8a9f28a5ba24cb7496bbc72","is_default":0,"created_at":1740662940},"544aa37b-4d52-4182-99e8-abe23585da14":{"title":"JetReviews","condition":"jet-reviews\/jet-reviews.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-reviews\/assets\/js\/jet-reviews-frontend.js","\/jet-reviews\/assets\/js\/lib\/vue.min.js","jetReviewsWidget"],"icon_url":"","summary":"To show the reviews on the product page","type":"plugin","id":"plugin:5921fc95965ac7fccb7296957bd9abff","is_default":0,"created_at":1724432349},"963c7804-eede-4570-bd63-67066588b758":{"title":"JetSearch - Search results popup","condition":"jet-search\/jet-search.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/jet-search\/assets\/lib\/chosen\/chosen.jquery.min.js","\/jet-search\/assets\/js\/jet-search.js","\/jet-search\/assets\/lib\/jet-plugins\/jet-plugins.js"],"icon_url":"","summary":"To display the list of results when using the search box.","type":"plugin","id":"plugin:13e8760379022187de982df2226a5be4","is_default":0,"created_at":1724432367},"a8460089-34b4-4f8f-8694-5d92fa48aa82":{"title":"JetSmartFilters","condition":"jet-smart-filters\/jet-smart-filters.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/jet-smart-filters\/assets\/js\/public.js","jet-smart-filters-js-extra","\/jet-engine\/assets\/lib\/jet-plugins\/jet-plugins.js","jetOffcanvasInitialized"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the right filters doesn't load until user interaction.","type":"plugin","category":"analytics","id":"plugin:0cd63a514de1f1acb88e2bde65c4bc8d","is_default":0,"created_at":1756996542},"fe3c4915-6f8b-49b7-aa9c-c97b264d9f12":{"title":"JetSticky","condition":"jetsticky-for-elementor\/jetsticky-for-elementor.php","exclusions":["\/jetsticky-for-elementor\/"],"icon_url":"","summary":"Allows sticky menu and sidebar to be displayed","type":"plugin","id":"plugin:a346b60514ef52afeffc6e2ef2793da3","is_default":0,"created_at":1724432399},"853479dc-fff5-47cf-9a60-bf9b00f71fc4":{"title":"JetTabs for Elementor","condition":"jet-tabs\/jet-tabs.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/wp-content\/plugins\/jet-tabs\/assets\/js\/jet-tabs-frontend.min.js"],"icon_url":"","summary":"To make the tab functionality work correctly.","type":"plugin","id":"plugin:d887a6ffea25d759e8aecdb6b78917f7","is_default":0,"created_at":1724432416},"b7f89562-230c-4f63-8360-7aad6df31e02":{"title":"JetTricks","condition":"jet-tricks\/jet-tricks.php","exclusions":["\/jet-tricks\/"],"icon_url":"","summary":"To display animations.","type":"plugin","id":"plugin:829272546b040d5aaeeeaf976b6cd4ec","is_default":0,"created_at":1724432431},"90451e2a-553a-4496-9fa4-cffedbe69d43":{"title":"JetWoo Widgets For Elementor","condition":"jet-woo-builder\/jet-woo-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/jetwoo-widgets-for-elementor\/assets\/js\/jet-woo-widgets.js","\/jet-woo-builder\/assets\/js\/jet-woo-builder.min.js","\/jet-woo-builder\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Load JetWoo carousel on page load.","type":"plugin","id":"plugin:f44f3dbd09149f57db370e4132b057db","is_default":0,"created_at":1724432447},"944718c2-48c6-4f53-aaa2-460d07e033cc":{"title":"JetWooBuilder","condition":"jet-woo-builder\/jet-woo-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/elementor-pro\/","\/elementor\/","elementorFrontendConfig","ElementorProFrontendConfig","JetEngineSettings","\/jet-woo-builder\/","\/jet-woo-builder-custom-quantity-selectors-main\/assets\/js\/main.js"],"icon_url":"","summary":"Add quantity buttons to add to cart.","type":"plugin","id":"plugin:ed318a971f8a047bed5b02ad546a9c18","is_default":0,"created_at":1724432462},"b7807939-54f8-4d5c-8363-a42a154d9592":{"title":"Joinchat","condition":"creame-whatsapp-me\/joinchat.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/creame-whatsapp-me\/public\/js\/joinchat.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the icon to open new chat does not display for mobile unless we apply these exclusions.","type":"plugin","id":"plugin:1c3ec728d37052f3a3055d415618342f","is_default":0,"created_at":1727103514},"8cdeadfc-f686-4c58-bf01-8d6ad43dfef8":{"title":"Kadence Blocks Pro - Load Content","condition":"kadence-blocks-pro\/kadence-blocks-pro.php","exclusions":["\/plugins\/kadence-blocks-pro\/includes\/assets\/js\/aos.min.js"],"summary":"When Delay JavaScript Execution is enabled, the page content doesn't load until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:ea96ffb0858920541f6a6144f7d2289f","is_default":0,"created_at":1754052401},"46d50db6-61ae-4703-aeaa-39f12a46f872":{"title":"Kadence Slider","condition":"kadence-slider\/kadence-slider.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/kadence-slider\/js\/min\/ksp-min.js"],"summary":"When Delay JavaScript Execution is enabled, the slides don't show until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:6a6b1a4de6dc21770d6d044b7dd7a2e4","is_default":0,"created_at":1759413099},"f5b62f59-1dae-4cdf-ac3f-f5e846fc9918":{"id":"plugin:9562e253cd4ac2b1e1f70e32cb4e32dc","title":"Layer Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.utils.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.kreaturamedia.jquery.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.transitions.js","initLayerSlider"],"is_default":0,"condition":"LayerSlider\/layerslider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e2be718d-83a2-4fa0-bc98-f0df52be3dc1":{"title":"LoftLoader Pro","condition":"loftloader-pro\/loftloader-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","loftloader.min.js"],"icon_url":"","summary":"Prevent the page from getting stuck in the loader and load the page content without user interaction.","type":"plugin","id":"plugin:1425e2735306796fe1539d9184a77e10","is_default":0,"created_at":1724432664},"cfa18552-656e-453c-9e14-c07522dc6598":{"title":"MailUp for WordPress","condition":"mailup-email-and-newsletter-subscription-form\/mailup.php","exclusions":["\/mailup-email-and-newsletter-subscription-form\/public\/js\/mailup-public.js","mailup-js-extra"],"icon_url":"","summary":"Enables subscription from to be submitted","type":"plugin","id":"plugin:0bf67b8ba84771e1a367fe24590ef09c","is_default":0,"created_at":1724433004},"c5330c66-ba7b-45b1-87e4-ce590ab005dd":{"title":"Maintenance","condition":"maintenance\/maintenance.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/maintenance\/"],"icon_url":"","summary":"Removes the preload spinner without interaction.","type":"plugin","id":"plugin:10d0de28911c5f66463b9c8783f8148a","is_default":0,"created_at":1724433020},"62f6663a-a15f-4bca-b9b5-79f1770e2c5a":{"title":"MapifyLite- Show map on page load","condition":"mapifylite\/mapify_lite.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/mapifylite\/assets\/vendor\/leaflet-1.7.1\/leaflet.js","\/plugins\/mapifylite\/assets\/vendor\/leaflet\/markercluster\/leaflet.markercluster.js","\/plugins\/mapifylite\/assets\/vendor\/leaflet\/locatecontrol\/L.Control.Locate.min.js","\/plugins\/mapifylite\/assets\/vendor\/tooltip.js","\/plugins\/mapifylite\/assets\/js\/dist\/bundle.js","var map"],"icon_url":"","summary":"Load map on pageload.","type":"plugin","id":"plugin:48c30c0f37b64accf88126d4ef58e17b","is_default":0,"created_at":1724432876},"267aef71-afa0-4848-b6f8-3e1ca15c3a23":{"title":"Maps Marker Pro","condition":"maps-marker-pro\/maps-marker-pro.php","exclusions":["\/maps-marker-pro\/js\/mapsmarkerpro.js","var mapsMarkerPro"],"icon_url":"","summary":"Load map on pageload.","type":"plugin","id":"plugin:9460789bdfe77425c895f130991a4cb4","is_default":0,"created_at":1724432891},"b5a88b63-e906-49b3-8134-420139915ea6":{"title":"Master Popups","condition":"master-popups\/master-popups.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/master-popups\/assets\/public\/js\/master-popups-libs.min.js"],"icon_url":"","type":"plugin","id":"plugin:8fd7bd2c8b0a33e62798573abd12be63","is_default":0,"created_at":1681305305},"4be41549-bf4d-4c49-8346-0f8a3b88fdba":{"title":"Master Slider","condition":"master-slider\/master-slider.php","exclusions":["masterslider"],"icon_url":"","summary":"Prevents Master Slider to be initially hidden","type":"plugin","id":"plugin:de888634cc4bd51576eed319d5a528fd","is_default":0,"created_at":1724432981},"087bee18-7cd1-4c10-8acc-19e1b7c4f4cd":{"title":"Max Mega Menu","condition":"megamenu\/megamenu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/hoverIntent.min.js","\/megamenu\/js\/maxmegamenu.js","var megamenu"],"icon_url":"","summary":"For the Pro version this file may need to be excluded too:\r\n\r\n\/megamenu-pro\/assets\/public.js","type":"plugin","id":"plugin:b71309a89bf3c8b558b6fca5d6531919","is_default":0,"created_at":1724433045},"cf22f0b9-01f4-409e-8a93-ad6743095abd":{"title":"Meta Slider","condition":"ml-slider\/ml-slider.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ml-slider\/","var metaslider"],"icon_url":"","summary":"Shows the slider on page load","type":"plugin","id":"plugin:94a7bae84ef2816494be4af66c577bfc","is_default":0,"created_at":1724433102},"beb2e088-1354-42db-b803-13e725e8916c":{"title":"MetForm","condition":"metform\/metform.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/metform\/public\/assets\/js\/htm.js","\/metform\/public\/assets\/js\/app.js","\/wp-includes\/js\/dist\/vendor\/react-dom.min.js","\/wp-includes\/js\/dist\/vendor\/react.min.js"],"icon_url":"","summary":"Allows the form to load without user interaction","type":"plugin","category":"analytics","id":"plugin:0aa559d4482eb485c12cd1ad71418523","is_default":0,"created_at":1774038905},"bb2cbc0d-20da-415e-8218-c17f1db53579":{"title":"Monarch","condition":"monarch\/monarch.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","dt-place-monarch-icons"],"icon_url":"","type":"plugin","id":"plugin:b7335d6d6d5c5134ea10ac2d9b04226c","is_default":0,"created_at":1677853476},"a98d6a80-4610-4ede-bd33-c3e15bed0a95":{"id":"plugin:4f8651262425ef6d7c223c68a2ec2063","title":"Monster Insights","type":"plugin","icon":"","exclusions":["__gtagTracker","monsterinsights_frontend","\/google-analytics-for-wordpress\/assets\/js\/frontend-gtag.min.js"],"is_default":0,"condition":"google-analytics-for-wordpress\/googleanalytics.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"26e1a36e-7a03-449e-8ecc-e42c41ca291c":{"title":"Motion.page","condition":"motionpage\/motionpage.php","exclusions":["\/motionpage\/core\/includes\/assets\/js\/(.*)","\/motionpage\/core\/includes\/assets\/js\/gsap\/(.*)","\/motionpage\/assets\/js\/(.*)","\/motionpage\/assets\/js\/gsap\/(.*)"],"icon_url":"","summary":"Fixes any issue with Motion.page animations","type":"plugin","id":"plugin:f8fc66b302dec2327bdec0434a3b275b","is_default":0,"created_at":1724433236},"459fd663-7f80-45fd-8308-d3484981e161":{"title":"Ninja Forms","condition":"ninja-forms\/ninja-forms.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/ninja-forms\/assets\/js\/min\/front-end-deps.js","\/ninja-forms\/assets\/js\/min\/front-end.js","nf-"],"icon_url":"","summary":"Show the form on pageload","type":"plugin","id":"plugin:1d3ae9c1a96d5062616968b81eef319d","is_default":0,"created_at":1724433463},"c97440dd-7592-40e7-8c98-dac20d39808f":{"title":"Ninja Tables","condition":"ninja-tables\/ninja-tables.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ninja-tables(.*)\/assets\/","\/ninja-tables(.*)\/public\/","\/wp-includes\/js\/dist\/vendor\/moment.min.js","ninja_table_instance_","ninja_filter_","ninja_table_ready_init_table_id"],"icon_url":"","summary":"Show the table on pageload","type":"plugin","id":"plugin:723a588dcd49285ea9f7404e2379b47f","is_default":0,"created_at":1724433481},"ebc01f06-8c35-47fa-9c63-8959c5cbd915":{"title":"NotificationX","condition":"notificationx\/notificationx.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/notificationx\/assets\/public\/js\/(.*).js","notificationXArr"],"icon_url":"","summary":"Show the pop-up notification","type":"plugin","id":"plugin:f41a52ab1dd50a81cd3a5e341af0007c","is_default":0,"created_at":1724433494},"5fcd4cb7-1916-4995-973e-6d9def619e12":{"title":"Nova Blocks","condition":"nova-blocks\/nova-blocks.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/js\/dist\/dom-ready.min.js","has-loaded","wf-active","nova-blocks"],"summary":"Allows rendering the layout on page load for themes based on the Nova Blocks framework (Pixelgrade themes)","icon_url":"","type":"plugin","category":null,"id":"plugin:72b8526ce363ca9b7e5d82b245379cbb","is_default":0,"created_at":1733813516},"3aaf4a1b-591a-48b7-8d60-e6d65c0f94c9":{"title":"Ocean Elementor Widgets","condition":"ocean-elementor-widgets\/ocean-elementor-widgets.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ocean-elementor-widgets\/"],"icon_url":"","summary":"Avoid console errors (Elements added with this plugin should work)","type":"plugin","id":"plugin:be8fc72a8b8e8eb5958be13737cff47c","is_default":0,"created_at":1724433526},"90bfaf32-fa1d-4b48-bf64-3bf6f2c7c93b":{"title":"Ocean Extra - Load Preloader","condition":"ocean-extra\/ocean-extra.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ocean-extra\/includes\/preloader\/assets\/js\/preloader.min.js"],"summary":"When DJE is enabled, Ocean Extra preloader is not loaded until user interaction on the page.","icon_url":"","type":"plugin","category":null,"id":"plugin:1584fd7b07ef3eed359694c0f3046931","is_default":0,"created_at":1754297770},"f053a7d3-62b0-4312-b0ca-6ff63380eb0b":{"title":"One Click Accessibility","condition":"pojo-accessibility\/pojo-accessibility.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pojo-accessibility\/assets\/js\/app.min.js"],"icon_url":"","summary":"Allow One Click Accessibility to work on all pages","type":"plugin","id":"plugin:1a14afe852fefe7b22ccad3893672a29","is_default":0,"created_at":1724433541},"61e11800-48a9-4354-8a4c-ac9a2b4b033a":{"title":"OoohBoi Steroids for Elementor","condition":"ooohboi-steroids-for-elementor\/ooohboi-steroids.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ooohboi-steroids-for-elementor\/"],"icon_url":"","summary":"Display OohhBoi elements on page load","type":"plugin","id":"plugin:b9ed0fe6f2cdbd305691a6b857f4b3dc","is_default":0,"created_at":1724433511},"560b78a2-f051-490b-9dc6-a602dece0d81":{"title":"Optimole","condition":"optimole-wp\/optimole-wp.php","exclusions":["optimoleData"],"icon_url":"","summary":"To fire excluded JavaScript files served through the Optimole CDN","type":"plugin","id":"plugin:f1ff18a3e04c4e0995fca9cabffe57a7","is_default":0,"created_at":1724433610},"b0fda458-4bf2-41e9-a159-60d4bb6102a6":{"title":"OSM - OpenStreetMap","condition":"osm\/osm.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/osm\/js\/OL\/","\/osm\/js\/osm-v3-plugin-lib.js","vectorM"],"icon_url":"","summary":"Display the map and avoid console errors.","type":"plugin","id":"plugin:48ec18bd3f59772d98f85dddab75e305","is_default":0,"created_at":1724433624},"3743ed67-e0d1-4243-bb1f-ee48a445dd10":{"title":"OxyExtras","condition":"oxyextras\/plugin.php","exclusions":["vime","vime.esm.js"],"icon_url":"","summary":"When using Pro Media Player","type":"plugin","id":"plugin:9eacf0b76484af0259cd788f4923f20c","is_default":0,"created_at":1724433698},"52a21e27-af5b-4476-8d6d-54c323fd1443":{"title":"Oxygen Builder","condition":"oxygen\/functions.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/component-framework\/vendor\/aos\/aos.js","AOS.init","oxygen_init_pro_menu","oxy-pro-menu-show-dropdown","oxy-shape-divider","oxygenVSBInitToggleJs"],"icon_url":"","summary":"When using the \"Pro Menu\" element.\r\nPrevents incorrect positioning of the Shape Divider on page load\r\nAllow tabs toggles to be closed when the page loads","type":"plugin","id":"plugin:e852555c4b4789d78a96d76f503b3262","is_default":0,"created_at":1724433680},"ebd282b9-e175-4b83-90a2-fe12389ccd11":{"id":"plugin:6f9419e58ec86c94e7698aaaaf9dc715","title":"PageLoader by Bonfire","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pageloader-by-bonfire\/pageloader.js","bonfire-pageloader-overlay"],"is_default":0,"condition":"pageloader-by-bonfire\/pageloader-by-bonfire.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"0baf6353-aa70-41a9-a3bc-d89870a5839b":{"title":"PDF Embedder","condition":"pdf-embedder\/pdf_embedder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pdf-embedder\/js\/(.*).js"],"icon_url":"","summary":"Load the PDF's without user interaction.\r\nPlease note that if Defer Javascript Execution is enabled, you also need to exclude these files from being deferred.","type":"plugin","id":"plugin:3a4c4518eb0f60108ab4934fab27d335","is_default":0,"created_at":1724433747},"cba51ec1-87cc-44eb-b12b-d652e3446507":{"title":"Perfect Brands for WooCommerce","condition":"perfect-woocommerce-brands\/perfect-woocommerce-brands.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/perfect-woocommerce-brands\/assets\/lib\/slick\/slick.min.js","\/perfect-woocommerce-brands\/assets\/js\/functions-frontend.min.js"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:4f90aca5957cccbf623e3bbc31afa204","is_default":0,"created_at":1724433762},"808e7a4e-025c-4fae-bf82-de3716e5eb0d":{"title":"Photonic","condition":"photonic\/photonic.php","exclusions":["\/photonic\/include\/js\/front-end\/module\/photonic-baguettebox.min.js"],"icon_url":"","summary":"Display the gallery without user interaction.","type":"plugin","id":"plugin:84fe214646388d7c021dda25003ac165","is_default":0,"created_at":1724434241},"936aff7d-a8ac-4473-a7b5-4b1611b6c557":{"title":"Pixel Caffein","condition":"pixel-caffeine\/pixel-caffeine.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/pixel-caffeine\/build\/frontend.js","aepc_pixel"],"icon_url":"","summary":"Fire the tracker on pageload.","type":"plugin","id":"plugin:6838be282f853f71be282783cb1c162b","is_default":0,"created_at":1724434253},"ab3a4ef5-2732-4b46-a7c3-17b4e9405cd1":{"title":"Pixel Manager for WooCommerce","condition":"woocommerce-pixel-manager-pro\/woocommerce-pixel-manager.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/woocommerce-pixel-manager-pro\/js\/public\/","wpm"],"icon_url":"","summary":"Fire the tracker on pageload.","type":"plugin","id":"plugin:afe0eb7c64d4556a7111c56dd8c4d307","is_default":0,"created_at":1724434270},"2774f964-50b2-425e-8a30-0a02f421b7e4":{"title":"Popup Builder","condition":"popup-builder\/popup-builder.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/popup-builder\/public\/js\/(.*).js","\/popupbuilder-exit-intent\/public\/javascript\/ExitIntent.js","var sgpbPublicUrl","SGPB_POPUP_PARAMS"],"icon_url":"","summary":"Show popup on exit","type":"plugin","id":"plugin:38d4b2986868f543639cd1ebc3e510aa","is_default":0,"created_at":1724433776},"82dbb1e5-31f9-43d7-b522-52819aa49ba5":{"title":"Popup Maker","condition":"popup-maker\/popup-maker.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/pum\/pum-site-scripts.js","pum","\/plugins\/popup-maker\/assets\/js\/site.min.js"],"icon_url":"","summary":"Show popup on one click","type":"plugin","id":"plugin:786717922362642f34a7ff58e919bd95","is_default":0,"created_at":1724433839},"48e08305-1f1c-4ef4-9f13-24af1b155abc":{"title":"PowerPack Addons for Elementor","condition":"powerpack-lite-for-elementor\/powerpack-lite-elementor.php","exclusions":["\/powerpack-lite-for-elementor\/assets\/js\/min\/frontend.min.js"],"icon_url":"","summary":"Show animations","type":"plugin","id":"plugin:17831cbb64e469c7f66224c8c63d0a58","is_default":0,"created_at":1724433893},"e037ae2f-e36b-4f1a-ada8-eb8fde6746f2":{"title":"Preloader Plus","condition":"preloader-plus\/preloader-plus.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/preloader-plus\/(.*)"],"icon_url":"","summary":"Prevents the preloader from being stuck until there's user interaction","type":"plugin","id":"plugin:80e1283ea1afead3ca904fad792643c5","is_default":0,"created_at":1724434032},"90fed478-e89a-455c-8371-836bee58fb81":{"title":"Premium Addons for Elementor","condition":"premium-addons-for-elementor\/premium-addons-for-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/premium-addons.min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/isotope.min.js","\/premium-addons-elementor\/pa-frontend-(.*).min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/slick.min.js","\/premium-addons-pro\/assets\/frontend\/min-js\/tooltipster.min.js","window.scopes_array","lottie.min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/premium-nav-menu.min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/typed.min.js","\/premium-addons-pro\/assets\/frontend\/min-js\/imgcompare.min.js","\/premium-addons-pro\/assets\/frontend\/min-js\/event-move.min.js"],"icon_url":"","summary":"The above will cover:\r\n\r\n- Make equal height work\r\n- Make filters work\r\n- Make lottie animations work\r\n- Make the testimonials' carousel work\r\n- Allow Animated Text to load without User interaction\r\n- Allow Image comparison to show","type":"plugin","category":"analytics","id":"plugin:debbfbbcbdf9ffb465bbc40008d99f02","is_default":0,"created_at":1744729898},"24bb14b1-f934-4f9d-adbd-4e186e0a0ecd":{"title":"Premium Addons PRO","condition":"premium-addons-pro\/premium-addons-pro-for-elementor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/premium-addons-pro\/assets\/frontend\/min-js\/premium-badge.min.js"],"icon_url":"","summary":"- Allow Global badges to show","type":"plugin","category":"analytics","id":"plugin:c7220a8a2a42faf4072977c623bc88c7","is_default":0,"created_at":1744729892},"7e43c261-77be-48fc-b25a-8953a654ae85":{"title":"Presto Player","condition":"presto-player\/presto-player.php","exclusions":["\/wp-includes\/js\/dist\/vendor\/regenerator-runtime.min.js","\/presto-player\/dist\/components\/web-components\/web-components.esm.js","\/presto-player\/src\/player\/player-static.js","var player","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","summary":"Load the video player","type":"plugin","id":"plugin:100a0382fcf3d1b6b22da928bce46ea8","is_default":0,"created_at":1724434113},"3d6f509f-d040-4279-9a2f-a4e6eae1e9df":{"title":"Price Based on Country for WooCommerce Pro","condition":"woocommerce-price-based-country-pro-addon\/woocommerce-price-based-country-pro-addon.php","exclusions":["\/woocommerce-product-price-based-on-countries\/assets\/js\/ajax-geolocation.min.js","\/woocommerce-price-based-country-pro-addon\/assets\/js\/currency-switcher.min.js","add-to-cart.min.js","cart-fragments.min.js"],"icon_url":"","summary":"To load the prices and currency switcher without interaction","type":"plugin","id":"plugin:c0fce700121492b566517e68301db382","is_default":0,"created_at":1724434128},"b970bc8a-bcbe-4d08-8ac0-a6853ab3f036":{"title":"Prime Slider","condition":"bdthemes-prime-slider-lite\/bdthemes-prime-slider.php","exclusions":["\/plugins\/bdthemes-prime-slider-lite\/assets\/js\/bdt-uikit.min.js"],"icon_url":"","summary":"Display slider without interaction","type":"plugin","id":"plugin:f1ecfe258440b371124999ca3bfbfff3","is_default":0,"created_at":1724434141},"e5458963-f167-4b68-88e4-77dd39af2842":{"title":"PRO Elements","condition":"pro-elements\/pro-elements.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pro-elements\/"],"icon_url":"","summary":"Fixes functions execution when the jQuery library is already excluded","type":"plugin","id":"plugin:29ea8f4dd72f5a5c5927917fb0665a05","is_default":0,"created_at":1724434176},"b119ad72-f498-4576-bb71-9e6d8c37b68f":{"title":"Product Filter by WBW (for WooCommerce)","condition":"woo-product-filter\/woo-product-filter.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/wp-content\/plugins\/woo-product-filter\/modules\/woofilters\/js\/frontend.woofilters.js","\/woofilters\/js\/frontend.multiselect.js","\/wp-includes\/js\/jquery\/ui\/mouse.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/jquery\/ui\/slider.min.js","opened closed"],"icon_url":"","summary":"Resolves issue where the product filter won't load on the page, there's a 'loading' gif stuck in its place, and there's a console error.","type":"plugin","category":"analytics","id":"plugin:e57ad91e0d94fab011353af544873743","is_default":0,"created_at":1743105367},"7b779aca-e497-4da3-8e51-fa12837d15ab":{"title":"Product Filters for WooCommerce","condition":"woocommerce-product-filters\/woocommerce-product-filters.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-product-filters\/","\/woocommerce\/assets\/js\/accounting\/accounting.min.js","\/wp-includes\/js\/jquery\/ui\/","wcpf-load-project","WCPFData"],"icon_url":"","summary":"Make the filters work","type":"plugin","id":"plugin:719469f1c977f7109d3d6ee21ecd5a16","is_default":0,"created_at":1724434226},"2b2a51f2-bd47-4591-92d8-4a690bce5d99":{"title":"Product Gallery Slider for WooCommerce","condition":"twist\/twist.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/twist\/assets\/js\/slick.min.js","wpgs-public-js-after"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:a898898b2b0ea2cd82e20a6d3a3aa47b","is_default":0,"created_at":1724434162},"badb569e-f821-4f90-b2c7-69c286c1bda5":{"title":"Product Gallery Slider for WooCommerce By Codeixer - Fix Product Gallery","condition":"woo-product-gallery-slider\/woo-product-gallery-slider.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/woo-product-gallery-slider\/assets\/js\/slick.min.js","\/woo-product-gallery-slider\/assets\/js\/wpgs.js"],"summary":"Show Product Gallery on page load","icon_url":"","type":"plugin","category":null,"id":"plugin:d7fe72709580a4c9b3d23e482485ed0d","is_default":0,"created_at":1746519887},"9b63d036-595f-477b-918e-049121c29765":{"title":"Product Slider for WooCommerce","condition":"woo-product-slider\/main.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/woo-product-slider\/src\/Frontend\/assets\/js\/swiper.min.js","\/woo-product-slider\/src\/Frontend\/assets\/js\/scripts.min.js"],"summary":"When Delay JavaScript Execution is enabled, the product sliders don't load until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:e8da84c8281e41723851607361a77a92","is_default":0,"created_at":1738076099},"062c5be3-e5ea-4958-9619-44e3410f237e":{"title":"Product Video Gallery for Woocommerce","condition":"product-video-gallery-slider-for-woocommerce\/product-video-gallery-slider-for-woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/product-video-gallery-slider-for-woocommerce\/public\/js\/nickx.front.js","\/product-video-gallery-slider-for-woocommerce\/public\/js\/swiper-bundle.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the video gallery slider doesn't work until user interaction - images don't slide and thumbs appear much larger than they should.","type":"plugin","category":"analytics","id":"plugin:bbc653a91f0635cd2edb0b741aa62b85","is_default":0,"created_at":1767792522},"34d225a4-688c-476b-846b-420774160d6b":{"id":"plugin:e0b123d324c6fc85b8682660c34f8829","title":"Rank Math SEO","type":"plugin","icon":"","exclusions":["local_ga_js"],"is_default":0,"condition":"seo-by-rank-math\/rank-math.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"02305ca0-2c2a-4eef-a802-b8a942771ecc":{"title":"Retainful","condition":"retainful-next-order-coupon-for-woocommerce\/retainful-next-order-coupon-for-woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/retainful-next-order-coupon-for-woocommerce\/src\/premium\/assets\/js\/atc-popup.min.js","\/retainful-next-order-coupon-for-woocommerce\/src\/premium\/assets\/js\/exit-intent-popup.js","retainful.com","rnoc-add-to-cart-js-before","rnoc_redirect_coupon_popup"],"icon_url":"","summary":"Show the pop-up","type":"plugin","id":"plugin:f9fdee19ba6aed961d96d86e1521a761","is_default":0,"created_at":1724434370},"b4055250-5813-400f-b663-d390fee989e4":{"title":"Revolution Slider","condition":"revslider\/revslider.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/revslider\/public\/assets\/js\/","\/revslider\/sr6\/assets\/js\/","\/revslider-(.*)-addon\/","setREVStartSize","rev_slider_","revslider_","window.RS_MODULES","\/revslider\/public\/js\/libs\/tptools.js","\/revslider\/public\/js\/sr7.js","SR7","_tpt.R.fonts.domFonts"],"icon_url":"","summary":"Show the slider on page load","type":"plugin","category":"analytics","id":"plugin:d6a4d07d1b4022d886df52322dcd8a6f","is_default":0,"created_at":1770043380},"0b4e061a-b366-4d5a-a00e-bded4b107133":{"title":"Royal Elementor Addons","condition":"royal-elementor-addons\/wpr-addons.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/royal-elementor-addons\/assets\/js\/frontend.min.js","\/royal-elementor-addons\/assets\/js\/lib\/jarallax\/jarallax.min.js","\/royal-elementor-addons\/assets\/js\/lib\/parallax\/parallax.min.js","\/royal-elementor-addons\/assets\/js\/lib\/slick\/slick.min.js"],"icon_url":"","summary":"Fixes mobile menu not opening","type":"plugin","category":"analytics","id":"plugin:c4b464373716d7ac8e3cfb019aaa6102","is_default":0,"created_at":1778531519},"1b19ec89-171a-4f85-8c4b-b1bcfc6b1433":{"id":"plugin:5e3f85d8c82cc184b945415d1a862601","title":"Sassy Social Share","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/sassy-social-share\/public\/js\/sassy-social-share-public.js","heateorSssLoadEvent"],"is_default":0,"condition":"sassy-social-share\/sassy-social-share.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"f5899925-2ab7-43b6-abc4-51b76d664ca6":{"title":"Scrollsequence","condition":"scrollsequence-pro\/scrollsequence-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/scrollsequence-pro\/public\/js\/gsap__premium_only.js","\/scrollsequence-pro\/public\/js\/gsap-scrolltrigger__premium_only.js","\/scrollsequence-pro\/public\/js\/ssq-lib__premium_only.js","scrollsequence-input-script"],"icon_url":"","summary":"Show images and animation on pageload","type":"plugin","id":"plugin:3df51830b6b80668fc342c8dcea495cf","is_default":0,"created_at":1724434606},"043827fc-3df8-45d6-9cd2-14fbe962987a":{"title":"ShiftNav Pro - Responsive Mobile Menu","condition":"shiftnav-pro\/shiftnav.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shiftnav-pro\/assets\/js\/shiftnav(.*).js"],"icon_url":"","summary":"Displays without interaction.","type":"plugin","id":"plugin:9d60b5d2de4d828b78c7b088024377d6","is_default":0,"created_at":1724434657},"bcbaf240-e76f-4620-b7d5-4852c46d4be7":{"title":"ShiftNav \u2013 Responsive Mobile Menu","condition":"shiftnav-responsive-mobile-menu\/shiftnav-responsive-mobile-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shiftnav-responsive-mobile-menu\/"],"icon_url":"","summary":"Displays without interaction.","type":"plugin","id":"plugin:56279bd768c8f27ad1972b6774738bcf","is_default":0,"created_at":1724434651},"bbe0543b-b5af-467b-a90d-e2975d892d8d":{"title":"Short Pixel Adaptive Image","condition":"shortpixel-adaptive-images\/short-pixel-ai.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shortpixel-adaptive-images\/assets\/js\/ai(.*).min.js","spai_settings"],"icon_url":"","type":"plugin","id":"plugin:1bc7ac87d8ab2301a1b904919dc7a798","is_default":0,"created_at":1704734942},"543ab43a-6bd3-4948-a09e-3b95e7c9209d":{"title":"Showcase IDX","condition":"showcase-idx\/showcaseidx.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","SIDX","search.showcaseidx.com\/js\/app-(.*).js","cdn.shortpixel.ai"],"icon_url":"","summary":"Prevents requiring double click on iOS to use filters.\r\n\r\nExclusion when the option New AI engine is enabled (You don't need the above, only this one):\r\n\r\ncdn.shortpixel.ai","type":"plugin","id":"plugin:ce4dea8ddc3caa8d00e95cec3202d32a","is_default":0,"created_at":1724434768},"a16bcab7-1169-46b9-a425-b091478d8312":{"title":"Side Cart WooCommerce","condition":"side-cart-woocommerce\/xoo-wsc-main.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/plugins\/woocommerce\/assets\/js\/frontend\/add-to-cart.min.js","\/plugins\/woocommerce\/assets\/js\/jquery-blockui\/jquery.blockUI.min.js","\/plugins\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js"],"icon_url":"","summary":"Makes cart icon work to slide in the cart menu.","type":"plugin","id":"plugin:3ea7d9f75ad03620b0bce2517bd5b8d1","is_default":0,"created_at":1724434681},"521f748e-cf09-4019-bd28-b52daef5f16f":{"title":"Simple Banner","condition":"simple-banner\/simple-banner.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/simple-banner\/","simpleBannerScriptParams"],"icon_url":"","summary":"Show the banner on pageload.","type":"plugin","id":"plugin:7843983bf90dbae16c6e889382c71b23","is_default":0,"created_at":1724434695},"76026e82-d9cf-482c-b480-55c57693a184":{"title":"Site Kit by Google","condition":"google-site-kit\/google-site-kit.php","exclusions":["google-analytics.com\/analytics.js","ga\\( '","ga\\('","\/gtag\/js","gtag\\(","\/gtm.js"],"icon_url":"","summary":"Fixes issues with Google Analytics.","type":"plugin","id":"plugin:b6825f971d35a5515d095564a2e40936","is_default":0,"created_at":1724434707},"4f9be7dd-fa19-401c-a5a5-81654990f9c4":{"title":"SiteOrigin Widgets Bundle - Load images","condition":"so-widgets-bundle\/so-widgets-bundle.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/so-widgets-bundle\/js\/slider\/jquery.slider.min.js","\/so-widgets-bundle\/js\/jquery.cycle.min.js","\/so-widgets-bundle\/js\/jquery.cycle.swipe.min.js","\/so-widgets-bundle\/js\/sow.jquery.fittext.min.js","\/so-widgets-bundle\/js\/lib\/jquery.fitvids.min.js","\/siteorigin-panels\/js\/styling.min.js","siteorigin-panels-before-js","page_id"],"icon_url":"","summary":"Load the images on the page load.","type":"plugin","id":"plugin:3968480c93d7f92ed1cb78a54b47fc9f","is_default":0,"created_at":1724434720},"79c458d7-f7f7-4072-919d-ad337bde6ae3":{"title":"Slick Menu","condition":"slick-menu\/slick-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/slick-menu\/"],"icon_url":"","summary":"Show menu on pageload","type":"plugin","id":"plugin:5ce5dfecdc9d3292c69a1413bbd17d3c","is_default":0,"created_at":1724434809},"99cf4942-49ea-4687-b156-405ed1ce1cfa":{"title":"Slide Anything","condition":"slide-anything\/slide-anything.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/slide-anything\/owl-carousel\/owl.carousel.min.js","owl_goto.trigger"],"icon_url":"","summary":"Show slider without user interaction","type":"plugin","id":"plugin:fff874cc48b80940210228c975df395c","is_default":0,"created_at":1724434788},"dd0ea584-0c99-4c30-b46d-da35b94c9f0a":{"title":"Slider by Soliloquy","condition":"soliloquy-lite\/soliloquy-lite.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","soliloquy-min.js","soliloquy_slider"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:ffb5f8cc0ea17886dbd05f601ca3eec0","is_default":0,"created_at":1724434937},"20efe964-7ba6-411e-98eb-f2f9bc75dd5a":{"title":"Slider Revolution","condition":"slider-revolution\/revslider.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/revslider\/public\/assets\/js\/","\/revslider\/sr6\/assets\/js\/","\/revslider-(.*)-addon\/","setREVStartSize","rev_slider_","revslider_","window.RS_MODULES","\/slider-revolution\/public\/js\/libs\/tptools.js","\/slider-revolution\/public\/js\/sr7.js","SR7","_tpt.R.fonts.domFonts"],"summary":"- Load Slider without user interaction\r\n- For new Slider Revolution version, the \/revslider\/public\/js\/libs\/tptools.js and \/revslider\/public\/js\/sr7.js were updated to: \/slider-revolution\/public\/js\/sr7.js and \/slider-revolution\/public\/js\/libs\/tptools.js. \r\n- The plugin slug was also updated from revslider\/revslider.php to slider-revolution\/revslider.php.\r\n- This backend entry is to allow compatiblity for the new version.","icon_url":"","type":"plugin","category":null,"id":"plugin:41ff48dde3715a47d1ee63fdac32cc4a","is_default":0,"created_at":1770042676},"ecb2fffc-d289-4f68-ae94-71131f17deee":{"title":"Smart Slider 3","condition":"smart-slider-3\/smart-slider-3.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/smart-slider-3\/(.*).js","_N2"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:2f373822dceb191c31c8ad2183d51869","is_default":0,"created_at":1724434826},"284ede43-bf80-419e-8414-46c26cb746f0":{"title":"Smart Slider 3 Pro","condition":"nextend-smart-slider3-pro\/nextend-smart-slider3-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/SmartSlider3\/(.*).js","_N2"],"icon_url":"","summary":"Show the slider on pageload","type":"plugin","id":"plugin:720ec9fbbd8a52ce525959a68a5310b3","is_default":0,"created_at":1724434836},"4f3a2a29-eb96-42b5-a6ba-38442123d077":{"title":"Spectra - Lottie","condition":"ultimate-addons-for-gutenberg\/ultimate-addons-for-gutenberg.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ultimate-addons-for-gutenberg\/assets\/js\/lottie.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/uagb-bodymovin.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/table-of-contents.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/tabs.min.js","UAGBLottie"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the Lottie animation doesn't load.","type":"plugin","category":"analytics","id":"plugin:138e02cf173082dfff34d8d50b5b1b5f","is_default":0,"created_at":1755608389},"be70034f-def5-4771-9b3f-662eb218da2a":{"title":"Spectra - Show Gallery Images","condition":"ultimate-addons-for-gutenberg\/ultimate-addons-for-gutenberg.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ultimate-addons-for-gutenberg\/assets\/js\/spectra-animations.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/post.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/aos.min.js","\/slick.min.js","\/imagesloaded.min.js","UAGBPostCarousel"],"summary":"Show the gallery on pageload","icon_url":"","type":"plugin","category":"analytics","id":"plugin:ca362d462a44a9622dd8542db373d3d6","is_default":0,"created_at":1738865101},"5ed91dc6-b172-4d45-8406-71689bdb1fef":{"title":"Spectra - Slider","condition":"ultimate-addons-for-gutenberg\/ultimate-addons-for-gutenberg.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/uploads\/uag-plugin\/assets\/(.*)\/uag-js-(.*).js","\/ultimate-addons-for-gutenberg\/assets\/js\/swiper-bundle.min.js","\/ultimate-addons-for-gutenberg\/assets\/js\/uagb-button-child.min.js"],"summary":"While Delay JavaScript Execution is enabled, sliders only show the first slide and do not autoplay.","icon_url":"","type":"plugin","category":null,"id":"plugin:f263043f4ed2c766c758fb139b6d50a0","is_default":0,"created_at":1738865295},"c3334c29-4160-42df-a1ce-f8aeeaee8668":{"title":"Super Socializer","condition":"super-socializer\/super_socializer.php","exclusions":["theChamp","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:660defe26748470c3a47366cd4012579","is_default":0,"created_at":1677853633},"f18b4242-fe3f-4e2b-bfc9-ac2fb3939a90":{"title":"Superfly Menu","condition":"superfly-menu\/main.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate((.*?)(.min?)?).js","\/superfly-menu\/includes\/vendor\/looks_awesome\/icon_manager\/js\/md5.js","\/superfly-menu\/includes\/vendor\/looks_awesome\/icon_manager\/js\/util.js","\/superfly-menu\/js\/public.min.js","\/superfly-menu\/js\/superfly-menu.js","window.SFM_is_mobile","var SFM_skew_disabled","var SFM_template"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the menu don't load until user interaction.","type":"plugin","category":"analytics","id":"plugin:ccb15175093bc6c437b78797f0698a7b","is_default":0,"created_at":1756121213},"1a05c00a-8562-45bc-80e8-987a4574b1c9":{"title":"Symplr Ads","condition":"symplr-ads\/symplr-plugin.php","exclusions":["\/symplr-ads\/","cdns.symplr.de"],"icon_url":"","summary":"Loads Ads right away","type":"plugin","id":"plugin:3b6d39e28a87e86c4659491e2368ff61","is_default":0,"created_at":1724442756},"858d2d7f-bdac-4d27-ba26-baa9ace96ba4":{"title":"Tabby Responsive Tabs","condition":"tabby-responsive-tabs\/tabby-responsive-tabs.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/tabby-responsive-tabs\/js\/tabby.js","RESPONSIVEUI"],"icon_url":"","summary":"Load tabs without delay","type":"plugin","id":"plugin:7d93008296bb5c7c43d4cba185ed2632","is_default":0,"created_at":1724442869},"caf3b2cc-5a9f-450a-b680-99987b342417":{"title":"tagDiv - Product Filters","condition":"td-woo\/td-woo.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/plugins\/td-composer\/legacy\/Newspaper\/js\/tagdiv_theme.min.js","\/plugins\/td-woo\/assets\/js\/tdwLoop.js","\/plugins\/td-woo\/assets\/js\/tdwFilter.js","\/plugins\/td-woo\/assets\/js\/tdwMenuCart.js","\/plugins\/td-woo\/assets\/js\/tdwFiltersList.js","tds_more_articles_on_post_pages_distance_from_top"],"summary":"When Delay JavaScript Execution is enabled, the product filters feature won't function.","icon_url":"","type":"plugin","category":null,"id":"plugin:aae992c4a586cfcfd481d64047480570","is_default":0,"created_at":1753968799},"26c21e36-9d91-4395-a1e2-3641c9ddea0b":{"title":"tagDiv - Product Variation Switches","condition":"td-woo\/td-woo.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/plugins\/td-woo\/assets\/js\/tdwVariationSwitches.js"],"summary":"When Delay JavaScript Execution is enabled, product variations don't work.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:6cd05d959fa42829c9135ffc13a9d715","is_default":0,"created_at":1754079213},"e44a5c93-bb77-4624-a121-d846905137ea":{"title":"The Plus Addons for Elementor","condition":"the-plus-addons-for-elementor-page-builder\/theplus_elementor_addon.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/theplus-addons\/(.*)"],"icon_url":"","summary":"Start animations on page load","type":"plugin","id":"plugin:2f563bbb7e92363ec3fb2989a1c7dffe","is_default":0,"created_at":1724442902},"2bbac961-b000-4802-ae97-d52472ec6750":{"title":"The Plus Addons for Elementor Premium","condition":"theplus_elementor_addon\/theplus_elementor_addon.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/plugins\/theplus_elementor_addon\/","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig"],"icon_url":"","summary":"Solve issues with sliders and tabs","type":"plugin","id":"plugin:6e127deaaeefbe57ff945b1f9e274518","is_default":0,"created_at":1724442911},"c3b5d7fd-a1e0-4aca-a0b6-405018a37266":{"title":"The Post Grid","condition":"the-post-grid\/","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","the-post-grid"],"icon_url":"","summary":"Makes the content of single post appearing immediately","type":"plugin","id":"plugin:93c3354976453458cf67f8ec0fdfce5a","is_default":0,"created_at":1724442928},"666b45e8-749c-4140-bd17-e1cd589e03ee":{"title":"ThemeREX Addons","condition":"trx_addons\/trx_addons.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/trx_addons\/js\/__scripts-full.js","\/trx_addons\/components\/cpt\/layouts\/shortcodes\/menu\/superfish.min.js","\/trx_addons\/js\/trx_addons.utils.js","\/trx_addons\/js\/tweenmax\/GSAP\/3.12.2\/gsap.min.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/NavMenu\/assets\/NavMenu.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/Counter\/assets\/odometer\/odometer.min.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/Counter\/assets\/Counter.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/AdvancedTitle\/assets\/AdvancedTitle.js","\/trx_addons\/addons\/elementor-widgets\/classes\/Widgets\/Testimonials\/assets\/Testimonials.js","\/trx_addons\/js\/trx_addons.front.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, Preloader and Popup don't work until user interaction. And the menu don't work at all.","type":"plugin","category":"analytics","id":"plugin:b9c418b47c986935a1151ab9b42f8971","is_default":0,"created_at":1767882265},"a750cada-eb58-4df4-9966-21c8a69332ba":{"title":"Thrive Architect","condition":"thrive-visual-editor\/thrive-visual-editor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-includes\/js\/masonry.min.js","\/thrive-theme\/inc\/assets\/dist\/frontend.min.js","\/thrive-theme\/thrive-dashboard\/js\/dist\/frontend.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/general.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/video.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/menu.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/pricing-table.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/toc.min.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/lead-generation.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, most related scripts do not work.\r\n\r\nThis backend entry existed for some time with the following exclusions (though there was no GH issue or info available about it):\r\n\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js\r\n\/jquery-migrate(.min)?.js\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/170","type":"plugin","category":"analytics","id":"plugin:75af9efe22c5cc776636266feb55adf1","is_default":0,"created_at":1741639113},"13714cde-680e-4ca4-8607-c35952d6a5f2":{"title":"Thrive Comments","condition":"thrive-comments\/thrive-comments.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-leads\/","window.TL_Const","var ml=","\/thrive-comments\/assets\/js\/","ThriveComments","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js"],"icon_url":"","type":"plugin","id":"plugin:6a72d06ca2f6a888b0d9d5ea93af2edc","is_default":0,"created_at":1677852974},"aa7ca898-499f-4f04-b419-3de199996969":{"title":"Thrive Leads","condition":"thrive-leads\/thrive-leads.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-leads\/","window.TL_Const","var ml=","\/thrive-comments\/assets\/js\/","ThriveComments","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js"],"icon_url":"","summary":"Show the form on pageload & Fix comment box not showing","type":"plugin","id":"plugin:b84d82c02cade64ade00712b9c5652aa","is_default":0,"created_at":1724443176},"9eee297a-8241-4ef2-af97-46074bd0898c":{"id":"plugin:5bb61b0559b0a3fd578315b553451327","title":"Thrive Quiz Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"is_default":0,"condition":"thrive-quiz-builder\/thrive-quiz-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c2f3ec2a-5b09-4845-aa95-84841783fbfc":{"id":"plugin:a7f3e5206abff19ca7cf142260181738","title":"Thrive Ultimatum","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-ultimatum\/","var TVE_Ult_"],"is_default":0,"condition":"thrive-ultimatum\/thrive-ultimatum.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"d48b8d2f-e071-4a30-840a-306154a115a0":{"title":"Tidio Chat","condition":"tidio-live-chat\/tidio-elements.php","exclusions":["document.tidioChatCode"],"icon_url":"","summary":"Display the chat icon.","type":"plugin","id":"plugin:f57be2014b6a489d053f8367fa6c0f9f","is_default":0,"created_at":1724442883},"cb6d33ed-7eb4-4ff9-9ad0-7fc54fbecf6f":{"id":"plugin:c9e0485ec256d4a6a8d92a98c18d76fc","title":"Toolset Blocks","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","toolsetCommonEs.fontToHead","toolsetCommonEs.styleToHead","\/toolset-blocks\/vendor\/toolset\/blocks\/public\/js\/frontend.js","\/toolset-blocks\/vendor\/toolset\/common-es\/public\/toolset-common-es-frontend.js","\/toolset-blocks\/public\/js\/views-frontend.js","\/wp-includes\/js\/underscore.min.js"],"is_default":0,"condition":"toolset-blocks\/wp-views.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"4bac6350-0925-49fb-904a-372f22fd6baf":{"title":"Top Bar Pro","condition":"topbar-pro\/topbar_pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/topbar-pro\/js\/tpbr_front.min.js","\/plugins\/topbar-pro\/js\/jquery.cookie.js"],"icon_url":"","summary":"To prevent top bar from getting overlapped with other content.","type":"plugin","id":"plugin:71beda322b37f7fc7d456822493cb972","is_default":0,"created_at":1724443222},"033486e7-0ddc-4915-a848-31504d00448e":{"title":"Twenty20 Image Before-After","condition":"twenty20\/ttwenty.php","exclusions":["\/twenty20\/assets\/js\/(.*).js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","twentytwenty-container"],"icon_url":"","type":"plugin","id":"plugin:23441bba9d3602bc932d697c7cb8aa1f","is_default":0,"created_at":1677858089},"bef2147e-2d0b-431d-ac29-5e8430c0d809":{"title":"Typing Effect","condition":"animated-typing-effect\/typingeffect.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/animated-typing-effect\/assets\/js\/typed.js","\/plugins\/animated-typing-effect\/assets\/js\/typed.fe.js"],"icon_url":"","summary":"Show the animated typing effect on page load","type":"plugin","id":"plugin:e4e1a3e63d09a28dcb20577efbcb5a48","is_default":0,"created_at":1724443336},"7675a34d-006e-4672-99d5-a81e1b8e47f9":{"title":"UberMenu","condition":"ubermenu\/ubermenu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ubermenu\/assets\/js\/ubermenu.min.js"],"icon_url":"","summary":"To make mobile menu responsive immediately without any user interaction","type":"plugin","id":"plugin:3d59cc34167a7f8123e66b627148e0b7","is_default":0,"created_at":1724443357},"8233178a-e7b3-43ce-b193-bd0d9c960933":{"title":"Ultimate Addons for Elementor","condition":"ultimate-elementor\/ultimate-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ultimate-elementor\/assets\/lib\/slick\/slick.min.js","\/ultimate-elementor\/assets\/min-js\/uael-frontend.min.js","\/ultimate-elementor\/assets\/lib\/isotope\/isotope.min.js","\/ultimate-elementor\/assets\/lib\/jquery-element-resize\/jquery_resize.min.js","\/ultimate-elementor\/assets\/lib\/fancybox\/jquery_fancybox.min.js","\/ultimate-elementor\/assets\/lib\/justifiedgallery\/justifiedgallery.min.js","\/ultimate-elementor\/assets\/min-js\/uael-posts.min.js","\/elementor-pro\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js","\/elementor\/assets\/lib\/swiper\/swiper.min.js","\/nasa-core\/assets\/js\/min\/jquery.slick.min.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig"],"icon_url":"","summary":"To make header slider be displayed correctly on page load","type":"plugin","category":"analytics","id":"plugin:86424c46157c1c7e2e1571055813beee","is_default":0,"created_at":1742911351},"dfb47495-8a46-4caa-8c2a-50b02769dcb5":{"title":"Ultimate Addons for Elementor - Fancy Text Effects","condition":"ultimate-elementor\/ultimate-elementor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js","\/plugins\/ultimate-elementor\/assets\/lib\/typed\/typed.min.js","\/plugins\/ultimate-elementor\/assets\/min-js\/uael-frontend.min.js"],"summary":"When Delay JavaScript Execution is enabled, the text effects don't work until user interaction.","icon_url":"","type":"plugin","id":"plugin:031c5b0ea0dce0a98a766aec5617b017","is_default":0,"created_at":1732107991},"42f39902-a813-4536-a561-29e2795ac097":{"title":"Ultimate Addons for Elementor - Google Maps","condition":"ultimate-elementor\/ultimate-elementor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ultimate-elementor\/assets\/lib\/slick\/slick.min.js","\/ultimate-elementor\/assets\/min-js\/uael-frontend.min.js","\/ultimate-elementor\/assets\/lib\/isotope\/isotope.min.js","\/ultimate-elementor\/assets\/lib\/jquery-element-resize\/jquery_resize.min.js","\/ultimate-elementor\/assets\/lib\/fancybox\/jquery_fancybox.min.js","\/ultimate-elementor\/assets\/lib\/justifiedgallery\/justifiedgallery.min.js","\/elementor-pro\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js","\/elementor\/assets\/lib\/swiper\/swiper.min.js","\/nasa-core\/assets\/js\/min\/jquery.slick.min.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ultimate-elementor\/assets\/js\/uael-google-map.js","maps.googleapis.com","maps.google.com"],"summary":"Fixes an issue in which the map doesn't work","icon_url":"","type":"plugin","id":"plugin:a3256509256803fa8e9ebfedf73c4843","is_default":0,"created_at":1732565293},"8bddf484-6c78-4147-a4e6-d3039904e5f6":{"title":"Ultimate Addons for Elementor - Mobile Menu","condition":"ultimate-elementor\/ultimate-elementor.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/ultimate-elementor\/assets\/js\/uael-nav-menu.js","\/ultimate-elementor\/assets\/min-js\/uael-nav-menu.min.js"],"icon_url":"","summary":"To make the mobile menu icon work as expected","type":"plugin","id":"plugin:70cfade3a7adbb54196f6acccc5a176f","is_default":0,"created_at":1724443394},"028504f7-b1cd-4318-8a6d-ce186197e89d":{"id":"plugin:0f0a91f0c454021a5ff9fc25c3ed419f","title":"Ultimate Addons for WPBakery Page Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Ultimate_VC_Addons\/assets\/"],"is_default":0,"condition":"Ultimate_VC_Addons\/Ultimate_VC_Addons.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"5754af3d-a6af-49eb-b731-bdd82f26dc4e":{"title":"Ultimate Responsive Image Slider","condition":"ultimate-responsive-image-slider\/ultimate-responsive-image-slider.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","sliderPro"],"icon_url":"","summary":"To load the slider without any user interaction","type":"plugin","id":"plugin:34db8636812bad84c8aea037c2ddc8c2","is_default":0,"created_at":1724443418},"78ae882d-ae31-4179-b677-8893814938c7":{"title":"Unlimited Elements for Elementor Premium - Slider","condition":"unlimited-elements-for-elementor-premium\/unlimited-elements-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/unlimited-elements-for-elementor-premium\/","uc_"],"icon_url":"","type":"plugin","id":"plugin:17260bc347b8c29bee0010e9ec164184","is_default":0,"created_at":1683270377},"051cbfbb-7ad2-4f06-a493-3cf423a80904":{"title":"Variation Swatches for WooCommerce","condition":"woo-variation-swatches\/woo-variation-swatches.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jquery\/ui\/","\/woo-variation-swatches\/","\/woo-variation-swatches-pro\/","underscore.min.js"],"icon_url":"","summary":"Make some elements to load","type":"plugin","id":"plugin:6717ef5673a956bc08ca4a5117065d53","is_default":0,"created_at":1724443437},"6879caba-7224-4eca-bcb2-370785b495ea":{"title":"Web Accessibility By accessiBe","condition":"accessibe\/accessiebe.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/accessibe\/","acsbJS"],"icon_url":"","summary":"To preserve the functions of the plugin","type":"plugin","id":"plugin:57597b7683e01892932083413f085134","is_default":0,"created_at":1724443688},"bd6732fe-4c2b-40a1-9035-8464057e2da5":{"title":"WooCommerce - Cart Fragments","condition":"woocommerce\/woocommerce.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js"],"icon_url":"","type":"plugin","id":"plugin:201de694c6fc28c8d580a3b2ca484218","is_default":0,"created_at":1680937567},"d044900d-07e1-4533-9516-33106efcb259":{"title":"WooCommerce - Product description","condition":"woocommerce\/woocommerce.php","exclusions":["\/plugins\/woocommerce\/assets\/js\/frontend\/single-product.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:a82644b4c9417ea3a240939a73344700","is_default":0,"created_at":1679309756},"bff953b1-2213-4666-8112-76a84a3cc207":{"title":"WooCommerce - Product Gallery","condition":"woocommerce\/woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce\/?(.*)\/assets\/js\/zoom\/jquery.zoom(.min)?.js","\/woocommerce\/?(.*)\/assets\/js\/photoswipe\/","\/woocommerce\/?(.*)\/assets\/js\/flexslider\/jquery.flexslider(.min)?.js","\/woocommerce\/?(.*)\/assets\/js\/frontend\/single-product(.min)?.js","wc_single_product_params"],"icon_url":"","type":"plugin","id":"plugin:7665868ff97c265628f376523a4f9ecc","is_default":0,"created_at":1686579689},"016e6ddf-c6e7-49ec-bd3f-2585d9e45895":{"title":"WooCommerce - Select2 library","condition":"woocommerce\/woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce\/assets\/js\/select2\/select2(.*).js"],"icon_url":"","type":"plugin","id":"plugin:4bca670bd5d55dd24b17fb0193b0891e","is_default":0,"created_at":1681459540},"b9b2c6d7-944f-4ae3-ae04-c9e2204b9dab":{"title":"WooCommerce Attribute Swatches","condition":"iconic-woo-attribute-swatches-premium\/iconic-woo-attribute-swatches.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/iconic-woo-attribute-swatches-premium\/assets\/frontend\/js\/main.min.js","\/iconic-woo-attribute-swatches-premium\/assets\/vendor\/flickity\/flickity.pkgd.min.js","iconic_was_vars"],"icon_url":"","summary":"Makes using attribute swatches not require two clicks","type":"plugin","id":"plugin:9165c768e978d6ad3f696db8c78ccbb2","is_default":0,"created_at":1724443452},"4506c5e9-7349-44c9-9967-34370c83facb":{"title":"WooCommerce Bookings","condition":"woocommerce-bookings\/woocommerce-bookings.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/woocommerce-bookings\/dist\/frontend.js","\/wp-includes\/js\/dist\/date.min.js","\/wp-includes\/js\/dist\/vendor\/moment.min.js","\/wp-includes\/js\/jquery\/ui\/datepicker.min.js","\/wp-includes\/js\/underscore.min.js","\/woocommerce\/assets\/js\/jquery-blockui\/jquery.blockUI.min.js","\/wp-includes\/js\/dist\/hooks.min.js"],"icon_url":"","summary":"Make sure the calendar is displayed correctly","type":"plugin","id":"plugin:14dec6d289b9977fa3a74116feecebcc","is_default":0,"created_at":1724443469},"d1266110-86a0-4f84-af8e-512714e53010":{"title":"WooCommerce Food Menu | Foodify","condition":"woo-food-menu\/woo-food-menu.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/plugins\/woo-food-menu\/js\/ddaccordion.js","\/plugins\/woo-food-menu\/magnific-popup\/jquery.magnific-popup.js","\/plugins\/woo-food-menu\/js\/wfm.js","\/plugins\/woo-food-menu\/js\/jquery.colorbox.js"],"summary":"When Delay JavaScript Execution is enabled, the plus icon for the food items does not appear until user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:4b2fb252dd4125dc63a5a849f29b96f0","is_default":0,"created_at":1765479354},"fec9cd04-c358-45da-a1a8-1668b964016b":{"id":"plugin:456f3b849ba3b6647246aca9d7cdaed5","title":"WooCommerce Product Reviews Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","wc_product_reviews_pro","\/woocommerce-product-reviews-pro\/assets\/js\/frontend\/wc-product-reviews-pro-frontend.min.js","\/woocommerce\/assets\/js\/jquery-tiptip\/jquery.tipTip.min.js"],"is_default":0,"condition":"woocommerce-product-reviews-pro\/woocommerce-product-reviews-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"551a9399-627f-4978-9bae-5cc8e0aefc82":{"id":"plugin:c8577e74eef3b082fb6403760d53f68c","title":"WooCommerce TM Extra Product Options","type":"plugin","icon":"","exclusions":["\/woocommerce-tm-extra-product-options\/assets\/js\/epo.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/jquery\/ui\/mouse.min.js","\/wp-includes\/js\/jquery\/ui\/slider.min.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/wp-util.min.js","\/wp-includes\/js\/dist\/hooks.js","\/wp-includes\/js\/dist\/i18n.js"],"is_default":0,"condition":"woocommerce-tm-extra-product-options\/tm-woo-extra-product-options.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"779b8e37-c537-4485-a23d-a5e7477ea965":{"title":"WooGallery - Product Gallery","condition":"gallery-slider-for-woocommerce\/woo-gallery-slider.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/gallery-slider-for-woocommerce\/public\/js\/woo-gallery-slider-public.min.js"],"summary":"When Delay JavaScript Execution is enabled, the product gallery don't load until user interaction.","icon_url":"","type":"plugin","category":"analytics","id":"plugin:1b347b79ee74db1ff3b408370465e520","is_default":0,"created_at":1744711266},"3cac4650-6a52-448e-8e48-e99a772a59a2":{"title":"WooLentor","condition":"woolentor-addons\/woolentor_addons_elementor.php","exclusions":["\/woolementor\/assets\/third-party\/slick\/slick.min.js","\/woolentor-addons","woolentor_addons"],"icon_url":"","summary":"Display the carousel without interaction.","type":"plugin","id":"plugin:c6e6cab8c80fa3fe57d609f72d2d5c56","is_default":0,"created_at":1724443648},"21af073d-d2ec-4d46-bbda-2c69f87f3f98":{"title":"Woolentor - Fix product gallery","condition":"woolentor-addons\/woolentor_addons_elementor.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)",".woolentor-learg-img","\/woolentor-addons\/assets\/js\/slick.min.js","\/woolentor-addons-pro\/assets\/lib\/js\/tippy.min.js"],"icon_url":"","summary":"Display the product gallery without interaction.","type":"plugin","id":"plugin:c5315e06dfc353cd57f85a60abe4e320","is_default":0,"created_at":1724443660},"67aeb4cb-1a00-4d10-a00c-34888b4c0dba":{"title":"WooThumbs for WooCommerce","condition":"woothumbs-premium\/woothumbs-premium.php","exclusions":["\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/wp-embed.min.js","\/wp-includes\/js\/wp-util.min.js","\/woothumbs-premium\/(.*)"],"icon_url":"","summary":"To preserve the display of product variation images","type":"plugin","id":"plugin:b97b1d3f627769e1dd8305aa25af993c","is_default":0,"created_at":1724443675},"c7a14763-88d0-4344-a6af-e0a8dc5fa8d5":{"title":"WordPress Mega Menu \u2013 QuadMenu","condition":"quadmenu\/quadmenu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/quadmenu","#private-menu","#public-menu"],"icon_url":"","summary":"Show the menu on pageload","type":"plugin","id":"plugin:31b9e812a025e5750a6ef0980ee7d2db","is_default":0,"created_at":1724443871},"f699fdbd-84a7-4f24-b729-3e4a4f83a4dd":{"title":"WP Armour","condition":"wp-armour-extended\/wp-armour-extended.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/honeypot\/includes\/js\/wpa.js","\/wp-armour-extended\/includes\/js\/wpae.js","wpa_hidden_field","wpa_add_test"],"icon_url":"","summary":"To prevent marking all product reviews as spam.","type":"plugin","id":"plugin:601f8fc7d10cad1c2ec2949c0d9b1651","is_default":0,"created_at":1724443705},"697239fe-74f5-42a4-a504-97ee85bf43ff":{"title":"WP Booking Calendar","condition":"booking\/wpdev-booking.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/plugins\/booking(.*)\/_dist\/all\/_out\/wpbc_all.js","\/wp-content\/plugins\/booking(.*)\/js\/datepick\/jquery.datepick.wpbc.9.0.js","\/wp-content\/plugins\/booking(.*)\/js\/wpbc_time-selector.js","\/wp-content\/plugins\/booking(.*)\/assets\/libs\/tippy.js","\/wp-content\/plugins\/booking(.*)\/assets\/libs\/popper\/popper.js","wpbc_init__head","wpbc_url_ajax","booking_max_monthes_in_calendar","wpbc_define_tippy_popover","flex_tl_table_loading"],"icon_url":"","type":"plugin","id":"plugin:fdaf786c076fa0f17eec1e321fee0b3f","is_default":0,"created_at":1720571754},"6a28aae5-ef91-43fc-8204-92e3a25642b4":{"id":"plugin:5728f3b9856dfe37a36ab15b0a637198","title":"WP Go Maps","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","maps.googleapis.com"],"is_default":0,"condition":"wp-google-maps\/wpGoogleMaps.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c9b991d1-a653-404b-be85-e276b1814e7d":{"title":"WP Go Maps Gold","condition":"wp-google-maps-gold\/wp-google-maps-gold.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","maps.google.com\/maps\/api\/js","\/wp-includes\/js\/masonry.min.js","\/wp-google-maps-gold\/(.*)"],"summary":"Loads map on page load and fixes map not displayed after user interaction","icon_url":"","type":"plugin","category":"analytics","id":"plugin:b08baa6d8ba316accee727f2fa23efef","is_default":0,"created_at":1765279015},"1f8f9fbf-fbf0-4e3a-b77c-af0fa47e950d":{"title":"WP Go Maps Pro","condition":"wp-google-maps-pro\/wp-google-maps-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-google-maps(.*)","maps.googleapis.com","mgl_","wpgmza"],"summary":"Loads map on page load and fixes map not displayed after user interaction","icon_url":"","type":"plugin","category":"analytics","id":"plugin:8dad943d1b93e677e2290b2bc13aa36d","is_default":0,"created_at":1765278929},"41e4b98c-e63f-4800-a478-02592562322b":{"title":"WP iCal Availability","condition":"wp-ical-availability\/wp-ical-availability.php","exclusions":["\/wp-ical-availability\/js\/custom-select.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-ical-availability\/"],"icon_url":"","summary":"Fixes error when jQuery is already excluded, & Fully render the calendar on page load","type":"plugin","id":"plugin:3735ca768ede98b25795f4cb057ff4ed","is_default":0,"created_at":1724444622},"2b06c5b8-dc32-4bb0-8504-3a9f1c3a1ec0":{"title":"WP MapIt","condition":"wp-mapit\/wp_mapit.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-mapit\/wp_mapit\/js\/leaflet.js","\/wp-mapit\/wp_mapit\/js\/wp_mapit_multipin.js"],"icon_url":"","summary":"Display the map on page load","type":"plugin","id":"plugin:ba8d1c7f294a3f5b593556eb3b0bc7d9","is_default":0,"created_at":1724443719},"2039eafd-1c11-4e21-a61b-30857f291ae3":{"title":"WP Responsive Menu","condition":"wp-responsive-menu\/wp-responsive-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-responsive-menu\/(.*)"],"icon_url":"","summary":"Render the menu on page load","type":"plugin","id":"plugin:927b8bf7806f2d287559b86a0b455a59","is_default":0,"created_at":1724443736},"e06be942-cccd-4b2d-a268-06dc78f0b820":{"title":"WP Search with Algolia","condition":"wp-search-with-algolia\/algolia.php","exclusions":["\/wp-search-with-algolia\/js\/algoliasearch\/dist\/algoliasearch-lite.umd.js","\/wp-search-with-algolia\/js\/autocomplete-noconflict.js","\/wp-search-with-algolia\/js\/autocomplete.js\/dist\/autocomplete.min.js","var algolia"],"icon_url":"","summary":"Fixes the search function and its related console errors.","type":"plugin","id":"plugin:43267e659d599fbb6b42c719b49bb7a7","is_default":0,"created_at":1724443749},"4fc2a7ae-b9e6-410e-93cf-e6d1962add6a":{"title":"WP Smart Preloader","condition":"wp-smart-preloader\/wp-preloader.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-smart-preloader\/assets\/js\/wsp-main-script(.min)?.js"],"icon_url":"","summary":"Allows the preloader to work without user interaction, and resolves GTMetrix\/PageSpeed Insights test.","type":"plugin","id":"plugin:4fb90fc73fc2b5d1e37ea2dadfd3cef3","is_default":0,"created_at":1724443814},"7ecf40ce-2bcd-412c-bb01-9e71fecf6be8":{"title":"WP Store Locator","condition":"wp-store-locator\/wp-store-locator.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-store-locator\/","\/wp-includes\/js\/underscore.min.js","maps.google.com"],"icon_url":"","summary":"Show the map on page load.","type":"plugin","id":"plugin:d37bb5054a24471ca1675d9ab49d01b0","is_default":0,"created_at":1724443828},"7a1d19a2-3a48-40ab-8051-f642fc63ce2d":{"title":"WP Ultimate Post Grid","condition":"wp-ultimate-post-grid\/wp-ultimate-post-grid.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/wp-ultimate-post-grid\/dist\/public.js","\/wp-ultimate-post-grid-premium\/dist\/public-premium.js","wpupg_grid_args"],"icon_url":"","summary":"Show the dropdown selector\/filter option","type":"plugin","id":"plugin:e24341fef49bd64b89682d583218c108","is_default":0,"created_at":1724443858},"76c86163-ddf3-4113-b620-de9d5058f505":{"title":"WPBakery Page Builder","condition":"js_composer\/js_composer.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js"],"icon_url":"","summary":"Fire sliders, animations, full-width elements resizing without user interaction","type":"plugin","id":"plugin:517d7d24da9a7072ed389d0fb30374a0","is_default":0,"created_at":1724444340},"0b8ff2c0-c3cd-4ec1-b7f5-c7751de6101b":{"title":"WPBakery Page Builder - Carousel","condition":"js_composer\/js_composer.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/js_composer\/assets\/lib\/vc_carousel\/js\/vc_carousel.min.js"],"icon_url":"","summary":"Fire carousels without user interaction.","type":"plugin","id":"plugin:76336ed3f04df091e669f89d908ef2ed","is_default":0,"created_at":1724444319},"4f5e5b98-c326-4b9f-9ada-3b257862132c":{"id":"plugin:1ec7138c950c355e7af60d49c81139fc","title":"wpDataTables","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wpdatatables\/","highcharts"],"is_default":0,"condition":"wpdatatables\/wpdatatables.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"18be1b8c-0bc4-4a01-abc6-a127aff380c6":{"title":"WPForms","condition":"wpforms\/wpforms.php","exclusions":["\/wpforms-offline-forms\/assets\/js\/wpforms-offline-forms.min.js","wpforms-offline-forms-js-extra","wpformsRecaptchaLoad","\/wpforms\/assets\/lib\/jquery.validate.min.js","\/wpforms\/assets\/js\/share\/utils.min.js"],"icon_url":"","summary":"Prevents issues with redirect to Thank you page.","type":"plugin","category":"analytics","id":"plugin:c62ca58ea081c1271de8dadfa7daac69","is_default":0,"created_at":1742578021},"3ee8683e-e9d2-4c5c-b6f5-13c38827d2a2":{"title":"WPForms - Fix telephone field","condition":"wpforms\/wpforms.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wpforms\/assets\/pro\/lib\/intl-tel-input\/module.intl-tel-input.min.js","\/wpforms\/assets\/js\/frontend\/wpforms.min.js","\/wpforms-signatures\/assets\/js\/wpforms-signatures.min.js","\/wpforms-signatures\/assets\/js\/signature_pad.min.js","\/wpforms\/assets\/pro\/js\/frontend\/fields\/phone.min.js","\/wpforms\/assets\/pro\/lib\/intl-tel-input\/intlTelInputWithUtils.min.js"],"icon_url":"","summary":"Fix an issue with the telephone field in which this needs interaction to load.","type":"plugin","category":"analytics","id":"plugin:737442051c0ae65ebfbc06316a63c6ce","is_default":0,"created_at":1767635598},"138b2894-25d2-47ce-b33d-cbf1256d8f45":{"title":"WPForms - Loader GIF","condition":"wpforms\/wpforms.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wpforms-conversational-forms\/assets\/js\/conversational-forms.es5.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the loader GIF stays until user interaction.","type":"plugin","id":"plugin:03dc6ae2848dd60e1d4f4f86015c22f0","is_default":0,"created_at":1724444364},"8a3cacb6-81bd-456a-a1cc-a4025f8e5234":{"id":"plugin:0992ac952c0a05bb35e18b1d5744d346","title":"WPForms Lite","type":"plugin","icon":"","exclusions":["wpformsRecaptchaLoad","\/wpforms-offline-forms\/assets\/js\/wpforms-offline-forms.min.js","wpforms-offline-forms-js-extra"],"is_default":0,"condition":"wpforms-lite\/wpforms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"98bbd410-5b01-4244-a8eb-715765180328":{"title":"XL WooCommerce Sales Triggers","condition":"xl-woocommerce-sales-triggers\/xl-woocommerce-sales-triggers.php","exclusions":["\/xl-woocommerce-sales-triggers\/assets\/js\/wcst_combined.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:ba9e526ddb0157e69757530c6b18b714","is_default":0,"created_at":1677856813},"9d471012-ed59-486b-87ca-d52eb80c29a4":{"title":"YayCurrency Pro - Show Currency Switcher","condition":"yaycurrency-pro\/yay-currency.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/plugins\/yaycurrency-pro\/"],"summary":"Show currency switcher without user interaction.","icon_url":"","type":"plugin","category":null,"id":"plugin:8cf794ac4ebf3cd651971fe30c75b26d","is_default":0,"created_at":1742845339},"bf9f9620-dd0e-4e6f-9a45-4eb78a148f42":{"title":"YITH WooCommerce Ajax Product Filter","condition":"yith-woocommerce-ajax-navigation\/init.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/yith-woocommerce-ajax-navigation\/assets\/js\/yith-wcan-shortcodes.min.js"],"icon_url":"","summary":"Display product filters on mobile without interaction","type":"plugin","id":"plugin:58663fc781232169e865f6fe7cf1afaa","is_default":0,"created_at":1724444671},"b053279d-e07c-438c-bb3e-3a1f4f5d7c5e":{"title":"YITH WooCommerce AJAX Product Filter Premium","condition":"yith-woocommerce-ajax-product-filter-premium\/init.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/yith-woocommerce-ajax-product-filter-premium\/assets\/js\/yith-wcan-shortcodes.min.js"],"icon_url":"","summary":"Display product filters on mobile without interaction","type":"plugin","id":"plugin:68b637fd247e40c8e135e4771d739b07","is_default":0,"created_at":1724444677},"866bcd59-0350-4df0-ae42-c6180210d34a":{"title":"YITH WooCommerce Gift Cards Premium","condition":"yith-woocommerce-gift-cards-premium\/init.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/plugins\/yith-woocommerce-gift-cards-premium\/assets\/js\/ywgc-frontend.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-content\/plugins\/yith-woocommerce-gift-cards-premium\/assets\/js\/jquery-ui-timepicker-addon.js","\/wp-includes\/js\/jquery\/ui\/datepicker.min.js","\/wp-content\/plugins\/woocommerce\/assets\/js\/frontend\/single-product.min.js"],"summary":"When Delay JavaScript is enabled, the single product images do not load without user interaction","icon_url":"","type":"plugin","category":null,"id":"plugin:11615e29ef141b308c70587208059747","is_default":0,"created_at":1776163000},"62056165-8bd9-4ff0-b21f-e4ed0ae45fae":{"title":"YITH WooCommerce Points and Rewards","condition":"yith-woocommerce-points-and-rewards-premium\/init.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/yith-woocommerce-points-and-rewards-premium\/assets\/js\/frontend.min.js","\/woo-variation-swatches-pro\/assets\/js\/add-to-cart-variation.min.js"],"icon_url":"","summary":"Display rewards points notification without interaction","type":"plugin","id":"plugin:4acc87d4eb72c86cdea76d180b61a098","is_default":0,"created_at":1724444693},"106395a7-bee9-41d9-8bd5-0e8ad84b478e":{"title":"YITH WooCommerce Wishlist","condition":"yith-woocommerce-wishlist-premium\/init.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/plugins\/yith-woocommerce-wishlist-premium\/assets\/js\/add-to-wishlist-gutenberg.min.js","\/plugins\/yith-woocommerce-wishlist-premium\/assets\/js\/dist\/components\/add-to-wishlist\/index.js","\/plugins\/yith-woocommerce-wishlist-premium\/assets\/js\/jquery.selectBox.min.js","\/plugins\/yith-woocommerce-wishlist-premium\/assets\/js\/jquery.yith-wcwl.min.js","\/plugins\/yith-woocommerce-wishlist-premium\/plugin-fw\/dist\/lapilli-ui\/components\/index.js","\/plugins\/yith-woocommerce-wishlist-premium\/plugin-fw\/dist\/lapilli-ui\/date\/index.js","\/plugins\/yith-woocommerce-wishlist-premium\/plugin-fw\/dist\/lapilli-ui\/styles\/index.js","\/wp-includes\/js\/dist\/vendor\/react-dom.min.js","\/wp-includes\/js\/dist\/vendor\/react.min.js","\/wp-includes\/js\/dist\/vendor\/lodash.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/url.min.js","wp\\.apiFetch\\.createRootURLMiddleware\\(","window\\.lodash"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the add to wishlist button does not show or work.\r\n\r\nThis allowed the add to wishlist button work while Load JavaScript Deferred was also enabled, but enabling Load JavaScript Deferred caused some console errors, which were may be resolved using these exclusions:\r\n\r\n\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)\r\n\/wp-includes\/js\/dist\/date.min.js\r\n\/wp-includes\/js\/dist\/vendor\/moment.min.js","type":"plugin","category":"analytics","id":"plugin:dfc96a6440c1b9f9bdcb5806af7cc2f9","is_default":0,"created_at":1771882657},"d94dbbf3-bcab-4e47-9fbb-6b3a7cf92787":{"title":"Yotpo Social Reviews for Woocommerce","condition":"yotpo-social-reviews-for-woocommerce\/wc_yotpo.php","exclusions":["\/yotpo-social-reviews-for-woocommerce\/assets\/js\/headerScript.js"],"icon_url":"","type":"plugin","id":"plugin:45ab742b3fccbd04d7bc973c8582be87","is_default":0,"created_at":1680686421},"51dccf53-5cc7-4283-9ab1-01d34c6cce22":{"title":"Zoho SalesIQ","condition":"zoho-salesiq\/index.php","exclusions":["zoho.salesiq"],"icon_url":"","summary":"Display chat without interaction","type":"plugin","id":"plugin:b96c3865575068aac82c973eb3e3c52a","is_default":0,"created_at":1724444708}},"themes":{"9aeea459-91d3-44b6-8a26-b883dca8b402":{"title":"Agensy - Load page without User Interaction","condition":"agensy","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/agensy\/js\/scripts.js","\/themes\/agensy\/js\/scripts-single.js","\/themes\/agensy\/js\/wow.min.js","\/themes\/agensy\/js\/TweenMax.min.js","\/themes\/agensy\/js\/swiper.min.js","\/plugins\/visualcomposer\/assets\/lib\/bower\/isotope\/dist\/isotope.pkgd.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Load page without user interaction.","type":"theme","id":"theme:7ab7dfeb0db9c0c74c020be318c2e6d9","is_default":0,"created_at":1724424755},"9c623554-5834-4669-9e96-1b894c1939b2":{"title":"Andaman","condition":"andaman","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/andaman\/assets\/js\/","\/wp-andaman-plugins\/shortcodes\/vc_extend\/"],"icon_url":"","summary":"Unstuck the page loader (only use when jQuery is already excluded).","type":"theme","id":"theme:0193ea55fce2ada93b262f2824008c0f","is_default":0,"created_at":1724424778},"7374c5a5-69f8-460f-b44f-dee884a824cd":{"title":"Artale","condition":"artale","exclusions":["\/artale-elementor\/assets\/js\/modulobox.js","\/artale-elementor\/assets\/js\/artale-elementor.js","\/artale\/js\/jquery-stellar.js","\/artale\/js\/core\/artale-plugins.js","\/artale\/js\/core\/artale-custom.js","var loader"],"icon_url":"","summary":"Fixes the page loader (not closing) and display the main menu.","type":"theme","id":"theme:24cbda63f1b898ade5562ab4ec6d97a5","is_default":0,"created_at":1724424807},"23b01203-2a70-4394-9326-d59824def2d7":{"title":"Ashe Pro Premium","condition":"ashe-pro-premium","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/ashe-pro-premium\/"],"icon_url":"","summary":"Display mobile header without user interaction","type":"theme","id":"theme:4791da3cbbd1ed86253a087f0287aeb4","is_default":0,"created_at":1724426464},"03a9cc62-c167-447d-beb2-65c76c96b056":{"title":"Astra","condition":"astra","exclusions":["\/astra\/assets\/js\/minified\/frontend.min.js","replace\\(\/woocommerce-no-js\/,"],"icon_url":"","type":"theme","id":"theme:3cce5f3eaf76e098ba8e28f7bbba3f92","is_default":0,"created_at":1712608792},"2a2b54cb-8e1d-49d2-bfca-93eee231e470":{"title":"Astra - Carousel","condition":"astra","exclusions":["var astra","\/astra\/assets\/js\/minified\/style.min.js"],"icon_url":"","summary":"Load carousel","type":"theme","id":"theme:72a8d63e59c10bdf512a62b862d143a7","is_default":0,"created_at":1724426844},"ff22ab98-07e0-4faa-8994-4c811410acec":{"title":"Astra Pro - Reveal Effect option","condition":"astra","exclusions":["\/plugins\/astra-addon\/assets\/js\/minified\/blog-reveal.min.js","\/plugins\/astra-addon\/assets\/js\/minified\/reveal-effect.min.js"],"summary":"Show elements without interaction","icon_url":"","type":"theme","category":"analytics","id":"theme:10f23506c0da1886b9594093cbf3463e","is_default":0,"created_at":1758832506},"7783361f-66fc-4d95-a054-4e9545bb5b48":{"title":"Auteur","condition":"g5plus-auteur","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/g5plus-auteur\/assets\/js\/core.min.js","\/g5plus-auteur\/assets\/vendors\/","\/auteur-framework\/libs\/smart-framework\/assets\/vendors\/perfect-scrollbar\/js\/perfect-scrollbar.jquery.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Fire the slider on pageload","type":"theme","id":"theme:6207fe478e269e7547bda70a46607a49","is_default":0,"created_at":1724427467},"4c618038-8fc7-4d48-8d41-a32da14e5c1e":{"title":"AutoTrader","condition":"autotrader","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/autotrader\/(.*).js"],"icon_url":"","type":"theme","id":"theme:046dfeee2b77390c53e0e7f93b6a3792","is_default":0,"created_at":1679736741},"18f04f23-35a0-4c45-8cb6-a91d57ca1790":{"id":"theme:835da12f43373029659f766920e81b47","title":"Avada - Animations & mobile-specific actions","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/fusion-scripts\/(.*).js","window.off_canvas_","\/plugins\/fusion-builder\/","\/plugins\/fusion-core\/","\/Avada\/includes\/"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"90135867-1b95-498b-80d6-f5dbf2f6b318":{"title":"Avada - FAQ shortcode","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/fusion-core\/js\/min\/avada-faqs.js"],"icon_url":"","summary":"Displays content created with the FAQ shortcode","type":"theme","id":"theme:b084708c80d8582546e5430219aa4670","is_default":0,"created_at":1724427150},"d23b5bb1-1d7f-4109-bf69-b20a2be2d337":{"title":"Avada - Fusion carousel","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.carouFredSel.js","\/includes\/lib\/assets\/min\/js\/general\/fusion-carousel.js","fusionCarouselVars"],"icon_url":"","summary":"Display carousel on pageload","type":"theme","id":"theme:5e7a2248e1a53d9bb27b187deb541248","is_default":0,"created_at":1724427016},"98dfa8c1-e72a-4cef-a0b2-8f0c322490fc":{"title":"Avada - Fusion form","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-form.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-form-logics.js","\/includes\/lib\/assets\/min\/js\/library\/cssua.js","\/includes\/lib\/assets\/min\/js\/general\/fusion.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js"],"icon_url":"","summary":"To allow submitting forms","type":"theme","id":"theme:f16fb109027f4994a7649a8b1663e6f7","is_default":0,"created_at":1724427132},"026801fa-af67-47ba-b966-347693f0585f":{"title":"Avada - Fusion grid gallery","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-gallery.js","\/includes\/lib\/assets\/min\/js\/library\/imagesLoaded.js","\/includes\/lib\/assets\/min\/js\/library\/isotope.js","\/includes\/lib\/assets\/min\/js\/library\/packery.js","\/includes\/lib\/assets\/min\/js\/library\/lazysizes.js"],"icon_url":"","summary":"Display fusion grid gallery without delay","type":"theme","id":"theme:33f50696d353d8bd4eb59ff6e8f44c97","is_default":0,"created_at":1724426998},"c8349314-15a3-481e-973b-e4d936e4420e":{"title":"Avada - Fusion slider","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-core\/js\/min\/avada-fusion-slider.js","\/Avada\/includes\/"],"icon_url":"","summary":"Display fusion slider without delay","type":"theme","id":"theme:56fa9993a573540c83eda9c49fae5e3c","is_default":0,"created_at":1724426978},"7a04bc85-0fec-4487-ae05-bb2e5d8d0420":{"title":"Avada - Load Portfolio on pageload","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/library\/packery.js","\/library\/isotope.js","\/library\/imagesLoaded.js","\/general\/fusion-lightbox.js","\/fusion-core\/js\/min\/avada-portfolio.js"],"icon_url":"","summary":"Load Portfolio on pageload","type":"theme","id":"theme:c3f0ed4d94499b68c77d95db37d1d399","is_default":0,"created_at":1724427228},"55bd510c-78aa-49d5-8304-8be2ee2ab0da":{"title":"Avada - Mobile menu","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/assets\/min\/js\/general\/avada-menu.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.easing.js"],"icon_url":"","summary":"Load mobile menu scripts without a delay","type":"theme","id":"theme:2189c1c769d65cfc2182e4822847071b","is_default":0,"created_at":1724427273},"ddf00672-c35c-4b68-aeca-925e68bf12b2":{"title":"Avada - OffCanvas","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/fusion-scripts\/(.*).min.js","window.off_canvas_"],"icon_url":"","summary":"Load Off Canvas pop-ups without user interaction","type":"theme","id":"theme:97a185f08af70c39c7e221faab0f73eb","is_default":0,"created_at":1724427179},"17544cc3-9d3a-4611-bc5d-44d04e2786fa":{"title":"Avada - Show the Portfolio grid on page load","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/includes\/lib\/assets\/min\/js\/library\/imagesLoaded.js","\/includes\/lib\/assets\/min\/js\/library\/isotope.js","\/includes\/lib\/assets\/min\/js\/library\/lazysizes.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js","\/includes\/lib\/assets\/min\/js\/library\/packery.js","\/fusion-core\/js\/min\/avada-portfolio.js","avadaPortfolioVars"],"icon_url":"","type":"theme","id":"theme:9d1a9b0c2ca20fca764a82f197b962fd","is_default":0,"created_at":1696601823},"c6c3347c-14e0-4766-afa5-df33a47f5a5a":{"title":"Avada - Sticky menu","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Avada\/assets\/min\/js\/general\/avada-menu.js"],"icon_url":"","summary":"Fix sticky menu","type":"theme","id":"theme:3ff44421b404c5efffa25e78e479e4ea","is_default":0,"created_at":1724427248},"232596c1-6a6a-4fe8-a5c3-a60fa74a9456":{"id":"theme:0d727d80bb132f17c737e55883fe4be0","title":"Avada - WooCommerce product gallery","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/assets\/min\/js\/general\/avada-woo-product-images.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.flexslider.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"95ece7e4-3b19-45e5-aa28-14f833c9afca":{"title":"Avesa","condition":"avesa","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/avesa\/js\/main.js","\/avesa\/js\/isotope.js","\/sw_core\/js\/slick.min.js","\/avesa\/js\/bootstrap-datetimepicker.min.js","\/avesa\/js\/bootstrap.min.js"],"icon_url":"","summary":"Display images on product pages.","type":"theme","id":"theme:aad8bfcc594eec02e3b0d635198dee5e","is_default":0,"created_at":1724427449},"88f58a9c-8312-4a4c-8183-b3192eedbe17":{"title":"Bambino - Show Header on Page Load","condition":"bambino","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/themes\/bambino\/framework\/js\/header.misc.js","\/plugins\/bold-page-builder\/content_elements\/bt_bb_section\/bt_bb_elements.js","\/plugins\/bold-page-builder\/content_elements_misc\/js\/content_elements.js","maps.googleapis.com","maps.google.com"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the header doesn't show until interaction with the page.\r\n\r\nNotes:\r\n\r\n\u2022 The Bold Page Builder plugin is made by the same party as the theme and they work closely together\r\n\r\n\u2022 Google maps exclusions are included because console errors happen otherwise. It's okay to include these exclusions because the Bold Page Builder is applying the code related to Google Maps and related to the error:\r\nhttps:\/\/imagizer.imageshack.com\/a\/img924\/1328\/UCCTbc.png","type":"theme","category":"analytics","id":"theme:768bafdd8382fa03d858f585230c3c51","is_default":0,"created_at":1744389947},"f2bfe477-4e45-4e52-a7d9-4d0ba3a92258":{"title":"Besa","condition":"besa","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/besa\/js\/"],"icon_url":"","summary":"Trigger animations and makes the mobile menu immediately responsive","type":"theme","id":"theme:c238e89523c46ca28b08e401f42f6ccc","is_default":0,"created_at":1724427619},"bd94908c-8138-4995-986b-47ec66494bdd":{"title":"BeTheme","condition":"betheme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/betheme\/","mfn","\/wp-includes\/js\/jquery\/ui\/tabs.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js"],"icon_url":"","summary":"Trigger animations and makes the mobile menu immediately responsive","type":"theme","id":"theme:b99156eb9eeb357c0a70bd3bda6861cc","is_default":0,"created_at":1724427590},"190d2f1a-72a6-40ca-b08a-5c7ee7b0a6a5":{"title":"Bosa Online Education - Fixes animations and preloader","condition":"bosa-online-education","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/bosa\/assets\/js\/jquery.slicknav.min.js","\/bosa\/assets\/slick\/slick.min.js","\/bosa\/assets\/js\/navigation.js","\/bosa\/assets\/js\/custom.min.js","\/bosa\/assets\/js\/theia-sticky-sidebar.min.js"],"icon_url":"","summary":"Fix for the loading animation and displaying mobile menu.","type":"theme","id":"theme:5430bf7b83c83a3687b3b7b437e961b0","is_default":0,"created_at":1724427748},"7ae0e798-ea3b-43c6-b741-a46801b6e6ba":{"title":"Bricks - Load Content","condition":"bricks","exclusions":["\/themes\/bricks\/assets\/js\/bricks.min.js","\/themes\/bricks\/assets\/js\/libs\/splide.min.js"],"summary":"When Delay JavaScript Execution is enabled, videos that should autoplay don't play and image carousels don't load until user interaction.","icon_url":"","type":"theme","category":"analytics","id":"theme:c0d4df9616ecbbeb395b520043817e84","is_default":0,"created_at":1755805528},"6fb2b9d7-6ecc-4260-999c-938fbebdbf01":{"title":"Bridge","condition":"bridge","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/bridge-creative\/bridge\/js\/","\/wp-includes\/js\/","\/themes\/bridge\/js\/plugins\/abstractBaseClass.js"],"icon_url":"","summary":"This was created some time ago and with no notes, so hard to know why it was created.\r\n\r\nIn an update, I needed to add the following exclusion to prevent a console error:\r\n\/themes\/bridge\/js\/plugins\/abstractBaseClass.js\r\n\r\nIt should be noted that this uses the old regex for excluding jQuery, which appears to accidentally match and exclude over 20 other scripts as well:\r\n\r\nhttps:\/\/mega.wp-rocket.me\/bridge\/\r\nhttps:\/\/regex101.com\/r\/hstZ0q\/1","type":"theme","id":"theme:de8504b73ea228d0ea9bbce69752092e","is_default":0,"created_at":1730991059},"1dd63427-b4c9-4596-b952-ac711e3637f9":{"title":"Bridge - Load elements without user interaction","condition":"bridge","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/hoverIntent.min.js","\/wp-includes\/js\/mediaelement\/wp-mediaelement.min.js","\/wp-includes\/js\/mediaelement\/mediaelement-migrate.min.js","\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js","\/wp-content\/themes\/bridge\/js\/default.min.js","\/wp-content\/themes\/bridge\/js\/plugins.js","\/wp-content\/themes\/bridge\/js\/default_dynamic.js","\/wp-content\/themes\/bridge\/js\/jquery.touchSwipe.min.js","\/themes\/bridge\/js\/default_dynamic_callback.js","\/themes\/bridge\/js\/plugins\/doubletaptogo.js","\/themes\/bridge\/js\/plugins\/abstractBaseClass.js","\/themes\/bridge\/js\/plugins\/mixitup.js","\/themes\/bridge\/js\/plugins\/jquery.appear.js","\/themes\/bridge\/js\/plugins\/jquery.prettyPhoto.js","\/themes\/bridge\/js\/plugins\/jquery.flexslider-min.js","\/themes\/bridge\/js\/plugins\/jquery.fitvids.js","\/themes\/bridge\/js\/plugins\/jquery.carouFredSel-(.*).min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, some elements don't load without user interaction.\r\n\r\nUpdate: Needed to add some additional exclusions to prevent console errors and allow the mobile menu to work (mobile menu works without any exclusions, but enabling this one-click exclusion caused the menu to not work before these additional exclusions were added):\r\n\r\n\/themes\/bridge\/js\/default_dynamic_callback.js\r\n\/themes\/bridge\/js\/plugins\/doubletaptogo.js\r\n\/themes\/bridge\/js\/plugins\/abstractBaseClass.js\r\n\/themes\/bridge\/js\/plugins\/mixitup.js\r\n\/themes\/bridge\/js\/plugins\/jquery.appear.js\r\n\/themes\/bridge\/js\/plugins\/jquery.prettyPhoto.js\r\n\/themes\/bridge\/js\/plugins\/jquery.flexslider-min.js\r\n\/themes\/bridge\/js\/plugins\/jquery.fitvids.js\r\n\/themes\/bridge\/js\/plugins\/jquery.carouFredSel-(.*).min.js\r\n\/wp-includes\/js\/hoverIntent.min.js\r\n\/wp-includes\/js\/mediaelement\/wp-mediaelement.min.js\r\n\/wp-includes\/js\/mediaelement\/mediaelement-migrate.min.js\r\n\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js","type":"theme","id":"theme:ad9b810efd365ad9a27987d2912b94cd","is_default":0,"created_at":1730991278},"e1afeb67-fd2b-404c-84e3-a6927765d1a3":{"title":"BuddyBoss","condition":"buddyboss-theme","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-includes\/js\/masonry.min.js","\/wp-includes\/js\/underscore.min.js","\/plugins\/buddyboss-platform\/bp-core\/js\/vendor\/magnific-popup.js","\/plugins\/buddyboss-platform\/bp-templates\/bp-nouveau\/js\/buddypress-nouveau.min.js","\/themes\/buddyboss-theme\/assets\/js\/main.js","\/themes\/buddyboss-theme\/assets\/js\/main.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/menu.js","\/themes\/buddyboss-theme\/assets\/js\/plugins\/bb-woocommerce.js","\/themes\/buddyboss-theme\/assets\/js\/plugins\/elementor.js","\/themes\/buddyboss-theme\/assets\/js\/plugins\/learndash.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/fitvids.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/jssocials.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/mousewheel.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/panelslider.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/progressbar.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/select2.full.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/slick.min.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/sticky-kit.js","\/themes\/buddyboss-theme\/assets\/js\/vendors\/validate.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, content won't load until user interaction. \r\n\r\nAlso fixes issue where menu popups don't work.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/173","type":"theme","category":"analytics","id":"theme:be1f26c456c46c5089be61f5e4d4428c","is_default":0,"created_at":1755263118},"65698b6b-85dd-41ef-8fd7-718f1e983dba":{"title":"Car Dealer","condition":"cardealer","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/(.*)","\/cardealer\/js\/(.*)"],"icon_url":"","summary":"Fix slider and form console errors","type":"theme","id":"theme:b1111424fff61af8d1e152dcdd6810f6","is_default":0,"created_at":1724428045},"3927d724-5a0a-402b-a838-858d30b54ea9":{"title":"Cardea - Show Page Content on Load","condition":"cardea-wp","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/cardea-wp\/js\/main.js","\/themes\/cardea-wp\/js\/jquery.sticky.js","\/themes\/cardea-wp\/js\/jquery.fitvids.js","\/themes\/cardea-wp\/js\/jquery.smartmenus.min.js"],"icon_url":"","summary":"Show content on page load","type":"theme","id":"theme:d65d1a8303b0c7508278884520e4bec7","is_default":0,"created_at":1724428028},"693c7cfe-67a5-462c-b460-7a6c767fcee8":{"title":"Charity Help","condition":"charity-help","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/themes\/charity-help\/js\/custom.js","\/wp-content\/themes\/charity-help\/mixitup\/jquery.prettyPhoto5152.js","\/wp-content\/themes\/charity-help\/testimonialsrotator\/js\/jquery.quovolver.min.js","\/wp-content\/themes\/charity-help\/testimonialsrotator\/js\/owl.carousel.js","\/wp-content\/themes\/charity-help\/js\/jquery.flexisel.js","\/wp-content\/themes\/charity-help\/js\/jquery.nivo.slider.js","nivoSlider"],"summary":"When Delay JavaScript Execution is enabled, the mobile menu stays open and the slider doesn't work until user interaction.","icon_url":"","type":"theme","category":null,"id":"theme:88b860b4a67fe70a72764c0b3ca85bd3","is_default":0,"created_at":1774513579},"087fb457-a09d-4140-84bd-c9bc1e8195b7":{"title":"CheerUp","condition":"cheerup","exclusions":["\/cheerup\/js\/jquery.sticky-sidebar.js","\/cheerup\/js\/object-fit-images.js","\/cheerup\/js\/jquery.fitvids.js","\/cheerup\/js\/jquery.mfp-lightbox.js","\/cheerup\/js\/ie-polyfills.js","\/cheerup\/js\/theme.js","\/wp-includes\/js\/imagesloaded.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/jquery\/jquery.min.js"],"icon_url":"","summary":"Fix an issue with the links in the menu.","type":"theme","id":"theme:13bcf562f45afb245dc4f76fecfba6d6","is_default":0,"created_at":1724428063},"eb86aedb-91e6-480c-b76c-756ac1da41be":{"title":"Clover","condition":"clover-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/clover-theme\/"],"icon_url":"","summary":"Load the hamburger menu.","type":"theme","id":"theme:89372f3d9321ae09c94488592084da29","is_default":0,"created_at":1724428083},"6e90b649-5736-497f-9bc6-515900cfea8a":{"title":"Divi 4 - Animations","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI"],"summary":"When Delay JavaScript Execution is enabled, some content does not load until user interaction.","icon_url":"","type":"theme","category":"analytics","id":"theme:f232d8d7c7a5ac7f86040ebad08c295c","is_default":0,"created_at":1773241287},"70916c43-4e02-4932-b6aa-91a1815bc755":{"title":"Divi 4 - Background video","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/Divi\/js\/custom.unified.js","\/js\/mediaelement\/(.*)","mejs"],"summary":"Play video background on page load","icon_url":"","type":"theme","category":"analytics","id":"theme:713fcea72b704a77a2b01e65e3b9b4be","is_default":0,"created_at":1773241342},"08531785-9818-4e30-903e-564637a2ad7a":{"title":"Divi 4 - Counter module","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js"],"summary":"Compatibility with the Number Counter module","icon_url":"","type":"theme","category":"analytics","id":"theme:5cde03e83c588cd8c4e7490a2e84a7ef","is_default":0,"created_at":1773240138},"1d63dd7c-7bc7-4629-b03d-0437e177af32":{"title":"Divi 4 - Load Animated Elements on Page Load","condition":"Divi","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/salvattore.js"],"summary":"When Delay JavaScript Execution is enabled, some content does not load until user interaction.","icon_url":"","type":"theme","category":"analytics","id":"theme:422470ae1a30f4f0fd99a8f15751ed92","is_default":0,"created_at":1773240205},"b996762a-84ef-440d-a089-73a187936fbf":{"title":"Divi 4 - Mobile menu","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js"],"summary":"Avoids a double tap to open the mobile menu","icon_url":"","type":"theme","category":"analytics","id":"theme:8105de36585b460f035e378abaf066ad","is_default":0,"created_at":1773241393},"ae096e1e-9c36-46ad-a3d1-c26ea507276b":{"title":"Divi 4 - Sticky elements","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/sticky-elements.js","var DIVI"],"summary":"Enable sticky elements on page load.","icon_url":"","type":"theme","category":"analytics","id":"theme:c5dbde7698f50b02f3991975280e1f99","is_default":0,"created_at":1773241365},"349f31f0-dd10-41d3-b0a4-9c5df64879f8":{"title":"Divi 4 - Sticky menu","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/js\/jquery\/jquery-migrate.min.js","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/magnific-popup.js","jqueryParams","firstHeader"],"summary":"Hide sticky menu on page load.\r\n\r\nAvoid white flash when using this trick to prevent Divi's own flashing: \r\n\r\nelm.style.display","icon_url":"","type":"theme","category":"analytics","id":"theme:577daf839a4d88bba14d1462db2da031","is_default":0,"created_at":1773241380},"59563458-5f04-4959-b3e2-53e49e169d67":{"title":"Divi 4 - WooCommerce Single Product Images","condition":"Divi","exclusions":["\/Divi\/js\/scripts.min.js"],"summary":"When Delay JavaScript Execution is enabled, some content does not load until user interaction.","icon_url":"","type":"theme","category":"analytics","id":"theme:338556af431f9e85d226bbbf8d635cf1","is_default":0,"created_at":1773241317},"18e2c257-27fa-48ce-89c9-9684739576a3":{"title":"Divi 5 - Mobile Menu","condition":"Divi","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-content\/themes\/Divi\/includes\/builder-5\/visual-builder\/build\/script-library-interactions.js"],"icon_url":"","summary":"Fix Divi 5 mobile menu pop-up from being opened automatically on page load and only closed until user interaction.","type":"theme","category":"analytics","id":"theme:98645c5294c310f572fc3e0ae8006800","is_default":0,"created_at":1777904118},"6426539e-4e43-4fef-ab5a-3eb7b2a8b057":{"title":"Eikra","condition":"eikra","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/eikra\/assets\/js\/","EikraObj"],"icon_url":"","summary":"Fixes preloader not closing.","type":"theme","id":"theme:55d2581ad975eb6325bc97fc3d3b0cb8","is_default":0,"created_at":1724429672},"59020bd6-069f-4f2d-afa2-fbdefa03211c":{"title":"Ekko","condition":"ekko","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ekko\/"],"icon_url":"","summary":"Fixes preloader (blank page) not closing.","type":"theme","id":"theme:2c06f4a1949f8ba4e77042a47674fd9e","is_default":0,"created_at":1724429886},"d82f5cdd-c5d3-4596-94dc-1e25aaff2083":{"title":"Elessi","condition":"elessi-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elessi-theme\/assets\/js\/min\/functions.min.js","\/elessi-theme\/assets\/js\/min\/main.min.js"],"icon_url":"","type":"theme","id":"theme:d5d2b7fda7b8a2b5b91d430f7602e230","is_default":0,"created_at":1679737773},"f0587c21-54d0-429d-8efe-18a93dacb18d":{"id":"theme:5fc04cc678cb54567aedb51027933002","title":"Enfold","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/dynamic_avia\/avia-footer-scripts-(.*).js","var avia_is_mobile"],"is_default":0,"condition":"enfold","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c93ee1ee-3956-4278-9ee9-1a0968753e86":{"title":"Enfold - Fix hamburger menu","condition":"enfold","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/enfold\/js\/avia-snippet-hamburger-menu.js","\/enfold\/js\/avia.js","\/enfold\/js\/shortcodes.js","\/enfold\/js\/waypoints\/waypoints.js"],"icon_url":"","type":"theme","id":"theme:2b0c22c5169b94c2eabb125d18915246","is_default":0,"created_at":1715090218},"cc0550cb-918e-419d-b4f2-1809cf666dbb":{"title":"Enfold - LayerSlider","condition":"enfold","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","layerslider"],"icon_url":"","summary":"Loads the slider without user interaction when using Enfold's Layerslider implementation","type":"theme","id":"theme:eb759a03d0ca292c948f09d004a2963f","is_default":0,"created_at":1724430516},"ec883654-4f63-4fae-a3ef-923dcbc2426d":{"title":"Enfold - Shortcodes","condition":"enfold","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/enfold\/js\/avia(.min)?.js","\/enfold\/js\/shortcodes(.min)?.js","\/enfold\/config-templatebuilder\/avia-shortcodes\/","\/enfold\/js\/avia-compat(.min)?.js","\/enfold\/js\/waypoints\/waypoints.min.js","\/enfold\/js\/avia-snippet-(.*).js","\/enfold\/js\/avia-js(.min)?.js","\/enfold\/js\/aviapopup\/jquery.magnific-popup(.min)?.js"],"icon_url":"","type":"theme","id":"theme:072fc4077d7071791d774d6ddbf5dc2a","is_default":0,"created_at":1712954619},"fe3546f0-be3e-4173-8992-a7f6f203b82f":{"title":"Envision","condition":"envision","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/envision\/lib\/js\/app.min.js","var CloudFwOp"],"is_default":1,"icon_url":"","type":"theme","id":"theme:fc5f7d69b646ed95835badc0fc23bc11","created_at":1679737494},"45b060fe-fd61-48c5-8cc9-694b5b6c103f":{"title":"Erios - Fix Mobile Menu","condition":"erios","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/themes\/erios\/assets\/js\/libs\/mlpushmenu.js","\/wp-content\/themes\/erios\/assets\/js\/libs\/modernizr.custom.js","\/wp-content\/themes\/erios\/assets\/js\/libs\/classie.js"],"summary":"Fixes an issue in which the mobile menu doesn't appear when clicking the hamburger button","icon_url":"","type":"theme","category":null,"id":"theme:06c4f62aa28eb5d407096ea7c27939ec","is_default":0,"created_at":1738617553},"d997b942-19de-4710-9c81-79d3c65cbd76":{"title":"Ewebot","condition":"ewebot","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/gt3-themes-core\/","\/uploads\/gt3-assets\/js\/(.*)","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Fire animations on pageload.\r\n\r\nAllow the page to load without interaction.\r\n\r\n\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js\r\n\/jquery-migrate(.min)?.js\r\n\/wp-content\/themes\/ewebot\/dist\/js\/theme.js","type":"theme","id":"theme:047f009f2a1f4cdf2088c46be47e385b","is_default":0,"created_at":1724430887},"53d29aec-8ae4-4273-b748-f5bd52dfe177":{"title":"Farvis","condition":"farvis","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/farvis\/"],"icon_url":"","summary":"Fire animations and layout rendering on pageload.","type":"theme","id":"theme:26bff2f3a6ff6347d35edf5c77a35687","is_default":0,"created_at":1724430981},"fb01246b-a5f8-4021-b514-c02cf55e80bd":{"title":"Flatsome","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/flatsome\/assets\/js\/flatsome.js","\/flatsome\/assets\/libs\/packery.pkgd.min.js","\/flatsome\/assets\/js\/woocommerce.js","\/flatsome\/assets\/js\/extensions\/flatsome-variation-images-frontend.js"],"icon_url":"","summary":"Avoid homepage slider delay. Allow zoom on the product image gallery.","type":"theme","category":"analytics","id":"theme:26fb1cf80f074ca199d8a7e94c5fc796","is_default":0,"created_at":1735226064},"4d65dc12-9ce7-4171-94a7-9821fd95240e":{"title":"Flatsome - Google map","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","maps.googleapis.com","google.maps.LatLng","\/wp-includes\/js\/hoverIntent.min.js"],"icon_url":"","summary":"Show Google Map on page load","type":"theme","id":"theme:28a6f8b3319c107a34603be0f01a4bcf","is_default":0,"created_at":1724431100},"890e15b6-c66b-4a9e-9b7d-55417df94916":{"title":"Flatsome - Images","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/flatsome\/inc\/integrations\/wp-rocket\/flatsome-wp-rocket.js","\/flatsome\/assets\/js\/flatsome.js","\/flatsome\/inc\/extensions\/flatsome-lazy-load\/flatsome-lazy-load.js","\/wp-includes\/js\/hoverIntent.min.js"],"icon_url":"","summary":"Allow images to load immediately.","type":"theme","id":"theme:f2d60aad9f2f5395e3e145cf8f8ab165","is_default":0,"created_at":1725978870},"ee1a892b-c906-4e35-8684-827919f64bef":{"title":"Foxiz - Load Slider","condition":"foxiz","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/foxiz\/assets\/js\/rbswiper.min.js","\/plugins\/foxiz-core\/assets\/core.js","\/themes\/foxiz\/assets\/js\/global.js","\/themes\/foxiz\/assets\/js\/jquery.ui.totop.min.js"],"summary":"When Delay JavaScript Execution is enabled, the slider doesn't load until there is a user interaction. These exclusions make the slider load immediately.","icon_url":"","type":"theme","id":"theme:ee6e7f08495a961a7bcbfe4e0a283b6e","is_default":0,"created_at":1725039417},"cb54d070-8ee0-4c35-9fa9-b2bac73ccf39":{"title":"Frida","condition":"frida","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/frida\/"],"icon_url":"","summary":"Display images without user interaction and avoid issues with simpleLighbox images","type":"theme","id":"theme:109ddf56796a5133e12279f3daa5ff62","is_default":0,"created_at":1724431195},"435fe79f-47ba-422e-aca6-cea566f6b8a1":{"title":"Gardena Theme","condition":"gardena","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/gardena\/"],"icon_url":"","summary":"Fixes the error message for Largest contentful paint in PageSpeed report, when feature is enabled.","type":"theme","id":"theme:993e6f0fc44b9e55c0a565b84a449340","is_default":0,"created_at":1724431464},"e5428837-d182-44c0-9b8d-66e225e78a42":{"title":"GeneratePress - Back To Top Button","condition":"generatepress","exclusions":["\/themes\/generatepress\/assets\/js\/back-to-top.min.js","generate-back-to-top-js-before"],"summary":"The back to top button will not show or work without these exclusions.","icon_url":"","type":"theme","category":null,"id":"theme:92eb3fe27f152d99a70b3ff7fa51b50a","is_default":0,"created_at":1746819839},"9e78539a-03d9-442b-ab94-dd3b7a9658e4":{"title":"GeneratePress - Mobile menu","condition":"generatepress","exclusions":["\/generatepress\/assets\/js\/menu.min.js","generatepressMenu","\/gp-premium\/menu-plus\/functions\/js\/offside.min.js"],"icon_url":"","summary":"Fixes the mobile menu requiring a double touch, if touching the mobile menu is the first interaction of a visitor with the page.","type":"theme","id":"theme:80a330247d61d729fcd78dc01de6ed2f","is_default":0,"created_at":1724431524},"7d2a6472-83d4-4620-8b9e-ff8872b98c1c":{"title":"Genesis sample","condition":"genesis-sample-develop","exclusions":["\/jquery\/jquery.min.js","\/jquery\/jquery-migrate.min.js","\/js\/hoverIntent.min.js","\/genesis\/lib\/js\/menu\/","\/genesis\/lib\/js\/skip-links.min.js","\/custom-genesis\/js\/custom.js","var c = document.body.classList"],"icon_url":"","summary":"https:\/\/github.com\/wp-media\/delay-javascript-loading\/issues\/33#issuecomment-1201266660 , display mobile menu with DJS","type":"theme","id":"theme:7c14d7a05ad7f4f39b719e015a4723ff","is_default":0,"created_at":1727089078},"02d47d01-56f5-4801-b319-cff1707dd59d":{"title":"Harmuny - Modern WordPress Blog Theme","condition":"harmuny","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/harmuny\/"],"icon_url":"","summary":"Load slideshow without user interaction.","type":"theme","id":"theme:1ff9662c2a3e3221052cbe229feed18c","is_default":0,"created_at":1724427976},"6373bbb2-877c-4075-b6e4-7c58d686b25c":{"title":"HealthFirst","condition":"healthfirst","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/hoverIntent.min.js","\/wp-content\/plugins\/healthfirst-core\/assets\/js\/healthfirst-core.min.js","\/wp-content\/plugins\/healthfirst-core\/assets\/plugins\/modernizr\/modernizr.js","\/wp-content\/plugins\/healthfirst-core\/assets\/plugins\/perfect-scrollbar\/perfect-scrollbar.jquery.min.js","\/wp-content\/themes\/healthfirst\/assets\/js\/main.min.js","\/wp-content\/themes\/healthfirst\/assets\/plugins\/waitforimages\/jquery.waitforimages.js"],"summary":"When Delay JavaScript Execution is enabled, there are console errors.","icon_url":"","type":"theme","id":"theme:882ee30ccc8ed2b36e93c7b6e2c4b98e","is_default":0,"created_at":1724431542},"2c72e7e6-cb77-44e9-af87-d5c42ae6db52":{"title":"Honor - WPBakery fix","condition":"honor","exclusions":["\/honor\/js\/__scripts.js","HONOR_STORAGE","\/js_composer\/"],"icon_url":"","summary":"Only required if used with WPBakery plugin to fix some dependencies issues","type":"theme","id":"theme:9f228373ff4d172655dbf5cb3b1bc23a","is_default":0,"created_at":1724431564},"9309d1d3-1035-4a2c-8ced-075bc3ff9957":{"title":"HotelMaster","condition":"hotelmaster","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/hotelmaster\/javascript\/gdlr-script.js","\/hotelmaster\/plugins\/dl-menu\/modernizr.custom.js","\/hotelmaster\/plugins\/dl-menu\/jquery.dlmenu.js","\/hotelmaster\/plugins\/superfish\/js\/superfish.js","\/hotelmaster\/plugins\/jquery.easing.js"],"icon_url":"","summary":"Fixes double touch required to use the menu on mobile.","type":"theme","id":"theme:978eaddad3b1047e479407b6d92197aa","is_default":0,"created_at":1724431621},"4a09f745-cbb1-47c8-b50a-c8014d5d1335":{"title":"HotelMaster - Blog","condition":"hotelmaster","exclusions":["\/wp-includes\/js\/masonry.min.js","\/gp-premium\/blog\/functions\/js\/scripts.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","summary":"Loads the blog","type":"theme","id":"theme:e813a548bceac6765a1cdf2316f1a6ab","is_default":0,"created_at":1724431587},"f2d8f704-ec68-4278-9ca2-885daa0c1ce5":{"title":"HotelMaster - Masonry","condition":"hotelmaster","exclusions":["\/gp-premium\/menu-plus\/functions\/js\/offside.min.js","offSide"],"icon_url":"","summary":"Display blog archive posts in a masonry layout without user interaction.","type":"theme","id":"theme:398a264e302e42640553681e8759cd07","is_default":0,"created_at":1724431607},"d62a5509-f311-4ec4-a27b-d808842cebc0":{"title":"Impreza - Image Popups","condition":"Impreza","exclusions":["\/themes\/Impreza\/common\/js\/vendor\/magnific-popup.js","\/uploads\/us-assets\/kuechenstudio-reissig.de.js","magnificPopup"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the image popups do not work correctly.","type":"theme","category":"analytics","id":"theme:76e58bbda03bb74e93ec1d97828501b0","is_default":0,"created_at":1747237800},"92b2e258-1f44-41c1-b1bd-f117f61ee49d":{"title":"Jannah Theme - Fix masonry grid","condition":"jannah","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/masonry.min.js","\/wp-includes\/js\/jquery\/jquery.masonry.min.js","tie-"],"icon_url":"","summary":"Fix masonry grid","type":"theme","id":"theme:35f7f183089309f52046377ca65e905a","is_default":0,"created_at":1724432477},"df52436c-53d6-461a-b81a-cd0b21680524":{"title":"JNews","condition":"jnews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/jnews\/assets\/js\/","jnews","jfla"],"icon_url":"","summary":"Toggle the search box on mobile.\r\n\r\nLoad images without interaction:\r\n\r\n\/jnews\/assets\/js\/modernizr-custom.js","type":"theme","id":"theme:5d90e451984f9d894b1aabb0d00f30a2","is_default":0,"created_at":1724432551},"87ed69a2-3295-4fad-a82e-eeb02925a5dc":{"title":"Jobify","condition":"jobify","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jobify\/js\/jobify.min.js","\/jobify\/js\/select2.full.min.js"],"icon_url":"","summary":"Prevent white space on the mobile header before user interaction","type":"theme","id":"theme:592006aa4562a6915e344e5e2a09e5ee","is_default":0,"created_at":1724432575},"28a0b1ea-8d2f-4931-a48a-166b8df8a773":{"title":"JOYN","condition":"joyn","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/swift-framework\/includes\/page-builder\/frontend-assets\/js\/lib\/modernizr-custom.js","\/swift-framework\/includes\/page-builder\/frontend-assets\/js\/spb-functions.min.js","\/swift-framework\/includes\/swift-slider\/assets\/js\/swift-slider.min.js","\/swift-framework\/public\/js\/lib\/imagesloaded.pkgd.min.js","\/joyn\/js\/owl.carousel.min.js","\/joyn\/js\/theme-scripts.js","\/joyn\/js\/functions.js"],"icon_url":"","summary":"Prevent the page from not loading on mobile devices","type":"theme","id":"theme:c395470ad2d4d681836cd942bbb03120","is_default":0,"created_at":1724432590},"542be60a-2346-4740-9a41-8a580c4f013c":{"title":"Juno Toys","condition":"junotoys","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/junotoys\/fw\/js\/core.init.js","\/junotoys\/fw\/js\/core.utils.js","\/junotoys\/fw\/js\/superfish.js","\/junotoys\/fw\/js\/swiper\/swiper.js","\/trx_utils\/shortcodes\/theme.shortcodes.js","\/wp-includes\/js\/jquery\/ui\/(.*)"],"icon_url":"","summary":"Display the swiper\/carousel products","type":"theme","id":"theme:2acab38e8356d36355bb81d931e7fba4","is_default":0,"created_at":1724432608},"06167710-10c7-446e-a08b-ce676e444102":{"title":"Jupiter","condition":"jupiter","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jupiter\/","\/wp-includes\/js\/underscore.min.js","WebFont.load"],"icon_url":"","type":"theme","id":"theme:89c5c30498c2989611f9044be006197c","is_default":0,"created_at":1679738430},"5d042e1f-7e62-4ec4-ba31-30d396004522":{"title":"JupiterX","condition":"jupiterx","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jupiterx\/(.*).js","\/wp-includes\/js\/underscore.min.js","WebFont.load"],"icon_url":"","type":"theme","id":"theme:b06632962a4948d4944fd8d79ffbfceb","is_default":0,"created_at":1679737312},"c4b030ea-66a1-4729-85bf-a484e373a316":{"title":"Kadence","condition":"kadence","exclusions":["\/kadence\/assets\/js\/navigation.min.js","mobile_menu_breakpoint","kadenceConfig"],"icon_url":"","summary":"Avoid double click to open mobile menu and search button","type":"theme","id":"theme:4b7907ee68218db279648da9bf7102d1","is_default":0,"created_at":1724432769},"20c605b4-3e3a-4bb0-a5e5-a08e2cb0f31f":{"title":"Kalium","condition":"kalium","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/kalium\/assets\/js\/main.min.js","mobile_menu_breakpoint","var _k"],"icon_url":"","summary":"Fixes the hamburger menu.","type":"theme","id":"theme:1fcb99a1ab06e1e36635365ed3e59ce5","is_default":0,"created_at":1724432784},"e1e04a7d-635a-4e28-83d9-e345ce40e354":{"title":"Kava","condition":"kava","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/kava\/assets\/js\/theme-script.js"],"icon_url":"","summary":"Fixes the header color issue.","type":"theme","id":"theme:359d67efbf530c998245225dd3245a88","is_default":0,"created_at":1724432796},"e833c36e-ee89-4924-b608-3f28327c2f85":{"title":"Lay","condition":"lay","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/backbone.min.js","\/wp-includes\/js\/underscore.min.js","\/lay\/","\/laytheme-carousel\/","window.laytheme"],"icon_url":"","summary":"Start showing content on pageload.","type":"theme","id":"theme:7c718c6da874ea6e4b27c6d70bc4e7e8","is_default":0,"created_at":1724432836},"2df2ef47-a833-4711-ba54-48dc62586f37":{"title":"LazaNews","condition":"lazanews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jquery.custom.js"],"icon_url":"","summary":"Prevents the page preloading animation from being stuck until user interaction.","type":"theme","id":"theme:85d9922ac61ed833fd047a67029df8e5","is_default":0,"created_at":1724432810},"9443304a-34e9-4700-a03a-5f8f62f83ed1":{"title":"Listeo","condition":"listeo","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/listeo\/js\/"],"icon_url":"","summary":"Render the page on pageload","type":"theme","id":"theme:db7da585545001f5ae614a2810f08f3a","is_default":0,"created_at":1724432849},"77afa73c-c4a8-42a8-aaee-43f6a761364e":{"title":"ListingPro","condition":"listingpro","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/listingpro\/assets\/lib\/jquerym.menu\/js\/jquery.mmenu.min.all.js","\/listingpro\/assets\/lib\/Magnific-Popup-master\/jquery.magnific-popup.min.js","\/listingpro\/assets\/js\/select2.full.min.js","\/listingpro\/assets\/js\/jquery.city-autocomplete.js","\/listingpro\/assets\/js\/chosen.jquery.min.js","\/listingpro\/assets\/lib\/bootstrap\/js\/bootstrap-slider.js","\/listingpro\/assets\/js\/jquery-ui.js","\/listingpro\/assets\/js\/mapbox.js","\/listingpro\/assets\/js\/main.js","\/listingpro\/assets\/js\/leaflet.markercluster.js","maps"],"icon_url":"","summary":"Display the map and avoid console errors.","type":"theme","id":"theme:0b365e43dfc65d2b1b70fac6510c7c9c","is_default":0,"created_at":1724432862},"164e73e5-0603-42de-9ae6-837d822636a3":{"title":"Lycka - Load Menu","condition":"lycka","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/themes\/lycka\/framework\/js\/header.misc.js"],"summary":"When Delay JavaScript Execution is enabled, the menu does not appear until interaction with the page.","icon_url":"","type":"theme","category":null,"id":"theme:16544487fefeb35553d3abb52856b73c","is_default":0,"created_at":1754072604},"47de96e2-016b-4a8b-a707-286242f0077b":{"title":"Magbook - Show Slider","condition":"magbook","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/themes\/magbook\/js\/flexslider-setting.js","\/wp-content\/themes\/magbook\/js\/jquery.flexslider-min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, the slider doesn't show until user interaction.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/180","type":"theme","category":"analytics","id":"theme:a1be05a01927e084ea948e15017ee3d3","is_default":0,"created_at":1743179866},"01b369b5-b578-4314-8e95-40b67a41d75a":{"title":"Master Study","condition":"masterstudy","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/masterstudy\/assets\/js\/custom.js","\/masterstudy\/assets\/vendors\/jquery.fancybox.min.js","\/masterstudy\/assets\/js\/select2.full.min.js"],"icon_url":"","summary":"Prevents the page preloading animation from being stuck until user interaction.","type":"theme","id":"theme:0ee224c20e4ef7d546733d933db598f2","is_default":0,"created_at":1724432905},"6b000cc7-d33b-4109-9c39-6119a5d81cde":{"title":"Maya","condition":"maya","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/maya\/js\/jquery.mobilemenu.js","\/maya\/js\/jquery.custom.js","\/maya\/core\/includes\/js\/jquery.tipsy.js"],"icon_url":"","summary":"Convert the mobile menu into a selector form on mobile devices without user interaction.","type":"theme","id":"theme:719fe28004fcdd81a820602924aa8074","is_default":0,"created_at":1724432964},"ef3c76d6-1041-473d-81ea-a5a6e8c86735":{"title":"MH Magazine","condition":"mh-magazine","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/mh-magazine\/"],"icon_url":"","summary":"Display menus on page load.","type":"theme","id":"theme:2a0cd6efc2f46be69de61712729a2ec9","is_default":0,"created_at":1724433164},"9cbb2777-5524-43b8-af36-692b27452c0d":{"title":"Minimog","condition":"minimog","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/minimog\/"],"icon_url":"","summary":"Display menus on page load.","type":"theme","id":"theme:61c0c235042359ee7d2a9035e79a7da2","is_default":0,"created_at":1724433180},"7eb81c74-8062-4a6c-bf66-b7c5bc160141":{"title":"Moozo Elementor","condition":"moozo-elementor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/moozo-elementor\/assets\/js\/countdown.js","\/moozo-elementor\/assets\/vendor\/countdown\/countdown.min.js"],"icon_url":"","summary":"Display the countdown timer without interaction.","type":"theme","id":"theme:2ddb538c8e6b6c766fffd0d5c861fd82","is_default":0,"created_at":1724433254},"e90b7bfa-9ff6-4e1a-bf29-6207d55fdd39":{"title":"Motor","condition":"motor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/motor\/js\/"],"icon_url":"","type":"theme","id":"theme:b33538179f5661a86cbe327a1793e199","is_default":0,"created_at":1683973354},"d4607fcd-296f-4235-ba8e-2be508181877":{"title":"Movedo - Autoplay Video","condition":"movedo","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/themes\/movedo\/js\/main.js","\/themes\/movedo\/js\/plugins.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, autoplay videos don't play until user interaction with page.\r\n\r\nhttps:\/\/github.com\/wp-media\/rucss-backend\/issues\/181","type":"theme","category":"analytics","id":"theme:08e2673c5f3e451c281eba504f57290e","is_default":0,"created_at":1743424232},"445e625a-f955-41fa-84de-65d9ea19be07":{"title":"My Listing","condition":"my-listing","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/my-listing\/assets\/","\/wp-includes\/js\/dist\/vendor\/moment.min.js","maps.googleapis.com","MyListing","_Explore_Settings"],"icon_url":"","summary":"Show the content on page load:","type":"theme","id":"theme:afacb777229ddf5cabceacc64948057d","is_default":0,"created_at":1724433267},"677d9967-ca17-4602-8f63-4c3937f7a5c2":{"title":"Nature One PRO - Nivo Slider","condition":"natureone-pro","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","nivoSlider"],"summary":"When Delay JavaScript Execution is enabled, the Nivo Slider doesn't load until user interaction.","icon_url":"","type":"theme","id":"theme:53ae74a161c1588f5539b6883825d3ee","is_default":0,"created_at":1729860774},"00b8cd2d-2781-4fbb-ac5d-00750ba94ac9":{"title":"Neve - Mobile menu","condition":"neve","exclusions":["\/neve\/assets\/js\/build\/modern\/frontend.js"],"icon_url":"","summary":"Prevents the need for a double tap on the mobile menu.","type":"theme","id":"theme:5ae731cc06dd9284f8172675a6fe81ab","is_default":0,"created_at":1724432677},"483abc54-f1fc-47dc-bfc1-a269c7d1c849":{"title":"Newspaper - Images","condition":"Newspaper","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","tagdiv_theme.min.js","tdBlocksArray","\/wp-includes\/js\/underscore.min.js","\/td-cloud-library\/assets\/js\/","\/npm\/slick-carousel@1.8.1\/slick\/slick.min.js","tdb-gallery-wrap","tdBlocksArray","tdb_"],"icon_url":"","summary":"Loads images without delay","type":"theme","id":"theme:649ff22527bac2b1c8e0115cd3851d53","is_default":0,"created_at":1724432710},"50db8d14-d421-4237-be14-a6f7b5c11ec5":{"title":"Newspaper - Slider & YouTube","condition":"Newspaper","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","tagdiv_theme.min.js","tdBlocksArray","tdb_globals","td_youtube_list_ids","iosSlider","\/td-cloud-library\/assets\/js\/js_files_for_front.min.js","\/wp-includes\/js\/underscore.min.js","\/td-cloud-library\/assets\/js\/","\/npm\/slick-carousel@1.8.1\/slick\/slick.min.js","tdb-gallery-wrap","tdBlocksArray","tdb_"],"icon_url":"","summary":"Render the slider and Youtube videos on pageload","type":"theme","id":"theme:7e2eeee57ae458c5959342eda6526bf1","is_default":0,"created_at":1724432700},"514f4c30-2b67-4648-960e-dfe1cc401ca5":{"title":"Niva","condition":"niva","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/niva\/js\/","\/sweetthemes-framework\/js\/","mt_typed"],"icon_url":"","summary":"Trigger the page loader and the typewriter","type":"theme","id":"theme:c4838f73a344b829ed626635e210dcf4","is_default":0,"created_at":1724432724},"e67ee504-c3b1-455e-88ab-1fae8c830652":{"title":"OceanWP","condition":"oceanwp","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/oceanwp\/"],"icon_url":"","summary":"Fixes some non-function breaking browser console errors.","type":"theme","id":"theme:db37af4b7d12695d37d9256313a5f37a","is_default":0,"created_at":1724432755},"e44e240a-8765-4f4f-b67e-d54e4b727506":{"title":"OceanWP - Mobile menu","condition":"oceanwp","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ocean-side-panel\/assets\/js\/side-panel.min.js","\/oceanwp\/assets\/js\/theme.vanilla.min.js"],"icon_url":"","summary":"Avoids double tap on mobile menu","type":"theme","id":"theme:9babbcd52b2ce558d299a06cd1130a11","is_default":0,"created_at":1724432740},"51ac8cbb-6018-45a5-917f-6ce48bc7fc67":{"title":"Ohio","condition":"ohio","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/ohio\/assets\/js\/main.min.js","\/themes\/ohio\/assets\/js\/libs\/jquery.mega-menu.min.js","\/themes\/ohio\/assets\/js\/libs\/typed.min.js","\/themes\/ohio\/assets\/js\/libs\/isotope.pkgd.min.js"],"summary":"Load the mobile menu on page load without user interaction\r\nLoad dynamic typing text without user interaction","icon_url":"","type":"theme","category":"analytics","id":"theme:4ec96adb9cc39333f3d2024b28f2503f","is_default":0,"created_at":1769790675},"69a88ebb-b958-4ef0-be66-a1ceab623773":{"title":"Pelicula Theme","condition":"pelicula","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/plugins\/qi-blocks\/assets\/js\/plugins\/fslightbox\/fslightbox.min.js","\/plugins\/qi-blocks\/inc\/masonry\/assets\/plugins\/isotope.pkgd.min.js","\/plugins\/qi-blocks\/inc\/masonry\/assets\/plugins\/packery-mode.pkgd.min.js","\/pelicula\/","\/pelicula-core\/assets\/","\/qi-addons-for-elementor\/","\/wp-includes\/js\/hoverIntent.min.js"],"icon_url":"","summary":"Allow the Pelicula theme's Galleries to show on the page without user interaction\r\nFix broken animated title effects so they animate properly.\r\nFix testimonial not showing until user interaction.\r\nFix Modal not triggering when clicked.","type":"theme","category":"analytics","id":"theme:56bb7d07cce915321f3ed45b09b9e9e5","is_default":0,"created_at":1742986303},"897b0100-958d-4a02-b6b2-1e753e9869f4":{"title":"PenNews","condition":"pennews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pennews\/js\/script.min.js","\/pennews\/js\/script.lib.min.js"],"icon_url":"","summary":"When the theme's lazyload functionality is used, lazyload images without interaction.","type":"theme","id":"theme:02811fa00bc1471bb5be0457ce0ee005","is_default":0,"created_at":1724433732},"edd3ba03-e0fd-4b6e-911b-60b29f3471bf":{"title":"Pharmacy Mentor","condition":"pharmacymentor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/pharmacymentor\/"],"icon_url":"","summary":"Load slider and animations on pageload.","type":"theme","id":"theme:3188aaf1ef2c39937450f2a14ebb1174","is_default":0,"created_at":1724442943},"449a1b7e-5c4b-43d6-8a33-195254bfb184":{"title":"Phlox Pro","condition":"phlox-pro","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/phlox-pro\/"],"summary":"When Delay JavaScript Execution is enabled, we have a white page until user interaction.\r\nNo preload or transition page to deactivate on the theme setting.","icon_url":"","type":"theme","category":null,"id":"theme:9cf68c2d2861c6cc6ad4ab1c3c8480eb","is_default":0,"created_at":1756733274},"725415ff-cc76-45cc-a131-3170e5aa30fc":{"title":"Porto","condition":"porto","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/","\/porto\/js\/theme.js","\/porto\/js\/theme.min.js"],"icon_url":"","summary":"Load animations","type":"theme","id":"theme:8493f398f200c8dffe60d46439dd3360","is_default":0,"created_at":1724442964},"a4f6d50c-2ee9-40d6-b13e-502bda0ab18e":{"title":"Porto - Load Product Archive Listing","condition":"porto","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/themes\/porto\/js\/skeleton.min.js","\/porto\/js\/theme.js"],"summary":"Load Porto product archive listing in shop pages without user interaction","icon_url":"","type":"theme","category":null,"id":"theme:1315f133b62df536d891c6a9c93ef4a7","is_default":0,"created_at":1746008976},"2c19bcec-f3ff-4873-bfd7-db6bc0f6433c":{"title":"Porto - Owl Carousel","condition":"porto","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-includes\/js\/jquery\/ui\/","\/porto\/js\/theme(|.min).js","\/porto\/js\/libs\/owl.carousel(|.min).js","\/porto\/js\/theme-async(|.min).js","\/prettyPhoto\/jquery.prettyPhoto(|.min).js"],"icon_url":"","summary":"Load Owl Carousel without interaction","type":"theme","id":"theme:f34f5199fb7fca78852cd3fb7758f178","is_default":0,"created_at":1724442974},"f7779ea7-3b3a-441a-8fe7-44e3ee9350d8":{"title":"Porto - Product Gallery","condition":"porto","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-includes\/js\/jquery\/ui\/","\/porto\/js\/theme(|.min).js","\/porto\/js\/libs\/owl.carousel(|.min).js","\/porto\/js\/theme-async(|.min).js","\/porto\/js\/woocommerce-theme.js","\/wp-includes\/js\/imagesloaded.min.js","\/wp-includes\/js\/underscore.min.js","\/woocommerce\/assets\/js\/jquery-cookie\/jquery.cookie.min.js"],"summary":"When Delay JavaScript Execution is enabled, the product gallery dots navigation don't load until user interaction.","icon_url":"","type":"theme","category":null,"id":"theme:ddb85625312fec570f0a85e1e11fbba4","is_default":0,"created_at":1746791452},"5b11ec89-1cb2-4793-8b77-79e917e810a0":{"title":"Pro Theme - Fix menu and accordions","condition":"pro","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/pro\/cornerstone\/assets\/js\/site\/cs-classic.(.*).js"],"icon_url":"","summary":"Fix menu and accordions","type":"theme","id":"theme:8f30d70dd2d9a0386445aef8fdd534a9","is_default":0,"created_at":1724443035},"31347ccb-f69e-4cd3-bd47-b80ce14ac76e":{"title":"ProPhoto","condition":"prophoto7","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/prophoto7\/js\/bundle.front.js","\/wp-includes\/js\/underscore.min.js","PROPHOTO"],"icon_url":"","summary":"Fire animations","type":"theme","id":"theme:a5836a56c4472fade4dc6ebfe2281554","is_default":0,"created_at":1724443049},"a8208c04-865c-49aa-ab96-41e378d391c8":{"title":"Publisher","condition":"publisher","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/publisher\/js\/"],"icon_url":"","summary":"Make the mobile menu expend from the first click and the cookie notice to show on pageload.","type":"theme","id":"theme:32c73be0cb175da278c8e2af0811b0d1","is_default":0,"created_at":1724443063},"a0d69f3d-1356-4a1d-a600-2f2f788b8a9a":{"title":"REHub","condition":"rehub-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/rehub-theme\/js\/custom_floatpanel.js"],"icon_url":"","summary":"Fix the sticky menu","type":"theme","id":"theme:321af1febb74f488cf911380893739b2","is_default":0,"created_at":1724434339},"8b74bbe5-7f32-42df-908f-78c99a8cad82":{"title":"Rey","condition":"rey","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/rey\/scripts-(.*).js","\/rey-core\/assets\/js\/"],"icon_url":"","summary":"Fix the sticky menu on mobile and animations","type":"theme","id":"theme:e46567cd0f3ec9b37e7230dc87eac367","is_default":0,"created_at":1724434354},"5c9115d3-bcbd-49d6-8feb-4880d2b82bfe":{"title":"Rife Free","condition":"rife-free","exclusions":["\/rife-free\/js\/script.min.js","\/rife-free\/js\/isotope.pkgd.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","var reJS"],"icon_url":"","type":"theme","id":"theme:74a449954de79625eccc6750e87af8f6","is_default":0,"created_at":1679738107},"6542b2fd-1f91-4862-aa18-11eecc02faaf":{"title":"Roisin","condition":"roisin","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/themes\/roisin\/assets\/js\/main.min.js","\/plugins\/roisin-core\/assets\/js\/roisin-core.min.js","\/wp-includes\/js\/hoverIntent.min.js"],"icon_url":"","type":"theme","id":"theme:8f38fe58034772931110930b91cb6797","is_default":0,"created_at":1685964523},"5a192ad9-d150-4aa0-8efc-d68131cb7a37":{"title":"Sahifa - Mobile Menu","condition":"sahifa","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/themes\/sahifa\/js\/ilightbox.packed.js","\/translate_a\/element.js"],"icon_url":"","summary":"Allow mobile menu slideout to work for Safari mobile","type":"theme","id":"theme:06ebe49f4c1e5b04cece831f8bb198a3","is_default":0,"created_at":1724434427},"7ae9d978-d63c-4a58-beb3-418bebb5b23c":{"title":"Salient","condition":"salient","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/salient\/","winW > bodyW"],"icon_url":"","summary":"Close mobile menu when using anchor links & Show the menu and animations on page load","type":"theme","id":"theme:b3e12d57ac23897be1bb2c673e3fc761","is_default":0,"created_at":1724434525},"35aaa6c5-4a37-4161-b504-fb3ebc4b1148":{"title":"Salient - Nectar slider","condition":"salient","exclusions":["\/salient-nectar-slider\/js\/nectar-slider.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","summary":"load the images without interaction","type":"theme","id":"theme:d612db1dd8dc76faa6a36a9ebfd336dc","is_default":0,"created_at":1724434498},"84c95206-3e59-4eb3-a0c9-e2231a1c0a48":{"title":"SEO Lounge","condition":"seolounge","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js","\/seolounge\/js\/radiantthemes-custom.js","\/seolounge\/js\/radiantthemes-core.min.js"],"icon_url":"","summary":"Avoid the loader being delayed so the page can be displayed before user interaction.","type":"theme","id":"theme:3d72b779d9c4ba6b51cc5b245b141433","is_default":0,"created_at":1724434624},"cd44aa56-088a-40dd-bf1e-f835efa68626":{"title":"Shoptimizer","condition":"shoptimizer","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shoptimizer\/assets\/js\/lazyload-bg.js","\/shoptimizer\/assets\/js\/main.min.js"],"icon_url":"","summary":"Shows background images and fix the double tap on mobile menu","type":"theme","id":"theme:6c32b43f4da639e5901574fac6b7d387","is_default":0,"created_at":1724434579},"d2c48a48-430a-4eea-bc05-99b66f1f6a7b":{"title":"SmartMag","condition":"smart-mag","exclusions":["\/smart-mag\/js\/lazyload.js"],"icon_url":"","summary":"Fixes the images not being displayed because of the theme's Lazyload.","type":"theme","id":"theme:23d6b7878bd0087addb067db3fa39864","is_default":0,"created_at":1724434887},"dd0d9133-ef17-4dac-b174-9f25d535838f":{"title":"Soledad","condition":"soledad","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/soledad\/js\/main.js","\/soledad\/js\/more-post.js","\/soledad\/js\/libs-script.min.js"],"icon_url":"","summary":"Fixes the images not being displayed because of the theme's Lazyload.","type":"theme","id":"theme:d3f78b26c2d11c99230171cc6378d06e","is_default":0,"created_at":1724434902},"3b85dd6e-9534-477e-9b15-940d0e155c8d":{"title":"Spacious - Mobile Menu","condition":"spacious","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/spacious\/js\/navigation.js"],"icon_url":"","summary":"Fixes mobile menu functionality.","type":"theme","id":"theme:d423c1f002b10b8682ee24d616b19c9c","is_default":0,"created_at":1724434916},"d657dc56-5c04-439a-8987-401f89a65bf9":{"title":"Stockholm","condition":"stockholm","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/stockholm\/js\/"],"icon_url":"","summary":"To show the logo and prevent JavaScript errors","type":"theme","id":"theme:fcfff492e00727b63cf5dff9f59bc2a4","is_default":0,"created_at":1724443889},"121f9b1b-d3cd-4dde-915e-0b348abf6687":{"title":"Storefront","condition":"storefront","exclusions":["\/storefront\/assets\/js\/navigation.min.js"],"icon_url":"","summary":"Reveals menu from the first click.\r\n\r\nSome elements on the page (Link sliders) are showed on page load:\r\n\r\n\/storefront\/assets\/js\/homepage.min.js","type":"theme","id":"theme:f0dca7e4eaedf573d4664be249845942","is_default":0,"created_at":1724443926},"41cfc83f-ff02-4a35-a3b7-e92db213b224":{"title":"StreamTube","condition":"streamtube","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/streamtube\/","\/streamtube-core\/"],"icon_url":"","summary":"Fixes the display video error on the mobile version.","type":"theme","id":"theme:9772ccddd470688f6bc6aee86e34d29b","is_default":0,"created_at":1724444002},"c31366fe-9045-4767-a405-52a11e08b82e":{"title":"Sydney - Load elements on page load","condition":"sydney-pro-ii","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/themes\/sydney-pro-ii\/js\/scripts.js","\/wp-content\/themes\/sydney-pro-ii\/js\/functions.min.js","\/wp-content\/themes\/sydney-pro-ii\/js\/elementor.js","\/wp-content\/themes\/sydney-pro-ii\/js\/hero-slider.js","\/wp-content\/plugins\/sydney-toolbox\/js\/main.js"],"icon_url":"","summary":"Load elements on pages without user interaction","type":"theme","id":"theme:1fb15693856451537e331adeaf2c7d6f","is_default":0,"created_at":1724442744},"aec0a548-4c6b-400a-80ed-19a49e0faef0":{"title":"The7","condition":"dt-the7","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","loader-removed","\/Ultimate_VC_Addons\/assets\/min-js\/","\/dt-the7\/","\/js_composer\/","underscore.min.js"],"icon_url":"","summary":"Remove the loader and fire animations","type":"theme","category":"analytics","id":"theme:7934c689fd20e30b6bfc69bb9d46cb63","is_default":0,"created_at":1754635920},"538354ff-d69f-40be-b0cc-df3790599dd2":{"title":"TheGem","condition":"thegem","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thegem\/js\/","gemSettings","thegemSlideshow","tgpLazyItemsOptions"],"icon_url":"","summary":"To show the logo, slider, animations and prevent JavaScript errors","type":"theme","id":"theme:153c54fe73897da838ce39152b1db5a8","is_default":0,"created_at":1724444019},"84d95a79-270c-4223-b459-bb49c6acfaf1":{"title":"Theme Electiman - Mobile Menu","condition":"electiman","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/electiman\/assets\/js\/navigation.js","\/themes\/electiman\/assets\/js\/theme-pluginjs.js","\/themes\/electiman\/assets\/js\/theme.js","\/themes\/electiman\/assets\/js\/slick.min.js","\/themes\/electiman\/venobox\/venobox.min.js","\/themes\/electiman\/assets\/js\/owl.carousel.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","type":"theme","id":"theme:a59c888391c869ed4f3417c02d71fe15","is_default":0,"created_at":1702923332},"3a59bf59-4fe5-4690-8ab7-33e6a976e2e3":{"title":"Thrive Theme Builder","condition":"thrive-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-visual-editor\/editor\/js\/dist\/modules\/(.*).js","TVE_Event_Manager_Registered_Callbacks","ThriveGlobal","TCB_Front","TL_Front","TVE_Ult","thrive-","thrive_","tve_","tve-"],"icon_url":"","type":"theme","id":"theme:7492fc8f8a90ad7ef680d9c560da2b0f","is_default":0,"created_at":1710767440},"68f2de3b-e2b8-4edf-b82f-93fd7834c65f":{"title":"Total","condition":"Total","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Total\/assets\/js\/total.min.js"],"icon_url":"","summary":"Allow the search to work","type":"theme","id":"theme:96b0141273eabab320119c467cdcaf17","is_default":0,"created_at":1724444033},"6dc1cb35-6b50-4da0-9834-dddf169edaa6":{"title":"Townhub","condition":"townhub","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/townhub-add-ons\/assets\/js\/(.*)","\/wp-includes\/js\/dist\/vendor\/react.js","\/wp-includes\/js\/dist\/vendor\/react-dom.js"],"icon_url":"","summary":"Prevent add-ons from breaking the site","type":"theme","id":"theme:7c37c885d7fecf788f635734f99e8610","is_default":0,"created_at":1724444055},"f484f86b-e316-4871-9322-dee3925349fe":{"title":"Travel Monster - Owl Carousel","condition":"travel-monster","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/wp-content\/plugins\/wp-travel-engine\/assets\/lib\/owl-carousel(.*)\/owl.carousel(|.min).js","var isRtl"],"icon_url":"","summary":"Load Owl Carousel Slider without user interaction","type":"theme","id":"theme:d3e8da87b3affd399205438fbc8a4f05","is_default":0,"created_at":1724444075},"3ec96c3f-a6bf-4748-9b7e-78864bd24add":{"title":"uDesign - Mobile Menu","condition":"u-design","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/themes\/u-design\/assets\/js\/theme.min.js","\/wp-content\/themes\/u-design\/framework\/assets\/js\/framework.min.js","\/wp-content\/themes\/u-design\/framework\/assets\/js\/framework-async.min.js"],"icon_url":"","summary":"Keep the mobile menu working properly.","type":"theme","id":"theme:31ce70b0a02f8720a86d993816676943","is_default":0,"created_at":1724444158},"cb523239-27cc-461e-973d-c984a83223ac":{"title":"uDesign - Show Page Content on Load","condition":"u-design","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/wp-content\/themes\/u-design\/assets\/js\/theme.min.js","\/wp-content\/themes\/u-design\/framework\/assets\/js\/framework.min.js"],"icon_url":"","summary":"Display page content on load without user interaction.","type":"theme","id":"theme:c55edd40ad3f9321da577dad70bb130c","is_default":0,"created_at":1724444147},"14cb0a85-8bee-491e-99d7-5f20a07f4bdd":{"title":"Uncode","condition":"uncode","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uncode\/library\/js\/init(.min)?.js","\/uncode\/library\/js\/plugins(.min)?.js","\/uncode\/library\/js\/app(.min)?.js","\/uncode\/library\/js\/woocommerce-uncode(.min)?.js","\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js","initHeader","initBox","fixMenuHeight","initRow"],"icon_url":"","summary":"Hides Uncode's preloader without user interaction.","type":"theme","id":"theme:18ba19b98aefbb6c0fde6c6bf92e9cfc","is_default":0,"created_at":1724444172},"ff97a78f-9c62-4bc0-9340-1ad98aa6f2fa":{"title":"Uncode - Display Media Items","condition":"uncode","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/uncode\/library\/js\/lib\/vivus.min.js","\/uncode\/library\/js\/utils.min.js"],"summary":"When Delay JavaScript Execution is enabled, media items don't load on the page.","icon_url":"","type":"theme","category":null,"id":"theme:c0802221090418af389a07024262d71d","is_default":0,"created_at":1745441048},"c580ba92-2ab9-418d-a5d6-801ba6ceb9ce":{"title":"Uncode - Show Content on Page Load","condition":"uncode","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/uncode\/library\/js\/lib\/jquery.smartmenus.min.js","\/uncode\/library\/js\/lib\/jquery.waypoints.min.js","\/uncode\/library\/js\/utils.min.js","\/uncode\/library\/js\/app-loader.min.js","\/uncode\/library\/js\/preventDoubleTransition.min.js","\/uncode\/library\/js\/animations.min.js","\/uncode\/library\/js\/menuSystem.min.js","\/uncode\/library\/js\/backgroundSelfVideos.min.js","\/uncode\/library\/js\/carousel.min.js","\/uncode\/library\/js\/uncode-owl-nav.min.js","\/uncode\/library\/js\/tapHover.min.js","\/uncode\/library\/js\/lib\/inview.min.js","\/uncode\/library\/js\/disableHoverScroll.min.js","\/uncode\/library\/js\/printScreen.min.js","\/uncode\/library\/js\/lib\/owl.carousel(.*).min.js","\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js"],"summary":"When Delay JavaScript Execution is enabled, much of the page content doesn't load until user interaction.","icon_url":"","type":"theme","category":null,"id":"theme:befde4783fdb847bc562ea6a5882381f","is_default":0,"created_at":1745440617},"96aa49eb-6372-4b4c-b70d-f29dede8a8f2":{"title":"Utouch - Load menu on page load","condition":"utouch","exclusions":["\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/jquery\/jquery.min.js","\/utouch\/js\/main.js","\/utouch\/js\/swiper.jquery.min.js","\/utouch\/js\/fitvids.js","\/utouch\/js\/theme-plugins.js","\/utouch\/js\/crum-mega-menu.js"],"icon_url":"","summary":"Display menu on page load.","type":"theme","id":"theme:18284bf26abf49a1d5d60b3fb34e4c2d","is_default":0,"created_at":1724444186},"4cc603bb-f291-4096-aeb6-7d54832541dc":{"title":"Vehica - Mobile Menu","condition":"vehica","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |\\'|\"|>|$)","\/wp-content\/plugins\/vehica-core\/assets\/js\/elements.min.js"],"icon_url":"","summary":"Mobile menu requires double click to open if it's the first action taken.","type":"theme","category":"analytics","id":"theme:14220090cf75437b8926ea110498274a","is_default":0,"created_at":1754069979},"a1fbf155-720a-4704-9794-d6749ad6df59":{"title":"Vivo theme - Fix blank page","condition":"vivo","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/vivo\/framework\/assets\/js\/bt_framework_misc.js"],"icon_url":"","summary":"Fixes a blank page.","type":"theme","id":"theme:a140e640fed504586e24e7c0df30376b","is_default":0,"created_at":1724444202},"5acb5d19-caa6-4deb-b7db-0051df4c3c3b":{"title":"Voxel Theme","condition":"voxel","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/voxel\/","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig"],"icon_url":"","type":"theme","id":"theme:240a2be0a2b66b01f83abdcd83da7c7c","is_default":0,"created_at":1720444241},"88e96479-1aa2-4adc-8f07-20bc0368a63f":{"title":"Werkstatt","condition":"werkstatt","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/js\/underscore.min.js","\/werkstatt\/assets\/js\/vendor.min.js","\/werkstatt\/assets\/js\/fullscreen.min.js","\/werkstatt\/assets\/js\/app.min.js"],"icon_url":"","summary":"Show animated elements on page load.","type":"theme","id":"theme:38faa29db5a07b8fef6aee9cc11cafec","is_default":0,"created_at":1724444798},"60c4110b-a960-4d44-b619-6d79514dbf75":{"title":"Woodmart","condition":"woodmart","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/imagesloaded.min.js","\/woodmart\/js\/scripts\/wc\/","\/woodmart\/js\/scripts\/global\/","\/woodmart\/js\/libs\/owl.carousel.min.js","\/woodmart\/js\/libs\/owl.carousel.js","\/woodmart\/js\/libs\/slick.js","\/woodmart\/js\/libs\/autocomplete.min.js"],"icon_url":"","summary":"Show WooCommerce thumbnails on pageload & Show product image gallery","type":"theme","id":"theme:06338f13cb89e5309ad2eb7e4d457be4","is_default":0,"created_at":1724444297},"a4547b5b-10ab-407c-969c-269fddec07b8":{"title":"Woodmart - Cart Fragments","condition":"woodmart","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>)","\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js","\/woodmart\/js\/scripts\/wc\/updateCartFragmentsFix.js"],"icon_url":"","summary":"Fix problem with the quantity icon of the mini cart","type":"theme","id":"theme:591f4f1b2e86b1e987cd8789df3ffce3","is_default":0,"created_at":1724444280},"c385fdb6-ac41-4b00-a350-1e2e82445e22":{"title":"Woodmart - Menu","condition":"woodmart","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/woodmart\/js\/scripts\/global\/helpers.min.js","\/themes\/woodmart\/js\/scripts\/menu\/menuOffsets.min.js","\/themes\/woodmart\/js\/libs\/swiper.min.js"],"icon_url":"","summary":"When Delay JavaScript Execution is enabled, menu dropdowns won't work consistently when clicked (seems to happen if page is refreshed and no user interaction happens until after page is fully loaded).","type":"theme","id":"theme:d8453e5704ad631dd785e452ce75c9f6","is_default":0,"created_at":1729535544},"97066e39-027a-4cd6-9152-7b6b53f365f5":{"title":"Woodmart - Mobile Menu","condition":"woodmart","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/woodmart\/js\/scripts\/menu\/mobileNavigation.min.js","\/themes\/woodmart\/js\/scripts\/global\/helpers.min.js"],"icon_url":"","summary":"Allow mobile menu to work with just one click.","type":"theme","id":"theme:d79a3941e2f12fb93ffc980ebeb1d7f4","is_default":0,"created_at":1724444264},"b654d55b-8094-40a6-b145-48572d2c396d":{"title":"Woodmart - Sticky Header","condition":"woodmart","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/themes\/woodmart\/js\/scripts\/global\/helpers.min.js","\/themes\/woodmart\/js\/scripts\/header\/headerBuilder.min.js"],"summary":"When Delay JavaScript Execution is enabled, the header is no longer sticky when scrolling down the page.","icon_url":"","type":"theme","id":"theme:aa0d7919216f3bb2e405069d206dfda4","is_default":0,"created_at":1729604626},"926d3769-8ce6-4137-b682-44124909d2cc":{"title":"WooVina - Fix Preloader and Hero section","condition":"woovina","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?( |'|\"|>|$)","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/woovina-preloader\/assets\/js\/wvp-main-script.js","\/woovina\/assets\/js\/main.min.js","\/woovina-elementor-widgets\/assets\/js\/wew-frontend.min.js","\/woovina-elementor-widgets\/assets\/js\/blog-carousel.min.js","\/woovina-elementor-widgets\/assets\/js\/tabs.min.js"],"icon_url":"","summary":"Fixes preloader and hero section","type":"theme","category":"analytics","id":"theme:23a0047d6cddc8e93a6695e42aa24da0","is_default":0,"created_at":1739814571},"119ebd1c-6b46-4f07-8d6a-3498d9c8814f":{"title":"XStore","condition":"xstore","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/xstore\/js\/","\/et-core-plugin\/packages\/st-woo-swatches\/public\/js\/frontend.min.js"],"icon_url":"","type":"theme","id":"theme:3de9d9ba385200548f177d9c704ae92a","is_default":0,"created_at":1679738190},"9a7a548c-07a1-4dff-93fc-6e8230b67853":{"title":"YOOtheme Pro","condition":"yootheme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","uikit.min.js"],"icon_url":"","summary":"Show animations and image in header on page load.\r\n\r\n\r\n\/yootheme\/","type":"theme","id":"theme:119d329456073aa10969d7cbd9760f28","is_default":0,"created_at":1724444774},"f74c499e-b7d9-4590-8671-379f51f468c8":{"title":"Zeen","condition":"zeen","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/zeen\/assets\/js\/","\/js.cookie.min.js"],"icon_url":"","summary":"Starts animations on pageload","type":"theme","id":"theme:acb52844f996627788836366404a3245","is_default":0,"created_at":1724444815}},"scripts":{"analytics":{"2499bb90-0753-4b2b-9bd4-1525f94c7437":{"title":"Google Analytics","exclusions":["google-analytics.com\/analytics.js","ga\\( '","ga\\('"],"icon_url":"","summary":"Google Analytics","type":"script","category":"analytics","id":"script:d86cf69a8b82547a94ca3f6a307cf9a6","is_default":0,"created_at":1734096382},"ac2d5720-9418-468c-80a0-3874ee743c0f":{"title":"Google Optimize","exclusions":["a,s,y,n,c,h,i,d,e","googleoptimize.com\/optimize.js","async-hide"],"icon_url":"","summary":"Prevent a flicker or blank screen.","type":"script","category":"analytics","id":"script:031a0cece38c4739df67f910dcabf1bd","is_default":0,"created_at":1734096440},"219277ae-b2ac-4d42-913d-eaea40985295":{"title":"Google Tag Manager","exclusions":["\/gtag\/js","gtag\\(","\/gtm.js","async-hide"],"icon_url":"","summary":"","type":"script","category":"analytics","id":"script:1d3c65b2b03ef35e14df6b163ea3a1f6","is_default":0,"created_at":1733481215},"f632e3f4-20e6-471e-a78d-86afbea63586":{"title":"HubSpot","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","js(.*).hsforms.net","hbspt.forms.create","MeetingsEmbed\/ex\/MeetingsEmbedCode.js"],"icon_url":"","summary":"Display the form","type":"script","category":"analytics","id":"script:de4bd8ef4675ebb85a055955de76d0ee","is_default":0,"created_at":1742318463}},"ad_networks":{"dd0c5a5b-ec56-49f9-9aa4-89e1e3a6a28a":{"title":"Amazon Ads","exclusions":["amazon-adsystem.com"],"icon_url":"","summary":"To show the ads","type":"script","category":"ad_networks","id":"script:b82a5936d8ea0745016caeb71629ae5d","is_default":0,"created_at":1734083105},"980edf32-c64b-4370-bf23-c62b079e71c3":{"title":"Google AdSense","exclusions":["adsbygoogle"],"icon_url":"","summary":"Google Adsense","type":"script","category":"ad_networks","id":"script:0206e6040c8ff64b8d6ee5fef2ce1c90","is_default":0,"created_at":1734096273},"49c38c0a-43b9-4237-88cb-57ddd519f0ad":{"title":"Venatus Media","exclusions":["\/ad-manager.min.js","__vm_add"],"icon_url":"","summary":"Show ads on page load.","type":"script","category":"ad_networks","id":"script:abe11528732aed9a19a97e73b242faa5","is_default":0,"created_at":1734096334},"0627fe24-7e9d-400f-b064-d98bec2ba85e":{"title":"Yandex Ads","exclusions":["yandex.ru","window.yaContextCb"],"icon_url":"","summary":"Display Ads without interaction","type":"script","category":"ad_networks","id":"script:dbd1875130c71eb4b2ef768ad18d820c","is_default":0,"created_at":1734096360}},"payment_processors":{"05d3eb78-f574-49be-95e1-3f11714005d1":{"title":"Stripe","exclusions":["js.stripe.com"],"icon_url":"","summary":"Fixes ReferenceError: Stripe is not defined","type":"script","category":"payment_processors","id":"script:ce7566d1d08cc094b74cf283cf9c56a5","is_default":0,"created_at":1734077637}},"other_services":{"6f2f3fce-7671-416a-a322-08875c4badb5":{"title":"Cloudflare Turnstile","exclusions":["cloudflare.com\/turnstile\/","cf-turnstile"],"summary":"While DJE applied, the Cloudflare Turnstile Captcha doesn't appear at all.","icon_url":"","type":"script","category":"other_services","id":"script:7b1ae689f336775afa7835a9da7be645","is_default":0,"created_at":1742993345},"6f460036-3106-4b8c-9951-d32de9b1258f":{"title":"Google Maps","exclusions":["maps.googleapis.com","maps.google.com"],"icon_url":"","summary":"Google Maps","type":"script","category":"other_services","id":"script:4d60ab2c6d11d753267484006c23e54c","is_default":0,"created_at":1734096371},"122e6ebb-51fd-477f-97fb-559593f1a48b":{"title":"Google Recaptcha","exclusions":["recaptcha"],"icon_url":"","summary":"Fixes dependency issues related to Google Recaptcha","type":"script","category":"other_services","id":"script:032cb16577cbf07bc7c02bac83bd936d","is_default":0,"created_at":1734096345},"668df886-2f43-46fa-8426-7be3d7f7d150":{"title":"LeadConnector Chatbox","exclusions":["\/chat-widget\/loader.js"],"icon_url":"","summary":"The chatbox icon\/button does not display until user interaction.\r\n\r\nThis should likely be moved to a new category aside from 'Other Services' once the categories are expanded. Most likely 'Widgets'.\r\n\r\nRelated discussion:\r\nhttps:\/\/wp-media.slack.com\/archives\/C43T1AYMQ\/p1734619420716789?thread_ts=1734605228.860859&cid=C43T1AYMQ\r\n\r\nWebsite using this Chatbox:\r\nhttps:\/\/premiermarketingus.com\r\n\r\nIt uses a custom element for the Chatbox that could be used for limiting display in UI to only sites using this widget: ","type":"script","category":"other_services","id":"script:eeda31f2e95b6f4c2107aebe2887bfe8","is_default":0,"created_at":1734620886},"5d606add-ffb8-4a06-b295-5f722710fbfd":{"title":"Refari","exclusions":["widget.refari.co","refari"],"icon_url":"","summary":"www.refari.co","type":"script","category":"other_services","id":"script:a705e197b13b47e72a105c923e044358","is_default":0,"created_at":1734096181},"742ec14a-27a1-4789-b9c8-a9c3a3cf7042":{"title":"Reviews.io","exclusions":["\/carousel-inline-iframeless\/dist.js","carouselInlineWidget"],"icon_url":"","summary":"Prevents the widget from breaking","type":"script","category":"other_services","id":"script:4df445c576f45889506ba175a4c39fdc","is_default":0,"created_at":1734096412},"0a37e528-8718-49f7-a26d-059aa29f867d":{"title":"Trustindex","exclusions":["cdn.trustindex.io\/loader.js","cdn.trustindex.io\/loader-cert.js"],"icon_url":"","summary":"Trustindex element is shown immediately","type":"script","category":"other_services","id":"script:1d38d6195597e8bb81966870f0a4f939","is_default":0,"created_at":1734096229},"dda024ec-4539-4a00-aee8-d9522aa9ba27":{"title":"Trustindex - Load Rich Snippets","exclusions":["cdn.trustindex.io\/assets\/js\/richsnippet.js"],"icon_url":"","summary":"Allow Trustindex Rich Snippets JavaScript to be loaded on the page and show up in Google's Rich Snippet Testing Tool.","type":"script","category":"other_services","id":"script:55d971acbd86a7676772bca65c37c0c0","is_default":0,"created_at":1752130743},"ce9a3865-9efa-4e98-ae10-4f842a4ecc22":{"title":"Typeform","exclusions":["\/next\/embed.js"],"icon_url":"","summary":"Load Typeforms without interaction","type":"script","category":"other_services","id":"script:cd3889ae3b96f891186ae270dbbcc9bb","is_default":0,"created_at":1734096391},"b56bf06c-2f8c-4757-b536-a689fb0e75f9":{"title":"Typekit","exclusions":["typekit"],"icon_url":"","summary":"Load Typekit fonts on page load","type":"script","category":"other_services","id":"script:7815e38b93e3b500a632681bd594bd61","is_default":0,"created_at":1734096353},"03819e72-abf5-4057-9047-16d45db4641e":{"title":"Vidalytics - Autoplay","exclusions":["vidalytics_embed"],"summary":"Allows the autoplay functionality to work for videos without need for user interaction first.","icon_url":"","type":"script","category":"other_services","id":"script:113087c8df349e7c8b86875b46071855","is_default":0,"created_at":1736531452},"2c1d0998-8ab5-478c-8eb9-9e375b46363e":{"title":"Wistia","exclusions":["fast.wistia.com","\/assets\/external\/E-v1.js"],"icon_url":"","summary":"Show video on page load","type":"script","category":"other_services","id":"script:9a0111f8c3186c1cb3113587c660c041","is_default":0,"created_at":1734096254}}}} \ No newline at end of file diff --git a/web/app/plugins/wp-rocket/dynamic-lists-incompatible-plugins.json b/web/app/plugins/wp-rocket/dynamic-lists-incompatible-plugins.json index 9f88e3d07..274a8a3db 100644 --- a/web/app/plugins/wp-rocket/dynamic-lists-incompatible-plugins.json +++ b/web/app/plugins/wp-rocket/dynamic-lists-incompatible-plugins.json @@ -1 +1 @@ -{"":[{"slug":"wp-optimize","file":"wp-optimize\/wp-optimize.php"},{"slug":"airlift","file":"airlift\/airlift.php"},{"slug":"leverage-browser-caching-ninjas","file":"leverage-browser-caching-ninjas\/leverage-browser-caching-ninja.php"},{"slug":"wp-fast-cache","file":"wp-fast-cache\/wp-fast-cache.php"},{"slug":"hyper-cache","file":"hyper-cache\/plugin.php"},{"slug":"wp-http-compression","file":"wp-http-compression\/wp-http-compression.php"},{"slug":"cache-enabler","file":"cache-enabler\/cache-enabler.php"},{"slug":"flexicache","file":"flexicache\/wp-plugin.php"},{"slug":"litespeed-cache","file":"litespeed-cache\/litespeed-cache.php"},{"slug":"quick-cache","file":"quick-cache\/quick-cache.php"},{"slug":"w3-total-cache","file":"w3-total-cache\/w3-total-cache.php"},{"slug":"wp-performance-score-booster","file":"wp-performance-score-booster\/wp-performance-score-booster.php"},{"slug":"remove-query-strings-from-static-resources","file":"remove-query-strings-from-static-resources\/remove-query-strings.php"},{"slug":"query-strings-remover","file":"query-strings-remover\/query-strings-remover.php"},{"slug":"swift-performance","file":"swift-performance\/performance.php"},{"slug":"wp-super-cache","file":"wp-super-cache\/wp-cache.php"},{"slug":"gator-cache","file":"gator-cache\/gator-cache.php"},{"slug":"page-optimize","file":"page-optimize\/page-optimize.php"},{"slug":"leverage-browser-caching","file":"leverage-browser-caching\/leverage-browser-caching.php"},{"slug":"wp-fastest-cache","file":"wp-fastest-cache\/wpFastestCache.php"},{"slug":"enable-gzip-compression","file":"enable-gzip-compression\/enable-gzip-compression.php"},{"slug":"hyper-cache-extended","file":"hyper-cache-extended\/plugin.php"},{"slug":"force-gzip","file":"force-gzip\/force-gzip.php"},{"slug":"add-expires-headers","file":"add-expires-headers\/add-expires-headers.php"},{"slug":"lite-cache","file":"lite-cache\/plugin.php"},{"slug":"psn-pagespeed-ninja","file":"psn-pagespeed-ninja\/pagespeedninja.php"},{"slug":"speed-booster-pack","file":"speed-booster-pack\/speed-booster-pack.php"},{"slug":"wp-ffpc","file":"wp-ffpc\/wp-ffpc.php"},{"slug":"super-static-cache","file":"super-static-cache\/super-static-cache.php"},{"slug":"wpcompressor","file":"wpcompressor\/wpcompressor.php"},{"slug":"swift-performance-lite","file":"swift-performance-lite\/performance.php"},{"slug":"far-future-expiry-header","file":"far-future-expiry-header\/far-future-expiration.php"},{"slug":"combine-css","file":"combine-css\/combine-css.php"},{"slug":"gzip-ninja-speed-compression","file":"gzip-ninja-speed-compression\/gzip-ninja-speed.php"},{"slug":"check-and-enable-gzip-compression","file":"check-and-enable-gzip-compression\/richards-toolbox.php"},{"slug":"wordpress-gzip-compression","file":"wordpress-gzip-compression\/ezgz.php"}],"control_heartbeat":[{"slug":"heartbeat-control","file":"heartbeat-control\/heartbeat-control.php"}],"minify_css||minify_js":[{"slug":"async-js-and-css","file":"async-js-and-css\/asyncJSandCSS.php"},{"slug":"fast-velocity-minify","file":"fast-velocity-minify\/fvm.php"},{"slug":"scripts-gzip","file":"scripts-gzip\/scripts_gzip.php"},{"slug":"bwp-minify","file":"bwp-minify\/bwp-minify.php"},{"slug":"wp-super-minify","file":"wp-super-minify\/wp-super-minify.php"},{"slug":"wp-minify","file":"wp-minify\/wp-minify.php"},{"slug":"merge-minify-refresh","file":"merge-minify-refresh\/merge-minify-refresh.php"},{"slug":"minqueue","file":"minqueue\/plugin.php"},{"slug":"dependency-minification","file":"dependency-minification\/dependency-minification.php"}],"lazyload_iframes":[{"slug":"lazy-load-for-videos","file":"lazy-load-for-videos\/codeispoetry.php"}],"lazyload":[{"slug":"bj-lazy-load","file":"bj-lazy-load\/bj-lazy-load.php"},{"slug":"lazy-load","file":"lazy-load\/lazy-load.php"},{"slug":"advanced-lazy-load","file":"advanced-lazy-load\/advanced_lazyload.php"},{"slug":"jquery-image-lazy-loading","file":"jquery-image-lazy-loading\/jq_img_lazy_load.php"},{"slug":"crazy-lazy","file":"crazy-lazy\/crazy-lazy.php"},{"slug":"specify-image-dimensions","file":"specify-image-dimensions\/specify-image-dimensions.php"}],"auto_preload_fonts":[{"slug":"custom-fonts","file":"custom-fonts\/custom-fonts.php"}],"minify_js":[{"slug":"footer-javascript","file":"footer-javascript\/footer-javascript.php"},{"slug":"combine-js","file":"combine-js\/combine-js.php"},{"slug":"scripts-to-footerphp","file":"scripts-to-footerphp\/scripts-to-footer.php"},{"slug":"wp-js","file":"wp-js\/wp-js.php"}]} \ No newline at end of file +{"":[{"slug":"check-and-enable-gzip-compression","file":"check-and-enable-gzip-compression\/richards-toolbox.php"},{"slug":"remove-query-strings-from-static-resources","file":"remove-query-strings-from-static-resources\/remove-query-strings.php"},{"slug":"wpcompressor","file":"wpcompressor\/wpcompressor.php"},{"slug":"wp-super-cache","file":"wp-super-cache\/wp-cache.php"},{"slug":"hyper-cache-extended","file":"hyper-cache-extended\/plugin.php"},{"slug":"query-strings-remover","file":"query-strings-remover\/query-strings-remover.php"},{"slug":"gator-cache","file":"gator-cache\/gator-cache.php"},{"slug":"hyper-cache","file":"hyper-cache\/plugin.php"},{"slug":"wordpress-gzip-compression","file":"wordpress-gzip-compression\/ezgz.php"},{"slug":"psn-pagespeed-ninja","file":"psn-pagespeed-ninja\/pagespeedninja.php"},{"slug":"quick-cache","file":"quick-cache\/quick-cache.php"},{"slug":"super-static-cache","file":"super-static-cache\/super-static-cache.php"},{"slug":"lite-cache","file":"lite-cache\/plugin.php"},{"slug":"wp-fast-cache","file":"wp-fast-cache\/wp-fast-cache.php"},{"slug":"airlift","file":"airlift\/airlift.php"},{"slug":"gzip-ninja-speed-compression","file":"gzip-ninja-speed-compression\/gzip-ninja-speed.php"},{"slug":"swift-performance","file":"swift-performance\/performance.php"},{"slug":"force-gzip","file":"force-gzip\/force-gzip.php"},{"slug":"wp-http-compression","file":"wp-http-compression\/wp-http-compression.php"},{"slug":"swift-performance-lite","file":"swift-performance-lite\/performance.php"},{"slug":"enable-gzip-compression","file":"enable-gzip-compression\/enable-gzip-compression.php"},{"slug":"wp-fastest-cache","file":"wp-fastest-cache\/wpFastestCache.php"},{"slug":"litespeed-cache","file":"litespeed-cache\/litespeed-cache.php"},{"slug":"w3-total-cache","file":"w3-total-cache\/w3-total-cache.php"},{"slug":"add-expires-headers","file":"add-expires-headers\/add-expires-headers.php"},{"slug":"speed-booster-pack","file":"speed-booster-pack\/speed-booster-pack.php"},{"slug":"combine-css","file":"combine-css\/combine-css.php"},{"slug":"leverage-browser-caching-ninjas","file":"leverage-browser-caching-ninjas\/leverage-browser-caching-ninja.php"},{"slug":"page-optimize","file":"page-optimize\/page-optimize.php"},{"slug":"wp-performance-score-booster","file":"wp-performance-score-booster\/wp-performance-score-booster.php"},{"slug":"flexicache","file":"flexicache\/wp-plugin.php"},{"slug":"far-future-expiry-header","file":"far-future-expiry-header\/far-future-expiration.php"},{"slug":"wp-ffpc","file":"wp-ffpc\/wp-ffpc.php"},{"slug":"cache-enabler","file":"cache-enabler\/cache-enabler.php"},{"slug":"wp-optimize","file":"wp-optimize\/wp-optimize.php"},{"slug":"leverage-browser-caching","file":"leverage-browser-caching\/leverage-browser-caching.php"}],"minify_js":[{"slug":"scripts-to-footerphp","file":"scripts-to-footerphp\/scripts-to-footer.php"},{"slug":"wp-js","file":"wp-js\/wp-js.php"},{"slug":"combine-js","file":"combine-js\/combine-js.php"},{"slug":"footer-javascript","file":"footer-javascript\/footer-javascript.php"}],"minify_css||minify_js":[{"slug":"wp-super-minify","file":"wp-super-minify\/wp-super-minify.php"},{"slug":"fast-velocity-minify","file":"fast-velocity-minify\/fvm.php"},{"slug":"bwp-minify","file":"bwp-minify\/bwp-minify.php"},{"slug":"minqueue","file":"minqueue\/plugin.php"},{"slug":"dependency-minification","file":"dependency-minification\/dependency-minification.php"},{"slug":"async-js-and-css","file":"async-js-and-css\/asyncJSandCSS.php"},{"slug":"merge-minify-refresh","file":"merge-minify-refresh\/merge-minify-refresh.php"},{"slug":"scripts-gzip","file":"scripts-gzip\/scripts_gzip.php"},{"slug":"wp-minify","file":"wp-minify\/wp-minify.php"}],"control_heartbeat":[{"slug":"heartbeat-control","file":"heartbeat-control\/heartbeat-control.php"}],"lazyload":[{"slug":"advanced-lazy-load","file":"advanced-lazy-load\/advanced_lazyload.php"},{"slug":"crazy-lazy","file":"crazy-lazy\/crazy-lazy.php"},{"slug":"jquery-image-lazy-loading","file":"jquery-image-lazy-loading\/jq_img_lazy_load.php"},{"slug":"lazy-load","file":"lazy-load\/lazy-load.php"},{"slug":"bj-lazy-load","file":"bj-lazy-load\/bj-lazy-load.php"},{"slug":"specify-image-dimensions","file":"specify-image-dimensions\/specify-image-dimensions.php"}],"auto_preload_fonts":[{"slug":"custom-fonts","file":"custom-fonts\/custom-fonts.php"}],"lazyload_iframes":[{"slug":"lazy-load-for-videos","file":"lazy-load-for-videos\/codeispoetry.php"}]} \ No newline at end of file diff --git a/web/app/plugins/wp-rocket/dynamic-lists.json b/web/app/plugins/wp-rocket/dynamic-lists.json index 2642cc319..37281d7f8 100644 --- a/web/app/plugins/wp-rocket/dynamic-lists.json +++ b/web/app/plugins/wp-rocket/dynamic-lists.json @@ -1 +1 @@ -{"rucss_inline_atts_exclusions":["rocket-lazyload-inline-css","divi-style-parent-inline-inline-css","gsf-custom-css","extra-style-inline-inline-css","woodmart-inline-css-inline-css","woodmart_shortcodes-custom-css","rs-plugin-settings-inline-css","divi-style-inline-inline-css","tcb-post-list-dynamic-style","n2-ss-","wpcf7-","siteorigin-panels-layouts-footer","xstore-inline-css-inline-css","assets.reviews.io","ezoicCSS","stk-","rocket-lazyrender-inline-css","umsMapStyles_","trx_addons-inline-styles-inline-css","greyd-custom-styles-footer"],"rucss_inline_content_exclusions":[".wp-container-",".wp-elements-","#wpv-expandable-",".custom-content-","#thb-",".et_pb_text_dap_","#gdlr-core-shape-divider","#ultib3-",".uvc-wrap-",".jet-listing-dynamic-post-",".vcex_",".wprm-advanced-list-",".adsslot_",".jnews_",".cp-info-bar.content-","#stockie-custom-","#ohio-custom-",".uid-","#wpfMainWrapper","#penci_","#penci-",".wpbs_s","#apcore_","#apress_","#zolo_",".extended-products-grid#style-",".preloader#style-preloader-",".thegem-heading-",".thegem-button-",".thegem-custom-",".thegem-popup-","#pattern-","#thegem-video-frame-","#thegem-",".qwery_inline_",".dcgd_submit_button",".irs-bar",".gallery-grid-",".cmplz-hidden","#sqbquizouter","#start_sqbquizouter",".flo-header--",".trx_addons_inline_",".wpp-cardview-compact",".e-loop-item-",".tiered-pricing-plain-text",".vc_cta3_content-container",".vc_btn-gradient-btn-",".et_pb_de_mach_title_",".et_pb_dmach_section_","img#wpstats",".ti-widget"],"defer_js_inline_exclusions":["DOMContentLoaded","document.write","window.lazyLoadOptions","N.N2_","rev_slider_wrapper","FB3D_CLIENT_LOCALE","ewww_webp_supported","anr_captcha_field_div","renderInvisibleReCaptcha","bookingInProgress"],"defer_js_external_exclusions":["gist.github.com","content.jwplatform.com","js.hsforms.net","www.uplaunch.com","google.com\/recaptcha","widget.reviews.co.uk","verify.authorize.net\/anetseal","lib\/admin\/assets\/lib\/webfont\/webfont.min.js","app.mailerlite.com","widget.reviews.io","simplybook.(.*)\/v2\/widget\/widget.js","\/wp-includes\/js\/dist\/i18n.min.js","\/wp-content\/plugins\/wpfront-notification-bar\/js\/wpfront-notification-bar(.*).js","\/wp-content\/plugins\/oxygen\/component-framework\/vendor\/aos\/aos.js","\/wp-content\/plugins\/ewww-image-optimizer\/includes\/check-webp(.min)?.js","static.mailerlite.com\/data\/(.*).js","cdn.voxpow.com\/static\/libs\/v1\/(.*).js","cdn.voxpow.com\/media\/trackers\/js\/(.*).js","use.typekit.net","www.idxhome.com","\/wp-includes\/js\/dist\/vendor\/lodash(.min)?.js","\/wp-includes\/js\/dist\/api-fetch(.min)?.js","\/wp-includes\/js\/dist\/i18n(.min)?.js","\/wp-includes\/js\/dist\/vendor\/wp-polyfill(.min)?.js","\/wp-includes\/js\/dist\/url(.min)?.js","\/wp-includes\/js\/dist\/hooks(.min)?.js","www.paypal.com\/sdk\/js","js-eu1.hsforms.net","yanovis.Voucher.js","\/carousel-upsells-and-related-product-for-woocommerce\/assets\/js\/glide.min.js","use.typekit.com","\/artale\/modules\/kirki\/assets\/webfont.js","\/api\/scripts\/lb_cs.js","js.hscta.net\/cta\/current.js","widget.refari.co","player.vdocipher.com","\/wp-content\/plugins\/wp-rocket\/assets\/js\/lcp-beacon(.min)?.js"],"delay_js_exclusions":["nowprocket","\/wp-includes\/js\/wp-embed.min.js","lazyLoadOptions","lazyLoadThumb","wp-rocket\/assets\/js\/lazyload\/(.*)","et_core_page_resource_fallback","window.\\$us === undefined","js-extra","fusionNavIsCollapsed","\/assets\/js\/smush-lazy-load","eio_lazy_vars","\\\/lazysizes(\\.min|-pre|-post)?\\.js","document\\.body\\.classList\\.remove\\(\"no-js\"\\)","document\\.documentElement\\.className\\.replace\\( 'no-js', 'js' \\)","et_animation_data","wpforms_settings","var nfForms","\/\/stats.wp.com","_stq.push","fluent_form_ff_form_instance_","cpLoadCSS","ninja_column_","var rbs_gallery_","var lepopup_","var billing_additional_field","var gtm4wp","var dataLayer_content","\/ewww-image-optimizer\/includes\/load[_-]webp(\\.min)?.js","\/ewww-image-optimizer\/includes\/check-webp(\\.min)?.js","ewww_webp_supported","\/dist\/js\/browser-redirect\/app.js","\/perfmatters\/js\/lazyload.min.js","lazyLoadInstance","scripts.mediavine.com\/tags\/","initCubePortfolio","simpli.fi","gforms_recaptcha_","\/jetpack-boost\/vendor\/automattic\/jetpack-lazy-images\/(.*)","jetpack-lazy-images-js-enabled","jetpack-boost-critical-css","wpformsRecaptchaCallback","booking-suedtirol-js","wpcp_css_disable_selection","\/gravityforms\/js\/conditional_logic.min.js","statcounter.com\/counter\/counter.js","var sc_project","\/jetpack\/jetpack_vendor\/automattic\/jetpack-lazy-images\/(.*)","\/themify-builder\/themify\/js\/modules\/fallback(\\.min)?.js","handlePixMessage","var corner_video","cdn.pixfuture.com\/hb_v2.js","cdn.pixfuture.com\/pbix.js","served-by.pixfuture.com\/www\/delivery\/ads.js","served-by.pixfuture.com\/www\/delivery\/headerbid_sticky_refresh.js","serv-vdo.pixfuture.com\/vpaid\/ads.js","wprRemoveCPCSS","window.jdgmSettings","\/photonic\/include\/js\/front-end\/nomodule\/photonic-baguettebox.min.js","\/photonic\/include\/ext\/baguettebox\/baguettebox.min.js","window.wsf_form_json_config","et_link_options_data","FuseboxPlayerAPIKey","js.hscta.net\/cta\/current.js","hbspt.cta.load","consent.cookiebot.com\/uc.js","\/woofilter-pro\/woofilterpro\/js\/ion.rangeSlider.min.js","barra.r7.com\/barra.js","rocket_css_lazyload_launch","#wpr-lazyload-bg","\/wp-content\/plugins\/wp-rocket\/assets\/js\/lcp-beacon(.min)?.js","rocket_lcp_data","rocket_beacon_data","\/wp-content\/plugins\/wp-rocket\/assets\/js\/wpr-beacon(.min)?.js","elm.style.display=\"none\""],"js_minify_external":["html5.js","show_ads.js","histats.com\/js","ws.amazon.com\/widgets","\/ads\/","intensedebate.com","scripts.chitika.net\/","jotform.com\/","gist.github.com","forms.aweber.com","video.unrulymedia.com","stats.wp.com","stats.wordpress.com","widget.rafflecopter.com","widget-prime.rafflecopter.com","releases.flowplayer.org","c.ad6media.fr","cdn.stickyadstv.com","www.smava.de","contextual.media.net","app.getresponse.com","adserver.reklamstore.com","s0.wp.com","wprp.zemanta.com","files.bannersnack.com","smarticon.geotrust.com","js.gleam.io","ir-na.amazon-adsystem.com","web.ventunotech.com","verify.authorize.net","ads.themoneytizer.com","embed.finanzcheck.de","imagesrv.adition.com","js.juicyads.com","form.jotformeu.com","speakerdeck.com","content.jwplatform.com","ads.investingchannel.com","app.ecwid.com","www.industriejobs.de","s.gravatar.com","googlesyndication.com","a.optmstr.com","a.optmnstr.com","a.opmnstr.com","adthrive.com","mediavine.com","js.hsforms.net","googleadservices.com","f.convertkit.com","recaptcha\/api.js","mailmunch.co","apps.shareaholic.com","dsms0mj1bbhn4.cloudfront.net","nutrifox.com","code.tidio.co","www.uplaunch.com","widget.reviewability.com","embed-cdn.gettyimages.com\/widgets.js","app.mailerlite.com","ck.page","cdn.jsdelivr.net\/gh\/AmauriC\/","static.klaviyo.com\/onsite\/js\/klaviyo.js","a.omappapi.com\/app\/js\/api.min.js","static.zdassets.com","feedbackcompany.com\/widgets\/feedback-company-widget.min.js","widget.gleamjs.io","phonewagon.com","simplybook.asia\/v2\/widget\/widget.js","simplybook.it\/v2\/widget\/widget.js","simplybook.me\/v2\/widget\/widget.js","static.botsrv.com\/website\/js\/widget2.36cf1446.js","static.mailerlite.com\/data\/","cdn.voxpow.com","loader.knack.com","embed.lpcontent.net\/leadboxes\/current\/embed.js","cc.cdn.civiccomputing.com\/9\/cookieControl-9.x.min.js","cse.google.com\/cse.js","kit.fontawesome.com","cdn.jsdelivr.net\/npm\/mathjax@3\/es5\/tex-mml-chtml.js","static.leadpages.net\/leadbars\/current\/embed.js","booqable.com\/v2\/booqable.js","googleoptimize.com","cdna.hubpeople.com\/js\/widget_standalone_two_modes.js","s3.tradingview.com","www.vbt.io\/ext\/vbtforms.js","cdn.callrail.com","documentcloud.adobe.com\/view-sdk\/main.js","static.cleverpush.com","js.afterpay.com","cdn.enable.co.il\/licenses\/enable-","hcaptcha.com\/1\/api.js","voucher.getavo.it\/public\/js\/yanovis.Voucher.js","js-eu1.hsforms.net","statcounter.com\/counter\/counter.js","snapppt.com","use.typekit.com","secure.gravatar.com\/js\/gprofiles.js","cdn.jsdelivr.net\/npm\/hockeystack","widget.prod.faslet.net","ga.getresponse.com\/script\/ga.js","cognitoforms.com","usercentrics.eu","cdn.amcharts.com","umami","cdn.popt.in\/pixel.js","m2d.m2.ai","pubguru.net","trustindex.io","cdnjs.cloudflare.com\/ajax\/libs\/prism\/","podigee-podcast-player.js","tarteaucitron.io\/load.js","osm.klarnaservices.com\/lib.js","mein.clickskeks.at\/app.js","barra.r7.com\/barra.js","widget.refari.co","widget.reviews.co.uk","player.vdocipher.com","www.instagram.com\/embed.js","smartframe.io","challenges.cloudflare.com\/turnstile\/","script.roboassist.ai","cdn.hu-manity.co","daumcdn.net\/mapjsapi\/bundle\/postcode\/prod\/postcode.v2.js","consent.cookiebot.com","umstats.tools.coolw.xyz","powerad.ai","leadconnectorhq.com","buzzsprout.com","embed.reddit.com\/widgets.js","onfastspring.com","widget.superchat.de\/snippet.js"],"js_move_after_combine":["map_fusion_map_","ec:addProduct","ec:addImpression","clear_better_facebook_comments","vc-row-destroy-equal-heights-","dfd-icon-list-","SFM_template","WLTChangeState","wlt_star_","wlt_pop_distance_","smart_list_tip","gd-wgt-pagi-","data-rf-id=","tvc_po=","scrapeazon","startclock","it_logo_field_owl-box_","td_live_css_uid","wpvl_paramReplace","tdAjaxCount","mec_skin_","_wca","_taboola","fbq('trackCustom'","fbq('track'","data.token","sharrre","dfads_ajax_load_ads","tie_postviews","wmp_update","h5ab-print-article","gform_ajax_frame_","gform_post_render","mts_view_count","act_css_tooltip","window.SLB","wpt_view_count","var dateNow","gallery_product_",".flo-block-slideshow-","data='api-key=ct-","ip_common_function()","(\"style#gsf-custom-css\").append","a3revWCDynamicGallery_","#owl-carousel-instagram-","window.FlowFlowOpts","jQuery('.td_uid_","jQuery(\".slider-","#dfd-vcard-widget-","#sf-instagram-widget-",".woocommerce-tabs-","penci_megamenu__","vc_prepareHoverBox","wp-temp-form-div","_wswebinarsystem_already_","#views-extra-css\").text","fusetag.setTargeting","hit.uptrendsdata.com","callback:window.renderBadge","test_run_nf_conditional_logic","cb_nombre","$('.fl-node-","function($){google_maps_","$(\"#myCarousel","et_animation_data=","current_url=\"","CustomEvent.prototype=window.Event.prototype","electro-wc-product-gallery","woof_is_mobile","jQuery('.videonextup","wpp_params","us.templateDirectoryUri=",".fat-gallery-item",".ratingbox","user_rating.prototype.eraseCookie","test_run_nf_conditional","dpsp-networks-btns-wrapper","pa_woo_product_info","sharing_enabled_on_post_via_metabox","#product-search-field-","GOTMLS_login_offset","berocket_aapf_time_to_fix_products_style","window.vc_googleMapsPointer","sinceID_","#ut-background-video-ut-section","+window.comment_tab_width+","dfd-button-hover-in","wpseo-address-wrapper","platform.stumbleupon.com","#woo_pp_ec_button_mini_cart","#supercarousel","blockClass","tdbMenuItem","tdbSearchItem","best_seller_badge","jQuery('#product-top-bar","fb_desc-","FC_regenerate_captcha","wp_post_blocks_vars.listed_posts=[","captcha-hash","mapdata={",".ywpc-char-",").countdowntimer(","jQuery(\"#td_uid_","find('#td_uid_","variation_estimate_msg"],"js_excluded_inline":["document.write","google_ad","edToolbar","gtag","_gaq.push","_gaLt","GoogleAnalyticsObject","syntaxhighlighter","adsbygoogle","ci_cap_","_stq","nonce","post_id","LogHuman","idcomments_acct","ch_client","sc_online_t","_stq","bannersnack_embed","vtn_player_type","ven_video_key","ANS_customer_id","tdBlock","tdLocalCache","wpRestNonce","\"url\":","lazyLoadOptions","adthrive","loadCSS","google_tag_params","clicky_custom","clicky_site_ids","NSLPopupCenter","_paq","gtm","dataLayer","RecaptchaLoad","WPCOM_sharing_counts","jetpack_remote_comment","subscribe-field","contextly","_mmunch","gt_request_uri","doGTranslate","docTitle","bs_ajax_paginate_","bs_deferred_loading_","theChampRedirectionUrl","theChampFBCommentUrl","theChampTwitterRedirect","theChampRegRedirectionUrl","ESSB_CACHE_URL","oneall_social_login_providers_","betterads_screen_width","woocommerce_wishlist_add_to_wishlist_url","arf_conditional_logic","heateorSsHorSharingShortUrl","TL_Const","bimber_front_microshare","setAttribute(\"id\"","setAttribute( \"id\"","TribeEventsPro","peepsotimedata","wphc_data","hc_rand_id","RBL_ADD","AfsAnalyticsObject","_thriveCurrentPost","esc_login_url","fwduvpMainPlaylist","Bibblio.initRelatedContent","showUFC()","#iphorm-","#fancy-","ult-carousel-","theChampLJAuthUrl","f._fbq","Insticator","w2dc_js_objects","cherry_ajax","ad_block_","elementorFrontendConfig","zeen_","disqusIdentifier","currentAjaxUrl","geodir_event_call_calendar_","atatags-","hbspt.forms.create","function(c,h,i,m,p)","dataTable({","rankMath = {","_atrk_opts","quicklinkOptions","ct_checkjs_","WP_Statistics_http","penci_block_","omapi_localized","omapi_data","OptinMonsterApp","tminusnow","nfForms","galleries.gallery_","wcj_evt.prodID","advads_tracking_ads","advadsGATracking.postContext","woopack_config","ulp_content_id","wp-cumulus\/tagcloud.swf?r=","ctSetCookie('ct_checkjs'","woof_really_curr_tax","uLogin.customInit","i18n_no_matching_variations_text","alsp_map_markers_attrs","var inc_opt =","iworks_upprev","yith_wcevti_tickets","window.metrilo.ensure_cbuid","metrilo.event","wordpress_page_root","wcct_info","Springbot.product_id","pysWooProductData","dfd-heading","owl=$(\"#","penci_megamenu","fts_security","algoliaAutocomplete","avia_framework_globals","tabs.easyResponsiveTabs","searchlocationHeader","yithautocomplete","data-parallax-speed","currency_data=","cedexisData","function reenableButton","#wpnbio-show","e.Newsletter2GoTrackingObject","var categories_","\"+nRemaining+\"","cartsguru_cart_token","after_share_easyoptin","location_data.push","thirstyFunctions.isThirstyLink","styles: ' #custom-menu-","function svc_center_","#svc_carousel2_container_","advads.move","elementid","advads_has_ads","wpseo_map_init","mdf_current_page_url","tptn_tracker","dpsp_pin_button_data","searchwp_live_search_params","wpp_params","top.location,thispage","selection+pagelink","ic_window_resolution","PHP.wp_p_id","ShopifyBuy.UI.onReady(client)","orig_request_uri","gie.widgets.load","Adman.Flash","PHP.wp_p_id","window.broadstreetKeywords","var productId =","var flatsomeVars","wc_product_block_data","static.mailerlite.com","amzn_assoc","_bs_getParameterByName","_stq.push","h._remove","var FlowFlowOpts","var WCPFData =","var _beeketing","var _statcounter","var actions =","var current_url","var object_name","var the_ajax_script","var wc_cart_fragments_params","var woocommerce_params","var wpml_cookies","wc_add_to_cart_params","window.broadstreetKeywords","window.wc_ga_pro.available_gateways","xa.prototype","HOUZEZ_ajaxcalls_vars","w2dc_maps_objects","w2dc_controller_args_array","w2dc_map_markers_attrs","YT.Player","WPFC.data","function current_video_","var videodiv","var slider_wppasrotate","wppas_ga","var blockClass","tarteaucitron","pw_brand_product_list","tminusCountDown","pysWooSelectContentData","wpvq_ans89733","_isp_version","price_range_data","window.FeedbackCompanyWidgets","woocs_current_currency","woo_variation_swatches_options","woocommerce_price_slider_params","scriptParams","form-adv-pagination","borlabsCookiePrioritize","urls_wpwidgetpolylang","quickViewNonce","frontendscripts_params","nj-facebook-messenger","var fb_mess_position","init_particles_row_background_script","setREVStartSize","fl-node","PPAccordion","soliloquy_","wprevpublicjs_script_vars","DTGS_NONCE_FRONTEND","et_animation_data","archives-dropdown","loftloaderCache","SmartSliderSimple","var nectarLove","var incOpt","RocketBrowserCompatibilityChecker","RocketPreloadLinksConfig","placementVersionId","var useEdit","var DTGS_NONCE_FRONTEND","n2jQuery","et_core_api_spam_recaptcha","cnArgs","__CF$cv$params","trustbox_settings","aepro","cdn.jst.ai","w2dc_fields_in_categories","jetMenuPublicSettings","JetTricksSettings","aepc_pixel","avadaWooCommerceVars","var isb","fcaPcPost","csrf_token","icwp_wpsf_vars_lpantibot","wpvViewHead","ed_school_plugin","aps_comp_","guaven_woos","__lm_redirect_to","__wpdm_view_count","bookacti.booking_system","nfFrontEnd","view_quote_cart_link","__eae_decode_emails","divioverlays_ajaxurl","var _EPYT_","#ins-heading-","#ins-button-","tve_frontend_options","lb24.src","amazon_Login_accessToken","porto_infinite_scroll",".adace-loader-","adace_load_","tagGroupsAccordiontaggroupscloudaccordion","tagGroupsTabstaggroupscloudtabs","jrRelatedWidgets","UNCODE.initRow","amp_mobile_redirect_disabled","wpgdprcData","wpml_browser_redirect_params","swPreRegister","kboard_settings","ct_ultimate_gdpr_cookie","wcpv_registration_local","www.idxhome.com","arf_footer_cl_logic_call","reload_attached_coupons","var ftpp","forminatorFront","_EPYT_","edd_free_downloads_vars","edd_stripe_vars","var ASP","ecwidOriginalTitle","defaultCategoryId","translation-revision-date","google_conversion_id","hbspt","var marker_locations_","var AdmMyAjax","ifso_page_url","referrer_for_pageload","WoocommerceWidget\/woocommerceWidget.js","var ht_ctc_chat_var","spuvar","var wpilFrontend","urls_polylangREPLACETOID","e.setAttribute('unselectable',on);","try{Typekit.load","iMapsData","var wpforms_user_journey","rocket_lazyload_css_data","wcStoreApiNonceTimestamp","createNonceMiddleware","pbidHash","wcBlocksMiddlewareConfig"],"cache_ignored_parameters":["utm_source","utm_medium","utm_campaign","utm_expid","utm_term","utm_content","utm_id","utm_source_platform","utm_creative_format","utm_marketing_tactic","mtm_source","mtm_medium","mtm_campaign","mtm_keyword","mtm_cid","mtm_content","pk_source","pk_medium","pk_campaign","pk_keyword","pk_cid","pk_content","fb_action_ids","fb_action_types","fb_source","fbclid","campaignid","adgroupid","adid","gclid","age-verified","ao_noptimize","usqp","cn-reloaded","_ga","sscid","gclsrc","_gl","mc_cid","mc_eid","_bta_tid","_bta_c","trk_contact","trk_msg","trk_module","trk_sid","gdfms","gdftrk","gdffi","_ke","_kx","redirect_log_mongo_id","redirect_mongo_id","sb_referer_host","mkwid","pcrid","ef_id","s_kwcid","msclkid","dm_i","epik","pp","gbraid","wbraid","ssp_iabi","ssp_iaba","gad","vgo_ee","gad_source","gad_campaignid","onlywprocket","srsltid","gadid","fbadid"],"preload_exclusions":["void\\(.*;","(.*)__trashed(.*)","\/jet-menu\/(.*)","\/jet-popup\/(.*)","(.*)printButton.href(.*)"],"exclude_js_files":["\/wp-includes\/js\/dist\/i18n.min.js","\/interactive-3d-flipbook-powered-physics-engine\/assets\/js\/html2canvas.min.js","\/interactive-3d-flipbook-powered-physics-engine\/assets\/js\/pdf.min.js","\/interactive-3d-flipbook-powered-physics-engine\/assets\/js\/three.min.js","\/interactive-3d-flipbook-powered-physics-engine\/assets\/js\/3d-flip-book.min.js","\/google-site-kit\/dist\/assets\/js\/(.*).js","\/wp-live-chat-support\/public\/js\/callus(.*).js","\/borlabs-cookie\/assets\/javascript\/(.*).js","\/wp-content\/plugins\/wp-rocket\/assets\/js\/lcp-beacon(.min)?.js","\/woocommerce-bookings\/dist\/frontend.js","\/plugins\/mapify(.*)\/assets\/js\/dist\/bundle.js","\/wp-content\/plugins\/wp-rocket\/assets\/js\/wpr-beacon(.min)?.js","\/wp-recipe-maker-premium\/dist\/public-premium.js","\/plugins\/wp-recipe-maker\/(.*)"],"staging_domains":[".wpengine.com",".wpenginepowered.com",".pantheonsite.io",".flywheelsites.com",".flywheelstaging.com",".kinsta.com",".kinsta.cloud",".cloudwaysapps.com",".azurewebsites.net",".wpserveur.site","-liquidwebsites.com",".myftpupload.com",".dream.press",".sg-host.com",".platformsh.site",".wpstage.net",".bigscoots-staging.com",".wpsc.site",".runcloud.link",".onrocket.site",".singlestaging.com",".myraidbox.de",".instawp.xyz",".instawp.co",".instawp.link",".instawp.app",".hstgr.cloud",".myhostpoint.ch",".wpcomstaging.com",".nxcli.io",".nxcli.net",".lyricalstaging.com",".myrdbx.io",".staging.tempurl.host",".staging.mysites.io",".updraftclone.com",".easywp.com",".preview.infomaniak.website",".wp-cloud.dev",".wpsc.dev",".wptiger.fr",".amazonaws.com",".wpdns.site",".cloudwayssites.com",".mystagingwebsite.com",".hostingersite.com",".ngrok.io",".stage.site",".ksysweb.com",".dev.cc",".docksal",".lndo.site",".local",".localhost",".test",".wpstagecoach.com",".preprod",".ddev.site","my.wordpress.net"],"exclude_js_template":["type=\"module\"","data-minify=","data-no-minify="],"lazy_rendering_exclusions":["class=\"parallex\"","class=\"avada-footer-scripts\"","id=\"rhslidingMenu\"","class=\"logobsmallt\"","id=\"ast-mobile-popup-wrapper\"","id=\"cmplz-cookiebanner-container\"","class=\"wf-container-footer\"","class=\"de-mega-menu-container\"","data-nosnippet","class=\"floating-menu float-menu-","id=\"jeg_off_canvas\"","id=\"dipi-popup-maker-container\"","class=\"static-position vendor_hidden\"","class=\"jws-mini-cart-wrapper\"","class=\"home-widgets-section\"","elementor-location-floating_buttons","class=\"xoo-el-container xoo-el-style-popup\"","class=\"off-canvas-wrapper\"","id=\"ast-hb-account-login-wrap\"","id=\"ak_drawer_holder\"","id=\"brx-footer\"","elementor-location-footer","class=\"ts-floating-sidebar\"","id=\"yith-wacp-popup\"","class=\"fl-builder-content fl-builder-content-30 fl-builder-global-templates-locked\"","class=\"mfn-footer-tmpl mfn-footer\"","class=\"fusion-tb-footer fusion-footer","class=\"wt-cli-cookie-bar-container\"","id=\"lazy-loading-point\"","class=\"cp-popup-container","class=\"xoo-wsc-markup","class=\"xoo-wsc-modal","class=\"breakdance\"","class=\"footer-container color-scheme-light\"","class=\"sticky-cta\"","class=\"footer-booking-widget","rh_sticky_wrapper_footer","class=\"sticky-add-to-cart-wrapper","id=\"wcpa_img_preview\"","id=\"wpca-lay-out-wrapper\"","class=\"site-footer\"","class=\"atbs-layout-split atbs-block","wll-launcher-button-container","id=\"wll-site-launcher\"","class=\"mobile_nav","id=\"nav","class=\"nav","no-wpr-lazyrender"],"host_fonts":[],"preload_fonts_exclusions":["api.fontshare.com","cdn.fontshare.com"],"preconnect_external_domains_exclusions":["static.cloudflareinsights.com","rel=\"profile\"","rel=\"preconnect\"","rel=\"dns-prefetch\"","rel=\"icon\""],"mixpanel_tracked_settings":["async_css","async_css_mobile","auto_preload_fonts","automatic_cleanup_frequency","cache_logged_user","cache_mobile","cache_purge_pages","cache_query_strings","cache_reject_cookies","cache_reject_ua","cache_reject_uri","cache_ssl","cdn","cdn_cnames","cdn_reject_files","cdn_zone","control_heartbeat","critical_css","database_all_transients","database_auto_drafts","database_optimize_tables","database_revisions","database_spam_comments","database_trashed_comments","database_trashed_posts","defer_all_js","delay_js","delay_js_exclusions","delay_js_exclusions_selected","delay_js_exclusions_selected_exclusions","delay_js_execution_safe_mode","dns_prefetch","do_caching_mobile_files","do_cloudflare","emoji","exclude_css","exclude_defer_js","exclude_inline_js","exclude_js","exclude_lazyload","heartbeat_admin_behavior","heartbeat_editor_behavior","heartbeat_site_behavior","host_fonts_locally","image_dimensions","lazyload","lazyload_css_bg_img","lazyload_iframes","lazyload_youtube","manual_preload","minify_concatenate_css","minify_concatenate_js","minify_css","minify_google_fonts","minify_js","optimize_css_delivery","performance_monitoring","performance_monitoring_schedule_frequency","preload_excluded_uri","preload_links","previous_version","purge_cron_interval","purge_cron_unit","remove_unused_css","remove_unused_css_safelist","schedule_automatic_cleanup","sucury_waf_cache_sync","varnish_auto_purge","version","wpr-js-tips"],"rocket_insights_add_homepage_expiry_interval":116} \ No newline at end of file +{"rucss_inline_atts_exclusions":["rocket-lazyload-inline-css","divi-style-parent-inline-inline-css","gsf-custom-css","extra-style-inline-inline-css","woodmart-inline-css-inline-css","woodmart_shortcodes-custom-css","rs-plugin-settings-inline-css","divi-style-inline-inline-css","tcb-post-list-dynamic-style","n2-ss-","wpcf7-","siteorigin-panels-layouts-footer","xstore-inline-css-inline-css","assets.reviews.io","ezoicCSS","stk-","rocket-lazyrender-inline-css","umsMapStyles_","trx_addons-inline-styles-inline-css","greyd-custom-styles-footer"],"rucss_inline_content_exclusions":[".wp-container-",".wp-elements-","#wpv-expandable-",".custom-content-","#thb-",".et_pb_text_dap_","#gdlr-core-shape-divider","#ultib3-",".uvc-wrap-",".jet-listing-dynamic-post-",".vcex_",".wprm-advanced-list-",".adsslot_",".jnews_",".cp-info-bar.content-","#stockie-custom-","#ohio-custom-",".uid-","#wpfMainWrapper","#penci_","#penci-",".wpbs_s","#apcore_","#apress_","#zolo_",".extended-products-grid#style-",".preloader#style-preloader-",".thegem-heading-",".thegem-button-",".thegem-custom-",".thegem-popup-","#pattern-","#thegem-video-frame-","#thegem-",".qwery_inline_",".dcgd_submit_button",".irs-bar",".gallery-grid-",".cmplz-hidden","#sqbquizouter","#start_sqbquizouter",".flo-header--",".trx_addons_inline_",".wpp-cardview-compact",".e-loop-item-",".tiered-pricing-plain-text",".vc_cta3_content-container",".vc_btn-gradient-btn-",".et_pb_de_mach_title_",".et_pb_dmach_section_","img#wpstats",".ti-widget"],"defer_js_inline_exclusions":["DOMContentLoaded","document.write","window.lazyLoadOptions","N.N2_","rev_slider_wrapper","FB3D_CLIENT_LOCALE","ewww_webp_supported","anr_captcha_field_div","renderInvisibleReCaptcha","bookingInProgress"],"defer_js_external_exclusions":["gist.github.com","content.jwplatform.com","js.hsforms.net","www.uplaunch.com","google.com\/recaptcha","widget.reviews.co.uk","verify.authorize.net\/anetseal","lib\/admin\/assets\/lib\/webfont\/webfont.min.js","app.mailerlite.com","widget.reviews.io","simplybook.(.*)\/v2\/widget\/widget.js","\/wp-includes\/js\/dist\/i18n.min.js","\/wp-content\/plugins\/wpfront-notification-bar\/js\/wpfront-notification-bar(.*).js","\/wp-content\/plugins\/oxygen\/component-framework\/vendor\/aos\/aos.js","\/wp-content\/plugins\/ewww-image-optimizer\/includes\/check-webp(.min)?.js","static.mailerlite.com\/data\/(.*).js","cdn.voxpow.com\/static\/libs\/v1\/(.*).js","cdn.voxpow.com\/media\/trackers\/js\/(.*).js","use.typekit.net","www.idxhome.com","\/wp-includes\/js\/dist\/vendor\/lodash(.min)?.js","\/wp-includes\/js\/dist\/api-fetch(.min)?.js","\/wp-includes\/js\/dist\/i18n(.min)?.js","\/wp-includes\/js\/dist\/vendor\/wp-polyfill(.min)?.js","\/wp-includes\/js\/dist\/url(.min)?.js","\/wp-includes\/js\/dist\/hooks(.min)?.js","www.paypal.com\/sdk\/js","js-eu1.hsforms.net","yanovis.Voucher.js","\/carousel-upsells-and-related-product-for-woocommerce\/assets\/js\/glide.min.js","use.typekit.com","\/artale\/modules\/kirki\/assets\/webfont.js","\/api\/scripts\/lb_cs.js","js.hscta.net\/cta\/current.js","widget.refari.co","player.vdocipher.com","\/wp-content\/plugins\/wp-rocket\/assets\/js\/lcp-beacon(.min)?.js"],"delay_js_exclusions":["nowprocket","\/wp-includes\/js\/wp-embed.min.js","lazyLoadOptions","lazyLoadThumb","wp-rocket\/assets\/js\/lazyload\/(.*)","et_core_page_resource_fallback","window.\\$us === undefined","js-extra","fusionNavIsCollapsed","\/assets\/js\/smush-lazy-load","eio_lazy_vars","\\\/lazysizes(\\.min|-pre|-post)?\\.js","document\\.body\\.classList\\.remove\\(\"no-js\"\\)","document\\.documentElement\\.className\\.replace\\( 'no-js', 'js' \\)","et_animation_data","wpforms_settings","var nfForms","\/\/stats.wp.com","_stq.push","fluent_form_ff_form_instance_","cpLoadCSS","ninja_column_","var rbs_gallery_","var lepopup_","var billing_additional_field","var gtm4wp","var dataLayer_content","\/ewww-image-optimizer\/includes\/load[_-]webp(\\.min)?.js","\/ewww-image-optimizer\/includes\/check-webp(\\.min)?.js","ewww_webp_supported","\/dist\/js\/browser-redirect\/app.js","\/perfmatters\/js\/lazyload.min.js","lazyLoadInstance","scripts.mediavine.com\/tags\/","initCubePortfolio","simpli.fi","gforms_recaptcha_","\/jetpack-boost\/vendor\/automattic\/jetpack-lazy-images\/(.*)","jetpack-lazy-images-js-enabled","jetpack-boost-critical-css","wpformsRecaptchaCallback","booking-suedtirol-js","wpcp_css_disable_selection","\/gravityforms\/js\/conditional_logic.min.js","statcounter.com\/counter\/counter.js","var sc_project","\/jetpack\/jetpack_vendor\/automattic\/jetpack-lazy-images\/(.*)","\/themify-builder\/themify\/js\/modules\/fallback(\\.min)?.js","handlePixMessage","var corner_video","cdn.pixfuture.com\/hb_v2.js","cdn.pixfuture.com\/pbix.js","served-by.pixfuture.com\/www\/delivery\/ads.js","served-by.pixfuture.com\/www\/delivery\/headerbid_sticky_refresh.js","serv-vdo.pixfuture.com\/vpaid\/ads.js","wprRemoveCPCSS","window.jdgmSettings","\/photonic\/include\/js\/front-end\/nomodule\/photonic-baguettebox.min.js","\/photonic\/include\/ext\/baguettebox\/baguettebox.min.js","window.wsf_form_json_config","et_link_options_data","FuseboxPlayerAPIKey","js.hscta.net\/cta\/current.js","hbspt.cta.load","consent.cookiebot.com\/uc.js","\/woofilter-pro\/woofilterpro\/js\/ion.rangeSlider.min.js","barra.r7.com\/barra.js","rocket_css_lazyload_launch","#wpr-lazyload-bg","\/wp-content\/plugins\/wp-rocket\/assets\/js\/lcp-beacon(.min)?.js","rocket_lcp_data","rocket_beacon_data","\/wp-content\/plugins\/wp-rocket\/assets\/js\/wpr-beacon(.min)?.js","elm.style.display=\"none\""],"js_minify_external":["html5.js","show_ads.js","histats.com\/js","ws.amazon.com\/widgets","\/ads\/","intensedebate.com","scripts.chitika.net\/","jotform.com\/","gist.github.com","forms.aweber.com","video.unrulymedia.com","stats.wp.com","stats.wordpress.com","widget.rafflecopter.com","widget-prime.rafflecopter.com","releases.flowplayer.org","c.ad6media.fr","cdn.stickyadstv.com","www.smava.de","contextual.media.net","app.getresponse.com","adserver.reklamstore.com","s0.wp.com","wprp.zemanta.com","files.bannersnack.com","smarticon.geotrust.com","js.gleam.io","ir-na.amazon-adsystem.com","web.ventunotech.com","verify.authorize.net","ads.themoneytizer.com","embed.finanzcheck.de","imagesrv.adition.com","js.juicyads.com","form.jotformeu.com","speakerdeck.com","content.jwplatform.com","ads.investingchannel.com","app.ecwid.com","www.industriejobs.de","s.gravatar.com","googlesyndication.com","a.optmstr.com","a.optmnstr.com","a.opmnstr.com","adthrive.com","mediavine.com","js.hsforms.net","googleadservices.com","f.convertkit.com","recaptcha\/api.js","mailmunch.co","apps.shareaholic.com","dsms0mj1bbhn4.cloudfront.net","nutrifox.com","code.tidio.co","www.uplaunch.com","widget.reviewability.com","embed-cdn.gettyimages.com\/widgets.js","app.mailerlite.com","ck.page","cdn.jsdelivr.net\/gh\/AmauriC\/","static.klaviyo.com\/onsite\/js\/klaviyo.js","a.omappapi.com\/app\/js\/api.min.js","static.zdassets.com","feedbackcompany.com\/widgets\/feedback-company-widget.min.js","widget.gleamjs.io","phonewagon.com","simplybook.asia\/v2\/widget\/widget.js","simplybook.it\/v2\/widget\/widget.js","simplybook.me\/v2\/widget\/widget.js","static.botsrv.com\/website\/js\/widget2.36cf1446.js","static.mailerlite.com\/data\/","cdn.voxpow.com","loader.knack.com","embed.lpcontent.net\/leadboxes\/current\/embed.js","cc.cdn.civiccomputing.com\/9\/cookieControl-9.x.min.js","cse.google.com\/cse.js","kit.fontawesome.com","cdn.jsdelivr.net\/npm\/mathjax@3\/es5\/tex-mml-chtml.js","static.leadpages.net\/leadbars\/current\/embed.js","booqable.com\/v2\/booqable.js","googleoptimize.com","cdna.hubpeople.com\/js\/widget_standalone_two_modes.js","s3.tradingview.com","www.vbt.io\/ext\/vbtforms.js","cdn.callrail.com","documentcloud.adobe.com\/view-sdk\/main.js","static.cleverpush.com","js.afterpay.com","cdn.enable.co.il\/licenses\/enable-","hcaptcha.com\/1\/api.js","voucher.getavo.it\/public\/js\/yanovis.Voucher.js","js-eu1.hsforms.net","statcounter.com\/counter\/counter.js","snapppt.com","use.typekit.com","secure.gravatar.com\/js\/gprofiles.js","cdn.jsdelivr.net\/npm\/hockeystack","widget.prod.faslet.net","ga.getresponse.com\/script\/ga.js","cognitoforms.com","usercentrics.eu","cdn.amcharts.com","umami","cdn.popt.in\/pixel.js","m2d.m2.ai","pubguru.net","trustindex.io","cdnjs.cloudflare.com\/ajax\/libs\/prism\/","podigee-podcast-player.js","tarteaucitron.io\/load.js","osm.klarnaservices.com\/lib.js","mein.clickskeks.at\/app.js","barra.r7.com\/barra.js","widget.refari.co","widget.reviews.co.uk","player.vdocipher.com","www.instagram.com\/embed.js","smartframe.io","challenges.cloudflare.com\/turnstile\/","script.roboassist.ai","cdn.hu-manity.co","daumcdn.net\/mapjsapi\/bundle\/postcode\/prod\/postcode.v2.js","consent.cookiebot.com","umstats.tools.coolw.xyz","powerad.ai","leadconnectorhq.com","buzzsprout.com","embed.reddit.com\/widgets.js","onfastspring.com","widget.superchat.de\/snippet.js"],"js_move_after_combine":["map_fusion_map_","ec:addProduct","ec:addImpression","clear_better_facebook_comments","vc-row-destroy-equal-heights-","dfd-icon-list-","SFM_template","WLTChangeState","wlt_star_","wlt_pop_distance_","smart_list_tip","gd-wgt-pagi-","data-rf-id=","tvc_po=","scrapeazon","startclock","it_logo_field_owl-box_","td_live_css_uid","wpvl_paramReplace","tdAjaxCount","mec_skin_","_wca","_taboola","fbq('trackCustom'","fbq('track'","data.token","sharrre","dfads_ajax_load_ads","tie_postviews","wmp_update","h5ab-print-article","gform_ajax_frame_","gform_post_render","mts_view_count","act_css_tooltip","window.SLB","wpt_view_count","var dateNow","gallery_product_",".flo-block-slideshow-","data='api-key=ct-","ip_common_function()","(\"style#gsf-custom-css\").append","a3revWCDynamicGallery_","#owl-carousel-instagram-","window.FlowFlowOpts","jQuery('.td_uid_","jQuery(\".slider-","#dfd-vcard-widget-","#sf-instagram-widget-",".woocommerce-tabs-","penci_megamenu__","vc_prepareHoverBox","wp-temp-form-div","_wswebinarsystem_already_","#views-extra-css\").text","fusetag.setTargeting","hit.uptrendsdata.com","callback:window.renderBadge","test_run_nf_conditional_logic","cb_nombre","$('.fl-node-","function($){google_maps_","$(\"#myCarousel","et_animation_data=","current_url=\"","CustomEvent.prototype=window.Event.prototype","electro-wc-product-gallery","woof_is_mobile","jQuery('.videonextup","wpp_params","us.templateDirectoryUri=",".fat-gallery-item",".ratingbox","user_rating.prototype.eraseCookie","test_run_nf_conditional","dpsp-networks-btns-wrapper","pa_woo_product_info","sharing_enabled_on_post_via_metabox","#product-search-field-","GOTMLS_login_offset","berocket_aapf_time_to_fix_products_style","window.vc_googleMapsPointer","sinceID_","#ut-background-video-ut-section","+window.comment_tab_width+","dfd-button-hover-in","wpseo-address-wrapper","platform.stumbleupon.com","#woo_pp_ec_button_mini_cart","#supercarousel","blockClass","tdbMenuItem","tdbSearchItem","best_seller_badge","jQuery('#product-top-bar","fb_desc-","FC_regenerate_captcha","wp_post_blocks_vars.listed_posts=[","captcha-hash","mapdata={",".ywpc-char-",").countdowntimer(","jQuery(\"#td_uid_","find('#td_uid_","variation_estimate_msg"],"js_excluded_inline":["document.write","google_ad","edToolbar","gtag","_gaq.push","_gaLt","GoogleAnalyticsObject","syntaxhighlighter","adsbygoogle","ci_cap_","_stq","nonce","post_id","LogHuman","idcomments_acct","ch_client","sc_online_t","_stq","bannersnack_embed","vtn_player_type","ven_video_key","ANS_customer_id","tdBlock","tdLocalCache","wpRestNonce","\"url\":","lazyLoadOptions","adthrive","loadCSS","google_tag_params","clicky_custom","clicky_site_ids","NSLPopupCenter","_paq","gtm","dataLayer","RecaptchaLoad","WPCOM_sharing_counts","jetpack_remote_comment","subscribe-field","contextly","_mmunch","gt_request_uri","doGTranslate","docTitle","bs_ajax_paginate_","bs_deferred_loading_","theChampRedirectionUrl","theChampFBCommentUrl","theChampTwitterRedirect","theChampRegRedirectionUrl","ESSB_CACHE_URL","oneall_social_login_providers_","betterads_screen_width","woocommerce_wishlist_add_to_wishlist_url","arf_conditional_logic","heateorSsHorSharingShortUrl","TL_Const","bimber_front_microshare","setAttribute(\"id\"","setAttribute( \"id\"","TribeEventsPro","peepsotimedata","wphc_data","hc_rand_id","RBL_ADD","AfsAnalyticsObject","_thriveCurrentPost","esc_login_url","fwduvpMainPlaylist","Bibblio.initRelatedContent","showUFC()","#iphorm-","#fancy-","ult-carousel-","theChampLJAuthUrl","f._fbq","Insticator","w2dc_js_objects","cherry_ajax","ad_block_","elementorFrontendConfig","zeen_","disqusIdentifier","currentAjaxUrl","geodir_event_call_calendar_","atatags-","hbspt.forms.create","function(c,h,i,m,p)","dataTable({","rankMath = {","_atrk_opts","quicklinkOptions","ct_checkjs_","WP_Statistics_http","penci_block_","omapi_localized","omapi_data","OptinMonsterApp","tminusnow","nfForms","galleries.gallery_","wcj_evt.prodID","advads_tracking_ads","advadsGATracking.postContext","woopack_config","ulp_content_id","wp-cumulus\/tagcloud.swf?r=","ctSetCookie('ct_checkjs'","woof_really_curr_tax","uLogin.customInit","i18n_no_matching_variations_text","alsp_map_markers_attrs","var inc_opt =","iworks_upprev","yith_wcevti_tickets","window.metrilo.ensure_cbuid","metrilo.event","wordpress_page_root","wcct_info","Springbot.product_id","pysWooProductData","dfd-heading","owl=$(\"#","penci_megamenu","fts_security","algoliaAutocomplete","avia_framework_globals","tabs.easyResponsiveTabs","searchlocationHeader","yithautocomplete","data-parallax-speed","currency_data=","cedexisData","function reenableButton","#wpnbio-show","e.Newsletter2GoTrackingObject","var categories_","\"+nRemaining+\"","cartsguru_cart_token","after_share_easyoptin","location_data.push","thirstyFunctions.isThirstyLink","styles: ' #custom-menu-","function svc_center_","#svc_carousel2_container_","advads.move","elementid","advads_has_ads","wpseo_map_init","mdf_current_page_url","tptn_tracker","dpsp_pin_button_data","searchwp_live_search_params","wpp_params","top.location,thispage","selection+pagelink","ic_window_resolution","PHP.wp_p_id","ShopifyBuy.UI.onReady(client)","orig_request_uri","gie.widgets.load","Adman.Flash","PHP.wp_p_id","window.broadstreetKeywords","var productId =","var flatsomeVars","wc_product_block_data","static.mailerlite.com","amzn_assoc","_bs_getParameterByName","_stq.push","h._remove","var FlowFlowOpts","var WCPFData =","var _beeketing","var _statcounter","var actions =","var current_url","var object_name","var the_ajax_script","var wc_cart_fragments_params","var woocommerce_params","var wpml_cookies","wc_add_to_cart_params","window.broadstreetKeywords","window.wc_ga_pro.available_gateways","xa.prototype","HOUZEZ_ajaxcalls_vars","w2dc_maps_objects","w2dc_controller_args_array","w2dc_map_markers_attrs","YT.Player","WPFC.data","function current_video_","var videodiv","var slider_wppasrotate","wppas_ga","var blockClass","tarteaucitron","pw_brand_product_list","tminusCountDown","pysWooSelectContentData","wpvq_ans89733","_isp_version","price_range_data","window.FeedbackCompanyWidgets","woocs_current_currency","woo_variation_swatches_options","woocommerce_price_slider_params","scriptParams","form-adv-pagination","borlabsCookiePrioritize","urls_wpwidgetpolylang","quickViewNonce","frontendscripts_params","nj-facebook-messenger","var fb_mess_position","init_particles_row_background_script","setREVStartSize","fl-node","PPAccordion","soliloquy_","wprevpublicjs_script_vars","DTGS_NONCE_FRONTEND","et_animation_data","archives-dropdown","loftloaderCache","SmartSliderSimple","var nectarLove","var incOpt","RocketBrowserCompatibilityChecker","RocketPreloadLinksConfig","placementVersionId","var useEdit","var DTGS_NONCE_FRONTEND","n2jQuery","et_core_api_spam_recaptcha","cnArgs","__CF$cv$params","trustbox_settings","aepro","cdn.jst.ai","w2dc_fields_in_categories","jetMenuPublicSettings","JetTricksSettings","aepc_pixel","avadaWooCommerceVars","var isb","fcaPcPost","csrf_token","icwp_wpsf_vars_lpantibot","wpvViewHead","ed_school_plugin","aps_comp_","guaven_woos","__lm_redirect_to","__wpdm_view_count","bookacti.booking_system","nfFrontEnd","view_quote_cart_link","__eae_decode_emails","divioverlays_ajaxurl","var _EPYT_","#ins-heading-","#ins-button-","tve_frontend_options","lb24.src","amazon_Login_accessToken","porto_infinite_scroll",".adace-loader-","adace_load_","tagGroupsAccordiontaggroupscloudaccordion","tagGroupsTabstaggroupscloudtabs","jrRelatedWidgets","UNCODE.initRow","amp_mobile_redirect_disabled","wpgdprcData","wpml_browser_redirect_params","swPreRegister","kboard_settings","ct_ultimate_gdpr_cookie","wcpv_registration_local","www.idxhome.com","arf_footer_cl_logic_call","reload_attached_coupons","var ftpp","forminatorFront","_EPYT_","edd_free_downloads_vars","edd_stripe_vars","var ASP","ecwidOriginalTitle","defaultCategoryId","translation-revision-date","google_conversion_id","hbspt","var marker_locations_","var AdmMyAjax","ifso_page_url","referrer_for_pageload","WoocommerceWidget\/woocommerceWidget.js","var ht_ctc_chat_var","spuvar","var wpilFrontend","urls_polylangREPLACETOID","e.setAttribute('unselectable',on);","try{Typekit.load","iMapsData","var wpforms_user_journey","rocket_lazyload_css_data","wcStoreApiNonceTimestamp","createNonceMiddleware","pbidHash","wcBlocksMiddlewareConfig"],"cache_ignored_parameters":["utm_source","utm_medium","utm_campaign","utm_expid","utm_term","utm_content","utm_id","utm_source_platform","utm_creative_format","utm_marketing_tactic","mtm_source","mtm_medium","mtm_campaign","mtm_keyword","mtm_cid","mtm_content","pk_source","pk_medium","pk_campaign","pk_keyword","pk_cid","pk_content","fb_action_ids","fb_action_types","fb_source","fbclid","campaignid","adgroupid","adid","gclid","age-verified","ao_noptimize","usqp","cn-reloaded","_ga","sscid","gclsrc","_gl","mc_cid","mc_eid","_bta_tid","_bta_c","trk_contact","trk_msg","trk_module","trk_sid","gdfms","gdftrk","gdffi","_ke","_kx","redirect_log_mongo_id","redirect_mongo_id","sb_referer_host","mkwid","pcrid","ef_id","s_kwcid","msclkid","dm_i","epik","pp","gbraid","wbraid","ssp_iabi","ssp_iaba","gad","vgo_ee","gad_source","gad_campaignid","onlywprocket","srsltid","gadid","fbadid"],"preload_exclusions":["void\\(.*;","(.*)__trashed(.*)","\/jet-menu\/(.*)","\/jet-popup\/(.*)","(.*)printButton.href(.*)"],"exclude_js_files":["\/wp-includes\/js\/dist\/i18n.min.js","\/interactive-3d-flipbook-powered-physics-engine\/assets\/js\/html2canvas.min.js","\/interactive-3d-flipbook-powered-physics-engine\/assets\/js\/pdf.min.js","\/interactive-3d-flipbook-powered-physics-engine\/assets\/js\/three.min.js","\/interactive-3d-flipbook-powered-physics-engine\/assets\/js\/3d-flip-book.min.js","\/google-site-kit\/dist\/assets\/js\/(.*).js","\/wp-live-chat-support\/public\/js\/callus(.*).js","\/borlabs-cookie\/assets\/javascript\/(.*).js","\/wp-content\/plugins\/wp-rocket\/assets\/js\/lcp-beacon(.min)?.js","\/woocommerce-bookings\/dist\/frontend.js","\/plugins\/mapify(.*)\/assets\/js\/dist\/bundle.js","\/wp-content\/plugins\/wp-rocket\/assets\/js\/wpr-beacon(.min)?.js","\/wp-recipe-maker-premium\/dist\/public-premium.js","\/plugins\/wp-recipe-maker\/(.*)","\/jet-menu\/assets\/public\/js\/jet-menu-public-scripts.js","\/jet-menu\/assets\/public\/js\/jet-menu-mobile-menu-public-scripts.js"],"staging_domains":[".wpengine.com",".wpenginepowered.com",".pantheonsite.io",".flywheelsites.com",".flywheelstaging.com",".kinsta.com",".kinsta.cloud",".cloudwaysapps.com",".azurewebsites.net",".wpserveur.site","-liquidwebsites.com",".myftpupload.com",".dream.press",".sg-host.com",".platformsh.site",".wpstage.net",".bigscoots-staging.com",".wpsc.site",".runcloud.link",".onrocket.site",".singlestaging.com",".myraidbox.de",".instawp.xyz",".instawp.co",".instawp.link",".instawp.app",".hstgr.cloud",".myhostpoint.ch",".wpcomstaging.com",".nxcli.io",".nxcli.net",".lyricalstaging.com",".myrdbx.io",".staging.tempurl.host",".staging.mysites.io",".updraftclone.com",".easywp.com",".preview.infomaniak.website",".wp-cloud.dev",".wpsc.dev",".wptiger.fr",".amazonaws.com",".wpdns.site",".cloudwayssites.com",".mystagingwebsite.com",".hostingersite.com",".ngrok.io",".stage.site",".ksysweb.com",".dev.cc",".docksal",".lndo.site",".local",".localhost",".test",".wpstagecoach.com",".preprod",".ddev.site","my.wordpress.net"],"exclude_js_template":["type=\"module\"","data-minify=","data-no-minify="],"lazy_rendering_exclusions":["class=\"parallex\"","class=\"avada-footer-scripts\"","id=\"rhslidingMenu\"","class=\"logobsmallt\"","id=\"ast-mobile-popup-wrapper\"","id=\"cmplz-cookiebanner-container\"","class=\"wf-container-footer\"","class=\"de-mega-menu-container\"","data-nosnippet","class=\"floating-menu float-menu-","id=\"jeg_off_canvas\"","id=\"dipi-popup-maker-container\"","class=\"static-position vendor_hidden\"","class=\"jws-mini-cart-wrapper\"","class=\"home-widgets-section\"","elementor-location-floating_buttons","class=\"xoo-el-container xoo-el-style-popup\"","class=\"off-canvas-wrapper\"","id=\"ast-hb-account-login-wrap\"","id=\"ak_drawer_holder\"","id=\"brx-footer\"","elementor-location-footer","class=\"ts-floating-sidebar\"","id=\"yith-wacp-popup\"","class=\"fl-builder-content fl-builder-content-30 fl-builder-global-templates-locked\"","class=\"mfn-footer-tmpl mfn-footer\"","class=\"fusion-tb-footer fusion-footer","class=\"wt-cli-cookie-bar-container\"","id=\"lazy-loading-point\"","class=\"cp-popup-container","class=\"xoo-wsc-markup","class=\"xoo-wsc-modal","class=\"breakdance\"","class=\"footer-container color-scheme-light\"","class=\"sticky-cta\"","class=\"footer-booking-widget","rh_sticky_wrapper_footer","class=\"sticky-add-to-cart-wrapper","id=\"wcpa_img_preview\"","id=\"wpca-lay-out-wrapper\"","class=\"atbs-layout-split atbs-block","wll-launcher-button-container","id=\"wll-site-launcher\"","class=\"mobile_nav","id=\"nav","class=\"nav","no-wpr-lazyrender","class=\"wpfMainWrapper\""],"host_fonts":[],"preload_fonts_exclusions":["api.fontshare.com","cdn.fontshare.com"],"preconnect_external_domains_exclusions":["static.cloudflareinsights.com","rel=\"profile\"","rel=\"preconnect\"","rel=\"dns-prefetch\"","rel=\"icon\""],"mixpanel_tracked_settings":["async_css","async_css_mobile","auto_preload_fonts","automatic_cleanup_frequency","cache_logged_user","cache_mobile","cache_purge_pages","cache_query_strings","cache_reject_cookies","cache_reject_ua","cache_reject_uri","cache_ssl","cdn","cdn_cnames","cdn_reject_files","cdn_zone","control_heartbeat","critical_css","database_all_transients","database_auto_drafts","database_optimize_tables","database_revisions","database_spam_comments","database_trashed_comments","database_trashed_posts","defer_all_js","delay_js","delay_js_exclusions","delay_js_exclusions_selected","delay_js_exclusions_selected_exclusions","delay_js_execution_safe_mode","dns_prefetch","do_caching_mobile_files","do_cloudflare","emoji","exclude_css","exclude_defer_js","exclude_inline_js","exclude_js","exclude_lazyload","heartbeat_admin_behavior","heartbeat_editor_behavior","heartbeat_site_behavior","host_fonts_locally","image_dimensions","lazyload","lazyload_css_bg_img","lazyload_iframes","lazyload_youtube","manual_preload","minify_concatenate_css","minify_concatenate_js","minify_css","minify_google_fonts","minify_js","optimize_css_delivery","performance_monitoring","performance_monitoring_schedule_frequency","preload_excluded_uri","preload_links","previous_version","purge_cron_interval","purge_cron_unit","remove_unused_css","remove_unused_css_safelist","schedule_automatic_cleanup","sucury_waf_cache_sync","varnish_auto_purge","version","wpr-js-tips"],"rocket_insights_add_homepage_expiry_interval":266} \ No newline at end of file diff --git a/web/app/plugins/wp-rocket/inc/Addon/Cloudflare/Subscriber.php b/web/app/plugins/wp-rocket/inc/Addon/Cloudflare/Subscriber.php index 5ea9de2fc..9d1c0b219 100644 --- a/web/app/plugins/wp-rocket/inc/Addon/Cloudflare/Subscriber.php +++ b/web/app/plugins/wp-rocket/inc/Addon/Cloudflare/Subscriber.php @@ -66,6 +66,8 @@ public static function get_subscribed_events() { 'rocket_cron_deactivate_cloudflare_devmode' => 'deactivate_devmode', 'rocket_after_clean_domain' => 'auto_purge', 'after_rocket_clean_post' => [ 'auto_purge_by_url', 10, 3 ], + 'after_rocket_clean_home' => [ 'purge_url', 10, 2 ], + 'after_rocket_clean_files' => 'purge_url', 'admin_post_rocket_purge_cloudflare' => 'purge_cache', 'init' => [ 'set_real_ip', 1 ], 'update_option_' . $slug => [ @@ -212,6 +214,43 @@ public function auto_purge_by_url( $post, $purge_urls, $lang ) { $this->cloudflare->purge_by_url( $post, $purge_urls, $lang ); } + /** + * Purge specific Cloudflare cache URLs automatically. + * + * Used as the callback for both after_rocket_clean_home( $root, $lang ) and after_rocket_clean_files( $urls ). + * + * @param array|string $urls_or_root Array of URLs to purge when triggered by after_rocket_clean_files, or the home cache root path when triggered by after_rocket_clean_home. + * @param string $lang The language to purge, only used when triggered by after_rocket_clean_home. + * + * @return void + */ + public function purge_url( $urls_or_root, $lang = '' ) { + if ( ! current_user_can( 'rocket_purge_cloudflare_cache' ) ) { + return; + } + + if ( is_wp_error( $this->cloudflare->check_connection() ) ) { + return; + } + + $cf_cache_everything = $this->cloudflare->has_page_rule( 'cache_everything' ); + + if ( is_wp_error( $cf_cache_everything ) || ! $cf_cache_everything ) { + return; + } + + // after_rocket_clean_files passes an array of URLs directly; after_rocket_clean_home passes a cache root path, so purge the home URL for that lang instead. + $purge_urls = is_array( $urls_or_root ) ? $urls_or_root : [ get_rocket_i18n_home_url( $lang ) ]; + $purge_urls = array_unique( array_filter( $purge_urls ) ); + + if ( empty( $purge_urls ) ) { + return; + } + + // Purge CloudFlare. + $this->cloudflare->purge_by_url( null, $purge_urls, $lang ); + } + /** * Purge CloudFlare cache. * @@ -628,7 +667,7 @@ public function display_settings_notice( $value, $old_value ) { $connection = $this->cloudflare->check_connection( $value['cloudflare_zone_id'] ); - if ( is_wp_error( $connection ) ) { + if ( is_wp_error( $connection ) && function_exists( 'add_settings_error' ) ) { add_settings_error( 'general', 'cloudflare_api_key_invalid', __( 'WP Rocket: ', 'rocket' ) . '' . $connection->get_error_message() . '', 'error' ); } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Abilities/AbilitiesInterface.php b/web/app/plugins/wp-rocket/inc/Engine/Abilities/AbilitiesInterface.php new file mode 100644 index 000000000..d5fea48e3 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Abilities/AbilitiesInterface.php @@ -0,0 +1,27 @@ +catalog = $catalog; + } + + /** + * Prints the WP Rocket abilities catalog as JSON. + * + * ## EXAMPLES + * + * $ wp rocket abilities-catalog + * [{"name":"wp-rocket/get-options", ...}] + * + * @return void + */ + public function abilities_catalog(): void { + \WP_CLI::line( (string) wp_json_encode( $this->catalog->get_manifest(), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES ) ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Abilities/CLI/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/Abilities/CLI/Subscriber.php new file mode 100644 index 000000000..19130f5c4 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Abilities/CLI/Subscriber.php @@ -0,0 +1,44 @@ +command = $command; + } + + /** + * Get the events to which this subscriber wants to listen. + * + * @return array The events and their corresponding callback methods. + */ + public static function get_subscribed_events(): array { + return [ + 'cli_init' => 'register_commands', + ]; + } + + /** + * Registers the `wp rocket abilities-catalog` command with WP-CLI. + * + * @return void + */ + public function register_commands(): void { + \WP_CLI::add_command( 'rocket abilities-catalog', [ $this->command, 'abilities_catalog' ] ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Abilities/Catalog.php b/web/app/plugins/wp-rocket/inc/Engine/Abilities/Catalog.php new file mode 100644 index 000000000..4fb212262 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Abilities/Catalog.php @@ -0,0 +1,42 @@ +get_name(), self::VENDOR_PREFIX ) ) { + continue; + } + + $manifest[] = [ + 'name' => $ability->get_name(), + 'label' => $ability->get_label(), + 'description' => $ability->get_description(), + 'category' => $ability->get_category(), + 'input_schema' => $ability->get_input_schema(), + 'output_schema' => $ability->get_output_schema(), + 'meta' => $ability->get_meta(), + ]; + } + + return $manifest; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Abilities/Context.php b/web/app/plugins/wp-rocket/inc/Engine/Abilities/Context.php new file mode 100644 index 000000000..774a43469 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Abilities/Context.php @@ -0,0 +1,21 @@ +options = $options; + $this->allowed_options = $allowed_options; + } + + /** + * Registers the ability to get WP Rocket options. + * + * @return void + */ + public function register(): void { + if ( ! function_exists( 'wp_register_ability' ) ) { + return; + } + + $schema_definitions = [ + // Cache settings. + 'cache_logged_user' => [ + 'type' => 'integer', + 'description' => 'Enable caching for logged-in users.', + 'enum' => [ 0, 1 ], + ], + 'cache_webp' => [ + 'type' => 'integer', + 'description' => 'Enable WebP caching.', + 'enum' => [ 0, 1 ], + ], + 'do_caching_mobile_files' => [ + 'type' => 'integer', + 'description' => 'Create separate cache files for mobile.', + 'enum' => [ 0, 1 ], + ], + 'cache_reject_uri' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'URLs to exclude from caching.', + ], + 'cache_reject_cookies' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'Cookies that prevent caching.', + ], + 'cache_reject_ua' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'User agents to exclude from caching.', + ], + 'cache_query_strings' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'Query strings to cache.', + ], + 'cache_purge_pages' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'URLs to always purge.', + ], + 'purge_cron_interval' => [ + 'type' => 'integer', + 'description' => 'Cache lifespan interval value.', + ], + 'purge_cron_unit' => [ + 'type' => 'string', + 'description' => 'Cache lifespan time unit.', + 'enum' => [ 'MINUTE_IN_SECONDS', 'HOUR_IN_SECONDS', 'DAY_IN_SECONDS' ], + ], + + // File optimization - CSS. + 'minify_css' => [ + 'type' => 'integer', + 'description' => 'Enable CSS minification.', + 'enum' => [ 0, 1 ], + ], + 'minify_google_fonts' => [ + 'type' => 'integer', + 'description' => 'Enable Google Fonts minification.', + 'enum' => [ 0, 1 ], + ], + 'exclude_css' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'CSS files to exclude from minification.', + ], + 'async_css' => [ + 'type' => 'integer', + 'description' => 'Enable asynchronous CSS loading.', + 'enum' => [ 0, 1 ], + ], + 'async_css_mobile' => [ + 'type' => 'integer', + 'description' => 'Enable asynchronous CSS loading on mobile.', + 'enum' => [ 0, 1 ], + ], + 'critical_css' => [ + 'type' => 'string', + 'description' => 'Fallback critical CSS content.', + ], + 'remove_unused_css' => [ + 'type' => 'integer', + 'description' => 'Enable Remove Unused CSS (RUCSS).', + 'enum' => [ 0, 1 ], + ], + 'remove_unused_css_safelist' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'CSS selectors to always keep.', + ], + 'optimize_css_delivery' => [ + 'type' => 'integer', + 'description' => 'Enable CSS delivery optimization.', + 'enum' => [ 0, 1 ], + ], + + // File optimization - JS. + 'minify_js' => [ + 'type' => 'integer', + 'description' => 'Enable JavaScript minification.', + 'enum' => [ 0, 1 ], + ], + 'minify_concatenate_js' => [ + 'type' => 'integer', + 'description' => 'Enable JavaScript concatenation.', + 'enum' => [ 0, 1 ], + ], + 'exclude_js' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'JavaScript files to exclude from minification.', + ], + 'exclude_inline_js' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'Inline JavaScript patterns to exclude.', + ], + 'defer_all_js' => [ + 'type' => 'integer', + 'description' => 'Enable JavaScript defer loading.', + 'enum' => [ 0, 1 ], + ], + 'exclude_defer_js' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'JavaScript files to exclude from defer.', + ], + 'delay_js' => [ + 'type' => 'integer', + 'description' => 'Enable Delay JavaScript execution.', + 'enum' => [ 0, 1 ], + ], + 'delay_js_exclusions' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'JavaScript files to exclude from delay.', + ], + + // Media. + 'lazyload' => [ + 'type' => 'integer', + 'description' => 'Enable image lazy loading.', + 'enum' => [ 0, 1 ], + ], + 'lazyload_iframes' => [ + 'type' => 'integer', + 'description' => 'Enable iframe/video lazy loading.', + 'enum' => [ 0, 1 ], + ], + 'lazyload_youtube' => [ + 'type' => 'integer', + 'description' => 'Replace YouTube videos with preview image.', + 'enum' => [ 0, 1 ], + ], + 'lazyload_css_bg_img' => [ + 'type' => 'integer', + 'description' => 'Enable CSS background image lazy loading.', + 'enum' => [ 0, 1 ], + ], + 'exclude_lazyload' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'Patterns to exclude from lazy loading.', + ], + 'image_dimensions' => [ + 'type' => 'integer', + 'description' => 'Add missing image dimensions.', + 'enum' => [ 0, 1 ], + ], + + // Fonts. + 'host_fonts_locally' => [ + 'type' => 'integer', + 'description' => 'Host Google Fonts locally.', + 'enum' => [ 0, 1 ], + ], + 'auto_preload_fonts' => [ + 'type' => 'integer', + 'description' => 'Automatically preload fonts.', + 'enum' => [ 0, 1 ], + ], + + // Preload. + 'manual_preload' => [ + 'type' => 'integer', + 'description' => 'Enable cache preloading.', + 'enum' => [ 0, 1 ], + ], + 'preload_links' => [ + 'type' => 'integer', + 'description' => 'Enable link preloading on hover.', + 'enum' => [ 0, 1 ], + ], + 'preload_fonts' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'Font URLs to preload.', + ], + 'preload_excluded_uri' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'URIs to exclude from preload.', + ], + 'dns_prefetch' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'Domains to DNS prefetch.', + ], + + // Database. + 'database_revisions' => [ + 'type' => 'integer', + 'description' => 'Clean post revisions.', + 'enum' => [ 0, 1 ], + ], + 'database_auto_drafts' => [ + 'type' => 'integer', + 'description' => 'Clean auto drafts.', + 'enum' => [ 0, 1 ], + ], + 'database_trashed_posts' => [ + 'type' => 'integer', + 'description' => 'Clean trashed posts.', + 'enum' => [ 0, 1 ], + ], + 'database_spam_comments' => [ + 'type' => 'integer', + 'description' => 'Clean spam comments.', + 'enum' => [ 0, 1 ], + ], + 'database_trashed_comments' => [ + 'type' => 'integer', + 'description' => 'Clean trashed comments.', + 'enum' => [ 0, 1 ], + ], + 'database_all_transients' => [ + 'type' => 'integer', + 'description' => 'Clean all transients.', + 'enum' => [ 0, 1 ], + ], + 'database_optimize_tables' => [ + 'type' => 'integer', + 'description' => 'Optimize database tables.', + 'enum' => [ 0, 1 ], + ], + 'schedule_automatic_cleanup' => [ + 'type' => 'integer', + 'description' => 'Enable automatic database cleanup.', + 'enum' => [ 0, 1 ], + ], + 'automatic_cleanup_frequency' => [ + 'type' => 'string', + 'description' => 'Frequency of automatic cleanup.', + 'enum' => [ 'daily', 'weekly', 'monthly' ], + ], + + // CDN. + 'cdn' => [ + 'type' => 'integer', + 'description' => 'Enable CDN.', + 'enum' => [ 0, 1 ], + ], + 'cdn_cnames' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'CDN CNAME URLs.', + ], + 'cdn_zone' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'CDN zones for each CNAME.', + ], + 'cdn_reject_files' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'Files to exclude from CDN.', + ], + 'cdn_reject_pages' => [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + 'description' => 'Pages to exclude from CDN.', + ], + + // Cloudflare. + 'do_cloudflare' => [ + 'type' => 'integer', + 'description' => 'Enable Cloudflare integration.', + 'enum' => [ 0, 1 ], + ], + 'cloudflare_devmode' => [ + 'type' => 'integer', + 'description' => 'Enable Cloudflare development mode.', + 'enum' => [ 0, 1 ], + ], + 'cloudflare_protocol_rewrite' => [ + 'type' => 'integer', + 'description' => 'Enable Cloudflare protocol rewrite.', + 'enum' => [ 0, 1 ], + ], + 'cloudflare_auto_settings' => [ + 'type' => 'integer', + 'description' => 'Apply optimal Cloudflare settings.', + 'enum' => [ 0, 1 ], + ], + + // Heartbeat. + 'control_heartbeat' => [ + 'type' => 'integer', + 'description' => 'Enable Heartbeat control.', + 'enum' => [ 0, 1 ], + ], + 'heartbeat_site_behavior' => [ + 'type' => 'string', + 'description' => 'Heartbeat behavior on frontend.', + 'enum' => [ '', 'reduce_periodicity', 'disable' ], + ], + 'heartbeat_admin_behavior' => [ + 'type' => 'string', + 'description' => 'Heartbeat behavior in admin.', + 'enum' => [ '', 'reduce_periodicity', 'disable' ], + ], + 'heartbeat_editor_behavior' => [ + 'type' => 'string', + 'description' => 'Heartbeat behavior in post editor.', + 'enum' => [ '', 'reduce_periodicity', 'disable' ], + ], + + // Performance monitoring. + 'performance_monitoring' => [ + 'type' => 'integer', + 'description' => 'Enable performance monitoring.', + 'enum' => [ 0, 1 ], + ], + 'performance_monitoring_schedule_frequency' => [ + 'type' => 'integer', + 'description' => 'Performance monitoring check frequency in seconds.', + 'enum' => [ 86400, 604800, 2592000 ], + ], + + // Add-ons. + 'varnish_auto_purge' => [ + 'type' => 'integer', + 'description' => 'Enable Varnish auto purge.', + 'enum' => [ 0, 1 ], + ], + 'sucury_waf_cache_sync' => [ + 'type' => 'integer', + 'description' => 'Enable Sucuri WAF cache sync.', + 'enum' => [ 0, 1 ], + ], + + // Analytics. + 'analytics_enabled' => [ + 'type' => 'integer', + 'description' => 'Enable anonymous analytics.', + 'enum' => [ 0, 1 ], + ], + + // Misc. + 'emoji' => [ + 'type' => 'integer', + 'description' => 'Enable emoji support.', + 'enum' => [ 0, 1 ], + ], + ]; + + $properties = array_intersect_key( $schema_definitions, array_flip( $this->allowed_options->get() ) ); + + wp_register_ability( + 'wp-rocket/get-options', + [ + 'label' => __( 'Get WP Rocket options', 'rocket' ), + 'description' => _x( + 'Retrieves current WP Rocket settings as a flat key-value object, including toggles and array-type options. +Use this when the user asks what is enabled, disabled, or excluded. Do not use it to change settings; use set-option instead. +Always call this before set-option when changing an array-type option, to avoid overwriting existing values. Do not show internal, credential, or read-only keys to the user. +Unless the user asks for another format, present settings as a grouped dashboard with cards for Caching, File Optimisation, Media, CDN, Database, and Heartbeat. Each card should show a group-level badge, setting rows, status pills, impact bars, and plain-language descriptions using the approved colors.', + 'Ability description', + 'rocket' + ), + 'category' => 'wp-rocket-options', + 'output_schema' => [ + 'type' => 'object', + 'properties' => $properties, + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'show_in_rest' => true, + 'mcp' => [ + 'public' => true, + ], + 'annotations' => [ + 'readonly' => true, + 'destructive' => false, + 'idempotent' => true, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to get WP Rocket options. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to get WP Rocket options, returning only allowlisted options. + * + * @return array + */ + public function execute(): array { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/get-options', + 'context' => 'wp_plugin_mcp', + ] + ); + $allowed_keys = $this->allowed_options->get(); + $options = $this->options->get_options(); + + return array_intersect_key( $options, array_flip( $allowed_keys ) ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Abilities/Options/SetOption.php b/web/app/plugins/wp-rocket/inc/Engine/Abilities/Options/SetOption.php new file mode 100644 index 000000000..c610bdaa8 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Abilities/Options/SetOption.php @@ -0,0 +1,400 @@ + [ 'MINUTE_IN_SECONDS', 'HOUR_IN_SECONDS', 'DAY_IN_SECONDS' ], + 'automatic_cleanup_frequency' => [ 'daily', 'weekly', 'monthly' ], + 'heartbeat_site_behavior' => [ '', 'reduce_periodicity', 'disable' ], + 'heartbeat_admin_behavior' => [ '', 'reduce_periodicity', 'disable' ], + 'heartbeat_editor_behavior' => [ '', 'reduce_periodicity', 'disable' ], + ]; + + /** + * Options that require special string sanitization (CSS content). + */ + private const STRING_OPTIONS = [ + 'critical_css', + ]; + + /** + * Options that use rocket_sanitize_textarea_field() for sanitization. + */ + private const TEXTAREA_FIELD_OPTIONS = [ + 'cache_reject_uri', + 'cache_reject_cookies', + 'cache_reject_ua', + 'cache_query_strings', + 'cache_purge_pages', + 'exclude_css', + 'exclude_js', + 'exclude_inline_js', + 'exclude_defer_js', + 'exclude_lazyload', + 'delay_js_exclusions', + 'remove_unused_css_safelist', + 'cdn_reject_files', + ]; + + /** + * Options that accept arrays with sanitize_text_field per item. + */ + private const ARRAY_OPTIONS = [ + 'cdn_cnames', + 'cdn_zone', + 'preload_fonts', + 'dns_prefetch', + 'preload_excluded_uri', + 'cdn_reject_pages', + 'delay_js_exclusions_selected', + 'delay_js_exclusions_selected_exclusions', + ]; + + /** + * Constructor. + * + * @param AllowedOptions $allowed_options Allowed options instance. + */ + public function __construct( AllowedOptions $allowed_options ) { + $this->allowed_options = $allowed_options; + } + + /** + * Registers the set option ability. + * + * @return void + */ + public function register(): void { + if ( ! function_exists( 'wp_register_ability' ) ) { + return; + } + + wp_register_ability( + 'wp-rocket/set-option', + [ + 'label' => __( 'Set a WP Rocket option', 'rocket' ), + 'description' => _x( + 'Writes one WP Rocket option using option_name and option_value. update_mode defaults to update, which appends to arrays; use replace to overwrite a full array. +Use this when the user wants to enable, disable, or update a specific setting. For array-type options, always call get-options first. +Confirmation is required before calling. First show the setting name and the current value to new value. Then ask: `Confirm this change?` and wait for a clear yes or no. +A user request such as `enable it` or `disable it` is not enough confirmation. Only call this ability after the user gives an affirmative answer in the same turn.', + 'Ability description', + 'rocket' + ), + 'category' => 'wp-rocket-options', + 'input_schema' => [ + 'type' => 'object', + 'properties' => [ + 'option_name' => [ + 'type' => 'string', + 'description' => __( 'The name of the WP Rocket option to set', 'rocket' ), + 'enum' => $this->allowed_options->get(), + ], + 'option_value' => [ + 'anyOf' => [ + [ 'type' => 'string' ], + [ 'type' => 'boolean' ], + [ 'type' => 'integer' ], + [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + ], + ], + 'description' => __( 'The value to set for the specified WP Rocket option', 'rocket' ), + ], + 'update_mode' => [ + 'type' => 'string', + 'enum' => [ 'update', 'replace' ], + 'description' => __( 'For array and textarea options: "update" (default) adds new entries to the existing list; "replace" overwrites the entire list.', 'rocket' ), + ], + ], + 'required' => [ 'option_name', 'option_value' ], + ], + 'output_schema' => [ + 'type' => 'object', + 'properties' => [ + 'success' => [ + 'type' => 'boolean', + 'description' => __( 'Indicates whether the option was successfully set', 'rocket' ), + ], + 'error' => [ + 'type' => 'string', + 'description' => __( 'Error message if the option could not be set', 'rocket' ), + ], + 'previous_value' => [ + 'anyOf' => [ + [ 'type' => 'string' ], + [ 'type' => 'boolean' ], + [ 'type' => 'integer' ], + [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + ], + ], + 'description' => __( 'The previous value of the option before it was updated', 'rocket' ), + ], + 'new_value' => [ + 'anyOf' => [ + [ 'type' => 'string' ], + [ 'type' => 'boolean' ], + [ 'type' => 'integer' ], + [ + 'type' => 'array', + 'items' => [ 'type' => 'string' ], + ], + ], + 'description' => __( 'The new value of the option after it was updated', 'rocket' ), + ], + ], + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'show_in_rest' => true, + 'mcp' => [ + 'public' => true, + ], + 'annotations' => [ + 'readonly' => false, + 'destructive' => true, + 'idempotent' => true, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to set WP Rocket options. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to set a WP Rocket option. + * + * @param array|null $input Input containing option_name, option_value, and optionally update_mode. + * @return array Response with success status and option values. + */ + public function execute( $input = null ): array { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/set-option', + 'context' => 'wp_plugin_mcp', + ] + ); + $option_name = $input['option_name']; + $option_value = $input['option_value']; + $update_mode = $input['update_mode'] ?? 'update'; + + if ( ! $this->validate_option_name( $option_name ) ) { + return [ + 'success' => false, + 'error' => sprintf( + /* translators: %s: option name */ + __( 'Invalid option name: %s. This option cannot be set via the ability.', 'rocket' ), + $option_name + ), + ]; + } + + $previous_value = get_rocket_option( $option_name ); + $sanitized_value = $this->sanitize_value( $option_name, $option_value, $update_mode, $previous_value ); + + update_rocket_option( $option_name, $sanitized_value ); + + return [ + 'success' => true, + 'previous_value' => $previous_value, + 'new_value' => $sanitized_value, + ]; + } + + /** + * Returns an array of all allowed option names. + * + * @return array List of allowed option names. + */ + private function get_allowed_options(): array { + return $this->allowed_options->get(); + } + + /** + * Validates that the option name is in the allowed list. + * + * @param string $option_name The option name to validate. + * @return bool True if valid, false otherwise. + */ + private function validate_option_name( string $option_name ): bool { + return in_array( $option_name, $this->get_allowed_options(), true ); + } + + /** + * Sanitizes the option value based on the option type. + * + * @param string $option_name The option name. + * @param mixed $option_value The value to sanitize. + * @param string $update_mode Either 'update' (merge into existing) or 'replace' (overwrite). + * @param mixed $previous_value The current stored value, used for merging in update mode. + * @return mixed Sanitized value. + */ + private function sanitize_value( string $option_name, $option_value, string $update_mode = 'update', $previous_value = null ) { + // Boolean options: convert to 0 or 1. + if ( in_array( $option_name, self::BOOLEAN_OPTIONS, true ) ) { + return ! empty( $option_value ) ? 1 : 0; + } + + // Integer options: cast to integer. + if ( in_array( $option_name, self::INTEGER_OPTIONS, true ) ) { + return (int) $option_value; + } + + // Enum options: validate against allowed values. + if ( isset( self::ENUM_OPTIONS[ $option_name ] ) ) { + $allowed_values = self::ENUM_OPTIONS[ $option_name ]; + if ( in_array( $option_value, $allowed_values, true ) ) { + return $option_value; + } + // Return current value if invalid. + return $previous_value; + } + + // String options (critical_css): strip tags and style elements. + if ( in_array( $option_name, self::STRING_OPTIONS, true ) ) { + if ( empty( $option_value ) ) { + return ''; + } + return wp_strip_all_tags( + str_replace( [ '' ], '', $option_value ), + true + ); + } + + // Textarea field options: use rocket_sanitize_textarea_field. + if ( in_array( $option_name, self::TEXTAREA_FIELD_OPTIONS, true ) ) { + if ( ! function_exists( 'rocket_sanitize_textarea_field' ) ) { + $sanitized = is_array( $option_value ) ? $option_value : []; + } else { + $sanitized = rocket_sanitize_textarea_field( $option_name, $option_value ) ?? []; + } + + if ( 'replace' === $update_mode ) { + return $sanitized; + } + + // update mode: merge new entries into the existing list. + $existing = is_array( $previous_value ) ? $previous_value : []; + return array_values( array_unique( array_merge( $existing, $sanitized ) ) ); + } + + // Array options: sanitize each item with sanitize_text_field. + if ( in_array( $option_name, self::ARRAY_OPTIONS, true ) ) { + if ( ! is_array( $option_value ) ) { + return []; + } + + $sanitized = array_map( 'sanitize_text_field', $option_value ); + + if ( 'replace' === $update_mode ) { + return $sanitized; + } + + // update mode: merge new entries into the existing list. + $existing = is_array( $previous_value ) ? $previous_value : []; + return array_values( array_unique( array_merge( $existing, $sanitized ) ) ); + } + + // Fallback: return value as-is (should not reach here for valid options). + return $option_value; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Abilities/Options/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/Abilities/Options/Subscriber.php new file mode 100644 index 000000000..de8fea3b4 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Abilities/Options/Subscriber.php @@ -0,0 +1,109 @@ +get_options = $get_options; + $this->set_option = $set_option; + $this->context = $context; + } + + /** + * Get the events to which this subscriber wants to listen. + * + * @return array The events and their corresponding callback methods. + */ + public static function get_subscribed_events(): array { + return [ + 'wp_abilities_api_categories_init' => [ + [ 'register_options_category' ], + ], + 'wp_abilities_api_init' => [ + [ 'register_get_options_ability' ], + [ 'register_set_option_ability' ], + ], + ]; + } + + /** + * Register the WP Rocket options ability category. + * + * @return void + */ + public function register_options_category(): void { + if ( ! $this->context->is_enabled() ) { + return; + } + + if ( ! function_exists( 'wp_register_ability_category' ) ) { + return; + } + + wp_register_ability_category( + 'wp-rocket-options', + [ + 'label' => __( 'WP Rocket Options', 'rocket' ), + 'description' => __( 'Abilities that retrieve or update WP Rocket options', 'rocket' ), + ] + ); + } + + /** + * Register the ability to get WP Rocket options. + * + * @return void + */ + public function register_get_options_ability(): void { + if ( ! $this->context->is_enabled() ) { + return; + } + + $this->get_options->register(); + } + + /** + * Register the ability to set a WP Rocket option. + * + * @return void + */ + public function register_set_option_ability(): void { + if ( ! $this->context->is_enabled() ) { + return; + } + + $this->set_option->register(); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Abilities/ServiceProvider.php b/web/app/plugins/wp-rocket/inc/Engine/Abilities/ServiceProvider.php new file mode 100644 index 000000000..6d9c78327 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Abilities/ServiceProvider.php @@ -0,0 +1,70 @@ +provides, true ); + } + + /** + * Register the services provided by this service provider. + * + * @return void + */ + public function register(): void { + $this->getContainer()->addShared( 'abilities_context', Context::class ); + $this->getContainer()->addShared( 'abilities_allowed_options', AllowedOptions::class ); + $this->getContainer()->add( 'abilities_get_options', GetOptions::class ) + ->addArguments( [ 'options', 'abilities_allowed_options' ] ); + $this->getContainer()->add( 'abilities_set_option', SetOption::class ) + ->addArgument( 'abilities_allowed_options' ); + $this->getContainer()->addShared( 'abilities_subscriber', Subscriber::class ) + ->addArguments( + [ + 'abilities_get_options', + 'abilities_set_option', + 'abilities_context', + ] + ); + $this->getContainer()->addShared( 'abilities_catalog', Catalog::class ); + $this->getContainer()->add( 'abilities_cli_command', CLICommand::class ) + ->addArgument( 'abilities_catalog' ); + $this->getContainer()->addShared( 'abilities_cli_subscriber', CLISubscriber::class ) + ->addArgument( 'abilities_cli_command' ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Activation/Activation.php b/web/app/plugins/wp-rocket/inc/Engine/Activation/Activation.php index 708099643..8fabeaaf2 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Activation/Activation.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Activation/Activation.php @@ -94,6 +94,9 @@ public static function activate_plugin() { */ do_action( 'rocket_activation' ); + // Flush once, after every activator has registered its rewrite rules. + flush_rewrite_rules(); + if ( rocket_valid_key() ) { // Add All WP Rocket rules of the .htaccess file. flush_rocket_htaccess(); diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/Beacon/Beacon.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/Beacon/Beacon.php index 6573eb9d5..2a89433eb 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/Beacon/Beacon.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/Beacon/Beacon.php @@ -579,14 +579,44 @@ public function get_suggest( $doc_id ) { 'url' => 'https://fr.docs.wp-rocket.me/article/246-utiliser-wp-rocket-avec-un-cdn/?utm_source=wp_plugin&utm_medium=wp_rocket', ], ], + 'own_cdn' => [ + 'en' => [ + 'id' => '54c7fa3de4b0512429885b5c', + 'url' => 'https://docs.wp-rocket.me/article/42-using-wp-rocket-with-a-cdn/?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'fr' => [ + 'id' => '5696830b9033603f7da308ac', + 'url' => 'https://fr.docs.wp-rocket.me/article/246-utiliser-wp-rocket-avec-un-cdn/?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + ], + 'purge_cdn' => [ + 'en' => [ + 'id' => '5e4c84bd04286364bc958833', + 'url' => 'https://docs.wp-rocket.me/article/1307-rocketcdn/?utm_source=wp_plugin&utm_medium=wp_rocket#when-should-i-purge-the-rocketcdn-cache', + ], + 'fr' => [ + 'id' => '5f351e42042863444aa04652', + 'url' => 'https://fr.docs.wp-rocket.me/article/1343-comment-utiliser-rocketcdn/?utm_source=wp_plugin&utm_medium=wp_rocket#when-should-i-purge-the-rocketcdn-cache', + ], + ], 'rocketcdn' => [ 'en' => [ 'id' => '5e4c84bd04286364bc958833', - 'url' => 'https://docs.wp-rocket.me/article/1307-rocketcdn/?utm_source=wp_plugin&utm_medium=wp_rocket', + 'url' => 'https://docs.wp-rocket.me/article/1307-rocketcdn/?utm_source=wp_plugin&utm_medium=wp_rocket#rocketcdn-pro-plan', ], 'fr' => [ 'id' => '5f351e42042863444aa04652', - 'url' => 'https://fr.docs.wp-rocket.me/article/1343-comment-utiliser-rocketcdn/?utm_source=wp_plugin&utm_medium=wp_rocket', + 'url' => 'https://fr.docs.wp-rocket.me/article/1343-comment-utiliser-rocketcdn/?utm_source=wp_plugin&utm_medium=wp_rocket#rocketcdn-pro-plan', + ], + ], + 'rocketcdn_free' => [ + 'en' => [ + 'id' => '5e4c84bd04286364bc958833', + 'url' => 'https://docs.wp-rocket.me/article/1307-rocketcdn/?utm_source=wp_plugin&utm_medium=wp_rocket#rocketcdn-free-plan', + ], + 'fr' => [ + 'id' => '5f351e42042863444aa04652', + 'url' => 'https://fr.docs.wp-rocket.me/article/1343-comment-utiliser-rocketcdn/?utm_source=wp_plugin&utm_medium=wp_rocket#rocketcdn-free-plan', ], ], 'rocketcdn_error' => [ @@ -601,12 +631,22 @@ public function get_suggest( $doc_id ) { ], 'exclude_cdn' => [ 'en' => [ - 'id' => '5434667fe4b0310ce5ee867a', - 'url' => 'https://docs.wp-rocket.me/article/24-resolving-issues-with-cdn-and-fonts-icons/?utm_source=wp_plugin&utm_medium=wp_rocket', + 'id' => '54c7fa3de4b0512429885b5c', + 'url' => 'https://docs.wp-rocket.me/article/42-using-wp-rocket-with-a-cdn#exclude-files-from-your-cdn', + ], + 'fr' => [ + 'id' => '5696830b9033603f7da308ac', + 'url' => 'https://fr.docs.wp-rocket.me/article/246-utiliser-wp-rocket-avec-un-cdn/?utm_source=wp_plugin&utm_medium=wp_rocket#exclure-des-fichiers-du-cdn', + ], + ], + 'exclude_cdn_rocketcdn' => [ + 'en' => [ + 'id' => '5e4c84bd04286364bc958833', + 'url' => 'https://docs.wp-rocket.me/article/1307-rocketcd/?utm_source=wp_plugin&utm_medium=wp_rocket#exclude-files-from-rocketcdn', ], 'fr' => [ - 'id' => '569684d29033603f7da308b9', - 'url' => 'https://fr.docs.wp-rocket.me/article/248-resoudre-des-problemes-avec-cdn-et-les-polices-icones/?utm_source=wp_plugin&utm_medium=wp_rocket', + 'id' => '5f351e42042863444aa04652', + 'url' => 'https://fr.docs.wp-rocket.me/article/1343-comment-utiliser-rocketcdn/?utm_source=wp_plugin&utm_medium=wp_rocket#exclude-files-from-rocketcdn', ], ], 'cloudflare_credentials' => [ @@ -845,6 +885,16 @@ public function get_suggest( $doc_id ) { 'url' => 'https://fr.docs.wp-rocket.me/article/1878-rocket-insights?utm_source=wp_plugin&utm_medium=wp_rocket', ], ], + 'mcp_server' => [ + 'en' => [ + 'id' => '6a5a7a2d8609704abe640d81', + 'url' => 'https://docs.wp-rocket.me/article/1922-wp-rocket-mcp?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'fr' => [ + 'id' => '6a635ff8a20e9375e2188b72', + 'url' => 'https://fr.docs.wp-rocket.me/article/1923-mcp-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + ], ]; return isset( $suggest[ $doc_id ][ $this->get_user_locale() ] ) diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/APIHandler/APIClient.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/APIHandler/APIClient.php index 8d3d897da..0c4aa53c6 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/APIHandler/APIClient.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/APIHandler/APIClient.php @@ -52,14 +52,6 @@ public function add_to_queue( string $url, array $options = [], array $args = [] $args ); - $this->logger::debug( - 'Rocket Insights: Initiating test', - [ - 'url' => $url, - 'options' => $options, - ] - ); - $sent = $this->handle_post( $args ); if ( ! $sent ) { @@ -78,13 +70,6 @@ public function add_to_queue( string $url, array $options = [], array $args = [] $response_data = json_decode( $this->response_body, true ); - $this->logger::info( - 'Rocket Insights: Test initiated successfully', - [ - 'job_id' => $response_data['uuid'], - ] - ); - $response_data['code'] = $this->response_code; return $response_data; @@ -107,11 +92,6 @@ public function get_queue_job_status( string $test_id, $queue_name, $is_home = f 'timeout' => 15, ]; - $this->logger::debug( - 'Rocket Insights: Checking test status', - [ 'test_id' => $test_id ] - ); - $sent = $this->handle_get( $args ); if ( ! $sent ) { @@ -146,14 +126,6 @@ public function get_queue_job_status( string $test_id, $queue_name, $is_home = f return $error_data; } - $this->logger::debug( - 'Rocket Insights: Status check completed', - [ - 'test_id' => $test_id, - 'status' => $response_data['status'] ?? 'unknown', - ] - ); - switch ( $response_data['status'] ?? 'pending' ) { case 'pending': $code = 425; diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/AddPageInsights.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/AddPageInsights.php new file mode 100644 index 000000000..8f98c203d --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/AddPageInsights.php @@ -0,0 +1,370 @@ +context = $context; + $this->manager = $manager; + $this->job_processor = $job_processor; + $this->queue = $queue; + $this->query = $query; + $this->plan = $plan; + } + + /** + * Registers the ability to add page insights. + */ + public function register(): void { + if ( ! function_exists( 'wp_register_ability' ) ) { + return; + } + + wp_register_ability( + 'wp-rocket/add-page-insights', + [ + 'label' => __( 'Add Page Insights', 'rocket' ), + 'description' => _x( + 'Adds a URL to Rocket Insights monitoring. Requires a valid URI. +Use this when the user wants to monitor a new page. Do not use it when the page is already monitored; use retest-page-insights instead. +Confirm the exact URL with the user before calling. This action is non-idempotent, so calling it twice for the same URL may return an error. +On success, tell the user the first score may take a few minutes and offer to trigger an immediate test with retest-page-insights Recheck every minute in the background and poll results with get-page-insights-score.', + 'Ability description', + 'rocket' + ), + 'category' => 'wp-rocket-insights', + 'input_schema' => [ + 'type' => 'object', + 'properties' => [ + 'url' => [ + 'type' => 'string', + 'format' => 'uri', + ], + ], + 'required' => [ 'url' ], + ], + 'output_schema' => [ + 'type' => 'object', + 'properties' => [ + 'success' => [ + 'type' => 'boolean', + 'description' => __( 'Indicates whether the page was successfully added', 'rocket' ), + ], + 'error' => [ + 'type' => 'string', + 'description' => __( 'Error message if the page could not be added', 'rocket' ), + ], + ], + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'mcp' => [ + 'public' => true, + ], + 'show_in_rest' => true, + 'annotations' => [ + 'readonly' => false, + 'destructive' => false, + 'idempotent' => false, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to execute this ability. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to add page insights. + * + * @param array $input The input data containing the URL to be added. + * + * @return array + */ + public function execute( $input = null ): array { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/add-page-insights', + 'context' => 'wp_plugin_mcp', + ] + ); + $payload = $this->get_url_validation_payload( $input['url'] ); + + if ( $payload['error'] ) { + return [ + 'success' => false, + 'error' => $payload['message'], + ]; + } + + $url = $payload['processed_url']; + + if ( Utils::is_home( $url ) ) { + $page_title = __( 'Homepage', 'rocket' ); + } else { + $page_title = $this->get_page_title( $payload['message'] ); + } + + $source = 'mcp-ai'; + + $additional_details = [ + 'title' => $page_title, + 'data' => [ + 'source' => $source, + ], + ]; + + // Handle synchronous submission using shared method. + $row_id = $this->handle_sync_submission( $url, true, $additional_details ); + + if ( empty( $row_id ) ) { + return [ + 'success' => false, + 'error' => 'Failed to add page to monitoring queue.', + ]; + } + + // Check URL limit again after insertion to handle race conditions. + // If the limit is exceeded, remove the newly added URL and return an error. + if ( $this->query->get_total_count() > $this->plan->max_urls() ) { + // Delete the newly added URL. + $this->query->delete_item( $row_id ); + + return [ + 'success' => false, + 'error' => 'URL limit exceeded.', + ]; + } + + $urls_count = $this->query->get_total_count(); + $current_plan = $this->plan->get_current_plan(); + + /** + * Fires when a performance monitoring job is added. + * + * @since 3.20 + * + * @param string $url The URL that was added for monitoring. + * @param string $plan Plan name. + * @param int $urls_count The current number of URLs being monitored. + * @param string $source The source of the request. + */ + do_action( 'rocket_rocket_insights_job_added', $url, $current_plan, $urls_count, $source ); + + return [ + 'success' => true, + 'error' => '', + ]; + } + + /** + * Validates a given URL for performance monitoring eligibility. + * + * @param string $url The URL to validate. + * + * @return array { + * @type bool $error Whether an error occurred during validation. + * @type string $message The error message, or an empty string if no error. + * @type string $processed_url The URL with protocol added if validation passes. + * } + */ + protected function get_url_validation_payload( string $url ): array { + $payload = [ + 'error' => false, + 'message' => '', + 'processed_url' => '', + 'data' => [ + 'status' => 400, + ], + ]; + + if ( 'local' === wp_get_environment_type() ) { + $payload['error'] = true; + $payload['message'] = 'Performance monitoring is disabled for local environment'; + + return $payload; + } + + // Validate that performance monitoring is not disabled. + if ( ! $this->context->is_allowed() ) { + $payload['error'] = true; + $payload['message'] = 'Performance monitoring is disabled.'; + + return $payload; + } + + // Check if URL has protocol, add if needed. + $url = rocket_add_url_protocol( $url ); + $payload['processed_url'] = $url; + + $response = $this->get_page_content( $url ); + + if ( ! $response ) { + $payload['error'] = true; + $payload['message'] = 'Url does not resolve to a valid page.'; + + return $payload; + } + + // check if url is not from admin. + if ( strpos( $url, admin_url() ) === 0 ) { + $payload['error'] = true; + $payload['message'] = 'Url is an admin page.'; + + return $payload; + } + + // Check if url has not been submited. + if ( false !== $this->manager->get_single_job( $url, true ) ) { + $payload['error'] = true; + $payload['message'] = 'URL has already been submitted for performance monitoring.'; + + return $payload; + } + + // Fetch url body and send to payload. + $payload['message'] = $response; + + return $payload; + } + + /** + * Handle synchronous submission of Rocket Insights job. + * + * This method centralizes the logic for attempting synchronous job submission + * and falling back to async queuing when needed. It uses JobProcessor's send_api + * for the actual API call, then adds Rocket Insights-specific validation and logging. + * + * @since 3.20 + * + * @param string $url The URL to test. + * @param bool $is_mobile Whether this is a mobile test. + * @param array $additional_details Optional additional data to store with the job. + * + * @return bool|null Row ID on success, false on failure, null if not allowed. + */ + private function handle_sync_submission( string $url, bool $is_mobile, array $additional_details = [] ) { + // Attempt synchronous API submission. + $sync_response = $this->job_processor->send_api( $url, $is_mobile, 'rocket_insights', true ); + + // If sync submission failed or returned WP_Error, fall back to async queue. + if ( false === $sync_response || empty( $sync_response['uuid'] ) ) { + Logger::error( + 'Rocket Insights: Synchronous Submission failed, Now falling back to Async Queue.', + [ + 'url' => $url, + ] + ); + return $this->manager->add_to_the_queue( $url, $is_mobile, $additional_details ); + } + + // Success! Save with the new data. + $row_id = $this->manager->add_to_the_queue( $url, $is_mobile, $additional_details ); + + if ( empty( $row_id ) ) { + // DB insert failed after successful API submission - log orphaned job. + Logger::error( + 'Rocket Insights: Database insert failed after successful sync submission', + [ + 'url' => $url, + 'job_id' => $sync_response['uuid'], + ] + ); + return false; + } + + Logger::info( + 'Rocket Insights: Synchronous Submission successful, Now scheduling single job to run in 30 seconds.', + [ + 'url' => $url, + ] + ); + + // Update to in-progress status immediately with job_id. + $this->manager->make_status_inprogress( $url, $is_mobile, 'rocket_insights', [ 'job_id' => $sync_response['uuid'] ] ); + $this->queue->schedule_job_status_single_task( time() + 30, $url, $is_mobile, 'rocket_insights' ); + + return $row_id; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/GetInsightsScore.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/GetInsightsScore.php new file mode 100644 index 000000000..72b72b507 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/GetInsightsScore.php @@ -0,0 +1,228 @@ +query = $query; + $this->global_score = $global_score; + } + + /** + * Registers the ability to get insights scores. + */ + public function register(): void { + if ( ! function_exists( 'wp_register_ability' ) ) { + return; + } + + wp_register_ability( + 'wp-rocket/get-insights-scores', + [ + 'label' => __( 'Get Rocket Insights Score', 'rocket' ), + 'description' => _x( + 'Returns a site-wide Rocket Insights summary with global_score, pages_monitored, is_running, and per-page results. Use include_metrics: true unless the user explicitly asks only for the global score. +Do not open or read GTmetrix report_url links. You may show them as complementary report links. +Use this when the user asks for a global score, site-wide overview, or all monitored pages. Do not use it for a specific page; use get-page-insights-score instead. +If is_running is true or any result is not completed, tell the user tests are still in progress and only show completed results. Recheck every minute until remaining results are available. Do not show status when all results are completed. Do not show is_running unless at least one page result has is_running: true. +Always open with a one-line global verdict, such as `Global score: 84/100 - 3 pages healthy, 2 need attention.` Present results using the richest available format: charts first, then a Markdown table, then structured prose. +When showing scores or metrics, use only the approved performance colors and thresholds.', + 'Ability description', + 'rocket' + ), + 'category' => 'wp-rocket-insights', + 'input_schema' => [ + 'anyOf' => [ + [ + 'type' => 'null', + ], + [ + 'type' => 'object', + 'properties' => [ + 'include_metrics' => [ + 'type' => 'boolean', + ], + ], + ], + ], + ], + 'output_schema' => [ + 'type' => 'object', + 'properties' => [ + 'summary' => [ + 'type' => 'object', + 'properties' => [ + 'global_score' => [ + 'type' => 'number', + ], + 'pages_monitored' => [ + 'type' => 'integer', + ], + 'status' => [ + 'type' => 'string', + ], + 'is_running' => [ + 'type' => 'boolean', + ], + ], + ], + 'results' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'url' => [ + 'type' => 'string', + 'format' => 'uri', + ], + 'title' => [ + 'type' => 'string', + ], + 'is_mobile' => [ + 'type' => 'boolean', + ], + 'status' => [ + 'type' => 'string', + ], + 'data' => [ + 'type' => 'string', + ], + 'modified' => [ + 'type' => 'string', + 'format' => 'date-time', + ], + 'score' => [ + 'type' => [ + 'number', + 'null', + ], + ], + 'report_url' => [ + 'type' => [ 'string', 'null' ], + 'format' => 'uri', + ], + 'metric_data' => [ + 'type' => [ + 'string', + 'null', + ], + ], + ], + ], + ], + ], + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'mcp' => [ + 'public' => true, + ], + 'show_in_rest' => true, + 'annotations' => [ + 'readonly' => true, + 'destructive' => false, + 'idempotent' => true, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to execute this ability. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to get insights scores. + * + * @param array|null $input Optional input parameters, such as 'include_metrics' to include detailed metric data. + * + * @return array + */ + public function execute( $input = null ) { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/get-insights-scores', + 'context' => 'wp_plugin_mcp', + ] + ); + $global_score = $this->global_score->get_global_score_data(); + $results = []; + + if ( 'no-url' === $global_score['status'] ) { + return [ + 'summary' => [ + 'global_score' => $global_score['score'], + 'pages_monitored' => $global_score['pages_num'], + 'status' => $global_score['status'], + 'is_running' => $global_score['is_running'], + ], + 'results' => $results, + ]; + } + + $args = [ + 'fields' => [ + 'url', + 'title', + 'is_mobile', + 'status', + 'data', + 'modified', + 'score', + 'report_url', + ], + ]; + + if ( ! empty( $input['include_metrics'] ) ) { + $args['fields'][] = 'metric_data'; + } + + $results = $this->query->query( $args ); + + return [ + 'summary' => [ + 'global_score' => $global_score['score'], + 'pages_monitored' => $global_score['pages_num'], + 'status' => $global_score['status'], + 'is_running' => $global_score['is_running'], + ], + 'results' => $results, + ]; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/GetPageInsightsScore.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/GetPageInsightsScore.php new file mode 100644 index 000000000..16d6ef284 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/GetPageInsightsScore.php @@ -0,0 +1,189 @@ +query = $query; + $this->plan = $plan; + } + + /** + * Registers the ability to get page insights score. + */ + public function register(): void { + if ( ! function_exists( 'wp_register_ability' ) ) { + return; + } + + wp_register_ability( + 'wp-rocket/get-page-insights-score', + [ + 'label' => __( 'Get Rocket Insights Score for a Page', 'rocket' ), + 'description' => _x( + 'Returns the latest Rocket Insights score for one specific URL. Requires a URI and returns score, status, report_url, and metric_data such as LCP, FCP, and TBT. +Use this when the user asks about the performance or score of one page. Do not use it for fresh tests; use retest-page-insights instead. Do not use it for all pages; use get-insights-scores instead. +If exists is false, tell the user the URL is not monitored and offer to add it with add-page-insights. This ability is read-only and does not trigger a new test. +Always open with a one-line verdict, such as `Score: 94/100 - page is healthy.` Present results using the richest available format: charts first, then a Markdown table, then structured prose. +Do not open or read GTmetrix report_url links. You may show them as complementary report links. When showing scores or metrics, use only the approved performance colors and thresholds.', + 'Ability description', + 'rocket' + ), + 'category' => 'wp-rocket-insights', + 'input_schema' => [ + 'type' => 'object', + 'properties' => [ + 'url' => [ + 'type' => 'string', + 'format' => 'uri', + ], + ], + 'required' => [ 'url' ], + ], + 'output_schema' => [ + 'type' => 'object', + 'properties' => [ + 'exists' => [ + 'type' => 'boolean', + ], + 'results' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'url' => [ + 'type' => 'string', + 'format' => 'uri', + ], + 'title' => [ + 'type' => 'string', + ], + 'is_mobile' => [ + 'type' => 'boolean', + ], + 'status' => [ + 'type' => 'string', + ], + 'modified' => [ + 'type' => [ 'string', 'null' ], + ], + 'score' => [ + 'type' => [ 'number', 'null' ], + ], + 'report_url' => [ + 'type' => [ 'string', 'null' ], + ], + 'metric_data' => [ + 'type' => [ 'object', 'null' ], + ], + ], + ], + ], + 'free_slots' => [ + 'type' => 'integer', + ], + ], + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'mcp' => [ + 'public' => true, + ], + 'show_in_rest' => true, + 'annotations' => [ + 'readonly' => true, + 'destructive' => false, + 'idempotent' => true, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to execute this ability. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to get page insights score. + * + * @param array|null $input The input data containing the URL to look up. + * + * @return array + */ + public function execute( $input = null ): array { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/get-page-insights-score', + 'context' => 'wp_plugin_mcp', + ] + ); + $url = rocket_add_url_protocol( $input['url'] ); + $url = untrailingslashit( $url ); + $rows = $this->query->get_rows_by_url( $url ); + + if ( false === $rows ) { + $free_slots = max( 0, $this->plan->max_urls() - $this->query->get_total_count() ); + + return [ + 'exists' => false, + 'free_slots' => $free_slots, + ]; + } + + $results = []; + + foreach ( $rows as $row ) { + $results[] = [ + 'url' => $row->url, + 'score' => $row->score, + 'status' => $row->status, + 'modified' => $row->modified ? gmdate( 'Y-m-d\TH:i:s\Z', $row->modified ) : null, + 'report_url' => ! empty( $row->report_url ) ? $row->report_url : null, + 'metric_data' => $row->metric_data, + 'is_mobile' => $row->is_mobile, + 'title' => $row->title, + ]; + } + + return [ + 'exists' => true, + 'results' => $results, + ]; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/GetRecommendations.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/GetRecommendations.php new file mode 100644 index 000000000..9e107a067 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/GetRecommendations.php @@ -0,0 +1,196 @@ +data_manager = $data_manager; + } + + /** + * Registers the ability to get Rocket Insights recommendations. + */ + public function register(): void { + if ( ! function_exists( 'wp_register_ability' ) ) { + return; + } + + wp_register_ability( + 'wp-rocket/get-recommendations', + [ + 'label' => __( 'Get Rocket Insights Recommendations', 'rocket' ), + 'description' => __( + 'Returns WP Rocket\'s own site-specific performance recommendations. +Use this when the user asks what to improve or wants prioritized optimization suggestions. Do not use it for scores or test results; use get-insights-scores or get-page-insights-score instead. +Check the status first. If status is loading, retry in a few minutes. If status is completed, show the recommendations. If status is failed or expired, tell the user no recommendation data is available. +For each recommendation, mcp_actionable: true means it can be applied with set-option and may be suggested for activation. mcp_actionable: false means the recommendation requires a manual step.', + 'rocket' + ), + 'category' => 'wp-rocket-insights', + 'input_schema' => [], + 'output_schema' => [ + 'type' => 'object', + 'properties' => [ + 'status' => [ + 'type' => 'string', + 'enum' => [ 'loading', 'completed', 'failed', 'expired' ], + 'description' => 'The current state of the recommendations data.', + ], + 'recommendations' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'option_slug' => [ 'type' => 'string' ], + 'title' => [ 'type' => 'string' ], + 'description' => [ 'type' => 'string' ], + 'mcp_actionable' => [ 'type' => 'boolean' ], + 'mcp_ability' => [ 'type' => [ 'string', 'null' ] ], + ], + ], + ], + ], + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'mcp' => [ + 'public' => true, + ], + 'show_in_rest' => true, + 'annotations' => [ + 'readonly' => true, + 'destructive' => false, + 'idempotent' => true, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to execute this ability. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to get Rocket Insights recommendations. + * + * @param mixed $input Unused input parameter. + * + * @return array + */ + public function execute( $input = null ): array { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/get-recommendations', + 'context' => 'wp_plugin_mcp', + ] + ); + $data = $this->data_manager->get_recommendations(); + + if ( false === $data ) { + return [ + 'status' => 'expired', + 'recommendations' => [], + ]; + } + + // Status whitelist guard — coerce any unrecognised or transitional status + // to a value within the closed output_schema enum. + // 'pending' maps to 'loading' (matches Recommendations\Render::map_status_to_state()). + // Anything outside the known set falls back to 'failed'. + $known_statuses = [ 'loading', 'completed', 'failed' ]; + if ( 'pending' === $data['status'] ) { + $status = 'loading'; + } elseif ( in_array( $data['status'], $known_statuses, true ) ) { + $status = $data['status']; + } else { + $status = 'failed'; + } + + $formatted = []; + foreach ( $data['recommendations'] ?? [] as $recommendation ) { + $slug = $recommendation['option_slug'] ?? ''; + $actionable = in_array( $slug, self::MCP_ACTIONABLE_OPTION_SLUGS, true ); + $formatted[] = [ + 'option_slug' => $slug, + 'title' => $recommendation['title'] ?? '', + 'description' => $recommendation['description'] ?? '', + 'mcp_actionable' => $actionable, + 'mcp_ability' => $actionable ? 'wp-rocket/set-option' : null, + ]; + } + + return [ + 'status' => $status, + 'recommendations' => $formatted, + ]; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/RemovePageInsights.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/RemovePageInsights.php new file mode 100644 index 000000000..5f9bc5708 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/RemovePageInsights.php @@ -0,0 +1,178 @@ +context = $context; + $this->query = $query; + } + + /** + * Registers the ability to remove page insights. + */ + public function register(): void { + if ( ! function_exists( 'wp_register_ability' ) ) { + return; + } + + wp_register_ability( + 'wp-rocket/remove-page-insights', + [ + 'label' => __( 'Remove Page Insights', 'rocket' ), + 'description' => _x( + 'Permanently removes a URL from Rocket Insights monitoring and deletes its historical score data. +Use this only when the user explicitly asks to stop monitoring a page and accepts data deletion. Do not use it for pausing or retesting. +This action is destructive and non-idempotent. Before calling, explicitly confirm the exact URL with the user. Never remove multiple pages in bulk; require separate confirmation for each URL.', + 'Ability description', + 'rocket' + ), + 'category' => 'wp-rocket-insights', + 'input_schema' => [ + 'type' => 'object', + 'properties' => [ + 'url' => [ + 'type' => 'string', + 'format' => 'uri', + 'description' => __( 'Full URL of the page to remove from Rocket Insights monitoring.', 'rocket' ), + ], + ], + 'required' => [ 'url' ], + ], + 'output_schema' => [ + 'type' => 'object', + 'properties' => [ + 'success' => [ + 'type' => 'boolean', + 'description' => __( 'Indicates whether the page was successfully removed', 'rocket' ), + ], + 'error' => [ + 'type' => 'string', + 'description' => __( 'Error message if the page could not be removed', 'rocket' ), + ], + ], + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'mcp' => [ + 'public' => true, + ], + 'show_in_rest' => true, + 'annotations' => [ + 'readonly' => false, + 'destructive' => true, + 'idempotent' => false, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to execute this ability. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to remove a page from Rocket Insights monitoring. + * + * @param array $input The input data containing the URL to be removed. + * + * @return array + */ + public function execute( $input = null ): array { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/remove-page-insights', + 'context' => 'wp_plugin_mcp', + ] + ); + if ( ! $this->context->is_allowed() ) { + return [ + 'success' => false, + 'error' => 'Performance monitoring is disabled.', + ]; + } + + $url = rocket_add_url_protocol( $input['url'] ); + + $rows = $this->query->get_rows_by_url( $url ); + + if ( empty( $rows ) ) { + return [ + 'success' => false, + 'error' => 'URL is not currently being monitored.', + ]; + } + + // A page can have both a mobile and a desktop row; remove all of them. + $deleted_id = null; + foreach ( $rows as $row ) { + if ( $this->query->delete_item( $row->id ) ) { + $deleted_id = $row->id; + } + } + + // Nothing was removed (e.g. the rows were deleted concurrently); skip the side-effects. + if ( null === $deleted_id ) { + return [ + 'success' => false, + 'error' => 'URL is not currently being monitored.', + ]; + } + + /** + * Fires when a performance monitoring job is deleted. + * + * Removing a page is a single logical event: the listeners reset the global + * score and refresh recommendations globally, so the action is fired once even + * when several rows (mobile and desktop) were removed. + * + * @since 3.20 + * + * @param int $id The ID of a deleted performance monitoring job. + */ + do_action( 'rocket_rocket_insights_job_deleted', $deleted_id ); + + return [ + 'success' => true, + 'error' => '', + ]; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/RetestPageInsights.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/RetestPageInsights.php new file mode 100644 index 000000000..eeca15cf9 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/RetestPageInsights.php @@ -0,0 +1,311 @@ +context = $context; + $this->manager = $manager; + $this->job_processor = $job_processor; + $this->queue = $queue; + } + + /** + * Registers the ability to retest page insights. + */ + public function register(): void { + if ( ! function_exists( 'wp_register_ability' ) ) { + return; + } + + wp_register_ability( + 'wp-rocket/retest-page-insights', + [ + 'label' => __( 'Retest Page Insights', 'rocket' ), + 'description' => __( + 'Triggers a fresh Rocket Insights performance test for an already monitored URL. Requires a valid URI. +Use this when the user wants a fresh test for a monitored page. Do not call it while a test is already running. +Handle response statuses as follows: triggered means the test was queued and results should be polled with get-page-insights-score; running means a test is already in progress and should not be triggered again; not_found means the page is not tracked and add-page-insights should be offered; failed means an error occurred. +If the user wants results, wait and check every minute with get-page-insights-score, since the test may take a few minutes.', + 'rocket' + ), + 'category' => 'wp-rocket-insights', + 'input_schema' => [ + 'type' => 'object', + 'properties' => [ + 'url' => [ + 'type' => 'string', + 'format' => 'uri', + ], + ], + 'required' => [ 'url' ], + ], + 'output_schema' => [ + 'type' => 'object', + 'properties' => [ + 'success' => [ + 'type' => 'boolean', + 'description' => __( 'Whether the retest was triggered', 'rocket' ), + ], + 'status' => [ + 'type' => 'string', + 'enum' => [ 'running', 'triggered', 'not_found', 'failed' ], + 'description' => __( 'Current job status: running = test already in flight; triggered = retest queued; not_found = URL not tracked; failed = error', 'rocket' ), + ], + 'error' => [ + 'type' => 'string', + 'description' => __( 'Error message if retest could not be triggered', 'rocket' ), + ], + ], + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'mcp' => [ + 'public' => true, + ], + 'show_in_rest' => true, + 'annotations' => [ + 'readonly' => false, + 'destructive' => false, + 'idempotent' => false, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to execute this ability. + * + * MCP OAuth gates only on login by design — the ability owns its permission check. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to retest page insights. + * + * @param array $input The input data containing the URL to be retested. + * + * @return array + */ + public function execute( $input = null ): array { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/retest-page-insights', + 'context' => 'wp_plugin_mcp', + ] + ); + // Guard: local environments do not support performance monitoring. + if ( 'local' === wp_get_environment_type() ) { + return [ + 'success' => false, + 'status' => 'failed', + 'error' => 'Performance monitoring is disabled for local environment', + ]; + } + + // Guard: performance monitoring may be disabled via context (e.g. plan, settings). + if ( ! $this->context->is_allowed() ) { + return [ + 'success' => false, + 'status' => 'failed', + 'error' => 'Performance monitoring is disabled.', + ]; + } + + // Normalize URL — add protocol if missing. + $url = rocket_add_url_protocol( $input['url'] ); + + // Look up the existing DB row for this URL. get_single_job() returns bool|object. + $row = $this->manager->get_single_job( $url, true ); + + if ( ! is_object( $row ) ) { + return [ + 'success' => false, + 'status' => 'not_found', + 'error' => 'URL is not tracked by Rocket Insights.', + ]; + } + + // Guard: delegate running-state check to the Row object. + // is_running() encapsulates the canonical set ['to-submit', 'pending', 'in-progress']. + // + // Note (concurrency race): there is a TOCTOU window between this is_running() check + // and the reset_job() call inside add_url_to_the_queue(). A cron transition in that + // window could clobber a newly in-flight job. This is accepted best-effort behavior — + // Rest::update_item() has the identical race and ships without additional locking. + if ( $row->is_running() ) { + return [ + 'success' => true, + 'status' => 'running', + 'error' => '', + ]; + } + + // Build submission details with stale-score reset fields. + // + // score, report_url, and is_blurred are passed through add_to_the_queue() → + // add_url_to_the_queue() → reset_job(), which clears the previous result from the + // DB row immediately. Without these fields the row retains the old score until the new + // test completes, causing get-insights-scores to return stale data during the retest window. + // + // Note (stuck rows): a row permanently stuck in a running state (e.g. cron crashed after + // submission) will cause is_running() to return true indefinitely, blocking retests. The + // only recovery path is manual deletion from the admin UI. This is a pre-existing limitation + // shared with Rest::update_item() and is out of scope for this PR. + $additional_details = [ + 'data' => [ + 'is_retest' => true, + 'source' => 'mcp-ai', + ], + 'score' => '', + 'report_url' => '', + 'is_blurred' => 0, + ]; + + $row_id = $this->handle_sync_submission( $url, true, $additional_details ); + + if ( empty( $row_id ) ) { + return [ + 'success' => false, + 'status' => 'failed', + 'error' => 'Unable to reset performance test. Please try again.', + ]; + } + + /** + * Fires when a Rocket Insights retest job is triggered via the MCP ability. + * + * @since 3.20 + * + * @param int $row_id The ID of the existing row that was queued for retesting. + */ + do_action( 'rocket_rocket_insights_job_retest', (int) $row->id ); + + return [ + 'success' => true, + 'status' => 'triggered', + 'error' => '', + ]; + } + + /** + * Handle synchronous submission of Rocket Insights retest job. + * + * This method centralizes the logic for attempting synchronous job submission + * and falling back to async queuing when needed. It uses JobProcessor's send_api + * for the actual API call, then adds Rocket Insights-specific validation and logging. + * + * Copied verbatim from AddPageInsights::handle_sync_submission() which correctly uses + * Logger::info() on the success path. Do NOT copy from Rest::handle_sync_submission() + * which has a Logger::error()-on-success bug. + * + * @since 3.20 + * + * @param string $url The URL to test. + * @param bool $is_mobile Whether this is a mobile test. + * @param array $additional_details Optional additional data to store with the job. + * + * @return bool|null Row ID on success, false on failure, null if not allowed. + */ + private function handle_sync_submission( string $url, bool $is_mobile, array $additional_details = [] ) { + // Attempt synchronous API submission. + $sync_response = $this->job_processor->send_api( $url, $is_mobile, 'rocket_insights', true ); + + // If sync submission failed or returned WP_Error, fall back to async queue. + if ( false === $sync_response || empty( $sync_response['uuid'] ) ) { + Logger::error( + 'Rocket Insights: Synchronous Submission failed, Now falling back to Async Queue.', + [ + 'url' => $url, + ] + ); + return $this->manager->add_to_the_queue( $url, $is_mobile, $additional_details ); + } + + // Success! Save with the new data. + $row_id = $this->manager->add_to_the_queue( $url, $is_mobile, $additional_details ); + + if ( empty( $row_id ) ) { + // DB insert failed after successful API submission - log orphaned job. + Logger::error( + 'Rocket Insights: Database insert failed after successful sync submission', + [ + 'url' => $url, + 'job_id' => $sync_response['uuid'], + ] + ); + return false; + } + + Logger::info( + 'Rocket Insights: Synchronous Submission successful, Now scheduling single job to run in 30 seconds.', + [ + 'url' => $url, + ] + ); + + // Update to in-progress status immediately with job_id. + $this->manager->make_status_inprogress( $url, $is_mobile, 'rocket_insights', [ 'job_id' => $sync_response['uuid'] ] ); + $this->queue->schedule_job_status_single_task( time() + 30, $url, $is_mobile, 'rocket_insights' ); + + return $row_id; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/Subscriber.php new file mode 100644 index 000000000..8fec36432 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Abilities/Subscriber.php @@ -0,0 +1,185 @@ +get_insights_score = $get_insights_score; + $this->add_page_insights = $add_page_insights; + $this->retest_page_insights = $retest_page_insights; + $this->remove_page_insights = $remove_page_insights; + $this->get_recommendations = $get_recommendations; + $this->get_page_insights_score = $get_page_insights_score; + $this->abilities_context = $abilities_context; + } + + /** + * Returns an array of events this subscriber wants to listen to. + * + * @return array + */ + public static function get_subscribed_events(): array { + return [ + 'wp_abilities_api_init' => [ + [ 'register_get_insights_scores_ability' ], + [ 'register_add_page_insights_ability' ], + [ 'register_retest_page_insights_ability' ], + [ 'register_remove_page_insights_ability' ], + [ 'register_get_recommendations_ability' ], + [ 'register_get_page_insights_score_ability' ], + ], + 'wp_abilities_api_categories_init' => 'register_rocket_insights_category', + ]; + } + + /** + * Registers the ability to get insights scores. + */ + public function register_get_insights_scores_ability() { + if ( ! $this->abilities_context->is_enabled() ) { + return; + } + + $this->get_insights_score->register(); + } + + /** + * Registers the Rocket Insights ability category. + */ + public function register_rocket_insights_category() { + if ( ! $this->abilities_context->is_enabled() ) { + return; + } + + if ( ! function_exists( 'wp_register_ability_category' ) ) { + return; + } + + wp_register_ability_category( + 'wp-rocket-insights', + [ + 'label' => __( 'Rocket Insights', 'rocket' ), + 'description' => __( 'Abilities related to Rocket Insights performance monitoring and scoring.', 'rocket' ), + ] + ); + } + + /** + * Registers the ability to add page insights. + */ + public function register_add_page_insights_ability() { + if ( ! $this->abilities_context->is_enabled() ) { + return; + } + + $this->add_page_insights->register(); + } + + /** + * Registers the ability to retest page insights. + */ + public function register_retest_page_insights_ability() { + if ( ! $this->abilities_context->is_enabled() ) { + return; + } + + $this->retest_page_insights->register(); + } + + /** + * Registers the ability to remove page insights. + */ + public function register_remove_page_insights_ability() { + if ( ! $this->abilities_context->is_enabled() ) { + return; + } + + $this->remove_page_insights->register(); + } + + /** + * Registers the ability to get recommendations. + */ + public function register_get_recommendations_ability() { + if ( ! $this->abilities_context->is_enabled() ) { + return; + } + + $this->get_recommendations->register(); + } + + /** + * Registers the ability to get page insights score. + */ + public function register_get_page_insights_score_ability() { + if ( ! $this->abilities_context->is_enabled() ) { + return; + } + + $this->get_page_insights_score->register(); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Controller.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Controller.php index 5b0dfa38b..112cd9503 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Controller.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Controller.php @@ -490,4 +490,40 @@ public function track_metric_actions(): void { wp_send_json_success(); } + + /** + * Tracks the home page event after the user opts in to analytics. + * + * This method checks if the analytics notice has already been displayed and dismissed to ensure events are not tracked multiple times. + * If not, it triggers the tracking of the Rocket Insights test. + * + * @param bool $status Indicates the current status of the analytics opt-in. + * + * @return void + */ + public function track_home_after_analytics_optin( bool $status ): void { + // Bail out if user disabled analytics. + if ( ! $status ) { + return; + } + + // Bail out if analytics already enabled before and notice was dismissed. + if ( 1 === (int) get_option( 'rocket_analytics_notice_displayed' ) ) { + return; + } + + $row_details = $this->query->get_row( home_url(), true ); + + // Bail out if row details is not found. + if ( empty( $row_details ) ) { + return; + } + + // Bail out if test is still in progress. + if ( ! in_array( $row_details->status, [ 'completed', 'failed' ], true ) ) { + return; + } + + $this->tracking->track_rocket_insights_test( $row_details, [], $this->plan->get_current_plan() ); + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/GlobalMetrics/Calculator.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/GlobalMetrics/Calculator.php index 96e6145c1..d41621f66 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/GlobalMetrics/Calculator.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/GlobalMetrics/Calculator.php @@ -82,6 +82,10 @@ function () { // Sum up all metrics. foreach ( $tests as $test ) { + if ( empty( $test ) ) { + continue; + } + $metric_data = json_decode( $test, true ); // Skip if metric_data is empty or not an array. diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Jobs/Manager.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Jobs/Manager.php index df6d6d4bf..a5cca86e5 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Jobs/Manager.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Jobs/Manager.php @@ -70,12 +70,9 @@ public function __construct( * @return array */ public function get_pending_jobs( int $num_rows ): array { - $this->logger::debug( "Rocket Insights: Start getting number of {$num_rows} pending jobs." ); - $pending_jobs = $this->query->get_pending_jobs( $num_rows ); if ( ! $pending_jobs ) { - $this->logger::debug( 'Rocket Insights: No pending jobs are there.' ); return []; } @@ -157,25 +154,11 @@ public function process( array $job_details, $row_details, string $optimization_ } if ( ! empty( $job_details['status'] ) && 'pending' === $job_details['status'] ) { - $this->logger::info( - 'Rocket Insights: Revert to pending because of API status is pending', - [ - 'job_id' => $row_details->job_id, - ] - ); - $this->query->revert_to_pending( $row_details->id ); + return; } - $this->logger::info( - 'Rocket Insights: Test completed successfully', - [ - 'job_id' => $row_details->job_id, - 'score' => $job_details['performance_score'] ?? null, - ] - ); - $this->query->make_status_completed( $row_details->id, 'completed', $this->parse_test_results( $job_details ) ); $row_details = $this->query->get_row_by_id( $row_details->id ); diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/PageHandlerTrait.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/PageHandlerTrait.php deleted file mode 100644 index 0ea699d9b..000000000 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/PageHandlerTrait.php +++ /dev/null @@ -1,69 +0,0 @@ - tag in the given HTML, decodes any HTML entities, - * strips all tags, sanitizes the text, and then trims the title at common separators - * (such as " | ", " - ", " – ", " » ") to return a clean, concise page title. - * - * @param string $html The HTML content from which to extract the page title. - * - * @return string The sanitized and trimmed page title, or an empty string if not found. - */ - public function get_page_title( string $html ): string { - $title = ''; - - if ( empty( $html ) ) { - return $title; - } - - // Extract title from title tag. - if ( ! preg_match( '/]*>(.*?)<\/title>/is', $html, $matches ) ) { - return $title; - } - - // Clean up and sanitize the title. - $title = html_entity_decode( trim( $matches[1] ), ENT_QUOTES, 'UTF-8' ); - - if ( empty( $title ) ) { - return $title; - } - - $title = wp_strip_all_tags( $title ); - $title = sanitize_text_field( $title ); - - return $title; - } - - - /** - * Fetches the HTML content of a given URL using a custom user agent. - * - * Performs a remote GET request to the specified URL, simulating a mobile browser user agent, - * and returns the response body if the request is successful (HTTP 200). - * - * @param string $url The URL to fetch the HTML content from. - * - * @return string|false The HTML content of the page on success, or false on failure. - */ - public function get_page_content( string $url ) { - $user_agent = 'WP Rocket/Fetch Page Buffer for Performance Monitoring Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'; - $args = [ - 'user-agent' => $user_agent, - 'timeout' => 60, - ]; - - $response = wp_safe_remote_get( $url, $args ); - - if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { - return false; - } - - return wp_remote_retrieve_body( $response ); - } -} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/DataManager.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/DataManager.php index c4973dbf3..4bd1e607b 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/DataManager.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/DataManager.php @@ -74,6 +74,9 @@ class DataManager implements LoggerAwareInterface { 'database_all_transients' => 'database', 'sucury_waf_cache_sync' => 'addons', 'varnish_auto_purge' => 'addons', + + 'plugin_rocketcdn' => 'page_cdn', + 'plugin_imagify' => 'imagify', ]; /** diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/SettingsSubscriber.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/SettingsSubscriber.php index a461e52fa..b424ac1dd 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/SettingsSubscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/SettingsSubscriber.php @@ -6,6 +6,7 @@ use WP_Rocket\Event_Management\Subscriber_Interface; use WP_Rocket\Logger\LoggerAware; use WP_Rocket\Logger\LoggerAwareInterface; +use Imagify_Partner; /** * Recommendations Settings Subscriber. @@ -38,7 +39,8 @@ public function __construct( DataManager $data_manager ) { */ public static function get_subscribed_events(): array { return [ - 'update_option_wp_rocket_settings' => [ 'maybe_fetch_after_settings_change', 10, 2 ], + 'update_option_wp_rocket_settings' => [ 'maybe_fetch_after_settings_change', 10, 2 ], + 'rocket_insights_api_recommendations_params' => 'maybe_add_imagify_to_recommendations_api_params', ]; } @@ -76,6 +78,26 @@ public function maybe_fetch_after_settings_change( array $old_options, array $ne $this->fetch_recommendations( $new_options ); } + /** + * Adds the 'plugin_imagify' option to the recommendations API parameters. + * + * Adds 'plugin_imagify' if Imagify is active OR white label is enabled. + * + * @param array $params The existing API parameters. + * @return array The modified API parameters with 'plugin_imagify' added if applicable. + */ + public function maybe_add_imagify_to_recommendations_api_params( array $params ): array { + if ( + rocket_get_constant( 'WP_ROCKET_WHITE_LABEL_ACCOUNT', false ) + || + Imagify_Partner::has_imagify_api_key() + ) { + $params['enabled_options'][] = 'plugin_imagify'; + } + + return $params; + } + /** * Check if changed settings affect recommendations. * diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/Subscriber.php index 980dbe19e..79ceee492 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/Subscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Recommendations/Subscriber.php @@ -64,6 +64,8 @@ public static function get_subscribed_events(): array { 'rocket_insights_recommendations_rest_response' => 'output_recommendations_rest_response', 'wp_rocket_upgrade' => [ 'force_global_metrics_recalculation', 10, 2 ], 'rocket_rocket_insights_job_deleted' => 'maybe_clear_recommendations_on_delete', + 'activated_plugin' => 'maybe_clear_recommendations', + 'deactivated_plugin' => 'maybe_clear_recommendations', ]; } @@ -159,6 +161,25 @@ public function force_global_metrics_recalculation( string $new_version, string $this->data_manager->force_global_metrics_recalculation(); } + /** + * Clear recommendations if relevant plugin(Imagify/RocketCDN) is activated or deactivated. + * + * @param string $plugin The plugin being activated or deactivated. + * @return void + */ + public function maybe_clear_recommendations( string $plugin ): void { + $allowed_plugins = [ + 'imagify/imagify.php', + 'rocketcdn/rocketcdn.php', + ]; + + if ( ! in_array( $plugin, $allowed_plugins, true ) ) { + return; + } + + $this->data_manager->clear_recommendations(); + } + /** * Fetches recommendations on page load. * diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Rest.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Rest.php index 79181f6c2..207a5ec52 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Rest.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Rest.php @@ -17,6 +17,7 @@ use WP_Rocket\Engine\Common\{ JobManager\JobProcessor, JobManager\Queue\Queue, + Page\PageHandlerTrait, Utils }; use WP_Rocket\Logger\Logger; @@ -462,6 +463,46 @@ public function create_item( $request ) { return rest_ensure_response( $payload ); } + /** + * Validate url + * + * @param string $url The URL to validate. + * + * @return array + */ + private function get_url_validation_payload( string $url ) { + // Validate that performance monitoring is not disabled. + if ( ! $this->context->is_allowed() ) { + $payload['error'] = true; + $payload['message'] = 'Performance monitoring is disabled.'; + + return $payload; + } + + if ( 'local' === wp_get_environment_type() ) { + $payload['error'] = true; + $payload['message'] = 'Performance monitoring is disabled for local environment'; + + return $payload; + } + + $payload = $this->get_page_url_validation_payload( $url ); + + if ( $payload['error'] ) { + return $payload; + } + + // Check if url has not been submited. + if ( false !== $this->manager->get_single_job( $url, true ) ) { + $payload['error'] = true; + $payload['message'] = ''; + + return $payload; + } + + return $payload; + } + /** * Checks if a given request has access to create items. * @@ -752,83 +793,6 @@ public function get_progress_permissions_check( $request ) { return true; } - /** - * Validates a given URL for performance monitoring eligibility. - * - * @param string $url The URL to validate. - * - * @return array { - * @type bool $error Whether an error occurred during validation. - * @type string $message The error message, or an empty string if no error. - * @type string $processed_url The URL with protocol added if validation passes. - * } - */ - protected function get_url_validation_payload( string $url ): array { - $payload = [ - 'error' => false, - 'message' => '', - 'processed_url' => '', - 'data' => [ - 'status' => 400, - ], - ]; - - if ( 'local' === wp_get_environment_type() ) { - $payload['error'] = true; - $payload['message'] = 'Performance monitoring is disabled for local environment'; - - return $payload; - } - - // Validate that performance monitoring is not disabled. - if ( ! $this->context->is_allowed() ) { - $payload['error'] = true; - $payload['message'] = 'Performance monitoring is disabled.'; - - return $payload; - } - // Validate that url is not empty. - if ( '' === $url ) { - $payload['error'] = true; - $payload['message'] = 'No url provided.'; - - return $payload; - } - - // Check if URL has protocol, add if needed. - $url = rocket_add_url_protocol( $url ); - $payload['processed_url'] = $url; - - $response = $this->get_page_content( $url ); - - if ( ! $response ) { - $payload['error'] = true; - $payload['message'] = 'Url does not resolve to a valid page.'; - - return $payload; - } - - // check if url is not from admin. - if ( strpos( $url, admin_url() ) === 0 ) { - $payload['error'] = true; - $payload['message'] = 'Url is an admin page.'; - - return $payload; - } - - // Check if url has not been submited. - if ( false !== $this->manager->get_single_job( $url, true ) ) { - $payload['error'] = true; - - return $payload; - } - - // Fetch url body and send to payload. - $payload['message'] = $response; - - return $payload; - } - /** * Retrieves the global performance score payload for AJAX responses. * diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/ServiceProvider.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/ServiceProvider.php index dedfcf0f9..2f302714a 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/ServiceProvider.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/ServiceProvider.php @@ -5,7 +5,15 @@ use WP_Rocket\Dependencies\League\Container\Argument\Literal\StringArgument; use WP_Rocket\Dependencies\League\Container\ServiceProvider\AbstractServiceProvider; -use WP_Rocket\Engine\Admin\RocketInsights\{Database\Tables\RocketInsights as RITable, +use WP_Rocket\Engine\Admin\RocketInsights\{ + Abilities\GetInsightsScore, + Abilities\AddPageInsights, + Abilities\RetestPageInsights, + Abilities\RemovePageInsights, + Abilities\GetRecommendations, + Abilities\GetPageInsightsScore, + Abilities\Subscriber as AbilitiesSubscriber, + Database\Tables\RocketInsights as RITable, Database\Queries\RocketInsights as RIQuery, APIHandler\APIClient as RIAPIClient, Context\Context, @@ -68,6 +76,13 @@ class ServiceProvider extends AbstractServiceProvider { 'ri_recommendations_rest', 'ri_recommendations_subscriber', 'ri_recommendations_settings_subscriber', + 'ri_get_insights_scores_ability', + 'ri_add_page_insights_ability', + 'ri_retest_page_insights_ability', + 'ri_remove_page_insights_ability', + 'ri_get_recommendations_ability', + 'ri_get_page_insights_score_ability', + 'ri_abilities_subscriber', ]; /** @@ -288,6 +303,68 @@ public function register(): void { ] ); + $this->getContainer()->add( 'ri_get_insights_scores_ability', GetInsightsScore::class ) + ->addArguments( + [ + 'ri_query', + 'ri_global_score', + ] + ); + + $this->getContainer()->add( 'ri_add_page_insights_ability', AddPageInsights::class ) + ->addArguments( + [ + 'ri_context', + 'ri_manager', + 'job_processor', + 'job_manager_queue', + 'ri_query', + 'ri_plan', + ] + ); + + $this->getContainer()->add( 'ri_retest_page_insights_ability', RetestPageInsights::class ) + ->addArguments( + [ + 'ri_context', + 'ri_manager', + 'job_processor', + 'job_manager_queue', + ] + ); + + $this->getContainer()->add( 'ri_remove_page_insights_ability', RemovePageInsights::class ) + ->addArguments( + [ + 'ri_context', + 'ri_query', + ] + ); + + $this->getContainer()->add( 'ri_get_recommendations_ability', GetRecommendations::class ) + ->addArgument( 'ri_recommendations_data_manager' ); + + $this->getContainer()->add( 'ri_get_page_insights_score_ability', GetPageInsightsScore::class ) + ->addArguments( + [ + 'ri_query', + 'ri_plan', + ] + ); + + $this->getContainer()->addShared( 'ri_abilities_subscriber', AbilitiesSubscriber::class ) + ->addArguments( + [ + 'ri_get_insights_scores_ability', + 'ri_add_page_insights_ability', + 'ri_retest_page_insights_ability', + 'ri_remove_page_insights_ability', + 'ri_get_recommendations_ability', + 'ri_get_page_insights_score_ability', + 'abilities_context', + ] + ); + // Ensure the table is created. $this->getContainer()->get( 'ri_table' ); } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Subscriber.php index 31a3b4d2f..635aba7af 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Subscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/RocketInsights/Subscriber.php @@ -189,6 +189,8 @@ public static function get_subscribed_events(): array { 'rocket_rocket_insights_enabled' => 'maybe_disable_for_reseller_or_non_live', 'rest_api_init' => [ 'register_routes' ], 'wp_ajax_rocket_insight_track_metric_actions' => 'track_metric_actions', + 'rocket_settings_saved_message' => 'update_settings_saved_message', + 'rocket_mixpanel_optin_changed' => 'track_home_after_analytics_optin', ]; } @@ -758,4 +760,42 @@ public function on_update_refresh_metric_data( $new_version, $old_version ) { public function track_metric_actions(): void { $this->controller->track_metric_actions(); } + + /** + * Update the settings saved message to include a note about recommendations needing to be updated. + * + * @param string $message Filtered message to update. + * @return string The additional message to append to the settings saved notice. + */ + public function update_settings_saved_message( string $message ): string { + if ( ! $this->context->is_allowed() ) { + return $message; + } + + $insights_url = add_query_arg( + [ + 'page' => WP_ROCKET_PLUGIN_SLUG . '#rocket_insights', + ], + admin_url( 'options-general.php' ) + ); + + // Moved the space outside the translatable string. + return ' ' . sprintf( + /* translators: %1$s = opening link tag, %2$s = closing link tag */ + esc_html__( 'Your Rocket Insights results aren’t updated yet. %1$sRun a new test%2$s to get the latest recommendations.', 'rocket' ), + '', + '' + ); + } + + /** + * Tracks the home page event after the user opts in to analytics for the first time. + * + * @param bool $status Indicates the current status of the analytics opt-in. + * + * @return void + */ + public function track_home_after_analytics_optin( bool $status ): void { + $this->controller->track_home_after_analytics_optin( $status ); + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Page.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Page.php index cc65379da..55badc6a7 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Page.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Page.php @@ -3,6 +3,7 @@ use WP_Rocket\Engine\Admin\Database\Optimization; use WP_Rocket\Engine\Admin\Beacon\Beacon; +use WP_Rocket\Engine\CDN\RocketCDN\SubscriptionController; use WP_Rocket\Engine\License\API\User; use WP_Rocket\Engine\License\API\UserClient; use WP_Rocket\Engine\Optimization\DelayJS\Admin\SiteList; @@ -109,21 +110,28 @@ class Page extends Abstract_Render { */ private $ri_context; + /** + * Subscription controller instance. + * + * @var SubscriptionController + */ + private $subscription_controller; + /** * Creates an instance of the Page object. * + * @param array $args Array of required arguments to add the admin page. + * @param Settings $settings Instance of Settings class. + * @param Render $render Render instance. + * @param Beacon $beacon Beacon instance. + * @param Optimization $optimize Database optimization instance. + * @param UserClient $user_client User client instance. + * @param SiteList $delayjs_sitelist User client instance. + * @param string $template_path Path to views. + * @param Options_Data $options WP Rocket options instance. + * @param Context $ri_context Rocket Insights context instance. + * @param SubscriptionController $subscription_controller Subscription controller instance. * @since 3.0 - * - * @param array $args Array of required arguments to add the admin page. - * @param Settings $settings Instance of Settings class. - * @param Render $render Render instance. - * @param Beacon $beacon Beacon instance. - * @param Optimization $optimize Database optimization instance. - * @param UserClient $user_client User client instance. - * @param SiteList $delayjs_sitelist User client instance. - * @param string $template_path Path to views. - * @param Options_Data $options WP Rocket options instance. - * @param Context $ri_context Rocket Insights context instance. */ public function __construct( array $args, @@ -135,7 +143,8 @@ public function __construct( SiteList $delayjs_sitelist, $template_path, Options_Data $options, - Context $ri_context + Context $ri_context, + SubscriptionController $subscription_controller ) { parent::__construct( $template_path ); $args = array_merge( @@ -147,17 +156,18 @@ public function __construct( $args ); - $this->slug = $args['slug']; - $this->title = $args['title']; - $this->capability = $args['capability']; - $this->settings = $settings; - $this->render = $render; - $this->beacon = $beacon; - $this->optimize = $optimize; - $this->user_client = $user_client; - $this->delayjs_sitelist = $delayjs_sitelist; - $this->options = $options; - $this->ri_context = $ri_context; + $this->slug = $args['slug']; + $this->title = $args['title']; + $this->capability = $args['capability']; + $this->settings = $settings; + $this->render = $render; + $this->beacon = $beacon; + $this->optimize = $optimize; + $this->user_client = $user_client; + $this->delayjs_sitelist = $delayjs_sitelist; + $this->options = $options; + $this->ri_context = $ri_context; + $this->subscription_controller = $subscription_controller; } /** @@ -212,12 +222,12 @@ public function render_page() { if ( $rocket_valid_key ) { $this->dashboard_section(); $this->rocket_insights_section(); + $this->cdn_section(); $this->assets_section(); $this->media_section(); $this->preload_section(); $this->advanced_cache_section(); $this->database_section(); - $this->cdn_section(); $this->heartbeat_section(); $this->addons_section(); $this->cloudflare_section(); @@ -238,6 +248,9 @@ public function render_page() { [ 'slug' => $this->slug, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. 'btn_submit_text' => $btn_submit_text, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + 'tools_page' => [ + 'mcp_server_beacon' => $this->beacon->get_suggest( 'mcp_server' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + ], ] ); } @@ -450,6 +463,7 @@ private function dashboard_section() { 'faq' => $this->beacon->get_suggest( 'faq' ), 'customer_data' => $this->customer_data(), 'rocket_insights_enabled' => $this->ri_context->is_allowed(), + 'is_rocketcdn_paid_user' => $this->subscription_controller->is_paid(), ] ); } @@ -1509,46 +1523,54 @@ private function cdn_section() { $this->settings->add_page_section( 'page_cdn', [ - 'title' => __( 'CDN', 'rocket' ), - 'menu_description' => __( 'Integrate your CDN', 'rocket' ), + 'title' => __( 'Content Delivery', 'rocket' ), + 'menu_description' => __( 'Speed up page delivery', 'rocket' ), + /** + * Filters the badge label displayed on the Content Delivery settings tab. + * + * Return an empty string to suppress the badge (e.g. for existing paid subscribers). + * + * @param string $badge Badge label. Default 'NEW'. + * @return string + */ + 'badge' => wpm_apply_filters_typed( 'string', 'rocket_cdn_tab_badge', __( 'NEW', 'rocket' ) ), ] ); - $cdn_beacon = $this->beacon->get_suggest( 'cdn' ); - $cdn_exclude_beacon = $this->beacon->get_suggest( 'exclude_cdn' ); - - $this->settings->add_settings_sections( - [ - 'cdn_section' => [ - 'title' => __( 'CDN', 'rocket' ), - 'type' => 'fields_container', - 'description' => __( 'All URLs of static files (CSS, JS, images) will be rewritten to the CNAME(s) you provide.', 'rocket' ) . '
' . sprintf( - // translators: %1$s = opening link tag, %2$s = closing link tag. - __( 'Not required for services like Cloudflare and Sucuri. Please see our available %1$sAdd-ons%2$s.', 'rocket' ), - '', - '' - ) . '', - 'help' => [ - 'id' => $this->beacon->get_suggest( 'cdn_section' ), - 'url' => $cdn_beacon['url'], - ], - 'page' => 'page_cdn', + $cdn_beacon = $this->beacon->get_suggest( 'own_cdn' ); + + $cdn_sections = [ + 'cdn_section' => [ + 'title' => __( 'Your CDN', 'rocket' ), + 'type' => 'your_own_cdn', + 'help' => [ + 'id' => $cdn_beacon['id'], + 'url' => $cdn_beacon['url'], + ], + 'page' => 'page_cdn', + 'class' => [ 'your-own-cdn' ], + 'status_indicator' => [ + // Read raw options to avoid values filtered through pre_get_rocket_option_* when RocketCDN is active. + // This prevents incorrect BYOCDN status display when CDN is enabled but no CNAMEs are configured. + 'is_active' => ! empty( ( (array) $this->options->get_options() )['cdn_cnames'] ?? [] ), + 'status_text' => __( 'Your CDN is active on your website', 'rocket' ), + 'paused_status_text' => __( 'RocketCDN is paused', 'rocket' ), + 'hide_pause_btn' => true, ], - 'cnames_section' => [ - 'type' => 'nocontainer', - 'page' => 'page_cdn', - ], - 'exclude_cdn_section' => [ - 'title' => __( 'Exclude files from CDN', 'rocket' ), - 'type' => 'fields_container', - 'help' => [ - 'id' => $cdn_exclude_beacon['id'], - 'url' => $cdn_exclude_beacon['url'], - ], - 'page' => 'page_cdn', - ], - ] - ); + ], + ]; + + /** + * Filters the CDN driver sections. + * + * Allows adding or modifying sections for different CDN drivers + * (Built-in CDN, RocketCDN Unlimited, Your own CDN). + * + * @param array $cdn_driver_sections CDN driver sections data. + */ + $cdn_sections = wpm_apply_filters_typed( 'array', 'rocket_cdn_driver_sections', $cdn_sections ); + + $this->settings->add_settings_sections( $cdn_sections ); $maybe_display_cdn_helper = ''; @@ -1588,7 +1610,7 @@ private function cdn_section() { apply_filters( 'rocket_cdn_settings_fields', [ - 'cdn' => [ + 'cdn' => [ 'type' => 'checkbox', 'label' => __( 'Enable Content Delivery Network', 'rocket' ), 'helper' => $maybe_display_cdn_helper, @@ -1596,24 +1618,16 @@ private function cdn_section() { 'page' => 'page_cdn', 'default' => 0, 'sanitize_callback' => 'sanitize_checkbox', - ], - 'cdn_cnames' => [ - 'type' => 'cnames', - 'label' => __( 'CDN CNAME(s)', 'rocket' ), - 'description' => __( 'Specify the CNAME(s) below', 'rocket' ), - 'default' => [], - 'section' => 'cnames_section', - 'page' => 'page_cdn', - ], - 'cdn_reject_files' => [ - 'type' => 'textarea', - 'description' => __( 'Specify URL(s) of files that should not get served via CDN (one per line).', 'rocket' ), - 'helper' => __( 'The domain part of the URL will be stripped automatically.
Use (.*) wildcards to exclude all files of a given file type located at a specific path.', 'rocket' ), - 'placeholder' => '/wp-content/plugins/some-plugins/(.*).css', - 'section' => 'exclude_cdn_section', - 'page' => 'page_cdn', - 'default' => [], - 'sanitize_callback' => 'sanitize_textarea', + 'container_class' => [ 'wpr-isHidden' ], + ], + 'cdn_cnames' => [ + 'type' => 'cnames', + 'label' => __( 'CDN CNAME(s)', 'rocket' ), + 'description' => __( 'Specify the CNAME(s) below', 'rocket' ), + 'default' => [], + 'section' => 'cdn_section', + 'page' => 'page_cdn', + 'container_class' => [ 'your-own-cdn' ], ], ] ) diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Render.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Render.php index 9ee344c4e..87f0f1882 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Render.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Render.php @@ -209,10 +209,12 @@ public function render_tutorials_section() { /** * Render the tools page section. * + * @param array $data Data to pass to the template. + * * @since 3.0 */ - public function render_tools_section() { - echo $this->generate( 'page-sections/tools' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + public function render_tools_section( $data = [] ) { + echo $this->generate( 'page-sections/tools', $data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. } /** @@ -323,6 +325,54 @@ public function addons_container( $args ) { echo $this->generate( 'sections/addons-container', $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. } + /** + * Displays the Your Own CDN section template. + * + * This is a section for configuring your own CDN settings. + * It includes the PAUSE CDN button. + * + * @param array $args Array of arguments to populate the template. + */ + public function your_own_cdn( $args ) { + echo $this->generate( 'sections/cdn/your-own-cdn', $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + + /** + * Displays the RocketCDN Free section template. + * + * @param array $args Array of arguments to populate the template. + */ + public function rocketcdn_free( $args ) { + echo $this->generate( 'sections/cdn/rocketcdn-free', $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + + /** + * Displays the RocketCDN Paid section template. + * + * @param array $args Array of arguments to populate the template. + */ + public function rocketcdn_paid( $args ) { + echo $this->generate( 'sections/cdn/rocketcdn-paid', $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + + /** + * Displays the purge CDN cache section template. + * + * @param array $args Array of arguments to populate the template. + */ + public function purge_cdn_cache_section( $args ) { + echo $this->generate( 'sections/cdn/purge-cdn-cache', $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + + /** + * Displays the no container with title section template. + * + * @param array $args Array of arguments to populate the template. + */ + public function nocontainer_with_title( $args ) { + echo $this->generate( 'sections/nocontainer-with-title', $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + /** * Displays the text field template. * @@ -364,6 +414,23 @@ public function textarea( $args ) { echo $this->generate( 'fields/textarea', $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. } + /** + * Displays the textarea with container field template. + * + * @since 3.22 + * + * @param array $args Array of arguments to populate the template. + */ + public function textarea_with_container( $args ) { + if ( is_array( $args['value'] ) ) { + $args['value'] = implode( "\n", $args['value'] ); + } + + $args['value'] = empty( $args['value'] ) ? '' : $args['value']; + + echo $this->generate( 'fields/textarea-with-container', $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + /** * Displays the sliding checkbox field template. * diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/ServiceProvider.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/ServiceProvider.php index 1f0808b51..f3047305a 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/ServiceProvider.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/ServiceProvider.php @@ -74,6 +74,7 @@ public function register(): void { 'template_path', 'options', 'ri_context', + 'rocketcdn_subscription_controller', ] ); $this->getContainer()->addShared( 'settings_page_subscriber', Subscriber::class ) diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Settings.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Settings.php index f590f59dd..cce8f67e1 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Settings.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Settings.php @@ -385,6 +385,12 @@ public function sanitize_callback( $input ) { $input['cdn_zone'] = array_values( $input['cdn_zone'] ); } + if ( ! empty( $input['cdn_reject_pages'] ) ) { + $input['cdn_reject_pages'] = rocket_sanitize_textarea_field( 'cdn_reject_pages', $input['cdn_reject_pages'] ); + } else { + $input['cdn_reject_pages'] = []; + } + // Option : Files to exclude from the CDN process. if ( ! empty( $input['cdn_reject_files'] ) ) { $input['cdn_reject_files'] = rocket_sanitize_textarea_field( 'cdn_reject_files', $input['cdn_reject_files'] ); @@ -421,7 +427,16 @@ function ( $error ) { ); if ( ! $notices ) { - add_settings_error( 'general', 'settings_updated', __( 'Settings saved.', 'rocket' ), 'updated' ); + $message = __( 'Settings saved.', 'rocket' ); + + /** + * Filters the appended message to the "Settings saved." admin notice. + * + * @param string $appended_message The appended message. + */ + $message .= wpm_apply_filters_typed( 'string', 'rocket_settings_saved_message', '' ); + + add_settings_error( 'general', 'settings_updated', $message, 'updated' ); } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Subscriber.php index c3b903eb4..660bba506 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Subscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Admin/Settings/Subscriber.php @@ -140,8 +140,9 @@ public function add_admin_page() { * @since 3.7.4 * * @param string $menu_title The text to be used for the menu. + * @param string $context Filter context, adminmenu or adminbar. */ - apply_filters( 'rocket_menu_title', $this->page->get_title() ), + wpm_apply_filters_typed( 'string', 'rocket_menu_title', $this->page->get_title(), 'adminmenu' ), $this->page->get_capability(), $this->page->get_slug(), [ $this->page, 'render_page' ] @@ -199,7 +200,8 @@ public function add_menu_tools_page( $navigation ) { $navigation['tools'] = [ 'id' => 'tools', 'title' => __( 'Tools', 'rocket' ), - 'menu_description' => __( 'Import, Export, Rollback', 'rocket' ), + 'menu_description' => __( 'Export, import, rollback, and set up MCP', 'rocket' ), + 'badge' => __( 'NEW', 'rocket' ), ]; return $navigation; diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/Admin/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/Admin/Subscriber.php index 281259b49..5189d463c 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/Admin/Subscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/Admin/Subscriber.php @@ -4,6 +4,7 @@ namespace WP_Rocket\Engine\CDN\Admin; use WP_Rocket\Event_Management\Subscriber_Interface; +use WP_Rocket\Engine\CDN\Context; class Subscriber implements Subscriber_Interface { /** @@ -13,7 +14,9 @@ class Subscriber implements Subscriber_Interface { */ public static function get_subscribed_events() { return [ - 'rocket_meta_boxes_fields' => [ 'add_meta_box', 9 ], + 'rocket_meta_boxes_fields' => [ 'add_meta_box', 9 ], + 'rocket_hidden_settings_fields' => [ 'add_cdn_type', 10 ], + 'rocket_input_sanitize' => 'sanitize_cdn_type_option', ]; } @@ -25,8 +28,52 @@ public static function get_subscribed_events() { * @return string[] */ public function add_meta_box( array $fields ) { - $fields['cdn'] = __( 'CDN', 'rocket' ); + /* + * Hiding the CDN option in the metabox for now. + * We will revisit this when handling CDN status for different pages/posts. + * + * $fields['cdn'] = __( 'CDN', 'rocket' ); + */ return $fields; } + + /** + * Add CDN to the list of hidden settings fields. + * + * @param string[] $fields Hidden settings fields. + * + * @return string[] + */ + public function add_cdn_type( array $fields ) { + $fields[] = 'cdn_type'; + + return $fields; + } + + /** + * Sanitize the CDN type option. + * + * @param array $input Input array. + * + * @return array + */ + public function sanitize_cdn_type_option( array $input ) { + // Set default value if empty. + if ( empty( $input['cdn_type'] ) ) { + $input['cdn_type'] = Context::ROCKETCDN_TYPE; + } + + $allowed_drivers = [ Context::ROCKETCDN_TYPE, Context::BYOCDN_TYPE ]; + + // Validate that the value is one of the allowed drivers. + if ( ! in_array( $input['cdn_type'], $allowed_drivers, true ) ) { + $input['cdn_type'] = Context::ROCKETCDN_TYPE; + } + + // Sanitize the value. + $input['cdn_type'] = sanitize_text_field( $input['cdn_type'] ); + + return $input; + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/CDN.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/CDN.php index ba864553d..dec12e2a6 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/CDN.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/CDN.php @@ -5,6 +5,7 @@ use WP_Rocket\Admin\Options_Data; use WP_Rocket\Engine\Support\CommentTrait; +use WP_Rocket\Engine\CDN\CNAMEValidator; /** * CDN class @@ -28,13 +29,31 @@ class CDN { */ private $home_host; + /** + * CNAME Validator instance + * + * @var CNAMEValidator + */ + private $cname_validator; + + /** + * Context instance. + * + * @var Context + */ + private $context; + /** * Constructor * - * @param Options_Data $options WP Rocket Options instance. + * @param Options_Data $options WP Rocket Options instance. + * @param CNAMEValidator $cname_validator CNAME Validator instance. + * @param Context $context Context instance. */ - public function __construct( Options_Data $options ) { - $this->options = $options; + public function __construct( Options_Data $options, CNAMEValidator $cname_validator, Context $context ) { + $this->options = $options; + $this->cname_validator = $cname_validator; + $this->context = $context; } /** @@ -232,6 +251,16 @@ public function get_cdn_urls( $zones = [ 'all' ] ) { */ $hosts = (array) apply_filters( 'rocket_cdn_cnames', $hosts, $zones ); $hosts = array_filter( $hosts ); + + if ( ! $this->context->is_rocketcdn() ) { + $hosts = array_filter( + $hosts, + function ( $url ) { + return $this->cname_validator->is_valid( rocket_add_url_protocol( $url ) ); + } + ); + } + $hosts = array_flip( array_flip( $hosts ) ); $hosts = array_values( $hosts ); diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/CNAMEValidator.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/CNAMEValidator.php new file mode 100644 index 000000000..904c0178d --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/CNAMEValidator.php @@ -0,0 +1,82 @@ +build_check_url( $cname_url ); + $response = wp_remote_head( $check_url, [ 'timeout' => 5 ] ); + + if ( is_wp_error( $response ) ) { + set_transient( $transient_key, 0, DAY_IN_SECONDS ); + return false; + } + + $code = isset( $response['response']['code'] ) ? (int) $response['response']['code'] : 0; // @phpstan-ignore-line - code may be absent in certain HTTP transport error states + $valid = 404 !== $code ? 1 : 0; + + set_transient( $transient_key, $valid, DAY_IN_SECONDS ); + + return (bool) $valid; + } + + /** + * Deletes cached validation results for the given CNAME URLs. + * + * Called when CDN settings are saved so stale cached results are not used + * after the user updates their CNAME list. + * + * @since 3.22.0.3 + * + * @param array $cname_urls List of CNAME URLs whose transients should be deleted. + * @return void + */ + public function clear_validation_cache( array $cname_urls ): void { + foreach ( $cname_urls as $url ) { + delete_transient( 'rocket_cname_valid_' . md5( rocket_add_url_protocol( $url ) ) ); + } + } + + /** + * Builds the URL to probe by replacing the site host with the CDN host in the + * active theme's stylesheet URI. + * + * Using style.css guarantees the file exists on any WordPress install and + * that the check works with any CDN provider — not just RocketCDN. + * + * @since 3.22.0.3 + * + * @param string $cname_url CDN URL. + * @return string + */ + private function build_check_url( string $cname_url ): string { + $stylesheet_path = wp_parse_url( get_stylesheet_uri(), PHP_URL_PATH ) ?? ''; + $cname_host = wp_parse_url( rocket_add_url_protocol( $cname_url ), PHP_URL_HOST ) ?? ''; + + return 'https://' . $cname_host . $stylesheet_path; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/Cache.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/Cache.php new file mode 100644 index 000000000..517abafea --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/Cache.php @@ -0,0 +1,52 @@ +query = $query; + } + + /** + * Clear all site's cache. + * + * @return void + */ + public function clear_all_cache(): void { + rocket_clean_domain(); + } + + /** + * Clear rocketCDN free pages cache. + * + * @return void + */ + public function clear_rocketcdn_free_pages_cache(): void { + $pages = $this->query->get_all(); + + foreach ( $pages as $page ) { + if ( empty( $page->url ) ) { + continue; + } + + Utils::clean_url( $page->url ); + } + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/Context.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/Context.php new file mode 100644 index 000000000..e502100a0 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/Context.php @@ -0,0 +1,116 @@ +options = $options; + $this->subscription_controller = $subscription_controller; + } + + /** + * Gets the currently active CDN driver. + * + * @return string + */ + public function get_driver(): string { + $cdn_type = $this->get_cdn_type(); + + if ( self::ROCKETCDN_TYPE !== $cdn_type ) { + return self::BYOCDN_TYPE; + } + + return $this->rocketcdn_resolver(); + } + + /** + * Get CDN Type. + * + * @return string + */ + public function get_cdn_type(): string { + return (string) $this->options->get( 'cdn_type', self::ROCKETCDN_TYPE ); + } + + /** + * Is rocketcdn tab is selected. + * + * @return bool + */ + public function is_rocketcdn() { + return self::ROCKETCDN_TYPE === $this->get_cdn_type(); + } + + /** + * Gets the free page limit for the RocketCDN free tier. + * + * @return int + */ + public function get_free_page_limit(): int { + return 3; + } + + /** + * Resolves RocketCDN to either free or paid type. + * + * @return string + */ + private function rocketcdn_resolver(): string { + if ( ! $this->subscription_controller->has_active_subscription() && $this->subscription_controller->is_cancelled_outside_grace_period() ) { + return self::ROCKETCDN_TYPE; + } + + if ( $this->subscription_controller->is_paid() ) { + return self::ROCKETCDN_PAID_TYPE; + } + + return self::ROCKETCDN_FREE_TYPE; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/Drivers/Custom.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/Drivers/Custom.php new file mode 100644 index 000000000..529ca374a --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/Drivers/Custom.php @@ -0,0 +1,16 @@ +container = $container; + $this->context = $context; + } + + /** + * Create appropriate driver based on current context + * + * @return DriverInterface|null Driver container ID. + */ + public function create(): ?DriverInterface { + $active_driver = $this->context->get_driver(); + + switch ( $active_driver ) { + case Context::ROCKETCDN_FREE_TYPE: + return $this->container->get( 'cdn_driver_free' ); + + case Context::ROCKETCDN_PAID_TYPE: + return $this->container->get( 'cdn_driver_paid' ); + + case Context::BYOCDN_TYPE: + return $this->container->get( 'cdn_driver_byocdn' ); + + default: + return null; + } + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/Drivers/DriverInterface.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/Drivers/DriverInterface.php new file mode 100644 index 000000000..940aa7c28 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/Drivers/DriverInterface.php @@ -0,0 +1,15 @@ +query = $query; + } + + /** + * Should rewrite url or not. + * + * @param string $url Page Url to check. + * @return bool + */ + public function should_rewrite_url( string $url ): bool { + return $this->query->is_url_found( $url ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/Drivers/RocketCDNPaid.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/Drivers/RocketCDNPaid.php new file mode 100644 index 000000000..1fe534f05 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/Drivers/RocketCDNPaid.php @@ -0,0 +1,119 @@ +options = $options; + } + + /** + * Should rewrite url or not. + * + * @param string $url Page Url to check. + * @return bool + */ + public function should_rewrite_url( string $url ): bool { + // Get excluded pages from options. + $excluded_pages = $this->get_excluded_pages(); + + // Check if URL is in excluded list. + foreach ( $excluded_pages as $excluded_pattern ) { + $normalized_pattern = $this->normalize_pattern( $excluded_pattern ); + if ( $this->matches_pattern( $url, $normalized_pattern ) ) { + return false; // This page is excluded, don't rewrite. + } + } + + return true; + } + + /** + * Get excluded pages from options + * + * @return array + */ + private function get_excluded_pages(): array { + $excluded = $this->options->get( 'cdn_reject_pages', [] ); + return is_array( $excluded ) ? $excluded : []; + } + + /** + * Check if URL matches exclusion pattern + * + * @param string $url URL to check. + * @param string $pattern Pattern to match against. + * @return bool + */ + private function matches_pattern( string $url, string $pattern ): bool { + if ( empty( $pattern ) ) { + return false; // Empty pattern should not match anything. + } + + return ! empty( + $this->find( + preg_quote( $pattern, '/' ), + $url + ) + ); + } + + /** + * Normalize pattern for matching + * + * Handles: + * 1. Trailing slashes (e.g., /category/ => /category) + * 2. Non-Latin characters (e.g., категории => URL-encoded) + * 3. Inconsistent URL encoding + * + * @param string $pattern Pattern to normalize. + * @return string Normalized pattern. + */ + private function normalize_pattern( string $pattern ): string { + $pattern = untrailingslashit( $pattern ); + + // This ensures "категории" becomes "%d0%ba%d0%b0%d1%82%d0%b5%d0%b3%d0%be%d1%80%d0%b8%d0%b8". + $pattern = $this->encode_non_latin_chars( $pattern ); + + return $pattern; + } + + /** + * URL-encode non-Latin characters in pattern + * + * Converts UTF-8 characters (like Cyrillic, Arabic, CJK) to URL-encoded form. + * This matches how WordPress and browsers encode URLs. + * + * @param string $pattern Pattern with possible non-Latin chars. + * @return string Pattern with non-Latin chars URL-encoded. + */ + private function encode_non_latin_chars( string $pattern ): string { + if ( empty( $pattern ) ) { + return ''; + } + // Use rawurlencode to match browser URL encoding. + // But preserve the path structure (don't encode /). + $parts = explode( '/', $pattern ); + $encoded_parts = array_map( 'rawurlencode', $parts ); + + return implode( '/', $encoded_parts ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/Render/Controller.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/Render/Controller.php new file mode 100644 index 000000000..51c024690 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/Render/Controller.php @@ -0,0 +1,963 @@ +beacon = $beacon; + $this->context = $context; + $this->options = $options; + $this->cdn_query = $cdn_query; + $this->subscription_controller = $subscription_controller; + $this->user = $user; + $this->cache = $cache; + } + + /** + * Adds the RocketCDN Paid section to the CDN driver sections. + * + * @since 3.22 + * + * @param array $sections CDN driver sections. + * + * @return array + */ + public function add_rocketcdn_paid_section( array $sections ): array { + if ( Context::ROCKETCDN_PAID_TYPE !== $this->context->get_driver() ) { + return $sections; + } + + $cdn_beacon = $this->beacon->get_suggest( 'rocketcdn' ); + + $status_indicator_data = $this->get_status_indicator_data( 1, $this->is_subscription_loading(), false ); + $status_indicator_data['class'] .= ' wpr-cdn-status-pronounced rocketcdn'; + + $sections['rocketcdn_paid_section'] = [ + 'title' => __( 'RocketCDN', 'rocket' ), + 'type' => 'rocketcdn_paid', + 'class' => [ 'rocketcdn' ], + 'page' => 'page_cdn', + 'help' => [ + 'id' => $cdn_beacon['id'], + 'url' => $cdn_beacon['url'], + ], + 'status_indicator' => $status_indicator_data, + ]; + + return $sections; + } + + /** + * Adds the RocketCDN Free section to the CDN driver sections. + * + * @since 3.22 + * + * @param array $sections CDN driver sections. + * + * @return array + */ + public function add_rocketcdn_free_section( array $sections ): array { + if ( Context::ROCKETCDN_PAID_TYPE === $this->context->get_driver() ) { + return $sections; + } + + $classes = [ 'rocketcdn' ]; + $is_subscription_loading = $this->is_subscription_loading(); + $this->page_count = count( $this->get_items() ); + $cta_heading = sprintf( + // translators: %1$s = opening strong tag, %2$s = closing strong tag. + __( '%1$sWant full-site Content Delivery coverage?%2$s Extend RocketCDN to all your pages with unlimited bandwidth.', 'rocket' ), + '', + '' + ); + + $cta_heading_max_limit = sprintf( + // translators: %1$s = opening strong tag, %2$s = number of pages allowed, %3$s = closing strong tag. + __( '%1$sNice work! You’re using RocketCDN on %2$s key pages!%3$s ', 'rocket' ), + '', + $this->context->get_free_page_limit(), + '' + ); + + $cta_description = __( 'Upgrade to RocketCDN Pro to extend faster content delivery across all your pages from 100+ edge locations worldwide.', 'rocket' ); + + $limit_reached = $this->page_count >= $this->context->get_free_page_limit(); + + // Disable input field and buttons when 3 pages are added. + if ( $limit_reached || $is_subscription_loading ) { + $classes[] = 'wpr-cdn-built-in--disabled'; + } + + if ( $this->is_cdn_paused() ) { + $classes[] = 'wpr-cdn-built-in--paused'; + } + + $cdn_beacon = $this->beacon->get_suggest( 'rocketcdn_free' ); + + $sections['rocketcdn_free_section'] = [ + 'title' => __( 'RocketCDN', 'rocket' ), + 'type' => 'rocketcdn_free', + 'class' => $classes, + 'page' => 'page_cdn', + 'help' => [ + 'id' => $cdn_beacon['id'], + 'url' => $cdn_beacon['url'], + ], + 'status_indicator' => $this->get_status_indicator_data( $this->page_count, $is_subscription_loading ), + 'cta_data' => [ + 'cta_heading' => $cta_heading, + 'cta_heading_max_limit' => $cta_heading_max_limit, + 'cta_description' => $cta_description, + 'is_visible' => $this->page_count > 0 && ! $this->user->is_reseller_account(), + 'is_expanded' => $limit_reached, + 'limit_reached' => $limit_reached, + ], + 'limit_reached' => $limit_reached, + ]; + + return $sections; + } + + /** + * Adds the Purge CDN Cache section to the CDN driver sections. + * + * @since 3.22 + * + * @param array $sections CDN driver sections. + * + * @return array + */ + public function add_purge_cdn_cache_section( array $sections ): array { + $cdn_beacon = $this->beacon->get_suggest( 'purge_cdn' ); + + if ( ! empty( $_SERVER['REQUEST_URI'] ) ) { + $referer_url = filter_var( wp_unslash( $_SERVER['REQUEST_URI'] ), FILTER_SANITIZE_URL ); + } + $classes = [ 'rocketcdn', 'rocketcdn-shared-section' ]; + + $sections['purge_cdn_cache_section'] = [ + // translators: %s is the CDN driver, wrapped in a span for JS targeting. + 'title' => sprintf( __( 'Purge %s Cache', 'rocket' ), 'RocketCDN' ), + 'type' => 'purge_cdn_cache_section', + 'description' => sprintf( + // translators: %s = CDN driver, wrapped in a span for JS targeting. + __( 'Purges %s cached resources for your website.', 'rocket' ), + 'RocketCDN' + ), + 'purge_url' => Utils::get_nonce_post_url( 'rocket_purge_rocketcdn' ), + 'page' => 'page_cdn', + 'help' => [ + 'id' => $cdn_beacon['id'], + 'url' => $cdn_beacon['url'], + ], + 'class' => $classes, + ]; + + if ( $this->context->is_rocketcdn() && $this->should_disable_element_for_rocketcdn() ) { + $sections['purge_cdn_cache_section']['class'][] = 'wpr-cdn-disabled'; + } + + return $sections; + } + + /** + * Adds the Exclude CDN section to the CDN driver sections. + * + * @since 3.22 + * + * @param array $sections CDN driver sections. + * + * @return array + */ + public function add_exclude_cdn_section( array $sections ): array { + $cdn_exclude_beacon = $this->beacon->get_suggest( 'exclude_cdn' ); + $rocketcdn_exclude_beacon = $this->beacon->get_suggest( 'exclude_cdn_rocketcdn' ); + + $is_rocketcdn = $this->context->is_rocketcdn(); + $initial_url = $is_rocketcdn ? $rocketcdn_exclude_beacon['url'] : $cdn_exclude_beacon['url']; + $initial_id = $is_rocketcdn ? $rocketcdn_exclude_beacon['id'] : $cdn_exclude_beacon['id']; + + $sections['exclude_cdn_section'] = [ + // translators: %s is the CDN driver, wrapped in a span for JS targeting. + 'title' => sprintf( __( 'Manage %s Exclusions', 'rocket' ), 'RocketCDN' ), + 'type' => 'nocontainer_with_title', + 'help' => [ + 'id' => $initial_id, + 'url' => $initial_url, + 'rocketcdn_url' => $rocketcdn_exclude_beacon['url'], + 'rocketcdn_id' => $rocketcdn_exclude_beacon['id'], + 'other_cdn_url' => $cdn_exclude_beacon['url'], + 'other_cdn_id' => $cdn_exclude_beacon['id'], + ], + 'page' => 'page_cdn', + 'class' => [ 'cdn-shared-section' ], + ]; + + if ( $this->context->is_rocketcdn() && $this->should_disable_element_for_rocketcdn() ) { + $sections['exclude_cdn_section']['class'][] = 'wpr-cdn-disabled'; + } + + return $sections; + } + + /** + * Adds exclusion fields for CDN to the settings fields array. + * + * @since 3.22 + * + * @param array $fields Existing settings fields array. + * + * @return array Modified fields array with CDN exclusion fields appended. + */ + public function add_exclusions_fields( array $fields ): array { + $exclusion_fields = []; + + if ( Context::ROCKETCDN_PAID_TYPE === $this->context->get_driver() ) { + $exclusion_fields['cdn_reject_pages'] = [ + 'type' => 'textarea_with_container', + 'label' => __( 'Exclude Pages from CDN', 'rocket' ), + 'description' => __( 'Specify URL(s) of pages that should not get served via CDN (one per line).', 'rocket' ), + 'helper' => __( 'Use (.*) wildcards to exclude all files of a given file type located at a specific path.', 'rocket' ), + 'placeholder' => '/path/to/page', + 'section' => 'exclude_cdn_section', + 'page' => 'page_cdn', + 'default' => [], + 'class' => [ + 'wpr-cdn-exclusions', + 'rocketcdn', + 'rocketcdn-shared-section', + ], + 'sanitize_callback' => 'sanitize_textarea', + ]; + } + + $exclusion_fields['cdn_reject_files'] = [ + 'type' => 'textarea_with_container', + 'label' => __( 'Exclude Files from CDN', 'rocket' ), + 'description' => __( 'Specify URL(s) of files that should not get served via CDN (one per line).', 'rocket' ), + 'helper' => __( 'The domain part of the URL will be stripped automatically.
Use (.*) wildcards to exclude all files of a given file type located at a specific path.', 'rocket' ), + 'placeholder' => '/wp-content/plugins/some-plugins/(.*).css', + 'section' => 'exclude_cdn_section', + 'page' => 'page_cdn', + 'default' => [], + 'class' => [ 'cdn-shared-section', 'wpr-cdn-exclusions' ], + 'sanitize_callback' => 'sanitize_textarea', + ]; + + // Disable exclusions fields when subscription is processing. + foreach ( array_keys( $exclusion_fields ) as $field ) { + if ( $this->context->is_rocketcdn() && $this->should_disable_element_for_rocketcdn() ) { + $exclusion_fields[ $field ]['class'][] = 'wpr-cdn-disabled'; + $exclusion_fields[ $field ]['attributes'] = [ + 'disabled' => 'disabled', + ]; + } + } + + return array_merge( $fields, $exclusion_fields ); + } + + /** + * Renders the built-in CDN page list table. + * + * Builds row data and delegates to the table-list generic partial. + * + * @since 3.22 + * + * @return void + */ + public function render_built_in_page_list(): void { + if ( 0 === $this->page_count ) { + return; + } + + echo $this->get_built_in_page_list(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + + /** + * Gets the status indicator HTML for the RocketCDN free section. + * + * @param int $pages_count Number of pages currently using RocketCDN. + * + * @return string The rendered status indicator HTML. + */ + public function get_status_indicator_html( int $pages_count ): string { + $data = $this->get_status_indicator_data( $pages_count, $this->is_subscription_loading() ); + + return $this->render_parts_with_data( 'cdn/cdn-status-indicator', $data, true ); + } + + /** + * Gets the built-in page list for the CDN settings. + * + * Generates a partial table list view using the 'rocket_cdn_free_page_rows' + * hook to populate the rows of the table. + * + * @return string The rendered HTML string of the built-in page list table. + */ + public function get_built_in_page_list(): string { + $table_data = [ + 'rows_hook' => 'rocket_cdn_free_page_rows', + ]; + + return $this->generate( 'partials/table-list', $table_data ); + } + + /** + * Renders the built-in CDN page list rows. + * + * Builds each row and renders them via the table-list-row generic partial. + * + * @since 3.22 + * + * @return void + */ + public function render_built_in_page_rows(): void { + $pages = $this->get_items(); + + foreach ( $pages as $page ) { + echo $this->generate( 'partials/table-list-row', $this->build_page_row( $page ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + } + + /** + * Renders the RocketCDN CTA banner. + * + * @param bool $display Whether to display the CTA. Default true. + * + * @return bool + * @since 3.22 + */ + public function maybe_display_rocketcdn_cta( bool $display = true ): bool { + if ( ! $display ) { + return false; + } + + if ( $this->is_subscription_loading() ) { + return false; + } + + if ( $this->user->is_reseller_account() ) { + return false; + } + + return true; + } + + /** + * Removes the "NEW" badge from the Content Delivery tab for existing paid RocketCDN subscribers. + * + * Paid users already know RocketCDN — the badge is only relevant for users + * discovering the service for the first time via the free tier. + * + * @since 3.22 + * + * @param string $badge Current badge label. + * + * @return string Empty string for paid subscribers, original badge otherwise. + */ + public function maybe_hide_cdn_tab_badge( string $badge ): string { + if ( $this->subscription_controller->is_paid() ) { + return ''; + } + + return $badge; + } + + /** + * Synchronizes forced pause state and emits tracking events on transitions. + * + * @param \WP_Screen $screen Current admin screen. + * + * @return void + */ + public function maybe_sync_forced_pause_tracking_state( \WP_Screen $screen ): void { + if ( 'settings_page_wprocket' !== $screen->id || ! current_user_can( 'rocket_manage_options' ) ) { + return; + } + $is_forced = $this->is_forced_paused(); + $stored = $this->get_forced_pause_tracking(); + $was_forced = (bool) ( $stored['tracking'] ?? false ); + + // Bail out when state hasn't changed to avoid unnecessary option updates and tracking events. + if ( $is_forced === $was_forced ) { + return; + } + + $stored['tracking'] = $is_forced; + update_option( self::FORCED_PAUSE_TRACKING_OPTION, $stored, false ); + + // Clear whole cache. + $this->cache->clear_all_cache(); + + /** + * Fires when the CDN state changes between paused and active. + * + * @param string $new_state The new state of the CDN: 'paused' or 'active'. + * @param string $reason 'wpr_forced_pause' when pausing, 'wpr_forced_resume' when resuming. + * @since 3.22 + */ + do_action( + 'rocket_rocketcdn_cdn_state_changed', + $is_forced ? 'paused' : 'active', + $is_forced ? 'wpr_forced_pause' : 'wpr_forced_resume' + ); + } + + /** + * Renders the CDN driver tabs. + * + * @since 3.22 + * + * @return void + */ + public function render_cdn_driver_tabs(): void { + + $driver = $this->context->get_driver(); + $data = [ + 'disable_other_cdn' => Context::ROCKETCDN_PAID_TYPE === $driver, + 'cdn_type' => $this->options->get( 'cdn_type', Context::ROCKETCDN_TYPE ), + 'display_tabs' => ! $this->is_cdn_type_filtered(), + 'rocketcdn_mode' => Context::ROCKETCDN_PAID_TYPE === $driver ? 'RocketCDN Paid' : 'RocketCDN Free', + ]; + + echo $this->generate( 'partials/cdn/cdn-driver-tabs', $data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + + /** + * Renders the expired WP Rocket license notice. + * + * @since 3.22 + * + * @return void + */ + public function render_expired_wpr_licence_notice(): void { + if ( ! $this->should_display_licence_expired_notice() ) { + return; + } + + $data = [ + 'renewal_url' => $this->user->get_renewal_url(), + 'is_reseller' => $this->user->is_reseller_account(), + ]; + + echo $this->generate( 'partials/cdn/wpr-licence-expired-notice', $data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + + /** + * Renders the reseller-banned notice. + * + * @since 3.23.1 + * + * @return void + */ + public function render_reseller_banned_notice(): void { + if ( ! $this->user->is_reseller_license_banned() ) { + return; + } + + echo $this->generate( 'partials/cdn/wpr-licence-banned-notice', [] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + } + + /** + * Filter the CDN option to pause CDN for users with inactive subscriptions. + * + * If the user has an inactive subscription, this will force the CDN option to be false, + * effectively pausing CDN functionality until they renew or reactivate their subscription. + * + * @since 3.22 + * + * @param mixed $cdn Current value of the CDN option. + * + * @return mixed False if the user has an inactive subscription, original value otherwise. + */ + public function maybe_pause_cdn_for_inactive_subscription( $cdn ) { + // Bail early if not on RocketCDN driver to avoid unnecessary checks. + if ( ! $this->context->is_rocketcdn() ) { + return $cdn; + } + + if ( $this->is_forced_paused() ) { + $stored = $this->get_forced_pause_tracking(); + + // Prevent unnecessary DB write on every request. + if ( empty( $stored['persistent'] ) ) { + $stored['persistent'] = true; + update_option( self::FORCED_PAUSE_TRACKING_OPTION, $stored, false ); + + // Clear whole cache. + $this->cache->clear_all_cache(); + } + + return false; + } + + return $cdn; + } + + /** + * Determines whether a UI element should be disabled for RocketCDN. + * + * Returns true only when all of the following are true: the current context + * is RocketCDN, the CDN is paused, the user has an active subscription, + * the license is invalid, and the subscription is in a loading state. + * + * @return bool True if the element should be disabled, false otherwise. + */ + public function should_disable_element_for_rocketcdn(): bool { + return $this->is_subscription_loading() + || $this->is_cdn_paused() + || $this->should_display_licence_expired_notice() + || ! $this->subscription_controller->has_active_subscription(); + } + + /** + * Filters status indicator texts for the free RocketCDN tier. + * + * Hooked to {@see 'rocket_rocketcdn_status_indicator_texts'} at priority 10. + * Activates the status text once pages have been added, and surfaces an + * expiry notice when the WP Rocket licence is invalid. + * + * @param array $texts Text strings for the status indicator. + * @param int $pages_count Number of pages using RocketCDN. + * @param bool $is_subscription_loading Whether the subscription is loading. + * @param bool $free Whether this is for the free version. + * + * @return array + */ + public function get_free_status_indicator_texts( array $texts, int $pages_count, bool $is_subscription_loading, bool $free ): array { + if ( ! $free ) { + return $texts; + } + + if ( $pages_count > 0 ) { + $texts['status_text'] = $texts['active_status_text']; + $texts['details'] = __( 'Serving files from 10 edge locations. Covering up to 3 pages.', 'rocket' ); + } + + if ( $this->subscription_controller->is_license_invalid() ) { + $texts['class'] .= ' wpr-cdn-status--expired'; + $texts['paused_details'] = __( 'RocketCDN is currently paused because your WPRocket licence has expired.', 'rocket' ); + } + + if ( $this->user->is_reseller_license_banned() ) { + $texts['paused_details'] = ''; + } + + return $texts; + } + + /** + * Filters status indicator texts for the paid RocketCDN tier. + * + * Hooked to {@see 'rocket_rocketcdn_status_indicator_texts'} at priority 10. + * Activates the paid status text and surfaces a cancellation notice during + * the grace period. + * + * @param array $texts Text strings for the status indicator. + * @param int $pages_count Number of pages using RocketCDN. + * @param bool $is_subscription_loading Whether the subscription is loading. + * @param bool $free Whether this is for the free version. + * + * @return array + */ + public function get_paid_status_indicator_texts( array $texts, int $pages_count, bool $is_subscription_loading, bool $free ): array { + if ( $free ) { + return $texts; + } + + $texts['details'] = __( 'Serving files from 100+ edge locations', 'rocket' ); + $texts['active_status_text'] = __( 'RocketCDN is active on your website', 'rocket' ); + $texts['status_text'] = $texts['active_status_text']; + + if ( $this->subscription_controller->is_in_grace_period() ) { + $texts['paused_details'] = __( 'RocketCDN is currently paused because your RocketCDN subscription was cancelled. Please wait up to two days before resuming.', 'rocket' ); + $texts['class'] .= ' wpr-cdn-status--expired'; + } + + return $texts; + } + + /** + * Auto-creates a RocketCDN Free subscription when a previously forced-paused state is resolved. + * + * @since 3.22.0.2 + * + * @return void + */ + public function maybe_auto_create_rocketcdn_free_subscription() { + // Bail out if there is an active subscription. + if ( $this->subscription_controller->has_active_subscription() ) { + return; + } + + // Bail out if the subscription is paid and is still within the cancellation grace period — too early to auto-resume. + if ( $this->subscription_controller->is_paid() && $this->subscription_controller->is_in_grace_period() ) { + return; + } + + if ( $this->subscription_controller->is_license_invalid() ) { + return; + } + + // Update the forced pause tracking option to indicate the forced pause has been resolved. + $stored = $this->get_forced_pause_tracking(); + $stored['persistent'] = false; + update_option( self::FORCED_PAUSE_TRACKING_OPTION, $stored, false ); + + // Bail out if there are no add pages in the free plan — no need to auto create, allow normal flow. + if ( empty( $this->get_items() ) ) { + return; + } + + // Auto-create a new subscription to resume free RocketCDN service. + $this->subscription_controller->create_subscription(); + } + + /** + * Reads the forced pause tracking option, migrating the legacy bool format to the current array format. + * + * @return array + */ + private function get_forced_pause_tracking(): array { + $stored = get_option( self::FORCED_PAUSE_TRACKING_OPTION, [] ); + + // Migrate legacy bool value: the option used to be stored as a plain bool. + if ( is_bool( $stored ) ) { + return [ 'tracking' => $stored ]; + } + + return (array) $stored; + } + + /** + * Builds a table-list-row data array from a page object. + * + * @since 3.22 + * + * @param object $page Page object with url and title properties. + * + * @return array Row data for the table-list-row partial. + */ + private function build_page_row( object $page ): array { + $disable_class = $this->is_subscription_loading() ? 'wpr-cdn-disabled' : ''; + $delete_button = ''; + + return [ + 'columns' => [ + [ + 'content' => '' . esc_html( $page->title ) . '', + ], + [ + 'type' => 'actions', + 'content' => $delete_button, + ], + ], + ]; + } + + /** + * Retrieves the list of pages added to RocketCDN for the free plan. + * + * @since 3.22 + * + * @return array List of page objects with id, url, and title properties. + */ + private function get_items(): array { + $query_params = [ + 'orderby' => 'modified', + 'order' => 'asc', + 'number' => 20, + ]; + + return $this->cdn_query->query( $query_params ); + } + + /** + * Checks if subscription is currently processing. + * + * @since 3.22 + * + * @return bool True if the subscription is processing, false otherwise. + */ + private function is_subscription_loading(): bool { + return $this->subscription_controller->is_subscription_creation_loading(); + } + + /** + * Checks if the WP Rocket license is expired for a free RocketCDN subscriber. + * + * @return bool True when the expired licence notice should be displayed. + */ + private function should_display_licence_expired_notice(): bool { + return $this->context->is_rocketcdn() && + $this->subscription_controller->is_free() && + $this->subscription_controller->is_license_invalid() && + ! $this->user->is_reseller_license_banned(); + } + + /** + * Checks if the CDN type is currently filtered. + * + * @since 3.22 + * + * @return bool True if the CDN type is filtered, false otherwise. + */ + private function is_cdn_type_filtered(): bool { + $allowed_cdn_types = [ 'rocketcdn', 'byocdn' ]; + + /** + * Pre-filter cdn_type option. + * + * @since 3.22 + * + * @param mixed $cdn_type Filtered CDN type. + */ + $cdn_type = wpm_apply_filters_typed( 'string|null', 'pre_get_rocket_option_cdn_type', null, '' ); + + if ( null !== $cdn_type && in_array( $cdn_type, $allowed_cdn_types, true ) ) { + return true; + } + + return false; + } + + /** + * Get status indicator data for RocketCDN. + * + * Retrieves an array of data used to render the RocketCDN status indicator, + * including status text, details, and various flags based on the current + * subscription state. + * + * @param int $pages_count Number of pages currently using RocketCDN. + * @param bool $is_subscription_loading Whether the subscription is currently being processed. + * @param bool $free Whether this is for the free version of RocketCDN. Default true. + * + * @return array { + * Array of status indicator data. + * + * @type string $class CSS class to apply to the status indicator. Empty string or ' wpr-cdn-status--paused'. + * @type bool $is_active Whether RocketCDN is active. + * @type string $status_text Current status text to display. + * @type string $details Details text describing the current status. + * @type string $active_status_text Text to display when RocketCDN is active. + * @type string $paused_status_text Text to display when RocketCDN is paused. + * @type string $paused_details Details text to display when RocketCDN is paused. + * @type bool $is_paused Whether RocketCDN is currently paused. + * @type int $pages_count Number of pages currently using RocketCDN. + * @type bool $is_subscription_loading Whether the subscription is currently being processed. + * @type bool $hide_pause_btn Whether to hide the pause button. + * } + */ + private function get_status_indicator_data( int $pages_count, bool $is_subscription_loading, bool $free = true ): array { + $texts = [ + 'paused_status_text' => __( 'RocketCDN is paused', 'rocket' ), + 'active_status_text' => __( 'RocketCDN is active', 'rocket' ), + 'paused_details' => __( 'RocketCDN is currently paused. Click Resume CDN to re-enable content delivery.', 'rocket' ), + 'status_text' => '', + 'details' => sprintf( + // translators: %1$s = opening tag, %2$s = closing tag. + __( '%1$sStart with your homepage and add up to 2 more key pages.%2$s Includes unlimited traffic across 10 edge locations.', 'rocket' ), + '', + '' + ), + 'class' => '', + ]; + + /** + * Filters the status indicator text strings for RocketCDN. + * + * Free- and paid-tier callbacks are registered by default to apply + * tier-specific overrides. Additional callbacks may be added to + * customise the indicator for custom subscription states. + * + * @param array $texts { + * Text strings and CSS modifier class for the status indicator. + * + * @type string $paused_status_text Text displayed when CDN is paused. + * @type string $active_status_text Text displayed when CDN is active. + * @type string $paused_details Details shown while CDN is paused. + * @type string $status_text Currently-shown status text (empty = inactive state). + * @type string $details Currently-shown details text. + * @type string $class CSS modifier class(es) for the indicator element. + * } + * @param int $pages_count Number of pages currently using RocketCDN. + * @param bool $is_subscription_loading Whether the subscription is currently being processed. + * @param bool $free Whether this is for the free version of RocketCDN. + * + * @since 3.22.0.2 + */ + $texts = wpm_apply_filters_typed( 'array', 'rocket_rocketcdn_status_indicator_texts', $texts, $pages_count, $is_subscription_loading, $free ); + + if ( $is_subscription_loading ) { + $texts['status_text'] = __( 'Creating your subscription...', 'rocket' ); + $texts['details'] = __( 'Please wait, RocketCDN will be ready in about 30s.', 'rocket' ); + } + + $is_paused = $this->is_cdn_paused(); + + if ( $is_paused ) { + $texts['status_text'] = $texts['paused_status_text']; + $texts['details'] = $texts['paused_details']; + $texts['class'] .= ' wpr-cdn-status--paused'; + } + + return [ + 'class' => $texts['class'], + 'is_active' => true, + 'status_text' => $texts['status_text'], + 'details' => $texts['details'], + 'active_status_text' => $texts['active_status_text'], + 'paused_status_text' => $texts['paused_status_text'], + 'paused_details' => $texts['paused_details'], + 'is_paused' => $is_paused, + 'pages_count' => $pages_count, + 'is_subscription_loading' => $is_subscription_loading, + 'hide_pause_btn' => ( $is_subscription_loading || 0 === $pages_count ) && ! $is_paused, + ]; + } + + /** + * Check if cdn should pause or not. + * + * @return bool + */ + private function is_cdn_paused(): bool { + return ! (bool) $this->options->get( 'cdn' ); + } + + /** + * Determines whether the CDN should be force-paused due to an inactive or invalid subscription state. + * + * @since 3.22 + * + * @return bool True if the CDN should be force-paused, false otherwise. + */ + private function is_forced_paused(): bool { + // Force paused if paid plan cancelled but in grace period. + if ( $this->subscription_controller->is_paid() && $this->subscription_controller->is_in_grace_period() ) { + return true; + } + + if ( $this->subscription_controller->is_paid() && $this->subscription_controller->is_cancelled_outside_grace_period() ) { + return true; + } + + // Force paused if free plan with an invalid WP Rocket licence. + if ( $this->subscription_controller->is_free() && $this->subscription_controller->is_license_invalid() ) { + return true; + } + + // Force paused if subscription cancelled beyond the grace period and WP Rocket licence is invalid. + if ( $this->subscription_controller->is_cancelled_outside_grace_period() && $this->subscription_controller->is_license_invalid() ) { + return true; + } + + return false; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/Render/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/Render/Subscriber.php new file mode 100644 index 000000000..c08920b0c --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/Render/Subscriber.php @@ -0,0 +1,273 @@ +controller = $controller; + } + + /** + * {@inheritdoc} + */ + public static function get_subscribed_events(): array { + return [ + 'rocket_cdn_driver_sections' => [ + [ 'add_rocketcdn_paid_section' ], + [ 'add_rocketcdn_free_section' ], + [ 'add_exclude_cdn_section' ], + [ 'add_purge_cdn_cache_section' ], + ], + 'current_screen' => [ 'maybe_sync_forced_pause_tracking_state' ], + 'rocket_cdn_free_page_list' => 'render_built_in_page_list', + 'rocket_cdn_free_page_rows' => 'render_built_in_page_rows', + 'rocket_cdn_driver_tabs' => 'render_cdn_driver_tabs', + 'rocket_cdn_settings_fields' => 'add_exclusions_fields', + 'rocket_display_rocketcdn_cta' => 'maybe_display_rocketcdn_cta', + 'rocket_cdn_tab_badge' => 'maybe_hide_cdn_tab_badge', + 'pre_get_rocket_option_cdn' => 'maybe_pause_cdn_for_inactive_subscription', + 'rocket_cdn_free_before_status_indicator' => [ + [ 'render_expired_wpr_licence_notice', 9 ], + [ 'render_reseller_banned_notice', 9 ], + ], + 'rocket_rocketcdn_status_indicator_texts' => [ + [ 'get_free_status_indicator_texts', 10, 4 ], + [ 'get_paid_status_indicator_texts', 10, 4 ], + ], + 'admin_init' => 'maybe_auto_create_rocketcdn_free_subscription', + ]; + } + + /** + * Adds the RocketCDN Paid section to the CDN driver sections. + * + * @since 3.22 + * + * @param array $sections CDN driver sections. + * + * @return array + */ + public function add_rocketcdn_paid_section( array $sections ): array { + return $this->controller->add_rocketcdn_paid_section( $sections ); + } + + /** + * Adds the RocketCDN Free section to the CDN driver sections. + * + * @since 3.22 + * + * @param array $sections CDN driver sections. + * + * @return array + */ + public function add_rocketcdn_free_section( array $sections ): array { + return $this->controller->add_rocketcdn_free_section( $sections ); + } + + /** + * Adds the Exclude CDN section to the CDN driver sections. + * + * @since 3.22 + * + * @param array $sections CDN driver sections. + * + * @return array + */ + public function add_exclude_cdn_section( array $sections ): array { + return $this->controller->add_exclude_cdn_section( $sections ); + } + + /** + * Adds the Purge CDN Cache section to the CDN driver sections. + * + * @since 3.22 + * + * @param array $sections CDN driver sections. + * + * @return array + */ + public function add_purge_cdn_cache_section( array $sections ): array { + return $this->controller->add_purge_cdn_cache_section( $sections ); + } + + /** + * Renders the built-in CDN page list table. + * + * @since 3.22 + * + * @return void + */ + public function render_built_in_page_list(): void { + $this->controller->render_built_in_page_list(); + } + + /** + * Renders the built-in CDN page list rows. + * + * @since 3.22 + * + * @return void + */ + public function render_built_in_page_rows(): void { + $this->controller->render_built_in_page_rows(); + } + + /** + * Renders the CDN driver tabs. + * + * @since 3.22 + * + * @return void + */ + public function render_cdn_driver_tabs(): void { + $this->controller->render_cdn_driver_tabs(); + } + + /** + * Adds exclusion fields for CDN to the settings fields array. + * + * @since 3.22 + * + * @param array $fields Existing settings fields array. + * + * @return array + */ + public function add_exclusions_fields( array $fields ): array { + return $this->controller->add_exclusions_fields( $fields ); + } + + /** + * Displays the RocketCDN Call to Action on the CDN tab of WP Rocket settings page. + * + * @param bool $display Whether to display the CTA. Default true. + * + * @since 3.22 + * + * @return bool + */ + public function maybe_display_rocketcdn_cta( bool $display = true ): bool { + return $this->controller->maybe_display_rocketcdn_cta( $display ); + } + + /** + * Removes the "NEW" badge from the Content Delivery tab for existing paid subscribers. + * + * @since 3.22 + * + * @param string $badge Current badge label. + * + * @return string + */ + public function maybe_hide_cdn_tab_badge( string $badge ): string { + return $this->controller->maybe_hide_cdn_tab_badge( $badge ); + } + + /** + * Syncs the forced pause tracking option state on WP Rocket settings screen. + * + * @param \WP_Screen $screen Current screen object. + * + * @return void + */ + public function maybe_sync_forced_pause_tracking_state( \WP_Screen $screen ): void { + $this->controller->maybe_sync_forced_pause_tracking_state( $screen ); + } + + /** + * Pauses the CDN for inactive subscriptions. + * + * @since 3.22 + * + * @param mixed $cdn CDN Option. + * + * @return mixed + */ + public function maybe_pause_cdn_for_inactive_subscription( $cdn ) { + return $this->controller->maybe_pause_cdn_for_inactive_subscription( $cdn ); + } + + /** + * Renders the expired WP Rocket license notice. + * + * @since 3.22 + * + * @return void + */ + public function render_expired_wpr_licence_notice(): void { + $this->controller->render_expired_wpr_licence_notice(); + } + + /** + * Renders the reseller-banned notice. + * + * @since 3.23.1 + * + * @return void + */ + public function render_reseller_banned_notice(): void { + $this->controller->render_reseller_banned_notice(); + } + + /** + * Filters status indicator texts for the free RocketCDN tier. + * + * @param array $texts Text strings for the status indicator. + * @param int $pages_count Number of pages using RocketCDN. + * @param bool $is_subscription_loading Whether the subscription is loading. + * @param bool $free Whether this is for the free version. + * + * @return array + */ + public function get_free_status_indicator_texts( array $texts, int $pages_count, bool $is_subscription_loading, bool $free ): array { + return $this->controller->get_free_status_indicator_texts( $texts, $pages_count, $is_subscription_loading, $free ); + } + + /** + * Filters status indicator texts for the paid RocketCDN tier. + * + * @param array $texts Text strings for the status indicator. + * @param int $pages_count Number of pages using RocketCDN. + * @param bool $is_subscription_loading Whether the subscription is loading. + * @param bool $free Whether this is for the free version. + * + * @return array + */ + public function get_paid_status_indicator_texts( array $texts, int $pages_count, bool $is_subscription_loading, bool $free ): array { + return $this->controller->get_paid_status_indicator_texts( $texts, $pages_count, $is_subscription_loading, $free ); + } + + /** + * Auto-creates a RocketCDN Free subscription when a previously forced-paused state is resolved. + * + * @since 3.22.0.2 + * + * @return void + */ + public function maybe_auto_create_rocketcdn_free_subscription(): void { + $this->controller->maybe_auto_create_rocketcdn_free_subscription(); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIClient.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIClient.php index 7600f4d7a..969c7b126 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIClient.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIClient.php @@ -42,6 +42,11 @@ private function get_remote_subscription_data() { 'cdn_url' => '', 'subscription_next_date_update' => 0, 'subscription_status' => 'cancelled', + 'website_attached' => false, + 'plan_type' => 'free', + 'plan_page_limit' => 0, + 'website_id' => 0, + 'status_code' => 500, ]; $token = get_option( 'rocketcdn_user_token' ); @@ -56,13 +61,23 @@ private function get_remote_subscription_data() { ], ]; + $parsed_home = wp_parse_url( home_url() ); + if ( empty( $parsed_home['host'] ) ) { + $this->set_status_transient( $default, 3 * MINUTE_IN_SECONDS ); + + return $default; + } + $response = wp_remote_get( - self::ROCKETCDN_API . 'website/search/?url=' . home_url(), + sprintf( '%1$ssubscription/%2$s/status', self::ROCKETCDN_API, $parsed_home['host'] ), $args ); - if ( 200 !== wp_remote_retrieve_response_code( $response ) ) { - $this->set_status_transient( $default, 3 * MINUTE_IN_SECONDS ); + $status_code = wp_remote_retrieve_response_code( $response ); + $default['status_code'] = $status_code; + + if ( 200 !== $status_code ) { + $this->set_status_transient( $default, 404 !== $status_code ? 3 * MINUTE_IN_SECONDS : DAY_IN_SECONDS ); return $default; } @@ -76,12 +91,28 @@ private function get_remote_subscription_data() { } $data = json_decode( $data, true ); - $data = array_intersect_key( (array) $data, $default ); - $data = array_merge( $default, $data ); + if ( empty( $data['success'] ) ) { + $this->set_status_transient( $default, 3 * MINUTE_IN_SECONDS ); + return $default; + } - $this->set_status_transient( $data, WEEK_IN_SECONDS ); + // Map the data. + $final_data = [ + 'id' => $data['subscription_id'] ?? 0, + 'is_active' => $data['website_activated'] ?? false, + 'cdn_url' => $data['cdn_url'] ?? '', + 'subscription_next_date_update' => $data['next_date_update'] ?? 0, + 'subscription_status' => $data['status'] ?? 'cancelled', + 'website_attached' => $data['website_attached'] ?? false, + 'plan_type' => $data['plan_type'] ?? 'free', + 'plan_page_limit' => $data['plan_page_limit'] ?? 0, + 'website_id' => $data['website_id'] ?? 0, + 'status_code' => $status_code, + ]; - return $data; + $this->set_status_transient( $final_data, DAY_IN_SECONDS ); + + return $final_data; } /** @@ -97,6 +128,7 @@ private function set_status_transient( $value, $duration ) { set_transient( 'rocketcdn_status', $value, $duration ); } + /** * Gets pricing & promotion data for RocketCDN from cache if it exists * @@ -222,7 +254,7 @@ public function purge_cache_request() { $subscription = $this->get_subscription_data(); $status = 'error'; - if ( ! isset( $subscription['id'] ) || 0 === $subscription['id'] ) { + if ( ! isset( $subscription['website_id'] ) || 0 === $subscription['website_id'] ) { return [ 'status' => $status, 'message' => __( 'RocketCDN cache purge failed: Missing identifier parameter.', 'rocket' ), @@ -246,7 +278,7 @@ public function purge_cache_request() { ]; $response = wp_remote_request( - self::ROCKETCDN_API . 'website/' . $subscription['id'] . '/purge/', + self::ROCKETCDN_API . 'website/' . $subscription['website_id'] . '/purge/', $args ); diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIHandler/CheckStatusAPIClient.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIHandler/CheckStatusAPIClient.php new file mode 100644 index 000000000..c56aebbb4 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIHandler/CheckStatusAPIClient.php @@ -0,0 +1,84 @@ +task_id = $task_id; + } + + /** + * Get the transient key for making this API Client calls. + * + * @return string The transient key for plugin updates. + */ + protected function get_transient_key() { + return 'rocket_cdn_check_status_request'; + } + + /** + * Get the API URL for creating rocketcdn free account silently. + * + * @return string The API URL. + */ + protected function get_api_url() { + if ( empty( $this->task_id ) ) { + return ''; + } + return sprintf( '%1$swebsite/task/%2$s/', APIClient::ROCKETCDN_API, $this->task_id ); + } + + /** + * Check RocketCDN free account creation status. + * + * @return array|false + */ + public function check() { + $token = get_option( 'rocketcdn_user_token' ); + + if ( empty( $token ) ) { + return false; + } + + $args = [ + 'headers' => [ + 'Authorization' => 'Token ' . $token, + ], + ]; + + $response = $this->send_get_request( $args, true ); + + if ( is_wp_error( $response ) ) { + return false; + } + + $response = wp_remote_retrieve_body( $response ); + if ( empty( $response ) ) { + return false; + } + + return json_decode( $response, true ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIHandler/CreateAPIClient.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIHandler/CreateAPIClient.php new file mode 100644 index 000000000..e92c534b4 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIHandler/CreateAPIClient.php @@ -0,0 +1,67 @@ +free_url = $user->get_rocketcdn_free_url(); + } + + /** + * Get the transient key for making this API Client calls. + * + * @return string The transient key for plugin updates. + */ + protected function get_transient_key() { + return 'rocket_cdn_create_request'; + } + + /** + * Get the API URL for creating rocketcdn free account silently. + * + * @return string The API URL. + */ + protected function get_api_url() { + return $this->free_url; + } + + /** + * Create RocketCDN free account. + * + * @return array|false + */ + public function create() { + $response = $this->send_post_request( [], true ); + + if ( is_wp_error( $response ) ) { + return false; + } + + $response = wp_remote_retrieve_body( $response ); + if ( empty( $response ) ) { + return false; + } + + return json_decode( $response, true ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIHandler/WebsiteSearch.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIHandler/WebsiteSearch.php new file mode 100644 index 000000000..fdf018b36 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/APIHandler/WebsiteSearch.php @@ -0,0 +1,126 @@ +site_url = $site_url; + } + + /** + * Get the transient key for making this API Client calls. + * + * @return string The transient key. + */ + protected function get_transient_key() { + return 'rocket_cdn_website_search'; + } + + /** + * Get the API URL for website search. + * + * @return string The API URL. + */ + protected function get_api_url() { + if ( empty( $this->site_url ) ) { + return ''; + } + return add_query_arg( + 'url', + untrailingslashit( $this->site_url ), + APIClient::ROCKETCDN_API . 'website/search/' + ); + } + + /** + * Check RocketCDN free account creation status. + * + * @return array|false + */ + public function find() { + $cached = get_transient( $this->get_transient_key() ); + if ( false !== $cached ) { + return $cached; + } + + $token = get_option( 'rocketcdn_user_token' ); + + if ( empty( $token ) ) { + return false; + } + + $args = [ + 'headers' => [ + 'Authorization' => 'Token ' . $token, + ], + ]; + + $response = $this->send_get_request( $args, true ); + + if ( is_wp_error( $response ) ) { + return false; + } + + $response = wp_remote_retrieve_body( $response ); + if ( empty( $response ) ) { + return false; + } + + $response = json_decode( $response, true ); + if ( ! is_array( $response ) ) { + return false; + } + + $final = [ + 'subscription_status' => $response['subscription_status'] ?? 'cancelled', + 'plan_type' => $response['subscription_plan_type'] ?? 'free', + 'status_code' => wp_remote_retrieve_response_code( $response ), + 'website_status' => $response['status'] ?? '', + ]; + set_transient( $this->get_transient_key(), $final, HOUR_IN_SECONDS ); + + return $final; + } + + /** + * Validate response code. + * + * @param array $response Response object. + * @return bool + */ + protected function valid_response_code( $response ) { + return in_array( wp_remote_retrieve_response_code( $response ), [ 200, 404 ], true ); + } + + /** + * Validate response body. + * + * @param array $response Response object. + * @return bool + */ + protected function valid_response_body( $response ) { + return ! empty( wp_remote_retrieve_body( $response ) ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/AdminPageSubscriber.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/AdminPageSubscriber.php index 948f79325..6793ca5bf 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/AdminPageSubscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/AdminPageSubscriber.php @@ -3,8 +3,8 @@ namespace WP_Rocket\Engine\CDN\RocketCDN; use WP_Rocket\Abstract_Render; -use WP_Rocket\Admin\Options_Data; -use WP_Rocket\Engine\Admin\Beacon\Beacon; +use WP_Rocket\Engine\License\API\User; +use WP_Rocket\Engine\License\API\UserClient; use WP_Rocket\Event_Management\Subscriber_Interface; /** @@ -21,54 +21,47 @@ class AdminPageSubscriber extends Abstract_Render implements Subscriber_Interfac private $api_client; /** - * WP Rocket options instance - * - * @var Options_Data - */ - private $options; - - /** - * Beacon instance + * UserClient instance * - * @var Beacon + * @var UserClient */ - private $beacon; + private $user_client; /** - * UserClient instance + * User instance * - * @var \WP_Rocket\Engine\License\API\UserClient + * @var User */ - private $user_client; + private $user; /** * Constructor * - * @param APIClient $api_client RocketCDN API Client instance. - * @param Options_Data $options WP Rocket options instance. - * @param Beacon $beacon Beacon instance. - * @param \WP_Rocket\Engine\License\API\UserClient $user_client UserClient instance. - * @param string $template_path Path to the templates. + * @param APIClient $api_client RocketCDN API Client instance. + * @param UserClient $user_client UserClient instance. + * @param User $user User instance. + * @param string $template_path Path to the templates. */ - public function __construct( APIClient $api_client, Options_Data $options, Beacon $beacon, $user_client, $template_path ) { + public function __construct( APIClient $api_client, $user_client, User $user, $template_path ) { parent::__construct( $template_path ); $this->api_client = $api_client; - $this->options = $options; - $this->beacon = $beacon; $this->user_client = $user_client; + $this->user = $user; } /** - * {@inheritdoc} + * Return an array of events that this subscriber wants to listen to. + * + * @return array */ public static function get_subscribed_events() { return [ - 'rocket_dashboard_after_account_data' => 'display_rocketcdn_status', - 'rocket_cdn_settings_fields' => 'rocketcdn_field', - 'admin_post_rocket_purge_rocketcdn' => 'purge_cdn_cache', - 'rocket_settings_page_footer' => 'add_subscription_modal', - 'http_request_args' => [ 'preserve_authorization_token', PHP_INT_MAX, 2 ], + 'rocket_dashboard_after_account_data' => 'display_rocketcdn_status', + 'admin_post_rocket_purge_rocketcdn' => 'purge_cdn_cache', + 'rocket_settings_page_footer' => 'add_subscription_modal', + 'http_request_args' => [ 'preserve_authorization_token', PHP_INT_MAX, 2 ], + 'rocket_insights_api_recommendations_params' => 'maybe_add_rocketcdn_to_recommendations_api_params', ]; } @@ -93,96 +86,48 @@ public function display_rocketcdn_status() { return; } + if ( $this->user->is_reseller_account() ) { + return; + } + $subscription_data = $this->api_client->get_subscription_data(); $container_class = ''; - $status_class = ''; - $label = ''; - $status_text = ''; $is_active = false; - - if ( 'running' === $subscription_data['subscription_status'] ) { - $label = __( 'Next Billing Date', 'rocket' ); - $status_class = ' wpr-isValid'; - $status_text = date_i18n( get_option( 'date_format' ), strtotime( $subscription_data['subscription_next_date_update'] ) ); - $is_active = true; + $items = []; + + if ( 'running' === $subscription_data['subscription_status'] && 'paid' === $subscription_data['plan_type'] ) { + $items[] = [ + 'label' => __( 'Plan', 'rocket' ), + 'value' => __( 'RocketCDN Pro', 'rocket' ), + 'class' => ' wpr-isValid wpr-no-icon', + ]; + $items[] = [ + 'label' => __( 'Next Billing Date', 'rocket' ), + 'value' => date_i18n( get_option( 'date_format' ), strtotime( $subscription_data['subscription_next_date_update'] ) ), + 'class' => ' wpr-isValid', + ]; + + $is_active = true; } else { - $status_class = ' wpr-isInvalid'; + $items[] = [ + 'label' => '', + 'value' => __( 'No RocketCDN Pro Subscription', 'rocket' ), + 'class' => ' wpr-isInvalid', + ]; $container_class = ' wpr-flex--egal'; - $status_text = __( 'No Subscription', 'rocket' ); } $data = [ 'is_live_site' => rocket_is_live_site(), 'container_class' => $container_class, - 'label' => $label, - 'status_class' => $status_class, - 'status_text' => $status_text, 'is_active' => $is_active, + 'items' => $items, ]; echo $this->generate( 'dashboard-status', $data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. } - /** - * Adds the RocketCDN fields to the CDN section - * - * @since 3.5 - * - * @param array $fields CDN settings fields. - * - * @return array - */ - public function rocketcdn_field( $fields ) { - if ( $this->is_white_label_account() ) { - return $fields; - } - - $subscription_data = $this->api_client->get_subscription_data(); - - if ( 'running' !== $subscription_data['subscription_status'] ) { - return $fields; - } - - $helper_text = __( 'Your RocketCDN subscription is currently active.', 'rocket' ); - $cdn_cnames = $this->options->get( 'cdn_cnames', [] ); - - if ( empty( $cdn_cnames ) || $cdn_cnames[0] !== $subscription_data['cdn_url'] ) { - $helper_text = sprintf( - // translators: %1$s = opening tag, %2$s = CDN URL, %3$s = closing tag. - __( 'To use RocketCDN, replace your CNAME with %1$s%2$s%3$s.', 'rocket' ), - '', - $subscription_data['cdn_url'], - '' - ); - } - - $beacon = $this->beacon->get_suggest( 'rocketcdn' ); - - $more_info = sprintf( - // translators: %1$is = opening link tag, %2$s = closing link tag. - __( '%1$sMore Info%2$s', 'rocket' ), - '', - '' - ); - - $fields['cdn_cnames'] = [ - 'type' => 'rocket_cdn', - 'label' => __( 'CDN CNAME(s)', 'rocket' ), - 'description' => __( 'Specify the CNAME(s) below', 'rocket' ), - 'helper' => $helper_text . ' ' . $more_info, - 'default' => '', - 'section' => 'cnames_section', - 'page' => 'page_cdn', - 'beacon' => [ - 'url' => $beacon['url'], - 'id' => $beacon['id'], - ], - ]; - - return $fields; - } - /** * Purges the CDN cache and store the response in a transient. * @@ -217,6 +162,10 @@ public function add_subscription_modal() { return; } + if ( $this->user->is_reseller_account() ) { + return; + } + if ( ! rocket_is_live_site() ) { return; } @@ -258,7 +207,7 @@ public function add_subscription_modal() {
@@ -280,6 +229,51 @@ public function preserve_authorization_token( $args, $url ) { return $this->api_client->preserve_authorization_token( $args, $url ); } + /** + * Adds the 'plugin_rocketcdn' option to the recommendations API parameters if certain conditions are met. + * + * @param array $params The existing API parameters. + * @return array The modified API parameters with 'plugin_rocketcdn' added if applicable. + */ + public function maybe_add_rocketcdn_to_recommendations_api_params( array $params ): array { + if ( ! $this->should_add_to_recommendations_api_params( $params ) ) { + return $params; + } + + $params['enabled_options'][] = 'plugin_rocketcdn'; + + return $params; + } + + /** + * Determines whether to add the 'plugin_rocketcdn' option to the recommendations API parameters. + * + * This method checks multiple conditions to decide if the user should be included: + * - Returns true if the account is a white label account. + * - Returns true if the RocketCDN standalone is active. + * - Returns true if CDN option in WP Rocket is enabled. + * - Returns false otherwise. + * + * @param array $params API params. + * @return bool True if the user should be added to the recommendations API parameters, false otherwise. + */ + private function should_add_to_recommendations_api_params( $params ): bool { + // Return true if white label is true. + if ( $this->is_white_label_account() ) { + return true; + } + + if ( ! empty( rocket_get_constant( 'ROCKETCDN_VERSION' ) ) ) { + return true; + } + + if ( in_array( 'cdn', $params['enabled_options'], true ) ) { + return true; + } + + return false; + } + /** * Checks if white label is enabled * diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/CDNOptionsManager.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/CDNOptionsManager.php index c92af00a7..53f4594de 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/CDNOptionsManager.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/CDNOptionsManager.php @@ -40,18 +40,18 @@ public function __construct( Options $options_api, Options_Data $options ) { * * @since 3.5 * - * @param string $cdn_url CDN URL. + * @param bool $clear_cache Clear website whole cache. * @return void */ - public function enable( $cdn_url ) { + public function enable( bool $clear_cache = true ) { $this->options->set( 'cdn', 1 ); - $this->options->set( 'cdn_cnames', [ $cdn_url ] ); - $this->options->set( 'cdn_zone', [ 'all' ] ); $this->options_api->set( 'settings', $this->options->get_options() ); delete_transient( 'rocketcdn_status' ); - rocket_clean_domain(); + if ( $clear_cache ) { + rocket_clean_domain(); + } } /** @@ -75,8 +75,6 @@ public function save_token( string $token ): void { */ public function disable() { $this->options->set( 'cdn', 0 ); - $this->options->set( 'cdn_cnames', [] ); - $this->options->set( 'cdn_zone', [] ); $this->options_api->set( 'settings', $this->options->get_options() ); @@ -93,4 +91,23 @@ public function disable() { public function get_cdn_cnames() { return $this->options->get( 'cdn_cnames', [] ); } + + /** + * Check if there is saved user token. + * + * @return bool + */ + public function has_token(): bool { + return ! empty( get_option( 'rocketcdn_user_token' ) ); + } + + /** + * Flush subscription cache. + * + * @return void + */ + public function flush_subscription_cache() { + delete_transient( 'rocketcdn_status' ); + delete_transient( 'rocket_cdn_website_search' ); + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/DataManagerSubscriber.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/DataManagerSubscriber.php index 2f8a30775..0c34c62e7 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/DataManagerSubscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/DataManagerSubscriber.php @@ -3,6 +3,7 @@ use WP_Rocket\Admin\Options; use WP_Rocket\Admin\Options_Data; +use WP_Rocket\Engine\CDN\Context; use WP_Rocket\Engine\License\API\UserClient; use WP_Rocket\Engine\Optimization\RegexTrait; use WP_Rocket\Event_Management\Subscriber_Interface; @@ -52,25 +53,36 @@ class DataManagerSubscriber implements Subscriber_Interface { */ private $user_client; + /** + * Subscription controller instance. + * + * @var SubscriptionController + */ + private $subscription_controller; + /** * Constructor * - * @param APIClient $api_client RocketCDN API Client instance. - * @param CDNOptionsManager $cdn_options CDNOptionsManager instance. - * @param Options_Data $options Options instance. - * @param Options $options_api Options API instance. - * @param UserClient $user_client UserClient instance. + * @param APIClient $api_client RocketCDN API Client instance. + * @param CDNOptionsManager $cdn_options CDNOptionsManager instance. + * @param Options_Data $options Options instance. + * @param Options $options_api Options API instance. + * @param UserClient $user_client UserClient instance. + * @param SubscriptionController $subscription_controller SubscriptionController instance. */ - public function __construct( APIClient $api_client, CDNOptionsManager $cdn_options, Options_Data $options, Options $options_api, UserClient $user_client ) { - $this->api_client = $api_client; - $this->cdn_options = $cdn_options; - $this->options = $options; - $this->options_api = $options_api; - $this->user_client = $user_client; + public function __construct( APIClient $api_client, CDNOptionsManager $cdn_options, Options_Data $options, Options $options_api, UserClient $user_client, SubscriptionController $subscription_controller ) { + $this->api_client = $api_client; + $this->cdn_options = $cdn_options; + $this->options = $options; + $this->options_api = $options_api; + $this->user_client = $user_client; + $this->subscription_controller = $subscription_controller; } /** - * {@inheritdoc} + * Return an array of events that this subscriber wants to listen to. + * + * @return array */ public static function get_subscribed_events() { return [ @@ -85,7 +97,12 @@ public static function get_subscribed_events() { 'wp_ajax_rocketcdn_process_status' => 'get_process_status', 'wp_ajax_rocketcdn_validate_token_cname' => 'validate_token_cname', self::CRON_EVENT => 'maybe_disable_cdn', - 'wp_rocket_upgrade' => [ 'refresh_cdn_cname', 10, 2 ], + 'wp_rocket_upgrade' => [ + [ 'refresh_cdn_cname', 10, 2 ], + [ 'refresh_subscription_details_with_update', 10, 2 ], + [ 'maybe_set_rocketcdn_as_cdn_type_on_upgrade', 12, 2 ], + ], + 'set_transient_wp_rocket_customer_data' => 'maybe_refresh_rocketcdn_details', ]; } @@ -169,7 +186,7 @@ public function handle_rocketcdn_checkout_parameter(): void { // Save token and enable CDN. $this->cdn_options->save_token( $token ); - $this->cdn_options->enable( $cdn_url ); + $this->cdn_options->enable(); // Schedule subscription check. $subscription = $this->api_client->get_subscription_data(); @@ -225,7 +242,7 @@ public function enable() { wp_send_json_error( $data ); } - $this->cdn_options->enable( esc_url_raw( $cdn_url ) ); + $this->cdn_options->enable(); $subscription = $this->api_client->get_subscription_data(); @@ -354,6 +371,14 @@ public function maybe_disable_cdn() { return; } + // If subscription is not running and plan type is not free, clear cache. + if ( $this->subscription_controller->is_free() ) { + /** + * Fires when the rocketcdn subscription is not running. + */ + do_action( 'rocketcdn_free_plan_subscription_expired' ); + } + $this->cdn_options->disable(); } @@ -399,7 +424,7 @@ public function validate_token_cname() { } update_option( 'rocketcdn_user_token', $token ); - $this->cdn_options->enable( esc_url_raw( $cdn_url ) ); + $this->cdn_options->enable(); $data['message'] = 'token_updated_successfully'; wp_send_json_success( $data ); @@ -435,6 +460,10 @@ public function maybe_retry_activation(): void { return; } + if ( $this->subscription_controller->is_subscription_creation_loading() ) { + return; + } + $token = get_option( 'rocketcdn_user_token' ); // If token is not saved locally, try to get it from user endpoint. @@ -461,12 +490,12 @@ public function maybe_retry_activation(): void { return; } - if ( empty( $subscription_data['id'] ) ) { + if ( empty( $subscription_data['website_id'] ) ) { return; } // Retry the activation. - $activation_result = $this->api_client->activate_subscription( $token, $subscription_data['id'] ); + $activation_result = $this->api_client->activate_subscription( $token, $subscription_data['website_id'] ); if ( is_wp_error( $activation_result ) ) { return; @@ -488,7 +517,7 @@ public function maybe_retry_activation(): void { } // Enable CDN and schedule check. - $this->cdn_options->enable( $subscription['cdn_url'] ); + $this->cdn_options->enable(); $this->schedule_subscription_check( $subscription ); } @@ -525,4 +554,62 @@ public function refresh_cdn_cname( $new_version, $old_version ): void { $this->options_api->set( 'settings', $this->options->get_options() ); } + + /** + * Refresh subscription details with update to v3.22.0.2. + * + * @param string $new_version Plugin new version. + * @param string $old_version Plugin old version. + * @return void + */ + public function refresh_subscription_details_with_update( $new_version, $old_version ) { + if ( version_compare( $old_version, '3.22.0.2', '>=' ) ) { + return; + } + + $this->user_client->flush_cache();// Flush customer details cache to set the transient and then refresh rocketcdn subscription details. + $this->cdn_options->flush_subscription_cache(); + } + + /** + * Save the token with any change in rocket customer details in case it's not saved. + * + * @param object $user_data Rocket customer data. + * @return void + */ + public function maybe_refresh_rocketcdn_details( $user_data ) { + if ( ! empty( $user_data->rocketcdn->cdn_token ) && ! $this->cdn_options->has_token() ) { + $token = sanitize_key( (string) $user_data->rocketcdn->cdn_token ); + if ( 40 !== strlen( $token ) ) { + return; + } + $this->cdn_options->save_token( $token ); + } + + $this->cdn_options->flush_subscription_cache(); + } + + /** + * Sets cdn_type to rocketcdn when upgrading from a version affected by the grace period bug. + * + * @since 3.22.0.2 + * + * @param string $new_version New plugin version. + * @param string $old_version Previously installed plugin version. + * + * @return void + */ + public function maybe_set_rocketcdn_as_cdn_type_on_upgrade( string $new_version, string $old_version ) { + if ( version_compare( $old_version, '3.22.0.2', '>=' ) ) { + return; + } + + if ( ! $this->subscription_controller->is_in_grace_period() ) { + return; + } + + $current_options = $this->options_api->get( 'settings', [] ); + $current_options['cdn_type'] = Context::ROCKETCDN_TYPE; + $this->options_api->set( 'settings', $current_options ); + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Queries/RocketCDN.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Queries/RocketCDN.php new file mode 100644 index 000000000..4e2111931 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Queries/RocketCDN.php @@ -0,0 +1,160 @@ +query( [] ); + } + + /** + * Get a page by URL. + * + * @param string $url The URL to search for. + * + * @return RocketCDNRow|false + */ + public function get_by_url( string $url ) { + $normalized_url = $this->normalize_url_path_encoding( untrailingslashit( $url ) ); + + $items = $this->query( + [ + 'url' => $normalized_url, + ] + ); + + if ( empty( $items ) ) { + return false; + } + + return $items[0]; + } + + /** + * Check if the url is found in the database. + * + * @param string $url The URL to search for. + * + * @return bool + */ + public function is_url_found( string $url ): bool { + $normalized_url = $this->normalize_url_path_encoding( untrailingslashit( $url ) ); + + $counter = $this->query( + [ + 'count' => true, + 'url' => $normalized_url, + ] + ); + + return 0 < (int) $counter; + } + + /** + * Get total count of pages. + * + * @param bool $bool_cache Use DB cache or not. + * + * @return int + */ + public function get_total_count( bool $bool_cache = true ): int { + return (int) $this->query( + [ + 'count' => true, + ], + $bool_cache + ); + } + + /** + * Delete all rows from the table. + * + * @return bool|int + */ + public function delete_all_rows() { + $db = $this->get_db(); + + if ( ! $db ) { + return false; + } + + $prefixed_table_name = $db->prefix . $this->table_name; + + $query = "DELETE FROM `$prefixed_table_name`"; + $rows_affected = $db->query( $query ); + + return $rows_affected; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Rows/RocketCDN.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Rows/RocketCDN.php new file mode 100644 index 000000000..870219b08 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Rows/RocketCDN.php @@ -0,0 +1,61 @@ +id = (int) $this->id; + $this->title = (string) $this->title; + $this->url = (string) $this->url; + $this->modified = empty( $this->modified ) ? 0 : strtotime( (string) $this->modified ); + $this->last_accessed = empty( $this->last_accessed ) ? 0 : strtotime( (string) $this->last_accessed ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Schemas/RocketCDN.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Schemas/RocketCDN.php new file mode 100644 index 000000000..9e6755aee --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Schemas/RocketCDN.php @@ -0,0 +1,67 @@ + 'id', + 'type' => 'bigint', + 'length' => 20, + 'unsigned' => true, + 'extra' => 'auto_increment', + 'primary' => true, + 'sortable' => true, + ], + // Title Column. + [ + 'name' => 'title', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'cache_key' => false, + 'searchable' => true, + 'sortable' => true, + ], + // URL Column. + [ + 'name' => 'url', + 'type' => 'varchar', + 'length' => 2000, + 'default' => '', + 'cache_key' => true, + 'searchable' => true, + 'sortable' => true, + ], + // Modified Column. + [ + 'name' => 'modified', + 'type' => 'timestamp', + 'default' => '0000-00-00 00:00:00', + 'modified' => true, + 'date_query' => true, + 'sortable' => true, + ], + // Last Accessed Column. + [ + 'name' => 'last_accessed', + 'type' => 'timestamp', + 'default' => '0000-00-00 00:00:00', + 'date_query' => true, + 'sortable' => true, + ], + ]; +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Tables/RocketCDN.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Tables/RocketCDN.php new file mode 100644 index 000000000..0518be255 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Database/Tables/RocketCDN.php @@ -0,0 +1,69 @@ + value array of versions => methods. + * + * @var array + */ + protected $upgrades = []; + + /** + * Table schema data. + * + * @var string + */ + protected $schema_data = " + id bigint(20) unsigned NOT NULL AUTO_INCREMENT, + title varchar(255) NOT NULL default '', + url varchar(2000) NOT NULL default '', + modified timestamp NOT NULL default '0000-00-00 00:00:00', + last_accessed timestamp NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (id), + KEY modified (modified), + KEY last_accessed (last_accessed), + KEY url (url(150))"; + + /** + * Truncate DB table. + * + * @return bool + */ + public function truncate_table(): bool { + if ( ! $this->exists() ) { + return false; + } + + return $this->truncate(); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/FrontendSubscriber.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/FrontendSubscriber.php new file mode 100644 index 000000000..8f1ef2a78 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/FrontendSubscriber.php @@ -0,0 +1,165 @@ +context = $context; + $this->subscription_controller = $subscription_controller; + } + + /** + * Return an array of events that this subscriber wants to listen to. + * + * @return array + */ + public static function get_subscribed_events() { + return [ + 'get_rocket_option_cdn_cnames' => [ 'set_cdn_cnames', 9 ], + 'get_rocket_option_cdn_zone' => [ 'set_cdn_zone', 9 ], + ]; + } + + /** + * Sets the CDN CNAME from the RocketCDN subscription data on the filter level. + * + * @since 3.22 + * + * @param mixed $cnames The current filter value. + * + * @return mixed The CDN CNAME array if RocketCDN is active, or the original value for BYOCDN, or empty otherwise. + */ + public function set_cdn_cnames( $cnames ) { + if ( is_admin() ) { + return $this->handle_admin_cname( $cnames ); + } + + if ( ! $this->context->is_rocketcdn() ) { + return $cnames; + } + + $cdn_url = $this->get_rocketcdn_url(); + + return empty( $cdn_url ) ? [] : [ $cdn_url ]; + } + + /** + * Sets the CDN zone from the RocketCDN subscription data on the filter level. + * + * @since 3.22 + * + * @param mixed $value The current filter value. + * + * @return mixed The CDN zone array if RocketCDN is active, or the original value. + */ + public function set_cdn_zone( $value ) { + $cdn_url = $this->get_rocketcdn_url(); + + if ( empty( $cdn_url ) ) { + return $value; + } + + return [ 'all' ]; + } + + /** + * Gets the CDN URL from the RocketCDN subscription data. + * + * @since 3.22 + * + * @return string The CDN URL if subscription is active, empty string otherwise. + */ + private function get_rocketcdn_url(): string { + // Use memoized value if available. + if ( null !== $this->rocketcdn_url ) { + return $this->rocketcdn_url; + } + + if ( ! $this->context->is_rocketcdn() ) { + $this->rocketcdn_url = ''; + return ''; + } + + if ( ! $this->subscription_controller->has_active_subscription() ) { + $this->rocketcdn_url = ''; + return ''; + } + + $this->rocketcdn_url = $this->get_raw_rocketcdn_url(); + + return $this->rocketcdn_url; + } + + /** + * Get raw rocketcdn url without any check. + * + * @return string + */ + private function get_raw_rocketcdn_url() { + return $this->subscription_controller->get_rocketcdn_url(); + } + + /** + * Handles the CDN CNAME value in the admin area to ensure that the RocketCDN URL is removed from the list of CNAMEs when the user saves the settings. + * + * @param array $cnames CNAME array. + * @return array + */ + private function handle_admin_cname( $cnames ) { + if ( empty( $cnames ) ) { + return $cnames; + } + + return array_filter( $cnames, [ $this, 'filter_rocketcdn_cname' ] ); + } + + /** + * Filter rocketcdn cname by comparing the current rocketcdn url with the CNAME value. + * + * @param string $cname CNAME string. + * @return bool + */ + private function filter_rocketcdn_cname( $cname ) { + return $cname !== $this->get_raw_rocketcdn_url(); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/NoticesSubscriber.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/NoticesSubscriber.php index e4d9a2085..ef656f72f 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/NoticesSubscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/NoticesSubscriber.php @@ -2,10 +2,14 @@ namespace WP_Rocket\Engine\CDN\RocketCDN; use WP_Rocket\Abstract_Render; +use WP_Rocket\Admin\Options_Data; use WP_Rocket\Engine\Admin\Beacon\Beacon; +use WP_Rocket\Engine\Common\Utils; +use WP_Rocket\Engine\License\API\User; use WP_Rocket\Engine\License\API\UserClient; use WP_Rocket\Engine\Tracking\Tracking; use WP_Rocket\Event_Management\Subscriber_Interface; +use WP_Rocket\Engine\Tracking\TrackingTrait; /** * Subscriber for the RocketCDN notices on WP Rocket settings page @@ -13,6 +17,8 @@ * @since 3.5 */ class NoticesSubscriber extends Abstract_Render implements Subscriber_Interface { + use TrackingTrait; + /** * RocketCDN API Client instance. * @@ -42,158 +48,82 @@ class NoticesSubscriber extends Abstract_Render implements Subscriber_Interface private $tracking; /** - * Constructor + * WP Rocket options instance * - * @param APIClient $api_client RocketCDN API Client instance. - * @param Beacon $beacon Beacon instance. - * @param UserClient $user_client UserClient instance. - * @param Tracking $tracking Tracking instance. - * @param string $template_path Path to the templates. + * @var Options_Data */ - public function __construct( APIClient $api_client, Beacon $beacon, UserClient $user_client, Tracking $tracking, $template_path ) { - parent::__construct( $template_path ); - - $this->api_client = $api_client; - $this->beacon = $beacon; - $this->user_client = $user_client; - $this->tracking = $tracking; - } - - /** - * {@inheritdoc} - */ - public static function get_subscribed_events() { - return [ - 'admin_notices' => [ - [ 'promote_rocketcdn_notice' ], - [ 'purge_cache_notice' ], - [ 'change_cname_notice' ], - [ 'activation_failed_notice' ], - ], - 'rocket_before_cdn_sections' => 'display_rocketcdn_cta', - 'wp_ajax_toggle_rocketcdn_cta' => 'toggle_cta', - 'wp_ajax_rocketcdn_dismiss_notice' => 'dismiss_notice', - 'admin_footer' => 'add_dismiss_script', - ]; - } + private $options; /** - * Adds notice to promote RocketCDN on settings page + * Subscription controller instance. * - * @since 3.5 - * - * @return void + * @var SubscriptionController */ - public function promote_rocketcdn_notice() { - /** - * Filters RocketCDN promotion notice. - * - * @param bool $promotion_notice; true to display, false otherwise. - */ - if ( ! apply_filters( 'rocket_promote_rocketcdn_notice', true ) ) { - return; - } - - if ( $this->is_white_label_account() ) { - return; - } - - if ( ! rocket_is_live_site() ) { - return; - } - - if ( ! $this->should_display_notice() ) { - return; - } - - echo $this->generate( 'promote-notice' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. - } + private $subscription_controller; /** - * Adds inline script to permanently dismissing the RocketCDN promotion notice - * - * @since 3.5 + * User instance. * - * @return void + * @var User */ - public function add_dismiss_script() { - if ( $this->is_white_label_account() ) { - return; - } - - if ( ! rocket_is_live_site() ) { - return; - } - - if ( ! $this->should_display_notice() ) { - return; - } - - $nonce = wp_create_nonce( 'rocketcdn_dismiss_notice' ); - ?> - - id ) { - return false; - } - - if ( get_user_meta( get_current_user_id(), 'rocketcdn_dismiss_notice', true ) ) { - return false; - } - - $subscription_data = $this->api_client->get_subscription_data(); + public function __construct( + APIClient $api_client, + Beacon $beacon, + UserClient $user_client, + Tracking $tracking, + $template_path, + Options_Data $options, + SubscriptionController $subscription_controller, + User $user + ) { + parent::__construct( $template_path ); - return 'running' !== $subscription_data['subscription_status']; + $this->api_client = $api_client; + $this->beacon = $beacon; + $this->user_client = $user_client; + $this->tracking = $tracking; + $this->options = $options; + $this->subscription_controller = $subscription_controller; + $this->user = $user; } /** - * Ajax callback to save the dismiss as a user meta - * - * @since 3.5 + * Return an array of events that this subscriber wants to listen to. * - * @return void + * @return array */ - public function dismiss_notice() { - check_ajax_referer( 'rocketcdn_dismiss_notice', 'nonce', true ); - - if ( ! current_user_can( 'rocket_manage_options' ) ) { - wp_send_json_error( 'no permissions' ); - } - - update_user_meta( get_current_user_id(), 'rocketcdn_dismiss_notice', true ); - - wp_send_json_success(); + public static function get_subscribed_events() { + return [ + 'admin_notices' => [ + [ 'purge_cache_notice' ], + [ 'change_cname_notice' ], + [ 'activation_failed_notice' ], + [ 'maybe_display_rocketcdn_notice' ], + ], + 'rocket_cdn_free_before_status_indicator' => [ + [ 'display_rocketcdn_cta' ], + [ 'display_reseller_limit_banner', 11 ], + ], + 'admin_post_rocket_ignore' => [ + [ 'track_notice_homepage_cta_click', 5 ], + [ 'track_rocketcdn_notice_dismissed', 5 ], + ], + 'wp_ajax_rocket_ignore' => [ [ 'track_rocketcdn_notice_dismissed', 5 ] ], + ]; } /** @@ -201,9 +131,11 @@ public function dismiss_notice() { * * @since 3.5 * + * @param array $cta_data CTA data. + * * @return void */ - public function display_rocketcdn_cta() { + public function display_rocketcdn_cta( array $cta_data ) { /** * Filters the display of the RocketCDN cta banner. * @@ -217,13 +149,17 @@ public function display_rocketcdn_cta() { return; } + if ( $this->user->is_reseller_account() ) { + return; + } + if ( ! rocket_is_live_site() ) { return; } $subscription_data = $this->api_client->get_subscription_data(); - if ( 'running' === $subscription_data['subscription_status'] ) { + if ( $this->subscription_controller->has_active_subscription() && $this->subscription_controller->is_paid() ) { return; } @@ -286,6 +222,13 @@ public function display_rocketcdn_cta() { $promotion_end_date = date_i18n( get_option( 'date_format' ), $end_date ); } + global $wp_locale; + $current_price_array = explode( $wp_locale->number_format['decimal_point'], $current_price_monthly ); + + if ( $cta_data['limit_reached'] ) { + $cta_big_class .= 'wpr-rocketcdn-cta---max-limit'; + } + $big_cta_data = [ 'container_class' => $cta_big_class, 'promotion_campaign' => $promotion_campaign, @@ -296,38 +239,39 @@ public function display_rocketcdn_cta() { 'current_price_monthly' => $current_price_monthly, 'current_price_annual' => $current_price_annual, 'button_url' => $button_url, + 'regular_price' => $regular_price_monthly, + 'current_price' => $current_price_monthly, + 'current_price_array' => [ + 'major' => ! empty( $current_price_array[0] ) ? $current_price_array[0] : 0, + 'minor' => ! empty( $current_price_array[1] ) ? $current_price_array[1] : 0, + ], ]; } - echo $this->generate( 'cta-small', $small_cta_data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. + $big_cta_data = array_merge( $big_cta_data, $cta_data ); + echo $this->generate( 'cta-big', $big_cta_data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. } /** - * Toggles display of the RocketCDN CTAs on the settings page + * Displays a reseller-specific informational banner when the 3-page limit is reached. * - * @since 3.5 + * @param array $cta_data CTA data including limit_reached flag. * * @return void */ - public function toggle_cta() { - check_ajax_referer( 'rocket-ajax', 'nonce', true ); - - if ( ! current_user_can( 'rocket_manage_options' ) ) { - wp_send_json_error( 'no permissions' ); - } - - if ( ! isset( $_POST['status'] ) ) { - wp_send_json_error( 'missing status' ); + public function display_reseller_limit_banner( array $cta_data ) { + if ( ! $this->user->is_reseller_account() ) { + return; } - if ( 'big' === $_POST['status'] ) { - delete_user_meta( get_current_user_id(), 'rocket_rocketcdn_cta_hidden' ); - } elseif ( 'small' === $_POST['status'] ) { - update_user_meta( get_current_user_id(), 'rocket_rocketcdn_cta_hidden', true ); - } + $banner_data = [ + 'heading' => esc_html__( 'Nice work! You\'re using RocketCDN on all available pages.', 'rocket' ), + 'description' => esc_html__( 'RocketCDN covers up to 3 pages, and you\'re all set.', 'rocket' ), + 'is_hidden' => empty( $cta_data['limit_reached'] ), + ]; - wp_send_json_success(); + echo $this->generate( 'cta-reseller-limit', $banner_data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view. } /** @@ -469,6 +413,12 @@ public function activation_failed_notice(): void { return; } + if ( $this->subscription_controller->is_free() ) { + // Send the request again (create subscription) to fix what is wrong with this account. + $this->subscription_controller->create_subscription( true ); + return; + } + $express_checkout_url = $this->get_express_checkout_url(); if ( empty( $express_checkout_url ) ) { @@ -506,16 +456,18 @@ public function activation_failed_notice(): void { * @return bool True if notice should be displayed, false otherwise. */ private function should_display_activation_failed_notice(): bool { + if ( $this->subscription_controller->is_subscription_creation_loading() ) { + return false; + } + // Do not show the notice if there is no RocketCDN user token saved: // this usually means the user never went through the checkout/activation flow. if ( empty( get_option( 'rocketcdn_user_token', '' ) ) ) { return false; } - $subscription_data = $this->api_client->get_subscription_data(); - - // Show notice when is_active is false AND cdn_url is empty. - return ! $subscription_data['is_active'] && empty( $subscription_data['cdn_url'] ); + // Show notice when webiste is not attached. + return ! $this->subscription_controller->is_website_attached() && $this->subscription_controller->has_active_subscription(); } /** @@ -545,4 +497,146 @@ private function get_express_checkout_url(): string { esc_url_raw( $user_data->rocketcdn->button->url ) ); } + + /** + * Display RocketCDN notice on admin dashboard if flag is set and notice hasn't been dismissed + * + * @since 3.22 + * + * @return void + */ + public function maybe_display_rocketcdn_notice() { + /** + * Filters showing rocketcdn admin notices + * + * @since 3.22 + * + * @param bool $show_rocketcdn_notices Show rocketcdn notices, by default it's shown. + */ + if ( wpm_apply_filters_typed( 'boolean', 'rocket_hide_rocketcdn_notices', false ) ) { + return; + } + + $previous_version = $this->options->get( 'previous_version' ); + // @phpstan-ignore-next-line + $rocket_cdn_token = get_option( 'rocketcdn_user_token', '' ); + + // Don't show the notice if RocketCDN is already active (token exists). + if ( ! empty( $rocket_cdn_token ) ) { + return; + } + + // Fresh install, show new install notice. + if ( empty( $previous_version ) ) { + $message = sprintf( + // translators: %1$s opening tag, %2$s closing tag. + esc_html__( + '%1$sNew in WP Rocket: Faster loading for your key pages%2$s', + 'rocket' + ), + '

', + '

' + ); + + $message .= sprintf( + // translators: %1$s opening

tag, %2$s closing

tag. + esc_html__( + '%1$sYou can now use Content Delivery, powered by RocketCDN, to speed up your homepage and 2 more pages, at no extra cost.%2$s', + 'rocket' + ), + '

', + '

' + ); + + $notice_info = [ + 'new_version' => '3.22.0', + 'dismiss_button' => 'rocketcdn_install_notice', + 'dismiss_message' => __( 'Dismiss', 'rocket' ), + 'message' => $message, + 'action' => 'rocketcdn_install_page', + 'status' => 'success', + 'track_event' => true, + ]; + + Utils::display_update_notice( $notice_info, true ); + + return; + } + + $message = sprintf( + // translators: %1$s opening tag, %2$s closing tag. + esc_html__( + '%1$sUse RocketCDN for free to boost up to 3 pages 🚀%2$s', + 'rocket' + ), + '

', + '

' + ); + + $message .= sprintf( + // translators: %1$s opening

tag, %2$s closing

tag. + esc_html__( + '%1$sAs a WP Rocket user, you can now activate RocketCDN for free on up to 3 pages. Choose your top pages and speed up their performance worldwide!%2$s', + 'rocket' + ), + '

', + '

' + ); + + $notice_info = [ + 'new_version' => '3.22.0', + 'dismiss_button' => 'rocket_update_notice', + 'dismiss_message' => __( 'Check it later', 'rocket' ), + 'message' => $message, + 'action' => 'rocketcdn_upgrade_page', + 'previous_version' => $previous_version, + 'track_event' => true, + ]; + + Utils::display_update_notice( $notice_info, true ); + } + + /** + * Tracks the "Start with my homepage" CTA click from the RocketCDN promo admin notice. + * + * Fires before rocket_dismiss_boxes() redirects, so we can track before the exit. + * + * @return void + */ + public function track_notice_homepage_cta_click(): void { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is verified later by rocket_dismiss_boxes(). + $box = isset( $_GET['box'] ) ? sanitize_key( wp_unslash( $_GET['box'] ) ) : ''; + + if ( 'rocketcdn_install_notice' !== $box ) { + return; + } + + /** + * Fires when the homepage cta button is clicked. + * + * @param string $source The source of the click, either 'add_homepage_button' or 'admin_notices'. + */ + do_action( 'rocket_rocketcdn_add_homepage', 'admin_notices' ); + } + + /** + * Tracks when a RocketCDN admin notice is dismissed. + * + * Fires before rocket_dismiss_boxes() redirects, so we can track before the exit. + * + * @return void + */ + public function track_rocketcdn_notice_dismissed(): void { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is verified later by rocket_dismiss_boxes(). + $box = isset( $_GET['box'] ) ? sanitize_key( wp_unslash( $_GET['box'] ) ) : ''; + + $rocketcdn_boxes = [ 'rocketcdn_install_notice', 'rocket_update_notice' ]; + + if ( ! in_array( $box, $rocketcdn_boxes, true ) ) { + return; + } + + // Track Mixpanel event immediately. + $this->track_event( 'RocketCDN Admin Notice Dismissed' ); + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Queue.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Queue.php new file mode 100644 index 000000000..41ec3e1cf --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Queue.php @@ -0,0 +1,65 @@ +is_scheduled( $this->create_status_job ) ) { + return; + } + $this->cancel( $this->create_status_job ); + } + + /** + * Schedule reset task. + * + * @param string $task_id Task ID to check the status of RocketCDN free website creation. + * + * @return void + */ + public function schedule_create_status_job( string $task_id ): void { + // Schedule weekly cleanup. + $this->schedule_single( + time() + 30, // After 30 seconds from now. + $this->create_status_job, + [ + 'task_id' => $task_id, + ] + ); + } + + /** + * Cancel all scheduled tasks. + * + * @return void + */ + public function cancel_all_tasks() { + $this->cancel_create_status_job(); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/RESTSubscriber.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/RESTSubscriber.php index 25b20d673..0850ccc47 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/RESTSubscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/RESTSubscriber.php @@ -26,29 +26,62 @@ class RESTSubscriber implements Subscriber_Interface { */ private $options; + /** + * Rest controller instance. + * + * @var Rest + */ + private $rest; + + /** + * Subscription controller instance. + * + * @var SubscriptionController + */ + private $subscription_controller; + /** * Constructor * - * @param CDNOptionsManager $cdn_options CDNOptionsManager instance. - * @param Options_Data $options WP Rocket Options instance. + * @param CDNOptionsManager $cdn_options CDNOptionsManager instance. + * @param Options_Data $options WP Rocket Options instance. + * @param Rest $rest Rest controller instance. + * @param SubscriptionController $subscription_controller Subscription controller. */ - public function __construct( CDNOptionsManager $cdn_options, Options_Data $options ) { - $this->cdn_options = $cdn_options; - $this->options = $options; + public function __construct( CDNOptionsManager $cdn_options, Options_Data $options, Rest $rest, SubscriptionController $subscription_controller ) { + $this->cdn_options = $cdn_options; + $this->options = $options; + $this->rest = $rest; + $this->subscription_controller = $subscription_controller; } /** - * {@inheritdoc} + * Return an array of events that this subscriber wants to listen to. + * + * @return array */ public static function get_subscribed_events() { return [ - 'rest_api_init' => [ + 'rest_api_init' => [ [ 'register_enable_route' ], [ 'register_disable_route' ], + [ 'register_routes' ], ], + 'rocket_cdnfree_website_create_status' => 'check_status', ]; } + /** + * Registers RocketCDN pages and state REST routes. + * + * @since 3.22 + * + * @return void + */ + public function register_routes(): void { + $this->rest->register_routes(); + } + /** * Register Enable route in the WP REST API * @@ -72,6 +105,7 @@ public function register_enable_route() { 'required' => true, 'validate_callback' => [ $this, 'validate_key' ], ], + // RocketCDN CNAME is no longer required as it's now changed on the filter level not in the settings option. 'url' => [ 'required' => true, 'validate_callback' => function ( $param ) { @@ -128,9 +162,7 @@ public function register_disable_route() { * @return \WP_REST_Response|\WP_Error */ public function enable( \WP_REST_Request $request ) { - $params = $request->get_body_params(); - - $this->cdn_options->enable( $params['url'] ); + $this->cdn_options->enable(); $response = [ 'code' => 'success', @@ -191,4 +223,17 @@ public function validate_email( $param ) { public function validate_key( $param ) { return ! empty( $param ) && $param === $this->options->get( 'consumer_key' ); } + + /** + * Check subscription creation status. + * + * @param string $task_id Task ID to check. + * @return void + */ + public function check_status( string $task_id ) { + if ( empty( $task_id ) ) { + return; + } + $this->subscription_controller->check_status( $task_id ); + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Rest.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Rest.php new file mode 100644 index 000000000..9966fadad --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/Rest.php @@ -0,0 +1,561 @@ +query = $query; + $this->options = $options; + $this->options_api = $options_api; + $this->render_controller = $render_controller; + $this->context = $context; + $this->subscription_controller = $subscription_controller; + } + + /** + * Registers the REST routes. + * + * @return void + */ + public function register_routes(): void { + register_rest_route( + self::ROUTE_NAMESPACE, + self::ROUTE_BASE . '/pages', + [ + [ + 'methods' => WP_REST_Server::READABLE, + 'callback' => [ $this, 'get_pages' ], + 'permission_callback' => [ $this, 'check_permission' ], + ], + [ + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => [ $this, 'add_page' ], + 'permission_callback' => [ $this, 'check_permission' ], + 'args' => [ + 'url' => [ + 'required' => true, + 'validate_callback' => function ( $param ) { + return ! empty( $param ) && wp_http_validate_url( esc_url_raw( $param ) ); + }, + 'sanitize_callback' => function ( $param ) { + return $this->normalize_url_path_encoding( untrailingslashit( esc_url_raw( $param ) ) ); + }, + ], + ], + ], + ] + ); + + register_rest_route( + self::ROUTE_NAMESPACE, + self::ROUTE_BASE . '/pages/homepage', + [ + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => [ $this, 'add_homepage' ], + 'permission_callback' => [ $this, 'check_permission' ], + ] + ); + + register_rest_route( + self::ROUTE_NAMESPACE, + self::ROUTE_BASE . '/pages/(?P\d+)', + [ + 'methods' => WP_REST_Server::DELETABLE, + 'callback' => [ $this, 'remove_page' ], + 'permission_callback' => [ $this, 'check_permission' ], + 'args' => [ + 'id' => [ + 'required' => true, + 'validate_callback' => function ( $param ) { + return is_numeric( $param ) && $param > 0; + }, + 'sanitize_callback' => 'absint', + ], + ], + ] + ); + + register_rest_route( + self::ROUTE_NAMESPACE, + self::ROUTE_BASE . '/pause', + [ + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => [ $this, 'save_pause_state' ], + 'permission_callback' => [ $this, 'check_permission' ], + 'args' => [ + 'paused' => [ + 'required' => true, + 'validate_callback' => function ( $param ) { + return is_bool( $param ) || in_array( (string) $param, [ '0', '1' ], true ); + }, + 'sanitize_callback' => function ( $param ) { + return (int) (bool) $param; + }, + ], + ], + ] + ); + + register_rest_route( + self::ROUTE_NAMESPACE, + self::ROUTE_BASE . '/driver', + [ + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => [ $this, 'save_cdn_type' ], + 'permission_callback' => [ $this, 'check_permission' ], + 'args' => [ + 'driver' => [ + 'required' => true, + 'validate_callback' => function ( $param ) { + return in_array( $param, [ 'byocdn', 'rocketcdn' ], true ); + }, + 'sanitize_callback' => 'sanitize_text_field', + ], + ], + ] + ); + + register_rest_route( + self::ROUTE_NAMESPACE, + self::ROUTE_BASE . '/subscription', + [ + [ + 'methods' => WP_REST_Server::READABLE, + 'callback' => [ $this, 'get_subscription' ], + 'permission_callback' => [ $this, 'check_permission' ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to manage CDN options. + * + * @return bool + */ + public function check_permission(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Adds a page URL to RocketCDN free-tier delivery. + * + * Validates the URL, checks the page limit, and saves to DB. + * + * @param WP_REST_Request $request REST request. + * @return WP_REST_Response|WP_Error + */ + public function add_page( WP_REST_Request $request ) { + $url = $request->get_param( 'url' ); + + // Check for local environment. + if ( 'local' === wp_get_environment_type() ) { + return new WP_Error( + 'rocketcdn_on_local_environment', + __( 'Addition of pages to RocketCDN is disabled for local environment.', 'rocket' ), + [ 'status' => 400 ] + ); + } + + if ( $this->is_limit_reached() ) { + return new WP_Error( + 'rocketcdn_page_limit_reached', + sprintf( + /* translators: %d: maximum number of free pages */ + __( 'Page limit of %d has been reached. Remove a page before adding a new one.', 'rocket' ), + $this->get_free_page_limit() + ), + [ 'status' => 400 ] + ); + } + + $payload = $this->get_url_validation_payload( $url ); + + if ( $payload['error'] ) { + return new WP_Error( + 'rocketcdn_url_not_found', + $payload['message'], + [ 'status' => $payload['data']['status'] ] + ); + } + + $page_title = __( 'Homepage', 'rocket' ); + + if ( ! Utils::is_home( $url ) ) { + $page_title = $this->get_page_title( $payload['message'] ); + } + + $existing = $this->query->get_by_url( $url ); + + if ( false !== $existing ) { + return new WP_Error( + 'rocketcdn_page_already_exists', + __( 'This page is already registered for RocketCDN delivery.', 'rocket' ), + [ 'status' => 409 ] + ); + } + + $created = $this->subscription_controller->create_subscription(); + if ( is_wp_error( $created ) ) { + return $created; + } + + /** + * WP Rocket Metabox fields on post edit page. + * + * @param string[] $original_fields Metaboxes fields. + */ + if ( ! wpm_apply_filters_typed( 'boolean', 'rocket_cdnfree_can_add_page', true, $url ) ) { + return new WP_Error( + 'rocketcdn_disabled_by_filter', + __( 'Adding page is disabled by the filter.', 'rocket' ), + [ 'status' => 500 ] + ); + } + + $inserted = $this->query->add_item( + [ + 'url' => $url, + 'title' => $page_title, + 'modified' => current_time( 'mysql' ), + 'last_accessed' => current_time( 'mysql' ), + ] + ); + + if ( ! $inserted ) { + return new WP_Error( + 'rocketcdn_db_error', + __( 'Failed to save page to the database.', 'rocket' ), + [ 'status' => 500 ] + ); + } + + $this->clean_url_cache( $url ); + + $pages_count = $this->query->get_total_count( false ); + $source_raw = $request->get_param( 'source' ); + $source = is_string( $source_raw ) && '' !== $source_raw ? sanitize_key( $source_raw ) : 'manual'; + $tracked_event = [ + 'button' => 'rocket cdn add page', + 'is_homepage' => Utils::is_home( $url ), + 'pages_count' => $pages_count, + 'source' => $source, + ]; + + if ( Utils::is_home( $url ) ) { + $tracked_event['button'] = 'rocket cdn add homepage'; + unset( $tracked_event['is_homepage'] ); + unset( $tracked_event['pages_count'] ); + } + + $this->track_event( 'Button Clicked', $tracked_event ); + + return new WP_REST_Response( $this->get_pages_data(), 201 ); + } + + /** + * Cleans the cache for the provided URL to ensure changes are reflected in RocketCDN delivery. + * + * @param string $url URL to clear. + * + * @return void + */ + private function clean_url_cache( string $url ): void { + if ( Utils::is_home( $url ) ) { + rocket_clean_home(); + + return; + } + + rocket_clean_files( [ user_trailingslashit( $url ) ] ); + } + + /** + * Removes a page from RocketCDN free-tier delivery by DB record ID. + * + * Deletes the DB record and returns the updated list. + * + * @param WP_REST_Request $request REST request. + * @return WP_REST_Response|WP_Error + */ + public function remove_page( WP_REST_Request $request ) { + $id = $request->get_param( 'id' ); + $item = $this->query->get_item( $id ); + + if ( empty( $item ) ) { + return new WP_Error( + 'rocketcdn_page_not_found', + __( 'The specified page was not found.', 'rocket' ), + [ 'status' => 404 ] + ); + } + + $removed_url = $item->url; + + $this->query->delete_item( $id ); + + $this->clean_url_cache( $removed_url ); + + $pages_count = $this->query->get_total_count( false ); + + $this->track_event( + 'Button Clicked', + [ + 'button' => 'rocket cdn remove page', + 'is_homepage' => Utils::is_home( $removed_url ), + 'pages_count' => $pages_count, + ] + ); + + return new WP_REST_Response( $this->get_pages_data(), 200 ); + } + + /** + * Returns all registered free-tier pages with count and limit info. + * + * @return WP_REST_Response + */ + public function get_pages(): WP_REST_Response { + return new WP_REST_Response( $this->get_pages_data(), 200 ); + } + + /** + * Quick-adds the site homepage as a free-tier CDN page. + * + * @return WP_REST_Response|WP_Error + */ + public function add_homepage() { + $request = new WP_REST_Request( 'POST' ); + $request->set_param( 'url', untrailingslashit( home_url() ) ); + $request->set_param( 'source', 'add_homepage_button' ); + + return $this->add_page( $request ); + } + + /** + * Saves CDN driver state options. + * + * Persists the paused state. + * + * @param WP_REST_Request $request REST request. + * @return WP_REST_Response + */ + public function save_pause_state( WP_REST_Request $request ): WP_REST_Response { + $paused = (int) $request->get_param( 'paused' ); + + $this->options->set( 'cdn', $paused ); + $this->options_api->set( 'settings', $this->options->get_options() ); + + $status = 0 === $paused ? 'paused' : 'active'; + $action = 0 === $paused ? 'user_paused' : 'user_resume'; + + do_action( 'rocket_rocketcdn_cdn_state_changed', $status, $action ); + + return new WP_REST_Response( + [ + 'paused' => $this->options->get( 'cdn', 0 ), + ], + 200 + ); + } + + /** + * Checks whether the free-tier page limit has been reached. + * + * @return bool True if the count is at or above the limit. + */ + public function is_limit_reached(): bool { + return $this->query->get_total_count() >= $this->get_free_page_limit(); + } + + /** + * Builds the pages response payload. + * + * @return array + */ + private function get_pages_data(): array { + $pages = $this->query->get_all(); + + $pages_count = $this->query->get_total_count( false ); + + return [ + 'pages' => array_map( + function ( $page ) { + return [ + 'id' => (int) $page->id, + 'url' => $page->url, + 'title' => $page->title, + ]; + }, + $pages + ), + 'count' => $pages_count, + 'limit' => $this->get_free_page_limit(), + 'items_html' => $this->render_controller->get_built_in_page_list(), + 'status_indicator_html' => $this->render_controller->get_status_indicator_html( $pages_count ), + 'is_subscription_creation_loading' => $this->subscription_controller->is_subscription_creation_loading(), + ]; + } + + /** + * Return the total number of free pages allowed for RocketCDN delivery. + * + * @return int + */ + protected function get_free_page_limit(): int { + return $this->context->get_free_page_limit(); + } + + /** + * Save cdn driver + * + * Persists the active driver tab selection so the UI + * can restore the correct view after a page refresh. + * + * @param WP_REST_Request $request REST request. + * @return WP_REST_Response + */ + public function save_cdn_type( WP_REST_Request $request ) { + $cdn_type = $request->get_param( 'driver' ); + + $this->options->set( 'cdn_type', $cdn_type ); + $this->options_api->set( 'settings', $this->options->get_options() ); + + return new WP_REST_Response( + [ + 'cdn_type' => $cdn_type, + 'disable_rocket_cdn_elements' => $this->render_controller->should_disable_element_for_rocketcdn(), + ], + 200 + ); + } + + /** + * Get subscription details. + * + * @return WP_REST_Response + */ + public function get_subscription(): WP_REST_Response { + $subscription = $this->subscription_controller->get_subscription(); + + if ( empty( $subscription ) ) { + return new WP_REST_Response( null, 204 ); + } + + return new WP_REST_Response( + $subscription, + 200 + ); + } + + /** + * Get URL validation payload. + * + * @param string $url URL to validate. + * + * @return array + */ + private function get_url_validation_payload( string $url ): array { + $payload = $this->get_page_url_validation_payload( $url ); + + // Check for same host. + $url_host = wp_parse_url( $url ); + $site_host = wp_parse_url( home_url() ); + + // Check that URL has a valid host component. + if ( ! isset( $url_host['host'] ) ) { + $payload['error'] = true; + $payload['message'] = __( 'Invalid URL provided.', 'rocket' ); + } + + // Check that URL host matches site host. + if ( $url_host['host'] !== $site_host['host'] ) { + $payload['error'] = true; + $payload['message'] = __( 'URL must be on the same domain as the site.', 'rocket' ); + } + + return $payload; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/ServiceProvider.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/ServiceProvider.php index 5b2ffa294..e1c3402ad 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/ServiceProvider.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/ServiceProvider.php @@ -5,6 +5,11 @@ use WP_Rocket\Dependencies\League\Container\Argument\Literal\StringArgument; use WP_Rocket\Dependencies\League\Container\ServiceProvider\AbstractServiceProvider; +use WP_Rocket\Engine\CDN\RocketCDN\APIHandler\CheckStatusAPIClient; +use WP_Rocket\Engine\CDN\RocketCDN\APIHandler\CreateAPIClient; +use WP_Rocket\Engine\CDN\RocketCDN\APIHandler\WebsiteSearch; +use WP_Rocket\Engine\CDN\RocketCDN\Database\Queries\RocketCDN as RocketCDNQuery; +use WP_Rocket\Engine\CDN\RocketCDN\Database\Tables\RocketCDN as RocketCDNTable; /** * Service provider for RocketCDN @@ -16,12 +21,21 @@ class ServiceProvider extends AbstractServiceProvider { * @var array */ protected $provides = [ + 'rocketcdn_table', + 'rocketcdn_query', 'rocketcdn_api_client', 'rocketcdn_options_manager', 'rocketcdn_data_manager_subscriber', + 'rocketcdn_frontend_subscriber', + 'rocketcdn_rest', 'rocketcdn_rest_subscriber', 'rocketcdn_admin_subscriber', 'rocketcdn_notices_subscriber', + 'rocketcdn_subscription_controller', + 'rocketcdn_create_api_client', + 'rocketcdn_queue', + 'rocketcdn_check_status_api_client', + 'rocketcdn_website_search_api_client', ]; /** @@ -41,6 +55,10 @@ public function provides( string $id ): bool { * @return void */ public function register(): void { + // RocketCDN database layer. + $this->getContainer()->addShared( 'rocketcdn_table', RocketCDNTable::class ); + $this->getContainer()->add( 'rocketcdn_query', RocketCDNQuery::class ); + // RocketCDN API Client. $this->getContainer()->add( 'rocketcdn_api_client', APIClient::class ); // RocketCDN CDN options manager. @@ -60,6 +78,27 @@ public function register(): void { 'options', 'options_api', 'user_client', + 'rocketcdn_subscription_controller', + ] + ); + // RocketCDN Frontend subscriber. + $this->getContainer()->addShared( 'rocketcdn_frontend_subscriber', FrontendSubscriber::class ) + ->addArguments( + [ + 'cdn_context', + 'rocketcdn_subscription_controller', + ] + ); + // RocketCDN REST API pages controller. + $this->getContainer()->add( 'rocketcdn_rest', Rest::class ) + ->addArguments( + [ + 'rocketcdn_query', + 'options', + 'options_api', + 'cdn_render_controller', + 'cdn_context', + 'rocketcdn_subscription_controller', ] ); // RocketCDN REST API Subscriber. @@ -68,6 +107,8 @@ public function register(): void { [ 'rocketcdn_options_manager', 'options', + 'rocketcdn_rest', + 'rocketcdn_subscription_controller', ] ); // RocketCDN Notices Subscriber. @@ -79,18 +120,41 @@ public function register(): void { 'user_client', 'tracking', new StringArgument( __DIR__ . '/views' ), + 'options', + 'rocketcdn_subscription_controller', + 'user', ] ); + + $this->getContainer()->add( 'rocketcdn_queue', Queue::class ); + $this->getContainer()->add( 'rocketcdn_create_api_client', CreateAPIClient::class )->addArgument( 'user' ); + $this->getContainer()->add( 'rocketcdn_check_status_api_client', CheckStatusAPIClient::class ); + $this->getContainer()->add( 'rocketcdn_website_search_api_client', WebsiteSearch::class ); + $this->getContainer()->add( 'rocketcdn_subscription_controller', SubscriptionController::class ) + ->addArguments( + [ + 'rocketcdn_api_client', + 'rocketcdn_create_api_client', + 'rocketcdn_options_manager', + 'rocketcdn_queue', + 'rocketcdn_check_status_api_client', + 'user', + 'rocketcdn_website_search_api_client', + ] + ); + // RocketCDN settings page subscriber. $this->getContainer()->addShared( 'rocketcdn_admin_subscriber', AdminPageSubscriber::class ) ->addArguments( [ 'rocketcdn_api_client', - 'options', - 'beacon', 'user_client', + 'user', new StringArgument( __DIR__ . '/views' ), ] ); + + // Ensure the table is created and refreshed when needed. + $this->getContainer()->get( 'rocketcdn_table' ); } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/SubscriptionController.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/SubscriptionController.php new file mode 100644 index 000000000..dc041dcee --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/SubscriptionController.php @@ -0,0 +1,439 @@ +api_client = $api_client; + $this->create_api_client = $create_api_client; + $this->options_manager = $options_manager; + $this->queue = $queue; + $this->check_status_api_client = $check_status_api_client; + $this->user = $user; + $this->website_search_api_client = $website_search_api_client; + } + + /** + * Get subscription data. + * + * @return array + */ + public function get_subscription_data() { + if ( $this->is_subscription_creation_loading() ) { + return []; + } + + if ( ! rocket_get_constant( 'WP_ROCKET_IS_TESTING', false ) && ! empty( $this->subscription ) ) { + return $this->subscription; + } + + $this->subscription = $this->api_client->get_subscription_data(); + if ( 404 === ( $this->subscription['status_code'] ?? null ) ) { + $this->website_search_api_client->set_site_url( home_url() ); + $website = $this->website_search_api_client->find(); + if ( ! empty( $website ) ) { + $this->subscription = array_merge( $this->subscription, $website ); + } + } + + return $this->subscription; + } + + /** + * Check if it has active RocketCDN subscription. + * + * @return bool + */ + public function has_active_subscription(): bool { + $subscription = $this->get_subscription_data(); + return ! empty( $subscription['subscription_status'] ) && 'running' === $subscription['subscription_status']; + } + + /** + * Check if it has WP Rocket license is expired or revoked, regardless of RocketCDN subscription status. + * + * @return bool + */ + public function is_license_invalid(): bool { + return $this->user->is_license_expired() || $this->user->is_revoked(); + } + + + /** + * Check if it has inactive RocketCDN subscription. + * We are checking the transient since the get_subscription_data will return default value until we add a page to rocketcdn. + * + * @return bool + */ + public function has_inactive_subscription() { + $transient = get_transient( 'rocketcdn_status' ); + if ( false === $transient ) { + return false; + } + + return ! $this->has_active_subscription(); + } + + /** + * Create RocketCDN subscription if it doesn't have an active one, and handle the response. + * + * @param bool $skip_active_check Skip checking if the website has active subscription or not, default is false. + * + * @return bool|WP_Error + */ + public function create_subscription( bool $skip_active_check = false ) { + if ( ! $skip_active_check && $this->has_active_subscription() ) { + return false; + } + + $this->start_subscription_creation_loader(); + + $created = $this->create_api_client->create(); + if ( ! $created || ! $created['success'] ) { + $this->logger::error( + 'RocketCDN: Failed to create subscription.', + [ + 'code' => $created['data']['code'] ?? 'Unknown', + 'message' => $created['data']['message'] ?? 'Unknown', + ] + ); + + $this->stop_subscription_creation_loader(); + + return new WP_Error( $created['data']['code'] ?? 'rocketcdn_account_notcreated', $created['data']['message'] ?? 'Unknown' ); + } + + switch ( $created['data']['code'] ) { + case 'cdn_task_enqueued': + // Save CDN token. + $this->options_manager->save_token( $created['data']['cdn_token'] ); + + // Enqueue AS single task after 30 seconds from now to check the status. + $this->queue->schedule_create_status_job( $created['data']['task_id'] ); + + /** + * Fires when rocketcdn subscription is created. + * + * @param string $task_id Enqueued task ID. + * @param string $token CDN Subscription token. + */ + do_action( 'rocket_cdn_subscription_created', $created['data']['task_id'], $created['data']['cdn_token'] ); + break; + + case 'already_free_subscribed': + // Clear subscription cache so it can get the final state, and save the token before if it's not saved before. + if ( ! $this->options_manager->has_token() ) { + $this->options_manager->save_token( $created['data']['cdn_token'] ); + } + + $this->stop_subscription_creation_loader(); + + $this->options_manager->flush_subscription_cache(); + break; + default: + // Log this not known code. + $this->logger::error( + 'RocketCDN: Received not known response code when creating subscription.', + [ + 'code' => $created['data']['code'], + 'message' => $created['data']['message'], + ] + ); + $this->stop_subscription_creation_loader(); + + return false; + } + + return true; + } + + /** + * Check subscription's creation status. + * + * @param string $task_id Task ID. + * @return void + */ + public function check_status( string $task_id ) { + if ( $this->has_active_subscription() ) { + $this->stop_subscription_creation_loader(); + return; + } + + $this->check_status_api_client->set_task_id( $task_id ); + $status = $this->check_status_api_client->check(); + if ( ! $status ) { + $this->stop_subscription_creation_loader(); + return; + } + + if ( ! $status['success'] ) { + $this->stop_subscription_creation_loader(); + $this->logger::error( + 'RocketCDN: Failed to check creation status.', + $status + ); + return; + } + + switch ( $status['status'] ) { + case 'PENDING': + // Re-add the action scheduler task to check status again after 30 seconds. + $this->queue->schedule_create_status_job( $task_id ); + break; + case 'SUCCESS': + $this->options_manager->enable( false ); + + $this->stop_subscription_creation_loader(); + + /** + * Fires when rocketcdn subscription's creation is finished successfully. + */ + do_action( 'rocket_cdnfree_website_created' ); + break; + default: + $this->stop_subscription_creation_loader(); + $this->logger::error( + 'RocketCDN: Received not known response code when check subscription\'s status.', + $status + ); + } + } + + /** + * If current subscription is free. + * + * @return bool + */ + public function is_free(): bool { + $subscription = $this->get_subscription_data(); + return ! empty( $subscription['plan_type'] ) && 'free' === $subscription['plan_type']; + } + + /** + * If current subscription is paid. + * + * @return bool + */ + public function is_paid(): bool { + $subscription = $this->get_subscription_data(); + return ! empty( $subscription['plan_type'] ) && 'paid' === $subscription['plan_type']; + } + + /** + * Check if website is attached to the subscription correctly or not. + * + * @return bool + */ + public function is_website_attached(): bool { + $subscription = $this->get_subscription_data(); + return ! empty( $subscription['website_attached'] ); + } + + /** + * Set subscription creation process transient. + * Its value can be used to track creation process time. + * + * @return void + */ + private function start_subscription_creation_loader() { + set_transient( $this->subscription_loading_transient, time(), HOUR_IN_SECONDS ); + } + + /** + * Delete subscription creation process transient. + * + * @return void + */ + private function stop_subscription_creation_loader() { + delete_transient( $this->subscription_loading_transient ); + } + + /** + * Check if subscription creation process is in-progress state. + * + * @return bool + */ + public function is_subscription_creation_loading(): bool { + if ( ! $this->options_manager->has_token() ) { + return false; + } + + return false !== get_transient( $this->subscription_loading_transient ); + } + + /** + * Get subscription details, mainly for the rest API endpoint. + * + * @return array + */ + public function get_subscription() { + return [ + 'is_loading' => $this->is_subscription_creation_loading(), + 'has_active_subscription' => $this->has_active_subscription(), + ]; + } + + /** + * Get rocketcdn from the subscription. + * + * @return string + */ + public function get_rocketcdn_url() { + $subscription = $this->get_subscription_data(); + return $subscription['cdn_url'] ?? ''; + } + + /** + * Get rocketcdn transient status + * + * @return mixed + */ + public function get_rocketcdn_status() { + return get_transient( 'rocketcdn_status' ); + } + + /** + * Checks whether the subscription has been cancelled or refunded. + * + * @since 3.22.0.2 + * + * @return bool True if the subscription status is 'cancelled' or 'refunded', false otherwise. + */ + public function is_cancelled(): bool { + $subscription = $this->get_subscription_data(); + return ! empty( $subscription['subscription_status'] ) && in_array( $subscription['subscription_status'], [ 'cancelled', 'refunded' ], true ); + } + + /** + * Checks whether the website is pending deletion on the RocketCDN side. + * + * @since 3.22.0.2 + * + * @return bool True if the website status is 'pending_deletion', false otherwise. + */ + public function is_website_pending_deletion(): bool { + $subscription = $this->get_subscription_data(); + return ! empty( $subscription['website_status'] ) && 'pending_deletion' === $subscription['website_status']; + } + + /** + * Checks whether the subscription is within the cancellation grace period. + * + * The grace period is active when the subscription is cancelled but the website + * is still pending deletion, meaning it has not yet been fully removed. + * + * @since 3.22.0.2 + * + * @return bool True if the subscription is cancelled and the website is pending deletion, false otherwise. + */ + public function is_in_grace_period(): bool { + return $this->is_cancelled() && $this->is_website_pending_deletion(); + } + + /** + * Checks whether the subscription is cancelled and the grace period has elapsed. + * + * Returns true when the subscription is cancelled and the website is no longer + * pending deletion, indicating the grace period has fully passed. + * + * @since 3.22.0.2 + * + * @return bool True if cancelled and outside the grace period, false otherwise. + */ + public function is_cancelled_outside_grace_period(): bool { + return $this->is_cancelled() && ! $this->is_website_pending_deletion(); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-big.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-big.php index 34b33668f..20d5033fe 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-big.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-big.php @@ -9,138 +9,172 @@ * @type string $promotion_campaign Promotion campaign title. * @type string $promotion_end_date Promotion end date. * @type string $nopromo_variant CSS modifier for the no promotion display. + * @type string $regular_price RocketCDN regular price. + * @type string $current_price RocketCDN current price. * @type string $regular_price_monthly RocketCDN regular monthly price. * @type string $regular_price_annual RocketCDN regular annual price. * @type string $current_price_monthly RocketCDN current monthly price. * @type string $current_price_annual RocketCDN current annual price. + * @type string $cta_heading CTA toggle text with strong-wrapped heading. + * @type string $cta_description CTA description text. * } */ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' ); $data = isset( $data ) && is_array( $data ) ? $data : []; // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound + +$rocketcdn_container_classes = [ 'wpr-rocketcdn-cta' ]; + +if ( empty( $data['is_visible'] ) ) { + $rocketcdn_container_classes[] = 'wpr-isHidden'; +} + +if ( ! empty( $data['is_visible'] ) && ! empty( $data['is_expanded'] ) ) { + $rocketcdn_container_classes[] = 'wpr-rocketcdn-cta--expanded'; + $rocketcdn_container_classes[] = 'wpr-rocketcdn-cta---max-limit'; +} + +if ( ! empty( $data['is_visible'] ) && empty( $data['is_expanded'] ) ) { + $rocketcdn_container_classes[] = 'wpr-rocketcdn-cta--collapsed'; +} + +if ( ! empty( $data['container_class'] ) ) { + $rocketcdn_container_classes[] = $data['container_class']; +} + ?> -
- -
-

-

- + +

+
+

+ [] ] ); ?>

+
- -
-
-
-
-

-

-
-
    -
  • -
    -

    -

    -
    -
  • -
  • -
    -

    -

    -
    -
  • -
  • -
    -

    -

    -
    -
  • - - - - -
-
-
- -

- - - - -
-
- - -
-
+
+ +

+ [] ] ); ?> +
+ +

+ +
-
- -

- - $ - $ - -

- + -
- $ +
+ +
+

+

+ +

+
+ +
+
+

+ + +

+
    +
  • + ', '' ); + ?> +
  • +
  • + ', '' ); + ?> +
  • +
  • + ', '' ); + ?> +
  • + + + + +
+
+
+ +

+ +
+
+ + +
+
+
+ +

+ + $ + $ + +

+ - - -
-
-
- - +
+ $ + + + + + + +
+
+
+ + +
+ () +
- () -
-
- + +
+ +
- -
- -
-
+ +
diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-reseller-limit.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-reseller-limit.php new file mode 100644 index 000000000..9b38cdfbe --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-reseller-limit.php @@ -0,0 +1,31 @@ + + +
+
+ +

+ +
+ +

+
+
diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-small.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-small.php deleted file mode 100644 index 1dcce081a..000000000 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/cta-small.php +++ /dev/null @@ -1,25 +0,0 @@ - -
-
-
-

-
-
- -
-
-
diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/dashboard-status.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/dashboard-status.php index 48ab3841e..6c26e78cb 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/dashboard-status.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/dashboard-status.php @@ -5,12 +5,10 @@ * @since 3.5 * * @param array $data { - * @type bool $is_live_site Identifies if the current website is a live or local/staging one + * @type bool $is_live_site Identifies if the current website is a live or local/staging one. * @type string $container_class Flex container CSS class. - * @type string $label Content label. - * @type string $status_class CSS Class to display the status. - * @type string $status_text Text to display the subscription status. * @type bool $is_active Boolean identifying the activation status. + * @type array $items List of plan info rows, each with 'label', 'value', and 'class'. * } */ @@ -24,13 +22,17 @@
+
+
- - + + +
+
- +
diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/promote-notice.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/promote-notice.php deleted file mode 100644 index 93f7b9ac7..000000000 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/RocketCDN/views/promote-notice.php +++ /dev/null @@ -1,14 +0,0 @@ - -
-

-

-

-
diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/ServiceProvider.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/ServiceProvider.php index 4e3643696..4c1016487 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/ServiceProvider.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/ServiceProvider.php @@ -3,8 +3,19 @@ namespace WP_Rocket\Engine\CDN; +use WP_Rocket\Dependencies\League\Container\Argument\Literal\StringArgument; use WP_Rocket\Dependencies\League\Container\ServiceProvider\AbstractServiceProvider; use WP_Rocket\Engine\CDN\Admin\Subscriber as AdminSubscriber; +use WP_Rocket\Engine\CDN\Drivers\{ + Custom, + DriverFactory, + RocketCDNFree, + RocketCDNPaid +}; +use WP_Rocket\Engine\CDN\Render\{ + Controller as RenderController, + Subscriber as RenderSubscriber +}; /** * Service provider for WP Rocket CDN @@ -17,8 +28,18 @@ class ServiceProvider extends AbstractServiceProvider { */ protected $provides = [ 'cdn', + 'cdn_cname_validator', + 'cdn_context', 'cdn_subscriber', 'cdn_admin_subscriber', + 'cdn_render_controller', + 'cdn_render_subscriber', + 'cdn_driver_factory', + 'cdn_driver_free', + 'cdn_driver_paid', + 'cdn_driver_byocdn', + 'cdn_driver', + 'cache_controller', ]; /** @@ -38,15 +59,90 @@ public function provides( string $id ): bool { * @return void */ public function register(): void { + $this->getContainer()->add( 'cache_controller', Cache::class ) + ->addArgument( 'rocketcdn_query' ); + $this->getContainer()->addShared( 'cdn_cname_validator', CNAMEValidator::class ); $this->getContainer()->addShared( 'cdn', CDN::class ) - ->addArgument( 'options' ); + ->addArguments( + [ + 'options', + 'cdn_cname_validator', + 'cdn_context', + ] + ); + $this->getContainer()->addShared( 'cdn_context', Context::class ) + ->addArguments( + [ + 'options', + 'rocketcdn_subscription_controller', + ] + ); + + // Register individual drivers. + $this->getContainer()->add( + 'cdn_driver_free', + RocketCDNFree::class + )->addArgument( 'rocketcdn_query' ); + + $this->getContainer()->add( + 'cdn_driver_paid', + RocketCDNPaid::class + )->addArgument( 'options' ); + + $this->getContainer()->add( + 'cdn_driver_byocdn', + Custom::class + ); + + // Register Driver Factory. + $this->getContainer()->addShared( + 'cdn_driver_factory', + DriverFactory::class + ) + ->addArgument( $this->getContainer() ) + ->addArgument( 'cdn_context' ); + + // Register current active driver (resolved at runtime). + $this->getContainer()->add( + 'cdn_driver', + function () { + $factory = $this->getContainer()->get( 'cdn_driver_factory' ); + return $factory->create(); + } + ); + $this->getContainer()->addShared( 'cdn_subscriber', Subscriber::class ) ->addArguments( [ 'options', 'cdn', + 'options_api', + 'rocketcdn_subscription_controller', + 'cache_controller', + 'rocketcdn_query', + 'cdn_driver', + 'cdn_cname_validator', ] ); $this->getContainer()->addShared( 'cdn_admin_subscriber', AdminSubscriber::class ); + + // CDN Render controller. + $this->getContainer()->addShared( 'cdn_render_controller', RenderController::class ) + ->addArguments( + [ + 'beacon', + new StringArgument( rocket_get_constant( 'WP_ROCKET_PATH', '' ) . 'views/settings/' ), + 'cdn_context', + 'options', + 'rocketcdn_query', + 'rocketcdn_subscription_controller', + 'user', + 'cache_controller', + ] + ); + + // CDN Render subscriber. + $this->getContainer()->addShared( 'cdn_render_subscriber', RenderSubscriber::class ) + ->addArgument( 'cdn_render_controller' ); } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/CDN/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/CDN/Subscriber.php index 6603c9fc3..89b207d6e 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/CDN/Subscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/CDN/Subscriber.php @@ -1,7 +1,16 @@ options = $options; - $this->cdn = $cdn; + public function __construct( + Options_Data $options, + CDN $cdn, + Options $options_api, + SubscriptionController $subscription_controller, + Cache $cache, + RocketCDNQuery $query, + ?DriverInterface $driver = null, + ?CNAMEValidator $cname_validator = null + ) { + $this->options = $options; + $this->cdn = $cdn; + $this->options_api = $options_api; + $this->driver = $driver; + $this->subscription_controller = $subscription_controller; + $this->cache = $cache; + $this->query = $query; + $this->cname_validator = $cname_validator; } /** @@ -44,20 +118,30 @@ public function __construct( Options_Data $options, CDN $cdn ) { */ public static function get_subscribed_events() { return [ - 'rocket_buffer' => [ + 'rocket_buffer' => [ [ 'rewrite', 2 ], [ 'rewrite_srcset', 3 ], ], - 'rocket_css_content' => 'rewrite_css_properties', - 'rocket_usedcss_content' => 'rewrite_css_properties', - 'rocket_cdn_hosts' => [ 'get_cdn_hosts', 10, 2 ], - 'rocket_dns_prefetch' => 'add_dns_prefetch_cdn', - 'rocket_facebook_sdk_url' => 'add_cdn_url', - 'rocket_css_url' => [ 'add_cdn_url', 10, 2 ], - 'rocket_js_url' => [ 'add_cdn_url', 10, 2 ], - 'rocket_asset_url' => [ 'maybe_replace_url', 10, 2 ], - 'wp_resource_hints' => [ 'add_preconnect_cdn', 10, 2 ], - 'rocket_font_url' => [ 'add_cdn_url', 10, 2 ], + 'rocket_css_content' => 'rewrite_css_properties', + 'rocket_usedcss_content' => 'rewrite_css_properties', + 'rocket_cdn_hosts' => [ 'get_cdn_hosts', 10, 2 ], + 'rocket_dns_prefetch' => 'add_dns_prefetch_cdn', + 'rocket_facebook_sdk_url' => 'add_cdn_url', + 'rocket_css_url' => [ 'add_cdn_url', 10, 2 ], + 'rocket_js_url' => [ 'add_cdn_url', 10, 2 ], + 'rocket_asset_url' => [ 'maybe_replace_url', 10, 2 ], + 'wp_resource_hints' => [ 'add_preconnect_cdn', 10, 2 ], + 'rocket_font_url' => [ 'add_cdn_url', 10, 2 ], + 'rocket_first_install_options' => 'add_cdn_type_option', + 'wp_rocket_upgrade' => [ + [ 'on_update_add_cdn_type_option', 10, 2 ], + ], + 'rocketcdn_free_plan_subscription_expired' => [ 'clear_free_plan_pages_cache' ], + 'update_option_wp_rocket_settings' => [ + [ 'maybe_clear_cache', 10, 2 ], + [ 'maybe_clear_cname_cache', 10, 2 ], + ], + 'get_rocket_option_cdn' => 'apply_pause_on_rocketcdn_only', ]; } @@ -105,6 +189,10 @@ public function rewrite_srcset( $html ) { * @return string */ public function rewrite_css_properties( $content ) { + if ( ! $this->cdn_driver_should_rewrite_url() ) { + return $content; + } + /** * Filters the application of the CDN on CSS properties * @@ -122,6 +210,10 @@ public function rewrite_css_properties( $content ) { return $content; } + if ( ! $this->subscription_controller->has_active_subscription() ) { + return $content; + } + return $this->cdn->rewrite_css_properties( $content ); } @@ -189,6 +281,10 @@ public function add_dns_prefetch_cdn( $domains ) { * @return string */ public function add_cdn_url( $url, $original_url = '' ) { + if ( ! $this->is_allowed() ) { + return $url; + } + if ( ! empty( $original_url ) ) { if ( $this->cdn->is_excluded( $original_url ) ) { return $url; @@ -335,6 +431,10 @@ private function is_allowed() { return false; } + if ( ! $this->cdn_driver_should_rewrite_url() ) { + return false; + } + return true; } @@ -364,4 +464,173 @@ private function can_insert_resource_hints(): bool { */ return wpm_apply_filters_typed( 'boolean', 'rocket_cdn_insert_resource_hints', true ); } + + /** + * Adds cdn_type option to WP Rocket options. + * + * @since 3.22 + * + * @param array $options WP Rocket options array. + * + * @return array + */ + public function add_cdn_type_option( array $options ) { + $options = (array) $options; + + $options['cdn_type'] = 'rocketcdn'; + + return $options; + } + + /** + * Add cdn_type option when upgrading from a version older than 3.22 + * + * @since 3.22 + * + * @param string $new_version New plugin version. + * @param string $old_version Previously installed plugin version. + * + * @return void + */ + public function on_update_add_cdn_type_option( string $new_version, string $old_version ) { + // Bail early. + if ( version_compare( $old_version, '3.22', '>=' ) ) { + return; + } + + $has_active_subscription = $this->subscription_controller->has_active_subscription(); + $cdn_type = 'rocketcdn'; + // Check if a CNAME is saved, cdn is enabled, and no RocketCDN subscription, then default to byocdn. + if ( + ! $has_active_subscription + && + ! empty( $this->options->get( 'cdn_cnames', [] ) ) && $this->is_cdn_enabled() + ) { + $cdn_type = 'byocdn'; + } + + $current_options = $this->options_api->get( 'settings', [] ); + $current_options['cdn_type'] = $cdn_type; + if ( ! $has_active_subscription ) { + $current_options['cdn'] = 1; + } + + $this->options_api->set( 'settings', $current_options ); + } + + /** + * Clear cached pages from free plan when subscription expired. + * + * @return void + */ + public function clear_free_plan_pages_cache(): void { + if ( null === $this->query ) { + return; + } + + $pages = $this->query->get_all(); + + foreach ( $pages as $page ) { + if ( empty( $page->url ) ) { + continue; + } + + if ( Utils::is_home( $page->url ) ) { + rocket_clean_home(); + continue; + } + + rocket_clean_files( [ $page->url ] ); + } + } + + /** + * Determines if the CDN driver should rewrite the current URL. + * + * Checks if a CDN driver is set and whether it allows rewriting of the current URL. + * + * @return bool True if the URL should be rewritten by the CDN driver, false otherwise. + */ + private function cdn_driver_should_rewrite_url(): bool { + if ( $this->driver && ! $this->driver->should_rewrite_url( $this->get_current_url() ) ) { + return false; + } + + return true; + } + + /** + * Clear cache when cdn_type (driver) is changed. + * + * @param mixed $old_value Old option value. + * @param mixed $value New option value. + * + * @return void + */ + public function maybe_clear_cache( $old_value, $value ) { + $cdn_changed = Utils::did_setting_change( 'cdn', $old_value, $value ); + $cdn_type_changed = Utils::did_setting_change( 'cdn_type', $old_value, $value ); + + // Detect cdn status for pause/resume and cdn_type change. + if ( ! $cdn_changed && ! $cdn_type_changed ) { + return; + } + + // Clear cache if cdn is paused/resumed or cdn_type is changed. + + // CDN is paused/resumed. + if ( $cdn_changed ) { + // Clear specific pages' cache only when it's free rocketcdn. + if ( $this->subscription_controller->is_free() ) { + $this->cache->clear_rocketcdn_free_pages_cache(); + return; + } + + // Clear whole cache in case of paid rocketcdn. + $this->cache->clear_all_cache(); + return; + } + + // CDN type is changed, Clear whole cache. + $this->cache->clear_all_cache(); + } + + /** + * Clears CNAME validation transients when CDN settings are saved. + * + * Runs on both old and new CNAME lists so no stale cache entry survives a + * settings update regardless of whether CNAMEs were added or removed. + * + * @since 3.22.0.3 + * + * @param mixed $old_value Previous option value. + * @param mixed $value New option value. + * @return void + */ + public function maybe_clear_cname_cache( $old_value, $value ): void { + if ( null === $this->cname_validator ) { + return; + } + + $old_cnames = is_array( $old_value ) && ! empty( $old_value['cdn_cnames'] ) ? (array) $old_value['cdn_cnames'] : []; + $new_cnames = is_array( $value ) && ! empty( $value['cdn_cnames'] ) ? (array) $value['cdn_cnames'] : []; + $all_cnames = array_filter( array_unique( array_merge( $old_cnames, $new_cnames ) ), 'is_string' ); + + $this->cname_validator->clear_validation_cache( $all_cnames ); + } + + /** + * Apply the pause of CDN on RocketCDN only. + * + * @param bool $cdn The current CDN status. + * + * @return bool + */ + public function apply_pause_on_rocketcdn_only( $cdn ) { + if ( is_admin() ) { + return $cdn; + } + + return $cdn || 'rocketcdn' !== $this->options->get( 'cdn_type' ); + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Cache/Abilities/ClearUrlCache.php b/web/app/plugins/wp-rocket/inc/Engine/Cache/Abilities/ClearUrlCache.php new file mode 100644 index 000000000..f40cdfa17 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Cache/Abilities/ClearUrlCache.php @@ -0,0 +1,161 @@ + __( 'Clear URL cache', 'rocket' ), + 'description' => _x( + 'Clears WP Rocket cache for specific URL(s), not a full purge. Before calling: list the URL(s), ask "Confirm you want to clear cache for this url?" (use "these" if plural), and wait for a yes in the same turn. On success (success: true, error empty): say the cache was cleared and will regenerate on next visit. On failure: error is an object of url => reason; report each failed URL with its own reason, not a generic message.', + 'Ability description', + 'rocket' + ), + 'category' => 'wp-rocket-cache', + 'input_schema' => [ + 'type' => 'object', + 'properties' => [ + 'url' => [ + 'anyOf' => [ + [ + 'type' => 'string', + 'format' => 'uri', + ], + [ + 'type' => 'array', + 'items' => [ + 'type' => 'string', + 'format' => 'uri', + ], + 'minItems' => 1, + ], + ], + 'description' => __( 'A single URL or an array of URLs whose cache should be purged.', 'rocket' ), + ], + ], + 'required' => [ 'url' ], + ], + 'output_schema' => [ + 'type' => 'object', + 'properties' => [ + 'success' => [ + 'type' => 'boolean', + 'description' => __( 'Indicates whether the url cache was succesfully purged', 'rocket' ), + ], + 'error' => [ + 'type' => 'object', + 'additionalProperties' => [ + 'type' => 'string', + ], + 'description' => __( 'Object keyed by URL for each URL whose cache could not be purged, with the reason as the value.', 'rocket' ), + ], + ], + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'mcp' => [ + 'public' => true, + ], + 'show_in_rest' => true, + 'annotations' => [ + 'readonly' => false, + 'destructive' => false, + 'idempotent' => false, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to execute this ability. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to purge the cache for one or more URLs. + * + * @param array $input The input data containing a single URL string or an array of URL strings to purge. + * + * @return array + */ + public function execute( $input = null ): array { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/clear-url-cache', + 'context' => 'wp_plugin_mcp', + ] + ); + + $urls = $input['url']; + $urls = is_array( $urls ) ? array_unique( $urls ) : [ $urls ]; + + $valid_urls = []; + $error = []; + $site_host = wp_parse_url( home_url(), PHP_URL_HOST ); + + foreach ( $urls as $url ) { + // Check if url format is valid. + if ( false === filter_var( $url, FILTER_VALIDATE_URL ) ) { + $error[ $url ] = __( 'URL format is invalid.', 'rocket' ); + continue; + } + + // Check if url belongs to site. + if ( wp_parse_url( $url, PHP_URL_HOST ) !== $site_host ) { + $error[ $url ] = __( 'URL does not belong to this site.', 'rocket' ); + continue; + } + + // Check if url is from admin. + if ( strpos( $url, admin_url() ) === 0 ) { + $error[ $url ] = __( 'URL is an admin page.', 'rocket' ); + continue; + } + + // Check if a url is home and clean separately. + if ( trailingslashit( $url ) === trailingslashit( home_url() ) ) { + rocket_clean_home(); + + $cleaned_urls[ $url ] = true; + continue; + } + + $valid_urls[] = $url; + } + + $cleaned_urls = ! empty( $valid_urls ) ? rocket_clean_files( $valid_urls ) : []; + + foreach ( $cleaned_urls as $url => $cleared ) { + if ( ! $cleared ) { + $error[ $url ] = __( 'No cache found for this URL, or a file permission issue prevented cache clearing.', 'rocket' ); + } + } + + return [ + 'success' => empty( $error ), + 'error' => $error, + ]; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Cache/Abilities/ClearWebsiteCache.php b/web/app/plugins/wp-rocket/inc/Engine/Cache/Abilities/ClearWebsiteCache.php new file mode 100644 index 000000000..8aaae3410 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Cache/Abilities/ClearWebsiteCache.php @@ -0,0 +1,105 @@ + __( 'Clear website cache', 'rocket' ), + 'description' => _x( + 'Clears the full WP Rocket cache for the entire website. Use this when the user asks to clear, purge, or refresh all cached pages for the site. This is a site-wide destructive cache action. Do not use it for a single page; use clear-url-cache instead. Confirmation is required before calling', + 'Ability description', + 'rocket' + ), + 'category' => 'wp-rocket-cache', + 'input_schema' => [], + 'output_schema' => [ + 'type' => 'object', + 'properties' => [ + 'success' => [ + 'type' => 'boolean', + 'description' => __( 'Indicates whether the website cache was successfully cleared', 'rocket' ), + ], + 'error' => [ + 'type' => 'string', + 'description' => __( 'Reason the cache could not be cleared, empty on success.', 'rocket' ), + ], + ], + ], + 'execute_callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'check_permissions' ], + 'meta' => [ + 'mcp' => [ + 'public' => true, + ], + 'show_in_rest' => true, + 'annotations' => [ + 'readonly' => false, + 'destructive' => false, + 'idempotent' => false, + ], + ], + ] + ); + } + + /** + * Checks if the current user has permission to execute this ability. + * + * @return bool + */ + public function check_permissions(): bool { + return current_user_can( 'rocket_manage_options' ); + } + + /** + * Executes the ability to clear website cache. + * + * @return array + */ + public function execute(): array { + $this->track_event( + 'MCP Ability Executed', + [ + 'ability' => 'wp-rocket/clear-website-cache', + 'context' => 'wp_plugin_mcp', + ] + ); + + if ( rocket_is_importing() ) { + return [ + 'success' => false, + 'error' => __( 'Unable to clear cache: a content import is currently in progress.', 'rocket' ), + ]; + } + + $result = rocket_clean_domain(); + + if ( false === $result ) { + return [ + 'success' => false, + 'error' => __( 'Unable to clear cache: no cacheable URLs were found for this site.', 'rocket' ), + ]; + } + + return [ + 'success' => true, + 'error' => '', + ]; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Cache/Abilities/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/Cache/Abilities/Subscriber.php new file mode 100644 index 000000000..e6b0405bd --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Cache/Abilities/Subscriber.php @@ -0,0 +1,89 @@ +clear_url_cache = $clear_url_cache; + $this->abilities_context = $abilities_context; + $this->clear_website_cache = $clear_website_cache; + } + + + /** + * Returns an array of events this subscriber wants to listen to. + * + * @return array + */ + public static function get_subscribed_events(): array { + return [ + 'wp_abilities_api_init' => 'register_clear_cache_ability', + 'wp_abilities_api_categories_init' => 'register_cache_category', + ]; + } + + /** + * Registers the ability to clear website/url cache. + */ + public function register_clear_cache_ability() { + if ( ! $this->abilities_context->is_enabled() ) { + return; + } + + $this->clear_url_cache->register(); + $this->clear_website_cache->register(); + } + + /** + * Registers WP Rocket Cache ability category. + */ + public function register_cache_category() { + if ( ! $this->abilities_context->is_enabled() ) { + return; + } + + if ( ! function_exists( 'wp_register_ability_category' ) ) { + return; + } + + wp_register_ability_category( + 'wp-rocket-cache', + [ + 'label' => __( 'WP Rocket Cache', 'rocket' ), + 'description' => __( 'Abilities related to WP Rocket Cache.', 'rocket' ), + ] + ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Cache/ServiceProvider.php b/web/app/plugins/wp-rocket/inc/Engine/Cache/ServiceProvider.php index 27e3b3e2a..02c975f34 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Cache/ServiceProvider.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Cache/ServiceProvider.php @@ -10,6 +10,11 @@ use WP_Rocket\Engine\Preload\Database\Queries\Cache as CacheQuery; use WP_Rocket\Engine\Cache\Config\ConfigSubscriber; use WP_Rocket\Engine\Cache\UrlValidation\{ TaxonomySubscriber, PostSubscriber }; +use WP_Rocket\Engine\Cache\Abilities\{ + ClearUrlCache as ClearUrlCacheAbility, + ClearWebsiteCache as ClearWebsiteCacheAbility, + Subscriber as CacheAbilitiesSubscriber +}; /** * Service Provider for cache subscribers @@ -32,6 +37,9 @@ class ServiceProvider extends AbstractServiceProvider { 'cache_config', 'taxonomy_subscriber', 'post_subscriber', + 'cache_abilities_clear_url_cache', + 'cache_abilities_clear_website_cache', + 'cache_abilities_subscriber', ]; /** @@ -104,5 +112,15 @@ public function register(): void { ); $this->getContainer()->addShared( 'taxonomy_subscriber', TaxonomySubscriber::class ); $this->getContainer()->addShared( 'post_subscriber', PostSubscriber::class ); + $this->getContainer()->add( 'cache_abilities_clear_url_cache', ClearUrlCacheAbility::class ); + $this->getContainer()->add( 'cache_abilities_clear_website_cache', ClearWebsiteCacheAbility::class ); + $this->getContainer()->addShared( 'cache_abilities_subscriber', CacheAbilitiesSubscriber::class ) + ->addArguments( + [ + 'cache_abilities_clear_url_cache', + 'cache_abilities_clear_website_cache', + 'abilities_context', + ] + ); } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Common/JobManager/APIHandler/AbstractSafeAPIClient.php b/web/app/plugins/wp-rocket/inc/Engine/Common/JobManager/APIHandler/AbstractSafeAPIClient.php index d905dd953..c4be0ef8a 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Common/JobManager/APIHandler/AbstractSafeAPIClient.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Common/JobManager/APIHandler/AbstractSafeAPIClient.php @@ -62,6 +62,9 @@ public function send_post_request( $params = [], $safe = false ) { */ private function send_request( $method, $params = [], $safe = false ) { $api_url = $this->get_api_url(); + if ( empty( $api_url ) ) { + return new WP_Error( 404, 'Empty Url.' ); + } $transient_key = $this->get_transient_key(); if ( get_transient( $transient_key . '_timeout_active' ) ) { @@ -79,10 +82,14 @@ private function send_request( $method, $params = [], $safe = false ) { return $response; } - $body = wp_remote_retrieve_body( $response ); - if ( empty( $body ) || ( ! empty( $response['response']['code'] ) && ! in_array( $response['response']['code'], [ 200, 202 ], true ) ) ) { + if ( ! $this->valid_response_code( $response ) ) { + $this->set_timeout_transients( $previous_expiration ); + return new WP_Error( 500, 'Not valid response code.' ); + } + + if ( ! $this->valid_response_body( $response ) ) { $this->set_timeout_transients( $previous_expiration ); - return new WP_Error( 500, 'Not valid response.' ); + return new WP_Error( 500, 'Not valid response body.' ); } $this->delete_timeout_transients(); @@ -150,4 +157,24 @@ private function send_remote_request( $api_url, $method, $params, $safe ) { return new WP_Error( 400, 'Not valid request type.' ); } + + /** + * Validate response code. + * + * @param array $response Response object. + * @return bool + */ + protected function valid_response_code( $response ) { + return empty( $response['response']['code'] ) || in_array( $response['response']['code'], [ 200, 202 ], true ); + } + + /** + * Validate response body. + * + * @param array $response Response object. + * @return bool + */ + protected function valid_response_body( $response ) { + return ! empty( wp_remote_retrieve_body( $response ) ); + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Common/JobManager/JobProcessor.php b/web/app/plugins/wp-rocket/inc/Engine/Common/JobManager/JobProcessor.php index 41222009d..f72732cb3 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Common/JobManager/JobProcessor.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Common/JobManager/JobProcessor.php @@ -96,16 +96,11 @@ public function process_pending_jobs() { '3.16', 'rocket_rucss_process_pending_jobs_start' ); - $this->logger::debug( 'RUCSS: Start processing pending jobs inside cron.' ); if ( ! $this->is_allowed() ) { - $this->logger::debug( 'Stop processing cron iteration for pending jobs.' ); - return; } - $this->logger::debug( 'Start processing pending jobs inside cron.' ); - // Get some items from the DB with status=pending & job_id isn't empty. /** @@ -161,10 +156,8 @@ public function process_pending_jobs() { * @return void */ public function check_job_status( string $url, bool $is_mobile, string $optimization_type ) { - $row_details = $this->get_single_job( $url, $is_mobile, $optimization_type ); if ( ! is_object( $row_details ) ) { - $this->logger::debug( 'Url - ' . $url . ' not found for is_mobile - ' . (int) $is_mobile ); // Nothing in DB, bailout. return; } @@ -227,8 +220,6 @@ public function check_job_status( string $url, bool $is_mobile, string $optimiza * @return void */ public function process_on_submit_jobs() { - $this->logger::debug( 'Start processing on submit jobs for adding jobs to queue.' ); - /** * Fires at the start of the process on submit jobs. * @@ -242,8 +233,6 @@ public function process_on_submit_jobs() { ); if ( ! $this->is_allowed() ) { - $this->logger::debug( 'Stop processing cron iteration for to-submit jobs.' ); - return; } @@ -309,7 +298,6 @@ public function process_on_submit_jobs() { ); } - $this->logger::debug( 'End processing on submit jobs for adding jobs to queue.' ); /** * Fires at the end of the process pending jobs. * diff --git a/web/app/plugins/wp-rocket/inc/Engine/Common/Page/PageHandlerTrait.php b/web/app/plugins/wp-rocket/inc/Engine/Common/Page/PageHandlerTrait.php new file mode 100644 index 000000000..b2a537d69 --- /dev/null +++ b/web/app/plugins/wp-rocket/inc/Engine/Common/Page/PageHandlerTrait.php @@ -0,0 +1,160 @@ + tag in the given HTML, decodes any HTML entities, + * strips all tags, sanitizes the text, and then trims the title at common separators + * (such as " | ", " - ", " – ", " » ") to return a clean, concise page title. + * + * @param string $html The HTML content from which to extract the page title. + * + * @return string The sanitized and trimmed page title, or an empty string if not found. + */ + public function get_page_title( string $html ): string { + $title = ''; + + if ( empty( $html ) ) { + return $title; + } + + // Extract title from title tag. + if ( ! preg_match( '/]*>(.*?)<\/title>/is', $html, $matches ) ) { + return $title; + } + + // Clean up and sanitize the title. + $title = html_entity_decode( trim( $matches[1] ), ENT_QUOTES, 'UTF-8' ); + + if ( empty( $title ) ) { + return $title; + } + + $title = wp_strip_all_tags( $title ); + $title = sanitize_text_field( $title ); + + return $title; + } + + + /** + * Fetches the HTML content of a given URL using a custom user agent. + * + * Performs a remote GET request to the specified URL, simulating a mobile browser user agent, + * and returns the response body if the request is successful (HTTP 200). + * + * @param string $url The URL to fetch the HTML content from. + * + * @return string|false The HTML content of the page on success, or false on failure. + */ + public function get_page_content( string $url ) { + $user_agent = 'WP Rocket/Fetch Page Buffer for Performance Monitoring Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'; + $args = [ + 'user-agent' => $user_agent, + 'timeout' => 60, + ]; + + $response = wp_safe_remote_get( $url, $args ); + + if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { + return false; + } + + return wp_remote_retrieve_body( $response ); + } + + /** + * Validates a given URL for performance monitoring eligibility. + * + * @param string $url The URL to validate. + * + * @return array { + * @type bool $error Whether an error occurred during validation. + * @type string $message The error message, or an empty string if no error. + * @type string $processed_url The URL with protocol added if validation passes. + * } + */ + protected function get_page_url_validation_payload( string $url ): array { + $payload = [ + 'error' => false, + 'message' => '', + 'processed_url' => '', + 'data' => [ + 'status' => 400, + ], + ]; + + // Validate that url is not empty. + if ( '' === $url ) { + $payload['error'] = true; + $payload['message'] = 'No url provided.'; + + return $payload; + } + + // Check if URL has protocol, add if needed. + $url = rocket_add_url_protocol( $url ); + $payload['processed_url'] = $url; + + $response = $this->get_page_content( $url ); + + if ( ! $response ) { + $payload['error'] = true; + $payload['message'] = 'Url does not resolve to a valid page.'; + + return $payload; + } + + // check if url is not from admin. + if ( strpos( $url, admin_url() ) === 0 ) { + $payload['error'] = true; + $payload['message'] = 'Url is an admin page.'; + + return $payload; + } + + // Fetch url body and send to payload. + $payload['message'] = $response; + + return $payload; + } + + /** + * Normalizes percent-encoding in URL path segments so that raw unicode and + * already-encoded forms produce the same canonical string. + * + * @param string $url URL to normalize. + * + * @return string + */ + public function normalize_url_path_encoding( string $url ): string { + $parsed = wp_parse_url( $url ); + + if ( empty( $parsed['path'] ) ) { + return $url; + } + + $encoded_path = implode( + '/', + array_map( + static function ( string $segment ): string { + return rawurlencode( rawurldecode( $segment ) ); + }, + explode( '/', $parsed['path'] ) + ) + ); + + $result = isset( $parsed['scheme'] ) ? $parsed['scheme'] . '://' : ''; + $result .= $parsed['host'] ?? ''; + $result .= isset( $parsed['port'] ) ? ':' . $parsed['port'] : ''; + $result .= $encoded_path; + $result .= isset( $parsed['query'] ) ? '?' . $parsed['query'] : ''; + $result .= isset( $parsed['fragment'] ) ? '#' . $parsed['fragment'] : ''; + + return $result; + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/Common/PerformanceHints/Admin/Controller.php b/web/app/plugins/wp-rocket/inc/Engine/Common/PerformanceHints/Admin/Controller.php index a0f674ced..44eed120d 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Common/PerformanceHints/Admin/Controller.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Common/PerformanceHints/Admin/Controller.php @@ -205,4 +205,26 @@ private function delete_by_url( string $url ) { $factory->queries()->delete_by_url( untrailingslashit( $url ) ); } } + + /** + * Clean performance hints when changing the logo. + * + * @param mixed $value The new value of the theme modification. + * @param mixed $old_value The old value of the theme modification. + * + * @return mixed + */ + public function clean_on_logo_change( $value, $old_value ) { + if ( ! $this->is_allowed() ) { + return $value; + } + + if ( $value === $old_value ) { + return $value; + } + + $this->truncate_tables(); + + return $value; + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Common/PerformanceHints/Admin/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/Common/PerformanceHints/Admin/Subscriber.php index 2c6449c9a..e0317ac41 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Common/PerformanceHints/Admin/Subscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Common/PerformanceHints/Admin/Subscriber.php @@ -79,6 +79,8 @@ public static function get_subscribed_events(): array { 'rocket_dashboard_actions' => 'display_dashboard_button', 'admin_post_rocket_clean_performance_hints' => 'clean_performance_hints', 'admin_post_rocket_clean_performance_hints_url' => 'clean_url_performance_hints', + 'pre_set_theme_mod_custom_logo' => [ 'clean_performance_hints_on_logo_change', 10, 2 ], + 'pre_update_option_site_logo' => [ 'clean_performance_hints_on_logo_change', 10, 2 ], ]; } @@ -202,4 +204,16 @@ public function clean_url_performance_hints(): void { public function clean_performance_hint_result(): void { $this->notices->clean_performance_hint_result(); } + + /** + * Clean performance hints when changing the logo. + * + * @param mixed $value The new value of the theme modification. + * @param mixed $old_value The old value of the theme modification. + * + * @return mixed + */ + public function clean_performance_hints_on_logo_change( $value, $old_value ) { + return $this->controller->clean_on_logo_change( $value, $old_value ); + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Common/Queue/RUCSSQueueRunner.php b/web/app/plugins/wp-rocket/inc/Engine/Common/Queue/RUCSSQueueRunner.php index 2af712f13..0620799a0 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Common/Queue/RUCSSQueueRunner.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Common/Queue/RUCSSQueueRunner.php @@ -223,7 +223,7 @@ protected function do_batch( $size = 100, $context = '' ) { $this->reset_group(); return $processed_actions; } catch ( \Exception $exception ) { - Logger::debug( $exception->getMessage() ); + Logger::error( $exception->getMessage() ); $this->reset_group(); return 0; } diff --git a/web/app/plugins/wp-rocket/inc/Engine/Common/Utils.php b/web/app/plugins/wp-rocket/inc/Engine/Common/Utils.php index aeb5bf310..7f0484d8c 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/Common/Utils.php +++ b/web/app/plugins/wp-rocket/inc/Engine/Common/Utils.php @@ -125,4 +125,130 @@ public static function process_deleted_cache_urls( array $deleted, ?callable $ca return $urls; } + + /** + * Display an update notice when the plugin is updated. + * + * @param array $notice_info Notice information {. + * @type string $new version New Version of the plugin. + * @type string $previous_version Previous version of the plugin. + * @type string $message Notice message. + * @type string $action Notice action. + * @type string $dismiss_message Dismiss message button title. + * @type string $dismiss_button Dismiss button. + * } + * + * @param bool $display_general Whether to display the notice on all WP or only WPR dashboard. + * @return void + */ + public static function display_update_notice( array $notice_info, $display_general = false ): void { + $previous_version = $notice_info['previous_version'] ?? ''; + $status = $notice_info['status'] ?? 'info'; + $version = $notice_info['new_version'] ?? ''; + + // If previous_version is set, this is an upgrade — check version compatibility before displaying the notice. + if ( ! empty( $previous_version ) ) { + if ( version_compare( $previous_version, $version, '>=' ) ) { + return; + } + } + + if ( ! current_user_can( 'rocket_manage_options' ) ) { + return; + } + + if ( ! $display_general && 'settings_page_wprocket' !== get_current_screen()->id ) { + return; + } + + $boxes = get_user_meta( get_current_user_id(), 'rocket_boxes', true ); + + if ( in_array( $notice_info['dismiss_button'], (array) $boxes, true ) ) { + return; + } + + if ( $notice_info['track_event'] ?? false ) { + /** + * Fires after the RocketCDN notice is displayed, allowing to track the impression of the notice. + * + * @param string $dismiss_button The notice button identifier. + */ + do_action( 'rocket_notice_displayed', $notice_info['dismiss_button'] ); + } + + $notice_id = 'rocket-notice-' . sanitize_html_class( $notice_info['dismiss_button'] ); + + rocket_notice_html( + [ + 'id' => $notice_id, + 'status' => $status, + 'dismissible' => 'is-dismissible', + 'message' => $notice_info['message'], + 'action' => $notice_info['action'], + 'dismiss_button' => $notice_info['dismiss_button'], + 'dismiss_button_message' => $notice_info['dismiss_message'], + 'dismiss_button_class' => 'button button-secondary', + ] + ); + + $nonce = wp_create_nonce( 'rocket_ignore_' . $notice_info['dismiss_button'] ); + ?> + + '$', + 'EUR' => '€', + ]; + + /** + * Get currency symbol from currency code. + * + * @param string $currency Currency code (EUR|USD). + * @return string Currency symbol (€|$). + */ + public static function get_symbol( string $currency ): string { + $currency = strtoupper( trim( $currency ) ); + + if ( ! isset( self::CURRENCY_SYMBOLS[ $currency ] ) ) { + return self::CURRENCY_SYMBOLS[ self::DEFAULT_CURRENCY ]; + } + + return self::CURRENCY_SYMBOLS[ $currency ]; + } + + /** + * Format price with currency symbol. + * + * @param float|string $price Price. + * @param string $currency Currency string. + * @param string $wrap_span Wraps price components in span tags for styling: + * - Empty string: not to wrap. + * - price: wrap price only. + * - currency: wrap currency symbol only. + * - both: wrap both price and currency symbol individually. + * @param array $span_classes Span classes. + * @param bool $with_space With space between currency and price or not, default with no space. + * + * @return string + */ + public static function format_price_with_currency_symbol( $price, string $currency, string $wrap_span = '', array $span_classes = [], $with_space = false ): string { + $currency_symbol = self::get_symbol( $currency ); + switch ( $wrap_span ) { + case 'both': + $price = self::wrap_span( $price, $span_classes['price'] ?? '' ); + $currency_symbol = self::wrap_span( $currency_symbol, $span_classes['currency'] ?? '' ); + break; + case 'price': + $price = self::wrap_span( $price, $span_classes['price'] ?? '' ); + break; + case 'currency': + $currency_symbol = self::wrap_span( $currency_symbol, $span_classes['currency'] ?? '' ); + } + + if ( self::is_euro( $currency ) ) { + return $price . ( $with_space ? ' ' : '' ) . $currency_symbol; + } + return $currency_symbol . ( $with_space ? ' ' : '' ) . $price; + } + + /** + * Check if currency is euro or not. + * + * @param string $currency Currency to be tested. + * @return bool + */ + public static function is_euro( $currency ): bool { + return 'EUR' === $currency; + } + + /** + * Wrap a string in a span tag. + * + * @param int|float|string $item Item can be string, float, or integer. + * @param string $classnames Class attribute. + * @return string + */ + private static function wrap_span( $item, $classnames = '' ): string { + return sprintf( '%s', $classnames, $item ); + } +} diff --git a/web/app/plugins/wp-rocket/inc/Engine/License/API/User.php b/web/app/plugins/wp-rocket/inc/Engine/License/API/User.php index 66a25dee2..dfc799a4a 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/License/API/User.php +++ b/web/app/plugins/wp-rocket/inc/Engine/License/API/User.php @@ -547,6 +547,23 @@ public function ban_reason() { return $this->user->licence->plugin_updates_ban_reason ?? ''; } + /** + * Checks if the current website is a reseller account whose license was specifically banned. + * + * This is the single source of truth for "reseller-banned" state, combining reseller + * scoping with the specific `BANNED_WEBSITE` ban reason so it is not confused with + * other revocation causes (non-payment, fraud, chargeback, etc.). + * + * @since 3.23.1 + * + * @return bool + */ + public function is_reseller_license_banned(): bool { + return $this->is_reseller_account() + && $this->is_revoked() + && 'BANNED_WEBSITE' === $this->ban_reason(); + } + /** * Checks if plugin updates are available. * @@ -610,4 +627,26 @@ private function get_blocked_reason_text( $reason_code ) { } return $reasons[ $reason_code ]; } + + /** + * Get currency from user data. + * + * @return string + */ + public function get_currency() { + return $this->user->currency ?? 'USD'; + } + + /** + * Gets the user rocketcdn free url. + * + * @return string + */ + public function get_rocketcdn_free_url() { + if ( ! isset( $this->user->rocketcdn->cdn_free_url ) ) { + return ''; + } + + return (string) $this->user->rocketcdn->cdn_free_url; + } } diff --git a/web/app/plugins/wp-rocket/inc/Engine/License/Renewal.php b/web/app/plugins/wp-rocket/inc/Engine/License/Renewal.php index 0940c045f..acef09a1f 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/License/Renewal.php +++ b/web/app/plugins/wp-rocket/inc/Engine/License/Renewal.php @@ -5,6 +5,7 @@ use WP_Rocket\Abstract_Render; use WP_Rocket\Admin\Options_Data; +use WP_Rocket\Engine\License\API\Currency; use WP_Rocket\Engine\License\API\Pricing; use WP_Rocket\Engine\License\API\User; @@ -186,7 +187,8 @@ public function display_renewal_expired_banner() { * @return array */ private function get_banner_data() { - $price = esc_html( '$' . number_format_i18n( $this->get_price(), 2 ) ); + $price = Currency::format_price_with_currency_symbol( number_format_i18n( $this->get_price(), 2 ), $this->user->get_currency() ) + . '! ' . esc_html__( '(excl. taxes)', 'rocket' ) . ''; $message = sprintf( // translators: %1$s = , %2$s = , %3$s = discount price. @@ -199,7 +201,7 @@ private function get_banner_data() { if ( $this->is_grandfather() ) { $message = sprintf( // translators: %1$s = , %2$s = discount percentage, %3$s = , %4$s = discount price. - esc_html__( 'Renew with a %1$s%2$s discount%3$s before it is too late, you will only pay %1$s%4$s%3$s!', 'rocket' ), + esc_html__( 'Renew with a %1$s%2$s discount%3$s before it is too late, you will only pay %1$s%4$s%3$s', 'rocket' ), '', esc_html( $this->get_discount_percent() . '%' ), '', @@ -644,7 +646,7 @@ public function add_expired_bubble( $menu_title ): string { return $menu_title; } - return $menu_title . ' !'; + return $menu_title . ' !'; } /** diff --git a/web/app/plugins/wp-rocket/inc/Engine/License/Subscriber.php b/web/app/plugins/wp-rocket/inc/Engine/License/Subscriber.php index d8f040e75..8c97004aa 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/License/Subscriber.php +++ b/web/app/plugins/wp-rocket/inc/Engine/License/Subscriber.php @@ -50,7 +50,7 @@ public static function get_subscribed_events() { 'rocket_dashboard_license_info' => 'display_upgrade_section', 'rocket_settings_page_footer' => 'display_upgrade_popin', 'rocket_menu_title' => [ - [ 'add_notification_bubble' ], + [ 'add_notification_bubble', 10, 2 ], [ 'add_notification_bubble_expired' ], [ 'maybe_add_revoked_bubble' ], ], @@ -106,10 +106,11 @@ public function display_upgrade_popin() { * @since 3.7.4 * * @param string $menu_title The text to be used for the menu. + * @param string $context Filter context. * @return string */ - public function add_notification_bubble( $menu_title ) { - return $this->upgrade->add_notification_bubble( $menu_title ); + public function add_notification_bubble( $menu_title, $context = 'adminmenu' ) { + return $this->upgrade->add_notification_bubble( $menu_title, $context ); } /** diff --git a/web/app/plugins/wp-rocket/inc/Engine/License/Upgrade.php b/web/app/plugins/wp-rocket/inc/Engine/License/Upgrade.php index 4f50f1f42..e6721e8b3 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/License/Upgrade.php +++ b/web/app/plugins/wp-rocket/inc/Engine/License/Upgrade.php @@ -3,6 +3,7 @@ namespace WP_Rocket\Engine\License; use WP_Rocket\Abstract_Render; +use WP_Rocket\Engine\License\API\Currency; use WP_Rocket\Engine\License\API\Pricing; use WP_Rocket\Engine\License\API\User; @@ -82,9 +83,14 @@ public function display_upgrade_popin() { * Adds the notification bubble to WP Rocket menu item when a promo is active * * @param string $menu_title Menu title. + * @param string $context Filter context. * @return string */ - public function add_notification_bubble( $menu_title ) { + public function add_notification_bubble( $menu_title, $context = 'adminmenu' ) { + if ( 'adminmenu' !== $context ) { + return $menu_title; + } + if ( ! $this->can_use_promo() ) { return $menu_title; } @@ -363,11 +369,24 @@ private function get_upgrade_choices() { * @return array */ private function get_generic_upgrade_data( $upgrade_item ) { + $currency = $this->user->get_currency(); + + $prices_classes = []; + if ( Currency::is_euro( $currency ) ) { + $prices_classes[] = 'wpr-with-euro'; + } + if ( $this->pricing->is_promo_active() ) { + $prices_classes[] = 'wpr-with-promo'; + } + $data = [ - 'name' => $upgrade_item->name, - 'price' => $this->pricing->is_promo_active() ? $upgrade_item->saving : $upgrade_item->regular_price, - 'websites' => $upgrade_item->websites, - 'upgrade_url' => $upgrade_item->upgrade_url, + 'name' => $upgrade_item->name, + 'price' => $this->pricing->is_promo_active() ? $upgrade_item->saving : $upgrade_item->regular_price, + 'websites' => $upgrade_item->websites, + 'upgrade_url' => $upgrade_item->upgrade_url, + 'currency' => $currency, + 'currency_symbol' => Currency::get_symbol( $currency ), + 'prices_classes' => ! empty( $prices_classes ) ? ' ' . implode( ' ', $prices_classes ) : '', ]; if ( $this->pricing->is_promo_active() ) { diff --git a/web/app/plugins/wp-rocket/inc/Engine/License/views/upgrade-item.php b/web/app/plugins/wp-rocket/inc/Engine/License/views/upgrade-item.php index 39956e612..f39d70249 100644 --- a/web/app/plugins/wp-rocket/inc/Engine/License/views/upgrade-item.php +++ b/web/app/plugins/wp-rocket/inc/Engine/License/views/upgrade-item.php @@ -5,6 +5,8 @@ * @var array $data */ +use WP_Rocket\Engine\License\API\Currency; + defined( 'ABSPATH' ) || exit; $rocket_initial_item = 'stacked' === $data['type'] ? reset( $data['item'] ) : $data['item']; @@ -12,18 +14,31 @@
- ', esc_html( $rocket_initial_item['saving'] ), '' ); - ?> + +

-
$ +
+ 'wpr-upgrade-price-value', + 'currency' => 'wpr-upgrade-price-symbol', + ], + true + ); + ?> - $ + + +
+