<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:monolog="http://symfony.com/schema/dic/monolog"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/monolog http://symfony.com/schema/dic/monolog/monolog-1.0.xsd">

    <parameters>
        <parameter key="shopware.slug.config" type="collection">
            <parameter key="regexp">/([^A-Za-z0-9\.]|-)+/</parameter>
            <parameter key="lowercase">false</parameter>
        </parameter>

        <!-- Populated by RouteScopeCompilerPass with all route prefixes from the registers RouteScopes -->
        <parameter key="shopware.routing.registered_api_prefixes" type="collection"/>

        <!-- Migration config -->
        <parameter key="core.migration.directories" type="collection"/>

        <parameter key="shopware.security.csp_templates" type="collection">
            <parameter key="default">
object-src 'none';
script-src 'none';
base-uri 'self';
frame-ancestors 'none';
            </parameter>
            <parameter key="administration">
object-src 'none';
script-src 'strict-dynamic' 'nonce-%%nonce%%' 'unsafe-inline' 'unsafe-eval' https: http:;
base-uri 'self';
frame-ancestors 'none';
            </parameter>
            <parameter key="storefront"/>
            <parameter key="installer"/>
        </parameter>

        <parameter key="shopware_http_cache_enabled_default">1</parameter>
        <parameter key="shopware.http.cache.enabled">%env(default:shopware_http_cache_enabled_default:SHOPWARE_HTTP_CACHE_ENABLED)%</parameter>

        <parameter key="shopware_http_cache_default_ttl_default">7200</parameter>
        <parameter key="shopware.http.cache.default_ttl">%env(default:shopware_http_cache_default_ttl_default:SHOPWARE_HTTP_DEFAULT_TTL)%</parameter>
    </parameters>

    <monolog:config>
        <monolog:channel>business_events</monolog:channel>

        <monolog:handler
            name="business_event_handler_buffer"
            type="buffer"
            handler="business_event_handler">
            <monolog:channels>
                <monolog:channel>business_events</monolog:channel>
            </monolog:channels>
        </monolog:handler>

        <monolog:handler
            name="business_event_handler"
            type="service"
            id="Shopware\Core\Framework\Log\Monolog\DoctrineSQLHandler">
            <monolog:channels>
                <monolog:channel>business_events</monolog:channel>
            </monolog:channels>
        </monolog:handler>
    </monolog:config>

    <services>
        <!-- Database / Doctrine -->
        <service id="Doctrine\DBAL\Connection" public="true">
            <factory class="Shopware\Core\Kernel" method="getConnection"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\QueryDataBagResolver">
            <tag name="controller.argument_value_resolver" priority="1000"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\RequestDataBagResolver">
            <tag name="controller.argument_value_resolver" priority="1000"/>
        </service>

        <!-- Cache -->
        <service class="Cocur\Slugify\Slugify" public="false" id="slugify">
            <argument>%shopware.slug.config%</argument>
        </service>

        <!-- Migration -->
        <service id="Shopware\Core\Framework\Migration\MigrationSource.core"
                 class="Shopware\Core\Framework\Migration\MigrationSource">
            <argument type="string">core</argument>
            <tag name="shopware.migration_source"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\MigrationSource.core.V6_3"
                 class="Shopware\Core\Framework\Migration\MigrationSource">
            <argument type="string">core.V6_3</argument>

            <tag name="shopware.migration_source"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\MigrationSource.core.V6_4"
                 class="Shopware\Core\Framework\Migration\MigrationSource">
            <argument type="string">core.V6_4</argument>
            <tag name="shopware.migration_source"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\MigrationSource.core.V6_5"
                 class="Shopware\Core\Framework\Migration\MigrationSource">
            <argument type="string">core.V6_5</argument>
            <tag name="shopware.migration_source"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\MigrationSource.core.V6_6"
                 class="Shopware\Core\Framework\Migration\MigrationSource">
            <argument type="string">core.V6_6</argument>
            <tag name="shopware.migration_source"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\MigrationSource.core.V6_7"
                 class="Shopware\Core\Framework\Migration\MigrationSource">
            <argument type="string">core.V6_7</argument>
            <tag name="shopware.migration_source"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\MigrationSource.core.V6_8"
                 class="Shopware\Core\Framework\Migration\MigrationSource">
            <argument type="string">core.V6_8</argument>
            <tag name="shopware.migration_source"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\MigrationSource.null"
                 class="Shopware\Core\Framework\Migration\MigrationSource">
            <argument type="string">null</argument>
            <argument type="collection"/>

            <tag name="shopware.migration_source"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\MigrationRuntime">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="logger"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\MigrationCollectionLoader" public="true">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\Migration\MigrationRuntime"/>
            <argument type="service" id="logger"/>
            <argument type="tagged_iterator" tag="shopware.migration_source"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\Command\CreateMigrationCommand">
            <argument type="service" id="Shopware\Core\Framework\Plugin\KernelPluginCollection"/>
            <argument>%kernel.shopware_core_dir%</argument>
            <argument>%kernel.shopware_version%</argument>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\Command\RefreshMigrationCommand">
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\Command\MigrationCommand">
            <argument type="service" id="Shopware\Core\Framework\Migration\MigrationCollectionLoader"/>
            <argument type="service" id="cache.object"/>
            <argument type="string">%kernel.shopware_version%</argument>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Demodata\PersonalData\CleanPersonalDataCommand">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="customer.repository"/>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\Command\MigrationDestructiveCommand">
            <argument type="service" id="Shopware\Core\Framework\Migration\MigrationCollectionLoader"/>
            <argument type="service" id="cache.object"/>
            <argument type="string">%kernel.shopware_version%</argument>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Migration\IndexerQueuer" public="true">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <!-- Serializer -->
        <service id="Shopware\Core\Framework\Struct\Serializer\StructNormalizer">
            <tag name="serializer.normalizer"/>
        </service>

        <!-- Routing -->
        <service id="Shopware\Core\Framework\Routing\ContextResolverListener">
            <argument type="service" id="Shopware\Core\Framework\Routing\ApiRequestContextResolver"/>

            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\CoreSubscriber">
            <argument>%shopware.security.csp_templates%</argument>
            <argument type="service" id="Shopware\Core\Framework\Script\Execution\ScriptExecutor"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\SymfonyRouteScopeWhitelist">
            <tag name="shopware.route_scope_whitelist"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\PaymentScopeWhitelist">
            <tag name="shopware.route_scope_whitelist"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\RouteScopeListener">
            <argument type="service" id="Shopware\Core\Framework\Routing\RouteScopeRegistry"/>
            <argument type="service" id="request_stack"/>
            <argument type="tagged_iterator" tag="shopware.route_scope_whitelist"/>

            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\CanonicalRedirectService" public="true">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="Shopware\Core\Framework\Extensions\ExtensionDispatcher"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\RouteEventSubscriber">
            <tag name="kernel.event_subscriber"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\MaintenanceModeResolver">
            <argument type="service" id="event_dispatcher"/>
        </service>

        <!-- Custom Entity -->
        <service id="Shopware\Core\System\CustomEntity\Xml\Config\CustomEntityEnrichmentService">
            <argument type="service" id="Shopware\Core\System\CustomEntity\Xml\Config\AdminUi\AdminUiXmlSchemaValidator"/>
        </service>

        <service id="Shopware\Core\System\CustomEntity\CustomEntityLifecycleService">
            <argument type="service" id="Shopware\Core\System\CustomEntity\Schema\CustomEntityPersister"/>
            <argument type="service" id="Shopware\Core\System\CustomEntity\Schema\CustomEntitySchemaUpdater"/>
            <argument type="service" id="Shopware\Core\System\CustomEntity\Xml\Config\CustomEntityEnrichmentService"/>
            <argument type="service" id="Shopware\Core\System\CustomEntity\Xml\CustomEntityXmlSchemaValidator"/>
            <argument type="service" id="Shopware\Core\Framework\App\Source\SourceResolver"/>
        </service>

        <!-- Translation -->
        <service id="Shopware\Core\Framework\Adapter\Translation\Translator" decorates="translator">
            <argument type="service" id="Shopware\Core\Framework\Adapter\Translation\Translator.inner"/>
            <argument type="service" id="request_stack"/>
            <argument type="service" id="cache.object"/>
            <argument type="service" id="translator.formatter"/>
            <argument>%kernel.environment%</argument>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\System\Locale\LanguageLocaleCodeProvider"/>
            <argument type="service" id="Shopware\Core\System\Snippet\SnippetService"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTagCollector"/>

            <tag name="monolog.logger"/>
        </service>

        <!-- Snippets -->
        <service id="Shopware\Core\System\Snippet\SnippetService" lazy="true">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\System\Snippet\Files\SnippetFileCollection"/>
            <argument type="service" id="snippet.repository"/>
            <argument type="service" id="snippet_set.repository"/>
            <argument type="service" id="Shopware\Core\System\Snippet\Filter\SnippetFilterFactory"/>
            <argument type="service" id="Shopware\Core\Framework\Extensions\ExtensionDispatcher"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="shopware.filesystem.private"/>
            <argument type="service" id="filesystem"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Api\SnippetController" public="true">
            <argument type="service" id="Shopware\Core\System\Snippet\SnippetService"/>
            <argument type="service" id="Shopware\Core\System\Snippet\Files\SnippetFileCollection"/>
            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
        </service>

        <service id="Shopware\Core\System\Snippet\Files\SnippetFileLoader">
            <argument type="service" id="Symfony\Component\HttpKernel\KernelInterface"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\System\Snippet\Files\AppSnippetFileLoader"/>
            <argument type="service" id="Shopware\Core\Framework\App\ActiveAppsLoader"/>
            <argument type="service" id="Shopware\Core\System\Snippet\Struct\TranslationConfig"/>
            <argument type="service" id="Shopware\Core\System\Snippet\Service\TranslationLoader"/>
            <argument type="service" id="shopware.filesystem.private"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Files\AppSnippetFileLoader">
            <argument>%kernel.project_dir%</argument>
        </service>

        <service id="Shopware\Core\System\Snippet\Files\SnippetFileCollection" public="true" lazy="true">
            <factory service="Shopware\Core\System\Snippet\Files\SnippetFileCollectionFactory"
                     method="createSnippetFileCollection"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Files\SnippetFileCollectionFactory">
            <argument type="service" id="Shopware\Core\System\Snippet\Files\SnippetFileLoader"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Filter\SnippetFilterFactory" public="true">
            <argument type="tagged_iterator" tag="shopware.snippet.filter"/>
        </service>

        <!--SnippetFilters-->
        <service id="Shopware\Core\System\Snippet\Filter\AuthorFilter">
            <tag name="shopware.snippet.filter"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Filter\AddedFilter">
            <tag name="shopware.snippet.filter"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Filter\EditedFilter">
            <tag name="shopware.snippet.filter"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Filter\EmptySnippetFilter">
            <tag name="shopware.snippet.filter"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Filter\NamespaceFilter">
            <tag name="shopware.snippet.filter"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Filter\TermFilter">
            <tag name="shopware.snippet.filter"/>
        </service>

        <service id="Shopware\Core\System\Snippet\Filter\TranslationKeyFilter">
            <tag name="shopware.snippet.filter"/>
        </service>

        <!-- Twig -->
        <service id="Shopware\Core\Framework\Adapter\Twig\TemplateFinder" public="true">
            <argument type="service" id="twig"/>
            <argument type="service" id="twig.loader"/>
            <argument>%twig.cache%</argument>
            <argument type="service"
                      id="Shopware\Core\Framework\Adapter\Twig\NamespaceHierarchy\NamespaceHierarchyBuilder"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Twig\TemplateScopeDetector"/>

            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\NamespaceHierarchy\NamespaceHierarchyBuilder">
            <argument type="tagged_iterator" tag="shopware.twig.hierarchy_builder"/>
        </service>


        <service id="Shopware\Core\Framework\Adapter\Twig\NamespaceHierarchy\BundleHierarchyBuilder">
            <argument type="service" id="kernel"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>

            <tag name="shopware.twig.hierarchy_builder" priority="1000"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\TemplateScopeDetector">
            <argument type="service" id="request_stack"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Extension\NodeExtension">
            <argument type="service" id="Shopware\Core\Framework\Adapter\Twig\TemplateFinder"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Twig\TemplateScopeDetector"/>
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Extension\PhpSyntaxExtension">
            <tag name="twig.extension" />
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Extension\FeatureFlagExtension">
            <tag name="twig.extension"/>
        </service>

        <service class="Twig\Extra\Intl\IntlExtension" id="twig.extension.intl">
            <tag name="twig.extension"/>
        </service>

        <service class="Twig\Extra\String\StringExtension" id="twig.extension.string">
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Extension\PcreExtension">
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Extension\InstanceOfExtension">
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Filter\CurrencyFilter">
            <argument type="service" id="Shopware\Core\System\Currency\CurrencyFormatter"/>
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Filter\EmailIdnTwigFilter">
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Filter\LeadingSpacesFilter" >
            <tag name="twig.extension"/>
        </service>

        <service id="Cocur\Slugify\Bridge\Twig\SlugifyExtension">
            <argument type="service" id="slugify"/>
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Filter\ReplaceRecursiveFilter">
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\SecurityExtension">
            <argument>%shopware.twig.allowed_php_functions%</argument>
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\Extension\InAppPurchaseExtension">
            <argument type="service" id="Shopware\Core\Framework\Store\InAppPurchase"/>
            <tag name="twig.extension"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\StringTemplateRenderer">
            <argument type="service" id="twig"/>
            <argument>%twig.cache%</argument>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\TemplateIterator"
                 decorates="twig.template_iterator"
                 public="true">
            <argument type="service" id="Shopware\Core\Framework\Adapter\Twig\TemplateIterator.inner"/>
            <argument>%kernel.bundles%</argument>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\EntityTemplateLoader">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument>%kernel.environment%</argument>

            <tag name="twig.loader"/>
            <tag name="kernel.event_subscriber"/>
            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\AppTemplateIterator"
                 decorates="twig.template_iterator"
                 public="true">
            <argument type="service" id="Shopware\Core\Framework\Adapter\Twig\AppTemplateIterator.inner"/>
            <argument type="service" id="app_template.repository"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Twig\TwigVariableParserFactory"/>

        <service id="Shopware\Core\Framework\Routing\ApiRequestContextResolver">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\Routing\RouteScopeRegistry"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\SalesChannelRequestContextResolver"
                 decorates="Shopware\Core\Framework\Routing\ApiRequestContextResolver">
            <argument type="service" id="Shopware\Core\Framework\Routing\SalesChannelRequestContextResolver.inner"/>
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextService"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Framework\Routing\RouteScopeRegistry"/>
        </service>

        <service id="Shopware\Core\Checkout\Cart\ApiOrderCartService">
            <argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartService"/>
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextPersister"/>
        </service>

        <service id="Shopware\Core\Framework\Api\Controller\SalesChannelProxyController" public="true">
            <argument type="service" id="kernel"/>
            <argument type="service" id="sales_channel.repository"/>
            <argument type="service" id="Shopware\Core\Framework\Validation\DataValidator"/>
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextPersister"/>
            <argument type="service" id="Shopware\Core\System\SalesChannel\Context\SalesChannelContextService"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\ApiOrderCartService"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartOrderRoute"/>
            <argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartService"/>
            <argument type="service" id="request_stack"/>
            <argument type="service" id="Shopware\Core\Checkout\Customer\ImitateCustomerTokenGenerator"/>
            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
        </service>

        <service id="Shopware\Core\Framework\Routing\RouteScope">
            <tag name="shopware.route_scope"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\ApiRouteScope">
            <tag name="shopware.route_scope"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\StoreApiRouteScope">
            <tag name="shopware.route_scope"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\RouteScopeRegistry">
            <argument type="tagged_iterator" tag="shopware.route_scope"/>
        </service>

        <!-- Logging -->
        <service id="Shopware\Core\Framework\Log\LoggingService">
            <argument>%kernel.environment%</argument>
            <tag name="kernel.event_subscriber"/>
            <argument type="service" id="monolog.logger.business_events"/>
        </service>

        <service id="Shopware\Core\Framework\Log\ExceptionLogger">
            <argument>%kernel.environment%</argument>
            <argument>%shopware.logger.enforce_throw_exception%</argument>
            <argument type="service" id="logger"/>
        </service>

        <service id="Shopware\Core\Framework\Log\ScheduledTask\LogCleanupTask">
            <tag name="shopware.scheduled.task"/>
        </service>

        <service id="Shopware\Core\Framework\Log\ScheduledTask\LogCleanupTaskHandler">
            <argument type="service" id="scheduled_task.repository"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService" />
            <argument type="service" id="Doctrine\DBAL\Connection" />

            <tag name="messenger.message_handler"/>
        </service>

        <service id="Shopware\Core\Framework\Log\Monolog\DoctrineSQLHandler">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Core\Framework\Log\LogEntryDefinition">
            <tag name="shopware.entity.definition"/>
        </service>

        <!-- Changelog -->
        <service id="Shopware\Core\Framework\Changelog\Processor\ChangelogGenerator" public="false">
            <argument type="service" id="Shopware\Core\Framework\Changelog\ChangelogParser"/>
            <argument type="service" id="validator"/>
            <argument type="service" id="filesystem"/>
            <argument>%kernel.project_dir%</argument>
            <argument>%shopware.feature.flags%</argument>
            <argument>%kernel.environment%</argument>
        </service>

        <service id="Shopware\Core\Framework\Changelog\Processor\ChangelogReleaseCreator">
            <argument type="service" id="Shopware\Core\Framework\Changelog\ChangelogParser"/>
            <argument type="service" id="validator"/>
            <argument type="service" id="filesystem"/>
            <argument>%kernel.project_dir%</argument>
            <argument>%shopware.feature.flags%</argument>
            <argument>%kernel.environment%</argument>
        </service>

        <service id="Shopware\Core\Framework\Changelog\Processor\ChangelogReleaseExporter">
            <argument type="service" id="Shopware\Core\Framework\Changelog\ChangelogParser"/>
            <argument type="service" id="validator"/>
            <argument type="service" id="filesystem"/>
            <argument>%kernel.project_dir%</argument>
            <argument>%shopware.feature.flags%</argument>
            <argument>%kernel.environment%</argument>
        </service>

        <service id="Shopware\Core\Framework\Changelog\Processor\ChangelogValidator">
            <argument type="service" id="Shopware\Core\Framework\Changelog\ChangelogParser"/>
            <argument type="service" id="validator"/>
            <argument type="service" id="filesystem"/>
            <argument>%kernel.project_dir%</argument>
            <argument>%shopware.feature.flags%</argument>
            <argument>%kernel.environment%</argument>
        </service>

        <service id="Shopware\Core\Framework\Changelog\ChangelogParser" public="false" />

        <service id="Shopware\Core\Framework\Changelog\Command\ChangelogCreateCommand">
            <argument type="service" id="Shopware\Core\Framework\Changelog\Processor\ChangelogGenerator"/>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Changelog\Command\ChangelogReleaseCommand">
            <argument type="service" id="Shopware\Core\Framework\Changelog\Processor\ChangelogReleaseCreator"/>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Changelog\Command\ChangelogChangeCommand">
            <argument type="service" id="Shopware\Core\Framework\Changelog\Processor\ChangelogReleaseExporter"/>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Changelog\Command\ChangelogCheckCommand">
            <argument type="service" id="Shopware\Core\Framework\Changelog\Processor\ChangelogValidator"/>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\Annotation\CriteriaValueResolver">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\RequestCriteriaBuilder"/>
            <tag name="controller.argument_value_resolver"/>
        </service>

        <service id="Shopware\Core\Framework\Feature\Command\FeatureDumpCommand">
            <argument type="service" id="kernel"/>

            <tag name="console.command"/>
            <tag name="console.command" command="administration:dump:features"/>
        </service>

        <service id="Shopware\Core\Framework\Feature\Command\FeatureDisableCommand">
            <argument type="service" id="Shopware\Core\Framework\Feature\FeatureFlagRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheClearer"/>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Feature\Command\FeatureEnableCommand">
            <argument type="service" id="Shopware\Core\Framework\Feature\FeatureFlagRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheClearer"/>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Feature\Command\FeatureListCommand">
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Command\S3FilesystemVisibilityCommand">
            <argument type="service" id="shopware.filesystem.private"/>
            <argument type="service" id="shopware.filesystem.public"/>
            <argument type="service" id="shopware.filesystem.theme"/>
            <argument type="service" id="shopware.filesystem.sitemap"/>
            <argument type="service" id="shopware.filesystem.asset"/>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Core\Framework\Util\HtmlSanitizer" public="true">
            <argument>%shopware.html_sanitizer.cache_dir%</argument>
            <argument>%shopware.html_sanitizer.cache_enabled%</argument>
            <argument>%shopware.html_sanitizer.sets%</argument>
            <argument>%shopware.html_sanitizer.fields%</argument>
            <argument>%shopware.html_sanitizer.enabled%</argument>

            <tag name="kernel.reset" method="reset"/>
        </service>

        <service id="Shopware\Core\Framework\Log\Monolog\ExcludeExceptionHandler" decorates="monolog.handler.main" decoration-on-invalid="ignore">
            <argument type="service" id="Shopware\Core\Framework\Log\Monolog\ExcludeExceptionHandler.inner"/>
            <argument>%shopware.logger.exclude_exception%</argument>
        </service>

        <service id="Shopware\Core\Framework\Log\Monolog\ErrorCodeLogLevelHandler" decorates="monolog.handler.main" decoration-on-invalid="ignore">
            <argument type="service" id="Shopware\Core\Framework\Log\Monolog\ErrorCodeLogLevelHandler.inner"/>
            <argument>%shopware.logger.error_code_log_levels%</argument>
        </service>

        <service id="Shopware\Core\Framework\Log\Monolog\ExcludeFlowEventHandler" decorates="monolog.handler.main" decoration-on-invalid="ignore">
            <argument type="service" id="Shopware\Core\Framework\Log\Monolog\ExcludeFlowEventHandler.inner"/>
            <argument>%shopware.logger.exclude_events%</argument>
        </service>

        <service id="Shopware\Core\Framework\Routing\RouteParamsCleanupListener">
            <tag name="kernel.event_listener"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Cache\RedisConnectionFactory">
            <argument>%shopware.cache.redis_prefix%</argument>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Redis\RedisConnectionProvider">
            <argument />  <!-- $serviceLocator will be set in the compiler pass -->
        </service>


        <service id="Shopware\Core\Framework\Routing\Facade\RequestFacadeFactory" public="true">
            <argument type="service" id="request_stack"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Storage\AbstractKeyValueStorage" class="Shopware\Core\Framework\Adapter\Storage\MySQLKeyValueStorage" public="true">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="http_kernel" class="Shopware\Core\Framework\Adapter\Kernel\HttpKernel" public="true">
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="controller_resolver"/>
            <argument type="service" id="request_stack"/>
            <argument type="service" id="argument_resolver"/>
            <argument type="service" id="Shopware\Core\Framework\Routing\RequestTransformerInterface"/>
            <argument type="service" id="Shopware\Core\Framework\Routing\CanonicalRedirectService"/>

            <tag name="container.hot_path"/>
            <tag name="container.preload" class="Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner"/>
            <tag name="container.preload" class="Symfony\Component\Runtime\Runner\Symfony\ResponseRunner"/>
            <tag name="container.preload" class="Symfony\Component\Runtime\SymfonyRuntime"/>
        </service>

        <service id="http_kernel.cache" class="Shopware\Core\Framework\Adapter\Kernel\HttpCacheKernel" decorates="http_kernel">
            <argument type="service" id=".inner"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\Http\CacheStore"/>
            <argument type="service" id="esi"/>
            <argument type="collection"/>
            <argument type="service" id="event_dispatcher"/>
            <argument>%shopware.http_cache.reverse_proxy.enabled%</argument>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Cache\Http\CacheStore" public="true">
            <argument type="service" id="cache.http"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\Http\CacheStateValidator"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\Http\HttpCacheKeyGenerator"/>
            <argument type="service" id="Shopware\Core\Framework\Routing\MaintenanceModeResolver"/>
            <argument>%session.storage.options%</argument>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTagCollector"/>
            <argument>%shopware.http_cache.soft_purge%</argument>
            <argument type="service" id="messenger.bus.default"/>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Cache\Http\HttpCacheKeyGenerator">
            <argument>%kernel.cache.hash%</argument>
            <argument type="service" id="event_dispatcher"/>
            <argument>%shopware.http_cache.ignored_url_parameters%</argument>
        </service>

        <service id="Shopware\Core\Framework\Adapter\Cache\Http\CacheStateValidator">
            <argument>%shopware.cache.invalidation.http_cache%</argument>
        </service>

        <service id="Shopware\Core\Framework\Routing\ContextAwareCacheHeadersService">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator"/>
        </service>

        <service id="Shopware\Core\Framework\Routing\ContextAwareCacheHeadersSubscriber">
            <argument type="service" id="Shopware\Core\Framework\Routing\ContextAwareCacheHeadersService"/>
            <tag name="kernel.event_subscriber"/>
        </service>
    </services>
</container>
