diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..e84f52b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,8 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: grav +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +custom: # Replace with a single custom sponsorship URL diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bd6943..ea3d604 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,119 @@ +# v1.6.16 +## 09/19/2019 + +1. [](#bugfix) + * Fixed Flex user creation if file storage is being used [#2444](https://github.com/getgrav/grav/issues/2444) + * Fixed `Badly encoded JSON data` warning when uploading files [#2663](https://github.com/getgrav/grav/issues/2663) + +# v1.6.15 +## 08/20/2019 + +1. [](#improved) + * Improved robots.txt [#2632](https://github.com/getgrav/grav/issues/2632) +1. [](#bugfix) + * Fixed broken markdown Twig tag [#2635](https://github.com/getgrav/grav/issues/2635) + * Force Symfony 4.2 in Grav 1.6 to remove a bunch of deprecated messages + +# v1.6.14 +## 08/18/2019 + +1. [](#bugfix) + * Actually include fix for `system\router.php` [#2627](https://github.com/getgrav/grav/issues/2627) + +# v1.6.13 +## 08/16/2019 + +1. [](#bugfix) + * Regression fix for `system\router.php` [#2627](https://github.com/getgrav/grav/issues/2627) + +# v1.6.12 +## 08/14/2019 + +1. [](#new) + * Added support for custom `FormFlash` save locations + * Added a new `Utils::arrayLower()` method for lowercasing arrays + * Support new GRAV_BASEDIR environment variable [#2541](https://github.com/getgrav/grav/pull/2541) + * Allow users to override plugin handler priorities [#2165](https://github.com/getgrav/grav/pull/2165) +1. [](#improved) + * Use new `Utils::getSupportedPageTypes()` to enforce `html,htm` at the front of the list [#2531](https://github.com/getgrav/grav/issues/2531) + * Updated vendor libraries + * Markdown filter is now page-aware so that it works with modular references [admin#1731](https://github.com/getgrav/grav-plugin-admin/issues/1731) + * Check of `GRAV_USER_INSTANCE` constant is already defined [#2621](https://github.com/getgrav/grav/pull/2621) +1. [](#bugfix) + * Fixed some potential issues when `$grav['user']` is not set + * Fixed error when calling `Media::add($name, null)` + * Fixed `url()` returning wrong path if using stream with grav root path in it, eg: `user-data://shop` when Grav is in `/shop` + * Fixed `url()` not returning a path to non-existing file (`user-data://shop` => `/user/data/shop`) if it is set to fail gracefully + * Fixed `url()` returning false on unknown streams, such as `ftp://domain.com`, they should be treated as external URL + * Fixed Flex User to have permissions to save and delete his own user + * Fixed new Flex User creation not being possible because of username could not be given + * Fixed fatal error 'Expiration date must be an integer, a DateInterval or null, "double" given' [#2529](https://github.com/getgrav/grav/issues/2529) + * Fixed non-existing Flex object having a bad media folder + * Fixed collections using `page@.self:` should allow modular pages if requested + * Fixed an error when trying to delete a file from non-existing Flex Object + * Fixed `FlexObject::exists()` failing sometimes just after the object has been saved + * Fixed CSV formatter not encoding strings with `"` and `,` properly + * Fixed var order in `Validation.php` [#2610](https://github.com/getgrav/grav/issues/2610) + +# v1.6.11 +## 06/21/2019 + +1. [](#new) + * Added `FormTrait::getAllFlashes()` method to get all the available form flash objects for the form + * Added creation and update timestamps to `FormFlash` objects +1. [](#improved) + * Added `FormFlashInterface`, changed constructor to take `$config` array +1. [](#bugfix) + * Fixed error in `ImageMedium::url()` if the image cache folder does not exist + * Fixed empty form flash name after file upload or form state update + * Fixed a bug in `Route::withParam()` method + * Fixed issue with `FormFlash` objects when there is no session initialized + +# v1.6.10 +## 06/14/2019 + +1. [](#improved) + * Added **page blueprints** to `YamlLinter` CLI and Admin reports + * Removed `Gitter` and `Slack` [#2502](https://github.com/getgrav/grav/issues/2502) + * Optimizations for Plugin/Theme loading + * Generalized markdown classes so they can be used outside of `Page` scope with a custom `Excerpts` class instance + * Change minimal port number to 0 (unix socket) [#2452](https://github.com/getgrav/grav/issues/2452) +1. [](#bugfix) + * Force question to install demo content in theme update [#2493](https://github.com/getgrav/grav/issues/2493) + * Fixed GPM errors from blueprints not being logged [#2505](https://github.com/getgrav/grav/issues/2505) + * Don't error when IP is invalid [#2507](https://github.com/getgrav/grav/issues/2507) + * Fixed regression with `bin/plugin` not listing the plugins available (1c725c0) + * Fixed bitwise operator in `TwigExtension::exifFunc()` [#2518](https://github.com/getgrav/grav/issues/2518) + * Fixed issue with lang prefix incorrectly identifying as admin [#2511](https://github.com/getgrav/grav/issues/2511) + * Fixed issue with `U0ils::pathPrefixedBYLanguageCode()` and trailing slash [#2510](https://github.com/getgrav/grav/issues/2511) + * Fixed regresssion issue of `Utils::Url()` not returning `false` on failure. Added new optional `fail_gracefully` 3rd attribute to return string that caused failure [#2524](https://github.com/getgrav/grav/issues/2524) + +# v1.6.9 +## 05/09/2019 + +1. [](#new) + * Added `Route::withoutParams()` methods + * Added `Pages::setCheckMethod()` method to override page configuration in Admin Plugin + * Added `Cache::clearCache('invalidate')` parameter for just invalidating the cache without deleting any cached files + * Made `UserCollectionInderface` to extend `Countable` to get the count of existing users +1. [](#improved) + * Flex admin: added default search options for flex objects + * Flex collection and object now fall back to the default template if template file doesn't exist + * Updated Vendor libraries including Twig 1.40.1 + * Updated language files from `https://crowdin.com/project/grav-core` +1. [](#bugfix) + * Fixed `$grav['route']` from being modified when the route instance gets modified + * Fixed Assets options array mixed with standalone priority [#2477](https://github.com/getgrav/grav/issues/2477) + * Fix for `avatar_url` provided by 3rd party providers + * Fixed non standard `lang` code lengths in `Utils` and `Session` detection + * Fixed saving a new object in Flex `SimpleStorage` + * Fixed exception in `Flex::getDirectories()` if the first parameter is set + * Output correct "Last Updated" in `bin/gpm info` command + * Checkbox getting interpreted as string, so created new `Validation::filterCheckbox()` + * Fixed backwards compatibility to `select` field with `selectize.create` set to true [git-sync#141](https://github.com/trilbymedia/grav-plugin-git-sync/issues/141) + * Fixed `YamlFormatter::decode()` to always return array [#2494](https://github.com/getgrav/grav/pull/2494) + * Fixed empty `$grav['request']->getAttribute('route')->getExtension()` + # v1.6.8 ## 04/23/2019 @@ -25,18 +141,18 @@ ## 04/17/2019 1. [](#new) - * `FormInterface` now implements `RenderInterface` - * Added new `FormInterface::getTask()` method which reads the task from `form.task` in the blueprint + * `FormInterface` now implements `RenderInterface` + * Added new `FormInterface::getTask()` method which reads the task from `form.task` in the blueprint 1. [](#improved) * Updated vendor libraries to latest 1. [](#bugfix) * Rollback `redirect_default_route` logic as it has issues with multi-lang [#2459](https://github.com/getgrav/grav/issues/2459) - * Fix potential issue with `|contains` Twig filter on PHP 7.3 + * Fix potential issue with `|contains` Twig filter on PHP 7.3 * Fixed bug in text field filtering: return empty string if value isn't a string or number [#2460](https://github.com/getgrav/grav/issues/2460) * Force Asset `priority` to be an integer and not throw error if invalid string passed [#2461](https://github.com/getgrav/grav/issues/2461) * Fixed bug in text field filtering: return empty string if value isn't a string or number * Fixed `FlexForm` missing getter methods for defining form variables - + # v1.6.5 ## 04/15/2019 @@ -97,7 +213,7 @@ * Added `Grav\Framework\Object\ObjectIndex` class * Added `Grav\Framework\Flex` classes * Added support for hiding form fields in blueprints by using dynamic property like `security@: admin.foobar`, `scope@: object` or `scope-ignore@: object` to any field - * New experimental **FlexObjects** powered `Users` for increased performance and capability (**disabled** by default) + * New experimental **FlexObjects** powered `Users` for increased performance and capability (**disabled** by default) * Added PSR-7 and PSR-15 classes * Added `Grav\Framework\DI\Container` class * Added `Grav\Framework\RequestHandler\RequestHandler` class @@ -173,7 +289,7 @@ * Added ability to reset `Page::metadata` to allow rebuilding from automatically generated values * Added back missing `page.types` field in system content configuration [admin#1612](https://github.com/getgrav/grav-plugin-admin/issues/1612) * Console commands: add method for invalidating cache - * Updated languages + * Updated languages * Improved `$page->forms()` call, added `$page->addForms()` * Updated languages from crowdin * Fixed `ImageMedium` constructor warning when file does not exist @@ -194,7 +310,7 @@ * Added apcu autoloader optimization * Additional helper methods in `Language`, `Languages`, and `LanguageCodes` classes * Call `onFatalException` event also on internal PHP errors - * Built-in PHP Webserver: log requests before handling them + * Built-in PHP Webserver: log requests before handling them * Added support for syslog and syslog facility logging (default: 'file') * Improved usability of `System` configuration blueprint with side-tabs 1. [](#bugfix) @@ -219,7 +335,7 @@ * Fixed failed login if user attempts to log in with upper case non-english letters * Removed extra authenticated/authorized fields when saving existing user from a form * Fixed `Grav\Framework\Route::__toString()` returning relative URL, not relative route - * Fixed handling of `append_url_extension` inside of `Page::templateFormat()` [#2264](https://github.com/getgrav/grav/issues/2264) + * Fixed handling of `append_url_extension` inside of `Page::templateFormat()` [#2264](https://github.com/getgrav/grav/issues/2264) * Fixed a broken language string [#2261](https://github.com/getgrav/grav/issues/2261) * Fixed clearing cache having no effect on Doctrine cache * Fixed `Medium::relativePath()` for streams @@ -272,7 +388,7 @@ * Updated vendor libraries 1. [](#bugfix) * Support spaces with filenames in responsive images [#2300](https://github.com/getgrav/grav/pull/2300) - + # v1.5.6 ## 12/14/2018 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index da8896f..112fe4d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,7 +29,7 @@ The issue tracker is the preferred channel for [bug reports](#bugs), requests](#pull-requests), but please respect the following restrictions: * Please **do not** use the issue tracker for support requests. Use - [the Forum](http://getgrav.org/forum) or [the Gitter chat](https://gitter.im/getgrav/grav). + [the Forum](http://getgrav.org/forum) or [the Chat](https://chat.getgrav.org/). @@ -110,7 +110,8 @@ Good pull requests - patches, improvements, new features - are a fantastic help. They should remain focused in scope and avoid containing unrelated commits. -**Please ask first** in [Slack](https://getgrav.org/slack) or in the Forum before embarking on any significant pull request (e.g. +**Please ask first** in [the Forum](http://getgrav.org/forum) or [the Chat](https://chat.getgrav.org/) +before embarking on any significant pull request (e.g. implementing features, refactoring code..), otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project. diff --git a/bin/plugin b/bin/plugin index 6f8466d..3c431e3 100755 --- a/bin/plugin +++ b/bin/plugin @@ -79,19 +79,6 @@ $output = new ConsoleOutput(); $output->getFormatter()->setStyle('red', new OutputFormatterStyle('red', null, array('bold'))); $output->getFormatter()->setStyle('white', new OutputFormatterStyle('white', null, array('bold'))); -if (is_null($plugin)) { - $output->writeln(''); - $output->writeln("$name plugin not found"); - die; -} - -if (!$plugin->enabled) { - $output->writeln(''); - $output->writeln("$name not enabled"); - die; -} - - if (!$name) { $output->writeln(''); $output->writeln('Usage:'); @@ -123,6 +110,18 @@ if (!$name) { } exit; +} else { + if (is_null($plugin)) { + $output->writeln(''); + $output->writeln("$name plugin not found"); + die; + } + + if (!$plugin->enabled) { + $output->writeln(''); + $output->writeln("$name not enabled"); + die; + } } if ($plugin === null) { diff --git a/composer.json b/composer.json index 9518146..60ca21a 100644 --- a/composer.json +++ b/composer.json @@ -24,14 +24,14 @@ "kodus/psr7-server": "*", "nyholm/psr7": "^1.0", - "twig/twig": "~1.35", + "twig/twig": "~1.40", "erusev/parsedown": "1.6.4", "erusev/parsedown-extra": "~0.7", - "symfony/yaml": "~4.2", - "symfony/console": "~4.2", - "symfony/event-dispatcher": "~4.2", - "symfony/var-dumper": "~4.2", - "symfony/process": "~4.2", + "symfony/yaml": "~4.2.0", + "symfony/console": "~4.2.0", + "symfony/event-dispatcher": "~4.2.0", + "symfony/var-dumper": "~4.2.0", + "symfony/process": "~4.2.0", "doctrine/cache": "^1.8", "doctrine/collections": "^1.5", "guzzlehttp/psr7": "^1.4", @@ -89,6 +89,8 @@ "exclude": ["VERSION"] }, "scripts": { + "api-16": "vendor/bin/phpdoc-md generate system/src > user/pages/14.api/default.16.md", + "api-15": "vendor/bin/phpdoc-md generate system/src > user/pages/14.api/default.md", "post-create-project-cmd": "bin/grav install", "phpstan": "vendor/bin/phpstan analyse -l 2 -c ./tests/phpstan/phpstan.neon system/src --memory-limit=256M", "phpstan-framework": "vendor/bin/phpstan analyse -l 5 -c ./tests/phpstan/phpstan.neon system/src/Grav/Framework --memory-limit=256M", diff --git a/composer.lock b/composer.lock index 2e2f476..647b081 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": "a65d66d9ce6844a3743c992e74c1c55d", + "content-hash": "171fc8a6af028b50024e0f5f8c3eca82", "packages": [ { "name": "antoligy/dom-string-iterators", @@ -52,25 +52,25 @@ }, { "name": "composer/ca-bundle", - "version": "1.1.4", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d" + "reference": "f26a67e397be0e5c00d7c52ec7b5010098e15ce5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/558f321c52faeb4828c03e7dc0cfe39a09e09a2d", - "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/f26a67e397be0e5c00d7c52ec7b5010098e15ce5", + "reference": "f26a67e397be0e5c00d7c52ec7b5010098e15ce5", "shasum": "" }, "require": { "ext-openssl": "*", "ext-pcre": "*", - "php": "^5.3.2 || ^7.0" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8", "psr/log": "^1.0", "symfony/process": "^2.5 || ^3.0 || ^4.0" }, @@ -104,7 +104,7 @@ "ssl", "tls" ], - "time": "2019-01-28T09:30:10+00:00" + "time": "2019-08-02T09:05:43+00:00" }, { "name": "doctrine/cache", @@ -183,16 +183,16 @@ }, { "name": "doctrine/collections", - "version": "v1.6.1", + "version": "v1.6.2", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "d2ae4ef05e25197343b6a39bae1d3c427a2f6956" + "reference": "c5e0bc17b1620e97c968ac409acbff28b8b850be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/d2ae4ef05e25197343b6a39bae1d3c427a2f6956", - "reference": "d2ae4ef05e25197343b6a39bae1d3c427a2f6956", + "url": "https://api.github.com/repos/doctrine/collections/zipball/c5e0bc17b1620e97c968ac409acbff28b8b850be", + "reference": "c5e0bc17b1620e97c968ac409acbff28b8b850be", "shasum": "" }, "require": { @@ -249,7 +249,7 @@ "iterators", "php" ], - "time": "2019-03-25T19:03:48+00:00" + "time": "2019-06-09T13:48:14+00:00" }, { "name": "donatj/phpuseragentparser", @@ -286,9 +286,9 @@ "authors": [ { "name": "Jesse G. Donat", + "role": "Developer", "email": "donatj@gmail.com", - "homepage": "http://donatstudios.com", - "role": "Developer" + "homepage": "http://donatstudios.com" } ], "description": "Lightning fast, minimalist PHP UserAgent string parser.", @@ -437,16 +437,16 @@ }, { "name": "filp/whoops", - "version": "2.3.1", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7" + "reference": "cde50e6720a39fdacb240159d3eea6865d51fd96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", - "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", + "url": "https://api.github.com/repos/filp/whoops/zipball/cde50e6720a39fdacb240159d3eea6865d51fd96", + "reference": "cde50e6720a39fdacb240159d3eea6865d51fd96", "shasum": "" }, "require": { @@ -480,8 +480,8 @@ "authors": [ { "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" + "role": "Developer", + "homepage": "https://github.com/filp" } ], "description": "php error handling for cool kids", @@ -494,7 +494,7 @@ "throwable", "whoops" ], - "time": "2018-10-23T09:00:00+00:00" + "time": "2019-08-07T09:00:00+00:00" }, { "name": "gregwar/cache", @@ -593,33 +593,37 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.5.2", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", "shasum": "" }, "require": { "php": ">=5.4.0", "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { + "ext-zlib": "*", "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -656,20 +660,20 @@ "uri", "url" ], - "time": "2018-12-04T20:46:45+00:00" + "time": "2019-07-01T23:21:34+00:00" }, { "name": "kodus/psr7-server", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/kodus/psr7-server.git", - "reference": "7c0e9c72e6cb282bf58e9e73386e4ded26c6ae13" + "reference": "dcfd0116451b0f0e7c6b23b831757ed288347278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kodus/psr7-server/zipball/7c0e9c72e6cb282bf58e9e73386e4ded26c6ae13", - "reference": "7c0e9c72e6cb282bf58e9e73386e4ded26c6ae13", + "url": "https://api.github.com/repos/kodus/psr7-server/zipball/dcfd0116451b0f0e7c6b23b831757ed288347278", + "reference": "dcfd0116451b0f0e7c6b23b831757ed288347278", "shasum": "" }, "require": { @@ -711,7 +715,7 @@ "psr-17", "psr-7" ], - "time": "2018-12-05T09:09:19+00:00" + "time": "2019-06-17T10:48:13+00:00" }, { "name": "league/climate", @@ -753,15 +757,15 @@ "authors": [ { "name": "Craig Duncan", + "role": "Developer", "email": "git@duncanc.co.uk", - "homepage": "https://github.com/duncan3dc", - "role": "Developer" + "homepage": "https://github.com/duncan3dc" }, { "name": "Joe Tannenbaum", + "role": "Developer", "email": "hey@joe.codes", - "homepage": "http://joe.codes/", - "role": "Developer" + "homepage": "http://joe.codes/" } ], "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.", @@ -818,9 +822,9 @@ "authors": [ { "name": "Matthias Mullie", + "role": "Developer", "email": "minify@mullie.eu", - "homepage": "http://www.mullie.eu", - "role": "Developer" + "homepage": "http://www.mullie.eu" } ], "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.", @@ -868,9 +872,9 @@ "authors": [ { "name": "Matthias Mullie", + "role": "Developer", "email": "pathconverter@mullie.eu", - "homepage": "http://www.mullie.eu", - "role": "Developer" + "homepage": "http://www.mullie.eu" } ], "description": "Relative path converter", @@ -946,24 +950,25 @@ }, { "name": "miljar/php-exif", - "version": "v0.6.4", + "version": "v0.6.5", "source": { "type": "git", "url": "https://github.com/PHPExif/php-exif.git", - "reference": "361c15b8bc7d5ef26a9492fe537f09c920fe6511" + "reference": "41f23db39d7b48e4af0e134c2e80e577c1782ac9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPExif/php-exif/zipball/361c15b8bc7d5ef26a9492fe537f09c920fe6511", - "reference": "361c15b8bc7d5ef26a9492fe537f09c920fe6511", + "url": "https://api.github.com/repos/PHPExif/php-exif/zipball/41f23db39d7b48e4af0e134c2e80e577c1782ac9", + "reference": "41f23db39d7b48e4af0e134c2e80e577c1782ac9", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.4" }, "require-dev": { + "jakub-onderka/php-parallel-lint": "^1.0", "phpmd/phpmd": "~2.2", - "phpunit/phpunit": "3.7.*", + "phpunit/phpunit": ">=4.0 <6.0", "satooshi/php-coveralls": "~0.6", "sebastian/phpcpd": "1.4.*@stable", "squizlabs/php_codesniffer": "1.4.*@stable" @@ -985,8 +990,8 @@ "authors": [ { "name": "Tom Van Herreweghe", - "homepage": "http://theanalogguy.be", - "role": "Developer" + "role": "Developer", + "homepage": "http://theanalogguy.be" } ], "description": "Object-Oriented EXIF parsing", @@ -997,7 +1002,7 @@ "jpeg", "tiff" ], - "time": "2018-03-27T10:41:55+00:00" + "time": "2019-02-11T13:47:52+00:00" }, { "name": "monolog/monolog", @@ -1282,6 +1287,52 @@ ], "time": "2018-01-21T07:42:36+00:00" }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, { "name": "psr/container", "version": "1.0.0", @@ -1333,16 +1384,16 @@ }, { "name": "psr/http-factory", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "378bfe27931ecc54ff824a20d6f6bfc303bbd04c" + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/378bfe27931ecc54ff824a20d6f6bfc303bbd04c", - "reference": "378bfe27931ecc54ff824a20d6f6bfc303bbd04c", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", "shasum": "" }, "require": { @@ -1381,7 +1432,7 @@ "request", "response" ], - "time": "2018-07-30T21:54:04+00:00" + "time": "2019-04-30T12:38:16+00:00" }, { "name": "psr/http-message", @@ -1636,24 +1687,24 @@ }, { "name": "ralouphie/getallheaders", - "version": "2.0.5", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": ">=5.3" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "~3.7.0", - "satooshi/php-coveralls": ">=1.0" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", "autoload": { @@ -1672,7 +1723,7 @@ } ], "description": "A polyfill for getallheaders.", - "time": "2016-02-11T07:05:27+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { "name": "rockettheme/toolbox", @@ -1774,16 +1825,16 @@ }, { "name": "symfony/console", - "version": "v4.2.7", + "version": "v4.2.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "e2840bb38bddad7a0feaf85931e38fdcffdb2f81" + "reference": "fc2e274aade6567a750551942094b2145ade9b6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e2840bb38bddad7a0feaf85931e38fdcffdb2f81", - "reference": "e2840bb38bddad7a0feaf85931e38fdcffdb2f81", + "url": "https://api.github.com/repos/symfony/console/zipball/fc2e274aade6567a750551942094b2145ade9b6c", + "reference": "fc2e274aade6567a750551942094b2145ade9b6c", "shasum": "" }, "require": { @@ -1842,40 +1893,49 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-04-08T14:23:48+00:00" + "time": "2019-07-24T17:13:20+00:00" }, { "name": "symfony/contracts", - "version": "v1.0.2", + "version": "v1.1.5", "source": { "type": "git", "url": "https://github.com/symfony/contracts.git", - "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" + "reference": "3f3f796d5f24a098a9da62828b8daa1b11494c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", - "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "url": "https://api.github.com/repos/symfony/contracts/zipball/3f3f796d5f24a098a9da62828b8daa1b11494c1b", + "reference": "3f3f796d5f24a098a9da62828b8daa1b11494c1b", "shasum": "" }, "require": { - "php": "^7.1.3" - }, - "require-dev": { + "php": "^7.1.3", "psr/cache": "^1.0", "psr/container": "^1.0" }, + "replace": { + "symfony/cache-contracts": "self.version", + "symfony/event-dispatcher-contracts": "self.version", + "symfony/http-client-contracts": "self.version", + "symfony/service-contracts": "self.version", + "symfony/translation-contracts": "self.version" + }, + "require-dev": { + "symfony/polyfill-intl-idn": "^1.10" + }, "suggest": { - "psr/cache": "When using the Cache contracts", - "psr/container": "When using the Service contracts", - "symfony/cache-contracts-implementation": "", - "symfony/service-contracts-implementation": "", - "symfony/translation-contracts-implementation": "" + "psr/event-dispatcher": "When using the EventDispatcher contracts", + "symfony/cache-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-implementation": "", + "symfony/service-implementation": "", + "symfony/translation-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -1910,20 +1970,20 @@ "interoperability", "standards" ], - "time": "2018-12-05T08:06:11+00:00" + "time": "2019-06-20T06:46:26+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.2.7", + "version": "v4.2.11", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "fbce53cd74ac509cbe74b6f227622650ab759b02" + "reference": "852548c7c704f14d2f6700c8d872a05bd2028732" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fbce53cd74ac509cbe74b6f227622650ab759b02", - "reference": "fbce53cd74ac509cbe74b6f227622650ab759b02", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/852548c7c704f14d2f6700c8d872a05bd2028732", + "reference": "852548c7c704f14d2f6700c8d872a05bd2028732", "shasum": "" }, "require": { @@ -1974,20 +2034,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-04-06T13:51:08+00:00" + "time": "2019-06-26T06:46:55+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" + "reference": "550ebaac289296ce228a706d0867afc34687e3f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4", "shasum": "" }, "require": { @@ -1999,7 +2059,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -2016,12 +2076,12 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { - "name": "Gert de Pagter", - "email": "backendtea@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", @@ -2032,20 +2092,20 @@ "polyfill", "portable" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" + "reference": "685968b11e61a347c18bf25db32effa478be610f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/685968b11e61a347c18bf25db32effa478be610f", + "reference": "685968b11e61a347c18bf25db32effa478be610f", "shasum": "" }, "require": { @@ -2057,7 +2117,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -2091,20 +2151,20 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", "shasum": "" }, "require": { @@ -2116,7 +2176,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -2150,20 +2210,20 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" + "reference": "04ce3335667451138df4307d6a9b61565560199e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/04ce3335667451138df4307d6a9b61565560199e", + "reference": "04ce3335667451138df4307d6a9b61565560199e", "shasum": "" }, "require": { @@ -2172,7 +2232,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -2205,20 +2265,20 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" + "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/2ceb49eaccb9352bff54d22570276bb75ba4a188", + "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188", "shasum": "" }, "require": { @@ -2227,7 +2287,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -2263,20 +2323,20 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/process", - "version": "v4.2.7", + "version": "v4.2.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "8cf39fb4ccff793340c258ee7760fd40bfe745fe" + "reference": "808a4be7e0dd7fcb6a2b1ed2ba22dd581402c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8cf39fb4ccff793340c258ee7760fd40bfe745fe", - "reference": "8cf39fb4ccff793340c258ee7760fd40bfe745fe", + "url": "https://api.github.com/repos/symfony/process/zipball/808a4be7e0dd7fcb6a2b1ed2ba22dd581402c5e2", + "reference": "808a4be7e0dd7fcb6a2b1ed2ba22dd581402c5e2", "shasum": "" }, "require": { @@ -2312,20 +2372,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-04-10T16:20:36+00:00" + "time": "2019-05-30T16:06:08+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.2.7", + "version": "v4.2.11", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "e760a38e12b15032325e64be63f7ffc1817af617" + "reference": "4e18e041a477edbb8c54e053f179672f9413816c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e760a38e12b15032325e64be63f7ffc1817af617", - "reference": "e760a38e12b15032325e64be63f7ffc1817af617", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4e18e041a477edbb8c54e053f179672f9413816c", + "reference": "4e18e041a477edbb8c54e053f179672f9413816c", "shasum": "" }, "require": { @@ -2388,20 +2448,20 @@ "debug", "dump" ], - "time": "2019-04-17T14:57:01+00:00" + "time": "2019-07-27T06:42:33+00:00" }, { "name": "symfony/yaml", - "version": "v4.2.7", + "version": "v4.2.11", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "6712daf03ee25b53abb14e7e8e0ede1a770efdb1" + "reference": "9468fef6f1c740b96935e9578560a9e9189ca154" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/6712daf03ee25b53abb14e7e8e0ede1a770efdb1", - "reference": "6712daf03ee25b53abb14e7e8e0ede1a770efdb1", + "url": "https://api.github.com/repos/symfony/yaml/zipball/9468fef6f1c740b96935e9578560a9e9189ca154", + "reference": "9468fef6f1c740b96935e9578560a9e9189ca154", "shasum": "" }, "require": { @@ -2447,20 +2507,20 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-03-30T15:58:42+00:00" + "time": "2019-07-24T14:47:26+00:00" }, { "name": "twig/twig", - "version": "v1.39.1", + "version": "v1.42.2", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "23e7b6f0cfa1d7ba3de69f30d8e05cf957412fec" + "reference": "21707d6ebd05476854805e4f91b836531941bcd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/23e7b6f0cfa1d7ba3de69f30d8e05cf957412fec", - "reference": "23e7b6f0cfa1d7ba3de69f30d8e05cf957412fec", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/21707d6ebd05476854805e4f91b836531941bcd4", + "reference": "21707d6ebd05476854805e4f91b836531941bcd4", "shasum": "" }, "require": { @@ -2470,12 +2530,12 @@ "require-dev": { "psr/container": "^1.0", "symfony/debug": "^2.7", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.39-dev" + "dev-master": "1.42-dev" } }, "autoload": { @@ -2493,19 +2553,19 @@ "authors": [ { "name": "Fabien Potencier", + "role": "Lead Developer", "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" + "homepage": "http://fabien.potencier.org" }, { "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" + "role": "Project Founder", + "email": "armin.ronacher@active-4.com" }, { "name": "Twig Team", - "homepage": "https://twig.symfony.com/contributors", - "role": "Contributors" + "role": "Contributors", + "homepage": "https://twig.symfony.com/contributors" } ], "description": "Twig, the flexible, fast, and secure template language for PHP", @@ -2513,7 +2573,7 @@ "keywords": [ "templating" ], - "time": "2019-04-16T17:12:57+00:00" + "time": "2019-06-18T15:35:16+00:00" }, { "name": "willdurand/negotiation", @@ -2630,16 +2690,16 @@ }, { "name": "codeception/codeception", - "version": "2.5.5", + "version": "2.5.6", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "547a64cb31edcf1902b296c511f5ca74101bcb4c" + "reference": "b83a9338296e706fab2ceb49de8a352fbca3dc98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/547a64cb31edcf1902b296c511f5ca74101bcb4c", - "reference": "547a64cb31edcf1902b296c511f5ca74101bcb4c", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/b83a9338296e706fab2ceb49de8a352fbca3dc98", + "reference": "b83a9338296e706fab2ceb49de8a352fbca3dc98", "shasum": "" }, "require": { @@ -2718,7 +2778,7 @@ "functional testing", "unit testing" ], - "time": "2019-03-23T17:57:45+00:00" + "time": "2019-04-24T11:28:19+00:00" }, { "name": "codeception/phpunit-wrapper", @@ -2795,16 +2855,16 @@ }, { "name": "composer/xdebug-handler", - "version": "1.3.2", + "version": "1.3.3", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "d17708133b6c276d6e42ef887a877866b909d892" + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/d17708133b6c276d6e42ef887a877866b909d892", - "reference": "d17708133b6c276d6e42ef887a877866b909d892", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f", + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f", "shasum": "" }, "require": { @@ -2835,7 +2895,7 @@ "Xdebug", "performance" ], - "time": "2019-01-28T20:25:53+00:00" + "time": "2019-05-27T17:52:04+00:00" }, { "name": "doctrine/instantiator", @@ -2895,16 +2955,16 @@ }, { "name": "facebook/webdriver", - "version": "1.6.0", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + "reference": "e43de70f3c7166169d0f14a374505392734160e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", + "reference": "e43de70f3c7166169d0f14a374505392734160e5", "shasum": "" }, "require": { @@ -2951,7 +3011,7 @@ "selenium", "webdriver" ], - "time": "2018-05-16T17:37:13+00:00" + "time": "2019-06-13T08:02:18+00:00" }, { "name": "fzaninotto/faker", @@ -3172,16 +3232,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.9.1", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", "shasum": "" }, "require": { @@ -3216,7 +3276,7 @@ "object", "object graph" ], - "time": "2019-04-07T13:18:21+00:00" + "time": "2019-08-09T12:45:53+00:00" }, { "name": "nette/bootstrap", @@ -3293,16 +3353,16 @@ }, { "name": "nette/di", - "version": "v3.0.0", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/nette/di.git", - "reference": "19d83539245aaacb59470828919182411061841f" + "reference": "4aff517a1c6bb5c36fa09733d4cea089f529de6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/di/zipball/19d83539245aaacb59470828919182411061841f", - "reference": "19d83539245aaacb59470828919182411061841f", + "url": "https://api.github.com/repos/nette/di/zipball/4aff517a1c6bb5c36fa09733d4cea089f529de6d", + "reference": "4aff517a1c6bb5c36fa09733d4cea089f529de6d", "shasum": "" }, "require": { @@ -3362,7 +3422,7 @@ "nette", "static" ], - "time": "2019-04-03T19:35:46+00:00" + "time": "2019-08-07T12:11:33+00:00" }, { "name": "nette/finder", @@ -3416,7 +3476,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "🔍 Nette Finder: find files and directories with an intuitive API.", + "description": "? Nette Finder: find files and directories with an intuitive API.", "homepage": "https://nette.org", "keywords": [ "filesystem", @@ -3476,7 +3536,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "🍸 Nette NEON: encodes and decodes NEON file format.", + "description": "? Nette NEON: encodes and decodes NEON file format.", "homepage": "http://ne-on.org", "keywords": [ "export", @@ -3489,16 +3549,16 @@ }, { "name": "nette/php-generator", - "version": "v3.2.2", + "version": "v3.2.3", "source": { "type": "git", "url": "https://github.com/nette/php-generator.git", - "reference": "acff8b136fad84b860a626d133e791f95781f9f5" + "reference": "aea6e81437bb238e5f0e5b5ce06337433908e63b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/acff8b136fad84b860a626d133e791f95781f9f5", - "reference": "acff8b136fad84b860a626d133e791f95781f9f5", + "url": "https://api.github.com/repos/nette/php-generator/zipball/aea6e81437bb238e5f0e5b5ce06337433908e63b", + "reference": "aea6e81437bb238e5f0e5b5ce06337433908e63b", "shasum": "" }, "require": { @@ -3544,7 +3604,7 @@ "php", "scaffolding" ], - "time": "2019-03-15T03:41:13+00:00" + "time": "2019-07-05T13:01:56+00:00" }, { "name": "nette/robot-loader", @@ -3743,16 +3803,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.2.1", + "version": "v4.2.3", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "5221f49a608808c1e4d436df32884cbc1b821ac0" + "reference": "e612609022e935f3d0337c1295176505b41188c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/5221f49a608808c1e4d436df32884cbc1b821ac0", - "reference": "5221f49a608808c1e4d436df32884cbc1b821ac0", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/e612609022e935f3d0337c1295176505b41188c8", + "reference": "e612609022e935f3d0337c1295176505b41188c8", "shasum": "" }, "require": { @@ -3760,7 +3820,7 @@ "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^6.5 || ^7.0" + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" }, "bin": [ "bin/php-parse" @@ -3790,7 +3850,7 @@ "parser", "php" ], - "time": "2019-02-16T20:54:15+00:00" + "time": "2019-08-12T20:17:41+00:00" }, { "name": "ocramius/package-versions", @@ -3880,18 +3940,18 @@ "authors": [ { "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "role": "Developer", + "email": "arne@blankerts.de" }, { "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "role": "Developer", + "email": "sebastian@phpeople.de" }, { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "role": "Developer", + "email": "sebastian@phpunit.de" } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", @@ -3927,18 +3987,18 @@ "authors": [ { "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "role": "Developer", + "email": "arne@blankerts.de" }, { "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "role": "Developer", + "email": "sebastian@phpeople.de" }, { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "role": "Developer", + "email": "sebastian@phpunit.de" } ], "description": "Library for handling version information and constraints", @@ -4000,16 +4060,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", "shasum": "" }, "require": { @@ -4047,7 +4107,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" + "time": "2019-04-30T17:48:53+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4098,16 +4158,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { @@ -4128,8 +4188,8 @@ } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -4157,32 +4217,33 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2019-06-13T12:50:23+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "0.3.1", + "version": "0.3.5", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "2cc49f47c69b023eaf05b48e6529389893b13d74" + "reference": "8c4ef2aefd9788238897b678a985e1d5c8df6db4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/2cc49f47c69b023eaf05b48e6529389893b13d74", - "reference": "2cc49f47c69b023eaf05b48e6529389893b13d74", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/8c4ef2aefd9788238897b678a985e1d5c8df6db4", + "reference": "8c4ef2aefd9788238897b678a985e1d5c8df6db4", "shasum": "" }, "require": { "php": "~7.1" }, "require-dev": { - "consistence/coding-standard": "^2.0.0", + "consistence/coding-standard": "^3.5", "jakub-onderka/php-parallel-lint": "^0.9.2", "phing/phing": "^2.16.0", "phpstan/phpstan": "^0.10", "phpunit/phpunit": "^6.3", - "slevomat/coding-standard": "^3.3.0", + "slevomat/coding-standard": "^4.7.2", + "squizlabs/php_codesniffer": "^3.3.2", "symfony/process": "^3.4 || ^4.0" }, "type": "library", @@ -4203,20 +4264,20 @@ "MIT" ], "description": "PHPDoc parser with support for nullable, intersection and generic types", - "time": "2019-01-14T12:26:23+00:00" + "time": "2019-06-07T19:13:52+00:00" }, { "name": "phpstan/phpstan", - "version": "0.11.5", + "version": "0.11.15", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "24ce5a566a798b81343138ed5d41d6877554cf9a" + "reference": "1be5b3a706db16ac472a4c40ec03cf4c810b118d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/24ce5a566a798b81343138ed5d41d6877554cf9a", - "reference": "24ce5a566a798b81343138ed5d41d6877554cf9a", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1be5b3a706db16ac472a4c40ec03cf4c810b118d", + "reference": "1be5b3a706db16ac472a4c40ec03cf4c810b118d", "shasum": "" }, "require": { @@ -4225,10 +4286,11 @@ "nette/bootstrap": "^2.4 || ^3.0", "nette/di": "^2.4.7 || ^3.0", "nette/robot-loader": "^3.0.1", + "nette/schema": "^1.0", "nette/utils": "^2.4.5 || ^3.0", - "nikic/php-parser": "^4.0.2", + "nikic/php-parser": "^4.2.3", "php": "~7.1", - "phpstan/phpdoc-parser": "^0.3", + "phpstan/phpdoc-parser": "^0.3.5", "symfony/console": "~3.2 || ~4.0", "symfony/finder": "~3.2 || ~4.0" }, @@ -4236,11 +4298,12 @@ "symfony/console": "3.4.16 || 4.1.5" }, "require-dev": { - "brianium/paratest": "^2.0", + "brianium/paratest": "^2.0 || ^3.0", "consistence/coding-standard": "^3.5", "dealerdirect/phpcodesniffer-composer-installer": "^0.4.4", "ext-intl": "*", "ext-mysqli": "*", + "ext-simplexml": "*", "ext-soap": "*", "ext-zip": "*", "jakub-onderka/php-parallel-lint": "^1.0", @@ -4250,7 +4313,7 @@ "phpstan/phpstan-php-parser": "^0.11", "phpstan/phpstan-phpunit": "^0.11", "phpstan/phpstan-strict-rules": "^0.11", - "phpunit/phpunit": "^7.0", + "phpunit/phpunit": "^7.5.14 || ^8.0", "slevomat/coding-standard": "^4.7.2", "squizlabs/php_codesniffer": "^3.3.2" }, @@ -4276,26 +4339,26 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", - "time": "2019-03-25T16:40:09+00:00" + "time": "2019-08-18T20:51:53+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", - "version": "0.11", + "version": "0.11.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "449fee6223220b337760abca4444801ddcc8b38d" + "reference": "5685fe48873efc5af1f2cc95d9c1b8ae82c728fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/449fee6223220b337760abca4444801ddcc8b38d", - "reference": "449fee6223220b337760abca4444801ddcc8b38d", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/5685fe48873efc5af1f2cc95d9c1b8ae82c728fe", + "reference": "5685fe48873efc5af1f2cc95d9c1b8ae82c728fe", "shasum": "" }, "require": { "nikic/php-parser": "^4.0", "php": "~7.1", - "phpstan/phpstan": "^0.11" + "phpstan/phpstan": "^0.11.8" }, "require-dev": { "consistence/coding-standard": "^3.0.1", @@ -4306,10 +4369,15 @@ "phpunit/phpunit": "^7.0", "slevomat/coding-standard": "^4.5.2" }, - "type": "library", + "type": "phpstan-extension", "extra": { "branch-alias": { "dev-master": "0.11-dev" + }, + "phpstan": { + "includes": [ + "rules.neon" + ] } }, "autoload": { @@ -4322,7 +4390,7 @@ "MIT" ], "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", - "time": "2018-12-05T18:04:16+00:00" + "time": "2019-05-28T19:54:04+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4374,8 +4442,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", @@ -4425,8 +4493,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", @@ -4467,8 +4535,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Simple template engine.", @@ -4480,16 +4548,16 @@ }, { "name": "phpunit/php-timer", - "version": "2.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059" + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b389aebe1b8b0578430bda0c7c95a829608e059", - "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", "shasum": "" }, "require": { @@ -4516,8 +4584,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Utility class for timing", @@ -4525,20 +4593,20 @@ "keywords": [ "timer" ], - "time": "2019-02-20T10:12:59+00:00" + "time": "2019-06-07T04:22:29+00:00" }, { "name": "phpunit/php-token-stream", - "version": "3.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" + "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", - "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e899757bb3df5ff6e95089132f32cd59aac2220a", + "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a", "shasum": "" }, "require": { @@ -4551,7 +4619,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -4574,20 +4642,20 @@ "keywords": [ "tokenizer" ], - "time": "2018-10-30T05:52:18+00:00" + "time": "2019-07-25T05:29:42+00:00" }, { "name": "phpunit/phpunit", - "version": "7.5.8", + "version": "7.5.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c29c0525cf4572c11efe1db49a8b8aee9dfac58a" + "reference": "2834789aeb9ac182ad69bfdf9ae91856a59945ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c29c0525cf4572c11efe1db49a8b8aee9dfac58a", - "reference": "c29c0525cf4572c11efe1db49a8b8aee9dfac58a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2834789aeb9ac182ad69bfdf9ae91856a59945ff", + "reference": "2834789aeb9ac182ad69bfdf9ae91856a59945ff", "shasum": "" }, "require": { @@ -4647,8 +4715,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "The PHP Unit Testing framework.", @@ -4658,7 +4726,7 @@ "testing", "xunit" ], - "time": "2019-03-26T13:23:54+00:00" + "time": "2019-07-15T06:24:08+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -4827,16 +4895,16 @@ }, { "name": "sebastian/environment", - "version": "4.1.0", + "version": "4.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6fda8ce1974b62b14935adc02a9ed38252eca656" + "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6fda8ce1974b62b14935adc02a9ed38252eca656", - "reference": "6fda8ce1974b62b14935adc02a9ed38252eca656", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", + "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", "shasum": "" }, "require": { @@ -4851,7 +4919,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -4876,20 +4944,20 @@ "environment", "hhvm" ], - "time": "2019-02-01T05:27:49+00:00" + "time": "2019-05-05T09:05:15+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "06a9a5947f47b3029d76118eb5c22802e5869687" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/06a9a5947f47b3029d76118eb5c22802e5869687", + "reference": "06a9a5947f47b3029d76118eb5c22802e5869687", "shasum": "" }, "require": { @@ -4916,6 +4984,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -4924,17 +4996,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -4943,7 +5011,7 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "time": "2019-08-11T12:43:14+00:00" }, { "name": "sebastian/global-state", @@ -5218,8 +5286,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", @@ -5228,16 +5296,16 @@ }, { "name": "symfony/browser-kit", - "version": "v4.2.7", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "c09c18cca96d7067152f78956faf55346c338283" + "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/c09c18cca96d7067152f78956faf55346c338283", - "reference": "c09c18cca96d7067152f78956faf55346c338283", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a29dd02a1f3f81b9a15c7730cc3226718ddb55ca", + "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca", "shasum": "" }, "require": { @@ -5246,6 +5314,8 @@ }, "require-dev": { "symfony/css-selector": "~3.4|~4.0", + "symfony/http-client": "^4.3", + "symfony/mime": "^4.3", "symfony/process": "~3.4|~4.0" }, "suggest": { @@ -5254,7 +5324,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5281,20 +5351,20 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2019-04-07T09:56:43+00:00" + "time": "2019-06-11T15:41:59+00:00" }, { "name": "symfony/css-selector", - "version": "v4.2.7", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "48eddf66950fa57996e1be4a55916d65c10c604a" + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/48eddf66950fa57996e1be4a55916d65c10c604a", - "reference": "48eddf66950fa57996e1be4a55916d65c10c604a", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", "shasum": "" }, "require": { @@ -5303,7 +5373,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5319,14 +5389,14 @@ "MIT" ], "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" @@ -5334,20 +5404,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-01-16T20:31:39+00:00" + "time": "2019-01-16T21:53:39+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.2.7", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb" + "reference": "291397232a2eefb3347eaab9170409981eaad0e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/53c97769814c80a84a8403efcf3ae7ae966d53bb", - "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/291397232a2eefb3347eaab9170409981eaad0e2", + "reference": "291397232a2eefb3347eaab9170409981eaad0e2", "shasum": "" }, "require": { @@ -5355,7 +5425,11 @@ "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "masterminds/html5": "<2.6" + }, "require-dev": { + "masterminds/html5": "^2.6", "symfony/css-selector": "~3.4|~4.0" }, "suggest": { @@ -5364,7 +5438,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5391,20 +5465,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2019-02-23T15:17:42+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/finder", - "version": "v4.2.7", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e45135658bd6c14b61850bf131c4f09a55133f69" + "reference": "9638d41e3729459860bb96f6247ccb61faaa45f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e45135658bd6c14b61850bf131c4f09a55133f69", - "reference": "e45135658bd6c14b61850bf131c4f09a55133f69", + "url": "https://api.github.com/repos/symfony/finder/zipball/9638d41e3729459860bb96f6247ccb61faaa45f2", + "reference": "9638d41e3729459860bb96f6247ccb61faaa45f2", "shasum": "" }, "require": { @@ -5413,7 +5487,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5440,20 +5514,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-04-06T13:51:08+00:00" + "time": "2019-06-28T13:16:30+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8" + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/1c42705be2b6c1de5904f8afacef5895cab44bf8", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", "shasum": "" }, "require": { @@ -5475,12 +5549,12 @@ "authors": [ { "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "role": "Developer", + "email": "arne@blankerts.de" } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-04-04T09:56:43+00:00" + "time": "2019-06-13T22:48:21+00:00" }, { "name": "victorjonsson/markdowndocs", diff --git a/default_site_backup--20190930153122.zip b/default_site_backup--20190930153122.zip new file mode 100644 index 0000000..b81b91e Binary files /dev/null and b/default_site_backup--20190930153122.zip differ diff --git a/now.json b/now.json new file mode 100644 index 0000000..fe7b94b --- /dev/null +++ b/now.json @@ -0,0 +1,4 @@ + { + "version": 2, + "builds": [{ "src": "*.php", "use": "@now/php" }] +} diff --git a/system/blueprints/config/site.yaml b/system/blueprints/config/site.yaml index 57fd3c5..6603823 100644 --- a/system/blueprints/config/site.yaml +++ b/system/blueprints/config/site.yaml @@ -65,7 +65,7 @@ form: summary.size: type: text - size: x-small + size: small append: PLUGIN_ADMIN.CHARACTERS label: PLUGIN_ADMIN.SUMMARY_SIZE help: PLUGIN_ADMIN.SUMMARY_SIZE_HELP diff --git a/system/blueprints/user/account_new.yaml b/system/blueprints/user/account_new.yaml index 6c6505b..7a92518 100644 --- a/system/blueprints/user/account_new.yaml +++ b/system/blueprints/user/account_new.yaml @@ -12,5 +12,7 @@ form: type: text label: PLUGIN_ADMIN.USERNAME help: PLUGIN_ADMIN.USERNAME_HELP + unset-disabled@: true + unset-readonly@: true validate: required: true diff --git a/system/blueprints/user/accounts.yaml b/system/blueprints/user/accounts.yaml index 892a14a..49b0f71 100644 --- a/system/blueprints/user/accounts.yaml +++ b/system/blueprints/user/accounts.yaml @@ -27,3 +27,13 @@ config: title: Accounts icon: fa-users authorize: ['admin.users', 'admin.accounts', 'admin.super'] + +form: + fields: + username: + flex-disabled@: exists + disabled: false + flex-readonly@: exists + readonly: false + validate: + required: true \ No newline at end of file diff --git a/system/defines.php b/system/defines.php index 3af6ede..85d88d8 100644 --- a/system/defines.php +++ b/system/defines.php @@ -8,7 +8,7 @@ // Some standard defines define('GRAV', true); -define('GRAV_VERSION', '1.6.8'); +define('GRAV_VERSION', '1.6.16'); define('GRAV_TESTING', false); define('DS', '/'); diff --git a/system/languages/es.yaml b/system/languages/es.yaml index ce990ee..7bacfeb 100644 --- a/system/languages/es.yaml +++ b/system/languages/es.yaml @@ -23,7 +23,7 @@ GRAV: BAD_DATE: Fecha errónea AGO: antes FROM_NOW: desde ahora - JUST_NOW: justo ahora + JUST_NOW: hace un momento SECOND: segundo MINUTE: minuto HOUR: hora diff --git a/system/languages/et.yaml b/system/languages/et.yaml index fd794ad..619aa1a 100644 --- a/system/languages/et.yaml +++ b/system/languages/et.yaml @@ -1,11 +1,30 @@ --- GRAV: FRONTMATTER_ERROR_PAGE: "---\npealkiri: %1$s\n---\n\n# Viga: vigane Frontmatter'i\n\nasukoht: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```" + INFLECTOR_UNCOUNTABLE: + - 'equipment' + - 'informatsioon' + - 'rice' + - 'money' + - 'species' + - 'series' + - 'kala' + - 'lammas' + INFLECTOR_IRREGULAR: + 'person': 'inimesed' + 'man': 'mees' + 'child': 'lapsed' + INFLECTOR_ORDINALS: + 'default': '.' + 'first': '.' + 'second': '.' + 'third': '.' NICETIME: NO_DATE_PROVIDED: Kuupäev määramata BAD_DATE: Vigane kuupäev AGO: tagasi FROM_NOW: praegusest + JUST_NOW: just nüüd SECOND: sekund MINUTE: minut HOUR: tundi @@ -60,3 +79,7 @@ GRAV: - 'reede' - 'laupäev' - 'pühapäev' + CRON: + EVERY: iga + EVERY_MONTH: iga kuu + TEXT_PERIOD: Iga diff --git a/system/languages/fr.yaml b/system/languages/fr.yaml index fe2cbb7..9284f7e 100644 --- a/system/languages/fr.yaml +++ b/system/languages/fr.yaml @@ -14,6 +14,8 @@ GRAV: '/sis$/i': 'ses' '/([ti])um$/i': '\1a' '/(buffal|tomat)o$/i': '\1es' + '/(bu)s$/i': 'Bus' + '/(alias|status)/i': 'alias|status' '/(ax|test)is$/i': '\1s' '/s$/i': 's' '/$/': 's' diff --git a/system/languages/is.yaml b/system/languages/is.yaml index 55384fa..6f9761c 100644 --- a/system/languages/is.yaml +++ b/system/languages/is.yaml @@ -11,6 +11,8 @@ GRAV: - 'fish' - 'sheep' NICETIME: + NO_DATE_PROVIDED: Engin dagsetning gefin + BAD_DATE: Röng dagsetning AGO: síðan JUST_NOW: í þessu SECOND: sekúndu @@ -45,6 +47,7 @@ GRAV: DEC_PLURAL: árat FORM: VALIDATION_FAIL: Sannvottun mistókst: + INVALID_INPUT: Ógilt inntak í MISSING_REQUIRED_FIELD: 'Vantar nauðsynlegan reit:' MONTHS_OF_THE_YEAR: - 'janúar' @@ -67,3 +70,11 @@ GRAV: - 'Föstudagur' - 'Laugardagur' - 'Sunnudagur' + CRON: + TEXT_TIME: ' á :' + TEXT_DOW: ' á ' + TEXT_MONTH: ' af ' + TEXT_DOM: ' á ' + ERROR1: Merkið %s er ekki stutt! + ERROR3: Það ætti að setja jquery_element inn í stillingar jqCron + ERROR4: Óþekkt segð diff --git a/system/languages/pt.yaml b/system/languages/pt.yaml index bddd856..590b5e5 100644 --- a/system/languages/pt.yaml +++ b/system/languages/pt.yaml @@ -35,3 +35,12 @@ GRAV: - 'Outubro' - 'Novembro' - 'Dezembro' + INFLECTOR_UNCOUNTABLE: + - 'equipment' + - 'information' + - 'arroz' + - 'money' + - 'species' + - 'series' + - 'fish' + - 'sheep' diff --git a/system/languages/sk.yaml b/system/languages/sk.yaml index 3defc36..89a7f56 100644 --- a/system/languages/sk.yaml +++ b/system/languages/sk.yaml @@ -1,10 +1,75 @@ --- GRAV: + FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Chyba: Chybný frontmatter\n\nPath: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```" + INFLECTOR_PLURALS: + '/(quiz)$/i': '\1zes' + '/^(ox)$/i': '\1en' + '/([m|l])ouse$/i': '\1ice' + '/(matr|vert|ind)ix|ex$/i': '\1ices' + '/(x|ch|ss|sh)$/i': '\1es' + '/([^aeiouy]|qu)ies$/i': '\1y' + '/([^aeiouy]|qu)y$/i': '\1ies' + '/(hive)$/i': '\1s' + '/(?:([^f])fe|([lr])f)$/i': '\1\2ves' + '/sis$/i': 'ses' + '/([ti])um$/i': '\1a' + '/(buffal|tomat)o$/i': '\1oes' + '/(bu)s$/i': '\1ses' + '/(alias|status)/i': '\1es' + '/(octop|vir)us$/i': '\1i' + '/(ax|test)is$/i': '\1es' + '/s$/i': 's' + '/$/': 's' + INFLECTOR_SINGULAR: + '/(quiz)zes$/i': '\1' + '/(matr)ices$/i': '\1ix' + '/(vert|ind)ices$/i': '\1ex' + '/^(ox)en/i': '\1' + '/(alias|status)es$/i': '\1' + '/([octop|vir])i$/i': '\1us' + '/(cris|ax|test)es$/i': '\1is' + '/(shoe)s$/i': '\1' + '/(o)es$/i': '\1' + '/(bus)es$/i': '\1' + '/([m|l])ice$/i': '\1ouse' + '/(x|ch|ss|sh)es$/i': '\1' + '/(m)ovies$/i': '\1ovie' + '/(s)eries$/i': '\1eries' + '/([^aeiouy]|qu)ies$/i': '\1y' + '/([lr])ves$/i': '\1f' + '/(tive)s$/i': '\1' + '/(hive)s$/i': '\1' + '/([^f])ves$/i': '\1fe' + '/(^analy)ses$/i': '\1sis' + '/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis' + '/([ti])a$/i': '\1um' + '/(n)ews$/i': '\1ews' + INFLECTOR_UNCOUNTABLE: + - 'vybavenie' + - 'informácie' + - 'ryža' + - 'peniaze' + - 'druhy' + - 'séria' + - 'ryba' + - 'ovce' + INFLECTOR_IRREGULAR: + 'person': 'ľudia' + 'man': 'muži' + 'child': 'deti' + 'sex': 'pohlavia' + 'move': 'pohyby' + INFLECTOR_ORDINALS: + 'default': '.' + 'first': '.' + 'second': '.' + 'third': '.' NICETIME: NO_DATE_PROVIDED: Neposkytnutý žiaden dátum BAD_DATE: Nesprávny dátum AGO: pred FROM_NOW: odteraz + JUST_NOW: práve teraz SECOND: sekunda MINUTE: minúta HOUR: hodina @@ -14,10 +79,12 @@ GRAV: YEAR: rok DECADE: desaťročie SEC: sek + MIN: min HR: hod WK: t MO: m YR: r + DEC: dec SECOND_PLURAL: sekúnd MINUTE_PLURAL: minút HOUR_PLURAL: hodín @@ -58,3 +125,20 @@ GRAV: - 'Piatok' - 'Sobota' - 'Nedeľa' + CRON: + EVERY: každý + EVERY_HOUR: každú hodinu + EVERY_MINUTE: každú minútu + EVERY_DAY_OF_WEEK: každý deň v týždni + EVERY_DAY_OF_MONTH: každý deň v mesiaci + EVERY_MONTH: každý mesiac + TEXT_PERIOD: Každý + TEXT_MINS: ' at minute(s) past the hour' + TEXT_TIME: ' at :' + TEXT_DOW: ' on ' + TEXT_MONTH: ' of ' + TEXT_DOM: ' on ' + ERROR1: Tag %s nieje podporovaný! + ERROR2: Chybný počet položiek + ERROR3: jquery_element musí byť nastavený v nastaveniach pre jqCron + ERROR4: Neznámy výraz diff --git a/system/languages/sv.yaml b/system/languages/sv.yaml index e386c8c..16afa16 100644 --- a/system/languages/sv.yaml +++ b/system/languages/sv.yaml @@ -1,6 +1,17 @@ --- GRAV: FRONTMATTER_ERROR_PAGE: "--- titel: %1$s --- # Fel: Ogiltig Frontmatter-sökväg: `%2$s` **%3$s** ``` %4$s ```" + INFLECTOR_UNCOUNTABLE: + - 'utrustning' + - 'information' + - 'ris' + - 'pengar' + - 'arter' + - 'serier' + - 'fisk' + - 'får' + INFLECTOR_IRREGULAR: + 'person': 'personer' NICETIME: NO_DATE_PROVIDED: Inget datum har angivits BAD_DATE: Ogiltigt datum diff --git a/system/languages/zh-tw.yaml b/system/languages/zh-tw.yaml index 6ecfcc3..6cb39c9 100644 --- a/system/languages/zh-tw.yaml +++ b/system/languages/zh-tw.yaml @@ -1,24 +1,44 @@ --- GRAV: + FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# 錯誤: 不正確的 Frontmatter\n\n路徑: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```" NICETIME: + NO_DATE_PROVIDED: 沒有提供日期 + BAD_DATE: 錯誤日期 + AGO: 之前 + FROM_NOW: 之後 + JUST_NOW: 剛剛 SECOND: 秒 MINUTE: 分 HOUR: 小時 + DAY: 天 + WEEK: 週 + MONTH: 月 + YEAR: 年 + DECADE: 十年 + SEC: 秒 + MIN: 分 + HR: 小時 + WK: 週 + MO: 月 + YR: 年 + DEC: 十年 SECOND_PLURAL: 秒 MINUTE_PLURAL: 分 - HOUR_PLURAL: 時 - DAY_PLURAL: 日 - WEEK_PLURAL: 周 + HOUR_PLURAL: 小時 + DAY_PLURAL: 天 + WEEK_PLURAL: 週 MONTH_PLURAL: 月 YEAR_PLURAL: 年 DECADE_PLURAL: 十年 SEC_PLURAL: 秒 MIN_PLURAL: 分 HR_PLURAL: 時 - WK_PLURAL: 周 + WK_PLURAL: 週 MO_PLURAL: 月 YR_PLURAL: 年 DEC_PLURAL: 十年 + FORM: + MISSING_REQUIRED_FIELD: 遺漏必填欄位: MONTHS_OF_THE_YEAR: - '一月' - '二月' diff --git a/system/languages/zh.yaml b/system/languages/zh.yaml index 9ae1cdb..4912aa9 100644 --- a/system/languages/zh.yaml +++ b/system/languages/zh.yaml @@ -1,57 +1,122 @@ --- GRAV: - FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# 錯誤: 不正確的 Frontmatter\n\n路徑: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```" + FRONTMATTER_ERROR_PAGE: "---\n标题: %1$s\n---\n\n# 错误:无效参数\n\n位置: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```" + INFLECTOR_PLURALS: + '/(quiz)$/i': '\1zes' + '/^(ox)$/i': '\1en' + '/([m|l])ouse$/i': '\1ice' + '/(matr|vert|ind)ix|ex$/i': '\1ices' + '/(x|ch|ss|sh)$/i': '\1es' + '/([^aeiouy]|qu)ies$/i': '\1y' + '/([^aeiouy]|qu)y$/i': '\1ies' + '/(hive)$/i': '\1s' + '/(?:([^f])fe|([lr])f)$/i': '\1\2ves' + '/sis$/i': 'ses' + '/([ti])um$/i': '\1a' + '/(buffal|tomat)o$/i': '\1oes' + '/(bu)s$/i': '\1ses' + '/(alias|status)/i': '\1es' + '/(octop|vir)us$/i': '\1i' + '/(ax|test)is$/i': '\1es' + '/s$/i': 's' + '/$/': 's' + INFLECTOR_SINGULAR: + '/(quiz)zes$/i': '\1' + '/(matr)ices$/i': '\1ix' + '/(vert|ind)ices$/i': '\1ex' + '/^(ox)en/i': '\1' + '/(alias|status)es$/i': '\1' + '/([octop|vir])i$/i': '\1us' + '/(cris|ax|test)es$/i': '\1is' + '/(shoe)s$/i': '\1' + '/(o)es$/i': '\1' + '/(bus)es$/i': '\1' + '/([m|l])ice$/i': '\1ouse' + '/(x|ch|ss|sh)es$/i': '\1' + '/(m)ovies$/i': '\1ovie' + '/(s)eries$/i': '\1eries' + '/([^aeiouy]|qu)ies$/i': '\1y' + '/([lr])ves$/i': '\1f' + '/(tive)s$/i': '\1' + '/(hive)s$/i': '\1' + '/([^f])ves$/i': '\1fe' + '/(^analy)ses$/i': '\1sis' + '/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis' + '/([ti])a$/i': '\1um' + '/(n)ews$/i': '\1ews' + INFLECTOR_UNCOUNTABLE: + - '装备' + - '信息' + - '大米' + - '钱' + - '物种' + - '系列' + - '鱼' + - '羊' + INFLECTOR_IRREGULAR: + 'person': '人员' + 'man': '男人' + 'child': '儿童' + 'sex': '性别' + 'move': '移动' + INFLECTOR_ORDINALS: + 'default': 'th' + 'first': 'st' + 'second': 'md' + 'third': 'rd' NICETIME: - NO_DATE_PROVIDED: 沒有提供日期 - BAD_DATE: 錯誤日期 - AGO: 之前 - FROM_NOW: 之後 - JUST_NOW: 剛剛 + NO_DATE_PROVIDED: 无日期信息 + BAD_DATE: 无效日期 + AGO: 前 + FROM_NOW: 距今 + JUST_NOW: 刚刚 SECOND: 秒 - MINUTE: 分 - HOUR: 小時 + MINUTE: 分钟 + HOUR: 小时 DAY: 天 - WEEK: 週 + WEEK: 周 MONTH: 月 YEAR: 年 DECADE: 十年 SEC: 秒 - MIN: 分 - HR: 小時 - WK: 週 + MIN: 分钟 + HR: 小时 + WK: 周 MO: 月 YR: 年 - DEC: 十年 + DEC: 年代 SECOND_PLURAL: 秒 MINUTE_PLURAL: 分 - HOUR_PLURAL: 小時 + HOUR_PLURAL: 小时 DAY_PLURAL: 天 - WEEK_PLURAL: 週 + WEEK_PLURAL: 周 MONTH_PLURAL: 月 YEAR_PLURAL: 年 DECADE_PLURAL: 十年 SEC_PLURAL: 秒 MIN_PLURAL: 分 - HR_PLURAL: 時 - WK_PLURAL: 週 + HR_PLURAL: 时 + WK_PLURAL: 周 MO_PLURAL: 月 YR_PLURAL: 年 - DEC_PLURAL: 十年 + DEC_PLURAL: 年代 FORM: - MISSING_REQUIRED_FIELD: 遺漏必填欄位: + VALIDATION_FAIL: 验证失败: + INVALID_INPUT: 无效输入 + MISSING_REQUIRED_FIELD: 必填字段缺失: MONTHS_OF_THE_YEAR: - - '一月' - - '二月' - - '三月' - - '四月' - - '五月' - - '六月' - - '七月' - - '八月' - - '九月' - - '十月' - - '十一月' - - '十二月' + - '1月' + - '2月' + - '3月' + - '4月' + - '5月' + - '6月' + - '7月' + - '8月' + - '9月' + - '10月' + - '11月' + - '12月' DAYS_OF_THE_WEEK: - '星期一' - '星期二' @@ -60,4 +125,20 @@ GRAV: - '星期五' - '星期六' - '星期日' - + CRON: + EVERY: 每隔 + EVERY_HOUR: 每小时 + EVERY_MINUTE: 每分钟 + EVERY_DAY_OF_WEEK: 一周中的每一天 + EVERY_DAY_OF_MONTH: 月份中的每一天 + EVERY_MONTH: 每月 + TEXT_PERIOD: 所有 + TEXT_MINS: ' 在 小时过后的分钟' + TEXT_TIME: ' 在 :' + TEXT_DOW: ' on ' + TEXT_MONTH: ' of ' + TEXT_DOM: ' on ' + ERROR1: 不支持分享类型 %s + ERROR2: 无效数字 + ERROR3: 请在 jqCron 设置中设定 jquery_element + ERROR4: 无法识别表达式 diff --git a/system/router.php b/system/router.php index 9ab0558..5e3c477 100644 --- a/system/router.php +++ b/system/router.php @@ -17,11 +17,21 @@ if (is_file($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $_SERVER['SCRIPT_N return false; } +$grav_index = 'index.php'; + +/* Check the GRAV_BASEDIR environment variable and use if set */ +$grav_basedir = getenv('GRAV_BASEDIR') ?: ''; +if ($grav_basedir) { + $grav_index = ltrim($grav_basedir, '/') . DIRECTORY_SEPARATOR . $grav_index; + $grav_basedir = DIRECTORY_SEPARATOR . trim($grav_basedir, DIRECTORY_SEPARATOR); + define('GRAV_ROOT', str_replace(DIRECTORY_SEPARATOR, '/', getcwd()) . $grav_basedir); +} + $_SERVER = array_merge($_SERVER, $_ENV); -$_SERVER['SCRIPT_FILENAME'] = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'index.php'; -$_SERVER['SCRIPT_NAME'] = DIRECTORY_SEPARATOR . 'index.php'; -$_SERVER['PHP_SELF'] = DIRECTORY_SEPARATOR . 'index.php'; +$_SERVER['SCRIPT_FILENAME'] = $_SERVER['DOCUMENT_ROOT'] . $grav_basedir .DIRECTORY_SEPARATOR . 'index.php'; +$_SERVER['SCRIPT_NAME'] = $grav_basedir . DIRECTORY_SEPARATOR . 'index.php'; +$_SERVER['PHP_SELF'] = $grav_basedir . DIRECTORY_SEPARATOR . 'index.php'; error_log(sprintf('%s:%d [%d]: %s', $_SERVER['REMOTE_ADDR'], $_SERVER['REMOTE_PORT'], http_response_code(), $_SERVER['REQUEST_URI']), 4); -require 'index.php'; +require $grav_index; diff --git a/system/src/Grav/Common/Assets/Traits/LegacyAssetsTrait.php b/system/src/Grav/Common/Assets/Traits/LegacyAssetsTrait.php index ccf9da2..229c2ab 100644 --- a/system/src/Grav/Common/Assets/Traits/LegacyAssetsTrait.php +++ b/system/src/Grav/Common/Assets/Traits/LegacyAssetsTrait.php @@ -24,19 +24,21 @@ trait LegacyAssetsTrait // First argument is always the asset array_shift($args); - if (\count($args) === 0) { + if (count($args) === 0) { return []; } - if (\count($args) === 1 && \is_array($args[0])) { + // New options array format + if (count($args) === 1 && is_array($args[0])) { return $args[0]; } + // Handle obscure case where options array is mixed with a priority + if (count($args) === 2 && is_array($args[0]) && is_int($args[1])) { + $arguments = $args[0]; + $arguments['priority'] = $args[1]; + return $arguments; + } switch ($type) { - case(Assets::INLINE_CSS_TYPE): - $defaults = ['priority' => null, 'group' => null]; - $arguments = $this->createArgumentsFromLegacy($args, $defaults); - break; - case(Assets::JS_TYPE): $defaults = ['priority' => null, 'pipeline' => true, 'loading' => null, 'group' => null]; $arguments = $this->createArgumentsFromLegacy($args, $defaults); @@ -55,6 +57,11 @@ trait LegacyAssetsTrait break; + case(Assets::INLINE_CSS_TYPE): + $defaults = ['priority' => null, 'group' => null]; + $arguments = $this->createArgumentsFromLegacy($args, $defaults); + break; + default: case(Assets::CSS_TYPE): $defaults = ['priority' => null, 'pipeline' => true, 'group' => null, 'loading' => null]; diff --git a/system/src/Grav/Common/Cache.php b/system/src/Grav/Common/Cache.php index 314ab11..94eae59 100644 --- a/system/src/Grav/Common/Cache.php +++ b/system/src/Grav/Common/Cache.php @@ -437,6 +437,9 @@ class Cache extends Getters case 'tmp-only': $remove_paths = self::$tmp_remove; break; + case 'invalidate': + $remove_paths = []; + break; default: if (Grav::instance()['config']->get('system.cache.clear_images_by_default')) { $remove_paths = self::$standard_remove; @@ -528,7 +531,6 @@ class Cache extends Getters } - /** * Set the cache lifetime programmatically * @@ -540,7 +542,7 @@ class Cache extends Getters return; } - $interval = $future - $this->now; + $interval = (int)($future - $this->now); if ($interval > 0 && $interval < $this->getLifetime()) { $this->lifetime = $interval; } @@ -555,7 +557,7 @@ class Cache extends Getters public function getLifetime() { if ($this->lifetime === null) { - $this->lifetime = $this->config->get('system.cache.lifetime') ?: 604800; // 1 week default + $this->lifetime = (int)($this->config->get('system.cache.lifetime') ?: 604800); // 1 week default } return $this->lifetime; diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index 2beeea8..e703777 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -378,14 +378,12 @@ class Blueprint extends BlueprintForm $grav = Grav::instance(); $actions = (array)$call['params']; - /** @var UserInterface $user */ - if (isset($grav['user'])) { - $user = Grav::instance()['user']; - foreach ($actions as $action) { - if (!$user->authorize($action)) { - $this->addPropertyRecursive($field, 'validate', ['ignore' => true]); - return; - } + /** @var UserInterface|null $user */ + $user = $grav['user'] ?? null; + foreach ($actions as $action) { + if (!$user || !$user->authorize($action)) { + $this->addPropertyRecursive($field, 'validate', ['ignore' => true]); + return; } } } diff --git a/system/src/Grav/Common/Data/Blueprints.php b/system/src/Grav/Common/Data/Blueprints.php index 0b0719d..1d0fcc6 100644 --- a/system/src/Grav/Common/Data/Blueprints.php +++ b/system/src/Grav/Common/Data/Blueprints.php @@ -39,7 +39,8 @@ class Blueprints public function get($type) { if (!isset($this->instances[$type])) { - $this->instances[$type] = $this->loadFile($type); + $blueprint = $this->loadFile($type); + $this->instances[$type] = $blueprint; } return $this->instances[$type]; @@ -99,6 +100,15 @@ class Blueprints $blueprint->setContext($this->search); } - return $blueprint->load()->init(); + try { + $blueprint->load()->init(); + } catch (\RuntimeException $e) { + $log = Grav::instance()['log']; + $log->error(sprintf('Blueprint %s cannot be loaded: %s', $name, $e->getMessage())); + + throw $e; + } + + return $blueprint; } } diff --git a/system/src/Grav/Common/Data/Validation.php b/system/src/Grav/Common/Data/Validation.php index 8ff199b..7779b1c 100644 --- a/system/src/Grav/Common/Data/Validation.php +++ b/system/src/Grav/Common/Data/Validation.php @@ -27,8 +27,9 @@ class Validation if (!isset($field['type'])) { $field['type'] = 'text'; } - $type = $validate['type'] ?? $field['type']; + $validate = (array)($field['validate'] ?? null); + $type = $validate['type'] ?? $field['type']; $required = $validate['required'] ?? false; // If value isn't required, we will stop validation if empty value is given. @@ -165,6 +166,11 @@ class Validation return (string) $value; } + protected static function filterCheckbox($value, array $params, array $field) + { + return (bool) $value; + } + protected static function filterCommaList($value, array $params, array $field) { return \is_array($value) ? $value : preg_split('/\s*,\s*/', $value, -1, PREG_SPLIT_NO_EMPTY); @@ -571,6 +577,11 @@ class Validation } } + // If creating new values is allowed, no further checks are needed. + if (!empty($field['selectize']['create'])) { + return true; + } + $options = $field['options'] ?? []; $use = $field['use'] ?? 'values'; diff --git a/system/src/Grav/Common/Form/FormFlash.php b/system/src/Grav/Common/Form/FormFlash.php index abd4565..b67313b 100644 --- a/system/src/Grav/Common/Form/FormFlash.php +++ b/system/src/Grav/Common/Form/FormFlash.php @@ -10,54 +10,10 @@ namespace Grav\Common\Form; use Grav\Common\Filesystem\Folder; -use Grav\Common\Grav; -use Grav\Common\User\Interfaces\UserInterface; -use RocketTheme\Toolbox\File\YamlFile; -use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; +use Grav\Framework\Form\FormFlash as FrameworkFormFlash; -class FormFlash extends \Grav\Framework\Form\FormFlash +class FormFlash extends FrameworkFormFlash { - /** - * @param string $sessionId - */ - public static function clearSession(string $sessionId): void - { - $folder = static::getSessionTmpDir($sessionId); - if (is_dir($folder)) { - Folder::delete($folder); - } - } - - /** - * @param string $sessionId - * @return string - */ - public static function getSessionTmpDir(string $sessionId): string - { - /** @var UniformResourceLocator $locator */ - $locator = Grav::instance()['locator']; - - return $locator->findResource("tmp://forms/{$sessionId}", true, true); - } - - /** - * @param UserInterface|null $user - * @return $this - */ - public function setUser(UserInterface $user = null) - { - if ($user && $user->username) { - $this->user = [ - 'username' => $user->username, - 'email' => $user->email ?? '' - ]; - } else { - $this->user = null; - } - - return $this; - } - /** * @return array * @deprecated 1.6 For backwards compatibility only, do not use @@ -89,8 +45,11 @@ class FormFlash extends \Grav\Framework\Form\FormFlash */ public function uploadFile(string $field, string $filename, array $upload): bool { - $tmp_dir = $this->getTmpDir(); + if (!$this->uniqueId) { + return false; + } + $tmp_dir = $this->getTmpDir(); Folder::create($tmp_dir); $tmp_file = $upload['file']['tmp_name']; @@ -118,8 +77,11 @@ class FormFlash extends \Grav\Framework\Form\FormFlash */ public function cropFile(string $field, string $filename, array $upload, array $crop): bool { - $tmp_dir = $this->getTmpDir(); + if (!$this->uniqueId) { + return false; + } + $tmp_dir = $this->getTmpDir(); Folder::create($tmp_dir); $tmp_file = $upload['file']['tmp_name']; @@ -136,32 +98,4 @@ class FormFlash extends \Grav\Framework\Form\FormFlash return true; } - - /** - * @return YamlFile - */ - protected function getTmpIndex(): YamlFile - { - // Do not use CompiledYamlFile as the file can change multiple times per second. - return YamlFile::instance($this->getTmpDir() . '/index.yaml'); - } - - /** - * @param string $name - */ - protected function removeTmpFile(string $name): void - { - $filename = $this->getTmpDir() . '/' . $name; - if ($name && is_file($filename)) { - unlink($filename); - } - } - - protected function removeTmpDir(): void - { - $tmpDir = $this->getTmpDir(); - if (file_exists($tmpDir)) { - Folder::delete($tmpDir); - } - } } diff --git a/system/src/Grav/Common/GPM/Common/CachedCollection.php b/system/src/Grav/Common/GPM/Common/CachedCollection.php index 7c76975..a6fca4d 100644 --- a/system/src/Grav/Common/GPM/Common/CachedCollection.php +++ b/system/src/Grav/Common/GPM/Common/CachedCollection.php @@ -11,19 +11,22 @@ namespace Grav\Common\GPM\Common; use Grav\Common\Iterator; -class CachedCollection extends Iterator { - +class CachedCollection extends Iterator +{ protected static $cache; public function __construct($items) { parent::__construct(); + + $method = static::class . __METHOD__; + // local cache to speed things up - if (!isset(self::$cache[get_called_class() . __METHOD__])) { - self::$cache[get_called_class() . __METHOD__] = $items; + if (!isset(self::$cache[$method])) { + self::$cache[$method] = $items; } - foreach (self::$cache[get_called_class() . __METHOD__] as $name => $item) { + foreach (self::$cache[$method] as $name => $item) { $this->append([$name => $item]); } } diff --git a/system/src/Grav/Common/GPM/Common/Package.php b/system/src/Grav/Common/GPM/Common/Package.php index d205f1e..40d3759 100644 --- a/system/src/Grav/Common/GPM/Common/Package.php +++ b/system/src/Grav/Common/GPM/Common/Package.php @@ -11,8 +11,8 @@ namespace Grav\Common\GPM\Common; use Grav\Common\Data\Data; -class Package { - +class Package +{ /** * @var Data */ diff --git a/system/src/Grav/Common/GPM/GPM.php b/system/src/Grav/Common/GPM/GPM.php index 94eec7d..6c9e7b0 100644 --- a/system/src/Grav/Common/GPM/GPM.php +++ b/system/src/Grav/Common/GPM/GPM.php @@ -770,7 +770,7 @@ class GPM extends Iterator * @param array $ignore_packages_list * * @return bool - * @throws \Exception + * @throws \RuntimeException */ public function checkNoOtherPackageNeedsThisDependencyInALowerVersion( $slug, @@ -793,8 +793,8 @@ class GPM extends Iterator $compatible = $this->checkNextSignificantReleasesAreCompatible($version, $other_dependency_version); if (!$compatible) { - if (!in_array($dependent_package, $ignore_packages_list)) { - throw new \Exception("Package $slug is required in an older version by package $dependent_package. This package needs a newer version, and because of this it cannot be installed. The $dependent_package package must be updated to use a newer release of $slug.", + if (!in_array($dependent_package, $ignore_packages_list, true)) { + throw new \RuntimeException("Package $slug is required in an older version by package $dependent_package. This package needs a newer version, and because of this it cannot be installed. The $dependent_package package must be updated to use a newer release of $slug.", 2); } } @@ -850,10 +850,10 @@ class GPM extends Iterator ) { //Needs a Grav update first throw new \RuntimeException("One of the packages require PHP {$dependencies['php']}. Please update PHP to resolve this"); - } else { - unset($dependencies[$dependency_slug]); - continue; } + + unset($dependencies[$dependency_slug]); + continue; } //First, check for Grav dependency. If a dependency requires Grav > the current version, abort and tell. @@ -863,10 +863,10 @@ class GPM extends Iterator ) { //Needs a Grav update first throw new \RuntimeException("One of the packages require Grav {$dependencies['grav']}. Please update Grav to the latest release."); - } else { - unset($dependencies[$dependency_slug]); - continue; } + + unset($dependencies[$dependency_slug]); + continue; } if ($this->isPluginInstalled($dependency_slug)) { @@ -1092,6 +1092,7 @@ class GPM extends Iterator if ($this->versionFormatIsEqualOrHigher($version)) { return trim(substr($version, 2)); } + return $version; } @@ -1104,7 +1105,7 @@ class GPM extends Iterator * * @return bool */ - public function versionFormatIsNextSignificantRelease($version) + public function versionFormatIsNextSignificantRelease($version): bool { return strpos($version, '~') === 0; } @@ -1118,7 +1119,7 @@ class GPM extends Iterator * * @return bool */ - public function versionFormatIsEqualOrHigher($version) + public function versionFormatIsEqualOrHigher($version): bool { return strpos($version, '>=') === 0; } @@ -1136,7 +1137,7 @@ class GPM extends Iterator * * @return bool */ - public function checkNextSignificantReleasesAreCompatible($version1, $version2) + public function checkNextSignificantReleasesAreCompatible($version1, $version2): bool { $version1array = explode('.', $version1); $version2array = explode('.', $version2); diff --git a/system/src/Grav/Common/GPM/Licenses.php b/system/src/Grav/Common/GPM/Licenses.php index fd0f21c..14c9258 100644 --- a/system/src/Grav/Common/GPM/Licenses.php +++ b/system/src/Grav/Common/GPM/Licenses.php @@ -103,7 +103,7 @@ class Licenses } /** - * Get's the License File object + * Get the License File object * * @return \RocketTheme\Toolbox\File\FileInterface */ diff --git a/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php b/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php index 9acc083..be565c9 100644 --- a/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php +++ b/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php @@ -16,6 +16,7 @@ abstract class AbstractPackageCollection extends BaseCollection public function __construct($items) { parent::__construct(); + foreach ($items as $name => $data) { $data->set('slug', $name); $this->items[$name] = new Package($data, $this->type); diff --git a/system/src/Grav/Common/GPM/Local/Plugins.php b/system/src/Grav/Common/GPM/Local/Plugins.php index 9c8e6dd..19adfb8 100644 --- a/system/src/Grav/Common/GPM/Local/Plugins.php +++ b/system/src/Grav/Common/GPM/Local/Plugins.php @@ -25,6 +25,7 @@ class Plugins extends AbstractPackageCollection { /** @var \Grav\Common\Plugins $plugins */ $plugins = Grav::instance()['plugins']; + parent::__construct($plugins->all()); } } diff --git a/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php b/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php index b46dc04..429c5b1 100644 --- a/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php +++ b/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php @@ -43,7 +43,7 @@ class AbstractPackageCollection extends BaseCollection { parent::__construct(); if ($repository === null) { - throw new \RuntimeException("A repository is required to indicate the origin of the remote collection"); + throw new \RuntimeException('A repository is required to indicate the origin of the remote collection'); } $channel = Grav::instance()['config']->get('system.gpm.releases', 'stable'); diff --git a/system/src/Grav/Common/GPM/Remote/GravCore.php b/system/src/Grav/Common/GPM/Remote/GravCore.php index 168f82f..1d30120 100644 --- a/system/src/Grav/Common/GPM/Remote/GravCore.php +++ b/system/src/Grav/Common/GPM/Remote/GravCore.php @@ -37,9 +37,9 @@ class GravCore extends AbstractPackageCollection $this->fetch($refresh, $callback); $this->data = json_decode($this->raw, true); - $this->version = isset($this->data['version']) ? $this->data['version'] : '-'; - $this->date = isset($this->data['date']) ? $this->data['date'] : '-'; - $this->min_php = isset($this->data['min_php']) ? $this->data['min_php'] : null; + $this->version = $this->data['version'] ?? '-'; + $this->date = $this->data['date'] ?? '-'; + $this->min_php = $this->data['min_php'] ?? null; if (isset($this->data['assets'])) { foreach ((array)$this->data['assets'] as $slug => $data) { diff --git a/system/src/Grav/Common/Helpers/Excerpts.php b/system/src/Grav/Common/Helpers/Excerpts.php index 0943242..f07c3aa 100644 --- a/system/src/Grav/Common/Helpers/Excerpts.php +++ b/system/src/Grav/Common/Helpers/Excerpts.php @@ -9,24 +9,20 @@ namespace Grav\Common\Helpers; -use Grav\Common\Grav; use Grav\Common\Page\Interfaces\PageInterface; -use Grav\Common\Uri; +use Grav\Common\Page\Markdown\Excerpts as ExcerptsObject; use Grav\Common\Page\Medium\Medium; -use Grav\Common\Utils; -use RocketTheme\Toolbox\Event\Event; -use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; class Excerpts { /** * Process Grav image media URL from HTML tag * - * @param string $html HTML tag e.g. `` - * @param PageInterface $page The current page object - * @return string Returns final HTML string + * @param string $html HTML tag e.g. `` + * @param PageInterface|null $page Page, defaults to the current page object + * @return string Returns final HTML string */ - public static function processImageHtml($html, PageInterface $page) + public static function processImageHtml($html, PageInterface $page = null) { $excerpt = static::getExcerptFromHtml($html, 'img'); @@ -112,157 +108,29 @@ class Excerpts * Process a Link excerpt * * @param array $excerpt - * @param PageInterface $page + * @param PageInterface|null $page Page, defaults to the current page object * @param string $type * @return mixed */ - public static function processLinkExcerpt($excerpt, PageInterface $page, $type = 'link') + public static function processLinkExcerpt($excerpt, PageInterface $page = null, $type = 'link') { - $url = htmlspecialchars_decode(rawurldecode($excerpt['element']['attributes']['href'])); + $excerpts = new ExcerptsObject($page); - $url_parts = static::parseUrl($url); - - // If there is a query, then parse it and build action calls. - if (isset($url_parts['query'])) { - $actions = array_reduce(explode('&', $url_parts['query']), function ($carry, $item) { - $parts = explode('=', $item, 2); - $value = isset($parts[1]) ? rawurldecode($parts[1]) : true; - $carry[$parts[0]] = $value; - - return $carry; - }, []); - - // Valid attributes supported. - $valid_attributes = ['rel', 'target', 'id', 'class', 'classes']; - - // Unless told to not process, go through actions. - if (array_key_exists('noprocess', $actions)) { - unset($actions['noprocess']); - } else { - // Loop through actions for the image and call them. - foreach ($actions as $attrib => $value) { - $key = $attrib; - - if (in_array($attrib, $valid_attributes, true)) { - // support both class and classes. - if ($attrib === 'classes') { - $attrib = 'class'; - } - $excerpt['element']['attributes'][$attrib] = str_replace(',', ' ', $value); - unset($actions[$key]); - } - } - } - - $url_parts['query'] = http_build_query($actions, null, '&', PHP_QUERY_RFC3986); - } - - // If no query elements left, unset query. - if (empty($url_parts['query'])) { - unset ($url_parts['query']); - } - - // Set path to / if not set. - if (empty($url_parts['path'])) { - $url_parts['path'] = ''; - } - - // If scheme isn't http(s).. - if (!empty($url_parts['scheme']) && !in_array($url_parts['scheme'], ['http', 'https'])) { - // Handle custom streams. - if ($type !== 'image' && !empty($url_parts['stream']) && !empty($url_parts['path'])) { - $url_parts['path'] = Grav::instance()['base_url_relative'] . '/' . static::resolveStream("{$url_parts['scheme']}://{$url_parts['path']}"); - unset($url_parts['stream'], $url_parts['scheme']); - } - - $excerpt['element']['attributes']['href'] = Uri::buildUrl($url_parts); - return $excerpt; - } - - // Handle paths and such. - $url_parts = Uri::convertUrl($page, $url_parts, $type); - - // Build the URL from the component parts and set it on the element. - $excerpt['element']['attributes']['href'] = Uri::buildUrl($url_parts); - - return $excerpt; + return $excerpts->processLinkExcerpt($excerpt, $type); } /** * Process an image excerpt * * @param array $excerpt - * @param PageInterface $page + * @param PageInterface|null $page Page, defaults to the current page object * @return array */ - public static function processImageExcerpt(array $excerpt, PageInterface $page) + public static function processImageExcerpt(array $excerpt, PageInterface $page = null) { - $url = htmlspecialchars_decode(urldecode($excerpt['element']['attributes']['src'])); - $url_parts = static::parseUrl($url); + $excerpts = new ExcerptsObject($page); - $media = null; - $filename = null; - - if (!empty($url_parts['stream'])) { - $filename = $url_parts['scheme'] . '://' . ($url_parts['path'] ?? ''); - - $media = $page->getMedia(); - - } else { - $grav = Grav::instance(); - - // File is also local if scheme is http(s) and host matches. - $local_file = isset($url_parts['path']) - && (empty($url_parts['scheme']) || in_array($url_parts['scheme'], ['http', 'https'], true)) - && (empty($url_parts['host']) || $url_parts['host'] === $grav['uri']->host()); - - if ($local_file) { - $filename = basename($url_parts['path']); - $folder = dirname($url_parts['path']); - - // Get the local path to page media if possible. - if ($folder === $page->url(false, false, false)) { - // Get the media objects for this page. - $media = $page->getMedia(); - } else { - // see if this is an external page to this one - $base_url = rtrim($grav['base_url_relative'] . $grav['pages']->base(), '/'); - $page_route = '/' . ltrim(str_replace($base_url, '', $folder), '/'); - - /** @var PageInterface $ext_page */ - $ext_page = $grav['pages']->dispatch($page_route, true); - if ($ext_page) { - $media = $ext_page->getMedia(); - } else { - $grav->fireEvent('onMediaLocate', new Event(['route' => $page_route, 'media' => &$media])); - } - } - } - } - - // If there is a media file that matches the path referenced.. - if ($media && $filename && isset($media[$filename])) { - // Get the medium object. - /** @var Medium $medium */ - $medium = $media[$filename]; - - // Process operations - $medium = static::processMediaActions($medium, $url_parts); - $element_excerpt = $excerpt['element']['attributes']; - - $alt = $element_excerpt['alt'] ?? ''; - $title = $element_excerpt['title'] ?? ''; - $class = $element_excerpt['class'] ?? ''; - $id = $element_excerpt['id'] ?? ''; - - $excerpt['element'] = $medium->parsedownElement($title, $alt, $class, $id, true); - - } else { - // Not a current page media file, see if it needs converting to relative. - $excerpt['element']['attributes']['src'] = Uri::buildUrl($url_parts); - } - - return $excerpt; + return $excerpts->processImageExcerpt($excerpt); } /** @@ -270,104 +138,13 @@ class Excerpts * * @param Medium $medium * @param string|array $url + * @param PageInterface|null $page Page, defaults to the current page object * @return Medium */ - public static function processMediaActions($medium, $url) + public static function processMediaActions($medium, $url, PageInterface $page = null) { - if (!is_array($url)) { - $url_parts = parse_url($url); - } else { - $url_parts = $url; - } + $excerpts = new ExcerptsObject($page); - $actions = []; - - // if there is a query, then parse it and build action calls - if (isset($url_parts['query'])) { - $actions = array_reduce(explode('&', $url_parts['query']), function ($carry, $item) { - $parts = explode('=', $item, 2); - $value = $parts[1] ?? null; - $carry[] = ['method' => $parts[0], 'params' => $value]; - - return $carry; - }, []); - } - - if (Grav::instance()['config']->get('system.images.auto_fix_orientation')) { - $actions[] = ['method' => 'fixOrientation', 'params' => '']; - } - $defaults = Grav::instance()['config']->get('system.images.defaults'); - if (is_array($defaults) && count($defaults)) { - foreach ($defaults as $method => $params) { - $actions[] = [ - 'method' => $method, - 'params' => $params, - ]; - } - } - - // loop through actions for the image and call them - foreach ($actions as $action) { - $matches = []; - - if (preg_match('/\[(.*)\]/', $action['params'], $matches)) { - $args = [explode(',', $matches[1])]; - } else { - $args = explode(',', $action['params']); - } - - $medium = call_user_func_array([$medium, $action['method']], $args); - } - - if (isset($url_parts['fragment'])) { - $medium->urlHash($url_parts['fragment']); - } - - return $medium; - } - - /** - * Variation of parse_url() which works also with local streams. - * - * @param string $url - * @return array|bool - */ - protected static function parseUrl($url) - { - $url_parts = Utils::multibyteParseUrl($url); - - if (isset($url_parts['scheme'])) { - /** @var UniformResourceLocator $locator */ - $locator = Grav::instance()['locator']; - - // Special handling for the streams. - if ($locator->schemeExists($url_parts['scheme'])) { - if (isset($url_parts['host'])) { - // Merge host and path into a path. - $url_parts['path'] = $url_parts['host'] . (isset($url_parts['path']) ? '/' . $url_parts['path'] : ''); - unset($url_parts['host']); - } - - $url_parts['stream'] = true; - } - } - - return $url_parts; - } - - /** - * @param string $url - * @return bool|string - */ - protected static function resolveStream($url) - { - /** @var UniformResourceLocator $locator */ - $locator = Grav::instance()['locator']; - - if ($locator->isStream($url)) { - return $locator->findResource($url, false) ?: $locator->findResource($url, false, true); - } - - return $url; + return $excerpts->processMediaActions($medium, $url); } } diff --git a/system/src/Grav/Common/Helpers/Truncator.php b/system/src/Grav/Common/Helpers/Truncator.php index 4c7d7f9..d116bb3 100644 --- a/system/src/Grav/Common/Helpers/Truncator.php +++ b/system/src/Grav/Common/Helpers/Truncator.php @@ -234,7 +234,7 @@ class Truncator { } /** - * @inheritDoc + * */ public function truncate( $text, diff --git a/system/src/Grav/Common/Helpers/YamlLinter.php b/system/src/Grav/Common/Helpers/YamlLinter.php index 43bde82..b7e608d 100644 --- a/system/src/Grav/Common/Helpers/YamlLinter.php +++ b/system/src/Grav/Common/Helpers/YamlLinter.php @@ -20,7 +20,8 @@ class YamlLinter { $errors = static::lintConfig(); $errors = $errors + static::lintPages(); - + $errors = $errors + static::lintBlueprints(); + return $errors; } @@ -34,6 +35,18 @@ class YamlLinter return static::recurseFolder('config://'); } + public static function lintBlueprints() + { + /** @var UniformResourceLocator $locator */ + $locator = Grav::instance()['locator']; + + $current_theme = Grav::instance()['config']->get('system.pages.theme'); + $theme_path = 'themes://' . $current_theme . '/blueprints'; + + $locator->addPath('blueprints', '', [$theme_path]); + return static::recurseFolder('blueprints://'); + } + public static function recurseFolder($path, $extensions = 'md|yaml') { $lint_errors = []; diff --git a/system/src/Grav/Common/Language/Language.php b/system/src/Grav/Common/Language/Language.php index cbc1b5d..a625146 100644 --- a/system/src/Grav/Common/Language/Language.php +++ b/system/src/Grav/Common/Language/Language.php @@ -104,6 +104,11 @@ class Language public function getAvailable() { $languagesArray = $this->languages; //Make local copy + + $languagesArray = array_map(function($value) { + return preg_quote($value); + }, $languagesArray); + sort($languagesArray); return implode('|', array_reverse($languagesArray)); @@ -229,7 +234,7 @@ class Language } /** - * Get's a URL prefix based on configuration + * Get a URL prefix based on configuration * * @param string|null $lang * @return string diff --git a/system/src/Grav/Common/Markdown/Parsedown.php b/system/src/Grav/Common/Markdown/Parsedown.php index d2f72fc..32033dd 100644 --- a/system/src/Grav/Common/Markdown/Parsedown.php +++ b/system/src/Grav/Common/Markdown/Parsedown.php @@ -10,6 +10,7 @@ namespace Grav\Common\Markdown; use Grav\Common\Page\Interfaces\PageInterface; +use Grav\Common\Page\Markdown\Excerpts; class Parsedown extends \Parsedown { @@ -18,12 +19,21 @@ class Parsedown extends \Parsedown /** * Parsedown constructor. * - * @param PageInterface $page + * @param Excerpts|null $excerpts * @param array|null $defaults */ - public function __construct($page, $defaults) + public function __construct($excerpts = null, $defaults = null) { - $this->init($page, $defaults); + if (!$excerpts || $excerpts instanceof PageInterface || null !== $defaults) { + // Deprecated in Grav 1.6.10 + if ($defaults) { + $defaults = ['markdown' => $defaults]; + } + $excerpts = new Excerpts($excerpts, $defaults); + user_error(__CLASS__ . '::' . __FUNCTION__ . '($page, $defaults) is deprecated since Grav 1.6.10, use new ' . __CLASS__ . '(new ' . Excerpts::class . '($page, [\'markdown\' => $defaults])) instead.', E_USER_DEPRECATED); + } + + $this->init($excerpts, $defaults); } } diff --git a/system/src/Grav/Common/Markdown/ParsedownExtra.php b/system/src/Grav/Common/Markdown/ParsedownExtra.php index ac04771..a562d8d 100644 --- a/system/src/Grav/Common/Markdown/ParsedownExtra.php +++ b/system/src/Grav/Common/Markdown/ParsedownExtra.php @@ -10,6 +10,7 @@ namespace Grav\Common\Markdown; use Grav\Common\Page\Interfaces\PageInterface; +use Grav\Common\Page\Markdown\Excerpts; class ParsedownExtra extends \ParsedownExtra { @@ -18,14 +19,23 @@ class ParsedownExtra extends \ParsedownExtra /** * ParsedownExtra constructor. * - * @param PageInterface $page + * @param Excerpts|null $excerpts * @param array|null $defaults * @throws \Exception */ - public function __construct($page, $defaults) + public function __construct($excerpts = null, $defaults = null) { + if (!$excerpts || $excerpts instanceof PageInterface || null !== $defaults) { + // Deprecated in Grav 1.6.10 + if ($defaults) { + $defaults = ['markdown' => $defaults]; + } + $excerpts = new Excerpts($excerpts, $defaults); + user_error(__CLASS__ . '::' . __FUNCTION__ . '($page, $defaults) is deprecated since Grav 1.6.10, use new ' . __CLASS__ . '(new ' . Excerpts::class . '($page, [\'markdown\' => $defaults])) instead.', E_USER_DEPRECATED); + } + parent::__construct(); - $this->init($page, $defaults); + $this->init($excerpts, $defaults); } } diff --git a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php index fa8fa91..aa76cdf 100644 --- a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php +++ b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php @@ -9,15 +9,13 @@ namespace Grav\Common\Markdown; -use Grav\Common\Grav; -use Grav\Common\Helpers\Excerpts; +use Grav\Common\Page\Markdown\Excerpts; use Grav\Common\Page\Interfaces\PageInterface; -use RocketTheme\Toolbox\Event\Event; trait ParsedownGravTrait { - /** @var PageInterface $page */ - protected $page; + /** @var Excerpts */ + protected $excerpts; protected $special_chars; protected $twig_link_regex = '/\!*\[(?:.*)\]\((\{([\{%#])\s*(.*?)\s*(?:\2|\})\})\)/'; @@ -28,28 +26,49 @@ trait ParsedownGravTrait /** * Initialization function to setup key variables needed by the MarkdownGravLinkTrait * - * @param PageInterface $page + * @param PageInterface|Excerpts|null $excerpts * @param array|null $defaults */ - protected function init($page, $defaults) + protected function init($excerpts = null, $defaults = null) { - $grav = Grav::instance(); - - $this->page = $page; - $this->BlockTypes['{'] [] = 'TwigTag'; - $this->special_chars = ['>' => 'gt', '<' => 'lt', '"' => 'quot']; - - if ($defaults === null) { - $defaults = (array)Grav::instance()['config']->get('system.pages.markdown'); + if (!$excerpts || $excerpts instanceof PageInterface) { + // Deprecated in Grav 1.6.10 + if ($defaults) { + $defaults = ['markdown' => $defaults]; + } + $this->excerpts = new Excerpts($excerpts, $defaults); + user_error(__CLASS__ . '::' . __FUNCTION__ . '($page, $defaults) is deprecated since Grav 1.6.10, use ->init(new ' . Excerpts::class . '($page, [\'markdown\' => $defaults])) instead.', E_USER_DEPRECATED); + } else { + $this->excerpts = $excerpts; } - $this->setBreaksEnabled($defaults['auto_line_breaks']); - $this->setUrlsLinked($defaults['auto_url_links']); - $this->setMarkupEscaped($defaults['escape_markup']); - $this->setSpecialChars($defaults['special_chars']); + $this->BlockTypes['{'][] = 'TwigTag'; + $this->special_chars = ['>' => 'gt', '<' => 'lt', '"' => 'quot']; - $grav->fireEvent('onMarkdownInitialized', new Event(['markdown' => $this, 'page' => $page])); + $defaults = $this->excerpts->getConfig(); + if (isset($defaults['markdown']['auto_line_breaks'])) { + $this->setBreaksEnabled($defaults['markdown']['auto_line_breaks']); + } + if (isset($defaults['markdown']['auto_url_links'])) { + $this->setUrlsLinked($defaults['markdown']['auto_url_links']); + } + if (isset($defaults['markdown']['escape_markup'])) { + $this->setMarkupEscaped($defaults['markdown']['escape_markup']); + } + if (isset($defaults['markdown']['special_chars'])) { + $this->setSpecialChars($defaults['markdown']['special_chars']); + } + + $this->excerpts->fireInitializedEvent($this); + } + + /** + * @return Excerpts + */ + public function getExcerpts() + { + return $this->excerpts; } /** @@ -114,7 +133,8 @@ trait ParsedownGravTrait */ protected function isBlockContinuable($Type) { - $continuable = \in_array($Type, $this->continuable_blocks) || method_exists($this, 'block' . $Type . 'Continue'); + $continuable = \in_array($Type, $this->continuable_blocks, true) + || method_exists($this, 'block' . $Type . 'Continue'); return $continuable; } @@ -128,7 +148,8 @@ trait ParsedownGravTrait */ protected function isBlockCompletable($Type) { - $completable = \in_array($Type, $this->completable_blocks) || method_exists($this, 'block' . $Type . 'Complete'); + $completable = \in_array($Type, $this->completable_blocks, true) + || method_exists($this, 'block' . $Type . 'Complete'); return $completable; } @@ -210,7 +231,7 @@ trait ParsedownGravTrait // if this is an image process it if (isset($excerpt['element']['attributes']['src'])) { - $excerpt = Excerpts::processImageExcerpt($excerpt, $this->page); + $excerpt = $this->excerpts->processImageExcerpt($excerpt); } return $excerpt; @@ -218,11 +239,7 @@ trait ParsedownGravTrait protected function inlineLink($excerpt) { - if (isset($excerpt['type'])) { - $type = $excerpt['type']; - } else { - $type = 'link'; - } + $type = $excerpt['type'] ?? 'link'; // do some trickery to get around Parsedown requirement for valid URL if its Twig in there if (preg_match($this->twig_link_regex, $excerpt['text'], $matches)) { @@ -238,13 +255,15 @@ trait ParsedownGravTrait // if this is a link if (isset($excerpt['element']['attributes']['href'])) { - $excerpt = Excerpts::processLinkExcerpt($excerpt, $this->page, $type); + $excerpt = $this->excerpts->processLinkExcerpt($excerpt, $type); } return $excerpt; } - // For extending this class via plugins + /** + * For extending this class via plugins + */ public function __call($method, $args) { if (isset($this->{$method}) === true) { diff --git a/system/src/Grav/Common/Page/Markdown/Excerpts.php b/system/src/Grav/Common/Page/Markdown/Excerpts.php new file mode 100644 index 0000000..eaa13cb --- /dev/null +++ b/system/src/Grav/Common/Page/Markdown/Excerpts.php @@ -0,0 +1,329 @@ +page = $page ?? Grav::instance()['page'] ?? null; + + // Add defaults to the configuration. + if (null === $config || !isset($config['markdown'], $config['images'])) { + $c = Grav::instance()['config']; + $config = $config ?? []; + $config += [ + 'markdown' => $c->get('system.pages.markdown', []), + 'images' => $c->get('system.images', []) + ]; + } + + $this->config = $config; + } + + public function getPage(): PageInterface + { + return $this->page; + } + + public function getConfig(): array + { + return $this->config; + } + + public function fireInitializedEvent($markdown): void + { + $grav = Grav::instance(); + + $grav->fireEvent('onMarkdownInitialized', new Event(['markdown' => $markdown, 'page' => $this->page])); + } + + /** + * Process a Link excerpt + * + * @param array $excerpt + * @param string $type + * @return array + */ + public function processLinkExcerpt(array $excerpt, string $type = 'link'): array + { + $url = htmlspecialchars_decode(rawurldecode($excerpt['element']['attributes']['href'])); + + $url_parts = $this->parseUrl($url); + + // If there is a query, then parse it and build action calls. + if (isset($url_parts['query'])) { + $actions = array_reduce( + explode('&', $url_parts['query']), + static function ($carry, $item) { + $parts = explode('=', $item, 2); + $value = isset($parts[1]) ? rawurldecode($parts[1]) : true; + $carry[$parts[0]] = $value; + + return $carry; + }, + [] + ); + + // Valid attributes supported. + $valid_attributes = ['rel', 'target', 'id', 'class', 'classes']; + + // Unless told to not process, go through actions. + if (array_key_exists('noprocess', $actions)) { + unset($actions['noprocess']); + } else { + // Loop through actions for the image and call them. + foreach ($actions as $attrib => $value) { + $key = $attrib; + + if (in_array($attrib, $valid_attributes, true)) { + // support both class and classes. + if ($attrib === 'classes') { + $attrib = 'class'; + } + $excerpt['element']['attributes'][$attrib] = str_replace(',', ' ', $value); + unset($actions[$key]); + } + } + } + + $url_parts['query'] = http_build_query($actions, null, '&', PHP_QUERY_RFC3986); + } + + // If no query elements left, unset query. + if (empty($url_parts['query'])) { + unset ($url_parts['query']); + } + + // Set path to / if not set. + if (empty($url_parts['path'])) { + $url_parts['path'] = ''; + } + + // If scheme isn't http(s).. + if (!empty($url_parts['scheme']) && !in_array($url_parts['scheme'], ['http', 'https'])) { + // Handle custom streams. + if ($type !== 'image' && !empty($url_parts['stream']) && !empty($url_parts['path'])) { + $grav = Grav::instance(); + $url_parts['path'] = $grav['base_url_relative'] . '/' . $this->resolveStream("{$url_parts['scheme']}://{$url_parts['path']}"); + unset($url_parts['stream'], $url_parts['scheme']); + } + + $excerpt['element']['attributes']['href'] = Uri::buildUrl($url_parts); + + return $excerpt; + } + + // Handle paths and such. + $url_parts = Uri::convertUrl($this->page, $url_parts, $type); + + // Build the URL from the component parts and set it on the element. + $excerpt['element']['attributes']['href'] = Uri::buildUrl($url_parts); + + return $excerpt; + } + + /** + * Process an image excerpt + * + * @param array $excerpt + * @return array + */ + public function processImageExcerpt(array $excerpt): array + { + $url = htmlspecialchars_decode(urldecode($excerpt['element']['attributes']['src'])); + $url_parts = $this->parseUrl($url); + + $media = null; + $filename = null; + + if (!empty($url_parts['stream'])) { + $filename = $url_parts['scheme'] . '://' . ($url_parts['path'] ?? ''); + + $media = $this->page->getMedia(); + + } else { + $grav = Grav::instance(); + + // File is also local if scheme is http(s) and host matches. + $local_file = isset($url_parts['path']) + && (empty($url_parts['scheme']) || in_array($url_parts['scheme'], ['http', 'https'], true)) + && (empty($url_parts['host']) || $url_parts['host'] === $grav['uri']->host()); + + if ($local_file) { + $filename = basename($url_parts['path']); + $folder = dirname($url_parts['path']); + + // Get the local path to page media if possible. + if ($this->page && $folder === $this->page->url(false, false, false)) { + // Get the media objects for this page. + $media = $this->page->getMedia(); + } else { + // see if this is an external page to this one + $base_url = rtrim($grav['base_url_relative'] . $grav['pages']->base(), '/'); + $page_route = '/' . ltrim(str_replace($base_url, '', $folder), '/'); + + /** @var PageInterface $ext_page */ + $ext_page = $grav['pages']->dispatch($page_route, true); + if ($ext_page) { + $media = $ext_page->getMedia(); + } else { + $grav->fireEvent('onMediaLocate', new Event(['route' => $page_route, 'media' => &$media])); + } + } + } + } + + // If there is a media file that matches the path referenced.. + if ($media && $filename && isset($media[$filename])) { + // Get the medium object. + /** @var Medium $medium */ + $medium = $media[$filename]; + + // Process operations + $medium = $this->processMediaActions($medium, $url_parts); + $element_excerpt = $excerpt['element']['attributes']; + + $alt = $element_excerpt['alt'] ?? ''; + $title = $element_excerpt['title'] ?? ''; + $class = $element_excerpt['class'] ?? ''; + $id = $element_excerpt['id'] ?? ''; + + $excerpt['element'] = $medium->parsedownElement($title, $alt, $class, $id, true); + + } else { + // Not a current page media file, see if it needs converting to relative. + $excerpt['element']['attributes']['src'] = Uri::buildUrl($url_parts); + } + + return $excerpt; + } + + /** + * Process media actions + * + * @param Medium $medium + * @param string|array $url + * @return Medium|Link + */ + public function processMediaActions($medium, $url) + { + $url_parts = is_string($url) ? $this->parseUrl($url) : $url; + $actions = []; + + // if there is a query, then parse it and build action calls + if (isset($url_parts['query'])) { + $actions = array_reduce( + explode('&', $url_parts['query']), + static function ($carry, $item) { + $parts = explode('=', $item, 2); + $value = $parts[1] ?? null; + $carry[] = ['method' => $parts[0], 'params' => $value]; + + return $carry; + }, + [] + ); + } + + $config = $this->getConfig(); + if (!empty($config['images']['auto_fix_orientation'])) { + $actions[] = ['method' => 'fixOrientation', 'params' => '']; + } + + $defaults = $config['images']['defaults'] ?? []; + if (count($defaults)) { + foreach ($defaults as $method => $params) { + $actions[] = [ + 'method' => $method, + 'params' => $params, + ]; + } + } + + // loop through actions for the image and call them + foreach ($actions as $action) { + $matches = []; + + if (preg_match('/\[(.*)\]/', $action['params'], $matches)) { + $args = [explode(',', $matches[1])]; + } else { + $args = explode(',', $action['params']); + } + + $medium = call_user_func_array([$medium, $action['method']], $args); + } + + if (isset($url_parts['fragment'])) { + $medium->urlHash($url_parts['fragment']); + } + + return $medium; + } + + /** + * Variation of parse_url() which works also with local streams. + * + * @param string $url + * @return array|bool + */ + protected function parseUrl(string $url) + { + $url_parts = Utils::multibyteParseUrl($url); + + if (isset($url_parts['scheme'])) { + /** @var UniformResourceLocator $locator */ + $locator = Grav::instance()['locator']; + + // Special handling for the streams. + if ($locator->schemeExists($url_parts['scheme'])) { + if (isset($url_parts['host'])) { + // Merge host and path into a path. + $url_parts['path'] = $url_parts['host'] . (isset($url_parts['path']) ? '/' . $url_parts['path'] : ''); + unset($url_parts['host']); + } + + $url_parts['stream'] = true; + } + } + + return $url_parts; + } + + /** + * @param string $url + * @return bool|string + */ + protected function resolveStream(string $url) + { + /** @var UniformResourceLocator $locator */ + $locator = Grav::instance()['locator']; + + if ($locator->isStream($url)) { + return $locator->findResource($url, false) ?: $locator->findResource($url, false, true); + } + + return $url; + } +} diff --git a/system/src/Grav/Common/Page/Medium/AbstractMedia.php b/system/src/Grav/Common/Page/Medium/AbstractMedia.php index 0ad4573..f67cd65 100644 --- a/system/src/Grav/Common/Page/Medium/AbstractMedia.php +++ b/system/src/Grav/Common/Page/Medium/AbstractMedia.php @@ -154,6 +154,9 @@ abstract class AbstractMedia implements ExportInterface, MediaCollectionInterfac */ public function add($name, $file) { + if (!$file) { + return; + } $this->offsetSet($name, $file); switch ($file->type) { case 'image': diff --git a/system/src/Grav/Common/Page/Medium/ImageMedium.php b/system/src/Grav/Common/Page/Medium/ImageMedium.php index ac29219..1925bef 100644 --- a/system/src/Grav/Common/Page/Medium/ImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/ImageMedium.php @@ -170,8 +170,7 @@ class ImageMedium extends Medium { /** @var UniformResourceLocator $locator */ $locator = Grav::instance()['locator']; - $image_path = $locator->findResource('cache://images', true); - $image_dir = $locator->findResource('cache://images', false); + $image_path = $locator->findResource('cache://images', true) ?: $locator->findResource('cache://images', true, true); $saved_image_path = $this->saveImage(); $output = preg_replace('|^' . preg_quote(GRAV_ROOT, '|') . '|', '', $saved_image_path); @@ -181,6 +180,7 @@ class ImageMedium extends Medium } if (Utils::startsWith($output, $image_path)) { + $image_dir = $locator->findResource('cache://images', false); $output = '/' . $image_dir . preg_replace('|^' . preg_quote($image_path, '|') . '|', '', $output); } @@ -232,7 +232,7 @@ class ImageMedium extends Medium } /** - * Allows the ability to override the Inmage's Pretty name stored in cache + * Allows the ability to override the image's pretty name stored in cache * * @param string $name */ diff --git a/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php b/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php index 627c361..c6d75bc 100644 --- a/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php +++ b/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php @@ -10,6 +10,7 @@ namespace Grav\Common\Page\Medium; use Grav\Common\Markdown\Parsedown; +use Grav\Common\Page\Markdown\Excerpts; trait ParsedownHtmlTrait { @@ -33,7 +34,7 @@ trait ParsedownHtmlTrait $element = $this->parsedownElement($title, $alt, $class, $id, $reset); if (!$this->parsedown) { - $this->parsedown = new Parsedown(null, null); + $this->parsedown = new Parsedown(new Excerpts()); } return $this->parsedown->elementToHtml($element); diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 82ff71c..1730359 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -19,6 +19,7 @@ use Grav\Common\Markdown\Parsedown; use Grav\Common\Markdown\ParsedownExtra; use Grav\Common\Page\Interfaces\PageInterface; use Grav\Common\Media\Traits\MediaTrait; +use Grav\Common\Page\Markdown\Excerpts; use Grav\Common\Taxonomy; use Grav\Common\Uri; use Grav\Common\Utils; @@ -27,7 +28,6 @@ use Negotiation\Accept; use Negotiation\Negotiator; use RocketTheme\Toolbox\Event\Event; use RocketTheme\Toolbox\File\MarkdownFile; -use Symfony\Component\Yaml\Exception\ParseException; define('PAGE_ORDER_PREFIX_REGEX', '/^[0-9]+\./u'); @@ -819,23 +819,31 @@ class Page implements PageInterface /** @var Config $config */ $config = Grav::instance()['config']; - $defaults = (array)$config->get('system.pages.markdown'); + $markdownDefaults = (array)$config->get('system.pages.markdown'); if (isset($this->header()->markdown)) { - $defaults = array_merge($defaults, $this->header()->markdown); + $markdownDefaults = array_merge($markdownDefaults, $this->header()->markdown); } // pages.markdown_extra is deprecated, but still check it... - if (!isset($defaults['extra']) && (isset($this->markdown_extra) || $config->get('system.pages.markdown_extra') !== null)) { + if (!isset($markdownDefaults['extra']) && (isset($this->markdown_extra) || $config->get('system.pages.markdown_extra') !== null)) { user_error('Configuration option \'system.pages.markdown_extra\' is deprecated since Grav 1.5, use \'system.pages.markdown.extra\' instead', E_USER_DEPRECATED); - $defaults['extra'] = $this->markdown_extra ?: $config->get('system.pages.markdown_extra'); + $markdownDefaults['extra'] = $this->markdown_extra ?: $config->get('system.pages.markdown_extra'); } + $extra = $markdownDefaults['extra'] ?? false; + $defaults = [ + 'markdown' => $markdownDefaults, + 'images' => $config->get('system.images', []) + ]; + + $excerpts = new Excerpts($this, $defaults); + // Initialize the preferred variant of Parsedown - if ($defaults['extra']) { - $parsedown = new ParsedownExtra($this, $defaults); + if ($extra) { + $parsedown = new ParsedownExtra($excerpts); } else { - $parsedown = new Parsedown($this, $defaults); + $parsedown = new Parsedown($excerpts); } $this->content = $parsedown->text($this->content); @@ -1397,12 +1405,12 @@ class Page implements PageInterface return $this->template_format; } - // Use content negotitation via the `accept:` header - $http_accept = $_SERVER['HTTP_ACCEPT'] ?? false; + // Use content negotiation via the `accept:` header + $http_accept = $_SERVER['HTTP_ACCEPT'] ?? null; if (is_string($http_accept)) { $negotiator = new Negotiator(); - $supported_types = Grav::instance()['config']->get('system.pages.types', ['html', 'json']); + $supported_types = Utils::getSupportPageTypes(['html', 'json']); $priorities = Utils::getMimeTypes($supported_types); $media_type = $negotiator->getBest($http_accept, $priorities); @@ -2847,9 +2855,9 @@ class Page implements PageInterface $result = []; foreach ((array)$value as $key => $val) { if (is_int($key)) { - $result = $result + $this->evaluate($val)->toArray(); + $result = $result + $this->evaluate($val, $only_published)->toArray(); } else { - $result = $result + $this->evaluate([$key => $val])->toArray(); + $result = $result + $this->evaluate([$key => $val], $only_published)->toArray(); } } @@ -2930,7 +2938,7 @@ class Page implements PageInterface case 'page': case 'self': $results = new Collection(); - $results = $results->addPage($page)->nonModular(); + $results = $results->addPage($page); break; case 'descendants': diff --git a/system/src/Grav/Common/Page/Pages.php b/system/src/Grav/Common/Page/Pages.php index d464278..cd0dcc0 100644 --- a/system/src/Grav/Common/Page/Pages.php +++ b/system/src/Grav/Common/Page/Pages.php @@ -88,6 +88,13 @@ class Pages */ protected $ignore_hidden; + /** @var string */ + protected $check_method; + + protected $pages_cache_id; + + protected $initialized = false; + /** * @var Types */ @@ -98,8 +105,6 @@ class Pages */ static protected $home_route; - protected $pages_cache_id; - /** * Constructor * @@ -226,11 +231,20 @@ class Pages return $this->baseUrl($lang, $absolute) . Uri::filterPath($route); } + public function setCheckMethod($method) + { + $this->check_method = strtolower($method); + } + /** * Class initialization. Must be called before using this class. */ public function init() { + if ($this->initialized) { + return; + } + $config = $this->grav['config']; $this->ignore_files = $config->get('system.pages.ignore_files'); $this->ignore_folders = $config->get('system.pages.ignore_folders'); @@ -240,6 +254,10 @@ class Pages $this->children = []; $this->routes = []; + if (!$this->check_method) { + $this->setCheckMethod($config->get('system.cache.check.method', 'file')); + } + $this->buildPages(); } @@ -947,7 +965,7 @@ class Pages $taxonomy = $this->grav['taxonomy']; // how should we check for last modified? Default is by file - switch (strtolower($config->get('system.cache.check.method', 'file'))) { + switch ($this->check_method) { case 'none': case 'off': $hash = 0; diff --git a/system/src/Grav/Common/Plugin.php b/system/src/Grav/Common/Plugin.php index d85fcb4..8729a51 100644 --- a/system/src/Grav/Common/Plugin.php +++ b/system/src/Grav/Common/Plugin.php @@ -151,15 +151,32 @@ class Plugin implements EventSubscriberInterface, \ArrayAccess if (\is_string($params)) { $dispatcher->addListener($eventName, [$this, $params]); } elseif (\is_string($params[0])) { - $dispatcher->addListener($eventName, [$this, $params[0]], $params[1] ?? 0); + $dispatcher->addListener($eventName, [$this, $params[0]], $this->getPriority($params, $eventName)); } else { foreach ($params as $listener) { - $dispatcher->addListener($eventName, [$this, $listener[0]], $listener[1] ?? 0); + $dispatcher->addListener($eventName, [$this, $listener[0]], $this->getPriority($listener, $eventName)); } } } } + /** + * @param array $params + * @param string $eventName + */ + private function getPriority($params, $eventName) + { + $grav = Grav::instance(); + $override = implode('.', ["priorities", $this->name, $eventName, $params[0]]); + if ($grav['config']->get($override) !== null) + { + return $grav['config']->get($override); + } elseif (isset($params[1])) { + return $params[1]; + } + return 0; + } + /** * @param array $events */ diff --git a/system/src/Grav/Common/Plugins.php b/system/src/Grav/Common/Plugins.php index d83c152..358727f 100644 --- a/system/src/Grav/Common/Plugins.php +++ b/system/src/Grav/Common/Plugins.php @@ -133,12 +133,25 @@ class Plugins extends Iterator */ public static function all() { - $plugins = Grav::instance()['plugins']; + $grav = Grav::instance(); + $plugins = $grav['plugins']; $list = []; foreach ($plugins as $instance) { $name = $instance->name; - $result = self::get($name); + + try { + $result = self::get($name); + } catch (\Exception $e) { + $exception = new \RuntimeException(sprintf('Plugin %s: %s', $name, $e->getMessage()), $e->getCode(), $e); + + /** @var Debugger $debugger */ + $debugger = $grav['debugger']; + $debugger->addMessage("Plugin {$name} cannot be loaded, please check Exceptions tab", 'error'); + $debugger->addException($exception); + + continue; + } if ($result) { $list[$name] = $result; @@ -185,24 +198,31 @@ class Plugins extends Iterator $grav = Grav::instance(); $locator = $grav['locator']; - $filePath = $locator->findResource('plugins://' . $name . DS . $name . PLUGIN_EXT); - if (!is_file($filePath)) { + $file = $locator->findResource('plugins://' . $name . DS . $name . PLUGIN_EXT); + + if (is_file($file)) { + // Local variables available in the file: $grav, $config, $name, $file + $class = include_once $file; + + $pluginClassFormat = [ + 'Grav\\Plugin\\' . ucfirst($name). 'Plugin', + 'Grav\\Plugin\\' . Inflector::camelize($name) . 'Plugin' + ]; + + foreach ($pluginClassFormat as $pluginClass) { + if (class_exists($pluginClass)) { + $class = new $pluginClass($name, $grav); + break; + } + } + } else { $grav['log']->addWarning( sprintf("Plugin '%s' enabled but not found! Try clearing cache with `bin/grav clear-cache`", $name) ); return null; } - require_once $filePath; - - $pluginClassName = 'Grav\\Plugin\\' . ucfirst($name) . 'Plugin'; - if (!class_exists($pluginClassName)) { - $pluginClassName = 'Grav\\Plugin\\' . $grav['inflector']->camelize($name) . 'Plugin'; - if (!class_exists($pluginClassName)) { - throw new \RuntimeException(sprintf("Plugin '%s' class not found! Try reinstalling this plugin.", $name)); - } - } - return new $pluginClassName($name, $grav); + return $class; } } diff --git a/system/src/Grav/Common/Processors/RequestProcessor.php b/system/src/Grav/Common/Processors/RequestProcessor.php index 8cb876a..97564e6 100644 --- a/system/src/Grav/Common/Processors/RequestProcessor.php +++ b/system/src/Grav/Common/Processors/RequestProcessor.php @@ -30,10 +30,13 @@ class RequestProcessor extends ProcessorBase $request = $request->withParsedBody(json_decode($request->getBody()->getContents(), true)); } + $uri = $request->getUri(); + $ext = mb_strtolower(pathinfo($uri->getPath(), PATHINFO_EXTENSION)); + $request = $request ->withAttribute('grav', $this->container) ->withAttribute('time', $_SERVER['REQUEST_TIME_FLOAT'] ?? GRAV_REQUEST_TIME) - ->withAttribute('route', Uri::getCurrentRoute()) + ->withAttribute('route', Uri::getCurrentRoute()->withExtension($ext)) ->withAttribute('referrer', $this->container['uri']->referrer()); $event = new RequestHandlerEvent(['request' => $request, 'handler' => $handler]); diff --git a/system/src/Grav/Common/Service/AccountsServiceProvider.php b/system/src/Grav/Common/Service/AccountsServiceProvider.php index ca15f5a..e0778be 100644 --- a/system/src/Grav/Common/Service/AccountsServiceProvider.php +++ b/system/src/Grav/Common/Service/AccountsServiceProvider.php @@ -27,9 +27,10 @@ class AccountsServiceProvider implements ServiceProviderInterface public function register(Container $container) { $container['accounts'] = function (Container $container) { - /** @var Debugger $debugger */ - $debugger = $container['debugger']; - if ($container['config']->get('system.accounts.type') === 'flex') { + $type = strtolower(defined('GRAV_USER_INSTANCE') ? GRAV_USER_INSTANCE : $container['config']->get('system.accounts.type', 'data')); + if ($type === 'flex') { + /** @var Debugger $debugger */ + $debugger = $container['debugger']; $debugger->addMessage('User Accounts: Flex Directory'); return $this->flexAccounts($container); } @@ -46,7 +47,9 @@ class AccountsServiceProvider implements ServiceProviderInterface protected function dataAccounts(Container $container) { - define('GRAV_USER_INSTANCE', 'DATA'); + if (!defined('GRAV_USER_INSTANCE')) { + define('GRAV_USER_INSTANCE', 'DATA'); + } // Use User class for backwards compatibility. return new DataUser\UserCollection(User::class); @@ -54,7 +57,9 @@ class AccountsServiceProvider implements ServiceProviderInterface protected function flexAccounts(Container $container) { - define('GRAV_USER_INSTANCE', 'FLEX'); + if (!defined('GRAV_USER_INSTANCE')) { + define('GRAV_USER_INSTANCE', 'FLEX'); + } /** @var Config $config */ $config = $container['config']; diff --git a/system/src/Grav/Common/Service/RequestServiceProvider.php b/system/src/Grav/Common/Service/RequestServiceProvider.php index d7b496d..6410ef7 100644 --- a/system/src/Grav/Common/Service/RequestServiceProvider.php +++ b/system/src/Grav/Common/Service/RequestServiceProvider.php @@ -31,8 +31,8 @@ class RequestServiceProvider implements ServiceProviderInterface return $creator->fromGlobals(); }; - $container['route'] = function() { - return Uri::getCurrentRoute(); - }; + $container['route'] = $container->factory(function() { + return clone Uri::getCurrentRoute(); + }); } } diff --git a/system/src/Grav/Common/Service/SessionServiceProvider.php b/system/src/Grav/Common/Service/SessionServiceProvider.php index 96cbec9..84d23d3 100644 --- a/system/src/Grav/Common/Service/SessionServiceProvider.php +++ b/system/src/Grav/Common/Service/SessionServiceProvider.php @@ -13,6 +13,7 @@ use Grav\Common\Config\Config; use Grav\Common\Debugger; use Grav\Common\Session; use Grav\Common\Uri; +use Grav\Common\Utils; use Pimple\Container; use Pimple\ServiceProviderInterface; use RocketTheme\Toolbox\Session\Message; @@ -49,14 +50,17 @@ class SessionServiceProvider implements ServiceProviderInterface // Activate admin if we're inside the admin path. $is_admin = false; if ($config->get('plugins.admin.enabled')) { - $base = '/' . trim($config->get('plugins.admin.route'), '/'); + $admin_base = '/' . trim($config->get('plugins.admin.route'), '/'); // Uri::route() is not processed yet, let's quickly get what we need. $current_route = str_replace(Uri::filterPath($uri->rootUrl(false)), '', parse_url($uri->url(true), PHP_URL_PATH)); + // Test to see if path starts with a supported language + admin base + $lang = Utils::pathPrefixedByLangCode($current_route); + $lang_admin_base = '/' . $lang . $admin_base; + // Check no language, simple language prefix (en) and region specific language prefix (en-US). - $pos = strpos($current_route, $base); - if ($pos === 0 || $pos === 3 || $pos === 6) { + if (Utils::startsWith($current_route, $admin_base) || Utils::startsWith($current_route, $lang_admin_base)) { $cookie_lifetime = $config->get('plugins.admin.session.timeout', 1800); $enabled = $is_admin = true; } diff --git a/system/src/Grav/Common/Themes.php b/system/src/Grav/Common/Themes.php index 8c0e08b..6720d46 100644 --- a/system/src/Grav/Common/Themes.php +++ b/system/src/Grav/Common/Themes.php @@ -100,7 +100,19 @@ class Themes extends Iterator } $theme = $directory->getFilename(); - $result = $this->get($theme); + + try { + $result = $this->get($theme); + } catch (\Exception $e) { + $exception = new \RuntimeException(sprintf('Theme %s: %s', $theme, $e->getMessage()), $e->getCode(), $e); + + /** @var Debugger $debugger */ + $debugger = $this->grav['debugger']; + $debugger->addMessage("Theme {$theme} cannot be loaded, please check Exceptions tab", 'error'); + $debugger->addException($exception); + + continue; + } if ($result) { $list[$theme] = $result; @@ -196,8 +208,7 @@ class Themes extends Iterator foreach ($themeClassFormat as $themeClass) { if (class_exists($themeClass)) { - $themeClassName = $themeClass; - $class = new $themeClassName($grav, $config, $name); + $class = new $themeClass($grav, $config, $name); break; } } diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeMarkdown.php b/system/src/Grav/Common/Twig/Node/TwigNodeMarkdown.php index 4d238da..7bb2bfc 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeMarkdown.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeMarkdown.php @@ -41,6 +41,6 @@ class TwigNodeMarkdown extends Node implements NodeOutputInterface ->write('$lines = explode("\n", $content);' . PHP_EOL) ->write('$content = preg_replace(\'/^\' . $matches[0]. \'/\', "", $lines);' . PHP_EOL) ->write('$content = join("\n", $content);' . PHP_EOL) - ->write('echo $this->env->getExtension(\'Grav\Common\Twig\TwigExtension\')->markdownFunction($content);' . PHP_EOL); + ->write('echo $this->env->getExtension(\'Grav\Common\Twig\TwigExtension\')->markdownFunction($context, $content);' . PHP_EOL); } } diff --git a/system/src/Grav/Common/Twig/TwigExtension.php b/system/src/Grav/Common/Twig/TwigExtension.php index baced9a..f84923e 100644 --- a/system/src/Grav/Common/Twig/TwigExtension.php +++ b/system/src/Grav/Common/Twig/TwigExtension.php @@ -84,7 +84,7 @@ class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsIn new \Twig_SimpleFilter('fieldName', [$this, 'fieldNameFilter']), new \Twig_SimpleFilter('ksort', [$this, 'ksortFilter']), new \Twig_SimpleFilter('ltrim', [$this, 'ltrimFilter']), - new \Twig_SimpleFilter('markdown', [$this, 'markdownFunction'], ['is_safe' => ['html']]), + new \Twig_SimpleFilter('markdown', [$this, 'markdownFunction'], ['needs_context' => true, 'is_safe' => ['html']]), new \Twig_SimpleFilter('md5', [$this, 'md5Filter']), new \Twig_SimpleFilter('base32_encode', [$this, 'base32EncodeFilter']), new \Twig_SimpleFilter('base32_decode', [$this, 'base32DecodeFilter']), @@ -455,7 +455,7 @@ class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsIn } /** - * Gets a human readable output for cron sytnax + * Gets a human readable output for cron syntax * * @param $at * @return string @@ -613,12 +613,14 @@ class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsIn /** * @param string $string * + * @param array $context * @param bool $block Block or Line processing * @return mixed|string */ - public function markdownFunction($string, $block = true) + public function markdownFunction($context, $string, $block = true) { - return Utils::processMarkdown($string, $block); + $page = $context['page'] ?? null; + return Utils::processMarkdown($string, $block, $page); } /** @@ -1004,10 +1006,10 @@ class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsIn */ public function authorize($action) { - /** @var UserInterface $user */ - $user = $this->grav['user']; + /** @var UserInterface|null $user */ + $user = $this->grav['user'] ?? null; - if (!$user->authenticated || (isset($user->authorized) && !$user->authorized)) { + if (!$user || !$user->authenticated || (isset($user->authorized) && !$user->authorized)) { return false; } @@ -1136,7 +1138,7 @@ class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsIn } /** - * Get's the Exif data for a file + * Get the Exif data for a file * * @param string $image * @param bool $raw @@ -1154,7 +1156,7 @@ class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsIn $exif_reader = $this->grav['exif']->getReader(); - if ($image & file_exists($image) && $this->config->get('system.media.auto_metadata_exif') && $exif_reader) { + if ($image && file_exists($image) && $this->config->get('system.media.auto_metadata_exif') && $exif_reader) { $exif_data = $exif_reader->read($image); diff --git a/system/src/Grav/Common/Uri.php b/system/src/Grav/Common/Uri.php index 3e28280..16d7fb1 100644 --- a/system/src/Grav/Common/Uri.php +++ b/system/src/Grav/Common/Uri.php @@ -1154,7 +1154,7 @@ class Uri $this->scheme = $env['X-FORWARDED-PROTO']; } elseif (isset($env['HTTP_CLOUDFRONT_FORWARDED_PROTO'])) { $this->scheme = $env['HTTP_CLOUDFRONT_FORWARDED_PROTO']; - } elseif (isset($env['REQUEST_SCHEME'])) { + } elseif (isset($env['REQUEST_SCHEME']) && empty($env['HTTPS'])) { $this->scheme = $env['REQUEST_SCHEME']; } else { $https = $env['HTTPS'] ?? ''; @@ -1286,7 +1286,7 @@ class Uri } /** - * Get's post from either $_POST or JSON response object + * Get post from either $_POST or JSON response object * By default returns all data, or can return a single item * * @param string $element @@ -1345,7 +1345,7 @@ class Uri */ public function isValidExtension($extension) { - $valid_page_types = implode('|', Grav::instance()['config']->get('system.pages.types')); + $valid_page_types = implode('|', Utils::getSupportPageTypes()); // Strip the file extension for valid page types if (preg_match('/(' . $valid_page_types . ')/', $extension)) { diff --git a/system/src/Grav/Common/User/DataUser/UserCollection.php b/system/src/Grav/Common/User/DataUser/UserCollection.php index 0970ce7..800322a 100644 --- a/system/src/Grav/Common/User/DataUser/UserCollection.php +++ b/system/src/Grav/Common/User/DataUser/UserCollection.php @@ -118,4 +118,13 @@ class UserCollection implements UserCollectionInterface return $file_path && unlink($file_path); } + + public function count(): int + { + // check for existence of a user account + $account_dir = $file_path = Grav::instance()['locator']->findResource('account://'); + $accounts = glob($account_dir . '/*.yaml') ?: []; + + return count($accounts); + } } diff --git a/system/src/Grav/Common/User/FlexUser/User.php b/system/src/Grav/Common/User/FlexUser/User.php index 5ef3819..0d83c51 100644 --- a/system/src/Grav/Common/User/FlexUser/User.php +++ b/system/src/Grav/Common/User/FlexUser/User.php @@ -9,6 +9,7 @@ namespace Grav\Common\User\FlexUser; +use Grav\Common\Data\Blueprint; use Grav\Common\Grav; use Grav\Common\Media\Interfaces\MediaCollectionInterface; use Grav\Common\Page\Media; @@ -21,6 +22,7 @@ use Grav\Framework\File\Formatter\JsonFormatter; use Grav\Framework\File\Formatter\YamlFormatter; use Grav\Framework\Flex\FlexDirectory; use Grav\Framework\Flex\FlexObject; +use Grav\Framework\Flex\Storage\FileStorage; use Grav\Framework\Flex\Traits\FlexAuthorizeTrait; use Grav\Framework\Flex\Traits\FlexMediaTrait; use Grav\Framework\Form\FormFlashFile; @@ -381,6 +383,31 @@ class User extends FlexObject implements UserInterface, MediaManipulationInterfa return $this->getBlueprint()->extra($this->toArray()); } + /** + * @param string $name + * @return Blueprint + */ + public function getBlueprint(string $name = '') + { + $blueprint = clone parent::getBlueprint($name); + + $blueprint->addDynamicHandler('flex', function (array &$field, $property, array &$call) { + $params = (array)$call['params']; + $method = array_shift($params); + + if (method_exists($this, $method)) { + $value = $this->{$method}(...$params); + if (\is_array($value) && isset($field[$property]) && \is_array($field[$property])) { + $field[$property] = array_merge_recursive($field[$property], $value); + } else { + $field[$property] = $value; + } + } + }); + + return $blueprint->init(); + } + /** * Return unmodified data as raw string. * @@ -420,6 +447,15 @@ class User extends FlexObject implements UserInterface, MediaManipulationInterfa */ public function save() { + // TODO: We may want to handle this in the storage layer in the future. + $key = $this->getStorageKey(); + if (!$key || strpos($key, '@@')) { + $storage = $this->getFlexDirectory()->getStorage(); + if ($storage instanceof FileStorage) { + $this->setStorageKey($this->getKey()); + } + } + $password = $this->getProperty('password'); if (null !== $password) { $this->unsetProperty('password'); @@ -431,6 +467,20 @@ class User extends FlexObject implements UserInterface, MediaManipulationInterfa return parent::save(); } + public function isAuthorized(string $action, string $scope = null, UserInterface $user = null): bool + { + if (null === $user) { + /** @var UserInterface $user */ + $user = Grav::instance()['user'] ?? null; + } + + if ($user instanceof User && $user->getStorageKey() === $this->getStorageKey()) { + return true; + } + + return parent::isAuthorized($action, $scope, $user); + } + /** * @return array */ diff --git a/system/src/Grav/Common/User/Interfaces/UserCollectionInterface.php b/system/src/Grav/Common/User/Interfaces/UserCollectionInterface.php index a8cc7d6..37b9009 100644 --- a/system/src/Grav/Common/User/Interfaces/UserCollectionInterface.php +++ b/system/src/Grav/Common/User/Interfaces/UserCollectionInterface.php @@ -9,7 +9,7 @@ namespace Grav\Common\User\Interfaces; -interface UserCollectionInterface +interface UserCollectionInterface extends \Countable { /** * Load user account. diff --git a/system/src/Grav/Common/User/Traits/UserTrait.php b/system/src/Grav/Common/User/Traits/UserTrait.php index 2b69768..f711cc9 100644 --- a/system/src/Grav/Common/User/Traits/UserTrait.php +++ b/system/src/Grav/Common/User/Traits/UserTrait.php @@ -148,12 +148,13 @@ trait UserTrait // Try looking for provider. $provider = $this->get('provider'); - if (\is_array($provider)) { - if (isset($provider['avatar_url']) && \is_string($provider['avatar_url'])) { - return $provider['avatar_url']; + $provider_options = $this->get($provider); + if (\is_array($provider_options)) { + if (isset($provider_options['avatar_url']) && \is_string($provider_options['avatar_url'])) { + return $provider_options['avatar_url']; } - if (isset($provider['avatar']) && \is_string($provider['avatar'])) { - return $provider['avatar']; + if (isset($provider_options['avatar']) && \is_string($provider_options['avatar'])) { + return $provider_options['avatar']; } } diff --git a/system/src/Grav/Common/Utils.php b/system/src/Grav/Common/Utils.php index c254009..56b2d89 100644 --- a/system/src/Grav/Common/Utils.php +++ b/system/src/Grav/Common/Utils.php @@ -13,6 +13,7 @@ use Grav\Common\Helpers\Truncator; use Grav\Common\Page\Interfaces\PageInterface; use Grav\Common\Markdown\Parsedown; use Grav\Common\Markdown\ParsedownExtra; +use Grav\Common\Page\Markdown\Excerpts; use RocketTheme\Toolbox\Event\Event; use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; @@ -27,55 +28,103 @@ abstract class Utils /** * Simple helper method to make getting a Grav URL easier * - * @param string $input + * @param string|object $input * @param bool $domain + * @param bool $fail_gracefully * @return bool|null|string */ - public static function url($input, $domain = false) + public static function url($input, $domain = false, $fail_gracefully = false) { - if (!trim((string)$input)) { - $input = '/'; + if ((!is_string($input) && !method_exists($input, '__toString')) || !trim($input)) { + if ($fail_gracefully) { + $input = '/'; + } else { + return false; + } } - if (Grav::instance()['config']->get('system.absolute_urls', false)) { - $domain = true; - } + $input = (string)$input; - if (Grav::instance()['uri']->isExternal($input)) { + if (Uri::isExternal($input)) { return $input; } + $grav = Grav::instance(); + /** @var Uri $uri */ - $uri = Grav::instance()['uri']; + $uri = $grav['uri']; - $root = $uri->rootUrl(); - $input = Utils::replaceFirstOccurrence($root, '', $input); - - $input = ltrim((string)$input, '/'); - - if (Utils::contains((string)$input, '://')) { + if (static::contains((string)$input, '://')) { /** @var UniformResourceLocator $locator */ - $locator = Grav::instance()['locator']; + $locator = $grav['locator']; $parts = Uri::parseUrl($input); - if ($parts) { - $resource = $locator->findResource("{$parts['scheme']}://{$parts['host']}{$parts['path']}", false); + if (is_array($parts)) { + // Make sure we always have scheme, host, port and path. + $scheme = $parts['scheme'] ?? ''; + $host = $parts['host'] ?? ''; + $port = $parts['port'] ?? ''; + $path = $parts['path'] ?? ''; - if (isset($parts['query'])) { - $resource = $resource . '?' . $parts['query']; + if ($scheme && !$port) { + // If URL has a scheme, we need to check if it's one of Grav streams. + if (!$locator->schemeExists($scheme)) { + // If scheme does not exists as a stream, assume it's external. + return str_replace(' ', '%20', $input); + } + + // Attempt to find the resource (because of parse_url() we need to put host back to path). + $resource = $locator->findResource("{$scheme}://{$host}{$path}", false); + + if ($resource === false) { + if (!$fail_gracefully) { + return false; + } + + // Return location where the file would be if it was saved. + $resource = $locator->findResource("{$scheme}://{$host}{$path}", false, true); + } + + } elseif ($host || $port) { + // If URL doesn't have scheme but has host or port, it is external. + return str_replace(' ', '%20', $input); } + + if (!empty($resource)) { + // Add query string back. + if (isset($parts['query'])) { + $resource .= '?' . $parts['query']; + } + + // Add fragment back. + if (isset($parts['fragment'])) { + $resource .= '#' . $parts['fragment']; + } + } + } else { // Not a valid URL (can still be a stream). $resource = $locator->findResource($input, false); } - } else { + $root = $uri->rootUrl(); + + if (static::startsWith($input, $root)) { + $input = static::replaceFirstOccurrence($root, '', $input); + } + + $input = ltrim($input, '/'); + $resource = $input; } + if (!$fail_gracefully && $resource === false) { + return false; + } + $domain = $domain ?: $grav['config']->get('system.absolute_urls', false); return rtrim($uri->rootUrl($domain), '/') . '/' . ($resource ?? ''); } @@ -274,6 +323,35 @@ abstract class Utils return (object)array_merge((array)$obj1, (array)$obj2); } + /** + * Lowercase an entire array. Useful when combined with `in_array()` + * + * @param array $a + * @return array|false + */ + public static function arrayLower(Array $a) + { + return array_map('mb_strtolower', $a); + } + + /** + * Simple function to remove item/s in an array by value + * + * @param $search array + * @param $value string|array + * @return array + */ + public static function arrayRemoveValue(Array $search, $value) + { + foreach ((array) $value as $val) { + $key = array_search($val, $search); + if ($key !== false) { + unset($search[$key]); + } + } + return $search; + } + /** * Recursive Merge with uniqueness * @@ -974,17 +1052,19 @@ abstract class Utils * * @param string $string The path * - * @return bool + * @return bool|string Either false or the language + * */ public static function pathPrefixedByLangCode($string) { - if (strlen($string) <= 3) { - return false; + $languages_enabled = Grav::instance()['config']->get('system.languages.supported', []); + $parts = explode('/', trim($string, '/')); + + if (count($parts) > 0 && in_array($parts[0], $languages_enabled)) { + return $parts[0]; } - $languages_enabled = Grav::instance()['config']->get('system.languages.supported', []); - - return $string[0] === '/' && $string[3] === '/' && \in_array(substr($string, 1, 2), $languages_enabled, true); + return false; } /** @@ -1054,12 +1134,9 @@ abstract class Utils */ private static function generateNonceString($action, $previousTick = false) { - $username = ''; - if (isset(Grav::instance()['user'])) { - $user = Grav::instance()['user']; - $username = $user->username; - } + $grav = Grav::instance(); + $username = isset($grav['user']) ? $grav['user']->username : ''; $token = session_id(); $i = self::nonceTick(); @@ -1067,7 +1144,7 @@ abstract class Utils $i--; } - return ($i . '|' . $action . '|' . $username . '|' . $token . '|' . Grav::instance()['config']->get('security.salt')); + return ($i . '|' . $action . '|' . $username . '|' . $token . '|' . $grav['config']->get('security.salt')); } /** @@ -1281,7 +1358,7 @@ abstract class Utils } /** - * Get's path based on a token + * Get path based on a token * * @param string $path * @param PageInterface|null $page @@ -1341,6 +1418,8 @@ abstract class Utils $post_max_size = static::parseSize(ini_get('post_max_size')); if ($post_max_size > 0) { $max_size = $post_max_size; + } else { + $max_size = 0; } $upload_max = static::parseSize(ini_get('upload_max_filesize')); @@ -1388,7 +1467,7 @@ abstract class Utils $pow = min($pow, count($units) - 1); // Uncomment one of the following alternatives - $bytes /= pow(1024, $pow); + $bytes /= 1024 ** $pow; // $bytes /= (1 << (10 * $pow)); return round($bytes, $precision) . ' ' . $units[$pow]; @@ -1404,11 +1483,12 @@ abstract class Utils { $unit = preg_replace('/[^bkmgtpezy]/i', '', $size); $size = preg_replace('/[^0-9\.]/', '', $size); + if ($unit) { - return round($size * pow(1024, stripos('bkmgtpezy', $unit[0]))); - } else { - return round($size); + $size = $size * pow(1024, stripos('bkmgtpezy', $unit[0])); } + + return (int) abs(round($size)); } /** @@ -1446,19 +1526,28 @@ abstract class Utils * * @param string $string * - * @param bool $block Block or Line processing + * @param bool $block Block or Line processing + * @param null $page * @return string + * @throws \Exception */ - public static function processMarkdown($string, $block = true) + public static function processMarkdown($string, $block = true, $page = null) { - $page = Grav::instance()['page'] ?? null; - $defaults = Grav::instance()['config']->get('system.pages.markdown'); + $grav = Grav::instance(); + $page = $page ?? $grav['page'] ?? null; + $defaults = [ + 'markdown' => $grav['config']->get('system.pages.markdown', []), + 'images' => $grav['config']->get('system.images', []) + ]; + $extra = $defaults['markdown']['extra'] ?? false; + + $excerpts = new Excerpts($page, $defaults); // Initialize the preferred variant of Parsedown - if ($defaults['extra']) { - $parsedown = new ParsedownExtra($page, $defaults); + if ($extra) { + $parsedown = new ParsedownExtra($excerpts); } else { - $parsedown = new Parsedown($page, $defaults); + $parsedown = new Parsedown($excerpts); } if ($block) { @@ -1477,12 +1566,11 @@ abstract class Utils * @param int $prefix * * @return string - * @throws \InvalidArgumentException if provided an invalid IP */ public static function getSubnet($ip, $prefix = 64) { if (!filter_var($ip, FILTER_VALIDATE_IP)) { - throw new \InvalidArgumentException('Invalid IP: ' . $ip); + return $ip; } // Packed representation of IP @@ -1509,4 +1597,23 @@ abstract class Utils return $subnet; } + + /** + * Wrapper to ensure html, htm in the front of the supported page types + * + * @param array|null $defaults + * @return array|mixed + */ + public static function getSupportPageTypes(array $defaults = null) + { + $types = Grav::instance()['config']->get('system.pages.types', $defaults); + + // remove html/htm + $types = static::arrayRemoveValue($types, ['html', 'htm']); + + // put them back at the front + $types = array_merge(['html', 'htm'], $types); + + return $types; + } } diff --git a/system/src/Grav/Console/Cli/ClearCacheCommand.php b/system/src/Grav/Console/Cli/ClearCacheCommand.php index 0ab4128..8ef6f4f 100644 --- a/system/src/Grav/Console/Cli/ClearCacheCommand.php +++ b/system/src/Grav/Console/Cli/ClearCacheCommand.php @@ -21,6 +21,7 @@ class ClearCacheCommand extends ConsoleCommand ->setName('cache') ->setAliases(['clearcache', 'cache-clear']) ->setDescription('Clears Grav cache') + ->addOption('invalidate', null, InputOption::VALUE_NONE, 'Invalidate cache, but do not remove any files') ->addOption('purge', null, InputOption::VALUE_NONE, 'If set purge old caches') ->addOption('all', null, InputOption::VALUE_NONE, 'If set will remove all including compiled, twig, doctrine caches') ->addOption('assets-only', null, InputOption::VALUE_NONE, 'If set will remove only assets/*') @@ -64,6 +65,8 @@ class ClearCacheCommand extends ConsoleCommand $remove = 'cache-only'; } elseif ($this->input->getOption('tmp-only')) { $remove = 'tmp-only'; + } elseif ($this->input->getOption('invalidate')) { + $remove = 'invalidate'; } else { $remove = 'standard'; } diff --git a/system/src/Grav/Console/Cli/YamlLinterCommand.php b/system/src/Grav/Console/Cli/YamlLinterCommand.php index 18cdb49..894f1c0 100644 --- a/system/src/Grav/Console/Cli/YamlLinterCommand.php +++ b/system/src/Grav/Console/Cli/YamlLinterCommand.php @@ -61,6 +61,15 @@ class YamlLinterCommand extends ConsoleCommand $this->displayErrors($errors, $io); } + $io->section('Page Blueprints'); + $errors = YamlLinter::lintBlueprints(); + + if (empty($errors)) { + $io->success('No YAML Linting issues with blueprints'); + } else { + $this->displayErrors($errors, $io); + } + } protected function displayErrors($errors, $io) diff --git a/system/src/Grav/Console/Gpm/InfoCommand.php b/system/src/Grav/Console/Gpm/InfoCommand.php index ee89584..2fe1a2e 100644 --- a/system/src/Grav/Console/Gpm/InfoCommand.php +++ b/system/src/Grav/Console/Gpm/InfoCommand.php @@ -114,7 +114,7 @@ class InfoCommand extends ConsoleCommand if ($info === 'date') { $name = 'Last Update'; - $data = date('D, j M Y, H:i:s, P ', strtotime('2014-09-16T00:07:16Z')); + $data = date('D, j M Y, H:i:s, P ', strtotime($data)); } $name = str_pad($name, 12); diff --git a/system/src/Grav/Console/Gpm/InstallCommand.php b/system/src/Grav/Console/Gpm/InstallCommand.php index 840ee5b..8d544d4 100644 --- a/system/src/Grav/Console/Gpm/InstallCommand.php +++ b/system/src/Grav/Console/Gpm/InstallCommand.php @@ -372,7 +372,7 @@ class InstallCommand extends ConsoleCommand $helper = $this->getHelper('question'); $question = new ConfirmationQuestion('Do you wish to install this demo content? [y|N] ', false); - $answer = $this->all_yes ? true : $helper->ask($this->input, $this->output, $question); + $answer = $helper->ask($this->input, $this->output, $question); if (!$answer) { $this->output->writeln(" '- Skipped! "); diff --git a/system/src/Grav/Framework/Collection/AbstractIndexCollection.php b/system/src/Grav/Framework/Collection/AbstractIndexCollection.php index 7299c09..0e4fae2 100644 --- a/system/src/Grav/Framework/Collection/AbstractIndexCollection.php +++ b/system/src/Grav/Framework/Collection/AbstractIndexCollection.php @@ -437,7 +437,7 @@ abstract class AbstractIndexCollection implements CollectionInterface } /** - * Implementes JsonSerializable interface. + * Implements JsonSerializable interface. * * @return array */ diff --git a/system/src/Grav/Framework/Collection/ArrayCollection.php b/system/src/Grav/Framework/Collection/ArrayCollection.php index d3a2002..f79ab96 100644 --- a/system/src/Grav/Framework/Collection/ArrayCollection.php +++ b/system/src/Grav/Framework/Collection/ArrayCollection.php @@ -84,7 +84,7 @@ class ArrayCollection extends BaseArrayCollection implements CollectionInterface } /** - * Implementes JsonSerializable interface. + * Implements JsonSerializable interface. * * @return array */ diff --git a/system/src/Grav/Framework/File/Formatter/CsvFormatter.php b/system/src/Grav/Framework/File/Formatter/CsvFormatter.php index 2a70025..8945df0 100644 --- a/system/src/Grav/Framework/File/Formatter/CsvFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/CsvFormatter.php @@ -53,11 +53,11 @@ class CsvFormatter extends AbstractFormatter $header = array_keys(reset($data)); // Encode the field names - $string = implode($delimiter, $header). "\n"; + $string = $this->encodeLine($header, $delimiter); // Encode the data foreach ($data as $row) { - $string .= implode($delimiter, $row). "\n"; + $string .= $this->encodeLine($row, $delimiter); } return $string; @@ -87,4 +87,23 @@ class CsvFormatter extends AbstractFormatter return $list; } + + protected function encodeLine(array $line, $delimiter = null): string + { + foreach ($line as $key => &$value) { + $value = $this->escape((string)$value); + } + unset($value); + + return implode($delimiter, $line). "\n"; + } + + protected function escape(string $value) + { + if (preg_match('/[,"\r\n]/u', $value)) { + $value = '"' . preg_replace('/"/', '""', $value) . '"'; + } + + return $value; + } } diff --git a/system/src/Grav/Framework/File/Formatter/YamlFormatter.php b/system/src/Grav/Framework/File/Formatter/YamlFormatter.php index a519383..189626d 100644 --- a/system/src/Grav/Framework/File/Formatter/YamlFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/YamlFormatter.php @@ -97,12 +97,12 @@ class YamlFormatter extends AbstractFormatter @ini_set('yaml.decode_php', $saved); if ($decoded !== false) { - return $decoded; + return (array) $decoded; } } try { - return YamlParser::parse($data); + return (array) YamlParser::parse($data); } catch (ParseException $e) { if ($this->useCompatibleDecoder()) { return (array) FallbackYamlParser::parse($data); diff --git a/system/src/Grav/Framework/Flex/Flex.php b/system/src/Grav/Framework/Flex/Flex.php index 8e71b2a..e87e903 100644 --- a/system/src/Grav/Framework/Flex/Flex.php +++ b/system/src/Grav/Framework/Flex/Flex.php @@ -91,7 +91,7 @@ class Flex implements \Countable // Return the directories in the given order. $directories = []; foreach ($types as $type) { - $directories = $this->types[$type] ?? null; + $directories[$type] = $this->types[$type] ?? null; } return $keepMissing ? $directories : array_filter($directories); diff --git a/system/src/Grav/Framework/Flex/FlexCollection.php b/system/src/Grav/Framework/Flex/FlexCollection.php index ac87f7c..5e5431b 100644 --- a/system/src/Grav/Framework/Flex/FlexCollection.php +++ b/system/src/Grav/Framework/Flex/FlexCollection.php @@ -9,6 +9,7 @@ namespace Grav\Framework\Flex; +use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Criteria; use Grav\Common\Debugger; use Grav\Common\Grav; @@ -125,7 +126,7 @@ class FlexCollection extends ObjectCollection implements FlexCollectionInterface /** * @param array $filters - * @return FlexCollectionInterface + * @return FlexCollectionInterface|Collection */ public function filterBy(array $filters) { @@ -490,7 +491,12 @@ class FlexCollection extends ObjectCollection implements FlexCollectionInterface $twig = $grav['twig']; try { - return $twig->twig()->resolveTemplate(["flex-objects/layouts/{$this->getFlexType()}/collection/{$layout}.html.twig"]); + return $twig->twig()->resolveTemplate( + [ + "flex-objects/layouts/{$this->getFlexType()}/collection/{$layout}.html.twig", + "flex-objects/layouts/_default/collection/{$layout}.html.twig" + ] + ); } catch (LoaderError $e) { /** @var Debugger $debugger */ $debugger = Grav::instance()['debugger']; diff --git a/system/src/Grav/Framework/Flex/FlexDirectory.php b/system/src/Grav/Framework/Flex/FlexDirectory.php index 7b50a7e..c75a901 100644 --- a/system/src/Grav/Framework/Flex/FlexDirectory.php +++ b/system/src/Grav/Framework/Flex/FlexDirectory.php @@ -315,15 +315,16 @@ class FlexDirectory implements FlexAuthorizeInterface $gravCache = $grav['cache']; $config = $this->getConfig('cache.' . $namespace); if (empty($config['enabled'])) { - throw new \RuntimeException(sprintf('Flex: %s %s cache not enabled', $this->type, $namespace)); - } - $timeout = $config['timeout'] ?? 60; + $cache = new MemoryCache('flex-objects-' . $this->getFlexType()); + } else { + $timeout = $config['timeout'] ?? 60; - $key = $gravCache->getKey(); - if (Utils::isAdminPlugin()) { - $key = substr($key, 0, -1); + $key = $gravCache->getKey(); + if (Utils::isAdminPlugin()) { + $key = substr($key, 0, -1); + } + $cache = new DoctrineCache($gravCache->getCacheDriver(), 'flex-objects-' . $this->getFlexType() . $key, $timeout); } - $cache = new DoctrineCache($gravCache->getCacheDriver(), 'flex-objects-' . $this->getFlexType() . $key, $timeout); } catch (\Exception $e) { /** @var Debugger $debugger */ $debugger = Grav::instance()['debugger']; @@ -519,7 +520,9 @@ class FlexDirectory implements FlexAuthorizeInterface // Store updated rows to the cache. if ($updated) { try { - $debugger->addMessage(sprintf('Flex: Caching %d %s: %s', \count($updated), $this->type, implode(', ', array_keys($updated))), 'debug'); + if (!$cache instanceof MemoryCache) { + $debugger->addMessage(sprintf('Flex: Caching %d %s: %s', \count($updated), $this->type, implode(', ', array_keys($updated))), 'debug'); + } $cache->setMultiple($updated); } catch (InvalidArgumentException $e) { $debugger->addException($e); @@ -640,7 +643,10 @@ class FlexDirectory implements FlexAuthorizeInterface /** @var string|FlexIndexInterface $className */ $className = $this->getIndexClass(); $keys = $className::loadEntriesFromStorage($storage); - $debugger->addMessage(sprintf('Flex: Caching %s index of %d objects', $this->type, \count($keys)), 'debug'); + if (!$cache instanceof MemoryCache) { + $debugger->addMessage(sprintf('Flex: Caching %s index of %d objects', $this->type, \count($keys)), + 'debug'); + } try { $cache->set('__keys', $keys); } catch (InvalidArgumentException $e) { diff --git a/system/src/Grav/Framework/Flex/FlexForm.php b/system/src/Grav/Framework/Flex/FlexForm.php index 7faad52..6ded345 100644 --- a/system/src/Grav/Framework/Flex/FlexForm.php +++ b/system/src/Grav/Framework/Flex/FlexForm.php @@ -20,6 +20,7 @@ use Grav\Framework\Form\Traits\FormTrait; use Grav\Framework\Route\Route; use Twig\Error\LoaderError; use Twig\Error\SyntaxError; +use Twig\Template; use Twig\TemplateWrapper; /** @@ -82,7 +83,7 @@ class FlexForm implements FlexFormInterface } /** - * @return Data|FlexObjectInterface + * @return Data|FlexObjectInterface|object */ public function getData() { @@ -103,7 +104,7 @@ class FlexForm implements FlexFormInterface $value = $this->data ? $this->data[$name] : null; // Return the form data or fall back to the object property. - return $value ?? $this->getObject()->value($name); + return $value ?? $this->getObject()->getFormValue($name); } public function getDefaultValue(string $name) @@ -277,7 +278,7 @@ class FlexForm implements FlexFormInterface /** * @param string $layout - * @return TemplateWrapper + * @return Template|TemplateWrapper * @throws LoaderError * @throws SyntaxError */ diff --git a/system/src/Grav/Framework/Flex/FlexIndex.php b/system/src/Grav/Framework/Flex/FlexIndex.php index 29ac33b..8b96b4a 100644 --- a/system/src/Grav/Framework/Flex/FlexIndex.php +++ b/system/src/Grav/Framework/Flex/FlexIndex.php @@ -312,9 +312,10 @@ class FlexIndex extends ObjectIndex implements FlexCollectionInterface, FlexInde // Ordering can be done by using index only. $previous = null; foreach (array_reverse($orderings) as $field => $ordering) { + $field = (string)$field; if ($this->getKeyField() === $field) { $keys = $this->getKeys(); - $search = array_combine($keys, $keys); + $search = array_combine($keys, $keys) ?: []; } elseif ($field === 'flex_key') { $search = $this->getFlexKeys(); } else { @@ -462,7 +463,7 @@ class FlexIndex extends ObjectIndex implements FlexCollectionInterface, FlexInde $first = reset($entries); if ($first) { $keys = array_keys($first); - $keys = array_combine($keys, $keys); + $keys = array_combine($keys, $keys) ?: []; } else { $keys = []; } diff --git a/system/src/Grav/Framework/Flex/FlexObject.php b/system/src/Grav/Framework/Flex/FlexObject.php index 0db2cab..7fbdbc0 100644 --- a/system/src/Grav/Framework/Flex/FlexObject.php +++ b/system/src/Grav/Framework/Flex/FlexObject.php @@ -31,6 +31,7 @@ use Psr\SimpleCache\InvalidArgumentException; use RocketTheme\Toolbox\Event\Event; use Twig\Error\LoaderError; use Twig\Error\SyntaxError; +use Twig\Template; use Twig\TemplateWrapper; /** @@ -162,6 +163,13 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface { $options = $options ?? $this->getFlexDirectory()->getConfig('data.search.options', []); $properties = $properties ?? $this->getFlexDirectory()->getConfig('data.search.fields', []); + if (!$properties) { + foreach ($this->getFlexDirectory()->getConfig('admin.list.fields', []) as $property => $value) { + if (!empty($value['link'])) { + $properties[] = $property; + } + } + } $weight = 0; foreach ((array)$properties as $property) { @@ -273,7 +281,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface return (float)$options['ends_with']; } if ((!$tested || !empty($options['contains'])) && Utils::contains($value, $search, $options['case_sensitive'] ?? false)) { - return (float)$options['contains']; + return (float)($options['contains'] ?? 1); } return 0; @@ -384,7 +392,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface } try { - $data = $cache ? $cache->get($key) : null; + $data = $cache && $key ? $cache->get($key) : null; $block = $data ? HtmlBlock::fromArray($data) : null; } catch (InvalidArgumentException $e) { @@ -403,7 +411,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface } if (!$block) { - $block = HtmlBlock::create($key); + $block = HtmlBlock::create($key ?: null); $block->setChecksum($checksum); if ($key === false) { $block->disableCache(); @@ -427,7 +435,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface $block->setContent($output); try { - $cache && $block->isCached() && $cache->set($key, $block->toArray()); + $cache && $key && $block->isCached() && $cache->set($key, $block->toArray()); } catch (InvalidArgumentException $e) { $debugger->addException($e); } @@ -534,7 +542,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface $result = $this->getFlexDirectory()->getStorage()->replaceRows([$this->getStorageKey() => $this->prepareStorage()]); $value = reset($result); - $storageKey = key($result); + $storageKey = (string)key($result); if ($value && $storageKey) { $this->setStorageKey($storageKey); if (!$this->hasKey()) { @@ -542,6 +550,15 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface } } + // FIXME: For some reason locator caching isn't cleared for the file, investigate! + $locator = Grav::instance()['locator']; + $locator->clearCache(); + + // Make sure that the object exists before continuing (just in case). + if (!$this->exists()) { + throw new \RuntimeException('Saving failed: Object does not exist!'); + } + if (method_exists($this, 'saveUpdatedMedia')) { $this->saveUpdatedMedia(); } @@ -551,7 +568,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface if (method_exists($this, 'clearMediaCache')) { $this->clearMediaCache(); } - } catch (InvalidArgumentException $e) { + } catch (\Exception $e) { /** @var Debugger $debugger */ $debugger = Grav::instance()['debugger']; $debugger->addException($e); @@ -579,7 +596,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface if (method_exists($this, 'clearMediaCache')) { $this->clearMediaCache(); } - } catch (InvalidArgumentException $e) { + } catch (\Exception $e) { /** @var Debugger $debugger */ $debugger = Grav::instance()['debugger']; $debugger->addException($e); @@ -729,7 +746,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface } $grav = Grav::instance(); - /** @var Flex $flex */ + /** @var Flex|null $flex */ $flex = $grav['flex_objects'] ?? null; $directory = $flex ? $flex->getDirectory($type) : null; if (!$directory) { @@ -800,7 +817,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface /** * @param string $layout - * @return TemplateWrapper + * @return Template|TemplateWrapper * @throws LoaderError * @throws SyntaxError */ @@ -812,7 +829,12 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface $twig = $grav['twig']; try { - return $twig->twig()->resolveTemplate(["flex-objects/layouts/{$this->getFlexType()}/object/{$layout}.html.twig"]); + return $twig->twig()->resolveTemplate( + [ + "flex-objects/layouts/{$this->getFlexType()}/object/{$layout}.html.twig", + "flex-objects/layouts/_default/object/{$layout}.html.twig" + ] + ); } catch (LoaderError $e) { /** @var Debugger $debugger */ $debugger = Grav::instance()['debugger']; diff --git a/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php b/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php index b547cc2..cc460cc 100644 --- a/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php @@ -128,7 +128,7 @@ abstract class AbstractFilesystemStorage implements FlexStorageInterface return $path; } - return (string) $locator->findResource($path) ?: $locator->findResource($path, true, true); + return (string)($locator->findResource($path) ?: $locator->findResource($path, true, true)); } /** diff --git a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php index 2304e80..76397c2 100644 --- a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php @@ -455,6 +455,8 @@ class FolderStorage extends AbstractFilesystemStorage protected function initOptions(array $options): void { $extension = $this->dataFormatter->getDefaultFileExtension(); + + /** @var string $pattern */ $pattern = !empty($options['pattern']) ? $options['pattern'] : $this->dataPattern; $this->dataFolder = $options['folder']; diff --git a/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php b/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php index 7f37b1a..088b952 100644 --- a/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php @@ -192,6 +192,9 @@ class SimpleStorage extends AbstractFilesystemStorage $list = []; foreach ($rows as $key => $row) { + if (strpos($key, '@@')) { + $key = $this->getNewKey(); + } $this->data[$key] = $list[$key] = $row; } @@ -224,7 +227,12 @@ class SimpleStorage extends AbstractFilesystemStorage $keys = array_keys($this->data); $keys[array_search($src, $keys, true)] = $dst; - $this->data = array_combine($keys, $this->data); + $data = array_combine($keys, $this->data); + if (false === $data) { + throw new \LogicException('Bad data'); + } + + $this->data = $data; return true; } diff --git a/system/src/Grav/Framework/Flex/Traits/FlexAuthorizeTrait.php b/system/src/Grav/Framework/Flex/Traits/FlexAuthorizeTrait.php index 66a467d..e1b63d9 100644 --- a/system/src/Grav/Framework/Flex/Traits/FlexAuthorizeTrait.php +++ b/system/src/Grav/Framework/Flex/Traits/FlexAuthorizeTrait.php @@ -13,6 +13,7 @@ namespace Grav\Framework\Flex\Traits; use Grav\Common\Grav; use Grav\Common\User\Interfaces\UserInterface; +use Grav\Framework\Flex\FlexDirectory; use Grav\Framework\Flex\Interfaces\FlexObjectInterface; /** @@ -25,10 +26,11 @@ trait FlexAuthorizeTrait public function isAuthorized(string $action, string $scope = null, UserInterface $user = null) : bool { if (null === $user) { - $user = Grav::instance()['user']; + /** @var UserInterface $user */ + $user = Grav::instance()['user'] ?? null; } - return $this->isAuthorizedAction($user, $action, $scope) || $this->isAuthorizedSuperAdmin($user); + return $user && ($this->isAuthorizedAction($user, $action, $scope) || $this->isAuthorizedSuperAdmin($user)); } protected function isAuthorizedSuperAdmin(UserInterface $user): bool @@ -44,7 +46,11 @@ trait FlexAuthorizeTrait $action = $this->exists() ? 'update' : 'create'; } - return $user->authorize(sprintf($this->_authorize, $scope, $action)); + $directory = $this instanceof FlexDirectory ? $this : $this->getFlexDirectory(); + $config = $directory->getConfig(); + $allowed = $config->get("{$scope}.actions.{$action}") ?? $config->get("actions.{$action}") ?? true; + + return $allowed && $user->authorize(sprintf($this->_authorize, $scope, $action)); } protected function setAuthorizeRule(string $authorize) : void diff --git a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php index d95774f..8b22706 100644 --- a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php +++ b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php @@ -49,7 +49,7 @@ trait FlexMediaTrait */ public function getStorageFolder() { - return $this->getFlexDirectory()->getStorageFolder($this->getStorageKey()); + return $this->exists() ? $this->getFlexDirectory()->getStorageFolder($this->getStorageKey()) : ''; } /** @@ -57,7 +57,7 @@ trait FlexMediaTrait */ public function getMediaFolder() { - return $this->getFlexDirectory()->getMediaFolder($this->getStorageKey()); + return $this->exists() ? $this->getFlexDirectory()->getMediaFolder($this->getStorageKey()) : ''; } /** @@ -153,6 +153,12 @@ trait FlexMediaTrait /** @var UniformResourceLocator $locator */ $locator = $grav['locator']; $path = $media->getPath(); + if (!$path) { + $language = $grav['language']; + + throw new RuntimeException($language->translate('PLUGIN_ADMIN.FAILED_TO_MOVE_UPLOADED_FILE'), 400); + } + if ($locator->isStream($path)) { $path = $locator->findResource($path, true, true); $locator->clearCache($path); @@ -202,12 +208,16 @@ trait FlexMediaTrait } $media = $this->getMedia(); + $path = $media->getPath(); + if (!$path) { + return; + } /** @var UniformResourceLocator $locator */ $locator = $grav['locator']; - $targetPath = $media->getPath() . '/' . $dirname; - $targetFile = $media->getPath() . '/' . $filename; + $targetPath = $path . '/' . $dirname; + $targetFile = $path . '/' . $filename; if ($locator->isStream($targetFile)) { $targetPath = $locator->findResource($targetPath, true, true); $targetFile = $locator->findResource($targetFile, true, true); @@ -229,7 +239,6 @@ trait FlexMediaTrait } // Remove Extra Files - foreach (scandir($targetPath, SCANDIR_SORT_NONE) as $file) { $preg_name = preg_quote($fileParts['filename'], '`'); $preg_ext =preg_quote($fileParts['extension'], '`'); diff --git a/system/src/Grav/Framework/Form/FormFlash.php b/system/src/Grav/Framework/Form/FormFlash.php index 5060782..e2ba826 100644 --- a/system/src/Grav/Framework/Form/FormFlash.php +++ b/system/src/Grav/Framework/Form/FormFlash.php @@ -10,12 +10,18 @@ namespace Grav\Framework\Form; use Grav\Common\Filesystem\Folder; +use Grav\Common\Grav; +use Grav\Common\User\Interfaces\UserInterface; use Grav\Common\Utils; +use Grav\Framework\Form\Interfaces\FormFlashInterface; use Psr\Http\Message\UploadedFileInterface; use RocketTheme\Toolbox\File\YamlFile; +use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; -class FormFlash implements \JsonSerializable +class FormFlash implements FormFlashInterface { + /** @var bool */ + protected $exists; /** @var string */ protected $sessionId; /** @var string */ @@ -26,6 +32,10 @@ class FormFlash implements \JsonSerializable protected $url; /** @var array */ protected $user; + /** @var int */ + protected $createdTimestamp; + /** @var int */ + protected $updatedTimestamp; /** @var array */ protected $data; /** @var array */ @@ -34,29 +44,35 @@ class FormFlash implements \JsonSerializable protected $uploadedFiles; /** @var string[] */ protected $uploadObjects; - /** @var bool */ - protected $exists; + /** @var string */ + protected $folder; /** - * @param string $sessionId - * @return string + * @inheritDoc */ - public static function getSessionTmpDir(string $sessionId): string + public function __construct($config) { - return "tmp://forms/{$sessionId}"; - } + // Backwards compatibility with Grav 1.6 plugins. + if (!is_array($config)) { + user_error(__CLASS__ . '::' . __FUNCTION__ . '($sessionId, $uniqueId, $formName) is deprecated since Grav 1.6.11, use $config parameter instead', E_USER_DEPRECATED); - /** - * FormFlashObject constructor. - * @param string $sessionId - * @param string $uniqueId - * @param string|null $formName - */ - public function __construct(string $sessionId, string $uniqueId, string $formName = null) - { - $this->sessionId = $sessionId; - $this->uniqueId = $uniqueId; + $args = func_get_args(); + $config = [ + 'session_id' => $args[0], + 'unique_id' => $args[1] ?? null, + 'form_name' => $args[2] ?? null, + ]; + } + $this->sessionId = $config['session_id'] ?? 'no-session'; + $this->uniqueId = $config['unique_id'] ?? ''; + + $folder = $config['folder'] ?? ($this->sessionId ? 'tmp://forms/' . $this->sessionId : ''); + + /** @var UniformResourceLocator $locator */ + $locator = Grav::instance()['locator']; + + $this->folder = $folder && $locator->isStream($folder) ? $locator->findResource($folder, true, true) : $folder; $file = $this->getTmpIndex(); $this->exists = $file->exists(); @@ -66,65 +82,58 @@ class FormFlash implements \JsonSerializable } catch (\Exception $e) { $data = []; } - $this->formName = null !== $formName ? $content['form'] ?? '' : ''; + $this->formName = $content['form'] ?? $config['form_name'] ?? ''; $this->url = $data['url'] ?? ''; $this->user = $data['user'] ?? null; + $this->updatedTimestamp = $data['timestamps']['updated'] ?? time(); + $this->createdTimestamp = $data['timestamps']['created'] ?? $this->updatedTimestamp; $this->data = $data['data'] ?? null; $this->files = $data['files'] ?? []; } else { - $this->formName = $formName; + $this->formName = $config['form_name'] ?? ''; $this->url = ''; + $this->createdTimestamp = $this->updatedTimestamp = time(); $this->files = []; } } /** - * @return string + * @inheritDoc + */ + public function getSessionId(): string + { + return $this->sessionId; + } + + /** + * @inheritDoc + */ + public function getUniqueId(): string + { + return $this->uniqueId; + } + + /** + * @deprecated 1.6.11 Use '->getUniqueId()' method instead. + */ + public function getUniqieId(): string + { + user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.6.11, use ->getUniqueId() method instead', E_USER_DEPRECATED); + + return $this->getUniqueId(); + } + + /** + * @inheritDoc */ public function getFormName(): string { return $this->formName; } - /** - * @return string - */ - public function getUniqieId(): string - { - return $this->uniqueId; - } /** - * @return bool - */ - public function exists(): bool - { - return $this->exists; - } - - /** - * @return $this - */ - public function save(): self - { - $file = $this->getTmpIndex(); - $file->save($this->jsonSerialize()); - $this->exists = true; - - return $this; - } - - public function delete(): self - { - $this->removeTmpDir(); - $this->files = []; - $this->exists = false; - - return $this; - } - - /** - * @return string + * @inheritDoc */ public function getUrl(): string { @@ -132,18 +141,7 @@ class FormFlash implements \JsonSerializable } /** - * @param string $url - * @return $this - */ - public function setUrl(string $url): self - { - $this->url = $url; - - return $this; - } - - /** - * @return string + * @inheritDoc */ public function getUsername(): string { @@ -151,7 +149,7 @@ class FormFlash implements \JsonSerializable } /** - * @return string + * @inheritDoc */ public function getUserEmail(): string { @@ -159,40 +157,84 @@ class FormFlash implements \JsonSerializable } /** - * @param string|null $username - * @return $this + * @inheritDoc */ - public function setUserName(string $username = null): self + public function getCreatedTimestamp(): int { - $this->user['username'] = $username; - - return $this; + return $this->createdTimestamp; } /** - * @param string|null $email - * @return $this + * @inheritDoc */ - public function setUserEmail(string $email = null): self + public function getUpdatedTimestamp(): int { - $this->user['email'] = $email; - - return $this; + return $this->updatedTimestamp; } + + /** + * @inheritDoc + */ public function getData(): ?array { return $this->data; } + /** + * @inheritDoc + */ public function setData(?array $data): void { $this->data = $data; } /** - * @param string $field - * @return array + * @inheritDoc + */ + public function exists(): bool + { + return $this->exists; + } + + /** + * @inheritDoc + */ + public function save(): self + { + if (!($this->folder && $this->uniqueId)) { + return $this; + } + + if ($this->data || $this->files) { + // Only save if there is data or files to be saved. + $file = $this->getTmpIndex(); + $file->save($this->jsonSerialize()); + $this->exists = true; + } elseif ($this->exists) { + // Delete empty form flash if it exists (it carries no information). + return $this->delete(); + } + + return $this; + } + + /** + * @inheritDoc + */ + public function delete(): self + { + if ($this->folder && $this->uniqueId) { + $this->removeTmpDir(); + $this->files = []; + $this->exists = false; + } + + return $this; + } + + /** + * @inheritDoc */ public function getFilesByField(string $field): array { @@ -208,8 +250,7 @@ class FormFlash implements \JsonSerializable } /** - * @param bool $includeOriginal - * @return array + * @inheritDoc */ public function getFilesByFields($includeOriginal = false): array { @@ -225,12 +266,7 @@ class FormFlash implements \JsonSerializable } /** - * Add uploaded file to the form flash. - * - * @param UploadedFileInterface $upload - * @param string|null $field - * @param array|null $crop - * @return string Return name of the file + * @inheritDoc */ public function addUploadedFile(UploadedFileInterface $upload, string $field = null, array $crop = null): string { @@ -256,12 +292,7 @@ class FormFlash implements \JsonSerializable /** - * Add existing file to the form flash. - * - * @param string $filename - * @param string $field - * @param array $crop - * @return bool + * @inheritDoc */ public function addFile(string $filename, string $field, array $crop = null): bool { @@ -282,11 +313,7 @@ class FormFlash implements \JsonSerializable } /** - * Remove any file from form flash. - * - * @param string $name - * @param string $field - * @return bool + * @inheritDoc */ public function removeFile(string $name, string $field = null): bool { @@ -318,7 +345,7 @@ class FormFlash implements \JsonSerializable } /** - * Clear form flash from all uploaded files. + * @inheritDoc */ public function clearFiles() { @@ -332,7 +359,7 @@ class FormFlash implements \JsonSerializable } /** - * @return array + * @inheritDoc */ public function jsonSerialize(): array { @@ -341,17 +368,72 @@ class FormFlash implements \JsonSerializable 'unique_id' => $this->uniqueId, 'url' => $this->url, 'user' => $this->user, + 'timestamps' => [ + 'created' => $this->createdTimestamp, + 'updated' => time(), + ], 'data' => $this->data, 'files' => $this->files ]; } + /** + * @param string $url + * @return $this + */ + public function setUrl(string $url): self + { + $this->url = $url; + + return $this; + } + + /** + * @param UserInterface|null $user + * @return $this + */ + public function setUser(UserInterface $user = null) + { + if ($user && $user->username) { + $this->user = [ + 'username' => $user->username, + 'email' => $user->email ?? '' + ]; + } else { + $this->user = null; + } + + return $this; + } + + /** + * @param string|null $username + * @return $this + */ + public function setUserName(string $username = null): self + { + $this->user['username'] = $username; + + return $this; + } + + /** + * @param string|null $email + * @return $this + */ + public function setUserEmail(string $email = null): self + { + $this->user['email'] = $email; + + return $this; + } + /** * @return string */ public function getTmpDir(): string { - return static::getSessionTmpDir($this->sessionId) . '/' . $this->uniqueId; + return $this->folder && $this->uniqueId ? "{$this->folder}/{$this->uniqueId}" : ''; } /** @@ -368,8 +450,9 @@ class FormFlash implements \JsonSerializable */ protected function removeTmpFile(string $name): void { - $filename = $this->getTmpDir() . '/' . $name; - if ($name && is_file($filename)) { + $tmpDir = $this->getTmpDir(); + $filename = $tmpDir ? $tmpDir . '/' . $name : ''; + if ($name && $filename && is_file($filename)) { unlink($filename); } } @@ -377,7 +460,7 @@ class FormFlash implements \JsonSerializable protected function removeTmpDir(): void { $tmpDir = $this->getTmpDir(); - if (file_exists($tmpDir)) { + if ($tmpDir && file_exists($tmpDir)) { Folder::delete($tmpDir); } } @@ -390,6 +473,10 @@ class FormFlash implements \JsonSerializable */ protected function addFileInternal(?string $field, string $name, array $data, array $crop = null): void { + if (!($this->folder && $this->uniqueId)) { + throw new \RuntimeException('Cannot upload files: form flash folder not defined'); + } + $field = $field ?: 'undefined'; if (!isset($this->files[$field])) { $this->files[$field] = []; diff --git a/system/src/Grav/Framework/Form/Interfaces/FormFlashInterface.php b/system/src/Grav/Framework/Form/Interfaces/FormFlashInterface.php new file mode 100644 index 0000000..8eb8525 --- /dev/null +++ b/system/src/Grav/Framework/Form/Interfaces/FormFlashInterface.php @@ -0,0 +1,165 @@ +getBlueprint()['form']['buttons'] ?? []; + return $this->getBlueprint()->get('form/buttons') ?? []; } public function getTasks(): array { - return $this->getBlueprint()['form']['tasks'] ?? []; + return $this->getBlueprint()->get('form/tasks') ?? []; } abstract public function getBlueprint(): Blueprint; @@ -336,35 +338,56 @@ trait FormTrait public function getFlash(): FormFlash { if (null === $this->flash) { - /** @var Grav $grav */ $grav = Grav::instance(); - $id = null; - - $user = $grav['user'] ?? null; - if (isset($user)) { - $rememberState = $this->getBlueprint()->get('form/remember_state'); - if ($rememberState === 'user') { - $id = $user->username; - } - } - - // Session Required for flash form - $session = $grav['session'] ?? null; - if (isset($session)) { - // By default store flash by the session id. - if (null === $id) { - $id = $session->getId(); - } + $config = [ + 'session_id' => $this->getSessionId(), + 'unique_id' => $this->getUniqueId(), + 'form_name' => $this->getName(), + 'folder' => $this->getFlashFolder() + ]; - $this->flash = new FormFlash($id, $this->getUniqueId(), $this->getName()); - $this->flash->setUrl($grav['uri']->url)->setUser($user); - } + $this->flash = new FormFlash($config); + $this->flash->setUrl($grav['uri']->url)->setUser($grav['user'] ?? null); } return $this->flash; } + /** + * Get all available form flash objects for this form. + * + * @return FormFlash[] + */ + public function getAllFlashes(): array + { + $folder = $this->getFlashFolder(); + if (!$folder || !is_dir($folder)) { + return []; + } + + $name = $this->getName(); + + $list = []; + /** @var \SplFileInfo $file */ + foreach (new \FilesystemIterator($folder) as $file) { + $uniqueId = $file->getFilename(); + $config = [ + 'session_id' => $this->getSessionId(), + 'unique_id' => $uniqueId, + 'form_name' => $name, + 'folder' => $this->getFlashFolder() + ]; + $flash = new FormFlash($config); + if ($flash->exists() && $flash->getFormName() === $name) { + $list[] = $flash; + } + } + + return $list; + + } + /** * {@inheritdoc} * @see FormInterface::render() @@ -389,11 +412,51 @@ trait FormTrait return $block; } + protected function getSessionId(): string + { + /** @var Grav $grav */ + $grav = Grav::instance(); + + /** @var SessionInterface $session */ + $session = $grav['session'] ?? null; + + return $session ? ($session->getId() ?? '') : ''; + } + protected function unsetFlash(): void { $this->flash = null; } + protected function getFlashFolder(): ?string + { + $grav = Grav::instance(); + + /** @var UserInterface $user */ + $user = $grav['user'] ?? null; + $userExists = $user && $user->exists(); + $username = $userExists ? $user->username : null; + $mediaFolder = $userExists ? $user->getMediaFolder() : null; + $session = $grav['session'] ?? null; + $sessionId = $session ? $session->getId() : null; + + // Fill template token keys/value pairs. + $dataMap = [ + '[FORM_NAME]' => $this->getName(), + '[SESSIONID]' => $sessionId ?? '!!', + '[USERNAME]' => $username ?? '!!', + '[USERNAME_OR_SESSIONID]' => $username ?? $sessionId ?? '!!', + '[ACCOUNT]' => $mediaFolder ?? '!!' + ]; + + $flashFolder = $this->getBlueprint()->get('form/flash_folder', 'tmp://forms/[SESSIONID]'); + + $path = str_replace(array_keys($dataMap), array_values($dataMap), $flashFolder); + + // Make sure we only return valid paths. + return strpos($path, '!!') === false ? rtrim($path, '/') : null; + } + /** * Set a single error. * @@ -577,7 +640,7 @@ trait FormTrait foreach ($data as $key => &$value) { if (\is_array($value)) { $value = $this->jsonDecode($value); - } elseif ($value === '') { + } elseif (trim($value) === '') { unset($data[$key]); } else { $value = json_decode($value, true); diff --git a/system/src/Grav/Framework/Interfaces/RenderInterface.php b/system/src/Grav/Framework/Interfaces/RenderInterface.php index 9185c17..ca6d9bc 100644 --- a/system/src/Grav/Framework/Interfaces/RenderInterface.php +++ b/system/src/Grav/Framework/Interfaces/RenderInterface.php @@ -29,7 +29,7 @@ interface RenderInterface * @example {% render object layout 'custom' with { variable: 'value' } %} * * @param string|null $layout Layout to be used. - * @param array|null $context Extra context given to the renderer. + * @param array $context Extra context given to the renderer. * * @return ContentBlockInterface|HtmlBlock Returns `HtmlBlock` containing the rendered output. * @api diff --git a/system/src/Grav/Framework/Route/Route.php b/system/src/Grav/Framework/Route/Route.php index f287694..58224fe 100644 --- a/system/src/Grav/Framework/Route/Route.php +++ b/system/src/Grav/Framework/Route/Route.php @@ -154,16 +154,11 @@ class Route * If the parameter exists in both, return Grav parameter. * * @param string $param - * @return string|null + * @return string|array|null */ public function getParam($param) { - $value = $this->getGravParam($param); - if ($value === null) { - $value = $this->getQueryParam($param); - } - - return $value; + return $this->getGravParam($param) ?? $this->getQueryParam($param); } /** @@ -177,7 +172,7 @@ class Route /** * @param string $param - * @return string|null + * @return string|array|null */ public function getQueryParam($param) { @@ -193,6 +188,7 @@ class Route public function withRoute($route) { $this->route = $route; + return $this; } @@ -205,6 +201,7 @@ class Route public function withRoot($root) { $this->root = $root; + return $this; } @@ -250,6 +247,25 @@ class Route return $this->withParam('queryParams', $param, $value); } + public function withoutParams() + { + return $this->withoutGravParams()->withoutQueryParams(); + } + + public function withoutGravParams() + { + $this->gravParams = []; + + return $this; + } + + public function withoutQueryParams() + { + $this->queryParams = []; + + return $this; + } + /** * @return \Grav\Framework\Uri\Uri */ @@ -292,22 +308,30 @@ class Route */ protected function withParam($type, $param, $value) { - $oldValue = $this->{$type}[$param] ?? null; + $values = $this->{$type} ?? []; + $oldValue = $values[$param] ?? null; if ($oldValue === $value) { return $this; } - $new = clone $this; + $new = $this->copy(); if ($value === null) { - unset($new->{$type}[$param]); + unset($values[$param]); } else { - $new->{$type}[$param] = $value; + $values[$param] = $value; } + $new->{$type} = $values; + return $new; } + protected function copy() + { + return clone $this; + } + /** * @param bool $includeRoot * @return string @@ -350,8 +374,8 @@ class Route $this->language = $gravParts['language']; $this->route = $gravParts['route']; $this->extension = $gravParts['extension'] ?? ''; - $this->gravParams = $gravParts['params']; - $this->queryParams = $parts['query_params']; + $this->gravParams = $gravParts['params'] ?: []; + $this->queryParams = $parts['query_params'] ?: []; } else { $this->root = RouteFactory::getRoot(); diff --git a/system/src/Grav/Framework/Uri/UriPartsFilter.php b/system/src/Grav/Framework/Uri/UriPartsFilter.php index 88fe3e6..51a971a 100644 --- a/system/src/Grav/Framework/Uri/UriPartsFilter.php +++ b/system/src/Grav/Framework/Uri/UriPartsFilter.php @@ -84,11 +84,11 @@ class UriPartsFilter */ public static function filterPort($port = null) { - if (null === $port || (\is_int($port) && ($port >= 1 && $port <= 65535))) { + if (null === $port || (\is_int($port) && ($port >= 0 && $port <= 65535))) { return $port; } - throw new \InvalidArgumentException('Uri port must be null or an integer between 1 and 65535'); + throw new \InvalidArgumentException('Uri port must be null or an integer between 0 and 65535'); } /** diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_Cahiers01.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_Cahiers01.jpg new file mode 100644 index 0000000..591e4ba Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_Cahiers01.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_Cahiers10.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_Cahiers10.jpg new file mode 100644 index 0000000..dae81ad Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_Cahiers10.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers02.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers02.jpg new file mode 100644 index 0000000..c9d555a Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers02.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers03.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers03.jpg new file mode 100644 index 0000000..b6e2353 Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers03.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers04.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers04.jpg new file mode 100644 index 0000000..137398d Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers04.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers05.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers05.jpg new file mode 100644 index 0000000..6156b09 Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers05.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers06.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers06.jpg new file mode 100644 index 0000000..64679bd Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers06.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers07.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers07.jpg new file mode 100644 index 0000000..6f5034b Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers07.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers08.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers08.jpg new file mode 100644 index 0000000..3fe1b49 Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers08.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers09.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers09.jpg new file mode 100644 index 0000000..1f223e0 Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers09.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers11.jpg b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers11.jpg new file mode 100644 index 0000000..b0e9831 Binary files /dev/null and b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/A_MBA_cahiers11.jpg differ diff --git a/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/item.md b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/item.md new file mode 100644 index 0000000..594db23 --- /dev/null +++ b/user/pages/01.projets/01.cahier-du-muse-des-beaux-arts-de-caen/item.md @@ -0,0 +1,15 @@ +--- +title: 'Cahiers du musée des Beaux-arts de Caen' +media_order: 'A_MBA_cahiers02.jpg,A_MBA_Cahiers01.jpg,A_MBA_cahiers04.jpg,A_MBA_Cahiers10.jpg,A_MBA_cahiers03.jpg,A_MBA_cahiers06.jpg,A_MBA_cahiers11.jpg,A_MBA_cahiers05.jpg,A_MBA_cahiers07.jpg,A_MBA_cahiers08.jpg,A_MBA_cahiers09.jpg' +mea: true +meaimg: A_MBA_Cahiers10.jpg +date: '10-07-2014 14:27' +taxonomy: + category: + - Éditions + tag: + - 'Musée des beaux art de Caen' +--- + +Revues du musée des Beaux-Arts de Caen et des Amis du musée. Trois parutions. +Format : Reliés / Nb de pages : 68 pages / Poids : 150 g / Dimensions : 22cm X 26cm / Dates de parution : 12/2010 / 06/2012 / 07/2014 diff --git a/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_01.jpg b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_01.jpg new file mode 100644 index 0000000..71b41d5 Binary files /dev/null and b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_01.jpg differ diff --git a/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_03.jpg b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_03.jpg new file mode 100644 index 0000000..88440a2 Binary files /dev/null and b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_03.jpg differ diff --git a/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_04.jpg b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_04.jpg new file mode 100644 index 0000000..287dc30 Binary files /dev/null and b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_04.jpg differ diff --git a/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_05.jpg b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_05.jpg new file mode 100644 index 0000000..0cdbaea Binary files /dev/null and b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_05.jpg differ diff --git a/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_06.jpg b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_06.jpg new file mode 100644 index 0000000..5a410a7 Binary files /dev/null and b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_06.jpg differ diff --git a/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_07.jpg b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_07.jpg new file mode 100644 index 0000000..5937c99 Binary files /dev/null and b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_07.jpg differ diff --git a/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_08.jpg b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_08.jpg new file mode 100644 index 0000000..faa514d Binary files /dev/null and b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_08.jpg differ diff --git a/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_09.jpg b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_09.jpg new file mode 100644 index 0000000..2eb12c2 Binary files /dev/null and b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/C_ESADHaR_depliant2019_09.jpg differ diff --git a/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/item.md b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/item.md new file mode 100644 index 0000000..7d00e41 --- /dev/null +++ b/user/pages/01.projets/02.ateliers-des-beaux-arts-esadhar/item.md @@ -0,0 +1,14 @@ +--- +title: 'Ateliers des Beaux-Arts ESADHaR' +media_order: 'C_ESADHaR_depliant2019_02.jpg,C_ESADHaR_depliant2019_01.jpg,C_ESADHaR_depliant2019_03.jpg,C_ESADHaR_depliant2019_04.jpg,C_ESADHaR_depliant2019_05.jpg,C_ESADHaR_depliant2019_06.jpg,C_ESADHaR_depliant2019_07.jpg,C_ESADHaR_depliant2019_08.jpg,C_ESADHaR_depliant2019_09.jpg' +mea: false +meaimg: C_ESADHaR_depliant2019_accueil3.jpg +date: '20-09-2019 14:27' +taxonomy: + category: + - Print + tag: + - Esadhar +--- + +Réalisation de la plaquette de présentation des ateliers des Beaux-Arts de Rouen et du Havre pour l’ESADHaR, 2019. Dépliant accordéon 6 volets recto-verso pour Le Havre et 8 volets pour Rouen. \ No newline at end of file diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_01.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_01.jpg new file mode 100644 index 0000000..f4658fb Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_01.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_02.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_02.jpg new file mode 100644 index 0000000..d27b5de Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_02.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_03.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_03.jpg new file mode 100644 index 0000000..7959717 Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_03.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_05.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_05.jpg new file mode 100644 index 0000000..0215273 Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_05.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_06.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_06.jpg new file mode 100644 index 0000000..7449943 Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_06.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_07.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_07.jpg new file mode 100644 index 0000000..41d7c0d Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_07.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_08.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_08.jpg new file mode 100644 index 0000000..46e8aa6 Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_08.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_09.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_09.jpg new file mode 100644 index 0000000..9d7307b Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_09.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_10.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_10.jpg new file mode 100644 index 0000000..9b5c6cc Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_10.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_11.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_11.jpg new file mode 100644 index 0000000..e7b6c92 Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_11.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_12.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_12.jpg new file mode 100644 index 0000000..33c448c Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_12.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_13.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_13.jpg new file mode 100644 index 0000000..2febdfb Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_13.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_14.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_14.jpg new file mode 100644 index 0000000..780014b Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19e_14.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19é_04.jpg b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19é_04.jpg new file mode 100644 index 0000000..e1ce1a1 Binary files /dev/null and b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/C_MDN_Caen19é_04.jpg differ diff --git a/user/pages/01.projets/03.supports-de-mediation-caen-en-images/item.md b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/item.md new file mode 100644 index 0000000..393475e --- /dev/null +++ b/user/pages/01.projets/03.supports-de-mediation-caen-en-images/item.md @@ -0,0 +1,13 @@ +--- +title: 'Supports de médiation Caen en images' +media_order: 'C_MDN_Caen19e_01.jpg,C_MDN_Caen19e_02.jpg,C_MDN_Caen19e_03.jpg,C_MDN_Caen19e_06.jpg,C_MDN_Caen19e_05.jpg,C_MDN_Caen19é_04.jpg,C_MDN_Caen19e_08.jpg,C_MDN_Caen19e_11.jpg,C_MDN_Caen19e_07.jpg,C_MDN_Caen19e_09.jpg,C_MDN_Caen19e_10.jpg,C_MDN_Caen19e_13.jpg,C_MDN_Caen19e_12.jpg,C_MDN_Caen19e_14.jpg' +mea: true +meaimg: C_MDN_Caen19e_02.jpg +taxonomy: + category: + - Print + tag: + - 'musée de Normandie' +--- + +Réalisation des supports de médiation pour l’exposition Caen en images, la ville vue par les artistes du 19e siècle à la Reconstruction, au Musée de Normandie : livrets jeux pour les scolaires, livret jeux en famille, livret Facile à Lire et à Comprendre, dossier pédagogique, cartels et stations ludiques dans l’exposition. \ No newline at end of file diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_01.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_01.jpg new file mode 100644 index 0000000..00c4be5 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_01.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_02.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_02.jpg new file mode 100644 index 0000000..a5bbdcc Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_02.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_03.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_03.jpg new file mode 100644 index 0000000..9e4a59a Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_03.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_04.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_04.jpg new file mode 100644 index 0000000..745ce85 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_04.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_05.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_05.jpg new file mode 100644 index 0000000..ce01a6d Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_05.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_06.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_06.jpg new file mode 100644 index 0000000..21ac887 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_06.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_07.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_07.jpg new file mode 100644 index 0000000..0ff711d Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_07.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_08.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_08.jpg new file mode 100644 index 0000000..8c04152 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_08.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_09.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_09.jpg new file mode 100644 index 0000000..91e7938 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_09.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_10.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_10.jpg new file mode 100644 index 0000000..ed68890 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_10.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_11.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_11.jpg new file mode 100644 index 0000000..0c68ef4 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_11.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_12.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_12.jpg new file mode 100644 index 0000000..cddeab6 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_12.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_13.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_13.jpg new file mode 100644 index 0000000..7114071 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_13.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_14.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_14.jpg new file mode 100644 index 0000000..192d960 Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_14.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_15.jpg b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_15.jpg new file mode 100644 index 0000000..300d26a Binary files /dev/null and b/user/pages/01.projets/04.identite-visuelle-little-asia/B_Littleasia_15.jpg differ diff --git a/user/pages/01.projets/04.identite-visuelle-little-asia/item.md b/user/pages/01.projets/04.identite-visuelle-little-asia/item.md new file mode 100644 index 0000000..c862879 --- /dev/null +++ b/user/pages/01.projets/04.identite-visuelle-little-asia/item.md @@ -0,0 +1,14 @@ +--- +title: 'Identité visuelle Little Asia' +media_order: 'B_Littleasia_01.jpg,B_Littleasia_15.jpg,B_Littleasia_02.jpg,B_Littleasia_08.jpg,B_Littleasia_05.jpg,B_Littleasia_03.jpg,B_Littleasia_13.jpg,B_Littleasia_07.jpg,B_Littleasia_12.jpg,B_Littleasia_09.jpg,B_Littleasia_04.jpg,B_Littleasia_10.jpg,B_Littleasia_11.jpg,B_Littleasia_06.jpg,B_Littleasia_14.jpg' +mea: true +meaimg: B_Littleasia_15.jpg +date: '05-12-2019 14:39' +taxonomy: + category: + - logo + tag: + - 'Little Asia' +--- + +Identité visuelle de Little Asia, restaurant asiatique à Mimizan plage. Depuis 2013, le principe du logo, de ses mises en applications et de son environnement visuel évoluent au fil des saisons. Fresque murale dessinée en collaboration avec Cédric Bordessoulle. \ No newline at end of file diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_01.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_01.jpg new file mode 100644 index 0000000..390d7e8 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_01.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_02.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_02.jpg new file mode 100644 index 0000000..27d9fab Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_02.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_03.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_03.jpg new file mode 100644 index 0000000..6a1551a Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_03.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_04.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_04.jpg new file mode 100644 index 0000000..6153ac6 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_04.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_05.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_05.jpg new file mode 100644 index 0000000..3ade372 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_05.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_06.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_06.jpg new file mode 100644 index 0000000..c1d8be1 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_06.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_07.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_07.jpg new file mode 100644 index 0000000..643a0b7 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_07.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_08.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_08.jpg new file mode 100644 index 0000000..b0521cd Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_08.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_09.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_09.jpg new file mode 100644 index 0000000..3a1de75 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_09.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_10.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_10.jpg new file mode 100644 index 0000000..5d6abd3 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_10.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_11.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_11.jpg new file mode 100644 index 0000000..4e64756 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_11.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_12.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_12.jpg new file mode 100644 index 0000000..aead61d Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_12.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_13.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_13.jpg new file mode 100644 index 0000000..8d66646 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_13.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_14.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_14.jpg new file mode 100644 index 0000000..19be615 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_14.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_15.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_15.jpg new file mode 100644 index 0000000..cb00825 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_15.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_16.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_16.jpg new file mode 100644 index 0000000..9e4f3f3 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_16.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_17.jpg b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_17.jpg new file mode 100644 index 0000000..fc63385 Binary files /dev/null and b/user/pages/01.projets/05.identite-visuelle-esadhar/B_ESADHaR_17.jpg differ diff --git a/user/pages/01.projets/05.identite-visuelle-esadhar/item.md b/user/pages/01.projets/05.identite-visuelle-esadhar/item.md new file mode 100644 index 0000000..805070e --- /dev/null +++ b/user/pages/01.projets/05.identite-visuelle-esadhar/item.md @@ -0,0 +1,14 @@ +--- +title: 'Identité visuelle ESADHaR' +media_order: 'B_ESADHaR_01.jpg,B_ESADHaR_02.jpg,B_ESADHaR_03.jpg,B_ESADHaR_04.jpg,B_ESADHaR_05.jpg,B_ESADHaR_06.jpg,B_ESADHaR_07.jpg,B_ESADHaR_09.jpg,B_ESADHaR_08.jpg,B_ESADHaR_10.jpg,B_ESADHaR_12.jpg,B_ESADHaR_13.jpg,B_ESADHaR_15.jpg,B_ESADHaR_11.jpg,B_ESADHaR_14.jpg,B_ESADHaR_16.jpg,B_ESADHaR_17.jpg' +mea: false +meaimg: B_ESADHaR_01.jpg +date: '10-10-2015 14:38' +taxonomy: + category: + - logo + tag: + - ESADHaR +--- + +Refonte de l’identité visuelle de l’ESADHaR, 2014. L’identité visuelle de l'École Supérieure d’Art et Design Le Havre Rouen s'appuie sur le site Internet développé par Bachir Soussi Chiadmi > [esadhar.fr](http://esadhar.fr/). Il s’articule autour du sigle ESADHaR en caractères OpenSource et d’une grille modulaire perceptible. Ce système se décline sur l’ensemble des supports imprimés ou numériques, qu’ils soient administratifs, pédagogiques, éditoriaux ou de communication. diff --git a/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_01.jpg b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_01.jpg new file mode 100644 index 0000000..9aafdef Binary files /dev/null and b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_01.jpg differ diff --git a/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_02.jpg b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_02.jpg new file mode 100644 index 0000000..db68e8d Binary files /dev/null and b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_02.jpg differ diff --git a/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_03.jpg b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_03.jpg new file mode 100644 index 0000000..99b2711 Binary files /dev/null and b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_03.jpg differ diff --git a/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_04.jpg b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_04.jpg new file mode 100644 index 0000000..90b13b7 Binary files /dev/null and b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_04.jpg differ diff --git a/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_05.jpg b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_05.jpg new file mode 100644 index 0000000..2527ace Binary files /dev/null and b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_05.jpg differ diff --git a/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_06.jpg b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_06.jpg new file mode 100644 index 0000000..23d7634 Binary files /dev/null and b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/B_TTL_06.jpg differ diff --git a/user/pages/01.projets/06.identite-visuelle-territoire-lecture/item.md b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/item.md new file mode 100644 index 0000000..c3fd1e9 --- /dev/null +++ b/user/pages/01.projets/06.identite-visuelle-territoire-lecture/item.md @@ -0,0 +1,14 @@ +--- +title: 'Identité visuelle Territoire Lecture' +media_order: 'B_TTL_01.jpg,B_TTL_02.jpg,B_TTL_03.jpg,B_TTL_04.jpg,B_TTL_05.jpg,B_TTL_06.jpg' +date: '01-01-2013 13:19' +taxonomy: + category: + - logo + tag: + - 'le réseau Territoire Lecture' +--- + +Réalisation de l’identité visuelle pour le réseau Territoire Lecture, 2013. +Le réseau Territoire Lecture de Caen la mer œuvre pour que les publics éloignés de la culture puissent trouver leur chemin vers la lecture. +[https://bibliotheques.caenlamer.fr/RTL/reseau-des-bibliotheques-de-caen-la-mer-accueil.aspx](https://bibliotheques.caenlamer.fr/RTL/reseau-des-bibliotheques-de-caen-la-mer-accueil.aspx) \ No newline at end of file diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_01.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_01.jpg new file mode 100644 index 0000000..e75f5bf Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_01.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_02.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_02.jpg new file mode 100644 index 0000000..09c82ae Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_02.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_03.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_03.jpg new file mode 100644 index 0000000..73a34b8 Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_03.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_04.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_04.jpg new file mode 100644 index 0000000..42d62b5 Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_04.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_05.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_05.jpg new file mode 100644 index 0000000..50e89ab Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_05.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_06.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_06.jpg new file mode 100644 index 0000000..8a0d109 Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_06.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_07.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_07.jpg new file mode 100644 index 0000000..90bcc35 Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_07.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_09.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_09.jpg new file mode 100644 index 0000000..fc7960f Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_09.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_10.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_10.jpg new file mode 100644 index 0000000..60f8773 Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_10.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_11.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_11.jpg new file mode 100644 index 0000000..a2304ad Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_11.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_12.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_12.jpg new file mode 100644 index 0000000..72f5cd1 Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_12.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_13.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_13.jpg new file mode 100644 index 0000000..e096ea7 Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_13.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_14.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_14.jpg new file mode 100644 index 0000000..253e527 Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN-livretmusee_14.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN_livret-musee_15.jpg b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN_livret-musee_15.jpg new file mode 100644 index 0000000..5ac33e4 Binary files /dev/null and b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/C_MDN_livret-musee_15.jpg differ diff --git a/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/item.md b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/item.md new file mode 100644 index 0000000..d73d6b1 --- /dev/null +++ b/user/pages/01.projets/07.livrets-jeux-musee-de-normandie/item.md @@ -0,0 +1,14 @@ +--- +title: 'Livrets jeux Musée de Normandie' +media_order: 'C_MDN-livretmusee_01.jpg,C_MDN-livretmusee_11.jpg,C_MDN-livretmusee_12.jpg,C_MDN-livretmusee_09.jpg,C_MDN-livretmusee_06.jpg,C_MDN_livret-musee_15.jpg,C_MDN-livretmusee_07.jpg,C_MDN-livretmusee_02.jpg,C_MDN-livretmusee_03.jpg,C_MDN-livretmusee_04.jpg,C_MDN-livretmusee_05.jpg,C_MDN-livretmusee_10.jpg,C_MDN-livretmusee_13.jpg,C_MDN-livretmusee_14.jpg' +mea: false +meaimg: C_MDN-livretmusee_11.jpg +date: '07-03-2014 14:40' +taxonomy: + category: + - Print + tag: + - 'musée de Normandie' +--- + +Réalisation de l’ensemble des livrets jeux pour accompagner les jeunes visiteurs dans les collections permanentes du musée de Normandie. Depuis 2014. \ No newline at end of file diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_01.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_01.jpf new file mode 100644 index 0000000..ae5c115 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_01.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_01.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_01.jpg new file mode 100644 index 0000000..aa55423 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_01.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_02.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_02.jpf new file mode 100644 index 0000000..96fdf05 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_02.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_02.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_02.jpg new file mode 100644 index 0000000..1a8c083 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_02.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_03.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_03.jpg new file mode 100644 index 0000000..e8feb4d Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_03.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_04.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_04.jpf new file mode 100644 index 0000000..459d10a Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_04.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_04.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_04.jpg new file mode 100644 index 0000000..a486bfa Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_04.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_05.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_05.jpf new file mode 100644 index 0000000..f22cafc Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_05.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_05.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_05.jpg new file mode 100644 index 0000000..75285eb Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_05.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_06.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_06.jpf new file mode 100644 index 0000000..51f848c Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_06.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_06.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_06.jpg new file mode 100644 index 0000000..f4a7453 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_06.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_07.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_07.jpf new file mode 100644 index 0000000..7666862 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_07.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_07.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_07.jpg new file mode 100644 index 0000000..c062aee Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_07.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_08.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_08.jpf new file mode 100644 index 0000000..f1fc081 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_08.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_08.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_08.jpg new file mode 100644 index 0000000..e04cead Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_08.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_09.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_09.jpf new file mode 100644 index 0000000..a2eb7f2 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_09.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_09.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_09.jpg new file mode 100644 index 0000000..5b622f4 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_09.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_10.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_10.jpf new file mode 100644 index 0000000..2a3c2b3 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_10.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_10.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_10.jpg new file mode 100644 index 0000000..125a2de Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_10.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_11.jpf b/user/pages/01.projets/08.ouvrage-edith/A_edith_11.jpf new file mode 100644 index 0000000..306cc66 Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_11.jpf differ diff --git a/user/pages/01.projets/08.ouvrage-edith/A_edith_11.jpg b/user/pages/01.projets/08.ouvrage-edith/A_edith_11.jpg new file mode 100644 index 0000000..bd1a27c Binary files /dev/null and b/user/pages/01.projets/08.ouvrage-edith/A_edith_11.jpg differ diff --git a/user/pages/01.projets/08.ouvrage-edith/item.md b/user/pages/01.projets/08.ouvrage-edith/item.md new file mode 100644 index 0000000..de08cc0 --- /dev/null +++ b/user/pages/01.projets/08.ouvrage-edith/item.md @@ -0,0 +1,16 @@ +--- +title: Edith +media_order: 'A_edith_01.jpg,A_edith_02.jpg,A_edith_03.jpg,A_edith_04.jpg,A_edith_05.jpg,A_edith_06.jpg,A_edith_07.jpg,A_edith_09.jpg,A_edith_08.jpg,A_edith_10.jpg,A_edith_11.jpg' +mea: false +meaimg: A_edith_01.jpg +date: '30-01-2016 14:42' +taxonomy: + category: + - Éditions + tag: + - 'Laboratoire Edith' +--- + +Ouvrage témoin de cinq années de recherche au sein du laboratoire Edith, réalisé en collaboration Dominique Debeir, Catherine Schwartz. + +Format : Relié / Nb de pages : 238 pages / Poids : 700 g / Dimensions : 33cm X 25cm / Date de parution : 30 janvier 2016 \ No newline at end of file diff --git a/user/pages/01.projets/blog.md b/user/pages/01.projets/blog.md index 241626a..7a3cfea 100644 --- a/user/pages/01.projets/blog.md +++ b/user/pages/01.projets/blog.md @@ -10,3 +10,4 @@ content: pagination: true url_taxonomy_filters: true --- + diff --git a/user/pages/01.projets/nom-du-projets/item.md b/user/pages/01.projets/nom-du-projets/item.md deleted file mode 100644 index 9d3349f..0000000 --- a/user/pages/01.projets/nom-du-projets/item.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Nom du projets' -media_order: logo-Alliance_gris.png -mea: false -taxonomy: - category: - - logo - tag: - - mea ---- - -cfecb dcbfh obd cobydez cydze bd \ No newline at end of file diff --git a/user/pages/01.projets/nom-du-projets/logo-Alliance_gris.png b/user/pages/01.projets/nom-du-projets/logo-Alliance_gris.png deleted file mode 100644 index 3dbb3b6..0000000 Binary files a/user/pages/01.projets/nom-du-projets/logo-Alliance_gris.png and /dev/null differ diff --git a/user/pages/01.projets/projet-n-1/affiche_grainesdelecteurs_2014.jpg b/user/pages/01.projets/projet-n-1/affiche_grainesdelecteurs_2014.jpg deleted file mode 100644 index b02e1a5..0000000 Binary files a/user/pages/01.projets/projet-n-1/affiche_grainesdelecteurs_2014.jpg and /dev/null differ diff --git a/user/pages/01.projets/projet-n-1/item.md b/user/pages/01.projets/projet-n-1/item.md deleted file mode 100644 index b60912d..0000000 --- a/user/pages/01.projets/projet-n-1/item.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: 'Projet N°1' -media_order: 'ouvrage_Edith.jpg,affiche_grainesdelecteurs_2014.jpg' -mea: true -meaimg: 'ouvrage_Edith.jpg' -taxonomy: - category: - - Éditions - tag: - - mea -categories: test ---- - -Faux-texte: a pour fonction de faire office de texte de substitution ou d'outil permettant la comparaison et l'appréciation de différentes polices. On appelle Lipsum un texte qui, en l'absence du texte définitif, sert de substitut aux futurs contenus lors de la production de maquettes pour les publications ou sites Web. Le terme Lipsum est issu de la contraction du plus connu de ce type de texte "Lorem ipsum". diff --git a/user/pages/01.projets/projet-n-1/ouvrage_Edith.jpg b/user/pages/01.projets/projet-n-1/ouvrage_Edith.jpg deleted file mode 100644 index 5fb0391..0000000 Binary files a/user/pages/01.projets/projet-n-1/ouvrage_Edith.jpg and /dev/null differ diff --git a/user/pages/01.projets/projet-n-2/brochure_ESADHaR_2017.jpg b/user/pages/01.projets/projet-n-2/brochure_ESADHaR_2017.jpg deleted file mode 100644 index 995330a..0000000 Binary files a/user/pages/01.projets/projet-n-2/brochure_ESADHaR_2017.jpg and /dev/null differ diff --git a/user/pages/01.projets/projet-n-2/item.md b/user/pages/01.projets/projet-n-2/item.md deleted file mode 100644 index 1ec8aa6..0000000 --- a/user/pages/01.projets/projet-n-2/item.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: 'projet n°2' -media_order: 'brochure_ESADHaR_2017.jpg' -mea: true -meaimg: 'brochure_ESADHaR_2017.jpg' -taxonomy: - category: - - Éditions - tag: - - mea ---- - -Faux-texte: a pour fonction de faire office de texte de substitution ou d'outil permettant la comparaison et l'appréciation de différentes polices. On appelle Lipsum un texte qui, en l'absence du texte définitif, sert de substitut aux futurs contenus lors de la production de maquettes pour les publications ou sites Web. Le terme Lipsum est issu de la contraction du plus connu de ce type de texte "Lorem ipsum". diff --git a/user/pages/01.projets/projet-n-3/Cartevoeux2018_bdf.jpg b/user/pages/01.projets/projet-n-3/Cartevoeux2018_bdf.jpg deleted file mode 100644 index c1442ea..0000000 Binary files a/user/pages/01.projets/projet-n-3/Cartevoeux2018_bdf.jpg and /dev/null differ diff --git a/user/pages/01.projets/projet-n-3/FLYER_RDV.jpg b/user/pages/01.projets/projet-n-3/FLYER_RDV.jpg deleted file mode 100644 index 5d2dc2c..0000000 Binary files a/user/pages/01.projets/projet-n-3/FLYER_RDV.jpg and /dev/null differ diff --git a/user/pages/01.projets/projet-n-3/FLYER_carnaval_Colombelle.jpg b/user/pages/01.projets/projet-n-3/FLYER_carnaval_Colombelle.jpg deleted file mode 100644 index 162432f..0000000 Binary files a/user/pages/01.projets/projet-n-3/FLYER_carnaval_Colombelle.jpg and /dev/null differ diff --git a/user/pages/01.projets/projet-n-3/brochure_ESADHaR_2017.jpg b/user/pages/01.projets/projet-n-3/brochure_ESADHaR_2017.jpg deleted file mode 100644 index 995330a..0000000 Binary files a/user/pages/01.projets/projet-n-3/brochure_ESADHaR_2017.jpg and /dev/null differ diff --git a/user/pages/01.projets/projet-n-3/item.md b/user/pages/01.projets/projet-n-3/item.md deleted file mode 100644 index 74c8c72..0000000 --- a/user/pages/01.projets/projet-n-3/item.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: 'projet n°3' -media_order: 'ouvrage_Edith_2.jpg,brochure_ESADHaR_2017.jpg,Cartevoeux2018_bdf.jpg,FLYER_carnaval_Colombelle.jpg,FLYER_RDV.jpg' -mea: true -meaimg: 'ouvrage_Edith_2.jpg' -taxonomy: - category: - - logo - tag: - - mea ---- - -Faux-texte: a pour fonction de faire office de texte de substitution ou d'outil permettant la comparaison et l'appréciation de différentes polices. On appelle Lipsum un texte qui, en l'absence du texte définitif, sert de substitut aux futurs contenus lors de la production de maquettes pour les publications ou sites Web. Le terme Lipsum est issu de la contraction du plus connu de ce type de texte "Lorem ipsum". diff --git a/user/pages/01.projets/projet-n-3/ouvrage_Edith_2.jpg b/user/pages/01.projets/projet-n-3/ouvrage_Edith_2.jpg deleted file mode 100644 index abc8d60..0000000 Binary files a/user/pages/01.projets/projet-n-3/ouvrage_Edith_2.jpg and /dev/null differ diff --git a/user/pages/01.projets/projet-n-4/JPO2016_AfficheA3.jpg b/user/pages/01.projets/projet-n-4/JPO2016_AfficheA3.jpg deleted file mode 100644 index 55421d1..0000000 Binary files a/user/pages/01.projets/projet-n-4/JPO2016_AfficheA3.jpg and /dev/null differ diff --git a/user/pages/01.projets/projet-n-4/item.md b/user/pages/01.projets/projet-n-4/item.md deleted file mode 100644 index 52c8657..0000000 --- a/user/pages/01.projets/projet-n-4/item.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'projet n°4' -taxonomy: - category: - - Éditions - tag: - - mea ---- - -Faux-texte: a pour fonction de faire office de texte de substitution ou d'outil permettant la comparaison et l'appréciation de différentes polices. On appelle Lipsum un texte qui, en l'absence du texte définitif, sert de substitut aux futurs contenus lors de la production de maquettes pour les publications ou sites Web. Le terme Lipsum est issu de la contraction du plus connu de ce type de texte "Lorem ipsum". \ No newline at end of file diff --git a/user/pages/02.contact/default.md b/user/pages/02.contact/default.md index e2ac6b2..24683cd 100644 --- a/user/pages/02.contact/default.md +++ b/user/pages/02.contact/default.md @@ -1,10 +1,14 @@ --- title: Contact +media_order: 'fb.svg,insta.svg' --- **GILLES ACÉZAT** -3 rue d'Épernon -76600 Le Havre - France -+33(0)6 30 55 30 72 -+33(0)2 31 73 35 96 -burodesformes@yahoo.fr \ No newline at end of file +3 rue d'Épernon 76600 Le Havre - France ++33(0)6 30 55 30 72 | +33(0)2 31 73 35 96 +burodesformes@yahoo.fr +[![Facebook](fb.svg)](https://www.facebook.com/gilles.acezat) [![Instagram](insta.svg)](https://www.instagram.com/acezatgilles/) + +Burodesformes est le pseudo qu’à choisi Gilles Acézat en 2004 pour exercer son activité de graphiste indépendant. En créant burodesformes il s'est donné comme priorité d’aborder le design graphique comme une discipline de transmission des savoirs. Ainsi sa pratique s’oriente naturellement vers la création d’outils pédagogiques ou de publications culturelles. Il réalise parallèlement des identités visuelles pour des associations ou organismes engageants. Chaque collaboration et chaque nouveau projet, sont abordés avec une créativité attentive aux objectifs du sujet. Gilles Acézat enseigne le design graphique à l’ESADHaR (École Supérieure d’Art et Design le Havre-Rouen) depuis 2004 où il partage la passion de cette discipline. + +_Le site a été réalisé par Kevin Tessier membre du collectif Figures libres._ diff --git a/user/pages/02.contact/fb.svg b/user/pages/02.contact/fb.svg new file mode 100644 index 0000000..d94af45 --- /dev/null +++ b/user/pages/02.contact/fb.svg @@ -0,0 +1,68 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/user/pages/02.contact/insta.svg b/user/pages/02.contact/insta.svg new file mode 100644 index 0000000..cc9d7af --- /dev/null +++ b/user/pages/02.contact/insta.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/user/themes/gilles_acezat/css-compiled/theme.css b/user/themes/gilles_acezat/css-compiled/theme.css index 8ee23c8..878ad80 100644 --- a/user/themes/gilles_acezat/css-compiled/theme.css +++ b/user/themes/gilles_acezat/css-compiled/theme.css @@ -159,7 +159,7 @@ time { font-size: 1rem; } #page-wrapper.blog .works-mea time, #page-wrapper.blog #items time { font-size: 0.8rem; } -#page-wrapper.blog .works-mea .card-footer, #page-wrapper.blog #items .card-footer { line-height: 0.2rem; } +#page-wrapper.blog .works-mea .card-footer, #page-wrapper.blog #items .card-footer { line-height: 0.5rem; } #page-wrapper.blog .works-mea .card-footer .tags a, #page-wrapper.blog #items .card-footer .tags a { color: #999999 !important; } @@ -734,183 +734,193 @@ time { font-size: 1rem; } html, body { overflow: hidden; } -.blog { width: 100%; height: 100%; } +.card { width: calc((100% / 3) - (10px)); margin-bottom: 7px; } -.blog.down { height: 5rem; } - -#start { width: 100%; } - -.card { width: calc((100% / 3)); line-height: 0.8rem !important; } - -.card .card-header { margin-top: 5px; display: -ms-inline-flexbox; display: inline-flex; -ms-flex-align: baseline; align-items: baseline; } +.card .card-header { width: 100%; display: -ms-inline-flexbox; display: inline-flex; -ms-flex-align: baseline; align-items: baseline; } .card .card-header > div { margin-right: 5px; } +.contact { z-index: 999; position: fixed; right: 0; top: 0; width: 90px; height: 90px; transition: width 0.5s ease, margin 0.5s; } + +.contact > svg { animation: rotation 12s infinite linear; } + +.contact h3 { cursor: pointer; z-index: 999; position: fixed; top: 34px; right: 37px; color: white; transform: rotate(45deg); transition: transform 0.5s ease; } + +.contact .txt { text-align: right; position: fixed; right: -200%; left: 200%; -webkit-transition: color 0.5s ease, right 0s; color: transparent; transition: color 0.5s ease, right 0s; } + +.contact .txt p { margin-top: 1rem; font-size: 1.5rem; line-height: 2rem; } + +.contact .txt p a { display: inline-block; width: 20px; height: 20px; } + +.contact .txt p em { font-size: 1rem; } + +.contact .txt p:nth-last-of-type(2) { font-size: 1.2rem; line-height: 1.6rem; } + +.contact.open { width: 2000px; height: auto; margin: -550px; transition: width 0.5s ease, margin 0.5s; } + +.contact.open .txt { color: white; transition: color 0.5s ease, right 0s; text-align: right; position: fixed; top: 50px; left: auto; right: 70px; width: 650px; } + +.contact.open .txt .reso > div { opacity: 1; transition: opacity 0.5s 0.5s ease; } + +.contact.open h3 { color: transparent; transform: rotate(0deg); transition: transform 0.5s ease; } + +.contact.close { width: 90px; height: 90px; } + +.contact.close .txt { color: transparent; text-align: right; position: fixed; right: -200%; transition: color 0.5s ease, right 0s; } + +.contact.close h3 { transform: rotate(45deg); transition: transform 0.5s ease; } + +header { position: relative; margin-right: 10px; height: 100vh; } + +header:after { position: absolute; width: 0%; bottom: 0; content: ""; } + +header .head { width: 100%; padding-top: 22px; } + +header .head nav { width: calc((100% / 3) * 2); position: relative; } + +header .head nav h2 { position: absolute; } + +header .works-mea { position: absolute; bottom: 20px; width: calc((100%) + (10px)); display: -ms-inline-flexbox; display: inline-flex; height: 50%; } + +header .works-mea .card { height: calc(100% - 30px); } + +header .works-mea .card .card-image { overflow: hidden; height: 100%; width: 100%; } + +header .works-mea .card .card-image a { display: block; height: 100%; } + +header .works-mea .card .card-image a img { object-fit: cover; width: 100%; } + +header .works-mea .card:first-child { margin-right: 10px; } + +header .works-mea .card:last-child { margin-left: 10px; } + +header .scroll { position: absolute; width: 100%; bottom: 0; height: 20px; } + +header .scroll p svg { display: block; margin: auto; } + +.item #start { margin-top: 115px; } + +.item #start .cat-list { display: none; } + +.down header, .item header { background: white; z-index: 999; width: calc(100% - 20px); height: 90px; position: fixed; top: 0; } + +.down header:after, .item header:after { width: 100%; height: 1px; background: black; } + +.down header .head nav, .item header .head nav { width: calc((100% / 6)); min-width: 300px; } + +.down header .head nav path, .item header .head nav path { fill: black !important; } + +.down header .head nav h2, .item header .head nav h2 { transform: translateX(-150%); transition: 2s transform ease; } + +.down header .works-mea, .item header .works-mea { bottom: 65px; transition: 0s 1s bottom; } + +.down header .works-mea .card, .item header .works-mea .card { opacity: 0; margin-top: -20px; } + +.down .scroll, .item .scroll { opacity: 0; margin-bottom: -20px; transition: 1s all ease; } + +.down header { transition: 1s 1s height ease; } + +.down header:after { transition: 1.5s 2s width ease; } + +.down header .head nav { transition: 1s 1s width ease; } + +.down header .head nav path { transition: 1s 1s fill ease; } + +.down header .works-mea { bottom: 65px; transition: 0s 1s bottom; } + +.down header .works-mea .card { opacity: 0; margin-top: -20px; } + +.down header .works-mea .card:nth-child(1) { transition: 0.5s 0.3s all ease; } + +.down header .works-mea .card:nth-child(2) { transition: 0.5s 0.5s all ease; } + +.down header .works-mea .card:nth-child(3) { transition: 0.5s 0.7s all ease; } + +.cat-list { width: calc(100% - 10px); height: 50px; margin-bottom: 20px; display: -ms-inline-flexbox; display: inline-flex; position: relative; } + +.cat-list:after { position: absolute; bottom: 0; display: block; content: ""; width: 0%; } + +.cat-list > ul { margin: auto 0 auto 10px; } + +.cat-list > ul label { margin-right: 10px; opacity: 0; margin-left: -10px; } + +.cat-list > ul label a::after { position: absolute; content: " "; width: 5px; } + +.cat-list > ul label a:hover::after, .cat-list > ul label a.active::after { content: "\002022"; } + +#page-wrapper { padding-left: 10px; z-index: 1000; height: 100%; } + .scroll { cursor: pointer; } -#top { display: none; } +.full-works .card { opacity: 0; margin-top: 30px; } -body .blog { margin: 0 10px; } +.down #start { margin-top: 90px; height: 100%; } -body .blog header { height: 100vh; width: calc(100% - 22px); display: -ms-inline-flexbox; display: inline-flex; -ms-flex-direction: column; flex-direction: column; -ms-flex-line-pack: distribute; align-content: space-around; } +.down .cat-list:after { width: 100%; height: 1px; background: black; } -body .blog header > div { position: fixed; } +.down .cat-list > ul label { opacity: 1; margin-left: 0; } -body .blog header > div.head { z-index: 999; padding-top: 25px; width: inherit; } +.down .full-works .card { opacity: 1; transition: 1.5s opacity 1s ease, 1.5s margin-top 1s ease; margin-top: 0; } -body .blog header > div.head .svg-container { display: inline-block; position: relative; width: calc( ( 100% / 3 ) * 2 - 22px); padding-bottom: 9%; vertical-align: middle; overflow: hidden; } +.down .cat-list:after { transition: 2s 1.5s width ease; } -body .blog header > div.head .svg-container .svg-content { display: inline-block; position: absolute; top: 0; left: 0; } +.down .cat-list > ul label { transition: 2s 1.5s all ease; } -body .blog header > div.head h2 { margin-left: -4px; position: absolute; left: 0; } +.item #start { width: calc(100% - 10px); } -body .blog header > div.head::after { display: block; content: " "; width: 0%; height: 1px; background: black; } +#items .header-item { width: 100%; display: -ms-inline-flexbox; display: inline-flex; -ms-flex-pack: justify; justify-content: space-between; margin-bottom: 1rem; } -body .blog header > div.works-mea { display: -ms-inline-flexbox; display: inline-flex; -ms-flex-item-align: end; align-self: flex-end; height: calc(100% - 25px); -ms-flex-align: end; align-items: flex-end; width: inherit; } +#items .header-item .info { width: calc(100% / 3); } -body .blog header > div.works-mea .card:nth-child(2) { margin: 0 10px; } +#items .header-item .info .title { display: -ms-flexbox; display: flex; } -body .blog header > div.works-mea .card:not(:nth-child(2)) { margin: 0; } +#items .header-item .info .title h2 { text-transform: uppercase; } -body .blog header > div.scroll { bottom: 0; text-align: center; width: inherit; } +#items .header-item .info .title > * { margin-right: 0.5rem; } -body .blog.down header .head .svg-container { width: 250px; transition: all 1s 0.9s ease; padding-bottom: calc(70px - 7px); } +#items .header-item .info .content { margin-top: 1rem; } -body .blog.down header .head .svg-container .svg-content path { transition: all 1s 0.9s ease; fill: black !important; stroke-width: 0 !important; } +#items .header-item .prev-next { width: calc(100% / 3); position: relative; } -body .blog.down header .head::after { animation: showborder 2.5s 1.5s ease forwards; } +#items .header-item .prev-next .btn-info { width: 250px; position: absolute; top: 20px; left: -80px; transform: rotate(-17deg); } -body .blog.down header .head h2 { opacity: 0; left: -40%; transition: left 3s linear, opacity 0.3s 0.1s ease; } +#items .top { cursor: pointer; text-align: center; width: 100%; margin-bottom: 10px; } -body .blog.down header .card:nth-child(1) { animation: translateY 1s ease forwards; } +.img-card { width: calc((100% / 3) - (10px)); margin-bottom: 10px; } -body .blog.down header .card:nth-child(2) { animation: translateY 1.3s ease forwards; } +@media screen and (max-width: 1024px) { .card { width: calc((100% / 2) - 10px); } + .works-mea .card:nth-child(3) { display: none; } + #items .header-item .info { width: calc(100% / 2); } + .img-card { width: calc((100% / 2) - 5px); } } -body .blog.down header .card:nth-child(3) { animation: translateY 1.6s ease forwards; } +@media screen and (orientation: landscape) and (max-width: 812px) { .blog header .head nav { margin-top: 50vh; transform: translate(0, -100%); } + .blog .down header .head nav { margin-top: 0 !important; transform: translate(0) !important; transition: all 0.5s 1s ease; } + .blog .works-mea { display: none !important; } } -body .blog.down header .scroll { opacity: 0; transition: all 1s ease; } +@media screen and (max-width: 414px) { .down header, .item header { height: 70px; } + header .head { padding-top: 10px; } + header .head nav { width: 80% !important; min-width: 80% !important; } + header .contact { width: 70px; height: 70px; } + header .contact h3 { top: 24px; right: 27px; } + header .contact.open .txt { right: 25px; width: calc(100% - 30px); height: calc(100% - 50px); overflow-y: auto; } + header .contact.open .txt p { font-size: 1rem; line-height: 1.4rem; } + header .contact.open .txt p:nth-last-of-type(2) { font-size: 0.8rem; line-height: 1.2rem; } + header .contact.open .txt p:nth-last-of-type(2) a { width: 15px; margin-left: 5px; } + header .contact.open .txt p em { font-size: 0.5rem; } + header .contact.close { width: 70px; height: 70px; } + header .works-mea .card { width: 100%; } + header .works-mea .card:nth-child(2) { display: none; } + header .works-mea .card:nth-child(3) { display: none; } + .blog h2 { line-height: 9vw; font-size: 6vw; } + .down #start, .item #start { margin-top: 70px; } + .card { width: calc(100% - 10px); } + #items .header-item { -ms-flex-direction: column-reverse; flex-direction: column-reverse; } + #items .header-item > div { width: 100% !important; } + #items .header-item > .info { margin-top: 25px; } + #items .header-item > .info .title { display: block; } + #items .header-item > .info .title > a { margin-right: 0; } + #items .header-item .prev-next .btn-info { display: none; } + .img-card { width: calc(100%); } + .item #items { padding-top: 25px; } } -.contact { width: 90px; height: auto; z-index: 999; position: fixed; top: 0px; right: 0px; transition: width 0.5s ease; cursor: pointer; } - -.contact:hover { width: 80px; transition: width 0.5s ease; } - -.contact svg { cursor: pointer; animation: rotation 6s infinite linear; } - -.contact h3 { color: white; transform: rotate(35deg); position: absolute; top: 35px; left: 19px; } - -.contact .txt { position: fixed; right: -200px; } - -.contact.open { transform: scale(15); height: auto; transition: transform 0.5s ease; } - -.contact.open h3 { color: transparent; left: 500px; transition: visibility 0.5 ease left 1s ease; } - -.contact.open svg { animation: rotation 12s infinite linear; } - -.contact.open .txt { position: fixed; color: white; transform: scale(0.1); top: -10px; right: -20px; text-align: center; line-height: 1.5rem; z-index: 9999; } - -.contact.close { transform: scale(1); transition: transform 0.5s 0.1s ease; } - -.contact.close + .txt { top: 190px; text-align: center; line-height: 1.5rem; z-index: 9999; animation: translateleft 1s ease forwards; } - -.contact.close h3 { transition: color 0.5s 0.5s ease, left 0.5s ease; } - -.contact.close:hover { transition: transform 0.5s ease !important; transform: scale(0.9) !important; } - -body #page-wrapper.item header { z-index: 999; padding-top: 25px; width: inherit; border-bottom: 1px solid black; position: fixed; height: 5rem; background: white; top: 0; left: 10px; right: 10px; z-index: 999; } - -body #page-wrapper.item header .head .svg-container { width: 250px; transition: all 1s 0.9s ease; } - -body #page-wrapper.item header .head .svg-container .svg-content path { transition: all 1s 0.9s ease; fill: black !important; stroke-width: 0 !important; } - -body #page-wrapper.item header h2, body #page-wrapper.item header .scroll { display: none; } - -.blog #start .cat-list { width: 100%; z-index: 999; left: -100%; } - -.blog #start .cat-list::after { display: block; content: " "; width: 0%; height: 1px; background: black; } - -.blog #start .cat-list ul { opacity: 0; display: -ms-inline-flexbox; display: inline-flex; margin: 10px 0; } - -.blog #start .cat-list ul .btn-group { display: -ms-flexbox; display: flex; } - -.blog #start .cat-list ul .btn-group .btn a { margin-right: 10px; } - -.blog #start .cat-list ul .btn-group .btn a::after { position: absolute; content: " "; width: 5px; } - -.blog #start .cat-list ul .btn-group .btn a:hover::after, .blog #start .cat-list ul .btn-group .btn a.active::after { content: "\002022"; } - -.blog #start .cat-list ul .btn-group .btn a input { display: none; } - -.blog #start #items .full-works .card { width: calc( (100vw / 3 - calc( 41px / 3 ) )); } - -.blog .down .cat-list::after { animation: showborder 2.5s 1.6s ease forwards; } - -.blog .down .cat-list ul { animation: ultranslate 1s 2.5s ease forwards; } - -body #start { height: 100%; } - -body #page-wrapper.blog #start { width: calc(100% - 20px); height: calc(100% - 5rem); position: fixed; top: 100vh; left: 10px; right: 10px; } - -body #page-wrapper.down #start { top: 5rem; } - -body #page-wrapper.down #items { animation: showcard 1.5s 2.5s ease forwards; } - -.blog #items { opacity: 0; } - -.blog #items .full-works { width: 100%; margin-top: 30px; } - -.blog #items .card { margin-bottom: 10px; min-width: 200px; } - -body #page-wrapper.item { margin: 0 10px; } - -body #page-wrapper.item .contact .txt { display: none; } - -body #page-wrapper.item #start { margin-top: 5rem; } - -body #page-wrapper.item #body-wrapper.blog-listing .img-card { width: calc( (100vw / 3 - calc( 41px / 3 ) )); margin-bottom: 10px; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item { position: relative; margin-bottom: 1.5rem; padding-top: 1.5rem; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item .title { display: -ms-inline-flexbox; display: inline-flex; -ms-flex-align: baseline; align-items: baseline; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item .title h2 { margin-right: 5px; text-transform: uppercase; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item .title time { margin-right: 5px; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item .title span { margin-right: 5px; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item .content { width: calc((100% / 3) - 15px); margin-top: 20px; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next { width: calc(100% / 3); height: 100%; position: absolute; top: calc( 50% + 1.5rem); transform: translateY(-50%); right: 0px; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn { display: block; width: auto; height: 100%; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn .btn-info { position: absolute; transform: rotate(-15deg); margin-left: 40px; margin-top: 20px; } - -body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn img { float: right; width: 80%; } - -body #page-wrapper.item .top { text-align: center; margin: 20px auto 20px auto; width: 50px; } - -body #page-wrapper.item .top img { width: 20px; margin-bottom: 5px; } - -body #page-wrapper.item .top p { transform: rotate(-10deg); } - -@media screen and (max-width: 960px) { body #page-wrapper.item #body-wrapper.blog-listing .header-item .content { width: calc((100% / 2) - 5px); } - body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next { width: calc((100% / 2) - 5px); } - body #page-wrapper.item #body-wrapper.blog-listing .img-card { width: calc((100% / 2) - 5px); } } - -@media screen and (max-width: 600px) { body #page-wrapper.item #body-wrapper.blog-listing .header-item .content { width: calc((100%) - 15px); } - body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next { width: calc((100%) - 15px); position: relative; transform: translateY(0%); } - body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn .btn-info { display: none; } - body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn img { float: none; width: 100%; } - body #page-wrapper.item #body-wrapper.blog-listing .img-card { width: 100%; } } - -@media screen and (max-width: 960px) { .works-mea > div:last-child { display: none; } - .card { width: calc((100% / 2) - 5px) !important; } } - -@media screen and (max-width: 600px) { header .head { padding: 0 !important; } - header h1 { font-size: 2.5rem !important; line-height: 5rem !important; -webkit-text-stroke: 1px black !important; } - header h2 { font-size: 1.5rem; line-height: 0rem !important; margin: -0.7rem 0 0 0 !important; } - .works-mea > div:nth-child(2) { display: none; } - .card { width: 100% !important; } } - -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuY3NzIiwic291cmNlcyI6WyJ0aGVtZS5zY3NzIiwiY29uZmlndXJhdGlvbnMvX3Jlc2V0LnNjc3MiLCJjb25maWd1cmF0aW9ucy9fZm9udHMuc2NzcyIsImNvbmZpZ3VyYXRpb25zL192YXJpYWJsZXMuc2NzcyIsImNvbmZpZ3VyYXRpb25zL19taXhpbnMuc2NzcyIsInRoZW1lL190eXBvZ3JhcGh5LnNjc3MiLCJ0aGVtZS9fbUN1c3RvbVNjcm9sbGJhci5zY3NzIiwiY29uZmlndXJhdGlvbnMvX2FuaW1hdGlvbi5zY3NzIiwidGhlbWUvYWxsLnNjc3MiLCJ0aGVtZS9faGVhZGVyLnNjc3MiLCJ0aGVtZS9faG9tZS5zY3NzIiwidGhlbWUvX2Jsb2cuc2NzcyIsInRoZW1lL2l0ZW0uc2NzcyIsInRoZW1lL21vYmlsZS5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgJ2NvbmZpZ3VyYXRpb25zL3Jlc2V0JztcbkBpbXBvcnQgJ2NvbmZpZ3VyYXRpb25zL2ZvbnRzJztcbkBpbXBvcnQgJ2NvbmZpZ3VyYXRpb25zL3ZhcmlhYmxlcyc7XG5cbkBpbXBvcnQgJ2NvbmZpZ3VyYXRpb25zL21peGlucyc7XG5AaW1wb3J0ICd0aGVtZS90eXBvZ3JhcGh5JztcblxuQGltcG9ydCAndGhlbWUvbUN1c3RvbVNjcm9sbGJhcic7XG5AaW1wb3J0ICdjb25maWd1cmF0aW9ucy9hbmltYXRpb24nO1xuXG5AaW1wb3J0ICd0aGVtZS9hbGwnO1xuQGltcG9ydCAndGhlbWUvaGVhZGVyJztcbkBpbXBvcnQgJ3RoZW1lL2hvbWUnO1xuQGltcG9ydCAndGhlbWUvYmxvZyc7XG5AaW1wb3J0ICd0aGVtZS9pdGVtJztcbkBpbXBvcnQgJ3RoZW1lL21vYmlsZSc7XG4vLyBAaW1wb3J0ICd0aGVtZS9mb290ZXInO1xuIiwiKntcbiAgLXdlYmtpdC1ib3gtc2l6aW5nIDogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nIDogYm9yZGVyLWJveDtcbn1cbi8qISBub3JtYWxpemUuY3NzIHY4LjAuMSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cblxuLyogRG9jdW1lbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgbGluZSBoZWlnaHQgaW4gYWxsIGJyb3dzZXJzLlxuICogMi4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpbiBpT1MuXG4gKi9cblxuaHRtbCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4xNTsgLyogMSAqL1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDIgKi9cbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLyogU2VjdGlvbnNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBtYXJnaW4gaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBgbWFpbmAgZWxlbWVudCBjb25zaXN0ZW50bHkgaW4gSUUuXG4gKi9cblxubWFpbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIGZvbnQgc2l6ZSBhbmQgbWFyZ2luIG9uIGBoMWAgZWxlbWVudHMgd2l0aGluIGBzZWN0aW9uYCBhbmRcbiAqIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG4gKi9cblxuaDEge1xuICBmb250LXNpemU6IDNlbTtcbiAgbWFyZ2luOjA7XG59XG5cbmgxLGgyLGgzLGg0LGg1LHAsZW0sc3Ryb25nLHVsLGxpLGF7XG4gIG1hcmdpbjowO1xuICBwYWRkaW5nOjA7XG59XG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3guXG4gKiAyLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlIGFuZCBJRS5cbiAqL1xuXG5ociB7XG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8qIDEgKi9cbiAgaGVpZ2h0OiAwOyAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlOyAvKiAyICovXG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5wcmUge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IC8qIDEgKi9cbiAgZm9udC1zaXplOiAxZW07IC8qIDIgKi9cbn1cblxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgb24gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuICovXG51bHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbnVsLGxpe1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IGJsYWNrO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi8qKlxuICogMS4gUmVtb3ZlIHRoZSBib3R0b20gYm9yZGVyIGluIENocm9tZSA1Ny1cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG4gKi9cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lOyAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKiAyICovXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5jb2RlLFxua2JkLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8qKlxuICogUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gKiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuICovXG5cbmltZyB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbn1cblxuaWZyYW1le1xuICBib3JkZXI6IG5vbmU7XG59XG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIFJlbW92ZSB0aGUgbWFyZ2luIGluIEZpcmVmb3ggYW5kIFNhZmFyaS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250LWZhbWlseTogaW5oZXJpdDsgLyogMSAqL1xuICBmb250LXNpemU6IDEwMCU7IC8qIDEgKi9cbiAgbGluZS1oZWlnaHQ6IDEuMTU7IC8qIDEgKi9cbiAgbWFyZ2luOiAwOyAvKiAyICovXG59XG5cbi8qKlxuICogU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKiAxLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLlxuICovXG5cbmJ1dHRvbixcbmlucHV0IHsgLyogMSAqL1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEVkZ2UsIEZpcmVmb3gsIGFuZCBJRS5cbiAqIDEuIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b24sXG5zZWxlY3QgeyAvKiAxICovXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKi9cblxuYnV0dG9uLFxuW3R5cGU9XCJidXR0b25cIl0sXG5bdHlwZT1cInJlc2V0XCJdLFxuW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwic3VibWl0XCJdOjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKipcbiAqIFJlc3RvcmUgdGhlIGZvY3VzIHN0eWxlcyB1bnNldCBieSB0aGUgcHJldmlvdXMgcnVsZS5cbiAqL1xuXG5idXR0b246LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZyB7XG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBwYWRkaW5nIGluIEZpcmVmb3guXG4gKi9cblxuZmllbGRzZXQge1xuICBwYWRkaW5nOiAwLjM1ZW0gMC43NWVtIDAuNjI1ZW07XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cbiAqIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXRcbiAqICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbmxlZ2VuZCB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIGNvbG9yOiBpbmhlcml0OyAvKiAyICovXG4gIGRpc3BsYXk6IHRhYmxlOyAvKiAxICovXG4gIG1heC13aWR0aDogMTAwJTsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAzICovXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7IC8qIDEgKi9cbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgdmVydGljYWwgYWxpZ25tZW50IGluIENocm9tZSwgRmlyZWZveCwgYW5kIE9wZXJhLlxuICovXG5cbnByb2dyZXNzIHtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgMTArLlxuICovXG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAuXG4gKi9cblxuW3R5cGU9XCJjaGVja2JveFwiXSxcblt0eXBlPVwicmFkaW9cIl0ge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAyICovXG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuICovXG5cblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgb2RkIGFwcGVhcmFuY2UgaW4gQ2hyb21lIGFuZCBTYWZhcmkuXG4gKiAyLiBDb3JyZWN0IHRoZSBvdXRsaW5lIHN0eWxlIGluIFNhZmFyaS5cbiAqL1xuXG5bdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvKiAxICovXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBwYWRkaW5nIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIG1hY09TLlxuICovXG5cblt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKiAyLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBTYWZhcmkuXG4gKi9cblxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAxICovXG4gIGZvbnQ6IGluaGVyaXQ7IC8qIDIgKi9cbn1cblxuLyogSW50ZXJhY3RpdmVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSAxMCssIGFuZCBGaXJlZm94LlxuICovXG5cbmRldGFpbHMge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLypcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xufVxuXG4vKiBNaXNjXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDEwKy5cbiAqL1xuXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAuXG4gKi9cblxuW2hpZGRlbl0ge1xuICBkaXNwbGF5OiBub25lO1xufVxuIiwiLy8gRm9udCBGYW1pbHlcbiRmb250LWZhbWlseS1kZWZhdWx0OiAgXHRcdFx0XCJSYWxld2F5XCIsIFwiSGVsdmV0aWNhXCIsIFwiVGFob21hXCIsIFwiR2VuZXZhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1oZWFkZXI6ICBcdFx0XHRcIk1vbnRzZXJyYXRcIiwgXCJIZWx2ZXRpY2FcIiwgXCJUYWhvbWFcIiwgXCJHZW5ldmFcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LW1vbm86IFx0XHRcdFx0XCJJbmNvbnNvbGF0YVwiLCBtb25vc3BhY2U7XG4kZm9udC1mYW1pbHktc2VyaWY6XHRcdFx0XHRcIkdlb3JnaWFcIiwgXCJUaW1lc1wiLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZjtcbi8vIEBmb250LWZhY2VcblxuJHR5cG86IFwiU2VjdWVsYVwiO1xuJGNhdGVnb3J5OiBcInNhbnMtc2VyaWZcIjtcbi8vIHNlY3VlbGEgcmVndWxhclxuXG4kZmlsZTogXCJTZWN1ZWxhLVJlZ3VsYXJcIjtcbiRSZWd1bGFyOiBcIlJlZ3VsYXJcIjtcbkBtaXhpbiBmb250LWZhY2UoJFJlZ3VsYXIsICRmaWxlLCAkdHlwbywgJGNhdGVnb3J5OlwiXCIpIHtcbiAgICAkZmlsZXBhdGg6IFwiLi4vZm9udHMvXCIgKyAkdHlwbyArIFwiL1wiICsgJGZpbGU7XG4gICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIiN7JFJlZ3VsYXJ9XCI7XG4gICAgICAgIHNyYzogdXJsKCRmaWxlcGF0aCArIFwiLmVvdFwiKTtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90PyNpZWZpeFwiKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi53b2ZmXCIpIGZvcm1hdCgnd29mZicpLFxuICAgICAgICAgICAgICB1cmwoJGZpbGVwYXRoICsgXCIudHRmXCIpICBmb3JtYXQoJ3RydWV0eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi5zdmcjXCIgKyAkUmVndWxhciArIFwiXCIpIGZvcm1hdCgnc3ZnJyk7XG4gICAgfVxuXG4gICAgJSN7JFJlZ3VsYXJ9IHtcbiAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgQGlmICRjYXRlZ29yeSAhPSBcIlwiIHtcbiAgICAgICAgICAgICAgICBmYW1pbHk6IFwiI3skUmVndWxhcn1cIiwgI3skY2F0ZWdvcnl9O1xuICAgICAgICAgICAgICAgIHdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRSZWd1bGFyfVwiO1xuICAgICAgICAgICAgICAgIHdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBzZWN1ZWxhIG1lZGl1bVxuJGZpbGUyOiBcIlNlY3VlbGEtTWVkaXVtXCI7XG4kbWVkaXVtOiBcIm1lZGl1bVwiO1xuQG1peGluIGZvbnQtZmFjZSgkbWVkaXVtLCAkZmlsZTIsICR0eXBvLCAkY2F0ZWdvcnk6XCJcIikge1xuICAgICRmaWxlcGF0aDogXCIuLi9mb250cy9cIiArICR0eXBvICsgXCIvXCIgKyAkZmlsZTI7XG4gICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIiN7JG1lZGl1bX1cIjtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90XCIpO1xuICAgICAgICBzcmM6IHVybCgkZmlsZXBhdGggKyBcIi5lb3Q/I2llZml4XCIpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICAgICAgICAgdXJsKCRmaWxlcGF0aCArIFwiLndvZmZcIikgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi50dGZcIikgIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgICAgICAgICAgICAgdXJsKCRmaWxlcGF0aCArIFwiLnN2ZyNcIiArICRtZWRpdW0gKyBcIlwiKSBmb3JtYXQoJ3N2ZycpO1xuICAgIH1cblxuICAgICUjeyRtZWRpdW19IHtcbiAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgQGlmICRjYXRlZ29yeSAhPSBcIlwiIHtcbiAgICAgICAgICAgICAgICBmYW1pbHk6IFwiI3skbWVkaXVtfVwiLCAjeyRjYXRlZ29yeX07XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFtaWx5OiBcIiN7JG1lZGl1bX1cIjtcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG4vLyBzZWN1ZWxhIGJvbGRcbiRmaWxlMzogXCJTZWN1ZWxhLUJvbGRcIjtcbiRib2xkOiBcImJvbGRcIjtcbkBtaXhpbiBmb250LWZhY2UoJGJvbGQsICRmaWxlMywgJHR5cG8sICRjYXRlZ29yeTpcIlwiKSB7XG4gICAgJGZpbGVwYXRoOiBcIi4uL2ZvbnRzL1wiICsgJHR5cG8gKyBcIi9cIiArICRmaWxlMztcbiAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiI3skYm9sZH1cIjtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90XCIpO1xuICAgICAgICBzcmM6IHVybCgkZmlsZXBhdGggKyBcIi5lb3Q/I2llZml4XCIpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICAgICAgICAgdXJsKCRmaWxlcGF0aCArIFwiLndvZmZcIikgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi50dGZcIikgIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgICAgICAgICAgICAgdXJsKCRmaWxlcGF0aCArIFwiLnN2ZyNcIiArICRib2xkICsgXCJcIikgZm9ybWF0KCdzdmcnKTtcbiAgICB9XG5cbiAgICAlI3skYm9sZH0ge1xuICAgICAgICBmb250OiB7XG4gICAgICAgICAgICBAaWYgJGNhdGVnb3J5ICE9IFwiXCIge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRib2xkfVwiLCAjeyRjYXRlZ29yeX07XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFtaWx5OiBcIiN7JGJvbGR9XCI7XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLy8gc2VjdWVsYSBpdGFsaWNcbiRmaWxlNDogXCJTZWN1ZWxhLUl0YWxpY1wiO1xuJGl0YWxpYzogXCJpdGFsaWNcIjtcbkBtaXhpbiBmb250LWZhY2UoJGl0YWxpYywgJGZpbGU0LCAkdHlwbywgJGNhdGVnb3J5OlwiXCIpIHtcbiAgICAkZmlsZXBhdGg6IFwiLi4vZm9udHMvXCIgKyAkdHlwbyArIFwiL1wiICsgJGZpbGU0O1xuICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCIjeyRpdGFsaWN9XCI7XG4gICAgICAgIHNyYzogdXJsKCRmaWxlcGF0aCArIFwiLmVvdFwiKTtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90PyNpZWZpeFwiKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi53b2ZmXCIpIGZvcm1hdCgnd29mZicpLFxuICAgICAgICAgICAgICB1cmwoJGZpbGVwYXRoICsgXCIudHRmXCIpICBmb3JtYXQoJ3RydWV0eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi5zdmcjXCIgKyAkaXRhbGljICsgXCJcIikgZm9ybWF0KCdzdmcnKTtcbiAgICB9XG5cbiAgICAlI3skaXRhbGljfSB7XG4gICAgICAgIGZvbnQ6IHtcbiAgICAgICAgICAgIEBpZiAkY2F0ZWdvcnkgIT0gXCJcIiB7XG4gICAgICAgICAgICAgICAgZmFtaWx5OiBcIiN7JGl0YWxpY31cIiwgI3skY2F0ZWdvcnl9O1xuICAgICAgICAgICAgICAgIHdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRpdGFsaWN9XCI7XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLy8gc2VjdWVsYSBsaWdodFxuJGZpbGU1OiBcIlNlY3VlbGEtTGlnaHRcIjtcbiRsaWdodDogXCJsaWdodFwiO1xuQG1peGluIGZvbnQtZmFjZSgkbGlnaHQsICRmaWxlNSwgJHR5cG8sICRjYXRlZ29yeTpcIlwiKSB7XG4gICAgJGZpbGVwYXRoOiBcIi4uL2ZvbnRzL1wiICsgJHR5cG8gKyBcIi9cIiArICRmaWxlNTtcbiAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiI3skbGlnaHR9XCI7XG4gICAgICAgIHNyYzogdXJsKCRmaWxlcGF0aCArIFwiLmVvdFwiKTtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90PyNpZWZpeFwiKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi53b2ZmXCIpIGZvcm1hdCgnd29mZicpLFxuICAgICAgICAgICAgICB1cmwoJGZpbGVwYXRoICsgXCIudHRmXCIpICBmb3JtYXQoJ3RydWV0eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi5zdmcjXCIgKyAkbGlnaHQgKyBcIlwiKSBmb3JtYXQoJ3N2ZycpO1xuICAgIH1cblxuICAgICUjeyRsaWdodH0ge1xuICAgICAgICBmb250OiB7XG4gICAgICAgICAgICBAaWYgJGNhdGVnb3J5ICE9IFwiXCIge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRsaWdodH1cIiwgI3skY2F0ZWdvcnl9O1xuICAgICAgICAgICAgICAgIHdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRsaWdodH1cIjtcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIGZvbnRzXG5AaW5jbHVkZSBmb250LWZhY2UoJFJlZ3VsYXIsICRmaWxlLCAkdHlwbywgJGNhdGVnb3J5KTsvLzFcbkBpbmNsdWRlIGZvbnQtZmFjZSgkbWVkaXVtLCAkZmlsZTIsICR0eXBvLCAkY2F0ZWdvcnkpOy8vMVxuQGluY2x1ZGUgZm9udC1mYWNlKCRib2xkLCAkZmlsZTMsICR0eXBvLCAkY2F0ZWdvcnkpOy8vMVxuQGluY2x1ZGUgZm9udC1mYWNlKCRpdGFsaWMsICRmaWxlNCwgJHR5cG8sICRjYXRlZ29yeSk7Ly8xXG5AaW5jbHVkZSBmb250LWZhY2UoJGxpZ2h0LCAkZmlsZTUsICR0eXBvLCAkY2F0ZWdvcnkpOy8vMVxuXG4vLyBmb250LXNpemVcbiRmaDE6IDEydnc7XG4kZmgyOiA0LjV2dztcbiRmaDItaTogMXJlbTtcbiRmaDM6IDFyZW07XG4kZmg1OiAwLjhyZW07XG4kZnA6IDAuOXJlbTtcbiRmczogMC44cmVtO1xuJGZzLWk6IDFyZW07XG4kbWluLWgxOiAzcmVtO1xuXG4vLyBpbnRlcmxpbmVcblxuLy9pbnRlcmxldHRyZVxuJGxldHRlckkxOiAwLjFyZW07XG5cbi8vIGNvbG9yXG4kYmx1ZTogIzBmMjY1YztcbiRyZWQ6ICM4ZDI4MTVmZjtcbiRncmV5OiAjOTk5OTk5O1xuIiwiIiwiaDEsIGgye1xuICBmb250LWZhbWlseTogJG1lZGl1bTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxuaDJ7XG4gIGZvbnQtc2l6ZTogJGZoMjtcbn1cblxuaDN7XG4gIGZvbnQtZmFtaWx5OiAkbWVkaXVtO1xuICBmb250LXNpemU6ICRmaDM7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG5cbmg1e1xuICBmb250LXNpemU6ICRmaDU7XG4gIGZvbnQtZmFtaWx5OiAkYm9sZDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxucHtcbiAgZm9udC1mYW1pbHk6ICRSZWd1bGFyO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6ICRmcDtcbiAgbGluZS1oZWlnaHQ6IDEuMXJlbTtcbn1cblxudGltZXtcbiAgZm9udC1mYW1pbHk6ICRpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG5cbi5ibG9ne1xuICBoMntcbiAgICBsaW5lLWhlaWdodDogNnZ3O1xuICB9XG4gICYuZG93bntcbiAgICBoMXtcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiByZWR1Y0ggMXMgMC45cyBlYXNlIGZvcndhcmRzO1xuICAgICAgICAgICAgICBhbmltYXRpb246IHJlZHVjSCAxcyAwLjlzIGVhc2UgZm9yd2FyZHM7XG4gICAgfVxuICB9XG59XG5cbi5pdGVte1xuICBoMntcbiAgICBmb250LXNpemU6ICRmaDItaTtcbiAgfVxuICAucHJldi1uZXh0e1xuICAgIGF7XG4gICAgICAudGl0bGV7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkYm9sZDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgICB9XG4gICAgICAudGFncywgLmJsb2ctZGF0ZSB0aW1le1xuICAgICAgICBmb250LWZhbWlseTogJGl0YWxpYztcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgICB9XG5cbiAgICB9XG4gIH1cbn1cblxuLmNhdGVnb3J5e1xuICBhe1xuICAgIGZvbnQtZmFtaWx5OiAkaXRhbGljO1xuICAgIGZvbnQtc2l6ZTogJGZzLWk7XG4gIH1cbn1cblxudGltZXtcbiAgZm9udC1zaXplOiAkZnMtaTtcbn1cblxuLnRhZ3N7XG4gIGZvbnQtZmFtaWx5OiAkYm9sZDtcbiAgZm9udC1zaXplOiAwLjdyZW07XG59XG5cbiNwYWdlLXdyYXBwZXIuYmxvZ3tcbiAgLndvcmtzLW1lYSwgI2l0ZW1ze1xuICAgIC5jYXRlZ29yeXtcbiAgICAgIGF7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkaXRhbGljO1xuICAgICAgICBmb250LXNpemU6ICRmcztcbiAgICAgIH1cbiAgICB9XG4gICAgdGltZXtcbiAgICAgIGZvbnQtc2l6ZTogJGZzO1xuICAgIH1cbiAgICAuY2FyZC1mb290ZXJ7XG4gICAgICBsaW5lLWhlaWdodDogMC4ycmVtO1xuICAgICAgLnRhZ3N7XG4gICAgICAgIGF7XG4gICAgICAgICAgY29sb3I6ICRncmV5IWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuI3BhZ2Utd3JhcHBlci5pdGVte1xuICAjaXRlbXN7XG4gICAgLnRpdGxle1xuICAgICAgaDJ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkYm9sZDtcbiAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICB9XG4gICAgICBhLCB0aW1le1xuICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgIH1cbiAgICB9XG4gICAgLnRhZ3N7XG4gICAgICBzcGFue1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgYXtcbiAgICAgICAgICBjb2xvcjogJGdyZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLmNhdC1saXN0e1xuICBmb250LWZhbWlseTogJGxpZ2h0O1xuICBmb250LXNpemU6IDFyZW07XG59XG4iLCIubUN1c3RvbVNjcm9sbGJhcnstbXMtdG91Y2gtYWN0aW9uOnBpbmNoLXpvb207dG91Y2gtYWN0aW9uOnBpbmNoLXpvb219Lm1DdXN0b21TY3JvbGxiYXIubUNTX25vX3Njcm9sbGJhciwubUN1c3RvbVNjcm9sbGJhci5tQ1NfdG91Y2hfYWN0aW9uey1tcy10b3VjaC1hY3Rpb246YXV0bzt0b3VjaC1hY3Rpb246YXV0b30ubUN1c3RvbVNjcm9sbEJveHtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjEwMCU7b3V0bGluZTowO2RpcmVjdGlvbjpsdHJ9Lm1DU0JfY29udGFpbmVye292ZXJmbG93OmhpZGRlbjt3aWR0aDphdXRvO2hlaWdodDphdXRvfS5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJ7bWFyZ2luLXJpZ2h0OjMwcHh9Lm1DU0JfY29udGFpbmVyLm1DU19ub19zY3JvbGxiYXJfeS5tQ1NfeV9oaWRkZW57bWFyZ2luLXJpZ2h0OjB9Lm1DUy1kaXItcnRsPi5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MzBweH0ubUNTLWRpci1ydGw+Lm1DU0JfaW5zaWRlPi5tQ1NCX2NvbnRhaW5lci5tQ1Nfbm9fc2Nyb2xsYmFyX3kubUNTX3lfaGlkZGVue21hcmdpbi1sZWZ0OjB9Lm1DU0Jfc2Nyb2xsVG9vbHN7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTZweDtoZWlnaHQ6YXV0bztsZWZ0OmF1dG87dG9wOjA7cmlnaHQ6MDtib3R0b206MDtvcGFjaXR5Oi43NTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTc1KVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTc1KVwifS5tQ1NCX291dHNpZGUrLm1DU0Jfc2Nyb2xsVG9vbHN7cmlnaHQ6LTI2cHh9Lm1DUy1kaXItcnRsPi5tQ1NCX2luc2lkZT4ubUNTQl9zY3JvbGxUb29scywubUNTLWRpci1ydGw+Lm1DU0Jfb3V0c2lkZSsubUNTQl9zY3JvbGxUb29sc3tyaWdodDphdXRvO2xlZnQ6MH0ubUNTLWRpci1ydGw+Lm1DU0Jfb3V0c2lkZSsubUNTQl9zY3JvbGxUb29sc3tsZWZ0Oi0yNnB4fS5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJDb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7aGVpZ2h0OmF1dG99Lm1DU0Jfc2Nyb2xsVG9vbHMgYSsubUNTQl9kcmFnZ2VyQ29udGFpbmVye21hcmdpbjoyMHB4IDB9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7d2lkdGg6MnB4O2hlaWdodDoxMDAlO21hcmdpbjowIGF1dG87LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE2cHg7LW1vei1ib3JkZXItcmFkaXVzOjE2cHg7Ym9yZGVyLXJhZGl1czoxNnB4fS5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJ7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MzBweDt6LWluZGV4OjF9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDo0cHg7aGVpZ2h0OjEwMCU7bWFyZ2luOjAgYXV0bzstd2Via2l0LWJvcmRlci1yYWRpdXM6MTZweDstbW96LWJvcmRlci1yYWRpdXM6MTZweDtib3JkZXItcmFkaXVzOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCAubUNTQl9kcmFnZ2VyX2JhciwubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye3dpZHRoOjEycHh9Lm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCsubUNTQl9kcmFnZ2VyUmFpbCwubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDo4cHh9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93biwubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoyMHB4O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbjowIGF1dG87Y3Vyc29yOnBvaW50ZXJ9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntib3R0b206MH0ubUNTQl9ob3Jpem9udGFsLm1DU0JfaW5zaWRlPi5tQ1NCX2NvbnRhaW5lcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tYm90dG9tOjMwcHh9Lm1DU0JfaG9yaXpvbnRhbC5tQ1NCX291dHNpZGU+Lm1DU0JfY29udGFpbmVye21pbi1oZWlnaHQ6MTAwJX0ubUNTQl9ob3Jpem9udGFsPi5tQ1NCX2NvbnRhaW5lci5tQ1Nfbm9fc2Nyb2xsYmFyX3gubUNTX3hfaGlkZGVue21hcmdpbi1ib3R0b206MH0ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWx7d2lkdGg6YXV0bztoZWlnaHQ6MTZweDt0b3A6YXV0bztyaWdodDowO2JvdHRvbTowO2xlZnQ6MH0ubUN1c3RvbVNjcm9sbEJveCsubUNTQl9zY3JvbGxUb29scysubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwsLm1DdXN0b21TY3JvbGxCb3grLm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFse2JvdHRvbTotMjZweH0ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgYSsubUNTQl9kcmFnZ2VyQ29udGFpbmVye21hcmdpbjowIDIwcHh9Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjJweDttYXJnaW46N3B4IDB9Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJ7d2lkdGg6MzBweDtoZWlnaHQ6MTAwJTtsZWZ0OjB9Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4O21hcmdpbjo2cHggYXV0b30ubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2hlaWdodDoxMnB4O21hcmdpbjoycHggYXV0b30ubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQrLm1DU0JfZHJhZ2dlclJhaWwsLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHtoZWlnaHQ6OHB4O21hcmdpbjo0cHggMH0ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfYnV0dG9uTGVmdCwubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfYnV0dG9uUmlnaHR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyMHB4O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjttYXJnaW46MCBhdXRvO2N1cnNvcjpwb2ludGVyfS5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9idXR0b25MZWZ0e2xlZnQ6MH0ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfYnV0dG9uUmlnaHR7cmlnaHQ6MH0ubUNTQl9jb250YWluZXJfd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO292ZXJmbG93OmhpZGRlbjt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDttYXJnaW4tcmlnaHQ6MzBweDttYXJnaW4tYm90dG9tOjMwcHh9Lm1DU0JfY29udGFpbmVyX3dyYXBwZXI+Lm1DU0JfY29udGFpbmVye3BhZGRpbmctcmlnaHQ6MzBweDtwYWRkaW5nLWJvdHRvbTozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubUNTQl92ZXJ0aWNhbF9ob3Jpem9udGFsPi5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWx7Ym90dG9tOjIwcHh9Lm1DU0JfdmVydGljYWxfaG9yaXpvbnRhbD4ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWx7cmlnaHQ6MjBweH0ubUNTQl9jb250YWluZXJfd3JhcHBlci5tQ1Nfbm9fc2Nyb2xsYmFyX3gubUNTX3hfaGlkZGVuKy5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWx7Ym90dG9tOjB9Lm1DUy1kaXItcnRsPi5tQ3VzdG9tU2Nyb2xsQm94Lm1DU0JfdmVydGljYWxfaG9yaXpvbnRhbC5tQ1NCX2luc2lkZT4ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwsLm1DU0JfY29udGFpbmVyX3dyYXBwZXIubUNTX25vX3Njcm9sbGJhcl95Lm1DU195X2hpZGRlbisubUNTQl9zY3JvbGxUb29sc34ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWx7cmlnaHQ6MH0ubUNTLWRpci1ydGw+Lm1DdXN0b21TY3JvbGxCb3gubUNTQl92ZXJ0aWNhbF9ob3Jpem9udGFsLm1DU0JfaW5zaWRlPi5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbHtsZWZ0OjIwcHh9Lm1DUy1kaXItcnRsPi5tQ3VzdG9tU2Nyb2xsQm94Lm1DU0JfdmVydGljYWxfaG9yaXpvbnRhbC5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJfd3JhcHBlci5tQ1Nfbm9fc2Nyb2xsYmFyX3kubUNTX3lfaGlkZGVuKy5tQ1NCX3Njcm9sbFRvb2xzfi5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbHtsZWZ0OjB9Lm1DUy1kaXItcnRsPi5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJfd3JhcHBlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDozMHB4fS5tQ1NCX2NvbnRhaW5lcl93cmFwcGVyLm1DU19ub19zY3JvbGxiYXJfeS5tQ1NfeV9oaWRkZW4+Lm1DU0JfY29udGFpbmVye3BhZGRpbmctcmlnaHQ6MH0ubUNTQl9jb250YWluZXJfd3JhcHBlci5tQ1Nfbm9fc2Nyb2xsYmFyX3gubUNTX3hfaGlkZGVuPi5tQ1NCX2NvbnRhaW5lcntwYWRkaW5nLWJvdHRvbTowfS5tQ3VzdG9tU2Nyb2xsQm94Lm1DU0JfdmVydGljYWxfaG9yaXpvbnRhbC5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJfd3JhcHBlci5tQ1Nfbm9fc2Nyb2xsYmFyX3kubUNTX3lfaGlkZGVue21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9Lm1DdXN0b21TY3JvbGxCb3gubUNTQl92ZXJ0aWNhbF9ob3Jpem9udGFsLm1DU0JfaW5zaWRlPi5tQ1NCX2NvbnRhaW5lcl93cmFwcGVyLm1DU19ub19zY3JvbGxiYXJfeC5tQ1NfeF9oaWRkZW57bWFyZ2luLWJvdHRvbTowfS5tQ1NCX3Njcm9sbFRvb2xzLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd24sLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdCwubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodCwubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcCwubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyey13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dDstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZS1pbi1vdXQsYmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZS1pbi1vdXQ7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjJzIGVhc2UtaW4tb3V0fS5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlcl9iYXJ7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLW91dCAuMnMsaGVpZ2h0IC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLWxlZnQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tcmlnaHQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tdG9wIC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLWJvdHRvbSAuMnMgZWFzZS1vdXQgLjJzLG9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjJzIGVhc2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjp3aWR0aCAuMnMgZWFzZS1vdXQgLjJzLGhlaWdodCAuMnMgZWFzZS1vdXQgLjJzLG1hcmdpbi1sZWZ0IC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLXJpZ2h0IC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLXRvcCAuMnMgZWFzZS1vdXQgLjJzLG1hcmdpbi1ib3R0b20gLjJzIGVhc2Utb3V0IC4ycyxvcGFjaXR5IC4ycyBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLW91dCAuMnMsaGVpZ2h0IC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLWxlZnQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tcmlnaHQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tdG9wIC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLWJvdHRvbSAuMnMgZWFzZS1vdXQgLjJzLG9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2Utb3V0IC4ycyxoZWlnaHQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tbGVmdCAuMnMgZWFzZS1vdXQgLjJzLG1hcmdpbi1yaWdodCAuMnMgZWFzZS1vdXQgLjJzLG1hcmdpbi10b3AgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tYm90dG9tIC4ycyBlYXNlLW91dCAuMnMsb3BhY2l0eSAuMnMgZWFzZS1pbi1vdXQsYmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZS1pbi1vdXR9Lm1DUy1hdXRvSGlkZT4ubUN1c3RvbVNjcm9sbEJveD4ubUNTQl9zY3JvbGxUb29scywubUNTLWF1dG9IaWRlPi5tQ3VzdG9tU2Nyb2xsQm94fi5tQ1NCX3Njcm9sbFRvb2xze29wYWNpdHk6MDtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTApXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9MClcIn0ubUNTLWF1dG9IaWRlOmhvdmVyPi5tQ3VzdG9tU2Nyb2xsQm94Pi5tQ1NCX3Njcm9sbFRvb2xzLC5tQ1MtYXV0b0hpZGU6aG92ZXI+Lm1DdXN0b21TY3JvbGxCb3h+Lm1DU0Jfc2Nyb2xsVG9vbHMsLm1DdXN0b21TY3JvbGxCb3g6aG92ZXI+Lm1DU0Jfc2Nyb2xsVG9vbHMsLm1DdXN0b21TY3JvbGxCb3g6aG92ZXJ+Lm1DU0Jfc2Nyb2xsVG9vbHMsLm1DdXN0b21TY3JvbGxiYXI+Lm1DdXN0b21TY3JvbGxCb3g+Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19vbkRyYWcsLm1DdXN0b21TY3JvbGxiYXI+Lm1DdXN0b21TY3JvbGxCb3h+Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19vbkRyYWd7b3BhY2l0eToxO2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9MTAwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTEwMClcIn0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40KTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTQwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTQwKVwifS5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNzUpO2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9NzUpXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9NzUpXCJ9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44NSk7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT04NSlcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT04NSlcIn0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOSk7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT05MClcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT05MClcIn0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3duLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnQsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHQsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1pbWFnZTp1cmwobUNTQl9idXR0b25zLnBuZyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O29wYWNpdHk6LjQ7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT00MClcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT00MClcIn0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246MCAtMjBweH0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MCAtNDBweH0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTU2cHh9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bjpob3ZlciwubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0OmhvdmVyLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0OmhvdmVyLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwOmhvdmVye29wYWNpdHk6Ljc1O2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9NzUpXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9NzUpXCJ9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bjphY3RpdmUsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdDphY3RpdmUsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHQ6YWN0aXZlLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwOmFjdGl2ZXtvcGFjaXR5Oi45O2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9OTApXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9OTApXCJ9Lm1DUy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTUpfS5tQ1MtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpfS5tQ1MtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6aG92ZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44NSl9Lm1DUy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuOSl9Lm1DUy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAwfS5tQ1MtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjBweH0ubUNTLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTQwcHh9Lm1DUy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNTZweH0ubUNTLWRhcmstMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTstd2Via2l0LWJvcmRlci1yYWRpdXM6MXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxcHg7Ym9yZGVyLXJhZGl1czoxcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6NHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjc1KTstd2Via2l0LWJvcmRlci1yYWRpdXM6MXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxcHg7Ym9yZGVyLXJhZGl1czoxcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LTIubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjRweDttYXJnaW46NnB4IGF1dG99Lm1DUy1saWdodC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44NSl9Lm1DUy1saWdodC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjkpfS5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTMycHggMH0ubUNTLWxpZ2h0LTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTIwcHh9Lm1DUy1saWdodC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC00MHB4fS5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTQwcHggLTU2cHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKTstd2Via2l0LWJvcmRlci1yYWRpdXM6MXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxcHg7Ym9yZGVyLXJhZGl1czoxcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjc1KTstd2Via2l0LWJvcmRlci1yYWRpdXM6MXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxcHg7Ym9yZGVyLXJhZGl1czoxcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmhvdmVyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg1KX0ubUNTLWRhcmstMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWRhcmstMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjkpfS5tQ1MtZGFyay0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggMH0ubUNTLWRhcmstMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTIwcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC00MHB4fS5tQ1MtZGFyay0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTU2cHh9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1saWdodC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7Ym9yZGVyLXJhZGl1czoycHh9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDo2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNzUpOy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDtib3JkZXItcmFkaXVzOjJweH0ubUNTLWRhcmstdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjRweDttYXJnaW46NnB4IDB9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbGlnaHQtdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6MTAwJTtoZWlnaHQ6NnB4O21hcmdpbjo1cHggYXV0b30ubUNTLWxpZ2h0LXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44NSl9Lm1DUy1saWdodC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOSl9Lm1DUy1saWdodC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggMH0ubUNTLWxpZ2h0LXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0yMHB4fS5tQ1MtbGlnaHQtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTIwcHggLTQwcHh9Lm1DUy1saWdodC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTIwcHggLTU2cHh9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSk7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4O2JvcmRlci1yYWRpdXM6MnB4fS5tQ1MtZGFyay10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpOy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDtib3JkZXItcmFkaXVzOjJweH0ubUNTLWRhcmstdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmhvdmVyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg1KX0ubUNTLWRhcmstdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuOSl9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAwfS5tQ1MtZGFyay10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMjBweH0ubUNTLWRhcmstdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTEwMHB4IC00MHB4fS5tQ1MtZGFyay10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTEwMHB4IC01NnB4fS5tQ1MtbGlnaHQtdGhpbi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LXRoaW4ubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye3dpZHRoOjJweH0ubUNTLWRhcmstdGhpbi5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1saWdodC10aGluLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDoxMDAlfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbGlnaHQtdGhpbi5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDoxMDAlO2hlaWdodDoycHg7bWFyZ2luOjdweCBhdXRvfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTUpfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC43NSl9Lm1DUy1kYXJrLXRoaW4ubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmhvdmVyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg1KX0ubUNTLWRhcmstdGhpbi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWRhcmstdGhpbi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjkpfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAwfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0yMHB4fS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC00MHB4fS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNTZweH0ubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLC5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLC5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciwubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2Vye2hlaWdodDoxNHB4fS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDoxNHB4O21hcmdpbjowIDFweH0ubUNTLXJvdW5kZWQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyLC5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyLC5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlcnt3aWR0aDoxNHB4fS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRvdHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2hlaWdodDoxNHB4O21hcmdpbjoxcHggMH0ubUNTLXJvdW5kZWQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJDb250YWluZXI6aG92ZXIgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O21hcmdpbjotMXB4IDB9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnX2V4cGFuZGVkKy5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJDb250YWluZXI6aG92ZXIgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCsubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDo0cHh9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyQ29udGFpbmVyOmhvdmVyIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnX2V4cGFuZGVkIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJDb250YWluZXI6aG92ZXIgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O21hcmdpbjowIC0xcHh9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQrLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyQ29udGFpbmVyOmhvdmVyIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCsubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyQ29udGFpbmVyOmhvdmVyIC5tQ1NCX2RyYWdnZXJSYWlse2hlaWdodDo0cHg7bWFyZ2luOjZweCAwfS5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246MCAtNzJweH0ubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246MCAtOTJweH0ubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MCAtMTEycHh9Lm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjhweH0ubUNTLXJvdW5kZWQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRvdHMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpfS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTUpfS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44NSl9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhciwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC45KX0ubUNTLXJvdW5kZWQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTcycHh9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTkycHh9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTExMnB4fS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTI4cHh9Lm1DUy1yb3VuZGVkLWRvdHMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwgLm1DU0JfZHJhZ2dlclJhaWx7d2lkdGg6NHB4fS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyfS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQWdBQUFBSUNBWUFBQURFRDc2TEFBQUFORWxFUVZRWVYyTmtJQUFZaVZidy8vOS9ZNkRpTTFBTkpveU1qR2RCYkxnSlFBWC9rVTBES2dETGthUUF2eFc0SEV2UUZ3Q1JjeElKSzFYem5BQUFBQUJKUlU1RXJrSmdnZz09KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteTtvcGFjaXR5Oi4zO2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9MzApXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9MzApXCJ9Lm1DUy1yb3VuZGVkLWRvdHMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1yb3VuZGVkLWRvdHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse2hlaWdodDo0cHg7bWFyZ2luOjZweCAwO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNzJweH0ubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtOTJweH0ubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjBweCAtMTEycHh9Lm1DUy1yb3VuZGVkLWRvdHMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMHB4IC0xMjhweH0ubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQ0FZQUFBREVENzZMQUFBQUxFbEVRVlFZVjJOa0lBQVlTVkZnREZSOEJxckJCRWlmQmJHUlRmaVBaaHBZamlRRkJLM0E2bDZDdmdBQUU5a0dDZDFtdmdFQUFBQUFTVVZPUks1Q1lJST0pfS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC03MnB4fS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTkycHh9Lm1DUy1yb3VuZGVkLWRvdHMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTAwcHggLTExMnB4fS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMDBweCAtMTI4cHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC15O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCxyaWdodCB0b3AsY29sb3Itc3RvcCgwLHJnYmEoMjU1LDI1NSwyNTUsLjUpKSxjb2xvci1zdG9wKDEwMCUscmdiYSgyNTUsMjU1LDI1NSwwKSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotbXMtbGluZWFyLWdyYWRpZW50KGxlZnQscmdiYSgyNTUsMjU1LDI1NSwuNSkgMCxyZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMjU1LDI1NSwyNTUsLjUpIDAscmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKX0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC10aGljay1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCxsZWZ0IGJvdHRvbSxjb2xvci1zdG9wKDAscmdiYSgyNTUsMjU1LDI1NSwuNSkpLGNvbG9yLXN0b3AoMTAwJSxyZ2JhKDI1NSwyNTUsMjU1LDApKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AscmdiYSgyNTUsMjU1LDI1NSwuNSkgMCxyZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotbXMtbGluZWFyLWdyYWRpZW50KHRvcCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMjU1LDI1NSwyNTUsLjUpIDAscmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKX0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbCAubUNTQl9kcmFnZ2VyLC5tQ1MtM2QubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbCAubUNTQl9kcmFnZ2Vye2hlaWdodDo3MHB4fS5tQ1MtM2QtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2Vye3dpZHRoOjcwcHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMsLm1DUy0zZC5tQ1NCX3Njcm9sbFRvb2xze29wYWNpdHk6MTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTMwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTMwKVwifS5tQ1MtM2QtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy0zZC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsey13ZWJraXQtYm9yZGVyLXJhZGl1czoxNnB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNnB4O2JvcmRlci1yYWRpdXM6MTZweH0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7d2lkdGg6OHB4O2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDAgMXB4IHJnYmEoMCwwLDAsLjUpLGluc2V0IC0xcHggMCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMil9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiM1NTV9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDo4cHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDoxMDAlO2hlaWdodDo4cHg7bWFyZ2luOjRweCAwO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjUpLGluc2V0IDAgLTFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMil9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6MTAwJTtoZWlnaHQ6OHB4O21hcmdpbjo0cHggYXV0b30ubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNzJweH0ubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC05MnB4fS5tQ1MtM2QubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTQwcHggLTExMnB4fS5tQ1MtM2QubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC0xMjhweH0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93Omluc2V0IDFweCAwIDFweCByZ2JhKDAsMCwwLC4xKX0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjEpfS5tQ1MtM2QtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC03MnB4fS5tQ1MtM2QtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTkycHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTEycHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTEyOHB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29sc3tvcGFjaXR5OjE7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT0zMClcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT0zMClcIn0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scywubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyQ29udGFpbmVyLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scywubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcnstd2Via2l0LWJvcmRlci1yYWRpdXM6N3B4Oy1tb3otYm9yZGVyLXJhZGl1czo3cHg7Ym9yZGVyLXJhZGl1czo3cHh9Lm1DU0JfaW5zaWRlKy5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLC5tQ1NCX2luc2lkZSsubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWx7cmlnaHQ6MXB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbHtib3gtc2hhZG93Omluc2V0IDFweCAwIDFweCByZ2JhKDAsMCwwLC4xKSxpbnNldCAwIDAgMTRweCByZ2JhKDAsMCwwLC41KX0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFse2JvdHRvbToxcHg7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMSksaW5zZXQgMCAwIDE0cHggcmdiYSgwLDAsMCwuNSl9Lm1DUy0zZC10aGljay1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyLXJhZGl1czo1cHg7Ym94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsLjQpO3dpZHRoOjEycHg7bWFyZ2luOjJweDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6YXV0bzt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MH0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC10aGljay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcntib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuNCk7aGVpZ2h0OjEycHg7d2lkdGg6YXV0b30ubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiM1NTV9Lm1DUy0zZC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJDb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDUpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDFweCAxNnB4IHJnYmEoMCwwLDAsLjEpfS5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC03MnB4fS5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTkycHh9Lm1DUy0zZC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDBweCAtMTEycHh9Lm1DUy0zZC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTQwcHggLTEyOHB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xze2JveC1zaGFkb3c6aW5zZXQgMCAwIDE0cHggcmdiYSgwLDAsMCwuMil9Lm1DUy0zZC10aGljay1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbHtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4xKSxpbnNldCAwIDAgMTRweCByZ2JhKDAsMCwwLC4yKX0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LC40KSxpbnNldCAtMXB4IDAgMCByZ2JhKDAsMCwwLC4yKX0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjQpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsLjIpfS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC10aGljay1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6aG92ZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojNzc3fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJDb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDUpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDFweCAxNnB4IHJnYmEoMCwwLDAsLjEpfS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1taW5pbWFsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNzJweH0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC05MnB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTExMnB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0xMjhweH0ubUNTQl9vdXRzaWRlKy5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwsLm1DU0Jfb3V0c2lkZSsubUNTLW1pbmltYWwubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbHtyaWdodDowO21hcmdpbjoxMnB4IDB9Lm1DdXN0b21TY3JvbGxCb3gubUNTLW1pbmltYWwrLm1DU0Jfc2Nyb2xsVG9vbHMrLm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLC5tQ3VzdG9tU2Nyb2xsQm94Lm1DUy1taW5pbWFsKy5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCwubUN1c3RvbVNjcm9sbEJveC5tQ1MtbWluaW1hbC1kYXJrKy5tQ1NCX3Njcm9sbFRvb2xzKy5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCwubUN1c3RvbVNjcm9sbEJveC5tQ1MtbWluaW1hbC1kYXJrKy5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbHtib3R0b206MDttYXJnaW46MCAxMnB4fS5tQ1MtZGlyLXJ0bD4ubUNTQl9vdXRzaWRlKy5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwsLm1DUy1kaXItcnRsPi5tQ1NCX291dHNpZGUrLm1DUy1taW5pbWFsLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWx7bGVmdDowO3JpZ2h0OmF1dG99Lm1DUy1taW5pbWFsLWRhcmsubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbCAubUNTQl9kcmFnZ2VyLC5tQ1MtbWluaW1hbC5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsIC5tQ1NCX2RyYWdnZXJ7aGVpZ2h0OjUwcHh9Lm1DUy1taW5pbWFsLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIsLm1DUy1taW5pbWFsLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2Vye3dpZHRoOjUwcHh9Lm1DUy1taW5pbWFsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTIwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTIwKVwifS5tQ1MtbWluaW1hbC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLW1pbmltYWwubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTUwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTUwKVwifS5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yKTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTIwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTIwKVwifS5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNSk7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT01MClcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT01MClcIn0ubUNTLWRhcmstMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjZweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yKX0ubUNTLWRhcmstMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDo2cHh9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtMy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjZweDttYXJnaW46NXB4IDB9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnX2V4cGFuZGVkKy5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJDb250YWluZXI6aG92ZXIgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCsubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDoxMnB4fS5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnX2V4cGFuZGVkKy5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQrLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHtoZWlnaHQ6MTJweDttYXJnaW46MnB4IDB9Lm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNzJweH0ubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTkycHh9Lm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC0xMTJweH0ubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC0xMjhweH0ubUNTLWRhcmstMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpfS5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44NSl9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC45KX0ubUNTLWRhcmstMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTcycHh9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC05MnB4fS5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTEycHh9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTI4cHh9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjIpfS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6NnB4O21hcmdpbjozcHggNXB4O3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDphdXRvO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtMi5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7aGVpZ2h0OjZweDttYXJnaW46NXB4IDNweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDphdXRvO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTIubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1pbnNldC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlclJhaWx7d2lkdGg6MTAwJTtoZWlnaHQ6MTJweDttYXJnaW46MnB4IDB9Lm1DUy1pbnNldC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXAsLm1DUy1pbnNldC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXAsLm1DUy1pbnNldC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTcycHh9Lm1DUy1pbnNldC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93biwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3duLC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTkycHh9Lm1DUy1pbnNldC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdCwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0LC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTQwcHggLTExMnB4fS5tQ1MtaW5zZXQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0LC5tQ1MtaW5zZXQtMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0LC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC0xMjhweH0ubUNTLWluc2V0LTItZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpfS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6aG92ZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44NSl9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC45KX0ubUNTLWluc2V0LTItZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1pbnNldC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcCwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC03MnB4fS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93biwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd24sLm1DUy1pbnNldC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtOTJweH0ubUNTLWluc2V0LTItZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnQsLm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0LC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTExMnB4fS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHQsLm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodCwubUNTLWluc2V0LWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTI4cHh9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtib3JkZXItY29sb3I6IzAwMDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMil9Lm1DUy1pbnNldC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNil9Lm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjc1KX0ubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmhvdmVyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg1KX0ubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuOSl9Lm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjc1KX0ubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6aG92ZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuODUpfS5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOSl9IiwiQC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0aW9uIHtcbiAgZnJvbSB7XG4gICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJvdGF0aW9uIHtcbiAgZnJvbSB7XG4gICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgdHJhbnNsYXRlcmlnaHR7XG4gIDAle1xuICAgIHJpZ2h0OiAtNTBweDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIDMwJXtcbiAgICByaWdodDogMTUwcHg7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgMTAwJXtcbiAgICByaWdodDogMjAwcHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdHJhbnNsYXRlcmlnaHR7XG4gIDAle1xuICAgIHJpZ2h0OiAtNTBweDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIDMwJXtcbiAgICByaWdodDogMTUwcHg7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgMTAwJXtcbiAgICByaWdodDogMjAwcHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyB0cmFuc2xhdGVsZWZ0e1xuICAwJXtcbiAgICByaWdodDogMjAwcHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG4gIDMwJXtcbiAgICByaWdodDogMTUwcHg7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgMTAwJXtcbiAgICByaWdodDogLTIwMHB4O1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdHJhbnNsYXRlbGVmdHtcbiAgMCV7XG4gICAgcmlnaHQ6IDIwMHB4O1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuICAzMCV7XG4gICAgcmlnaHQ6IDE1MHB4O1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIDEwMCV7XG4gICAgcmlnaHQ6IC0yMDBweDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgcmVkdWNIe1xuICAwJXtcbiAgICBmaWxsOiB3aGl0ZSFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlLXdpZHRoOjMhaW1wb3J0YW50O1xuICB9XG5cbiAgNzAle1xuICAgIC8vIC13ZWJraXQtdGV4dC1zdHJva2UgOiAxcHggYmxhY2s7XG4gICAgLy8gY29sb3I6IGJsYWNrO1xuICB9XG5cbiAgMTAwJXtcbiAgICBmaWxsOiBibGFjayFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlLXdpZHRoOjAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgcmVkdWNIe1xuICAwJXtcbiAgICBmb250LXNpemU6ICRmaDE7XG4gICAgLXdlYmtpdC10ZXh0LXN0cm9rZSA6IDJweCBibGFjaztcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDVyZW07XG4gIH1cblxuICA3MCV7XG4gICAgLXdlYmtpdC10ZXh0LXN0cm9rZSA6IDFweCBibGFjaztcbiAgICBjb2xvcjogYmxhY2s7XG4gIH1cblxuICAxMDAle1xuICAgIGZvbnQtc2l6ZTogJG1pbi1oMTtcbiAgICAtd2Via2l0LXRleHQtc3Ryb2tlIDogMHB4IGJsYWNrO1xuICAgIGNvbG9yOiBibGFjaztcbiAgICBsaW5lLWhlaWdodDogNXJlbTtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgdHJhbnNsYXRlWXtcbiAgMCV7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAxMDAle1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHRyYW5zbGF0ZVl7XG4gIDAle1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJXtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIHNob3djYXRsaXN0IHtcbiAgMCV7XG4gICAgd2lkdGg6IDA7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMHB4IDBweCAwcHggYmxhY2s7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAwcHggYmxhY2s7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDEwMCV7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggLTJweCAwcHggLTJweCBibGFjaztcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAtMnB4IDBweCAtMnB4IGJsYWNrO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBzaG93Y2F0bGlzdCB7XG4gIDAle1xuICAgIHdpZHRoOiAwO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IGJsYWNrO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IGJsYWNrO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAxMDAle1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IC0ycHggMHB4IC0ycHggYmxhY2s7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggLTJweCAwcHggLTJweCBibGFjaztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBzaG93Ym9yZGVyIHtcbiAgMCV7XG4gICAgd2lkdGg6IDA7XG4gICAgYmFja2dyb3VuZDogYmxhY2s7XG4gIH1cbiAgMTAwJXtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiBibGFjaztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHNob3dib3JkZXIge1xuICAwJXtcbiAgICB3aWR0aDogMDtcbiAgICBiYWNrZ3JvdW5kOiBibGFjaztcbiAgfVxuICAxMDAle1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IGJsYWNrO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyB1bHRyYW5zbGF0ZSB7XG4gIDAle1xuICAgIG9wYWNpdHk6IDA7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwcHgpO1xuICB9XG4gIDEwMCV7XG4gICAgb3BhY2l0eTogMTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHVsdHJhbnNsYXRlIHtcbiAgMCV7XG4gICAgb3BhY2l0eTogMDtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwcHgpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7XG4gIH1cbiAgMTAwJXtcbiAgICBvcGFjaXR5OiAxO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpO1xuICB9XG59XG5cblxuQC13ZWJraXQta2V5ZnJhbWVzIHNob3djYXJkIHtcbiAgMCV7XG4gICAgb3BhY2l0eTogMDtcblxuICB9XG4gIDEwMCV7XG4gICAgb3BhY2l0eTogMTtcblxuICB9XG59XG5cblxuQGtleWZyYW1lcyBzaG93Y2FyZCB7XG4gIDAle1xuICAgIG9wYWNpdHk6IDA7XG5cbiAgfVxuICAxMDAle1xuICAgIG9wYWNpdHk6IDE7XG5cbiAgfVxufVxuIiwiaHRtbCwgYm9keXtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmJsb2d7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gICYuZG93bntcbiAgICBoZWlnaHQ6IDVyZW07XG4gIH1cbn1cblxuI3N0YXJ0e1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmNhcmR7XG4gIHdpZHRoOiBjYWxjKCgxMDAlIC8gMykpO1xuICBsaW5lLWhlaWdodDogMC44cmVtIWltcG9ydGFudDtcbiAgLmNhcmQtaGVhZGVye1xuICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1ib3g7XG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBiYXNlbGluZTtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICYgPiBkaXZ7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICB9XG4gIH1cbn1cblxuLnNjcm9sbHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuI3RvcHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiIsIi8vIGhvbWVcbmJvZHkge1xuICAuYmxvZyB7XG4gICAgbWFyZ2luOiAwIDEwcHg7XG4gICAgICBoZWFkZXIge1xuICAgICAgICAgIGhlaWdodDoxMDB2aDtcbiAgICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMjJweCk7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICAgICAgJiA+IGRpdntcbiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICYuaGVhZHtcbiAgICAgICAgICAgICAgei1pbmRleDogOTk5O1xuICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMjVweDtcbiAgICAgICAgICAgICAgd2lkdGg6IGluaGVyaXQ7XG4gICAgICAgICAgICAgIC5zdmctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKCAoIDEwMCUgLyAzICkgKiAyIC0gMjJweCApIDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogOSU7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIC5zdmctY29udGVudCB7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC00cHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBibGFjaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi53b3Jrcy1tZWEge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gICAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjVweCk7XG4gICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgICAgICAgICAgd2lkdGg6IGluaGVyaXQ7XG4gICAgICAgICAgICAgIC5jYXJke1xuICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDIpe1xuICAgICAgICAgICAgICAgICAgbWFyZ2luOjAgMTBweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJjpub3QoOm50aC1jaGlsZCgyKSl7XG4gICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLnNjcm9sbHtcbiAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHdpZHRoOiBpbmhlcml0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgICYuZG93bntcbiAgICAgICAgaGVhZGVye1xuICAgICAgICAgIC5oZWFke1xuICAgICAgICAgICAgLnN2Zy1jb250YWluZXIge1xuICAgICAgICAgICAgICB3aWR0aDogMjUwcHg7XG4gICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAxcyAwLjlzIGVhc2U7XG4gICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiBjYWxjKDcwcHggLSA3cHgpO1xuICAgICAgICAgICAgICAuc3ZnLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIHBhdGh7XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMXMgMC45cyBlYXNlO1xuICAgICAgICAgICAgICAgICAgZmlsbDogYmxhY2shaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoOjAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJjo6YWZ0ZXJ7XG4gICAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzaG93Ym9yZGVyIDIuNXMgMS41cyBlYXNlIGZvcndhcmRzO1xuICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogc2hvd2JvcmRlciAyLjVzIDEuNXMgZWFzZSBmb3J3YXJkcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaDJ7XG4gICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgIGxlZnQ6IC00MCU7XG4gICAgICAgICAgICAgIHRyYW5zaXRpb246IGxlZnQgM3MgbGluZWFyLCBvcGFjaXR5IDAuM3MgMC4xcyBlYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLmNhcmR7XG4gICAgICAgICAgJjpudGgtY2hpbGQoMSl7XG4gICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogdHJhbnNsYXRlWSAxcyBlYXNlIGZvcndhcmRzO1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IHRyYW5zbGF0ZVkgMXMgZWFzZSBmb3J3YXJkcztcbiAgICAgICAgICB9XG4gICAgICAgICAgJjpudGgtY2hpbGQoMil7XG4gICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogdHJhbnNsYXRlWSAxLjNzIGVhc2UgZm9yd2FyZHM7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogdHJhbnNsYXRlWSAxLjNzIGVhc2UgZm9yd2FyZHM7XG4gICAgICAgICAgfVxuICAgICAgICAgICY6bnRoLWNoaWxkKDMpe1xuICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IHRyYW5zbGF0ZVkgMS42cyBlYXNlIGZvcndhcmRzO1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IHRyYW5zbGF0ZVkgMS42cyBlYXNlIGZvcndhcmRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAuc2Nyb2xse1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDFzIGVhc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLmNvbnRhY3R7XG4gIHdpZHRoOiA5MHB4O1xuICBoZWlnaHQ6IGF1dG87XG4gIHotaW5kZXg6IDk5OTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDBweDtcbiAgcmlnaHQ6IDBweDtcbiAgdHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gICY6aG92ZXJ7XG4gICAgd2lkdGg6IDgwcHg7XG4gICAgdHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlO1xuICB9XG4gIHN2Z3tcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgLXdlYmtpdC1hbmltYXRpb246IHJvdGF0aW9uIDZzIGluZmluaXRlIGxpbmVhcjtcbiAgICAgICAgICAgIGFuaW1hdGlvbjogcm90YXRpb24gNnMgaW5maW5pdGUgbGluZWFyO1xuICB9XG4gIGgze1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM1ZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM1ZGVnKTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAzNXB4O1xuICAgIGxlZnQ6IDE5cHg7XG4gIH1cbiAgLnR4dHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHJpZ2h0OiAtMjAwcHg7XG4gIH1cbiAgJi5vcGVue1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxNSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDE1KTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC41cyBlYXNlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgZWFzZSwgLXdlYmtpdC10cmFuc2Zvcm0gMC41cyBlYXNlO1xuICAgIGgze1xuICAgICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgbGVmdDogNTAwcHg7XG4gICAgICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDAuNSBlYXNlIGxlZnQgMXMgZWFzZTtcbiAgICB9XG4gICAgc3Zne1xuICAgICAgLXdlYmtpdC1hbmltYXRpb246IHJvdGF0aW9uIDEycyBpbmZpbml0ZSBsaW5lYXI7XG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogcm90YXRpb24gMTJzIGluZmluaXRlIGxpbmVhcjtcbiAgICB9XG4gICAudHh0e1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgIHRvcDogLTEwcHg7XG4gICAgICByaWdodDogLTIwcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICAgICAgei1pbmRleDogOTk5OTtcbiAgICB9XG4gIH1cbiAgJi5jbG9zZXtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuNXMgMC4xcyBlYXNlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIDAuMXMgZWFzZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyAwLjFzIGVhc2UsIC13ZWJraXQtdHJhbnNmb3JtIDAuNXMgMC4xcyBlYXNlO1xuICAgICYgKyAudHh0e1xuICAgICAgICB0b3A6IDE5MHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gICAgICAgIHotaW5kZXg6IDk5OTk7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiB0cmFuc2xhdGVsZWZ0IDFzIGVhc2UgZm9yd2FyZHM7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0cmFuc2xhdGVsZWZ0IDFzIGVhc2UgZm9yd2FyZHM7XG4gICAgfVxuICAgIGgze1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC41cyAwLjVzIGVhc2UsIGxlZnQgMC41cyBlYXNlO1xuICAgIH1cbiAgICAmOmhvdmVye1xuICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC41cyBlYXNlIWltcG9ydGFudDtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2UhaW1wb3J0YW50O1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgZWFzZSwgLXdlYmtpdC10cmFuc2Zvcm0gMC41cyBlYXNlIWltcG9ydGFudDtcbiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjkpIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbn1cbi8vIHBhZ2VcbmJvZHkge1xuICAjcGFnZS13cmFwcGVyLml0ZW0ge1xuICAgIGhlYWRlciB7XG4gICAgICB6LWluZGV4OiA5OTk7XG4gICAgICBwYWRkaW5nLXRvcDogMjVweDtcbiAgICAgIHdpZHRoOiBpbmhlcml0O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgaGVpZ2h0OiA1cmVtO1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAxMHB4O1xuICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICB6LWluZGV4OiA5OTk7XG4gICAgICAgIC5oZWFke1xuICAgICAgICAgIC5zdmctY29udGFpbmVyIHtcbiAgICAgICAgICAgIHdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAxcyAwLjlzIGVhc2U7XG4gICAgICAgICAgICAuc3ZnLWNvbnRlbnQge1xuICAgICAgICAgICAgICBwYXRoe1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAxcyAwLjlzIGVhc2U7XG4gICAgICAgICAgICAgICAgZmlsbDogYmxhY2shaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aDowIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgaDEge1xuICAgICAgICAvLyBjb2xvcjogYmxhY2s7XG4gICAgICAgIC8vIGxpbmUtaGVpZ2h0OiA1cmVtO1xuICAgICAgfVxuICAgICAgaDIsIC5zY3JvbGwge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLmJsb2d7XG4gICNzdGFydHtcbiAgICAuY2F0LWxpc3Qge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgei1pbmRleDogOTk5O1xuICAgICAgICBsZWZ0OiAtMTAwJTtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgICAgIHdpZHRoOiAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBibGFjaztcbiAgICAgICAgfVxuICAgICAgICB1bCB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1ib3g7XG4gICAgICAgICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICAgIG1hcmdpbjogMTBweCAwO1xuICAgICAgICAgIC5idG4tZ3JvdXB7XG4gICAgICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIC5idG4gYXtcbiAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAmOjphZnRlcntcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDVweDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAmOmhvdmVyLCAmLmFjdGl2ZXtcbiAgICAgICAgICAgICAgICAmOjphZnRlcntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFwwMDIwMjJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5wdXR7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICNpdGVtc3tcbiAgICAgIC5mdWxsLXdvcmtze1xuICAgICAgICAuY2FyZHtcbiAgICAgICAgICB3aWR0aDogY2FsYyggKDEwMHZ3IC8gMyAtIGNhbGMoIDQxcHggLyAzICkgKSApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC5kb3due1xuICAgIC5jYXQtbGlzdHtcbiAgICAgICY6OmFmdGVye1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc2hvd2JvcmRlciAyLjVzIDEuNnMgZWFzZSBmb3J3YXJkcztcbiAgICAgICAgICAgICAgICBhbmltYXRpb246IHNob3dib3JkZXIgMi41cyAxLjZzIGVhc2UgZm9yd2FyZHM7XG4gICAgICB9XG4gICAgICB1bHtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IHVsdHJhbnNsYXRlIDFzIDIuNXMgZWFzZSBmb3J3YXJkcztcbiAgICAgICAgICAgICAgICBhbmltYXRpb246IHVsdHJhbnNsYXRlIDFzIDIuNXMgZWFzZSBmb3J3YXJkcztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImJvZHl7XG4gICNzdGFydHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgI3BhZ2Utd3JhcHBlci5ibG9ne1xuICAgICNzdGFydHtcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTtcbiAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNXJlbSk7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDEwMHZoO1xuICAgICAgbGVmdDogMTBweDtcbiAgICAgIHJpZ2h0OiAxMHB4O1xuICAgIH1cbiAgfVxuICAjcGFnZS13cmFwcGVyLmRvd257XG4gICAgI3N0YXJ0e1xuICAgICAgdG9wOiA1cmVtO1xuICAgIH1cbiAgICAjaXRlbXN7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbjogc2hvd2NhcmQgMS41cyAyLjVzIGVhc2UgZm9yd2FyZHM7XG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogc2hvd2NhcmQgMS41cyAyLjVzIGVhc2UgZm9yd2FyZHM7XG4gICAgICAuY2FyZHtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi5ibG9ne1xuICAjaXRlbXN7XG4gICAgb3BhY2l0eTogMDtcbiAgICAuZnVsbC13b3Jrc3tcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLXRvcDogMzBweDtcbiAgICB9XG4gICAgLmNhcmR7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICB9XG4gIH1cbn1cbiIsImJvZHl7XG4gICNwYWdlLXdyYXBwZXIuaXRlbXtcbiAgICBtYXJnaW46IDAgMTBweDtcbiAgLmNvbnRhY3R7XG4gICAgLnR4dHtcbiAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICB9XG4gIH1cbiAgICAjc3RhcnR7XG4gICAgICBtYXJnaW4tdG9wOiA1cmVtO1xuICAgIH1cbiAgICAjYm9keS13cmFwcGVyLmJsb2ctbGlzdGluZyB7XG4gICAgICAuaW1nLWNhcmR7XG4gICAgICAgIHdpZHRoOiBjYWxjKCAoMTAwdncgLyAzIC0gY2FsYyggNDFweCAvIDMgKSApICk7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICB9XG4gICAgICAuaGVhZGVyLWl0ZW17XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICAgICAgICBwYWRkaW5nLXRvcDogMS41cmVtO1xuICAgICAgICAudGl0bGV7XG4gICAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYm94O1xuICAgICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICAtd2Via2l0LWJveC1hbGlnbjogYmFzZWxpbmU7XG4gICAgICAgICAgICAgIC1tcy1mbGV4LWFsaWduOiBiYXNlbGluZTtcbiAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgICAgICBoMntcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGltZXtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzcGFue1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5jb250ZW50e1xuICAgICAgICAgIHdpZHRoOiBjYWxjKCgxMDAlIC8gMykgLSAxNXB4KTtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgICB9XG4gICAgICAgIC5wcmV2LW5leHR7XG4gICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDMpO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdG9wOiBjYWxjKCA1MCUgKyAxLjVyZW0gKTtcbiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICByaWdodDogMHB4O1xuICAgICAgICAgIC5idG57XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIC5idG4taW5mb3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTE1ZGVnKTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTE1ZGVnKTtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4O1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1ne1xuICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgd2lkdGg6IDgwJTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAudG9we1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWFyZ2luOiAyMHB4IGF1dG8gMjBweCBhdXRvO1xuICAgICAgd2lkdGg6IDUwcHg7XG4gICAgICBpbWd7XG4gICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOjVweDtcbiAgICAgIH1cbiAgICAgIHB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEwZGVnKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTBkZWcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5NjBweCkge1xuICBib2R5e1xuICAgICNwYWdlLXdyYXBwZXIuaXRlbXtcbiAgICAgICNib2R5LXdyYXBwZXIuYmxvZy1saXN0aW5ne1xuICAgICAgICAuaGVhZGVyLWl0ZW17XG4gICAgICAgICAgLmNvbnRlbnR7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygoMTAwJSAvIDIpIC0gNXB4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLnByZXYtbmV4dHtcbiAgICAgICAgICAgIHdpZHRoOiBjYWxjKCgxMDAlIC8gMikgLSA1cHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAuaW1nLWNhcmR7XG4gICAgICAgICAgd2lkdGg6IGNhbGMoKDEwMCUgLyAyKSAtIDVweCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgYm9keXtcbiAgICAjcGFnZS13cmFwcGVyLml0ZW17XG4gICAgICAjYm9keS13cmFwcGVyLmJsb2ctbGlzdGluZ3tcbiAgICAgICAgLmhlYWRlci1pdGVte1xuICAgICAgICAgIC5jb250ZW50e1xuICAgICAgICAgICAgd2lkdGg6IGNhbGMoKDEwMCUpIC0gMTVweCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC5wcmV2LW5leHR7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygoMTAwJSkgLSAxNXB4KTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICAgICAgICAgIC5idG57XG4gICAgICAgICAgICAgIC5idG4taW5mb3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW1ne1xuICAgICAgICAgICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5pbWctY2FyZHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTYwcHgpIHtcblxuICAud29ya3MtbWVhe1xuICAgICYgPiBkaXY6bGFzdC1jaGlsZHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG4gIC5jYXJke1xuICAgIHdpZHRoOiBjYWxjKCgxMDAlIC8gMikgLSA1cHggKSFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgaGVhZGVye1xuICAgIC5oZWFke1xuICAgICAgcGFkZGluZzogMCFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIGgxe1xuICAgICAgZm9udC1zaXplOiAyLjVyZW0haW1wb3J0YW50O1xuICAgICAgbGluZS1oZWlnaHQ6IDVyZW0haW1wb3J0YW50O1xuICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogMXB4IGJsYWNrIWltcG9ydGFudDtcbiAgICB9XG4gICAgaDJ7XG4gICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwcmVtIWltcG9ydGFudDtcbiAgICAgIG1hcmdpbjogLTAuN3JlbSAwIDAgMCFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG4gIC53b3Jrcy1tZWF7XG4gICAgJiA+IGRpdjpudGgtY2hpbGQoMil7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuICAuY2FyZHtcbiAgICB3aWR0aDogMTAwJSFpbXBvcnRhbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUNBQSxBQUFBLENBQUMsQ0FBQSxFQUNDLGtCQUFrQixFQUFHLFVBQVUsRUFDdkIsVUFBVSxFQUFHLFVBQVUsR0FDaEM7O0FBQ0QsNEVBQTRFO0FBRTVFLHlGQUNnRjtBQUVoRix3SEFHRztBQUVILEFBQUEsSUFBSSxDQUFDLEVBQ0gsTUFBTSxFQUFFLENBQUMsRUFDVCxPQUFPLEVBQUUsQ0FBQyxFQUNWLFNBQVMsRUFBRSxJQUFJLEVBQ2YsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLENBQzFCLHdCQUF3QixFQUFFLElBQUksRUFBRSxPQUFPLENBQ3ZDLE1BQU0sRUFBRSxJQUFJLEVBQ1osS0FBSyxFQUFFLElBQUksR0FDWjs7QUFFRCx5RkFDZ0Y7QUFFaEYseUNBRUc7QUFFSCxBQUFBLElBQUksQ0FBQyxFQUNILE1BQU0sRUFBRSxDQUFDLEVBQ1QsT0FBTyxFQUFFLENBQUMsRUFDVixNQUFNLEVBQUUsSUFBSSxFQUNaLEtBQUssRUFBRSxJQUFJLEdBQ1o7O0FBRUQsb0RBRUc7QUFFSCxBQUFBLElBQUksQ0FBQyxFQUNILE9BQU8sRUFBRSxLQUFLLEdBQ2Y7O0FBRUQsZ0lBR0c7QUFFSCxBQUFBLEVBQUUsQ0FBQyxFQUNELFNBQVMsRUFBRSxHQUFHLEVBQ2QsTUFBTSxFQUFDLENBQUMsR0FDVDs7QUFFRCxBQUFBLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FB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QUFDLGVBQWUsQUFBQSxpQkFBaUIsQ0FBQyxhQUFhLEFBQUEsT0FBTyxDQUFDLGlCQUFpQixDQUFBLEVBQUMsZ0JBQWdCLEVBQUMsSUFBSSxFQUFDLGdCQUFnQixFQUFDLGtCQUFjLEdBQUU7O0FBQUQsQUFBQSxpQkFBaUIsQUFBQSxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBQyxpQkFBaUIsQUFBQSxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBQyxlQUFlLEFBQUEsaUJBQWlCLENBQUMsaUJBQWlCLENBQUEsRUFBQyxnQkFBZ0IsRUFBQyxJQUFJLEVBQUMsZ0JBQWdCLEVBQUMsa0JBQWMsR0FBRTs7QUFBRCxBQUFBLGlCQUFpQixBQUFBLGlCQUFpQixDQUFDLGNBQWMsRUFBQyxpQkFBaUIsQUFBQSxpQkFBaUIsQ0FBQyxjQUFjLEVBQUMsZUFBZSxBQUFBLGlCQUFpQixDQUFDLGNBQWMsQ0FBQSxFQUFDLG1CQUFtQixFQUFDLFlBQVksR0FBRTs7QUFBRCxBQUFBLGlCQUFpQixBQUFBLGlCQUFpQixDQUFDLGdCQUFnQixFQUFDLGlCQUFpQixBQUFBLGlCQUFpQixDQUFDLGdCQUFnQixFQUFDLGVBQWUsQUFBQSxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQSxFQUFDLG1CQUFtQixFQUFDLFlBQVksR0FBRTs7QUFBRCxBQUFBLGlCQUFpQixBQUFBLGlCQUFpQixDQUFDLGdCQUFnQixFQUFDLGlCQUFpQixBQUFBLGlCQUFpQixDQUFDLGdCQUFnQixFQUFDLGVBQWUsQUFBQSxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQSxFQUFDLG1CQUFtQixFQUFDLGFBQWEsR0FBRTs7QUFBRCxBQUFBLGlCQUFpQixBQUFBLGlCQUFpQixDQUFDLGlCQUFpQixFQUFDLGlCQUFpQixBQUFBLGlCQUFpQixDQUFDLGlCQUFpQixFQUFDLGVBQWUsQUFBQSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQSxFQUFDLG1CQUFtQixFQUFDLGFBQWEsR0FBRTs7QUFBRCxBQUFBLGlCQUFpQixBQUFBLGlCQUFpQixDQUFDLGlCQUFpQixFQUFDLFlBQVksQUFB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 */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuY3NzIiwic291cmNlcyI6WyJ0aGVtZS5zY3NzIiwiY29uZmlndXJhdGlvbnMvX3Jlc2V0LnNjc3MiLCJjb25maWd1cmF0aW9ucy9fZm9udHMuc2NzcyIsImNvbmZpZ3VyYXRpb25zL192YXJpYWJsZXMuc2NzcyIsImNvbmZpZ3VyYXRpb25zL19taXhpbnMuc2NzcyIsInRoZW1lL190eXBvZ3JhcGh5LnNjc3MiLCJ0aGVtZS9fbUN1c3RvbVNjcm9sbGJhci5zY3NzIiwiY29uZmlndXJhdGlvbnMvX2FuaW1hdGlvbi5zY3NzIiwidGhlbWUvYWxsLnNjc3MiLCJ0aGVtZS9faGVhZGVyLnNjc3MiLCJ0aGVtZS9faG9tZS5zY3NzIiwidGhlbWUvX2Jsb2cuc2NzcyIsInRoZW1lL2l0ZW0uc2NzcyIsInRoZW1lL21vYmlsZS5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgJ2NvbmZpZ3VyYXRpb25zL3Jlc2V0JztcbkBpbXBvcnQgJ2NvbmZpZ3VyYXRpb25zL2ZvbnRzJztcbkBpbXBvcnQgJ2NvbmZpZ3VyYXRpb25zL3ZhcmlhYmxlcyc7XG5cbkBpbXBvcnQgJ2NvbmZpZ3VyYXRpb25zL21peGlucyc7XG5AaW1wb3J0ICd0aGVtZS90eXBvZ3JhcGh5JztcblxuQGltcG9ydCAndGhlbWUvbUN1c3RvbVNjcm9sbGJhcic7XG5AaW1wb3J0ICdjb25maWd1cmF0aW9ucy9hbmltYXRpb24nO1xuXG5AaW1wb3J0ICd0aGVtZS9hbGwnO1xuQGltcG9ydCAndGhlbWUvaGVhZGVyJztcbkBpbXBvcnQgJ3RoZW1lL2hvbWUnO1xuQGltcG9ydCAndGhlbWUvYmxvZyc7XG5AaW1wb3J0ICd0aGVtZS9pdGVtJztcbkBpbXBvcnQgJ3RoZW1lL21vYmlsZSc7XG4vLyBAaW1wb3J0ICd0aGVtZS9mb290ZXInO1xuIiwiKntcbiAgLXdlYmtpdC1ib3gtc2l6aW5nIDogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nIDogYm9yZGVyLWJveDtcbn1cbi8qISBub3JtYWxpemUuY3NzIHY4LjAuMSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cblxuLyogRG9jdW1lbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgbGluZSBoZWlnaHQgaW4gYWxsIGJyb3dzZXJzLlxuICogMi4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpbiBpT1MuXG4gKi9cblxuaHRtbCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4xNTsgLyogMSAqL1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDIgKi9cbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLyogU2VjdGlvbnNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBtYXJnaW4gaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBgbWFpbmAgZWxlbWVudCBjb25zaXN0ZW50bHkgaW4gSUUuXG4gKi9cblxubWFpbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIGZvbnQgc2l6ZSBhbmQgbWFyZ2luIG9uIGBoMWAgZWxlbWVudHMgd2l0aGluIGBzZWN0aW9uYCBhbmRcbiAqIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG4gKi9cblxuaDEge1xuICBmb250LXNpemU6IDNlbTtcbiAgbWFyZ2luOjA7XG59XG5cbmgxLGgyLGgzLGg0LGg1LHAsZW0sc3Ryb25nLHVsLGxpLGF7XG4gIG1hcmdpbjowO1xuICBwYWRkaW5nOjA7XG59XG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3guXG4gKiAyLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlIGFuZCBJRS5cbiAqL1xuXG5ociB7XG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8qIDEgKi9cbiAgaGVpZ2h0OiAwOyAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlOyAvKiAyICovXG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5wcmUge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IC8qIDEgKi9cbiAgZm9udC1zaXplOiAxZW07IC8qIDIgKi9cbn1cblxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgb24gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuICovXG51bHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbnVsLGxpe1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IGJsYWNrO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi8qKlxuICogMS4gUmVtb3ZlIHRoZSBib3R0b20gYm9yZGVyIGluIENocm9tZSA1Ny1cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG4gKi9cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lOyAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKiAyICovXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5jb2RlLFxua2JkLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8qKlxuICogUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gKiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuICovXG5cbmltZyB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbn1cblxuaWZyYW1le1xuICBib3JkZXI6IG5vbmU7XG59XG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIFJlbW92ZSB0aGUgbWFyZ2luIGluIEZpcmVmb3ggYW5kIFNhZmFyaS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250LWZhbWlseTogaW5oZXJpdDsgLyogMSAqL1xuICBmb250LXNpemU6IDEwMCU7IC8qIDEgKi9cbiAgbGluZS1oZWlnaHQ6IDEuMTU7IC8qIDEgKi9cbiAgbWFyZ2luOiAwOyAvKiAyICovXG59XG5cbi8qKlxuICogU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKiAxLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLlxuICovXG5cbmJ1dHRvbixcbmlucHV0IHsgLyogMSAqL1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEVkZ2UsIEZpcmVmb3gsIGFuZCBJRS5cbiAqIDEuIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b24sXG5zZWxlY3QgeyAvKiAxICovXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKi9cblxuYnV0dG9uLFxuW3R5cGU9XCJidXR0b25cIl0sXG5bdHlwZT1cInJlc2V0XCJdLFxuW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwic3VibWl0XCJdOjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKipcbiAqIFJlc3RvcmUgdGhlIGZvY3VzIHN0eWxlcyB1bnNldCBieSB0aGUgcHJldmlvdXMgcnVsZS5cbiAqL1xuXG5idXR0b246LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZyB7XG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBwYWRkaW5nIGluIEZpcmVmb3guXG4gKi9cblxuZmllbGRzZXQge1xuICBwYWRkaW5nOiAwLjM1ZW0gMC43NWVtIDAuNjI1ZW07XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cbiAqIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXRcbiAqICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbmxlZ2VuZCB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIGNvbG9yOiBpbmhlcml0OyAvKiAyICovXG4gIGRpc3BsYXk6IHRhYmxlOyAvKiAxICovXG4gIG1heC13aWR0aDogMTAwJTsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAzICovXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7IC8qIDEgKi9cbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgdmVydGljYWwgYWxpZ25tZW50IGluIENocm9tZSwgRmlyZWZveCwgYW5kIE9wZXJhLlxuICovXG5cbnByb2dyZXNzIHtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgMTArLlxuICovXG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAuXG4gKi9cblxuW3R5cGU9XCJjaGVja2JveFwiXSxcblt0eXBlPVwicmFkaW9cIl0ge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAyICovXG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuICovXG5cblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgb2RkIGFwcGVhcmFuY2UgaW4gQ2hyb21lIGFuZCBTYWZhcmkuXG4gKiAyLiBDb3JyZWN0IHRoZSBvdXRsaW5lIHN0eWxlIGluIFNhZmFyaS5cbiAqL1xuXG5bdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvKiAxICovXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBwYWRkaW5nIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIG1hY09TLlxuICovXG5cblt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKiAyLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBTYWZhcmkuXG4gKi9cblxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAxICovXG4gIGZvbnQ6IGluaGVyaXQ7IC8qIDIgKi9cbn1cblxuLyogSW50ZXJhY3RpdmVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSAxMCssIGFuZCBGaXJlZm94LlxuICovXG5cbmRldGFpbHMge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLypcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xufVxuXG4vKiBNaXNjXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDEwKy5cbiAqL1xuXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAuXG4gKi9cblxuW2hpZGRlbl0ge1xuICBkaXNwbGF5OiBub25lO1xufVxuIiwiLy8gRm9udCBGYW1pbHlcbiRmb250LWZhbWlseS1kZWZhdWx0OiAgXHRcdFx0XCJSYWxld2F5XCIsIFwiSGVsdmV0aWNhXCIsIFwiVGFob21hXCIsIFwiR2VuZXZhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1oZWFkZXI6ICBcdFx0XHRcIk1vbnRzZXJyYXRcIiwgXCJIZWx2ZXRpY2FcIiwgXCJUYWhvbWFcIiwgXCJHZW5ldmFcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LW1vbm86IFx0XHRcdFx0XCJJbmNvbnNvbGF0YVwiLCBtb25vc3BhY2U7XG4kZm9udC1mYW1pbHktc2VyaWY6XHRcdFx0XHRcIkdlb3JnaWFcIiwgXCJUaW1lc1wiLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZjtcbi8vIEBmb250LWZhY2VcblxuJHR5cG86IFwiU2VjdWVsYVwiO1xuJGNhdGVnb3J5OiBcInNhbnMtc2VyaWZcIjtcbi8vIHNlY3VlbGEgcmVndWxhclxuXG4kZmlsZTogXCJTZWN1ZWxhLVJlZ3VsYXJcIjtcbiRSZWd1bGFyOiBcIlJlZ3VsYXJcIjtcbkBtaXhpbiBmb250LWZhY2UoJFJlZ3VsYXIsICRmaWxlLCAkdHlwbywgJGNhdGVnb3J5OlwiXCIpIHtcbiAgICAkZmlsZXBhdGg6IFwiLi4vZm9udHMvXCIgKyAkdHlwbyArIFwiL1wiICsgJGZpbGU7XG4gICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIiN7JFJlZ3VsYXJ9XCI7XG4gICAgICAgIHNyYzogdXJsKCRmaWxlcGF0aCArIFwiLmVvdFwiKTtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90PyNpZWZpeFwiKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi53b2ZmXCIpIGZvcm1hdCgnd29mZicpLFxuICAgICAgICAgICAgICB1cmwoJGZpbGVwYXRoICsgXCIudHRmXCIpICBmb3JtYXQoJ3RydWV0eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi5zdmcjXCIgKyAkUmVndWxhciArIFwiXCIpIGZvcm1hdCgnc3ZnJyk7XG4gICAgfVxuXG4gICAgJSN7JFJlZ3VsYXJ9IHtcbiAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgQGlmICRjYXRlZ29yeSAhPSBcIlwiIHtcbiAgICAgICAgICAgICAgICBmYW1pbHk6IFwiI3skUmVndWxhcn1cIiwgI3skY2F0ZWdvcnl9O1xuICAgICAgICAgICAgICAgIHdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRSZWd1bGFyfVwiO1xuICAgICAgICAgICAgICAgIHdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBzZWN1ZWxhIG1lZGl1bVxuJGZpbGUyOiBcIlNlY3VlbGEtTWVkaXVtXCI7XG4kbWVkaXVtOiBcIm1lZGl1bVwiO1xuQG1peGluIGZvbnQtZmFjZSgkbWVkaXVtLCAkZmlsZTIsICR0eXBvLCAkY2F0ZWdvcnk6XCJcIikge1xuICAgICRmaWxlcGF0aDogXCIuLi9mb250cy9cIiArICR0eXBvICsgXCIvXCIgKyAkZmlsZTI7XG4gICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIiN7JG1lZGl1bX1cIjtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90XCIpO1xuICAgICAgICBzcmM6IHVybCgkZmlsZXBhdGggKyBcIi5lb3Q/I2llZml4XCIpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICAgICAgICAgdXJsKCRmaWxlcGF0aCArIFwiLndvZmZcIikgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi50dGZcIikgIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgICAgICAgICAgICAgdXJsKCRmaWxlcGF0aCArIFwiLnN2ZyNcIiArICRtZWRpdW0gKyBcIlwiKSBmb3JtYXQoJ3N2ZycpO1xuICAgIH1cblxuICAgICUjeyRtZWRpdW19IHtcbiAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgQGlmICRjYXRlZ29yeSAhPSBcIlwiIHtcbiAgICAgICAgICAgICAgICBmYW1pbHk6IFwiI3skbWVkaXVtfVwiLCAjeyRjYXRlZ29yeX07XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFtaWx5OiBcIiN7JG1lZGl1bX1cIjtcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG4vLyBzZWN1ZWxhIGJvbGRcbiRmaWxlMzogXCJTZWN1ZWxhLUJvbGRcIjtcbiRib2xkOiBcImJvbGRcIjtcbkBtaXhpbiBmb250LWZhY2UoJGJvbGQsICRmaWxlMywgJHR5cG8sICRjYXRlZ29yeTpcIlwiKSB7XG4gICAgJGZpbGVwYXRoOiBcIi4uL2ZvbnRzL1wiICsgJHR5cG8gKyBcIi9cIiArICRmaWxlMztcbiAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiI3skYm9sZH1cIjtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90XCIpO1xuICAgICAgICBzcmM6IHVybCgkZmlsZXBhdGggKyBcIi5lb3Q/I2llZml4XCIpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICAgICAgICAgdXJsKCRmaWxlcGF0aCArIFwiLndvZmZcIikgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi50dGZcIikgIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgICAgICAgICAgICAgdXJsKCRmaWxlcGF0aCArIFwiLnN2ZyNcIiArICRib2xkICsgXCJcIikgZm9ybWF0KCdzdmcnKTtcbiAgICB9XG5cbiAgICAlI3skYm9sZH0ge1xuICAgICAgICBmb250OiB7XG4gICAgICAgICAgICBAaWYgJGNhdGVnb3J5ICE9IFwiXCIge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRib2xkfVwiLCAjeyRjYXRlZ29yeX07XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFtaWx5OiBcIiN7JGJvbGR9XCI7XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLy8gc2VjdWVsYSBpdGFsaWNcbiRmaWxlNDogXCJTZWN1ZWxhLUl0YWxpY1wiO1xuJGl0YWxpYzogXCJpdGFsaWNcIjtcbkBtaXhpbiBmb250LWZhY2UoJGl0YWxpYywgJGZpbGU0LCAkdHlwbywgJGNhdGVnb3J5OlwiXCIpIHtcbiAgICAkZmlsZXBhdGg6IFwiLi4vZm9udHMvXCIgKyAkdHlwbyArIFwiL1wiICsgJGZpbGU0O1xuICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCIjeyRpdGFsaWN9XCI7XG4gICAgICAgIHNyYzogdXJsKCRmaWxlcGF0aCArIFwiLmVvdFwiKTtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90PyNpZWZpeFwiKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi53b2ZmXCIpIGZvcm1hdCgnd29mZicpLFxuICAgICAgICAgICAgICB1cmwoJGZpbGVwYXRoICsgXCIudHRmXCIpICBmb3JtYXQoJ3RydWV0eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi5zdmcjXCIgKyAkaXRhbGljICsgXCJcIikgZm9ybWF0KCdzdmcnKTtcbiAgICB9XG5cbiAgICAlI3skaXRhbGljfSB7XG4gICAgICAgIGZvbnQ6IHtcbiAgICAgICAgICAgIEBpZiAkY2F0ZWdvcnkgIT0gXCJcIiB7XG4gICAgICAgICAgICAgICAgZmFtaWx5OiBcIiN7JGl0YWxpY31cIiwgI3skY2F0ZWdvcnl9O1xuICAgICAgICAgICAgICAgIHdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRpdGFsaWN9XCI7XG4gICAgICAgICAgICAgICAgd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLy8gc2VjdWVsYSBsaWdodFxuJGZpbGU1OiBcIlNlY3VlbGEtTGlnaHRcIjtcbiRsaWdodDogXCJsaWdodFwiO1xuQG1peGluIGZvbnQtZmFjZSgkbGlnaHQsICRmaWxlNSwgJHR5cG8sICRjYXRlZ29yeTpcIlwiKSB7XG4gICAgJGZpbGVwYXRoOiBcIi4uL2ZvbnRzL1wiICsgJHR5cG8gKyBcIi9cIiArICRmaWxlNTtcbiAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiI3skbGlnaHR9XCI7XG4gICAgICAgIHNyYzogdXJsKCRmaWxlcGF0aCArIFwiLmVvdFwiKTtcbiAgICAgICAgc3JjOiB1cmwoJGZpbGVwYXRoICsgXCIuZW90PyNpZWZpeFwiKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi53b2ZmXCIpIGZvcm1hdCgnd29mZicpLFxuICAgICAgICAgICAgICB1cmwoJGZpbGVwYXRoICsgXCIudHRmXCIpICBmb3JtYXQoJ3RydWV0eXBlJyksXG4gICAgICAgICAgICAgIHVybCgkZmlsZXBhdGggKyBcIi5zdmcjXCIgKyAkbGlnaHQgKyBcIlwiKSBmb3JtYXQoJ3N2ZycpO1xuICAgIH1cblxuICAgICUjeyRsaWdodH0ge1xuICAgICAgICBmb250OiB7XG4gICAgICAgICAgICBAaWYgJGNhdGVnb3J5ICE9IFwiXCIge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRsaWdodH1cIiwgI3skY2F0ZWdvcnl9O1xuICAgICAgICAgICAgICAgIHdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhbWlseTogXCIjeyRsaWdodH1cIjtcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIGZvbnRzXG5AaW5jbHVkZSBmb250LWZhY2UoJFJlZ3VsYXIsICRmaWxlLCAkdHlwbywgJGNhdGVnb3J5KTsvLzFcbkBpbmNsdWRlIGZvbnQtZmFjZSgkbWVkaXVtLCAkZmlsZTIsICR0eXBvLCAkY2F0ZWdvcnkpOy8vMVxuQGluY2x1ZGUgZm9udC1mYWNlKCRib2xkLCAkZmlsZTMsICR0eXBvLCAkY2F0ZWdvcnkpOy8vMVxuQGluY2x1ZGUgZm9udC1mYWNlKCRpdGFsaWMsICRmaWxlNCwgJHR5cG8sICRjYXRlZ29yeSk7Ly8xXG5AaW5jbHVkZSBmb250LWZhY2UoJGxpZ2h0LCAkZmlsZTUsICR0eXBvLCAkY2F0ZWdvcnkpOy8vMVxuXG4vLyBmb250LXNpemVcbiRmaDE6IDEydnc7XG4kZmgyOiA0LjV2dztcbiRmaDItaTogMXJlbTtcbiRmaDM6IDFyZW07XG4kZmg1OiAwLjhyZW07XG4kZnA6IDAuOXJlbTtcbiRmczogMC44cmVtO1xuJGZzLWk6IDFyZW07XG4kbWluLWgxOiAzcmVtO1xuXG4vLyBpbnRlcmxpbmVcblxuLy9pbnRlcmxldHRyZVxuJGxldHRlckkxOiAwLjFyZW07XG5cbi8vIGNvbG9yXG4kYmx1ZTogIzBmMjY1YztcbiRyZWQ6ICM4ZDI4MTVmZjtcbiRncmV5OiAjOTk5OTk5O1xuIiwiIiwiaDEsIGgye1xuICBmb250LWZhbWlseTogJG1lZGl1bTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxuaDJ7XG4gIGZvbnQtc2l6ZTogJGZoMjtcbn1cblxuaDN7XG4gIGZvbnQtZmFtaWx5OiAkbWVkaXVtO1xuICBmb250LXNpemU6ICRmaDM7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG5cbmg1e1xuICBmb250LXNpemU6ICRmaDU7XG4gIGZvbnQtZmFtaWx5OiAkYm9sZDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxucHtcbiAgZm9udC1mYW1pbHk6ICRSZWd1bGFyO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6ICRmcDtcbiAgbGluZS1oZWlnaHQ6IDEuMXJlbTtcbn1cblxudGltZXtcbiAgZm9udC1mYW1pbHk6ICRpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG5cbi5ibG9ne1xuICBoMntcbiAgICBsaW5lLWhlaWdodDogNnZ3O1xuICB9XG4gICYuZG93bntcbiAgICBoMXtcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiByZWR1Y0ggMXMgMC45cyBlYXNlIGZvcndhcmRzO1xuICAgICAgICAgICAgICBhbmltYXRpb246IHJlZHVjSCAxcyAwLjlzIGVhc2UgZm9yd2FyZHM7XG4gICAgfVxuICB9XG59XG5cbi5pdGVte1xuICBoMntcbiAgICBmb250LXNpemU6ICRmaDItaTtcbiAgfVxuICAucHJldi1uZXh0e1xuICAgIGF7XG4gICAgICAudGl0bGV7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkYm9sZDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgICB9XG4gICAgICAudGFncywgLmJsb2ctZGF0ZSB0aW1le1xuICAgICAgICBmb250LWZhbWlseTogJGl0YWxpYztcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgICB9XG5cbiAgICB9XG4gIH1cbn1cblxuLmNhdGVnb3J5e1xuICBhe1xuICAgIGZvbnQtZmFtaWx5OiAkaXRhbGljO1xuICAgIGZvbnQtc2l6ZTogJGZzLWk7XG4gIH1cbn1cblxudGltZXtcbiAgZm9udC1zaXplOiAkZnMtaTtcbn1cblxuLnRhZ3N7XG4gIGZvbnQtZmFtaWx5OiAkYm9sZDtcbiAgZm9udC1zaXplOiAwLjdyZW07XG59XG5cbiNwYWdlLXdyYXBwZXIuYmxvZ3tcbiAgLndvcmtzLW1lYSwgI2l0ZW1ze1xuICAgIC5jYXRlZ29yeXtcbiAgICAgIGF7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkaXRhbGljO1xuICAgICAgICBmb250LXNpemU6ICRmcztcbiAgICAgIH1cbiAgICB9XG4gICAgdGltZXtcbiAgICAgIGZvbnQtc2l6ZTogJGZzO1xuICAgIH1cbiAgICAuY2FyZC1mb290ZXJ7XG4gICAgICBsaW5lLWhlaWdodDogMC41cmVtO1xuICAgICAgLnRhZ3N7XG4gICAgICAgIGF7XG4gICAgICAgICAgY29sb3I6ICRncmV5IWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuI3BhZ2Utd3JhcHBlci5pdGVte1xuICAjaXRlbXN7XG4gICAgLnRpdGxle1xuICAgICAgaDJ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkYm9sZDtcbiAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICB9XG4gICAgICBhLCB0aW1le1xuICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgIH1cbiAgICB9XG4gICAgLnRhZ3N7XG4gICAgICBzcGFue1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgYXtcbiAgICAgICAgICBjb2xvcjogJGdyZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLmNhdC1saXN0e1xuICBmb250LWZhbWlseTogJGxpZ2h0O1xuICBmb250LXNpemU6IDFyZW07XG59XG4iLCIubUN1c3RvbVNjcm9sbGJhcnstbXMtdG91Y2gtYWN0aW9uOnBpbmNoLXpvb207dG91Y2gtYWN0aW9uOnBpbmNoLXpvb219Lm1DdXN0b21TY3JvbGxiYXIubUNTX25vX3Njcm9sbGJhciwubUN1c3RvbVNjcm9sbGJhci5tQ1NfdG91Y2hfYWN0aW9uey1tcy10b3VjaC1hY3Rpb246YXV0bzt0b3VjaC1hY3Rpb246YXV0b30ubUN1c3RvbVNjcm9sbEJveHtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjEwMCU7b3V0bGluZTowO2RpcmVjdGlvbjpsdHJ9Lm1DU0JfY29udGFpbmVye292ZXJmbG93OmhpZGRlbjt3aWR0aDphdXRvO2hlaWdodDphdXRvfS5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJ7bWFyZ2luLXJpZ2h0OjMwcHh9Lm1DU0JfY29udGFpbmVyLm1DU19ub19zY3JvbGxiYXJfeS5tQ1NfeV9oaWRkZW57bWFyZ2luLXJpZ2h0OjB9Lm1DUy1kaXItcnRsPi5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MzBweH0ubUNTLWRpci1ydGw+Lm1DU0JfaW5zaWRlPi5tQ1NCX2NvbnRhaW5lci5tQ1Nfbm9fc2Nyb2xsYmFyX3kubUNTX3lfaGlkZGVue21hcmdpbi1sZWZ0OjB9Lm1DU0Jfc2Nyb2xsVG9vbHN7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTZweDtoZWlnaHQ6YXV0bztsZWZ0OmF1dG87dG9wOjA7cmlnaHQ6MDtib3R0b206MDtvcGFjaXR5Oi43NTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTc1KVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTc1KVwifS5tQ1NCX291dHNpZGUrLm1DU0Jfc2Nyb2xsVG9vbHN7cmlnaHQ6LTI2cHh9Lm1DUy1kaXItcnRsPi5tQ1NCX2luc2lkZT4ubUNTQl9zY3JvbGxUb29scywubUNTLWRpci1ydGw+Lm1DU0Jfb3V0c2lkZSsubUNTQl9zY3JvbGxUb29sc3tyaWdodDphdXRvO2xlZnQ6MH0ubUNTLWRpci1ydGw+Lm1DU0Jfb3V0c2lkZSsubUNTQl9zY3JvbGxUb29sc3tsZWZ0Oi0yNnB4fS5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJDb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7aGVpZ2h0OmF1dG99Lm1DU0Jfc2Nyb2xsVG9vbHMgYSsubUNTQl9kcmFnZ2VyQ29udGFpbmVye21hcmdpbjoyMHB4IDB9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7d2lkdGg6MnB4O2hlaWdodDoxMDAlO21hcmdpbjowIGF1dG87LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE2cHg7LW1vei1ib3JkZXItcmFkaXVzOjE2cHg7Ym9yZGVyLXJhZGl1czoxNnB4fS5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJ7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MzBweDt6LWluZGV4OjF9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDo0cHg7aGVpZ2h0OjEwMCU7bWFyZ2luOjAgYXV0bzstd2Via2l0LWJvcmRlci1yYWRpdXM6MTZweDstbW96LWJvcmRlci1yYWRpdXM6MTZweDtib3JkZXItcmFkaXVzOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCAubUNTQl9kcmFnZ2VyX2JhciwubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye3dpZHRoOjEycHh9Lm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCsubUNTQl9kcmFnZ2VyUmFpbCwubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDo4cHh9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93biwubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoyMHB4O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbjowIGF1dG87Y3Vyc29yOnBvaW50ZXJ9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntib3R0b206MH0ubUNTQl9ob3Jpem9udGFsLm1DU0JfaW5zaWRlPi5tQ1NCX2NvbnRhaW5lcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tYm90dG9tOjMwcHh9Lm1DU0JfaG9yaXpvbnRhbC5tQ1NCX291dHNpZGU+Lm1DU0JfY29udGFpbmVye21pbi1oZWlnaHQ6MTAwJX0ubUNTQl9ob3Jpem9udGFsPi5tQ1NCX2NvbnRhaW5lci5tQ1Nfbm9fc2Nyb2xsYmFyX3gubUNTX3hfaGlkZGVue21hcmdpbi1ib3R0b206MH0ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWx7d2lkdGg6YXV0bztoZWlnaHQ6MTZweDt0b3A6YXV0bztyaWdodDowO2JvdHRvbTowO2xlZnQ6MH0ubUN1c3RvbVNjcm9sbEJveCsubUNTQl9zY3JvbGxUb29scysubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwsLm1DdXN0b21TY3JvbGxCb3grLm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFse2JvdHRvbTotMjZweH0ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgYSsubUNTQl9kcmFnZ2VyQ29udGFpbmVye21hcmdpbjowIDIwcHh9Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjJweDttYXJnaW46N3B4IDB9Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJ7d2lkdGg6MzBweDtoZWlnaHQ6MTAwJTtsZWZ0OjB9Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4O21hcmdpbjo2cHggYXV0b30ubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2hlaWdodDoxMnB4O21hcmdpbjoycHggYXV0b30ubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQrLm1DU0JfZHJhZ2dlclJhaWwsLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHtoZWlnaHQ6OHB4O21hcmdpbjo0cHggMH0ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfYnV0dG9uTGVmdCwubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfYnV0dG9uUmlnaHR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyMHB4O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjttYXJnaW46MCBhdXRvO2N1cnNvcjpwb2ludGVyfS5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9idXR0b25MZWZ0e2xlZnQ6MH0ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfYnV0dG9uUmlnaHR7cmlnaHQ6MH0ubUNTQl9jb250YWluZXJfd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO292ZXJmbG93OmhpZGRlbjt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDttYXJnaW4tcmlnaHQ6MzBweDttYXJnaW4tYm90dG9tOjMwcHh9Lm1DU0JfY29udGFpbmVyX3dyYXBwZXI+Lm1DU0JfY29udGFpbmVye3BhZGRpbmctcmlnaHQ6MzBweDtwYWRkaW5nLWJvdHRvbTozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubUNTQl92ZXJ0aWNhbF9ob3Jpem9udGFsPi5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWx7Ym90dG9tOjIwcHh9Lm1DU0JfdmVydGljYWxfaG9yaXpvbnRhbD4ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWx7cmlnaHQ6MjBweH0ubUNTQl9jb250YWluZXJfd3JhcHBlci5tQ1Nfbm9fc2Nyb2xsYmFyX3gubUNTX3hfaGlkZGVuKy5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWx7Ym90dG9tOjB9Lm1DUy1kaXItcnRsPi5tQ3VzdG9tU2Nyb2xsQm94Lm1DU0JfdmVydGljYWxfaG9yaXpvbnRhbC5tQ1NCX2luc2lkZT4ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwsLm1DU0JfY29udGFpbmVyX3dyYXBwZXIubUNTX25vX3Njcm9sbGJhcl95Lm1DU195X2hpZGRlbisubUNTQl9zY3JvbGxUb29sc34ubUNTQl9zY3JvbGxUb29scy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWx7cmlnaHQ6MH0ubUNTLWRpci1ydGw+Lm1DdXN0b21TY3JvbGxCb3gubUNTQl92ZXJ0aWNhbF9ob3Jpem9udGFsLm1DU0JfaW5zaWRlPi5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbHtsZWZ0OjIwcHh9Lm1DUy1kaXItcnRsPi5tQ3VzdG9tU2Nyb2xsQm94Lm1DU0JfdmVydGljYWxfaG9yaXpvbnRhbC5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJfd3JhcHBlci5tQ1Nfbm9fc2Nyb2xsYmFyX3kubUNTX3lfaGlkZGVuKy5tQ1NCX3Njcm9sbFRvb2xzfi5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbHtsZWZ0OjB9Lm1DUy1kaXItcnRsPi5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJfd3JhcHBlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDozMHB4fS5tQ1NCX2NvbnRhaW5lcl93cmFwcGVyLm1DU19ub19zY3JvbGxiYXJfeS5tQ1NfeV9oaWRkZW4+Lm1DU0JfY29udGFpbmVye3BhZGRpbmctcmlnaHQ6MH0ubUNTQl9jb250YWluZXJfd3JhcHBlci5tQ1Nfbm9fc2Nyb2xsYmFyX3gubUNTX3hfaGlkZGVuPi5tQ1NCX2NvbnRhaW5lcntwYWRkaW5nLWJvdHRvbTowfS5tQ3VzdG9tU2Nyb2xsQm94Lm1DU0JfdmVydGljYWxfaG9yaXpvbnRhbC5tQ1NCX2luc2lkZT4ubUNTQl9jb250YWluZXJfd3JhcHBlci5tQ1Nfbm9fc2Nyb2xsYmFyX3kubUNTX3lfaGlkZGVue21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9Lm1DdXN0b21TY3JvbGxCb3gubUNTQl92ZXJ0aWNhbF9ob3Jpem9udGFsLm1DU0JfaW5zaWRlPi5tQ1NCX2NvbnRhaW5lcl93cmFwcGVyLm1DU19ub19zY3JvbGxiYXJfeC5tQ1NfeF9oaWRkZW57bWFyZ2luLWJvdHRvbTowfS5tQ1NCX3Njcm9sbFRvb2xzLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd24sLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdCwubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodCwubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcCwubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyey13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dDstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZS1pbi1vdXQsYmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZS1pbi1vdXQ7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjJzIGVhc2UtaW4tb3V0fS5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlcl9iYXJ7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLW91dCAuMnMsaGVpZ2h0IC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLWxlZnQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tcmlnaHQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tdG9wIC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLWJvdHRvbSAuMnMgZWFzZS1vdXQgLjJzLG9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjJzIGVhc2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjp3aWR0aCAuMnMgZWFzZS1vdXQgLjJzLGhlaWdodCAuMnMgZWFzZS1vdXQgLjJzLG1hcmdpbi1sZWZ0IC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLXJpZ2h0IC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLXRvcCAuMnMgZWFzZS1vdXQgLjJzLG1hcmdpbi1ib3R0b20gLjJzIGVhc2Utb3V0IC4ycyxvcGFjaXR5IC4ycyBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLW91dCAuMnMsaGVpZ2h0IC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLWxlZnQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tcmlnaHQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tdG9wIC4ycyBlYXNlLW91dCAuMnMsbWFyZ2luLWJvdHRvbSAuMnMgZWFzZS1vdXQgLjJzLG9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2Utb3V0IC4ycyxoZWlnaHQgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tbGVmdCAuMnMgZWFzZS1vdXQgLjJzLG1hcmdpbi1yaWdodCAuMnMgZWFzZS1vdXQgLjJzLG1hcmdpbi10b3AgLjJzIGVhc2Utb3V0IC4ycyxtYXJnaW4tYm90dG9tIC4ycyBlYXNlLW91dCAuMnMsb3BhY2l0eSAuMnMgZWFzZS1pbi1vdXQsYmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZS1pbi1vdXR9Lm1DUy1hdXRvSGlkZT4ubUN1c3RvbVNjcm9sbEJveD4ubUNTQl9zY3JvbGxUb29scywubUNTLWF1dG9IaWRlPi5tQ3VzdG9tU2Nyb2xsQm94fi5tQ1NCX3Njcm9sbFRvb2xze29wYWNpdHk6MDtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTApXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9MClcIn0ubUNTLWF1dG9IaWRlOmhvdmVyPi5tQ3VzdG9tU2Nyb2xsQm94Pi5tQ1NCX3Njcm9sbFRvb2xzLC5tQ1MtYXV0b0hpZGU6aG92ZXI+Lm1DdXN0b21TY3JvbGxCb3h+Lm1DU0Jfc2Nyb2xsVG9vbHMsLm1DdXN0b21TY3JvbGxCb3g6aG92ZXI+Lm1DU0Jfc2Nyb2xsVG9vbHMsLm1DdXN0b21TY3JvbGxCb3g6aG92ZXJ+Lm1DU0Jfc2Nyb2xsVG9vbHMsLm1DdXN0b21TY3JvbGxiYXI+Lm1DdXN0b21TY3JvbGxCb3g+Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19vbkRyYWcsLm1DdXN0b21TY3JvbGxiYXI+Lm1DdXN0b21TY3JvbGxCb3h+Lm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19vbkRyYWd7b3BhY2l0eToxO2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9MTAwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTEwMClcIn0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40KTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTQwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTQwKVwifS5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNzUpO2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9NzUpXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9NzUpXCJ9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44NSk7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT04NSlcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT04NSlcIn0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOSk7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT05MClcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT05MClcIn0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3duLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnQsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHQsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1pbWFnZTp1cmwobUNTQl9idXR0b25zLnBuZyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O29wYWNpdHk6LjQ7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT00MClcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT00MClcIn0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246MCAtMjBweH0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MCAtNDBweH0ubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTU2cHh9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bjpob3ZlciwubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0OmhvdmVyLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0OmhvdmVyLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwOmhvdmVye29wYWNpdHk6Ljc1O2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9NzUpXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9NzUpXCJ9Lm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bjphY3RpdmUsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdDphY3RpdmUsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHQ6YWN0aXZlLC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwOmFjdGl2ZXtvcGFjaXR5Oi45O2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9OTApXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9OTApXCJ9Lm1DUy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTUpfS5tQ1MtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpfS5tQ1MtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6aG92ZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44NSl9Lm1DUy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuOSl9Lm1DUy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAwfS5tQ1MtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjBweH0ubUNTLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTQwcHh9Lm1DUy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNTZweH0ubUNTLWRhcmstMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTstd2Via2l0LWJvcmRlci1yYWRpdXM6MXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxcHg7Ym9yZGVyLXJhZGl1czoxcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6NHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjc1KTstd2Via2l0LWJvcmRlci1yYWRpdXM6MXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxcHg7Ym9yZGVyLXJhZGl1czoxcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LTIubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjRweDttYXJnaW46NnB4IGF1dG99Lm1DUy1saWdodC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44NSl9Lm1DUy1saWdodC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjkpfS5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTMycHggMH0ubUNTLWxpZ2h0LTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTIwcHh9Lm1DUy1saWdodC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC00MHB4fS5tQ1MtbGlnaHQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTQwcHggLTU2cHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKTstd2Via2l0LWJvcmRlci1yYWRpdXM6MXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxcHg7Ym9yZGVyLXJhZGl1czoxcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjc1KTstd2Via2l0LWJvcmRlci1yYWRpdXM6MXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxcHg7Ym9yZGVyLXJhZGl1czoxcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmhvdmVyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg1KX0ubUNTLWRhcmstMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWRhcmstMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjkpfS5tQ1MtZGFyay0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggMH0ubUNTLWRhcmstMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTIwcHh9Lm1DUy1kYXJrLTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC00MHB4fS5tQ1MtZGFyay0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTU2cHh9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1saWdodC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7Ym9yZGVyLXJhZGl1czoycHh9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDo2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNzUpOy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDtib3JkZXItcmFkaXVzOjJweH0ubUNTLWRhcmstdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjRweDttYXJnaW46NnB4IDB9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbGlnaHQtdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6MTAwJTtoZWlnaHQ6NnB4O21hcmdpbjo1cHggYXV0b30ubUNTLWxpZ2h0LXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44NSl9Lm1DUy1saWdodC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOSl9Lm1DUy1saWdodC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggMH0ubUNTLWxpZ2h0LXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0yMHB4fS5tQ1MtbGlnaHQtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTIwcHggLTQwcHh9Lm1DUy1saWdodC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTIwcHggLTU2cHh9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSk7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4O2JvcmRlci1yYWRpdXM6MnB4fS5tQ1MtZGFyay10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpOy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDtib3JkZXItcmFkaXVzOjJweH0ubUNTLWRhcmstdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmhvdmVyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg1KX0ubUNTLWRhcmstdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuOSl9Lm1DUy1kYXJrLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAwfS5tQ1MtZGFyay10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMjBweH0ubUNTLWRhcmstdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTEwMHB4IC00MHB4fS5tQ1MtZGFyay10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTEwMHB4IC01NnB4fS5tQ1MtbGlnaHQtdGhpbi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LXRoaW4ubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye3dpZHRoOjJweH0ubUNTLWRhcmstdGhpbi5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1saWdodC10aGluLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDoxMDAlfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbGlnaHQtdGhpbi5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDoxMDAlO2hlaWdodDoycHg7bWFyZ2luOjdweCBhdXRvfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTUpfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC43NSl9Lm1DUy1kYXJrLXRoaW4ubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmhvdmVyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg1KX0ubUNTLWRhcmstdGhpbi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWRhcmstdGhpbi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjkpfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAwfS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0yMHB4fS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC00MHB4fS5tQ1MtZGFyay10aGluLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNTZweH0ubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLC5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLC5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciwubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2Vye2hlaWdodDoxNHB4fS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDoxNHB4O21hcmdpbjowIDFweH0ubUNTLXJvdW5kZWQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyLC5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyLC5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlcnt3aWR0aDoxNHB4fS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRvdHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2hlaWdodDoxNHB4O21hcmdpbjoxcHggMH0ubUNTLXJvdW5kZWQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJDb250YWluZXI6aG92ZXIgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O21hcmdpbjotMXB4IDB9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnX2V4cGFuZGVkKy5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJDb250YWluZXI6aG92ZXIgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCsubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDo0cHh9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyQ29udGFpbmVyOmhvdmVyIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnX2V4cGFuZGVkIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJDb250YWluZXI6aG92ZXIgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O21hcmdpbjowIC0xcHh9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQrLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyQ29udGFpbmVyOmhvdmVyIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCsubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyQ29udGFpbmVyOmhvdmVyIC5tQ1NCX2RyYWdnZXJSYWlse2hlaWdodDo0cHg7bWFyZ2luOjZweCAwfS5tQ1Mtcm91bmRlZC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246MCAtNzJweH0ubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246MCAtOTJweH0ubUNTLXJvdW5kZWQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MCAtMTEycHh9Lm1DUy1yb3VuZGVkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjhweH0ubUNTLXJvdW5kZWQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRvdHMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpfS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTUpfS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44NSl9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhciwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC45KX0ubUNTLXJvdW5kZWQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTcycHh9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTkycHh9Lm1DUy1yb3VuZGVkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTExMnB4fS5tQ1Mtcm91bmRlZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTI4cHh9Lm1DUy1yb3VuZGVkLWRvdHMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwgLm1DU0JfZHJhZ2dlclJhaWx7d2lkdGg6NHB4fS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyfS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQWdBQUFBSUNBWUFBQURFRDc2TEFBQUFORWxFUVZRWVYyTmtJQUFZaVZidy8vOS9ZNkRpTTFBTkpveU1qR2RCYkxnSlFBWC9rVTBES2dETGthUUF2eFc0SEV2UUZ3Q1JjeElKSzFYem5BQUFBQUJKUlU1RXJrSmdnZz09KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteTtvcGFjaXR5Oi4zO2ZpbHRlcjpcImFscGhhKG9wYWNpdHk9MzApXCI7LW1zLWZpbHRlcjpcImFscGhhKG9wYWNpdHk9MzApXCJ9Lm1DUy1yb3VuZGVkLWRvdHMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1yb3VuZGVkLWRvdHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse2hlaWdodDo0cHg7bWFyZ2luOjZweCAwO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tQ1Mtcm91bmRlZC1kb3RzLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNzJweH0ubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtOTJweH0ubUNTLXJvdW5kZWQtZG90cy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjBweCAtMTEycHh9Lm1DUy1yb3VuZGVkLWRvdHMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMHB4IC0xMjhweH0ubUNTLXJvdW5kZWQtZG90cy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQ0FZQUFBREVENzZMQUFBQUxFbEVRVlFZVjJOa0lBQVlTVkZnREZSOEJxckJCRWlmQmJHUlRmaVBaaHBZamlRRkJLM0E2bDZDdmdBQUU5a0dDZDFtdmdFQUFBQUFTVVZPUks1Q1lJST0pfS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC03MnB4fS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTkycHh9Lm1DUy1yb3VuZGVkLWRvdHMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTAwcHggLTExMnB4fS5tQ1Mtcm91bmRlZC1kb3RzLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMDBweCAtMTI4cHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC15O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCxyaWdodCB0b3AsY29sb3Itc3RvcCgwLHJnYmEoMjU1LDI1NSwyNTUsLjUpKSxjb2xvci1zdG9wKDEwMCUscmdiYSgyNTUsMjU1LDI1NSwwKSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotbXMtbGluZWFyLWdyYWRpZW50KGxlZnQscmdiYSgyNTUsMjU1LDI1NSwuNSkgMCxyZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMjU1LDI1NSwyNTUsLjUpIDAscmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKX0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC10aGljay1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCxsZWZ0IGJvdHRvbSxjb2xvci1zdG9wKDAscmdiYSgyNTUsMjU1LDI1NSwuNSkpLGNvbG9yLXN0b3AoMTAwJSxyZ2JhKDI1NSwyNTUsMjU1LDApKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AscmdiYSgyNTUsMjU1LDI1NSwuNSkgMCxyZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotbXMtbGluZWFyLWdyYWRpZW50KHRvcCxyZ2JhKDI1NSwyNTUsMjU1LC41KSAwLHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMjU1LDI1NSwyNTUsLjUpIDAscmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKX0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbCAubUNTQl9kcmFnZ2VyLC5tQ1MtM2QubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbCAubUNTQl9kcmFnZ2Vye2hlaWdodDo3MHB4fS5tQ1MtM2QtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2Vye3dpZHRoOjcwcHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMsLm1DUy0zZC5tQ1NCX3Njcm9sbFRvb2xze29wYWNpdHk6MTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTMwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTMwKVwifS5tQ1MtM2QtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy0zZC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsey13ZWJraXQtYm9yZGVyLXJhZGl1czoxNnB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNnB4O2JvcmRlci1yYWRpdXM6MTZweH0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7d2lkdGg6OHB4O2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDAgMXB4IHJnYmEoMCwwLDAsLjUpLGluc2V0IC0xcHggMCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMil9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiM1NTV9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDo4cHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDoxMDAlO2hlaWdodDo4cHg7bWFyZ2luOjRweCAwO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjUpLGluc2V0IDAgLTFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMil9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6MTAwJTtoZWlnaHQ6OHB4O21hcmdpbjo0cHggYXV0b30ubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNzJweH0ubUNTLTNkLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC05MnB4fS5tQ1MtM2QubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTQwcHggLTExMnB4fS5tQ1MtM2QubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC0xMjhweH0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93Omluc2V0IDFweCAwIDFweCByZ2JhKDAsMCwwLC4xKX0ubUNTLTNkLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjEpfS5tQ1MtM2QtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC03MnB4fS5tQ1MtM2QtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTkycHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTEycHh9Lm1DUy0zZC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTEyOHB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29sc3tvcGFjaXR5OjE7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT0zMClcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT0zMClcIn0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scywubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyQ29udGFpbmVyLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scywubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcnstd2Via2l0LWJvcmRlci1yYWRpdXM6N3B4Oy1tb3otYm9yZGVyLXJhZGl1czo3cHg7Ym9yZGVyLXJhZGl1czo3cHh9Lm1DU0JfaW5zaWRlKy5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLC5tQ1NCX2luc2lkZSsubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWx7cmlnaHQ6MXB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbHtib3gtc2hhZG93Omluc2V0IDFweCAwIDFweCByZ2JhKDAsMCwwLC4xKSxpbnNldCAwIDAgMTRweCByZ2JhKDAsMCwwLC41KX0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFse2JvdHRvbToxcHg7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMSksaW5zZXQgMCAwIDE0cHggcmdiYSgwLDAsMCwuNSl9Lm1DUy0zZC10aGljay1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyLXJhZGl1czo1cHg7Ym94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsLjQpO3dpZHRoOjEycHg7bWFyZ2luOjJweDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6YXV0bzt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MH0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC10aGljay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcntib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuNCk7aGVpZ2h0OjEycHg7d2lkdGg6YXV0b30ubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhciwubUNTLTNkLXRoaWNrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiM1NTV9Lm1DUy0zZC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJDb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDUpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDFweCAxNnB4IHJnYmEoMCwwLDAsLjEpfS5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC03MnB4fS5tQ1MtM2QtdGhpY2subUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTkycHh9Lm1DUy0zZC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDBweCAtMTEycHh9Lm1DUy0zZC10aGljay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTQwcHggLTEyOHB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xze2JveC1zaGFkb3c6aW5zZXQgMCAwIDE0cHggcmdiYSgwLDAsMCwuMil9Lm1DUy0zZC10aGljay1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbHtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4xKSxpbnNldCAwIDAgMTRweCByZ2JhKDAsMCwwLC4yKX0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LC40KSxpbnNldCAtMXB4IDAgMCByZ2JhKDAsMCwwLC4yKX0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjQpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsLjIpfS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy0zZC10aGljay1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6aG92ZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojNzc3fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJDb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDUpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDFweCAxNnB4IHJnYmEoMCwwLDAsLjEpfS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1taW5pbWFsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNzJweH0ubUNTLTNkLXRoaWNrLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC05MnB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTExMnB4fS5tQ1MtM2QtdGhpY2stZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0xMjhweH0ubUNTQl9vdXRzaWRlKy5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwsLm1DU0Jfb3V0c2lkZSsubUNTLW1pbmltYWwubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbHtyaWdodDowO21hcmdpbjoxMnB4IDB9Lm1DdXN0b21TY3JvbGxCb3gubUNTLW1pbmltYWwrLm1DU0Jfc2Nyb2xsVG9vbHMrLm1DU0Jfc2Nyb2xsVG9vbHMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLC5tQ3VzdG9tU2Nyb2xsQm94Lm1DUy1taW5pbWFsKy5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCwubUN1c3RvbVNjcm9sbEJveC5tQ1MtbWluaW1hbC1kYXJrKy5tQ1NCX3Njcm9sbFRvb2xzKy5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCwubUN1c3RvbVNjcm9sbEJveC5tQ1MtbWluaW1hbC1kYXJrKy5tQ1NCX3Njcm9sbFRvb2xzLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbHtib3R0b206MDttYXJnaW46MCAxMnB4fS5tQ1MtZGlyLXJ0bD4ubUNTQl9vdXRzaWRlKy5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwsLm1DUy1kaXItcnRsPi5tQ1NCX291dHNpZGUrLm1DUy1taW5pbWFsLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWx7bGVmdDowO3JpZ2h0OmF1dG99Lm1DUy1taW5pbWFsLWRhcmsubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbCAubUNTQl9kcmFnZ2VyLC5tQ1MtbWluaW1hbC5tQ1NCX3Njcm9sbFRvb2xzX3ZlcnRpY2FsIC5tQ1NCX2RyYWdnZXJ7aGVpZ2h0OjUwcHh9Lm1DUy1taW5pbWFsLWRhcmsubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIsLm1DUy1taW5pbWFsLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2Vye3dpZHRoOjUwcHh9Lm1DUy1taW5pbWFsLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTIwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTIwKVwifS5tQ1MtbWluaW1hbC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLW1pbmltYWwubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTUwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTUwKVwifS5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yKTtmaWx0ZXI6XCJhbHBoYShvcGFjaXR5PTIwKVwiOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTIwKVwifS5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtbWluaW1hbC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNSk7ZmlsdGVyOlwiYWxwaGEob3BhY2l0eT01MClcIjstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT01MClcIn0ubUNTLWRhcmstMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjZweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yKX0ubUNTLWRhcmstMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2Jhcnt3aWR0aDo2cHh9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtbGlnaHQtMy5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjZweDttYXJnaW46NXB4IDB9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnX2V4cGFuZGVkKy5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXJDb250YWluZXI6aG92ZXIgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHNfdmVydGljYWwubUNTQl9zY3JvbGxUb29sc19vbkRyYWdfZXhwYW5kIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZ19leHBhbmRlZCsubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29sc192ZXJ0aWNhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDoxMnB4fS5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnX2V4cGFuZGVkKy5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsLm1DU0Jfc2Nyb2xsVG9vbHNfb25EcmFnX2V4cGFuZCAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWdfZXhwYW5kZWQrLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbC5tQ1NCX3Njcm9sbFRvb2xzX29uRHJhZ19leHBhbmQgLm1DU0JfZHJhZ2dlckNvbnRhaW5lcjpob3ZlciAubUNTQl9kcmFnZ2VyUmFpbHtoZWlnaHQ6MTJweDttYXJnaW46MnB4IDB9Lm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNzJweH0ubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTkycHh9Lm1DUy1saWdodC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC0xMTJweH0ubUNTLWxpZ2h0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC0xMjhweH0ubUNTLWRhcmstMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpfS5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44NSl9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC45KX0ubUNTLWRhcmstMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlse2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTcycHh9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC05MnB4fS5tQ1MtZGFyay0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTEycHh9Lm1DUy1kYXJrLTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTI4cHh9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjIpfS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7d2lkdGg6NnB4O21hcmdpbjozcHggNXB4O3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDphdXRvO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtMi5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7aGVpZ2h0OjZweDttYXJnaW46NXB4IDNweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDphdXRvO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTIubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHNfaG9yaXpvbnRhbCAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29sc19ob3Jpem9udGFsIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1pbnNldC5tQ1NCX3Njcm9sbFRvb2xzX2hvcml6b250YWwgLm1DU0JfZHJhZ2dlclJhaWx7d2lkdGg6MTAwJTtoZWlnaHQ6MTJweDttYXJnaW46MnB4IDB9Lm1DUy1pbnNldC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXAsLm1DUy1pbnNldC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uVXAsLm1DUy1pbnNldC5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTcycHh9Lm1DUy1pbnNldC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93biwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3duLC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25Eb3due2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTkycHh9Lm1DUy1pbnNldC0yLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uTGVmdCwubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0LC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTQwcHggLTExMnB4fS5tQ1MtaW5zZXQtMi5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0LC5tQ1MtaW5zZXQtMy5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblJpZ2h0LC5tQ1MtaW5zZXQubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC0xMjhweH0ubUNTLWluc2V0LTItZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzUpfS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6aG92ZXIgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjpob3ZlciAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44NSl9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6YWN0aXZlIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXIubUNTQl9kcmFnZ2VyX29uRHJhZyAubUNTQl9kcmFnZ2VyX2JhciwubUNTLWluc2V0LWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmFjdGl2ZSAubUNTQl9kcmFnZ2VyX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC45KX0ubUNTLWluc2V0LTItZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXJSYWlsLC5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWwsLm1DUy1pbnNldC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25VcCwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwLC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvblVwe2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC03MnB4fS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93biwubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkRvd24sLm1DUy1pbnNldC1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uRG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtOTJweH0ubUNTLWluc2V0LTItZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnQsLm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25MZWZ0LC5tQ1MtaW5zZXQtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2J1dHRvbkxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTExMnB4fS5tQ1MtaW5zZXQtMi1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfYnV0dG9uUmlnaHQsLm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodCwubUNTLWluc2V0LWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9idXR0b25SaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTI4cHh9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbCwubUNTLWluc2V0LTIubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1DUy1pbnNldC0yLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtib3JkZXItY29sb3I6IzAwMDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMil9Lm1DUy1pbnNldC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlclJhaWx7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNil9Lm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyUmFpbHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjc1KX0ubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyOmhvdmVyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg1KX0ubUNTLWluc2V0LTMubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyLm1DU0JfZHJhZ2dlcl9vbkRyYWcgLm1DU0JfZHJhZ2dlcl9iYXIsLm1DUy1pbnNldC0zLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuOSl9Lm1DUy1pbnNldC0zLWRhcmsubUNTQl9zY3JvbGxUb29scyAubUNTQl9kcmFnZ2VyIC5tQ1NCX2RyYWdnZXJfYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjc1KX0ubUNTLWluc2V0LTMtZGFyay5tQ1NCX3Njcm9sbFRvb2xzIC5tQ1NCX2RyYWdnZXI6aG92ZXIgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuODUpfS5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlci5tQ1NCX2RyYWdnZXJfb25EcmFnIC5tQ1NCX2RyYWdnZXJfYmFyLC5tQ1MtaW5zZXQtMy1kYXJrLm1DU0Jfc2Nyb2xsVG9vbHMgLm1DU0JfZHJhZ2dlcjphY3RpdmUgLm1DU0JfZHJhZ2dlcl9iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOSl9IiwiQC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0aW9uIHtcbiAgZnJvbSB7XG4gICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJvdGF0aW9uIHtcbiAgZnJvbSB7XG4gICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgdHJhbnNsYXRlcmlnaHR7XG4gIDAle1xuICAgIHJpZ2h0OiAtNTBweDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIDMwJXtcbiAgICByaWdodDogMTUwcHg7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgMTAwJXtcbiAgICByaWdodDogMjAwcHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdHJhbnNsYXRlcmlnaHR7XG4gIDAle1xuICAgIHJpZ2h0OiAtNTBweDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIDMwJXtcbiAgICByaWdodDogMTUwcHg7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgMTAwJXtcbiAgICByaWdodDogMjAwcHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyB0cmFuc2xhdGVsZWZ0e1xuICAwJXtcbiAgICByaWdodDogMjAwcHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG4gIDMwJXtcbiAgICByaWdodDogMTUwcHg7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgMTAwJXtcbiAgICByaWdodDogLTIwMHB4O1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdHJhbnNsYXRlbGVmdHtcbiAgMCV7XG4gICAgcmlnaHQ6IDIwMHB4O1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuICAzMCV7XG4gICAgcmlnaHQ6IDE1MHB4O1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIDEwMCV7XG4gICAgcmlnaHQ6IC0yMDBweDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgcmVkdWNIe1xuICAwJXtcbiAgICBmaWxsOiB3aGl0ZSFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlLXdpZHRoOjMhaW1wb3J0YW50O1xuICB9XG5cbiAgNzAle1xuICAgIC8vIC13ZWJraXQtdGV4dC1zdHJva2UgOiAxcHggYmxhY2s7XG4gICAgLy8gY29sb3I6IGJsYWNrO1xuICB9XG5cbiAgMTAwJXtcbiAgICBmaWxsOiBibGFjayFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlLXdpZHRoOjAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgcmVkdWNIe1xuICAwJXtcbiAgICBmb250LXNpemU6ICRmaDE7XG4gICAgLXdlYmtpdC10ZXh0LXN0cm9rZSA6IDJweCBibGFjaztcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDVyZW07XG4gIH1cblxuICA3MCV7XG4gICAgLXdlYmtpdC10ZXh0LXN0cm9rZSA6IDFweCBibGFjaztcbiAgICBjb2xvcjogYmxhY2s7XG4gIH1cblxuICAxMDAle1xuICAgIGZvbnQtc2l6ZTogJG1pbi1oMTtcbiAgICAtd2Via2l0LXRleHQtc3Ryb2tlIDogMHB4IGJsYWNrO1xuICAgIGNvbG9yOiBibGFjaztcbiAgICBsaW5lLWhlaWdodDogNXJlbTtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgdHJhbnNsYXRlWXtcbiAgMCV7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAxMDAle1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHRyYW5zbGF0ZVl7XG4gIDAle1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJXtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIHNob3djYXRsaXN0IHtcbiAgMCV7XG4gICAgd2lkdGg6IDA7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMHB4IDBweCAwcHggYmxhY2s7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAwcHggYmxhY2s7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDEwMCV7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggLTJweCAwcHggLTJweCBibGFjaztcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAtMnB4IDBweCAtMnB4IGJsYWNrO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBzaG93Y2F0bGlzdCB7XG4gIDAle1xuICAgIHdpZHRoOiAwO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IGJsYWNrO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IGJsYWNrO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAxMDAle1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IC0ycHggMHB4IC0ycHggYmxhY2s7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggLTJweCAwcHggLTJweCBibGFjaztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBzaG93Ym9yZGVyIHtcbiAgMCV7XG4gICAgd2lkdGg6IDA7XG4gICAgYmFja2dyb3VuZDogYmxhY2s7XG4gIH1cbiAgMTAwJXtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiBibGFjaztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHNob3dib3JkZXIge1xuICAwJXtcbiAgICB3aWR0aDogMDtcbiAgICBiYWNrZ3JvdW5kOiBibGFjaztcbiAgfVxuICAxMDAle1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IGJsYWNrO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyB1bHRyYW5zbGF0ZSB7XG4gIDAle1xuICAgIG9wYWNpdHk6IDA7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwcHgpO1xuICB9XG4gIDEwMCV7XG4gICAgb3BhY2l0eTogMTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHVsdHJhbnNsYXRlIHtcbiAgMCV7XG4gICAgb3BhY2l0eTogMDtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwcHgpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7XG4gIH1cbiAgMTAwJXtcbiAgICBvcGFjaXR5OiAxO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBzaG93Y2FyZCB7XG4gIDAle1xuICAgIG9wYWNpdHk6IDA7XG5cbiAgfVxuICAxMDAle1xuICAgIG9wYWNpdHk6IDE7XG5cbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHNob3djYXJkIHtcbiAgMCV7XG4gICAgb3BhY2l0eTogMDtcblxuICB9XG4gIDEwMCV7XG4gICAgb3BhY2l0eTogMTtcblxuICB9XG59XG4iLCJodG1sLCBib2R5e1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uY2FyZHtcbiAgd2lkdGg6IGNhbGMoKDEwMCUgLyAzKSAtICgxMHB4KSk7XG4gIG1hcmdpbi1ib3R0b206IDdweDtcbiAgLmNhcmQtaGVhZGVye1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWJveDtcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgJiA+IGRpdiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICB9XG4gIH1cbn1cblxuLmNvbnRhY3R7XG4gIHotaW5kZXg6IDk5OTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogOTBweDtcbiAgaGVpZ2h0OiA5MHB4O1xuICAtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZSwgbWFyZ2luIDAuNXM7XG4gIHRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZSwgbWFyZ2luIDAuNXM7XG4gICYgPiBzdmd7XG4gICAgLXdlYmtpdC1hbmltYXRpb246IHJvdGF0aW9uIDEycyBpbmZpbml0ZSBsaW5lYXI7XG4gICAgYW5pbWF0aW9uOiByb3RhdGlvbiAxMnMgaW5maW5pdGUgbGluZWFyO1xuICB9XG4gIGgze1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB6LWluZGV4OiA5OTk7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMzRweDtcbiAgICByaWdodDogMzdweDtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG4gIH1cbiAgLnR4dHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgcmlnaHQ6IC0yMDAlO1xuICAgIGxlZnQ6IDIwMCU7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAwLjVzIGVhc2UsIHJpZ2h0IDBzO1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjVzIGVhc2UsIHJpZ2h0IDBzO1xuICAgIHB7XG4gICAgICBtYXJnaW4tdG9wOiAxcmVtO1xuICAgICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgICBsaW5lLWhlaWdodDogMnJlbTtcbiAgICAgIGF7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIH1cbiAgICAgIGVte1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICB9XG4gICAgICAmOm50aC1sYXN0LW9mLXR5cGUoMil7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS42cmVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAmLm9wZW57XG4gICAgd2lkdGg6IDIwMDBweDtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luOiAtNTUwcHg7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiB3aWR0aCAwLjVzIGVhc2UsIG1hcmdpbiAwLjVzO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZSwgbWFyZ2luIDAuNXM7XG4gICAudHh0e1xuICAgICBjb2xvcjogd2hpdGU7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAwLjVzIGVhc2UsIHJpZ2h0IDBzO1xuICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjVzIGVhc2UsIHJpZ2h0IDBzO1xuICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICB0b3A6IDUwcHg7XG4gICAgIGxlZnQ6IGF1dG87XG4gICAgIHJpZ2h0OiA3MHB4O1xuICAgICB3aWR0aDogNjUwcHg7XG4gICAgIC5yZXNve1xuICAgICAgICAmID4gZGl2e1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgMC41cyBlYXNlO1xuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cyAwLjVzIGVhc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaDN7XG4gICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyBlYXNlO1xuICAgIH1cbiAgfVxuICAmLmNsb3Nle1xuICAgIHdpZHRoOiA5MHB4O1xuICAgIGhlaWdodDogOTBweDtcbiAgICAgLnR4dHtcbiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgcmlnaHQ6IC0yMDAlO1xuICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAwLjVzIGVhc2UsIHJpZ2h0IDBzO1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC41cyBlYXNlLCByaWdodCAwcztcbiAgICB9XG4gICAgaDN7XG4gICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG4gICAgfVxuICB9XG59XG4iLCJoZWFkZXJ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICBoZWlnaHQ6IDEwMHZoO1xuICAmOmFmdGVye1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMCU7XG4gICAgYm90dG9tOiAwO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbiAgLmhlYWR7XG4gICAgd2lkdGg6MTAwJTtcbiAgICBwYWRkaW5nLXRvcDogMjJweDtcbiAgICBuYXZ7XG4gICAgICB3aWR0aDogY2FsYygoMTAwJSAvIDMpICogMik7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBoMntcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAud29ya3MtbWVhe1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgd2lkdGg6IGNhbGMoKDEwMCUpICsgKDEwcHgpICk7XG4gICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBoZWlnaHQ6IDUwJTtcbiAgICAuY2FyZHtcbiAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMzBweCk7XG4gICAgICAuY2FyZC1pbWFnZXtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYXtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgaW1ne1xuICAgICAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICY6Zmlyc3QtY2hpbGR7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgIH1cbiAgICAgICY6bGFzdC1jaGlsZHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC5zY3JvbGx7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvdHRvbTogMDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgcHtcbiAgICAgIHN2Z3tcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLml0ZW17XG4gICNzdGFydHtcbiAgICBtYXJnaW4tdG9wOiAxMTVweDtcbiAgICAuY2F0LWxpc3R7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZG93biwgLml0ZW17XG4gIGhlYWRlcntcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICB6LWluZGV4OiA5OTk7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpO1xuICAgIGhlaWdodDogOTBweDtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgICY6YWZ0ZXJ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgYmFja2dyb3VuZDogYmxhY2s7XG4gICAgfVxuICAgIC5oZWFke1xuICAgICAgbmF2e1xuICAgICAgICB3aWR0aDogY2FsYygoMTAwJSAvIDYpKTtcbiAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcbiAgICAgICAgcGF0aHtcbiAgICAgICAgICBmaWxsOmJsYWNrIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICBoMntcbiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTUwJSk7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTE1MCUpO1xuICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogMnMgLXdlYmtpdC10cmFuc2Zvcm0gZWFzZTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAycyAtd2Via2l0LXRyYW5zZm9ybSBlYXNlO1xuICAgICAgICAgIHRyYW5zaXRpb246IDJzIHRyYW5zZm9ybSBlYXNlO1xuICAgICAgICAgIHRyYW5zaXRpb246IDJzIHRyYW5zZm9ybSBlYXNlLCAycyAtd2Via2l0LXRyYW5zZm9ybSBlYXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC53b3Jrcy1tZWF7XG4gICAgICBib3R0b206IDY1cHg7XG4gICAgICAtd2Via2l0LXRyYW5zaXRpb246IDBzIDFzIGJvdHRvbTtcbiAgICAgIHRyYW5zaXRpb246IDBzIDFzIGJvdHRvbTtcbiAgICAgIC5jYXJke1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMjBweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLnNjcm9sbHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIG1hcmdpbi1ib3R0b206IC0yMHB4O1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogMXMgYWxsIGVhc2U7XG4gICAgdHJhbnNpdGlvbjogMXMgYWxsIGVhc2U7XG4gIH1cbn1cblxuLmRvd257XG4gIGhlYWRlcntcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IDFzIDFzIGhlaWdodCBlYXNlO1xuICAgIHRyYW5zaXRpb246IDFzIDFzIGhlaWdodCBlYXNlO1xuICAgICY6YWZ0ZXJ7XG4gICAgICAtd2Via2l0LXRyYW5zaXRpb246IDEuNXMgMnMgd2lkdGggZWFzZTtcbiAgICAgIHRyYW5zaXRpb246IDEuNXMgMnMgd2lkdGggZWFzZTtcbiAgICB9XG4gICAgLmhlYWR7XG4gICAgICBuYXZ7XG4gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjoxcyAxcyB3aWR0aCBlYXNlO1xuICAgICAgICB0cmFuc2l0aW9uOjFzIDFzIHdpZHRoIGVhc2U7XG4gICAgICAgIHBhdGh7XG4gICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOjFzIDFzIGZpbGwgZWFzZTtcbiAgICAgICAgICB0cmFuc2l0aW9uOjFzIDFzIGZpbGwgZWFzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAud29ya3MtbWVhe1xuICAgICAgYm90dG9tOiA2NXB4O1xuICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAwcyAxcyBib3R0b207XG4gICAgICB0cmFuc2l0aW9uOiAwcyAxcyBib3R0b207XG4gICAgICAuY2FyZHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogLTIwcHg7XG4gICAgICAgICY6bnRoLWNoaWxkKDEpe1xuICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogMC41cyAwLjNzIGFsbCBlYXNlO1xuICAgICAgICAgIHRyYW5zaXRpb246IDAuNXMgMC4zcyBhbGwgZWFzZTtcbiAgICAgICAgfVxuICAgICAgICAmOm50aC1jaGlsZCgyKXtcbiAgICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IDAuNXMgMC41cyBhbGwgZWFzZTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAwLjVzIDAuNXMgYWxsIGVhc2U7XG4gICAgICAgIH1cbiAgICAgICAgJjpudGgtY2hpbGQoMyl7XG4gICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjVzIDAuN3MgYWxsIGVhc2U7XG4gICAgICAgICAgdHJhbnNpdGlvbjogMC41cyAwLjdzIGFsbCBlYXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIuY2F0LWxpc3R7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAxMHB4KTtcbiAgaGVpZ2h0OiA1MHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1ib3g7XG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgJjphZnRlcntcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgd2lkdGg6IDAlO1xuICB9XG4gICYgPiB1bHtcbiAgICBtYXJnaW46IGF1dG8gMCBhdXRvIDEwcHg7XG4gICAgbGFiZWx7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xuICAgICAgYXtcbiAgICAgICAgJjo6YWZ0ZXJ7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgICAgIHdpZHRoOiA1cHg7XG4gICAgICAgIH1cbiAgICAgICAgJjpob3ZlciwgJi5hY3RpdmV7XG4gICAgICAgICAgJjo6YWZ0ZXJ7XG4gICAgICAgICAgICBjb250ZW50OiBcIlxcMDAyMDIyXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiNwYWdlLXdyYXBwZXJ7XG4gIHBhZGRpbmctbGVmdDogMTBweDtcbiAgei1pbmRleDogMTAwMDtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uc2Nyb2xse1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5mdWxsLXdvcmtze1xuICAuY2FyZHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIG1hcmdpbi10b3A6IDMwcHg7XG4gIH1cbn1cblxuLmRvd257XG4gICNzdGFydHtcbiAgICBtYXJnaW4tdG9wOiA5MHB4O1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuICAuY2F0LWxpc3R7XG4gICAgJjphZnRlcntcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICBiYWNrZ3JvdW5kOiBibGFjaztcbiAgICB9XG4gICAgJiA+IHVse1xuICAgICAgbGFiZWx7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAuZnVsbC13b3Jrc3tcbiAgICAuY2FyZHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0cmFuc2l0aW9uOiAxLjVzIG9wYWNpdHkgMXMgZWFzZSwgMS41cyBtYXJnaW4tdG9wIDFzIGVhc2U7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbiAgfVxufVxuXG4uZG93bntcbiAgLmNhdC1saXN0e1xuICAgICY6YWZ0ZXJ7XG4gICAgICAtd2Via2l0LXRyYW5zaXRpb246IDJzIDEuNXMgd2lkdGggZWFzZTtcbiAgICAgIHRyYW5zaXRpb246IDJzIDEuNXMgd2lkdGggZWFzZTtcbiAgICB9XG4gICAgJiA+IHVse1xuICAgICAgbGFiZWx7XG4gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogMnMgMS41cyBhbGwgZWFzZTtcbiAgICAgICAgdHJhbnNpdGlvbjogMnMgMS41cyBhbGwgZWFzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIlxuIiwiLml0ZW17XG4gICNzdGFydHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gMTBweCk7XG4gIH1cbn1cbiNpdGVtc3tcbiAgLmhlYWRlci1pdGVte1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWJveDtcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICAgIC5pbmZve1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDMpO1xuICAgICAgLnRpdGxle1xuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGgye1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIH1cbiAgICAgICAgJiA+ICp7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5jb250ZW50e1xuICAgICAgICBtYXJnaW4tdG9wOiAxcmVtO1xuICAgICAgfVxuICAgIH1cbiAgICAucHJldi1uZXh0e1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDMpO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgLmJ0bi1pbmZve1xuICAgICAgICB3aWR0aDogMjUwcHg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAyMHB4O1xuICAgICAgICBsZWZ0OiAtODBweDtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTdkZWcpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xN2RlZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC50b3B7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICB9XG59XG5cbi5pbWctY2FyZHtcbiAgd2lkdGg6IGNhbGMoKDEwMCUgLyAzKSAtICgxMHB4KSk7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG4iLCJAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmNhcmR7XG4gICAgd2lkdGg6IGNhbGMoKDEwMCUgLyAyKSAtIDEwcHgpO1xuICB9XG4gIC53b3Jrcy1tZWF7XG4gICAgLmNhcmR7XG4gICAgICAmOm50aC1jaGlsZCgzKXtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjaXRlbXN7XG4gICAgLmhlYWRlci1pdGVte1xuICAgICAgLmluZm97XG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLmltZy1jYXJke1xuICAgIHdpZHRoOiBjYWxjKCgxMDAlIC8gMikgLSA1cHgpO1xuICB9XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjpsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MTJweCkge1xuLmJsb2d7XG4gIGhlYWRlcntcbiAgICAuaGVhZHtcbiAgICAgIG5hdntcbiAgICAgICAgbWFyZ2luLXRvcDogNTB2aDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTEwMCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAuZG93bntcbiAgICBoZWFkZXJ7XG4gICAgICAuaGVhZHtcbiAgICAgICAgbmF2e1xuICAgICAgICAgIG1hcmdpbi10b3A6IDAhaW1wb3J0YW50O1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDApIWltcG9ydGFudDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC41cyAxcyBlYXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gICAgLndvcmtzLW1lYXtcbiAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0MTRweCkge1xuICAuZG93biBoZWFkZXIsIC5pdGVtIGhlYWRlcntcbiAgICBoZWlnaHQ6IDcwcHg7XG4gIH1cbiAgaGVhZGVye1xuICAgIC5oZWFke1xuICAgICAgcGFkZGluZy10b3A6IDEwcHg7XG4gICAgICBuYXZ7XG4gICAgICAgIHdpZHRoOiA4MCUhaW1wb3J0YW50O1xuICAgICAgICBtaW4td2lkdGg6IDgwJSFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC5jb250YWN0e1xuICAgICAgd2lkdGg6IDcwcHg7XG4gICAgICBoZWlnaHQ6IDcwcHg7XG4gICAgICBoM3tcbiAgICAgICAgdG9wOiAyNHB4O1xuICAgICAgICByaWdodDogMjdweDtcbiAgICAgIH1cbiAgICAgICYub3BlbntcbiAgICAgICAgLnR4dHtcbiAgICAgICAgICByaWdodDogMjVweDtcbiAgICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMzBweCk7XG4gICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA1MHB4KTtcbiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICAgIHB7XG4gICAgICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS40cmVtO1xuICAgICAgICAgICAgJjpudGgtbGFzdC1vZi10eXBlKDIpe1xuICAgICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMnJlbTtcbiAgICAgICAgICAgICAgYXtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTVweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbXtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjVyZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmLmNsb3Nle1xuICAgICAgICB3aWR0aDogNzBweDtcbiAgICAgICAgaGVpZ2h0OiA3MHB4O1xuICAgICAgfVxuICAgIH1cbiAgICAud29ya3MtbWVhe1xuICAgICAgLmNhcmR7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAmOm50aC1jaGlsZCgyKXtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICAgICY6bnRoLWNoaWxkKDMpe1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuYmxvZ3tcbiAgICBoMntcbiAgICAgIGxpbmUtaGVpZ2h0OiA5dnc7XG4gICAgICBmb250LXNpemU6IDZ2dztcbiAgICB9XG4gIH1cbiAgLmRvd24sIC5pdGVte1xuICAgICNzdGFydHtcbiAgICAgIG1hcmdpbi10b3A6IDcwcHg7XG4gICAgfVxuICB9XG4gIC5jYXJke1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxMHB4KTtcbiAgfVxuXG4gICNpdGVtc3tcbiAgICAuaGVhZGVyLWl0ZW17XG4gICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgICYgPiBkaXZ7XG4gICAgICAgIHdpZHRoOiAxMDAlIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgICYgPiAuaW5mb3tcbiAgICAgICAgbWFyZ2luLXRvcDogMjVweDtcbiAgICAgICAgLnRpdGxle1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAmID4gYSB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAucHJldi1uZXh0e1xuICAgICAgICAuYnRuLWluZm97XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAuaW1nLWNhcmR7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSk7XG4gIH1cbiAgLml0ZW17XG4gICAgI2l0ZW1ze1xuICAgICAgcGFkZGluZy10b3A6IDI1cHg7XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFDQUEsQUFBQSxDQUFDLENBQUEsRUFDQyxrQkFBa0IsRUFBRyxVQUFVLEVB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LEFBQUEsaUJBQWlCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFDLGlCQUFpQixBQUFBLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBQyxZQUFZLEFBQUEsaUJBQWlCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFDLGVBQWUsQUFBQSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUMsVUFBVSxBQUFBLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQSxFQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsR0FBRTs7QUFBRCxBQUFBLGlCQUFpQixBQUFBLDRCQUE0QixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBQyxZQUFZLEFBQUEsNEJBQTRCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFDLGlCQUFpQixBQUFBLDRCQUE0QixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBQyxZQUFZLEFBQUEsNEJBQTRCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFDLGVBQWUsQUFBQSw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUMsVUFBVSxBQUFBLDRCQUE0QixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQSxFQUFDLE1BQU0sRUFBQyxHQUFHLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxJQUFJLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsR0FBRTs7QUFBRCxBQUFBLGlCQUFpQixBQUFBLDRCQUE0QixDQUFDLGlCQUFpQixFQUFDLFlBQVksQUFBQSw0QkFBNEIsQ0FBQyxpQkFB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 */ diff --git a/user/themes/gilles_acezat/css-compiled/theme.min.css b/user/themes/gilles_acezat/css-compiled/theme.min.css index 8b17288..c530c72 100644 --- a/user/themes/gilles_acezat/css-compiled/theme.min.css +++ b/user/themes/gilles_acezat/css-compiled/theme.min.css @@ -1 +1 @@ -*{box-sizing:border-box}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{font-size:18px;line-height:1.15;width:100%;height:100%;margin:0;padding:0;-webkit-text-size-adjust:100%}body{width:100%;height:100%;margin:0;padding:0}main{display:block}h1{font-size:3em;margin:0}a,em,h1,h2,h3,h4,h5,li,p,strong,ul{margin:0;padding:0}hr{overflow:visible;box-sizing:content-box;height:0}pre{font-family:monospace,monospace;font-size:1em}ul{list-style:none}li,ul{margin:0;padding:0}a{text-decoration:none;color:#000;background-color:transparent}abbr[title]{text-decoration:underline;text-decoration:underline dotted;border-bottom:none;-webkit-text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{width:100%;height:100%;vertical-align:bottom;border-style:none}iframe{border:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{display:table;box-sizing:border-box;max-width:100%;padding:0;white-space:normal;color:inherit}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}@font-face{font-family:Regular;src:url(../fonts/Secuela/Secuela-Regular.eot);src:url(../fonts/Secuela/Secuela-Regular.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Regular.woff) format('woff'),url(../fonts/Secuela/Secuela-Regular.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Regular.svg#Regular) format('svg')}@font-face{font-family:medium;src:url(../fonts/Secuela/Secuela-Medium.eot);src:url(../fonts/Secuela/Secuela-Medium.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Medium.woff) format('woff'),url(../fonts/Secuela/Secuela-Medium.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Medium.svg#medium) format('svg')}@font-face{font-family:bold;src:url(../fonts/Secuela/Secuela-Bold.eot);src:url(../fonts/Secuela/Secuela-Bold.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Bold.woff) format('woff'),url(../fonts/Secuela/Secuela-Bold.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Bold.svg#bold) format('svg')}@font-face{font-family:italic;src:url(../fonts/Secuela/Secuela-Italic.eot);src:url(../fonts/Secuela/Secuela-Italic.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Italic.woff) format('woff'),url(../fonts/Secuela/Secuela-Italic.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Italic.svg#italic) format('svg')}@font-face{font-family:light;src:url(../fonts/Secuela/Secuela-Light.eot);src:url(../fonts/Secuela/Secuela-Light.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Light.woff) format('woff'),url(../fonts/Secuela/Secuela-Light.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Light.svg#light) format('svg')}h1,h2{font-family:medium;font-weight:400}h2{font-size:4.5vw}h3{font-family:medium;font-size:1rem;font-weight:400}h5{font-family:bold;font-size:.8rem;font-weight:400;text-transform:uppercase}p{font-family:Regular;font-size:.9rem;font-weight:400;line-height:1.1rem}time{font-family:italic;font-weight:400}.blog h2{line-height:6vw}.blog.down h1{animation:reducH 1s .9s ease forwards}.item h2{font-size:1rem}.item .prev-next a .title{font-family:bold;font-size:.7rem;text-transform:uppercase}.item .prev-next a .blog-date time,.item .prev-next a .tags{font-family:italic;font-size:.7rem;text-transform:uppercase}.category a{font-family:italic;font-size:1rem}time{font-size:1rem}.tags{font-family:bold;font-size:.7rem}#page-wrapper.blog #items .category a,#page-wrapper.blog .works-mea .category a{font-family:italic;font-size:.8rem}#page-wrapper.blog #items time,#page-wrapper.blog .works-mea time{font-size:.8rem}#page-wrapper.blog #items .card-footer,#page-wrapper.blog .works-mea .card-footer{line-height:.2rem}#page-wrapper.blog #items .card-footer .tags a,#page-wrapper.blog .works-mea .card-footer .tags a{color:#999!important}#page-wrapper.item #items .title h2{font-family:bold;font-size:1.2rem}#page-wrapper.item #items .title a,#page-wrapper.item #items .title time{font-size:1.2rem}#page-wrapper.item #items .tags span{font-size:.8rem}#page-wrapper.item #items .tags span a{color:#999}.cat-list{font-family:light;font-size:1rem}.mCustomScrollbar{-ms-touch-action:pinch-zoom;touch-action:pinch-zoom}.mCustomScrollbar.mCS_no_scrollbar,.mCustomScrollbar.mCS_touch_action{-ms-touch-action:auto;touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;max-width:100%;height:100%;outline:0;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;top:0;right:0;bottom:0;left:auto;width:16px;height:auto;opacity:.75;filter:'alpha(opacity=75)';-ms-filter:'alpha(opacity=75)'}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;right:0;bottom:0;left:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;border-radius:16px}.mCSB_scrollTools .mCSB_dragger{z-index:1;width:100%;height:30px;cursor:pointer}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;text-align:center;border-radius:16px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonUp{position:absolute;display:block;overflow:hidden;width:100%;height:20px;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{top:auto;right:0;bottom:0;left:0;width:auto;height:16px}.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{left:0;width:30px;height:100%}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{position:absolute;display:block;overflow:hidden;width:20px;height:100%;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;width:auto;height:auto;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{box-sizing:border-box;padding-right:30px;padding-bottom:30px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar{transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:0;filter:'alpha(opacity=0)';-ms-filter:'alpha(opacity=0)'}.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox~.mCSB_scrollTools,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover~.mCSB_scrollTools,.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox~.mCSB_scrollTools.mCSB_scrollTools_onDrag{opacity:1;filter:'alpha(opacity=100)';-ms-filter:'alpha(opacity=100)'}.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.4);filter:'alpha(opacity=40)';-ms-filter:'alpha(opacity=40)'}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75);filter:'alpha(opacity=75)';-ms-filter:'alpha(opacity=75)'}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85);filter:'alpha(opacity=85)';-ms-filter:'alpha(opacity=85)'}.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9);filter:'alpha(opacity=90)';-ms-filter:'alpha(opacity=90)'}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp{opacity:.4;background-image:url(mCSB_buttons.png);background-repeat:no-repeat;filter:'alpha(opacity=40)';-ms-filter:'alpha(opacity=40)'}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -20px}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover,.mCSB_scrollTools .mCSB_buttonUp:hover{opacity:.75;filter:'alpha(opacity=75)';-ms-filter:'alpha(opacity=75)'}.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active,.mCSB_scrollTools .mCSB_buttonUp:active{opacity:.9;filter:'alpha(opacity=90)';-ms-filter:'alpha(opacity=90)'}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:rgba(0,0,0,.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;border-radius:1px;background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;border-radius:1px;background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{border-radius:1px;background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{border-radius:1px;background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;border-radius:2px;background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;border-radius:2px;background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{border-radius:2px;background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{border-radius:2px;background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:0 -1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail{opacity:.3;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==);background-repeat:repeat-y;filter:'alpha(opacity=30)';-ms-filter:'alpha(opacity=30)'}.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=)}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-image:linear-gradient(to right,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-repeat:repeat-y}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-image:linear-gradient(to bottom,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-repeat:repeat-x}.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d-dark.mCSB_scrollTools,.mCS-3d.mCSB_scrollTools{opacity:1;filter:'alpha(opacity=30)';-ms-filter:'alpha(opacity=30)'}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{border-radius:16px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,.2);box-shadow:inset 1px 0 1px rgba(0,0,0,.5),inset -1px 0 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.5),inset 0 -1px 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);box-shadow:inset 1px 0 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools{opacity:1;filter:'alpha(opacity=30)';-ms-filter:'alpha(opacity=30)'}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{border-radius:7px}.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCS-3d-thick.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal,.mCS-3d-thick.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:absolute;top:0;right:0;bottom:0;left:0;width:12px;height:auto;margin:2px;border-radius:5px;box-shadow:inset 1px 0 0 rgba(255,255,255,.4)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:auto;height:12px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4),inset -1px 0 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4),inset 0 -1px 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:auto;left:0}.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.2);filter:'alpha(opacity=20)';-ms-filter:'alpha(opacity=20)'}.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.5);filter:'alpha(opacity=50)';-ms-filter:'alpha(opacity=50)'}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.2);filter:'alpha(opacity=20)';-ms-filter:'alpha(opacity=20)'}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.5);filter:'alpha(opacity=50)';-ms-filter:'alpha(opacity=50)'}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:absolute;top:0;right:0;bottom:0;left:0;width:6px;height:auto;margin:3px 5px}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{position:absolute;top:0;right:0;bottom:0;left:0;width:auto;height:6px;margin:5px 3px}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail{box-sizing:border-box;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,.2);background-color:transparent}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@keyframes translateright{0%{right:-50px;display:none;color:transparent}30%{right:150px;display:block;color:transparent}100%{right:200px;color:#fff}}@keyframes translateleft{0%{right:200px;display:block;color:#fff}30%{right:150px;color:transparent}100%{right:-200px;display:none;color:transparent}}@keyframes reducH{0%{font-size:12vw;line-height:5rem;color:transparent;-webkit-text-stroke:2px #000}70%{color:#000;-webkit-text-stroke:1px #000}100%{font-size:3rem;line-height:5rem;color:#000;-webkit-text-stroke:0 #000}}@keyframes translateY{0%{transform:translateY(0);opacity:1}100%{transform:translateY(-20px);opacity:0}}@keyframes showcatlist{0%{width:0;opacity:1;box-shadow:0 0 0 0 #000}100%{width:100%;opacity:1;box-shadow:0 -2px 0 -2px #000}}@keyframes showborder{0%{width:0;background:#000}100%{width:100%;background:#000}}@keyframes ultranslate{0%{transform:translateX(0);opacity:0}100%{transform:translateX(10px);opacity:1}}@keyframes showcard{0%{opacity:0}100%{opacity:1}}body,html{overflow:hidden}.blog{width:100%;height:100%}.blog.down{height:5rem}#start{width:100%}.card{line-height:.8rem!important;width:calc((100% / 3))}.card .card-header{display:-ms-inline-flexbox;display:inline-flex;margin-top:5px;-ms-flex-align:baseline;align-items:baseline}.card .card-header>div{margin-right:5px}.scroll{cursor:pointer}#top{display:none}body .blog{margin:0 10px}body .blog header{display:-ms-inline-flexbox;display:inline-flex;flex-direction:column;width:calc(100% - 22px);height:100vh;-ms-flex-direction:column;-ms-flex-line-pack:distribute;align-content:space-around}body .blog header>div{position:fixed}body .blog header>div.head{z-index:999;width:inherit;padding-top:25px}body .blog header>div.head .svg-container{position:relative;display:inline-block;overflow:hidden;width:calc((100% / 3) * 2 - 22px);padding-bottom:9%;vertical-align:middle}body .blog header>div.head .svg-container .svg-content{position:absolute;top:0;left:0;display:inline-block}body .blog header>div.head h2{position:absolute;left:0;margin-left:-4px}body .blog header>div.head::after{display:block;width:0;height:1px;content:' ';background:#000}body .blog header>div.works-mea{display:-ms-inline-flexbox;display:inline-flex;width:inherit;height:calc(100% - 25px);-ms-flex-item-align:end;align-self:flex-end;-ms-flex-align:end;align-items:flex-end}body .blog header>div.works-mea .card:nth-child(2){margin:0 10px}body .blog header>div.works-mea .card:not(:nth-child(2)){margin:0}body .blog header>div.scroll{bottom:0;width:inherit;text-align:center}body .blog.down header .head .svg-container{width:250px;padding-bottom:calc(70px - 7px);transition:all 1s .9s ease}body .blog.down header .head .svg-container .svg-content path{transition:all 1s .9s ease;fill:#000!important;stroke-width:0!important}body .blog.down header .head::after{animation:showborder 2.5s 1.5s ease forwards}body .blog.down header .head h2{left:-40%;transition:left 3s linear,opacity .3s .1s ease;opacity:0}body .blog.down header .card:nth-child(1){animation:translateY 1s ease forwards}body .blog.down header .card:nth-child(2){animation:translateY 1.3s ease forwards}body .blog.down header .card:nth-child(3){animation:translateY 1.6s ease forwards}body .blog.down header .scroll{transition:all 1s ease;opacity:0}.contact{position:fixed;z-index:999;top:0;right:0;width:90px;height:auto;cursor:pointer;transition:width .5s ease}.contact:hover{width:80px;transition:width .5s ease}.contact svg{cursor:pointer;animation:rotation 6s infinite linear}.contact h3{position:absolute;top:35px;left:19px;transform:rotate(35deg);color:#fff}.contact .txt{position:fixed;right:-200px}.contact.open{height:auto;transition:transform .5s ease;transform:scale(15)}.contact.open h3{left:500px;transition:visibility .5 ease left 1s ease;color:transparent}.contact.open svg{animation:rotation 12s infinite linear}.contact.open .txt{line-height:1.5rem;position:fixed;z-index:9999;top:-10px;right:-20px;transform:scale(.1);text-align:center;color:#fff}.contact.close{transition:transform .5s .1s ease;transform:scale(1)}.contact.close+.txt{line-height:1.5rem;z-index:9999;top:190px;animation:translateleft 1s ease forwards;text-align:center}.contact.close h3{transition:color .5s .5s ease,left .5s ease}.contact.close:hover{transition:transform .5s ease!important;transform:scale(.9)!important}body #page-wrapper.item header{position:fixed;z-index:999;z-index:999;top:0;right:10px;left:10px;width:inherit;height:5rem;padding-top:25px;border-bottom:1px solid #000;background:#fff}body #page-wrapper.item header .head .svg-container{width:250px;transition:all 1s .9s ease}body #page-wrapper.item header .head .svg-container .svg-content path{transition:all 1s .9s ease;fill:#000!important;stroke-width:0!important}body #page-wrapper.item header .scroll,body #page-wrapper.item header h2{display:none}.blog #start .cat-list{z-index:999;left:-100%;width:100%}.blog #start .cat-list::after{display:block;width:0;height:1px;content:' ';background:#000}.blog #start .cat-list ul{display:-ms-inline-flexbox;display:inline-flex;margin:10px 0;opacity:0}.blog #start .cat-list ul .btn-group{display:-ms-flexbox;display:flex}.blog #start .cat-list ul .btn-group .btn a{margin-right:10px}.blog #start .cat-list ul .btn-group .btn a::after{position:absolute;width:5px;content:' '}.blog #start .cat-list ul .btn-group .btn a.active::after,.blog #start .cat-list ul .btn-group .btn a:hover::after{content:'\002022'}.blog #start .cat-list ul .btn-group .btn a input{display:none}.blog #start #items .full-works .card{width:calc((100vw / 3 - calc(41px / 3)))}.blog .down .cat-list::after{animation:showborder 2.5s 1.6s ease forwards}.blog .down .cat-list ul{animation:ultranslate 1s 2.5s ease forwards}body #start{height:100%}body #page-wrapper.blog #start{position:fixed;top:100vh;right:10px;left:10px;width:calc(100% - 20px);height:calc(100% - 5rem)}body #page-wrapper.down #start{top:5rem}body #page-wrapper.down #items{animation:showcard 1.5s 2.5s ease forwards}.blog #items{opacity:0}.blog #items .full-works{width:100%;margin-top:30px}.blog #items .card{min-width:200px;margin-bottom:10px}body #page-wrapper.item{margin:0 10px}body #page-wrapper.item .contact .txt{display:none}body #page-wrapper.item #start{margin-top:5rem}body #page-wrapper.item #body-wrapper.blog-listing .img-card{width:calc((100vw / 3 - calc(41px / 3)));margin-bottom:10px}body #page-wrapper.item #body-wrapper.blog-listing .header-item{position:relative;margin-bottom:1.5rem;padding-top:1.5rem}body #page-wrapper.item #body-wrapper.blog-listing .header-item .title{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:baseline;align-items:baseline}body #page-wrapper.item #body-wrapper.blog-listing .header-item .title h2{margin-right:5px;text-transform:uppercase}body #page-wrapper.item #body-wrapper.blog-listing .header-item .title time{margin-right:5px}body #page-wrapper.item #body-wrapper.blog-listing .header-item .title span{margin-right:5px}body #page-wrapper.item #body-wrapper.blog-listing .header-item .content{width:calc((100% / 3) - 15px);margin-top:20px}body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next{position:absolute;top:calc(50% + 1.5rem);right:0;width:calc(100% / 3);height:100%;transform:translateY(-50%)}body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn{display:block;width:auto;height:100%}body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn .btn-info{position:absolute;margin-top:20px;margin-left:40px;transform:rotate(-15deg)}body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn img{float:right;width:80%}body #page-wrapper.item .top{width:50px;margin:20px auto 20px auto;text-align:center}body #page-wrapper.item .top img{width:20px;margin-bottom:5px}body #page-wrapper.item .top p{transform:rotate(-10deg)}@media screen and (max-width:960px){body #page-wrapper.item #body-wrapper.blog-listing .header-item .content{width:calc((100% / 2) - 5px)}body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next{width:calc((100% / 2) - 5px)}body #page-wrapper.item #body-wrapper.blog-listing .img-card{width:calc((100% / 2) - 5px)}}@media screen and (max-width:600px){body #page-wrapper.item #body-wrapper.blog-listing .header-item .content{width:calc((100%) - 15px)}body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next{position:relative;width:calc((100%) - 15px);transform:translateY(0)}body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn .btn-info{display:none}body #page-wrapper.item #body-wrapper.blog-listing .header-item .prev-next .btn img{float:none;width:100%}body #page-wrapper.item #body-wrapper.blog-listing .img-card{width:100%}}@media screen and (max-width:960px){.works-mea>div:last-child{display:none}.card{width:calc((100% / 2) - 5px)!important}}@media screen and (max-width:600px){header .head{padding:0!important}header h1{font-size:2.5rem!important;line-height:5rem!important;-webkit-text-stroke:1px #000!important}header h2{font-size:1.5rem;line-height:0!important;margin:-.7rem 0 0 0!important}.works-mea>div:nth-child(2){display:none}.card{width:100%!important}} \ No newline at end of file +*{box-sizing:border-box}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{font-size:18px;line-height:1.15;width:100%;height:100%;margin:0;padding:0;-webkit-text-size-adjust:100%}body{width:100%;height:100%;margin:0;padding:0}main{display:block}h1{font-size:3em;margin:0}a,em,h1,h2,h3,h4,h5,li,p,strong,ul{margin:0;padding:0}hr{overflow:visible;box-sizing:content-box;height:0}pre{font-family:monospace,monospace;font-size:1em}ul{list-style:none}li,ul{margin:0;padding:0}a{text-decoration:none;color:#000;background-color:transparent}abbr[title]{text-decoration:underline;text-decoration:underline dotted;border-bottom:none;-webkit-text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{width:100%;height:100%;vertical-align:bottom;border-style:none}iframe{border:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{display:table;box-sizing:border-box;max-width:100%;padding:0;white-space:normal;color:inherit}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}@font-face{font-family:Regular;src:url(../fonts/Secuela/Secuela-Regular.eot);src:url(../fonts/Secuela/Secuela-Regular.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Regular.woff) format('woff'),url(../fonts/Secuela/Secuela-Regular.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Regular.svg#Regular) format('svg')}@font-face{font-family:medium;src:url(../fonts/Secuela/Secuela-Medium.eot);src:url(../fonts/Secuela/Secuela-Medium.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Medium.woff) format('woff'),url(../fonts/Secuela/Secuela-Medium.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Medium.svg#medium) format('svg')}@font-face{font-family:bold;src:url(../fonts/Secuela/Secuela-Bold.eot);src:url(../fonts/Secuela/Secuela-Bold.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Bold.woff) format('woff'),url(../fonts/Secuela/Secuela-Bold.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Bold.svg#bold) format('svg')}@font-face{font-family:italic;src:url(../fonts/Secuela/Secuela-Italic.eot);src:url(../fonts/Secuela/Secuela-Italic.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Italic.woff) format('woff'),url(../fonts/Secuela/Secuela-Italic.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Italic.svg#italic) format('svg')}@font-face{font-family:light;src:url(../fonts/Secuela/Secuela-Light.eot);src:url(../fonts/Secuela/Secuela-Light.eot?#iefix) format('embedded-opentype'),url(../fonts/Secuela/Secuela-Light.woff) format('woff'),url(../fonts/Secuela/Secuela-Light.ttf) format('truetype'),url(../fonts/Secuela/Secuela-Light.svg#light) format('svg')}h1,h2{font-family:medium;font-weight:400}h2{font-size:4.5vw}h3{font-family:medium;font-size:1rem;font-weight:400}h5{font-family:bold;font-size:.8rem;font-weight:400;text-transform:uppercase}p{font-family:Regular;font-size:.9rem;font-weight:400;line-height:1.1rem}time{font-family:italic;font-weight:400}.blog h2{line-height:6vw}.blog.down h1{animation:reducH 1s .9s ease forwards}.item h2{font-size:1rem}.item .prev-next a .title{font-family:bold;font-size:.7rem;text-transform:uppercase}.item .prev-next a .blog-date time,.item .prev-next a .tags{font-family:italic;font-size:.7rem;text-transform:uppercase}.category a{font-family:italic;font-size:1rem}time{font-size:1rem}.tags{font-family:bold;font-size:.7rem}#page-wrapper.blog #items .category a,#page-wrapper.blog .works-mea .category a{font-family:italic;font-size:.8rem}#page-wrapper.blog #items time,#page-wrapper.blog .works-mea time{font-size:.8rem}#page-wrapper.blog #items .card-footer,#page-wrapper.blog .works-mea .card-footer{line-height:.5rem}#page-wrapper.blog #items .card-footer .tags a,#page-wrapper.blog .works-mea .card-footer .tags a{color:#999!important}#page-wrapper.item #items .title h2{font-family:bold;font-size:1.2rem}#page-wrapper.item #items .title a,#page-wrapper.item #items .title time{font-size:1.2rem}#page-wrapper.item #items .tags span{font-size:.8rem}#page-wrapper.item #items .tags span a{color:#999}.cat-list{font-family:light;font-size:1rem}.mCustomScrollbar{-ms-touch-action:pinch-zoom;touch-action:pinch-zoom}.mCustomScrollbar.mCS_no_scrollbar,.mCustomScrollbar.mCS_touch_action{-ms-touch-action:auto;touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;max-width:100%;height:100%;outline:0;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;top:0;right:0;bottom:0;left:auto;width:16px;height:auto;opacity:.75;filter:'alpha(opacity=75)';-ms-filter:'alpha(opacity=75)'}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;right:0;bottom:0;left:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;border-radius:16px}.mCSB_scrollTools .mCSB_dragger{z-index:1;width:100%;height:30px;cursor:pointer}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;text-align:center;border-radius:16px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonUp{position:absolute;display:block;overflow:hidden;width:100%;height:20px;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{top:auto;right:0;bottom:0;left:0;width:auto;height:16px}.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{left:0;width:30px;height:100%}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{position:absolute;display:block;overflow:hidden;width:20px;height:100%;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;width:auto;height:auto;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{box-sizing:border-box;padding-right:30px;padding-bottom:30px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar{transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:0;filter:'alpha(opacity=0)';-ms-filter:'alpha(opacity=0)'}.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox~.mCSB_scrollTools,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover~.mCSB_scrollTools,.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox~.mCSB_scrollTools.mCSB_scrollTools_onDrag{opacity:1;filter:'alpha(opacity=100)';-ms-filter:'alpha(opacity=100)'}.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.4);filter:'alpha(opacity=40)';-ms-filter:'alpha(opacity=40)'}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75);filter:'alpha(opacity=75)';-ms-filter:'alpha(opacity=75)'}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85);filter:'alpha(opacity=85)';-ms-filter:'alpha(opacity=85)'}.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9);filter:'alpha(opacity=90)';-ms-filter:'alpha(opacity=90)'}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp{opacity:.4;background-image:url(mCSB_buttons.png);background-repeat:no-repeat;filter:'alpha(opacity=40)';-ms-filter:'alpha(opacity=40)'}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -20px}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover,.mCSB_scrollTools .mCSB_buttonUp:hover{opacity:.75;filter:'alpha(opacity=75)';-ms-filter:'alpha(opacity=75)'}.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active,.mCSB_scrollTools .mCSB_buttonUp:active{opacity:.9;filter:'alpha(opacity=90)';-ms-filter:'alpha(opacity=90)'}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:rgba(0,0,0,.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;border-radius:1px;background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;border-radius:1px;background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{border-radius:1px;background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{border-radius:1px;background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;border-radius:2px;background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;border-radius:2px;background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{border-radius:2px;background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{border-radius:2px;background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:0 -1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail{opacity:.3;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==);background-repeat:repeat-y;filter:'alpha(opacity=30)';-ms-filter:'alpha(opacity=30)'}.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=)}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-image:linear-gradient(to right,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-repeat:repeat-y}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-image:linear-gradient(to bottom,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-repeat:repeat-x}.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d-dark.mCSB_scrollTools,.mCS-3d.mCSB_scrollTools{opacity:1;filter:'alpha(opacity=30)';-ms-filter:'alpha(opacity=30)'}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{border-radius:16px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,.2);box-shadow:inset 1px 0 1px rgba(0,0,0,.5),inset -1px 0 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.5),inset 0 -1px 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);box-shadow:inset 1px 0 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools{opacity:1;filter:'alpha(opacity=30)';-ms-filter:'alpha(opacity=30)'}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{border-radius:7px}.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCS-3d-thick.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal,.mCS-3d-thick.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:absolute;top:0;right:0;bottom:0;left:0;width:12px;height:auto;margin:2px;border-radius:5px;box-shadow:inset 1px 0 0 rgba(255,255,255,.4)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:auto;height:12px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4),inset -1px 0 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4),inset 0 -1px 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:auto;left:0}.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.2);filter:'alpha(opacity=20)';-ms-filter:'alpha(opacity=20)'}.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.5);filter:'alpha(opacity=50)';-ms-filter:'alpha(opacity=50)'}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.2);filter:'alpha(opacity=20)';-ms-filter:'alpha(opacity=20)'}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.5);filter:'alpha(opacity=50)';-ms-filter:'alpha(opacity=50)'}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:absolute;top:0;right:0;bottom:0;left:0;width:6px;height:auto;margin:3px 5px}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{position:absolute;top:0;right:0;bottom:0;left:0;width:auto;height:6px;margin:5px 3px}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail{box-sizing:border-box;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,.2);background-color:transparent}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@keyframes translateright{0%{right:-50px;display:none;color:transparent}30%{right:150px;display:block;color:transparent}100%{right:200px;color:#fff}}@keyframes translateleft{0%{right:200px;display:block;color:#fff}30%{right:150px;color:transparent}100%{right:-200px;display:none;color:transparent}}@keyframes reducH{0%{font-size:12vw;line-height:5rem;color:transparent;-webkit-text-stroke:2px #000}70%{color:#000;-webkit-text-stroke:1px #000}100%{font-size:3rem;line-height:5rem;color:#000;-webkit-text-stroke:0 #000}}@keyframes translateY{0%{transform:translateY(0);opacity:1}100%{transform:translateY(-20px);opacity:0}}@keyframes showcatlist{0%{width:0;opacity:1;box-shadow:0 0 0 0 #000}100%{width:100%;opacity:1;box-shadow:0 -2px 0 -2px #000}}@keyframes showborder{0%{width:0;background:#000}100%{width:100%;background:#000}}@keyframes ultranslate{0%{transform:translateX(0);opacity:0}100%{transform:translateX(10px);opacity:1}}@keyframes showcard{0%{opacity:0}100%{opacity:1}}body,html{overflow:hidden}.card{width:calc((100% / 3) - (10px));margin-bottom:7px}.card .card-header{display:-ms-inline-flexbox;display:inline-flex;width:100%;-ms-flex-align:baseline;align-items:baseline}.card .card-header>div{margin-right:5px}.contact{position:fixed;z-index:999;top:0;right:0;width:90px;height:90px;transition:width .5s ease,margin .5s}.contact>svg{animation:rotation 12s infinite linear}.contact h3{position:fixed;z-index:999;top:34px;right:37px;cursor:pointer;transition:transform .5s ease;transform:rotate(45deg);color:#fff}.contact .txt{position:fixed;right:-200%;left:200%;-webkit-transition:color .5s ease,right 0s;transition:color .5s ease,right 0s;text-align:right;color:transparent}.contact .txt p{font-size:1.5rem;line-height:2rem;margin-top:1rem}.contact .txt p a{display:inline-block;width:20px;height:20px}.contact .txt p em{font-size:1rem}.contact .txt p:nth-last-of-type(2){font-size:1.2rem;line-height:1.6rem}.contact.open{width:2000px;height:auto;margin:-550px;transition:width .5s ease,margin .5s}.contact.open .txt{position:fixed;top:50px;right:70px;left:auto;width:650px;transition:color .5s ease,right 0s;text-align:right;color:#fff}.contact.open .txt .reso>div{transition:opacity .5s .5s ease;opacity:1}.contact.open h3{transition:transform .5s ease;transform:rotate(0);color:transparent}.contact.close{width:90px;height:90px}.contact.close .txt{position:fixed;right:-200%;transition:color .5s ease,right 0s;text-align:right;color:transparent}.contact.close h3{transition:transform .5s ease;transform:rotate(45deg)}header{position:relative;height:100vh;margin-right:10px}header:after{position:absolute;bottom:0;width:0;content:''}header .head{width:100%;padding-top:22px}header .head nav{position:relative;width:calc((100% / 3) * 2)}header .head nav h2{position:absolute}header .works-mea{position:absolute;bottom:20px;display:-ms-inline-flexbox;display:inline-flex;width:calc((100%) + (10px));height:50%}header .works-mea .card{height:calc(100% - 30px)}header .works-mea .card .card-image{overflow:hidden;width:100%;height:100%}header .works-mea .card .card-image a{display:block;height:100%}header .works-mea .card .card-image a img{width:100%;object-fit:cover}header .works-mea .card:first-child{margin-right:10px}header .works-mea .card:last-child{margin-left:10px}header .scroll{position:absolute;bottom:0;width:100%;height:20px}header .scroll p svg{display:block;margin:auto}.item #start{margin-top:115px}.item #start .cat-list{display:none}.down header,.item header{position:fixed;z-index:999;top:0;width:calc(100% - 20px);height:90px;background:#fff}.down header:after,.item header:after{width:100%;height:1px;background:#000}.down header .head nav,.item header .head nav{width:calc((100% / 6));min-width:300px}.down header .head nav path,.item header .head nav path{fill:#000!important}.down header .head nav h2,.item header .head nav h2{transition:2s transform ease;transform:translateX(-150%)}.down header .works-mea,.item header .works-mea{bottom:65px;transition:0s 1s bottom}.down header .works-mea .card,.item header .works-mea .card{margin-top:-20px;opacity:0}.down .scroll,.item .scroll{margin-bottom:-20px;transition:1s all ease;opacity:0}.down header{transition:1s 1s height ease}.down header:after{transition:1.5s 2s width ease}.down header .head nav{transition:1s 1s width ease}.down header .head nav path{transition:1s 1s fill ease}.down header .works-mea{bottom:65px;transition:0s 1s bottom}.down header .works-mea .card{margin-top:-20px;opacity:0}.down header .works-mea .card:nth-child(1){transition:.5s .3s all ease}.down header .works-mea .card:nth-child(2){transition:.5s .5s all ease}.down header .works-mea .card:nth-child(3){transition:.5s .7s all ease}.cat-list{position:relative;display:-ms-inline-flexbox;display:inline-flex;width:calc(100% - 10px);height:50px;margin-bottom:20px}.cat-list:after{position:absolute;bottom:0;display:block;width:0;content:''}.cat-list>ul{margin:auto 0 auto 10px}.cat-list>ul label{margin-right:10px;margin-left:-10px;opacity:0}.cat-list>ul label a::after{position:absolute;width:5px;content:' '}.cat-list>ul label a.active::after,.cat-list>ul label a:hover::after{content:'\002022'}#page-wrapper{z-index:1000;height:100%;padding-left:10px}.scroll{cursor:pointer}.full-works .card{margin-top:30px;opacity:0}.down #start{height:100%;margin-top:90px}.down .cat-list:after{width:100%;height:1px;background:#000}.down .cat-list>ul label{margin-left:0;opacity:1}.down .full-works .card{margin-top:0;transition:1.5s opacity 1s ease,1.5s margin-top 1s ease;opacity:1}.down .cat-list:after{transition:2s 1.5s width ease}.down .cat-list>ul label{transition:2s 1.5s all ease}.item #start{width:calc(100% - 10px)}#items .header-item{display:-ms-inline-flexbox;display:inline-flex;width:100%;margin-bottom:1rem;-ms-flex-pack:justify;justify-content:space-between}#items .header-item .info{width:calc(100% / 3)}#items .header-item .info .title{display:-ms-flexbox;display:flex}#items .header-item .info .title h2{text-transform:uppercase}#items .header-item .info .title>*{margin-right:.5rem}#items .header-item .info .content{margin-top:1rem}#items .header-item .prev-next{position:relative;width:calc(100% / 3)}#items .header-item .prev-next .btn-info{position:absolute;top:20px;left:-80px;width:250px;transform:rotate(-17deg)}#items .top{width:100%;margin-bottom:10px;cursor:pointer;text-align:center}.img-card{width:calc((100% / 3) - (10px));margin-bottom:10px}@media screen and (max-width:1024px){.card{width:calc((100% / 2) - 10px)}.works-mea .card:nth-child(3){display:none}#items .header-item .info{width:calc(100% / 2)}.img-card{width:calc((100% / 2) - 5px)}}@media screen and (orientation:landscape) and (max-width:812px){.blog header .head nav{margin-top:50vh;transform:translate(0,-100%)}.blog .down header .head nav{margin-top:0!important;transition:all .5s 1s ease;transform:translate(0)!important}.blog .works-mea{display:none!important}}@media screen and (max-width:414px){.down header,.item header{height:70px}header .head{padding-top:10px}header .head nav{width:80%!important;min-width:80%!important}header .contact{width:70px;height:70px}header .contact h3{top:24px;right:27px}header .contact.open .txt{right:25px;overflow-y:auto;width:calc(100% - 30px);height:calc(100% - 50px)}header .contact.open .txt p{font-size:1rem;line-height:1.4rem}header .contact.open .txt p:nth-last-of-type(2){font-size:.8rem;line-height:1.2rem}header .contact.open .txt p:nth-last-of-type(2) a{width:15px;margin-left:5px}header .contact.open .txt p em{font-size:.5rem}header .contact.close{width:70px;height:70px}header .works-mea .card{width:100%}header .works-mea .card:nth-child(2){display:none}header .works-mea .card:nth-child(3){display:none}.blog h2{font-size:6vw;line-height:9vw}.down #start,.item #start{margin-top:70px}.card{width:calc(100% - 10px)}#items .header-item{flex-direction:column-reverse;-ms-flex-direction:column-reverse}#items .header-item>div{width:100%!important}#items .header-item>.info{margin-top:25px}#items .header-item>.info .title{display:block}#items .header-item>.info .title>a{margin-right:0}#items .header-item .prev-next .btn-info{display:none}.img-card{width:calc(100%)}.item #items{padding-top:25px}} \ No newline at end of file diff --git a/user/themes/gilles_acezat/images/contact.svg b/user/themes/gilles_acezat/images/contact.svg index cc5d6f3..d84925e 100644 --- a/user/themes/gilles_acezat/images/contact.svg +++ b/user/themes/gilles_acezat/images/contact.svg @@ -9,9 +9,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="90.390999" - height="87.431" - viewBox="0 0 23.915951 23.132786" + width="100" + height="96.724998" + viewBox="0 0 26.458332 25.591823" version="1.1" id="svg1109" inkscape:version="0.92.4 5da689c313, 2019-01-14" @@ -26,16 +26,16 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.35" - inkscape:cx="-105.71429" + inkscape:cx="-611.42858" inkscape:cy="560" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" units="px" inkscape:window-width="1920" - inkscape:window-height="1006" + inkscape:window-height="1029" inkscape:window-x="0" - inkscape:window-y="0" + inkscape:window-y="22" inkscape:window-maximized="1" /> @@ -53,7 +53,7 @@ inkscape:label="Calque 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-273.86719)"> + transform="translate(0,-271.40814)"> + inkscape:transform-center-x="1.8058652e-06" + transform="matrix(0.95809007,0.5531536,-0.5531536,0.95809007,-439.48605,-6.6948511)" + inkscape:transform-center-y="9.361659e-06" /> diff --git a/user/themes/gilles_acezat/images/favicon.png b/user/themes/gilles_acezat/images/favicon.png index 7db6941..da0fed7 100644 Binary files a/user/themes/gilles_acezat/images/favicon.png and b/user/themes/gilles_acezat/images/favicon.png differ diff --git a/user/themes/gilles_acezat/images/fb.svg b/user/themes/gilles_acezat/images/fb.svg new file mode 100644 index 0000000..d94af45 --- /dev/null +++ b/user/themes/gilles_acezat/images/fb.svg @@ -0,0 +1,68 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/user/themes/gilles_acezat/images/insta.svg b/user/themes/gilles_acezat/images/insta.svg new file mode 100644 index 0000000..31eda40 --- /dev/null +++ b/user/themes/gilles_acezat/images/insta.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/user/themes/gilles_acezat/js/site.js b/user/themes/gilles_acezat/js/site.js index 9817f11..afbae23 100644 --- a/user/themes/gilles_acezat/js/site.js +++ b/user/themes/gilles_acezat/js/site.js @@ -54,22 +54,22 @@ function filteritem() { } function contact() { - var $contact = $('header .contact'); + var $contact = $('header .contact h3'); $contact.on('click', function() { - if ($(this).hasClass('open')) { - $(this).removeClass('open'); - $(this).addClass('close'); + if ($(this).parent(".contact").hasClass('open')) { + $(this).parent(".contact").removeClass('open'); + $(this).parent(".contact").addClass('close'); } else { - $(this).addClass('open'); - $(this).removeClass('close'); + $(this).parent(".contact").addClass('open'); + $(this).parent(".contact").removeClass('close'); } }) } var $page = $('#page-wrapper.blog'); function customscroll($page_item) { - var $page_item = $("body.blog #start, body.item"); + var $page_item = $("#page-wrapper.item"); $page_item.mCustomScrollbar({ theme: "dark", @@ -85,20 +85,21 @@ function customscroll($page_item) { } }); - $("body").mCustomScrollbar({ + $("#page-wrapper.blog").mCustomScrollbar({ theme: "dark", scrollbarPosition: "outside", callbacks: { whileScrolling: function() { var pct = this.mcs.topPct; - if (pct < 1) { + if ( ($page.hasClass('down')) ) { } else { - $page.addClass("down"); - $page_item.mCustomScrollbar("disable",true); + $("#page-wrapper").addClass("down"); + $(this).mCustomScrollbar("disable",true); + setTimeout(function(){ + console.log('time'); + $("#page-wrapper").mCustomScrollbar("update"); + }, 500); } - setTimeout(function(){ - $page_item.mCustomScrollbar("update"); - }, 2000); } } }); @@ -111,34 +112,10 @@ function clickscroll() { }) } -function transitionPage() { - // var $links = $('a'); - // $links.on('click', function(e) { - // var $link = $(this).attr("href"); - // setTimeout(function() { - // window.location.href = $link; - // }, 10000); - // - // $links.parents('#top').fadeOut() - // }) - - $("a:not(.filter)").click(function(e) { - var link = $(this).attr("href"); - $(this).parents('#top').fadeOut() - setTimeout(function() { - window.location.href = link; - }, 600); - e.preventDefault(); -}); - $('#top').fadeIn(1000).removeClass('hidden'); -} - jQuery(document).ready(function($) { masonry(); filteritem(); contact(); customscroll(); clickscroll(); - transitionPage(); - // $('#top').fadeIn(); }); diff --git a/user/themes/gilles_acezat/js/templates/blog.html.twig b/user/themes/gilles_acezat/js/templates/blog.html.twig new file mode 100644 index 0000000..6626e1e --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/blog.html.twig @@ -0,0 +1,23 @@ +{% extends 'partials/base.html.twig' %} +{% set blog_image = page.media.images[page.header.hero_image] ?: page.media.images|first %} +{% set collection = page.collection() %} +{% set blog = page.find(header_var('blog_url')|defined(theme_var('blog-page'))) %} +{% set show_breadcrumbs = header_var('show_breadcrumbs', [page, blog])|defined(true) %} +{% set show_sidebar = header_var('show_sidebar', [page, blog])|defined(true) %} +{% set show_pagination = header_var('show_pagination', [page, blog])|defined(true) %} + + +{% block body %} +
+ {% embed 'partials/layout.html.twig' with {blog: page} %} + {% block item %} +
+ {% for child in collection if child.template == 'item' %} + {% include 'partials/blog-list-item.html.twig' with {blog: page, page: child} %} + {% endfor %} +
+ {% endblock %} + {% endembed %} +
+ +{% endblock %} diff --git a/user/themes/gilles_acezat/js/templates/default.html.twig b/user/themes/gilles_acezat/js/templates/default.html.twig new file mode 100644 index 0000000..70754ca --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/default.html.twig @@ -0,0 +1,17 @@ +{% block content %} +
+ {{ page.content|raw }} +
+
+ + logo facebook + +
+
+ + logo instagram + +
+
+
+{% endblock %} diff --git a/user/themes/gilles_acezat/js/templates/error.html.twig b/user/themes/gilles_acezat/js/templates/error.html.twig new file mode 100644 index 0000000..5ecf0ae --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/error.html.twig @@ -0,0 +1,12 @@ +{% extends 'partials/base.html.twig' %} + +{% block content %} +
+
+

{{ 'PLUGIN_ERROR.ERROR'|t }} {{ page.header.http_response_code }}

+

+ {{ page.content|raw }} +

+
+
+{% endblock %} diff --git a/user/themes/gilles_acezat/js/templates/forms/fields/checkbox/checkbox.html.twig b/user/themes/gilles_acezat/js/templates/forms/fields/checkbox/checkbox.html.twig new file mode 100644 index 0000000..ee60e71 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/forms/fields/checkbox/checkbox.html.twig @@ -0,0 +1,32 @@ +{% extends "forms/field.html.twig" %} + +{% block label %} +{% endblock %} + +{% block input %} + {% set id = field.id|default(field.name) ~ '-' ~ key %} +
+ +
+{% endblock %} diff --git a/user/themes/gilles_acezat/js/templates/forms/fields/checkboxes/checkboxes.html.twig b/user/themes/gilles_acezat/js/templates/forms/fields/checkboxes/checkboxes.html.twig new file mode 100644 index 0000000..8674ab8 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/forms/fields/checkboxes/checkboxes.html.twig @@ -0,0 +1,44 @@ +{% extends "forms/field.html.twig" %} + +{% set originalValue = value %} +{% set value = (value is null ? field.default : value) %} +{% if field.use == 'keys' and field.default %} + {% set value = field.default|merge(value) %} +{% endif %} + +{% block global_attributes %} + {{ parent() }} + data-grav-keys="{{ field.use == 'keys' ? 'true' : 'false' }}" + data-grav-field-name="{{ (scope ~ field.name)|fieldName }}" +{% endblock %} + +{% block input %} + {% for key, text in field.options %} + + {% set id = field.id|default(field.name) ~ '-' ~ key %} + {% set name = field.use == 'keys' ? key : id %} + {% set val = field.use == 'keys' ? '1' : key %} + {% set checked = (field.use == 'keys' ? value[key] : key in value) %} + {% set help = (key in field.help_options|keys ? field.help_options[key] : false) %} + +
+ +
+ {% endfor %} +{% endblock %} diff --git a/user/themes/gilles_acezat/js/templates/forms/fields/radio/radio.html.twig b/user/themes/gilles_acezat/js/templates/forms/fields/radio/radio.html.twig new file mode 100644 index 0000000..5698f36 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/forms/fields/radio/radio.html.twig @@ -0,0 +1,26 @@ +{% extends "forms/field.html.twig" %} + +{% set originalValue = value %} +{% set value = (value is null ? field.default : value) %} + +{% block input %} + {% for key, text in field.options %} + {% set id = field.id|default(field.name) ~ '-' ~ key %} + +
+ +
+ {% endfor %} +{% endblock %} diff --git a/user/themes/gilles_acezat/js/templates/forms/fields/switch/switch.html.twig b/user/themes/gilles_acezat/js/templates/forms/fields/switch/switch.html.twig new file mode 100644 index 0000000..24d5609 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/forms/fields/switch/switch.html.twig @@ -0,0 +1,3 @@ +{% set form_field_checkbox_classes = 'form-switch' %} +{% extends "forms/fields/checkbox/checkbox.html.twig" %} + diff --git a/user/themes/gilles_acezat/js/templates/item.html.twig b/user/themes/gilles_acezat/js/templates/item.html.twig new file mode 100644 index 0000000..561248a --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/item.html.twig @@ -0,0 +1,40 @@ +{% extends 'partials/base.html.twig' %} +{% set blog = page.find(header_var('blog_url')|defined(theme_var('blog-page'))) %} +{% set show_breadcrumbs = header_var('show_breadcrumbs', [page, blog])|defined(true) %} +{% set show_sidebar = header_var('show_sidebar', [page, blog])|defined(true) %} +{% set show_pagination = header_var('show_pagination', [page, blog])|defined(true) %} +{% set hero_image_name = page.header.hero_image %} + +{% block hero %} + {% if hero_image_name %} + {% set hero_image = page.media[hero_image_name] %} + {% set content %} +

{{ page.title }}

+

{{ page.header.subtitle }}

+ {% include 'partials/blog/date.html.twig' %} + {% include 'partials/blog/taxonomy.html.twig' %} + {% endset %} + {% include 'partials/hero.html.twig' with {id: 'blog-hero'} %} + + {% endif %} +{% endblock %} + +{% block body %} +
+
+ + {% if show_breadcrumbs and config.plugins.breadcrumbs.enabled %} + {% include 'partials/breadcrumbs.html.twig' %} + {% endif %} + + {% embed 'partials/layout.html.twig' %} + {% block item %} + {% include 'partials/blog-item.html.twig' %} + {% endblock %} + {% block sidebar %} + {% include 'partials/sidebar.html.twig' %} + {% endblock %} + {% endembed %} +
+
+{% endblock %} diff --git a/user/themes/gilles_acezat/js/templates/macros/macros.html.twig b/user/themes/gilles_acezat/js/templates/macros/macros.html.twig new file mode 100644 index 0000000..8f19fba --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/macros/macros.html.twig @@ -0,0 +1,8 @@ +{% macro nav_loop(page) %} + {% import _self as macros %} + + {% for p in page.children.visible if p.template == 'default' %} + {% set active_page = (p.active or p.activeChild) ? ' class="active"' : '' %} + {% include 'default.html.twig' with {blog: page, page: p} %} + {% endfor %} +{% endmacro %} diff --git a/user/themes/gilles_acezat/js/templates/modular.html.twig b/user/themes/gilles_acezat/js/templates/modular.html.twig new file mode 100644 index 0000000..1886505 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/modular.html.twig @@ -0,0 +1,42 @@ +{% extends 'partials/base.html.twig' %} + +{% macro pageLinkName(text) %}{{ text|lower|replace({' ':'_'}) }}{% endmacro %} + +{% import _self as macro %} + +{% set show_onpage_menu = header.onpage_menu == true or header.onpage_menu is null %} + +{% block header_navigation %} + {% if show_onpage_menu %} + + {% else %} + {{ parent() }} + {% endif %} +{% endblock %} + +{% block hero %} + {% for module in page.collection() if module.template == 'modular/hero' %} +
+ {{ module.content|raw }} + {% endfor %} +{% endblock %} + +{% block body %} + {% for module in page.collection() if module.template != 'modular/hero' %} +
+ {{ module.content|raw }} + {% endfor %} +{% endblock %} diff --git a/user/themes/gilles_acezat/js/templates/modular/features.html.twig b/user/themes/gilles_acezat/js/templates/modular/features.html.twig new file mode 100644 index 0000000..46fe7f3 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/modular/features.html.twig @@ -0,0 +1,30 @@ +{% set grid_size = theme_var('grid-size') %} +{% set columns = page.header.class == 'small' ? 'col-3 col-md-4 col-sm-6' : 'col-4 col-md-6 col-sm-12' %} +
+
+
+ + {{ content|raw }} + +
+ {% for feature in page.header.features %} +
+ {% if feature.url %}{% endif %} +
+ + {% if feature.header %} +
{{ feature.header }}
+ {% endif %} +
+ {% if feature.url %}
{% endif %} +
+ {% if feature.text %} +

{{ feature.text }}

+ {% endif %} +
+
+ {% endfor %} +
+
+
+
diff --git a/user/themes/gilles_acezat/js/templates/modular/hero.html.twig b/user/themes/gilles_acezat/js/templates/modular/hero.html.twig new file mode 100644 index 0000000..7dbba44 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/modular/hero.html.twig @@ -0,0 +1,4 @@ +{% set grid_size = theme_var('grid-size') %} +{% set hero_image = page.header.hero_image ? page.media[page.header.hero_image] : page.media.images|first %} + +{% include 'partials/hero.html.twig' %} diff --git a/user/themes/gilles_acezat/js/templates/modular/text.html.twig b/user/themes/gilles_acezat/js/templates/modular/text.html.twig new file mode 100644 index 0000000..fcf2570 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/modular/text.html.twig @@ -0,0 +1,23 @@ +{% set grid_size = theme_var('grid-size') %} +{% set image = page.media.images|first %} + +
+
+
+ {% if image %} +
+ {{ content|raw }} +
+
+ {% if image %} + {{ image.html|raw }} + {% endif %} +
+ {% else %} +
+ {{ content|raw }} +
+ {% endif %} +
+
+
diff --git a/user/themes/gilles_acezat/js/templates/partials/archives.html.twig b/user/themes/gilles_acezat/js/templates/partials/archives.html.twig new file mode 100644 index 0000000..af862d3 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/archives.html.twig @@ -0,0 +1,13 @@ + diff --git a/user/themes/gilles_acezat/js/templates/partials/base.html.twig b/user/themes/gilles_acezat/js/templates/partials/base.html.twig new file mode 100644 index 0000000..f251ebe --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/base.html.twig @@ -0,0 +1,177 @@ +{% set body_classes = body_class(['header-fixed', 'header-animated', 'header-dark', 'header-transparent', 'sticky-footer']) %} +{% set grid_size = theme_var('grid-size') %} +{% set compress = theme_var('production-mode') ? '.min.css' : '.css' %} + + + +{% block head %} + + {% if header.title %}{{ header.title|e('html') }} | {% endif %}{{ site.title|e('html') }} + + + + {% include 'partials/metadata.html.twig' %} + + + + + {% block stylesheets %} + {% do assets.addCss('theme://css-compiled/theme'~compress) %} + {% endblock %} + {{ assets.css()|raw }} + + {% block javascripts %} + {% do assets.addJs('jquery', 101) %} + {% do assets.addJs('theme://js/jquery.easing.1.3.js', {group:'bottom'}) %} + {% do assets.addJs('theme://js/imagesloaded.pkgd.min.js', {group:'bottom'}) %} + {% do assets.addJs('theme://js/masonry.filter.js', {group:'bottom'}) %} + {% do assets.addJs('theme://js/masonry.pkgd.min.js', {group:'bottom'}) %} + {% do assets.addJs('theme://js/jquery.mCustomScrollbar.js', {group:'bottom'}) %} + {% do assets.addJs('theme://js/jquery.mousewheel.min.js', {group:'bottom'}) %} + {% do assets.addJs('theme://js/site.js', {group:'bottom'}) %} + {% endblock %} + + {{ assets.js()|raw }} + +{% endblock head %} + + + +
+ {% block header %} +
+
+
+ + + + +

Contact

+ {% include 'partials/navigation.html.twig' %} +
+ +
+
+ {% for child in collection %} + {% set mea = child.header.mea == 'true' %} + {% if mea %} + {% include 'partials/blog-list-mea.html.twig' with {blog: page, page: child} %} + {% endif %} + {% endfor %} +
+
+

+ + + + +

+
+
+ {% endblock %} + +
+
+
    + {% include 'partials/taxonomylist.html.twig' with {base_url: my_url, taxonomy: 'category', children_only: true} %} +
+
+ + {% block body %} + {% block content %}{% endblock %} + {% endblock %} +
+
+ +{% block bottom %} + {{ assets.js('bottom')|raw }} +{% endblock %} + + + diff --git a/user/themes/gilles_acezat/js/templates/partials/blog-item.html.twig b/user/themes/gilles_acezat/js/templates/partials/blog-item.html.twig new file mode 100644 index 0000000..49812c4 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/blog-item.html.twig @@ -0,0 +1,101 @@ + {% if not hero_image_name %} +
+
+
+ {% include 'partials/blog/title.html.twig' with {title_level: 'h2'} %} + {% if page.header.subtitle %} +

{{ page.header.subtitle }}

+ {% endif %} + {% include 'partials/blog/category.html.twig' %} + {% include 'partials/blog/date.html.twig' %} +
+
+ {% include 'partials/blog/taxonomy.html.twig' %} +
+ {% endif %} + +
+
+ {{ page.content|raw }} +
+
+
+ + +
+ +
+ {% for image in page.media.images %} +
+ {{ image.html }} +
+ {% endfor %} +
+ +
+ + + + + + +
diff --git a/user/themes/gilles_acezat/js/templates/partials/blog-list-item.html.twig b/user/themes/gilles_acezat/js/templates/partials/blog-list-item.html.twig new file mode 100644 index 0000000..5f5a9de --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/blog-list-item.html.twig @@ -0,0 +1,36 @@ +{% for category in page.taxonomy.category %} +
+ + {% set image = page.media.images|first %} + {% if image %} + + {% endif %} + +
+
+ {% include 'partials/blog/title.html.twig' with {title_level: 'h5'} %} +
+ + + {% if page.taxonomy.category %} +
+ {% include 'partials/blog/category.html.twig' %} +
+ {% endif %} + + {% if page.date %} +
+ {% include 'partials/blog/date.html.twig' %} +
+ {% endif %} +
+ + {% if page.taxonomy.tag %} + + {% endif %} +
+{% endfor %} diff --git a/user/themes/gilles_acezat/js/templates/partials/blog-list-mea.html.twig b/user/themes/gilles_acezat/js/templates/partials/blog-list-mea.html.twig new file mode 100644 index 0000000..e5bdd49 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/blog-list-mea.html.twig @@ -0,0 +1,33 @@ +{% for category in page.taxonomy.category %} +
+ +
+ {{page.header.meaimg}} +
+ +
+
+ {% include 'partials/blog/title.html.twig' with {title_level: 'h5'} %} +
+ + + {% if page.taxonomy.category %} +
+ {% include 'partials/blog/category.html.twig' %} +
+ {% endif %} + + {% if page.date %} +
+ {% include 'partials/blog/date.html.twig' %} +
+ {% endif %} +
+ + {% if page.taxonomy.tag %} + + {% endif %} +
+{% endfor %} diff --git a/user/themes/gilles_acezat/js/templates/partials/blog/category.html.twig b/user/themes/gilles_acezat/js/templates/partials/blog/category.html.twig new file mode 100644 index 0000000..c794f2c --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/blog/category.html.twig @@ -0,0 +1,7 @@ +{% if page.taxonomy.category %} + + {% for category in page.taxonomy.category %} + {{ category }} + {% endfor %} + +{% endif %} diff --git a/user/themes/gilles_acezat/js/templates/partials/blog/date.html.twig b/user/themes/gilles_acezat/js/templates/partials/blog/date.html.twig new file mode 100644 index 0000000..f4e669b --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/blog/date.html.twig @@ -0,0 +1,3 @@ + diff --git a/user/themes/gilles_acezat/js/templates/partials/blog/page-summary.html.twig b/user/themes/gilles_acezat/js/templates/partials/blog/page-summary.html.twig new file mode 100644 index 0000000..3c8fb7f --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/blog/page-summary.html.twig @@ -0,0 +1,8 @@ +
+ {% if page.summary != page.content %} + {{ page.summary|raw }} + {% else %} + {{ page.content|raw }} + {% endif %} +
+ diff --git a/user/themes/gilles_acezat/js/templates/partials/blog/taxonomy.html.twig b/user/themes/gilles_acezat/js/templates/partials/blog/taxonomy.html.twig new file mode 100644 index 0000000..4160634 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/blog/taxonomy.html.twig @@ -0,0 +1,7 @@ +{% if page.taxonomy.tag %} + + {% for tag in page.taxonomy.tag %} + {{ tag }} + {% endfor %} + +{% endif %} diff --git a/user/themes/gilles_acezat/js/templates/partials/blog/title.html.twig b/user/themes/gilles_acezat/js/templates/partials/blog/title.html.twig new file mode 100644 index 0000000..ca41ec7 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/blog/title.html.twig @@ -0,0 +1,11 @@ +{% set title_level = title_level ?: 'h2' %} +{% if page.header.link %} +<{{ title_level }}> + {% if page.header.continue_link is not same as(false) %} + + {% endif %} + {{ page.title }} + +{% else %} + <{{ title_level }}>{{ page.title }} +{% endif %} diff --git a/user/themes/gilles_acezat/js/templates/partials/footer.html.twig b/user/themes/gilles_acezat/js/templates/partials/footer.html.twig new file mode 100644 index 0000000..15ea155 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/footer.html.twig @@ -0,0 +1,5 @@ + diff --git a/user/themes/gilles_acezat/js/templates/partials/form-messages.html.twig b/user/themes/gilles_acezat/js/templates/partials/form-messages.html.twig new file mode 100644 index 0000000..69da7f9 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/form-messages.html.twig @@ -0,0 +1,6 @@ +{% if form.message %} + {% set inline_errors = form.inline_errors is not null ? form.inline_errors : config.plugins.form.inline_errors(false) %} + {% set status_mapping = {'success':'green', 'error': 'red', 'warning': 'yellow'} %} + {% set message = inline_errors and form.messages ? "FORM.VALIDATION_FAIL"|t : form.message %} +
{{ message|raw }}
+{% endif %} \ No newline at end of file diff --git a/user/themes/gilles_acezat/js/templates/partials/hero.html.twig b/user/themes/gilles_acezat/js/templates/partials/hero.html.twig new file mode 100644 index 0000000..f89597c --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/hero.html.twig @@ -0,0 +1,7 @@ +
+
+
+ {{ content|raw }} +
+ +
\ No newline at end of file diff --git a/user/themes/gilles_acezat/js/templates/partials/layout.html.twig b/user/themes/gilles_acezat/js/templates/partials/layout.html.twig new file mode 100644 index 0000000..fe485d2 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/layout.html.twig @@ -0,0 +1,3 @@ +
+ {% block item %}{% endblock %} +
diff --git a/user/themes/gilles_acezat/js/templates/partials/logo.html.twig b/user/themes/gilles_acezat/js/templates/partials/logo.html.twig new file mode 100644 index 0000000..57175cc --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/logo.html.twig @@ -0,0 +1,9 @@ +{% set logo = theme_var(mobile ? 'custom_logo_mobile' : 'custom_logo') %} + +{% if logo %} + {% set logo_file = (logo|first).name %} + {{ site.name }} +{% else %} + {% include('@images/grav-logo.svg') %} +{% endif %} + \ No newline at end of file diff --git a/user/themes/gilles_acezat/js/templates/partials/messages.html.twig b/user/themes/gilles_acezat/js/templates/partials/messages.html.twig new file mode 100644 index 0000000..662333d --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/messages.html.twig @@ -0,0 +1,17 @@ +{% set type_mapping = {'info':'success', 'error': 'error', 'warning': 'warning'} %} +{% set icon_mapping = {'info':'checkmark', 'error':'wrong', 'warning':'information'} %} + +{% if grav.messages.all %} +
+ {% for message in grav.messages.fetch %} + + {% set scope = message.scope|e %} + {% set type = type_mapping[scope] %} + {% set icon = icon_mapping[scope] %} + +
+ {{ message.message|raw }} +
+ {% endfor %} +
+{% endif %} \ No newline at end of file diff --git a/user/themes/gilles_acezat/js/templates/partials/navigation.html.twig b/user/themes/gilles_acezat/js/templates/partials/navigation.html.twig new file mode 100644 index 0000000..400c9c7 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/navigation.html.twig @@ -0,0 +1,3 @@ +{% import 'macros/macros.html.twig' as macros %} + + {{ macros.nav_loop(pages) }} diff --git a/user/themes/gilles_acezat/js/templates/partials/relatedpages.html.twig b/user/themes/gilles_acezat/js/templates/partials/relatedpages.html.twig new file mode 100644 index 0000000..c2e4daf --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/relatedpages.html.twig @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/user/themes/gilles_acezat/js/templates/partials/sidebar.html.twig b/user/themes/gilles_acezat/js/templates/partials/sidebar.html.twig new file mode 100644 index 0000000..ea6a34c --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/sidebar.html.twig @@ -0,0 +1,43 @@ +{% set feed_url = blog.url == '/' or blog.url == base_url_relative ? (base_url_relative~'/'~blog.slug) : blog.url %} +{% set new_base_url = blog.url == '/' ? '' : blog.url %} + +{% if config.plugins.simplesearch.enabled %} + +{% endif %} +{% if config.plugins.relatedpages.enabled and related_pages|length > 0 %} + +{% endif %} +{% if config.plugins.random.enabled %} + +{% endif %} + +{{ page.find('/modules/sidebar').content|raw }} + +{% if config.plugins.taxonomylist.enabled %} + +{% endif %} +{% if config.plugins.archives.enabled %} + +{% endif %} +{% if config.plugins.feed.enabled %} + +{% endif %} diff --git a/user/themes/gilles_acezat/js/templates/partials/taxonomylist.html.twig b/user/themes/gilles_acezat/js/templates/partials/taxonomylist.html.twig new file mode 100644 index 0000000..62bf577 --- /dev/null +++ b/user/themes/gilles_acezat/js/templates/partials/taxonomylist.html.twig @@ -0,0 +1,15 @@ +{% set taxlist = children_only is defined ? taxonomylist.getChildPagesTags() : taxonomylist.get() %} + +{% if taxlist %} +
+ + {% for tax,value in taxlist[taxonomy] %} + {% set label_class = uri.param(taxonomy) == tax ? 'label-primary' : 'label-secondary' %} + + {% endfor %} +
+{% endif %} diff --git a/user/themes/gilles_acezat/scss/configurations/_animation.scss b/user/themes/gilles_acezat/scss/configurations/_animation.scss index 0c4916e..6434d3d 100644 --- a/user/themes/gilles_acezat/scss/configurations/_animation.scss +++ b/user/themes/gilles_acezat/scss/configurations/_animation.scss @@ -236,7 +236,6 @@ } } - @-webkit-keyframes showcard { 0%{ opacity: 0; @@ -248,7 +247,6 @@ } } - @keyframes showcard { 0%{ opacity: 0; diff --git a/user/themes/gilles_acezat/scss/theme/_blog.scss b/user/themes/gilles_acezat/scss/theme/_blog.scss index 3cae724..8b13789 100644 --- a/user/themes/gilles_acezat/scss/theme/_blog.scss +++ b/user/themes/gilles_acezat/scss/theme/_blog.scss @@ -1,39 +1 @@ -body{ - #start{ - height: 100%; - } - #page-wrapper.blog{ - #start{ - width: calc(100% - 20px); - height: calc(100% - 5rem); - position: fixed; - top: 100vh; - left: 10px; - right: 10px; - } - } - #page-wrapper.down{ - #start{ - top: 5rem; - } - #items{ - -webkit-animation: showcard 1.5s 2.5s ease forwards; - animation: showcard 1.5s 2.5s ease forwards; - .card{ - } - } - } -} -.blog{ - #items{ - opacity: 0; - .full-works{ - width: 100%; - margin-top: 30px; - } - .card{ - margin-bottom: 10px; - min-width: 200px; - } - } -} + diff --git a/user/themes/gilles_acezat/scss/theme/_header.scss b/user/themes/gilles_acezat/scss/theme/_header.scss index 69adad3..6c40e37 100644 --- a/user/themes/gilles_acezat/scss/theme/_header.scss +++ b/user/themes/gilles_acezat/scss/theme/_header.scss @@ -1,235 +1,163 @@ -// home -body { - .blog { - margin: 0 10px; - header { - height:100vh; - width: calc(100% - 22px); - display: inline-flex; - flex-direction: column; - align-content: space-around; - & > div{ - position: fixed; - &.head{ - z-index: 999; - padding-top: 25px; - width: inherit; - .svg-container { - display: inline-block; - position: relative; - width: calc( ( 100% / 3 ) * 2 - 22px ) ; - padding-bottom: 9%; - vertical-align: middle; - overflow: hidden; - .svg-content { - display: inline-block; - position: absolute; - top: 0; - left: 0; - } - } - h2 { - margin-left: -4px; - position: absolute; - left: 0; - } - &::after { - display: block; - content: " "; - width: 0%; - height: 1px; - background: black; - } - } - &.works-mea { - display: inline-flex; - align-self: flex-end; - height: calc(100% - 25px); - align-items: flex-end; - width: inherit; - .card{ - &:nth-child(2){ - margin:0 10px; - } - &:not(:nth-child(2)){ - margin: 0; - } - } - } - &.scroll{ - bottom: 0; - text-align: center; - width: inherit; - } - } - } - &.down{ - header{ - .head{ - .svg-container { - width: 250px; - transition: all 1s 0.9s ease; - padding-bottom: calc(70px - 7px); - .svg-content { - path{ - transition: all 1s 0.9s ease; - fill: black!important; - stroke-width:0!important; - } - } - } - &::after{ - -webkit-animation: showborder 2.5s 1.5s ease forwards; - animation: showborder 2.5s 1.5s ease forwards; - } - - h2{ - opacity: 0; - left: -40%; - transition: left 3s linear, opacity 0.3s 0.1s ease; - } - } - .card{ - &:nth-child(1){ - -webkit-animation: translateY 1s ease forwards; - animation: translateY 1s ease forwards; - } - &:nth-child(2){ - -webkit-animation: translateY 1.3s ease forwards; - animation: translateY 1.3s ease forwards; - } - &:nth-child(3){ - -webkit-animation: translateY 1.6s ease forwards; - animation: translateY 1.6s ease forwards; - } - } - .scroll{ - opacity: 0; - transition: all 1s ease; - } - } - } - } -} - -.contact{ - width: 90px; - height: auto; - z-index: 999; - position: fixed; - top: 0px; - right: 0px; - transition: width 0.5s ease; - cursor: pointer; - &:hover{ - width: 80px; - transition: width 0.5s ease; - } - svg{ - cursor: pointer; - -webkit-animation: rotation 6s infinite linear; - animation: rotation 6s infinite linear; - } - h3{ - color: white; - -webkit-transform: rotate(35deg); - transform: rotate(35deg); +header{ + position: relative; + margin-right: 10px; + height: 100vh; + &:after{ position: absolute; - top: 35px; - left: 19px; + width: 0%; + bottom: 0; + content: ""; } - .txt{ - position: fixed; - right: -200px; - } - &.open{ - -webkit-transform: scale(15); - transform: scale(15); - height: auto; - transition: -webkit-transform 0.5s ease; - transition: transform 0.5s ease; - transition: transform 0.5s ease, -webkit-transform 0.5s ease; - h3{ - color: transparent; - left: 500px; - transition: visibility 0.5 ease left 1s ease; - } - svg{ - -webkit-animation: rotation 12s infinite linear; - animation: rotation 12s infinite linear; - } - .txt{ - position: fixed; - color: white; - -webkit-transform: scale(0.1); - transform: scale(0.1); - top: -10px; - right: -20px; - text-align: center; - line-height: 1.5rem; - z-index: 9999; + .head{ + width:100%; + padding-top: 22px; + nav{ + width: calc((100% / 3) * 2); + position: relative; + h2{ + position: absolute; + } } } - &.close{ - -webkit-transform: scale(1); - transform: scale(1); - transition: -webkit-transform 0.5s 0.1s ease; - transition: transform 0.5s 0.1s ease; - transition: transform 0.5s 0.1s ease, -webkit-transform 0.5s 0.1s ease; - & + .txt{ - top: 190px; - text-align: center; - line-height: 1.5rem; - z-index: 9999; - -webkit-animation: translateleft 1s ease forwards; - animation: translateleft 1s ease forwards; - } - h3{ - transition: color 0.5s 0.5s ease, left 0.5s ease; - } - &:hover{ - transition: -webkit-transform 0.5s ease!important; - transition: transform 0.5s ease!important; - transition: transform 0.5s ease, -webkit-transform 0.5s ease!important; - -webkit-transform: scale(0.9)!important; - transform: scale(0.9)!important; - } - } -} -// page -body { - #page-wrapper.item { - header { - z-index: 999; - padding-top: 25px; - width: inherit; - border-bottom: 1px solid black; - position: fixed; - height: 5rem; - background: white; - top: 0; - left: 10px; - right: 10px; - z-index: 999; - .head{ - .svg-container { - width: 250px; - transition: all 1s 0.9s ease; - .svg-content { - path{ - transition: all 1s 0.9s ease; - fill: black!important; - stroke-width:0!important; - } - } + .works-mea{ + position: absolute; + bottom: 20px; + width: calc((100%) + (10px) ); + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + height: 50%; + .card{ + height: calc(100% - 30px); + .card-image{ + overflow: hidden; + height: 100%; + width: 100%; + a{ + display: block; + height: 100%; + img{ + object-fit: cover; + width: 100%; } } - h1 { - // color: black; - // line-height: 5rem; } - h2, .scroll { - display: none; + &:first-child{ + margin-right: 10px; + } + &:last-child{ + margin-left: 10px; + } + } + } + .scroll{ + position: absolute; + width: 100%; + bottom: 0; + height: 20px; + p{ + svg{ + display: block; + margin: auto; + } + } + } +} + +.item{ + #start{ + margin-top: 115px; + .cat-list{ + display: none; + } + } +} + +.down, .item{ + header{ + background: white; + z-index: 999; + width: calc(100% - 20px); + height: 90px; + position: fixed; + top: 0; + &:after{ + width: 100%; + height: 1px; + background: black; + } + .head{ + nav{ + width: calc((100% / 6)); + min-width: 300px; + path{ + fill:black!important; + } + h2{ + -webkit-transform: translateX(-150%); + transform: translateX(-150%); + -webkit-transition: 2s -webkit-transform ease; + transition: 2s -webkit-transform ease; + transition: 2s transform ease; + transition: 2s transform ease, 2s -webkit-transform ease; + } + } + } + .works-mea{ + bottom: 65px; + -webkit-transition: 0s 1s bottom; + transition: 0s 1s bottom; + .card{ + opacity: 0; + margin-top: -20px; + } + } + } + .scroll{ + opacity: 0; + margin-bottom: -20px; + -webkit-transition: 1s all ease; + transition: 1s all ease; + } +} + +.down{ + header{ + -webkit-transition: 1s 1s height ease; + transition: 1s 1s height ease; + &:after{ + -webkit-transition: 1.5s 2s width ease; + transition: 1.5s 2s width ease; + } + .head{ + nav{ + -webkit-transition:1s 1s width ease; + transition:1s 1s width ease; + path{ + -webkit-transition:1s 1s fill ease; + transition:1s 1s fill ease; + } + } + } + .works-mea{ + bottom: 65px; + -webkit-transition: 0s 1s bottom; + transition: 0s 1s bottom; + .card{ + opacity: 0; + margin-top: -20px; + &:nth-child(1){ + -webkit-transition: 0.5s 0.3s all ease; + transition: 0.5s 0.3s all ease; + } + &:nth-child(2){ + -webkit-transition: 0.5s 0.5s all ease; + transition: 0.5s 0.5s all ease; + } + &:nth-child(3){ + -webkit-transition: 0.5s 0.7s all ease; + transition: 0.5s 0.7s all ease; + } } } } diff --git a/user/themes/gilles_acezat/scss/theme/_home.scss b/user/themes/gilles_acezat/scss/theme/_home.scss index a0e0d3c..7455c66 100644 --- a/user/themes/gilles_acezat/scss/theme/_home.scss +++ b/user/themes/gilles_acezat/scss/theme/_home.scss @@ -1,63 +1,95 @@ -.blog{ - #start{ - .cat-list { - width: 100%; - z-index: 999; - left: -100%; - &::after { - display: block; +.cat-list{ + width: calc(100% - 10px); + height: 50px; + margin-bottom: 20px; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + position: relative; + &:after{ + position: absolute; + bottom: 0; + display: block; + content: ""; + width: 0%; + } + & > ul{ + margin: auto 0 auto 10px; + label{ + margin-right: 10px; + opacity: 0; + margin-left: -10px; + a{ + &::after{ + position: absolute; content: " "; - width: 0%; - height: 1px; - background: black; + width: 5px; } - ul { - opacity: 0; - display: -webkit-inline-box; - display: -ms-inline-flexbox; - display: inline-flex; - margin: 10px 0; - .btn-group{ - display: -webkit-box; - display: -ms-flexbox; - display: flex; - .btn a{ - margin-right: 10px; - &::after{ - position: absolute; - content: " "; - width: 5px; - } - &:hover, &.active{ - &::after{ - content: "\002022"; - } - } - input{ - display: none; - } - } + &:hover, &.active{ + &::after{ + content: "\002022"; } } } - #items{ - .full-works{ - .card{ - width: calc( (100vw / 3 - calc( 41px / 3 ) ) ); - } - } - } - } - .down{ - .cat-list{ - &::after{ - -webkit-animation: showborder 2.5s 1.6s ease forwards; - animation: showborder 2.5s 1.6s ease forwards; - } - ul{ - -webkit-animation: ultranslate 1s 2.5s ease forwards; - animation: ultranslate 1s 2.5s ease forwards; - } + } + } +} + +#page-wrapper{ + padding-left: 10px; + z-index: 1000; + height: 100%; +} + +.scroll{ + cursor: pointer; +} + +.full-works{ + .card{ + opacity: 0; + margin-top: 30px; + } +} + +.down{ + #start{ + margin-top: 90px; + height: 100%; + } + .cat-list{ + &:after{ + width: 100%; + height: 1px; + background: black; + } + & > ul{ + label{ + opacity: 1; + margin-left: 0; + } + } + } + .full-works{ + .card{ + opacity: 1; + transition: 1.5s opacity 1s ease, 1.5s margin-top 1s ease; + margin-top: 0; + } + } +} + +.down{ + .cat-list{ + &:after{ + -webkit-transition: 2s 1.5s width ease; + transition: 2s 1.5s width ease; + } + & > ul{ + label{ + -webkit-transition: 2s 1.5s all ease; + transition: 2s 1.5s all ease; + } } } } diff --git a/user/themes/gilles_acezat/scss/theme/_onscroll.scss b/user/themes/gilles_acezat/scss/theme/_onscroll.scss index 5e713bd..b50b080 100644 --- a/user/themes/gilles_acezat/scss/theme/_onscroll.scss +++ b/user/themes/gilles_acezat/scss/theme/_onscroll.scss @@ -2,7 +2,6 @@ body, html { margin: 0; overflow: hidden; -webkit-transition: opacity 400ms; - -moz-transition: opacity 400ms; transition: opacity 400ms; } @@ -30,7 +29,7 @@ header{ width: 100%; height: 100%; } - + .onepage-pagination { position: absolute; right: 10px; @@ -82,7 +81,6 @@ header{ } .disabled-onepage-scroll .onepage-wrapper { -webkit-transform: none !important; - -moz-transform: none !important; transform: none !important; -ms-transform: none !important; min-height: 100%; diff --git a/user/themes/gilles_acezat/scss/theme/_typography.scss b/user/themes/gilles_acezat/scss/theme/_typography.scss index f599e85..c38d1a3 100644 --- a/user/themes/gilles_acezat/scss/theme/_typography.scss +++ b/user/themes/gilles_acezat/scss/theme/_typography.scss @@ -93,7 +93,7 @@ time{ font-size: $fs; } .card-footer{ - line-height: 0.2rem; + line-height: 0.5rem; .tags{ a{ color: $grey!important; diff --git a/user/themes/gilles_acezat/scss/theme/all.scss b/user/themes/gilles_acezat/scss/theme/all.scss index ad421c0..5b6a1a9 100644 --- a/user/themes/gilles_acezat/scss/theme/all.scss +++ b/user/themes/gilles_acezat/scss/theme/all.scss @@ -2,38 +2,119 @@ html, body{ overflow: hidden; } -.blog{ - width: 100%; - height: 100%; - &.down{ - height: 5rem; - } -} - -#start{ - width: 100%; -} - .card{ - width: calc((100% / 3)); - line-height: 0.8rem!important; + width: calc((100% / 3) - (10px)); + margin-bottom: 7px; .card-header{ - margin-top: 5px; + width: 100%; display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -webkit-box-align: baseline; -ms-flex-align: baseline; align-items: baseline; - & > div{ + & > div { margin-right: 5px; } } } -.scroll{ - cursor: pointer; -} -#top{ - display: none; +.contact{ + z-index: 999; + position: fixed; + right: 0; + top: 0; + width: 90px; + height: 90px; + -webkit-transition: width 0.5s ease, margin 0.5s; + transition: width 0.5s ease, margin 0.5s; + & > svg{ + -webkit-animation: rotation 12s infinite linear; + animation: rotation 12s infinite linear; + } + h3{ + cursor: pointer; + z-index: 999; + position: fixed; + top: 34px; + right: 37px; + color: white; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + transition: transform 0.5s ease; + } + .txt{ + text-align: right; + position: fixed; + right: -200%; + left: 200%; + -webkit-transition: color 0.5s ease, right 0s; + color: transparent; + transition: color 0.5s ease, right 0s; + p{ + margin-top: 1rem; + font-size: 1.5rem; + line-height: 2rem; + a{ + display: inline-block; + width: 20px; + height: 20px; + } + em{ + font-size: 1rem; + } + &:nth-last-of-type(2){ + font-size: 1.2rem; + line-height: 1.6rem; + } + } + } + &.open{ + width: 2000px; + height: auto; + margin: -550px; + -webkit-transition: width 0.5s ease, margin 0.5s; + transition: width 0.5s ease, margin 0.5s; + .txt{ + color: white; + -webkit-transition: color 0.5s ease, right 0s; + transition: color 0.5s ease, right 0s; + text-align: right; + position: fixed; + top: 50px; + left: auto; + right: 70px; + width: 650px; + .reso{ + & > div{ + opacity: 1; + -webkit-transition: opacity 0.5s 0.5s ease; + transition: opacity 0.5s 0.5s ease; + } + } + } + h3{ + color: transparent; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + transition: transform 0.5s ease; + } + } + &.close{ + width: 90px; + height: 90px; + .txt{ + color: transparent; + text-align: right; + position: fixed; + right: -200%; + -webkit-transition: color 0.5s ease, right 0s; + transition: color 0.5s ease, right 0s; + } + h3{ + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + transition: transform 0.5s ease; + } + } } diff --git a/user/themes/gilles_acezat/scss/theme/item.scss b/user/themes/gilles_acezat/scss/theme/item.scss index 4dab9b7..cdb3cda 100644 --- a/user/themes/gilles_acezat/scss/theme/item.scss +++ b/user/themes/gilles_acezat/scss/theme/item.scss @@ -1,136 +1,57 @@ -body{ - #page-wrapper.item{ - margin: 0 10px; - .contact{ - .txt{ - display: none +.item{ + #start{ + width: calc(100% - 10px); + } +} +#items{ + .header-item{ + width: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + margin-bottom: 1rem; + .info{ + width: calc(100% / 3); + .title{ + display: -webkit-box; + display: -ms-flexbox; + display: flex; + h2{ + text-transform: uppercase; + } + & > *{ + margin-right: 0.5rem; + } + } + .content{ + margin-top: 1rem; + } + } + .prev-next{ + width: calc(100% / 3); + position: relative; + .btn-info{ + width: 250px; + position: absolute; + top: 20px; + left: -80px; + -webkit-transform: rotate(-17deg); + transform: rotate(-17deg); + } } } - #start{ - margin-top: 5rem; - } - #body-wrapper.blog-listing { - .img-card{ - width: calc( (100vw / 3 - calc( 41px / 3 ) ) ); - margin-bottom: 10px; - } - .header-item{ - position: relative; - margin-bottom: 1.5rem; - padding-top: 1.5rem; - .title{ - display: -webkit-inline-box; - display: -ms-inline-flexbox; - display: inline-flex; - -webkit-box-align: baseline; - -ms-flex-align: baseline; - align-items: baseline; - h2{ - margin-right: 5px; - text-transform: uppercase; - } - time{ - margin-right: 5px; - } - span{ - margin-right: 5px; - } - } - .content{ - width: calc((100% / 3) - 15px); - margin-top: 20px; - } - .prev-next{ - width: calc(100% / 3); - height: 100%; - position: absolute; - top: calc( 50% + 1.5rem ); - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - right: 0px; - .btn{ - display: block; - width: auto; - height: 100%; - .btn-info{ - position: absolute; - -webkit-transform: rotate(-15deg); - transform: rotate(-15deg); - margin-left: 40px; - margin-top: 20px; - } - img{ - float: right; - width: 80%; - } - } - } - } - } - .top{ - text-align: center; - margin: 20px auto 20px auto; - width: 50px; - img{ - width: 20px; - margin-bottom:5px; - } - p{ - -webkit-transform: rotate(-10deg); - transform: rotate(-10deg); - } - } + .top{ + cursor: pointer; + text-align: center; + width: 100%; + margin-bottom: 10px; } } -@media screen and (max-width: 960px) { - body{ - #page-wrapper.item{ - #body-wrapper.blog-listing{ - .header-item{ - .content{ - width: calc((100% / 2) - 5px); - } - .prev-next{ - width: calc((100% / 2) - 5px); - } - } - .img-card{ - width: calc((100% / 2) - 5px); - } - } - } - } -} - -@media screen and (max-width: 600px) { - body{ - #page-wrapper.item{ - #body-wrapper.blog-listing{ - .header-item{ - .content{ - width: calc((100%) - 15px); - } - .prev-next{ - width: calc((100%) - 15px); - position: relative; - -webkit-transform: translateY(0%); - transform: translateY(0%); - .btn{ - .btn-info{ - display: none; - } - img{ - float: none; - width: 100%; - } - } - } - } - .img-card{ - width: 100%; - } - } - } - } +.img-card{ + width: calc((100% / 3) - (10px)); + margin-bottom: 10px; } diff --git a/user/themes/gilles_acezat/scss/theme/mobile.scss b/user/themes/gilles_acezat/scss/theme/mobile.scss index 13ed768..cfc6e14 100644 --- a/user/themes/gilles_acezat/scss/theme/mobile.scss +++ b/user/themes/gilles_acezat/scss/theme/mobile.scss @@ -1,37 +1,160 @@ -@media screen and (max-width: 960px) { - +@media screen and (max-width: 1024px) { + .card{ + width: calc((100% / 2) - 10px); + } .works-mea{ - & > div:last-child{ - display: none; + .card{ + &:nth-child(3){ + display: none; + } } } - .card{ - width: calc((100% / 2) - 5px )!important; + + #items{ + .header-item{ + .info{ + width: calc(100% / 2); + } + } + } + .img-card{ + width: calc((100% / 2) - 5px); } } -@media screen and (max-width: 600px) { +@media screen and (orientation:landscape) and (max-width: 812px) { +.blog{ header{ .head{ - padding: 0!important; - } - h1{ - font-size: 2.5rem!important; - line-height: 5rem!important; - -webkit-text-stroke: 1px black!important; - } - h2{ - font-size: 1.5rem; - line-height: 0rem!important; - margin: -0.7rem 0 0 0!important; + nav{ + margin-top: 50vh; + transform: translate(0, -100%); + } } } - .works-mea{ - & > div:nth-child(2){ - display: none; + .down{ + header{ + .head{ + nav{ + margin-top: 0!important; + transform: translate(0)!important; + transition: all 0.5s 1s ease; + } + } + } + } + .works-mea{ + display: none!important; + } + } +} + +@media screen and (max-width: 414px) { + .down header, .item header{ + height: 70px; + } + header{ + .head{ + padding-top: 10px; + nav{ + width: 80%!important; + min-width: 80%!important; + } + } + .contact{ + width: 70px; + height: 70px; + h3{ + top: 24px; + right: 27px; + } + &.open{ + .txt{ + right: 25px; + width: calc(100% - 30px); + height: calc(100% - 50px); + overflow-y: auto; + p{ + font-size: 1rem; + line-height: 1.4rem; + &:nth-last-of-type(2){ + font-size: 0.8rem; + line-height: 1.2rem; + a{ + width: 15px; + margin-left: 5px; + } + } + em{ + font-size: 0.5rem; + } + } + } + } + &.close{ + width: 70px; + height: 70px; + } + } + .works-mea{ + .card{ + width: 100%; + &:nth-child(2){ + display: none; + } + &:nth-child(3){ + display: none; + } + } + } + } + + .blog{ + h2{ + line-height: 9vw; + font-size: 6vw; + } + } + .down, .item{ + #start{ + margin-top: 70px; } } .card{ - width: 100%!important; + width: calc(100% - 10px); + } + + #items{ + .header-item{ + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; + & > div{ + width: 100%!important; + } + & > .info{ + margin-top: 25px; + .title{ + display: block; + & > a { + margin-right: 0; + } + } + } + .prev-next{ + .btn-info{ + display: none; + } + } + } + } + .img-card{ + width: calc(100%); + } + .item{ + #items{ + padding-top: 25px; + } } } diff --git a/user/themes/gilles_acezat/templates/blog.html.twig b/user/themes/gilles_acezat/templates/blog.html.twig index 0698490..939cc02 100644 --- a/user/themes/gilles_acezat/templates/blog.html.twig +++ b/user/themes/gilles_acezat/templates/blog.html.twig @@ -6,34 +6,16 @@ {% set show_sidebar = header_var('show_sidebar', [page, blog])|defined(true) %} {% set show_pagination = header_var('show_pagination', [page, blog])|defined(true) %} - {% block body %}
-
- {% embed 'partials/layout.html.twig' with {blog: page} %} {% block item %} -
{% for child in collection if child.template == 'item' %} {% include 'partials/blog-list-item.html.twig' with {blog: page, page: child} %} {% endfor %}
- - - {% if show_pagination and config.plugins.pagination.enabled and collection.params.pagination %} - - {% endif %} - - {% endblock %} - - {% block sidebar %} - {% include 'partials/sidebar.html.twig' %} {% endblock %} {% endembed %} -
- {% endblock %} diff --git a/user/themes/gilles_acezat/templates/partials/base.html.twig b/user/themes/gilles_acezat/templates/partials/base.html.twig index 11069d8..9c3c074 100644 --- a/user/themes/gilles_acezat/templates/partials/base.html.twig +++ b/user/themes/gilles_acezat/templates/partials/base.html.twig @@ -29,9 +29,8 @@ {% do assets.addJs('theme://js/jquery.mCustomScrollbar.js', {group:'bottom'}) %} {% do assets.addJs('theme://js/jquery.mousewheel.min.js', {group:'bottom'}) %} {% do assets.addJs('theme://js/site.js', {group:'bottom'}) %} - - {% endblock %} + {{ assets.js()|raw }} {% endblock head %} @@ -42,6 +41,76 @@ {% block header %}
+
+ + + +

+ + + + + + + + image/svg+xml + + + + + + + + + + + + + +

+ + {% include 'partials/navigation.html.twig' %} +
-
- - - - -

Contact

- {% include 'partials/navigation.html.twig' %} -
+ {% set options = { items: {'@page.children': '/'}, 'order': {'by': 'folder', 'dir': 'asc'} } %} + {% set collection = page.collection(options) %} + {% for child in collection %} {% set mea = child.header.mea == 'true' %} {% if mea %} - {% include 'partials/blog-list-mea.html.twig' with {blog: page, page: child} %} + {% include 'partials/blog-list-mea.html.twig' with {blog: page, page: child} %} {% endif %} {% endfor %}

- - +

{% include 'partials/blog/title.html.twig' with {title_level: 'h2'} %} {% if page.header.subtitle %} @@ -18,6 +19,7 @@ {{ page.content|raw }}
+
@@ -94,6 +96,4 @@ id="path995" inkscape:connector-curvature="0" /> - -

top

diff --git a/user/themes/gilles_acezat/templates/partials/blog-list-mea.html.twig b/user/themes/gilles_acezat/templates/partials/blog-list-mea.html.twig index e5bdd49..e856c85 100644 --- a/user/themes/gilles_acezat/templates/partials/blog-list-mea.html.twig +++ b/user/themes/gilles_acezat/templates/partials/blog-list-mea.html.twig @@ -1,3 +1,4 @@ + {% for category in page.taxonomy.category %}
diff --git a/user/themes/gilles_acezat/templates/partials/layout.html.twig b/user/themes/gilles_acezat/templates/partials/layout.html.twig index 0d382d6..fe485d2 100644 --- a/user/themes/gilles_acezat/templates/partials/layout.html.twig +++ b/user/themes/gilles_acezat/templates/partials/layout.html.twig @@ -1,6 +1,3 @@ -{% set item_col = show_sidebar ? 'col-9 col-md-12' : 'col-12' %} -{% set sidebar_col = show_sidebar ? 'col-3 col-md-12' : 'col-12' %} - -
- {% block item %}{% endblock %} -
+
+ {% block item %}{% endblock %} +