<?php

/**
 * @package     Joomla.Administrator
 * @subpackage  com_admin
 *
 * @copyright   (C) 2011 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 *
 * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
 */

use Joomla\CMS\Application\ApplicationHelper;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Extension\ExtensionHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\File;
use Joomla\CMS\Filesystem\Folder;
use Joomla\CMS\Installer\Installer;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Uri\Uri;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects

/**
 * Script file of Joomla CMS
 *
 * @since  1.6.4
 */
class JoomlaInstallerScript
{
    /**
     * The Joomla Version we are updating from
     *
     * @var    string
     * @since  3.7
     */
    protected $fromVersion = null;

    /**
     * Callback for collecting errors. Like function(string $context, \Throwable $error){};
     *
     * @var callable
     *
     * @since  4.4.0
     */
    protected $errorCollector;

    /**
     * Set the callback for collecting errors.
     *
     * @param   callable  $callback  The callback Like function(string $context, \Throwable $error){};
     *
     * @return  void
     *
     * @since  4.4.0
     */
    public function setErrorCollector(callable $callback)
    {
        $this->errorCollector = $callback;
    }

    /**
     * Collect errors.
     *
     * @param  string      $context  A context/place where error happened
     * @param  \Throwable  $error    The error that occurred
     *
     * @return  void
     *
     * @since  4.4.0
     */
    protected function collectError(string $context, \Throwable $error)
    {
        // The errorCollector are required
        // However when someone already running the script manually the code may fail.
        if ($this->errorCollector) {
            \call_user_func($this->errorCollector, $context, $error);
        } else {
            Log::add($error->getMessage(), Log::ERROR, 'Update');
        }
    }

    /**
     * Function to act prior to installation process begins
     *
     * @param   string     $action     Which action is happening (install|uninstall|discover_install|update)
     * @param   Installer  $installer  The class calling this method
     *
     * @return  boolean  True on success
     *
     * @since   3.7.0
     */
    public function preflight($action, $installer)
    {
        if ($action === 'update') {
            // Get the version we are updating from
            if (!empty($installer->extension->manifest_cache)) {
                $manifestValues = json_decode($installer->extension->manifest_cache, true);

                if (\array_key_exists('version', $manifestValues)) {
                    $this->fromVersion = $manifestValues['version'];

                    return true;
                }
            }

            return false;
        }

        return true;
    }

    /**
     * Method to update Joomla!
     *
     * @param   Installer  $installer  The class calling this method
     *
     * @return  void
     */
    public function update($installer)
    {
        // Uninstall extensions before removing their files and folders
        try {
            Log::add(Text::_('COM_JOOMLAUPDATE_UPDATE_LOG_UNINSTALL_EXTENSIONS'), Log::INFO, 'Update');
            $this->uninstallExtensions();
        } catch (\Throwable $e) {
            $this->collectError('uninstallExtensions', $e);
        }

        // Remove old files
        try {
            Log::add(Text::_('COM_JOOMLAUPDATE_UPDATE_LOG_DELETE_FILES'), Log::INFO, 'Update');
            $this->deleteUnexistingFiles();
        } catch (\Throwable $e) {
            $this->collectError('deleteUnexistingFiles', $e);
        }

        // Further update
        try {
            $this->updateManifestCaches();
            $this->updateDatabase();
            $this->updateAssets($installer);
            $this->clearStatsCache();
        } catch (\Throwable $e) {
            $this->collectError('Further update', $e);
        }

        // Clean cache
        try {
            $this->cleanJoomlaCache();
        } catch (\Throwable $e) {
            $this->collectError('cleanJoomlaCache', $e);
        }
    }

    /**
     * Method to clear our stats plugin cache to ensure we get fresh data on Joomla Update
     *
     * @return  void
     *
     * @since   3.5
     */
    protected function clearStatsCache()
    {
        $db = Factory::getDbo();

        try {
            // Get the params for the stats plugin
            $params = $db->setQuery(
                $db->getQuery(true)
                    ->select($db->quoteName('params'))
                    ->from($db->quoteName('#__extensions'))
                    ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
                    ->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
                    ->where($db->quoteName('element') . ' = ' . $db->quote('stats'))
            )->loadResult();
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return;
        }

        $params = json_decode($params, true);

        // Reset the last run parameter
        if (isset($params['lastrun'])) {
            $params['lastrun'] = '';
        }

        $params = json_encode($params);

        $query = $db->getQuery(true)
            ->update($db->quoteName('#__extensions'))
            ->set($db->quoteName('params') . ' = ' . $db->quote($params))
            ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
            ->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
            ->where($db->quoteName('element') . ' = ' . $db->quote('stats'));

        try {
            $db->setQuery($query)->execute();
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return;
        }
    }

    /**
     * Method to update Database
     *
     * @return  void
     */
    protected function updateDatabase()
    {
        if (Factory::getDbo()->getServerType() === 'mysql') {
            $this->updateDatabaseMysql();
        }
    }

    /**
     * Method to update MySQL Database
     *
     * @return  void
     */
    protected function updateDatabaseMysql()
    {
        $db = Factory::getDbo();

        $db->setQuery('SHOW ENGINES');

        try {
            $results = $db->loadObjectList();
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return;
        }

        foreach ($results as $result) {
            if ($result->Support != 'DEFAULT') {
                continue;
            }

            $db->setQuery('ALTER TABLE #__update_sites_extensions ENGINE = ' . $result->Engine);

            try {
                $db->execute();
            } catch (Exception $e) {
                $this->collectError(__METHOD__, $e);

                return;
            }

            break;
        }
    }

    /**
     * Uninstall extensions and optionally migrate their parameters when
     * updating from a version older than 5.0.1.
     *
     * @return  void
     *
     * @since   5.0.0
     */
    protected function uninstallExtensions()
    {
        // Don't uninstall extensions when not updating from a version older than 5.0.1
        if (empty($this->fromVersion) || version_compare($this->fromVersion, '5.0.1', 'ge')) {
            return true;
        }

        $extensions = [
            /**
             * Define here the extensions to be uninstalled and optionally migrated on update.
             * For each extension, specify an associative array with following elements (key => value):
             * 'type'         => Field `type` in the `#__extensions` table
             * 'element'      => Field `element` in the `#__extensions` table
             * 'folder'       => Field `folder` in the `#__extensions` table
             * 'client_id'    => Field `client_id` in the `#__extensions` table
             * 'pre_function' => Name of an optional migration function to be called before
             *                   uninstalling, `null` if not used.
             */
            ['type' => 'plugin', 'element' => 'demotasks', 'folder' => 'task', 'client_id' => 0, 'pre_function' => null],
            ['type' => 'plugin', 'element' => 'compat', 'folder' => 'system', 'client_id' => 0, 'pre_function' => 'migrateCompatPlugin'],
            ['type' => 'plugin', 'element' => 'logrotation', 'folder' => 'system', 'client_id' => 0, 'pre_function' => 'migrateLogRotationPlugin'],
            ['type' => 'plugin', 'element' => 'recaptcha', 'folder' => 'captcha', 'client_id' => 0, 'pre_function' => null],
            ['type' => 'plugin', 'element' => 'sessiongc', 'folder' => 'system', 'client_id' => 0, 'pre_function' => 'migrateSessionGCPlugin'],
            ['type' => 'plugin', 'element' => 'updatenotification', 'folder' => 'system', 'client_id' => 0, 'pre_function' => 'migrateUpdatenotificationPlugin'],
        ];

        $db = Factory::getDbo();

        foreach ($extensions as $extension) {
            $row = $db->setQuery(
                $db->getQuery(true)
                    ->select('*')
                    ->from($db->quoteName('#__extensions'))
                    ->where($db->quoteName('type') . ' = ' . $db->quote($extension['type']))
                    ->where($db->quoteName('element') . ' = ' . $db->quote($extension['element']))
                    ->where($db->quoteName('folder') . ' = ' . $db->quote($extension['folder']))
                    ->where($db->quoteName('client_id') . ' = ' . $db->quote($extension['client_id']))
            )->loadObject();

            // Skip migrating and uninstalling if the extension doesn't exist
            if (!$row) {
                continue;
            }

            // If there is a function for migration to be called before uninstalling, call it
            if ($extension['pre_function'] && method_exists($this, $extension['pre_function'])) {
                $this->{$extension['pre_function']}($row);
            }

            try {
                $db->transactionStart();

                // Unlock and unprotect the plugin so we can uninstall it
                $db->setQuery(
                    $db->getQuery(true)
                        ->update($db->quoteName('#__extensions'))
                        ->set($db->quoteName('locked') . ' = 0')
                        ->set($db->quoteName('protected') . ' = 0')
                        ->where($db->quoteName('extension_id') . ' = :extension_id')
                        ->bind(':extension_id', $row->extension_id, ParameterType::INTEGER)
                )->execute();

                // Uninstall the plugin
                $installer = new Installer();
                $installer->setDatabase($db);
                $installer->uninstall($extension['type'], $row->extension_id);

                $db->transactionCommit();
            } catch (\Exception $e) {
                $db->transactionRollback();
                throw $e;
            }
        }
    }

    /**
     * Migrate plugin parameters of obsolete compat system plugin to compat behaviour plugin
     *
     * @param   \stdClass  $rowOld  Object with the obsolete plugin's record in the `#__extensions` table
     *
     * @return  void
     *
     * @since   5.0.0
     */
    private function migrateCompatPlugin($rowOld)
    {
        $db = Factory::getDbo();

        $db->setQuery(
            $db->getQuery(true)
                ->update($db->quoteName('#__extensions'))
                ->set($db->quoteName('enabled') . ' = :enabled')
                ->set($db->quoteName('params') . ' = :params')
                ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
                ->where($db->quoteName('element') . ' = ' . $db->quote('compat'))
                ->where($db->quoteName('folder') . ' = ' . $db->quote('behaviour'))
                ->where($db->quoteName('client_id') . ' = 0')
                ->bind(':enabled', $rowOld->enabled, ParameterType::INTEGER)
                ->bind(':params', $rowOld->params)
        )->execute();
    }

    /**
     * This method is for migration for old logrotation system plugin migration to task.
     *
     * @param   \stdClass  $data  Object with the extension's record in the `#__extensions` table
     *
     * @return  void
     *
     * @since   5.0.0
     */
    private function migrateLogRotationPlugin($data)
    {
        if (!$data->enabled) {
            return;
        }

        /** @var SchedulerComponent $component */
        $component = Factory::getApplication()->bootComponent('com_scheduler');

        /** @var TaskModel $model */
        $model = $component->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]);

        // Get the timeout, as configured in plg_system_logrotation
        $params       = new Registry($data->params);
        $cachetimeout = (int) $params->get('cachetimeout', 30);
        $lastrun      = (int) $params->get('lastrun', time());

        $task = [
            'title'           => 'Rotate Logs',
            'type'            => 'rotation.logs',
            'execution_rules' => [
                'rule-type'     => 'interval-days',
                'interval-days' => $cachetimeout,
                'exec-time'     => gmdate('H:i', $lastrun),
                'exec-day'      => gmdate('d'),
            ],
            'state'  => 1,
            'params' => [
                'logstokeep' => $params->get('logstokeep', 1),
            ],
        ];
        $model->save($task);
    }

    /**
     * This method is for migration for old updatenotification system plugin migration to task.
     *
     * @param   \stdClass  $data  Object with the extension's record in the `#__extensions` table
     *
     * @return  void
     *
     * @since   5.0.0
     */
    private function migrateSessionGCPlugin($data)
    {
        if (!$data->enabled) {
            return;
        }

        // Get the plugin parameters
        $params = new Registry($data->params);

        /** @var SchedulerComponent $component */
        $component = Factory::getApplication()->bootComponent('com_scheduler');

        /** @var TaskModel $model */
        $model = $component->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]);
        $task  = [
            'title'           => 'Session GC',
            'type'            => 'session.gc',
            'execution_rules' => [
                'rule-type'      => 'interval-hours',
                'interval-hours' => 24,
                'exec-time'      => gmdate('H:i'),
                'exec-day'       => gmdate('d'),
            ],
            'state'  => 1,
            'params' => [
                'enable_session_gc'          => $params->get('enable_session_gc', 1),
                'enable_session_metadata_gc' => $params->get('enable_session_metadata_gc', 1),
            ],
        ];
        $model->save($task);
    }

    /**
     * This method is for migration for old updatenotification system plugin migration to task.
     *
     * @param   \stdClass  $data  Object with the extension's record in the `#__extensions` table
     *
     * @return  void
     *
     * @since   5.0.0
     */
    private function migrateUpdatenotificationPlugin($data)
    {
        if (!$data->enabled) {
            return;
        }

        // Get the timeout for Joomla! updates, as configured in com_installer's component parameters
        $component    = ComponentHelper::getComponent('com_installer');
        $paramsc      = $component->getParams();
        $cachetimeout = (int) $paramsc->get('cachetimeout', 6);
        $params       = new Registry($data->params);
        $lastrun      = (int) $params->get('lastrun', time());

        /** @var SchedulerComponent $component */
        $component = Factory::getApplication()->bootComponent('com_scheduler');

        /** @var TaskModel $model */
        $model = $component->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]);
        $task  = [
            'title'           => 'Update Notification',
            'type'            => 'update.notification',
            'execution_rules' => [
                'rule-type'      => 'interval-hours',
                'interval-hours' => $cachetimeout,
                'exec-time'      => gmdate('H:i', $lastrun),
                'exec-day'       => gmdate('d'),
            ],
            'state'  => 1,
            'params' => [
                'email'             => $params->get('email', ''),
                'language_override' => $params->get('language_override', ''),
            ],
        ];
        $model->save($task);
    }

    /**
     * Update the manifest caches
     *
     * @return  void
     */
    protected function updateManifestCaches()
    {
        $extensions = ExtensionHelper::getCoreExtensions();

        // Attempt to refresh manifest caches
        $db    = Factory::getDbo();
        $query = $db->getQuery(true)
            ->select('*')
            ->from('#__extensions');

        foreach ($extensions as $extension) {
            $query->where(
                'type=' . $db->quote($extension[0])
                . ' AND element=' . $db->quote($extension[1])
                . ' AND folder=' . $db->quote($extension[2])
                . ' AND client_id=' . $extension[3],
                'OR'
            );
        }

        $db->setQuery($query);

        try {
            $extensions = $db->loadObjectList();
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return;
        }

        $installer = new Installer();
        $installer->setDatabase($db);

        foreach ($extensions as $extension) {
            if (!$installer->refreshManifestCache($extension->extension_id)) {
                $this->collectError(
                    __METHOD__,
                    new \Exception(sprintf(
                        'Error on updating manifest cache: (type, element, folder, client) = (%s, %s, %s, %s)',
                        $extension->type,
                        $extension->element,
                        $extension->name,
                        $extension->client_id
                    ))
                );
            }
        }
    }

    /**
     * Delete files that should not exist
     *
     * @param bool  $dryRun          If set to true, will not actually delete files, but just report their status for use in CLI
     * @param bool  $suppressOutput   Set to true to suppress echoing any errors, and just return the $status array
     *
     * @return  array
     */
    public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
    {
        $status = [
            'files_exist'     => [],
            'folders_exist'   => [],
            'files_deleted'   => [],
            'folders_deleted' => [],
            'files_errors'    => [],
            'folders_errors'  => [],
            'folders_checked' => [],
            'files_checked'   => [],
        ];

        $files = [
            // From 4.4 to 5.0
            '/administrator/components/com_admin/sql/others/mysql/utf8mb4-conversion.sql',
            '/administrator/components/com_admin/sql/others/mysql/utf8mb4-conversion_optional.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2018-03-05.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2018-05-15.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2018-07-19.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2018-07-29.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2018-08-29.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-03-09.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-03-30.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-04-15.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-04-22.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-05-20.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-06-29.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-07-13.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-09-13.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-09-22.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-10-06.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-10-17.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-02-02.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-03-10.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-03-25.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-05-29.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-09-27.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-12-20.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2021-04-22.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2021-04-27.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2021-05-30.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2021-06-04.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2021-08-13.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.0-2021-08-17.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.3-2021-09-04.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.3-2021-09-05.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.0.6-2021-12-23.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.1.0-2021-11-20.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.1.0-2021-11-28.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.1.0-2021-12-29.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.1.0-2022-01-08.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.1.0-2022-01-19.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.1.0-2022-01-24.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.1.1-2022-02-20.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.1.3-2022-04-07.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.1.3-2022-04-08.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.2.0-2022-05-15.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.2.0-2022-06-15.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.2.0-2022-06-19.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.2.0-2022-06-22.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.2.0-2022-07-07.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.2.1-2022-08-23.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.2.3-2022-09-07.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.2.7-2022-12-29.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.2.9-2023-03-07.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2022-09-23.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2022-11-06.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-01-30.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-02-15.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-02-25.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-07.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-09.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-10.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-28.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-29.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-03-31.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-03.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-20.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.4.0-2023-05-08.sql',
            '/administrator/components/com_admin/sql/updates/mysql/4.4.0-2023-09-13.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-03-05.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-05-15.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-07-19.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-07-29.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-08-29.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-03-09.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-03-30.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-04-15.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-04-22.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-05-20.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-06-29.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-07-13.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-09-13.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-09-22.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-10-06.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-10-17.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-02-02.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-03-10.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-03-25.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-05-29.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-08-01.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-09-27.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-12-20.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2021-04-22.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2021-04-27.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2021-05-30.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2021-06-04.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2021-08-13.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2021-08-17.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.3-2021-09-04.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.3-2021-09-05.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.0.6-2021-12-23.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.1.0-2021-11-20.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.1.0-2021-11-28.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.1.0-2021-12-29.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.1.0-2022-01-08.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.1.0-2022-01-19.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.1.0-2022-01-24.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.1.1-2022-02-20.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.1.3-2022-04-07.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.1.3-2022-04-08.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.2.0-2022-05-15.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.2.0-2022-06-19.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.2.0-2022-06-22.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.2.0-2022-07-07.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.2.1-2022-08-23.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.2.3-2022-09-07.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.2.7-2022-12-29.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.2.9-2023-03-07.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2022-09-23.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2022-11-06.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-01-30.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-02-15.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-02-25.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-07.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-09.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-10.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-28.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-29.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-03-31.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-03.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-20.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.4.0-2023-05-08.sql',
            '/administrator/components/com_admin/sql/updates/postgresql/4.4.0-2023-09-13.sql',
            '/libraries/src/Schema/ChangeItem/SqlsrvChangeItem.php',
            '/libraries/vendor/beberlei/assert/lib/Assert/Assert.php',
            '/libraries/vendor/beberlei/assert/lib/Assert/Assertion.php',
            '/libraries/vendor/beberlei/assert/lib/Assert/AssertionChain.php',
            '/libraries/vendor/beberlei/assert/lib/Assert/AssertionFailedException.php',
            '/libraries/vendor/beberlei/assert/lib/Assert/functions.php',
            '/libraries/vendor/beberlei/assert/lib/Assert/InvalidArgumentException.php',
            '/libraries/vendor/beberlei/assert/lib/Assert/LazyAssertion.php',
            '/libraries/vendor/beberlei/assert/lib/Assert/LazyAssertionException.php',
            '/libraries/vendor/beberlei/assert/LICENSE',
            '/libraries/vendor/google/recaptcha/ARCHITECTURE.md',
            '/libraries/vendor/jfcherng/php-color-output/src/helpers.php',
            '/libraries/vendor/joomla/ldap/LICENSE',
            '/libraries/vendor/joomla/ldap/src/LdapClient.php',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/config/replacements.php',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/COPYRIGHT.md',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/LICENSE.md',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/src/autoload.php',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/src/Autoloader.php',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/src/ConfigPostProcessor.php',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/src/Module.php',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/src/Replacements.php',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/src/RewriteRules.php',
            '/libraries/vendor/lcobucci/jwt/compat/class-aliases.php',
            '/libraries/vendor/lcobucci/jwt/compat/json-exception-polyfill.php',
            '/libraries/vendor/lcobucci/jwt/compat/lcobucci-clock-polyfill.php',
            '/libraries/vendor/lcobucci/jwt/src/Claim.php',
            '/libraries/vendor/lcobucci/jwt/src/Claim/Basic.php',
            '/libraries/vendor/lcobucci/jwt/src/Claim/EqualsTo.php',
            '/libraries/vendor/lcobucci/jwt/src/Claim/Factory.php',
            '/libraries/vendor/lcobucci/jwt/src/Claim/GreaterOrEqualsTo.php',
            '/libraries/vendor/lcobucci/jwt/src/Claim/LesserOrEqualsTo.php',
            '/libraries/vendor/lcobucci/jwt/src/Claim/Validatable.php',
            '/libraries/vendor/lcobucci/jwt/src/Parsing/Decoder.php',
            '/libraries/vendor/lcobucci/jwt/src/Parsing/Encoder.php',
            '/libraries/vendor/lcobucci/jwt/src/Signature.php',
            '/libraries/vendor/lcobucci/jwt/src/Signer/BaseSigner.php',
            '/libraries/vendor/lcobucci/jwt/src/Signer/Keychain.php',
            '/libraries/vendor/lcobucci/jwt/src/ValidationData.php',
            '/libraries/vendor/nyholm/psr7/LICENSE',
            '/libraries/vendor/nyholm/psr7/phpstan-baseline.neon',
            '/libraries/vendor/nyholm/psr7/psalm.baseline.xml',
            '/libraries/vendor/nyholm/psr7/src/Factory/HttplugFactory.php',
            '/libraries/vendor/nyholm/psr7/src/Factory/Psr17Factory.php',
            '/libraries/vendor/nyholm/psr7/src/MessageTrait.php',
            '/libraries/vendor/nyholm/psr7/src/Request.php',
            '/libraries/vendor/nyholm/psr7/src/RequestTrait.php',
            '/libraries/vendor/nyholm/psr7/src/Response.php',
            '/libraries/vendor/nyholm/psr7/src/ServerRequest.php',
            '/libraries/vendor/nyholm/psr7/src/Stream.php',
            '/libraries/vendor/nyholm/psr7/src/StreamTrait.php',
            '/libraries/vendor/nyholm/psr7/src/UploadedFile.php',
            '/libraries/vendor/nyholm/psr7/src/Uri.php',
            '/libraries/vendor/psr/log/Psr/Log/AbstractLogger.php',
            '/libraries/vendor/psr/log/Psr/Log/InvalidArgumentException.php',
            '/libraries/vendor/psr/log/Psr/Log/LoggerAwareInterface.php',
            '/libraries/vendor/psr/log/Psr/Log/LoggerAwareTrait.php',
            '/libraries/vendor/psr/log/Psr/Log/LoggerInterface.php',
            '/libraries/vendor/psr/log/Psr/Log/LoggerTrait.php',
            '/libraries/vendor/psr/log/Psr/Log/LogLevel.php',
            '/libraries/vendor/psr/log/Psr/Log/NullLogger.php',
            '/libraries/vendor/ramsey/uuid/LICENSE',
            '/libraries/vendor/ramsey/uuid/src/BinaryUtils.php',
            '/libraries/vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php',
            '/libraries/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php',
            '/libraries/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php',
            '/libraries/vendor/ramsey/uuid/src/Codec/CodecInterface.php',
            '/libraries/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php',
            '/libraries/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php',
            '/libraries/vendor/ramsey/uuid/src/Codec/StringCodec.php',
            '/libraries/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php',
            '/libraries/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php',
            '/libraries/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php',
            '/libraries/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php',
            '/libraries/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php',
            '/libraries/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php',
            '/libraries/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php',
            '/libraries/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php',
            '/libraries/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php',
            '/libraries/vendor/ramsey/uuid/src/DegradedUuid.php',
            '/libraries/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php',
            '/libraries/vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php',
            '/libraries/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php',
            '/libraries/vendor/ramsey/uuid/src/FeatureSet.php',
            '/libraries/vendor/ramsey/uuid/src/functions.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/CombGenerator.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/MtRandGenerator.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/OpenSslGenerator.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/SodiumRandomGenerator.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php',
            '/libraries/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php',
            '/libraries/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php',
            '/libraries/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php',
            '/libraries/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php',
            '/libraries/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php',
            '/libraries/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php',
            '/libraries/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php',
            '/libraries/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php',
            '/libraries/vendor/ramsey/uuid/src/Uuid.php',
            '/libraries/vendor/ramsey/uuid/src/UuidFactory.php',
            '/libraries/vendor/ramsey/uuid/src/UuidFactoryInterface.php',
            '/libraries/vendor/ramsey/uuid/src/UuidInterface.php',
            '/libraries/vendor/spomky-labs/base64url/LICENSE',
            '/libraries/vendor/spomky-labs/base64url/src/Base64Url.php',
            '/libraries/vendor/spomky-labs/cbor-php/src/ByteStringWithChunkObject.php',
            '/libraries/vendor/spomky-labs/cbor-php/src/InfiniteListObject.php',
            '/libraries/vendor/spomky-labs/cbor-php/src/InfiniteMapObject.php',
            '/libraries/vendor/spomky-labs/cbor-php/src/SignedIntegerObject.php',
            '/libraries/vendor/spomky-labs/cbor-php/src/Tag/EpochTag.php',
            '/libraries/vendor/spomky-labs/cbor-php/src/Tag/PositiveBigIntegerTag.php',
            '/libraries/vendor/spomky-labs/cbor-php/src/Tag/TagObjectManager.php',
            '/libraries/vendor/spomky-labs/cbor-php/src/TagObject.php',
            '/libraries/vendor/spomky-labs/cbor-php/src/TextStringWithChunkObject.php',
            '/libraries/vendor/symfony/polyfill-php72/bootstrap.php',
            '/libraries/vendor/symfony/polyfill-php72/LICENSE',
            '/libraries/vendor/symfony/polyfill-php72/Php72.php',
            '/libraries/vendor/symfony/polyfill-php73/bootstrap.php',
            '/libraries/vendor/symfony/polyfill-php73/LICENSE',
            '/libraries/vendor/symfony/polyfill-php73/Php73.php',
            '/libraries/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php',
            '/libraries/vendor/symfony/polyfill-php80/bootstrap.php',
            '/libraries/vendor/symfony/polyfill-php80/LICENSE',
            '/libraries/vendor/symfony/polyfill-php80/Php80.php',
            '/libraries/vendor/symfony/polyfill-php80/PhpToken.php',
            '/libraries/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php',
            '/libraries/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
            '/libraries/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php',
            '/libraries/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
            '/libraries/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php',
            '/libraries/vendor/symfony/polyfill-php81/bootstrap.php',
            '/libraries/vendor/symfony/polyfill-php81/LICENSE',
            '/libraries/vendor/symfony/polyfill-php81/Php81.php',
            '/libraries/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php',
            '/libraries/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php',
            '/libraries/vendor/web-auth/cose-lib/src/Verifier.php',
            '/libraries/vendor/web-auth/metadata-service/src/AuthenticatorStatus.php',
            '/libraries/vendor/web-auth/metadata-service/src/BiometricAccuracyDescriptor.php',
            '/libraries/vendor/web-auth/metadata-service/src/BiometricStatusReport.php',
            '/libraries/vendor/web-auth/metadata-service/src/CodeAccuracyDescriptor.php',
            '/libraries/vendor/web-auth/metadata-service/src/DisplayPNGCharacteristicsDescriptor.php',
            '/libraries/vendor/web-auth/metadata-service/src/DistantSingleMetadata.php',
            '/libraries/vendor/web-auth/metadata-service/src/DistantSingleMetadataFactory.php',
            '/libraries/vendor/web-auth/metadata-service/src/EcdaaTrustAnchor.php',
            '/libraries/vendor/web-auth/metadata-service/src/ExtensionDescriptor.php',
            '/libraries/vendor/web-auth/metadata-service/src/MetadataService.php',
            '/libraries/vendor/web-auth/metadata-service/src/MetadataServiceFactory.php',
            '/libraries/vendor/web-auth/metadata-service/src/MetadataStatement.php',
            '/libraries/vendor/web-auth/metadata-service/src/MetadataStatementFetcher.php',
            '/libraries/vendor/web-auth/metadata-service/src/MetadataTOCPayload.php',
            '/libraries/vendor/web-auth/metadata-service/src/MetadataTOCPayloadEntry.php',
            '/libraries/vendor/web-auth/metadata-service/src/PatternAccuracyDescriptor.php',
            '/libraries/vendor/web-auth/metadata-service/src/RgbPaletteEntry.php',
            '/libraries/vendor/web-auth/metadata-service/src/RogueListEntry.php',
            '/libraries/vendor/web-auth/metadata-service/src/SimpleMetadataStatementRepository.php',
            '/libraries/vendor/web-auth/metadata-service/src/SingleMetadata.php',
            '/libraries/vendor/web-auth/metadata-service/src/StatusReport.php',
            '/libraries/vendor/web-auth/metadata-service/src/VerificationMethodANDCombinations.php',
            '/libraries/vendor/web-auth/metadata-service/src/VerificationMethodDescriptor.php',
            '/libraries/vendor/web-auth/metadata-service/src/Version.php',
            '/libraries/vendor/web-auth/webauthn-lib/src/Server.php',
            '/libraries/vendor/web-token/jwt-signature-algorithm-rsa/RSA.php',
            '/media/com_templates/js/admin-template-compare-es5.js',
            '/media/com_templates/js/admin-template-compare-es5.min.js',
            '/media/com_templates/js/admin-template-compare-es5.min.js.gz',
            '/media/com_templates/js/admin-template-compare.js',
            '/media/com_templates/js/admin-template-compare.min.js',
            '/media/com_templates/js/admin-template-compare.min.js.gz',
            '/media/com_users/js/admin-users-mail-es5.js',
            '/media/com_users/js/admin-users-mail-es5.min.js',
            '/media/com_users/js/admin-users-mail-es5.min.js.gz',
            '/media/com_users/js/admin-users-mail.js',
            '/media/com_users/js/admin-users-mail.min.js',
            '/media/com_users/js/admin-users-mail.min.js.gz',
            '/media/vendor/fontawesome-free/scss/_larger.scss',
            '/media/vendor/fontawesome-free/webfonts/fa-brands-400.eot',
            '/media/vendor/fontawesome-free/webfonts/fa-brands-400.svg',
            '/media/vendor/fontawesome-free/webfonts/fa-brands-400.woff',
            '/media/vendor/fontawesome-free/webfonts/fa-regular-400.eot',
            '/media/vendor/fontawesome-free/webfonts/fa-regular-400.svg',
            '/media/vendor/fontawesome-free/webfonts/fa-regular-400.woff',
            '/media/vendor/fontawesome-free/webfonts/fa-solid-900.eot',
            '/media/vendor/fontawesome-free/webfonts/fa-solid-900.svg',
            '/media/vendor/fontawesome-free/webfonts/fa-solid-900.woff',
            '/media/vendor/tinymce/plugins/bbcode/index.js',
            '/media/vendor/tinymce/plugins/bbcode/plugin.js',
            '/media/vendor/tinymce/plugins/bbcode/plugin.min.js',
            '/media/vendor/tinymce/plugins/bbcode/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/colorpicker/index.js',
            '/media/vendor/tinymce/plugins/colorpicker/plugin.js',
            '/media/vendor/tinymce/plugins/colorpicker/plugin.min.js',
            '/media/vendor/tinymce/plugins/colorpicker/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/contextmenu/index.js',
            '/media/vendor/tinymce/plugins/contextmenu/plugin.js',
            '/media/vendor/tinymce/plugins/contextmenu/plugin.min.js',
            '/media/vendor/tinymce/plugins/contextmenu/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/fullpage/index.js',
            '/media/vendor/tinymce/plugins/fullpage/plugin.js',
            '/media/vendor/tinymce/plugins/fullpage/plugin.min.js',
            '/media/vendor/tinymce/plugins/fullpage/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/hr/index.js',
            '/media/vendor/tinymce/plugins/hr/plugin.js',
            '/media/vendor/tinymce/plugins/hr/plugin.min.js',
            '/media/vendor/tinymce/plugins/hr/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/imagetools/index.js',
            '/media/vendor/tinymce/plugins/imagetools/plugin.js',
            '/media/vendor/tinymce/plugins/imagetools/plugin.min.js',
            '/media/vendor/tinymce/plugins/imagetools/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/legacyoutput/index.js',
            '/media/vendor/tinymce/plugins/legacyoutput/plugin.js',
            '/media/vendor/tinymce/plugins/legacyoutput/plugin.min.js',
            '/media/vendor/tinymce/plugins/legacyoutput/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/noneditable/index.js',
            '/media/vendor/tinymce/plugins/noneditable/plugin.js',
            '/media/vendor/tinymce/plugins/noneditable/plugin.min.js',
            '/media/vendor/tinymce/plugins/noneditable/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/paste/index.js',
            '/media/vendor/tinymce/plugins/paste/plugin.js',
            '/media/vendor/tinymce/plugins/paste/plugin.min.js',
            '/media/vendor/tinymce/plugins/paste/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/print/index.js',
            '/media/vendor/tinymce/plugins/print/plugin.js',
            '/media/vendor/tinymce/plugins/print/plugin.min.js',
            '/media/vendor/tinymce/plugins/print/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/spellchecker/index.js',
            '/media/vendor/tinymce/plugins/spellchecker/plugin.js',
            '/media/vendor/tinymce/plugins/spellchecker/plugin.min.js',
            '/media/vendor/tinymce/plugins/spellchecker/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/tabfocus/index.js',
            '/media/vendor/tinymce/plugins/tabfocus/plugin.js',
            '/media/vendor/tinymce/plugins/tabfocus/plugin.min.js',
            '/media/vendor/tinymce/plugins/tabfocus/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/template/index.js',
            '/media/vendor/tinymce/plugins/template/plugin.js',
            '/media/vendor/tinymce/plugins/template/plugin.min.js',
            '/media/vendor/tinymce/plugins/template/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/textcolor/index.js',
            '/media/vendor/tinymce/plugins/textcolor/plugin.js',
            '/media/vendor/tinymce/plugins/textcolor/plugin.min.js',
            '/media/vendor/tinymce/plugins/textcolor/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/textpattern/index.js',
            '/media/vendor/tinymce/plugins/textpattern/plugin.js',
            '/media/vendor/tinymce/plugins/textpattern/plugin.min.js',
            '/media/vendor/tinymce/plugins/textpattern/plugin.min.js.gz',
            '/media/vendor/tinymce/plugins/toc/index.js',
            '/media/vendor/tinymce/plugins/toc/plugin.js',
            '/media/vendor/tinymce/plugins/toc/plugin.min.js',
            '/media/vendor/tinymce/plugins/toc/plugin.min.js.gz',
            '/media/vendor/tinymce/skins/ui/oxide-dark/content.mobile.css',
            '/media/vendor/tinymce/skins/ui/oxide-dark/content.mobile.min.css',
            '/media/vendor/tinymce/skins/ui/oxide-dark/content.mobile.min.css.gz',
            '/media/vendor/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff',
            '/media/vendor/tinymce/skins/ui/oxide-dark/skin.mobile.css',
            '/media/vendor/tinymce/skins/ui/oxide-dark/skin.mobile.min.css',
            '/media/vendor/tinymce/skins/ui/oxide-dark/skin.mobile.min.css.gz',
            '/media/vendor/tinymce/skins/ui/oxide/content.mobile.css',
            '/media/vendor/tinymce/skins/ui/oxide/content.mobile.min.css',
            '/media/vendor/tinymce/skins/ui/oxide/content.mobile.min.css.gz',
            '/media/vendor/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff',
            '/media/vendor/tinymce/skins/ui/oxide/skin.mobile.css',
            '/media/vendor/tinymce/skins/ui/oxide/skin.mobile.min.css',
            '/media/vendor/tinymce/skins/ui/oxide/skin.mobile.min.css.gz',
            '/media/vendor/tinymce/themes/mobile/index.js',
            '/media/vendor/tinymce/themes/mobile/theme.js',
            '/media/vendor/tinymce/themes/mobile/theme.min.js',
            '/media/vendor/tinymce/themes/mobile/theme.min.js.gz',
            '/plugins/multifactorauth/webauthn/src/Hotfix/AndroidKeyAttestationStatementSupport.php',
            '/plugins/multifactorauth/webauthn/src/Hotfix/FidoU2FAttestationStatementSupport.php',
            '/plugins/multifactorauth/webauthn/src/Hotfix/Server.php',
            '/plugins/system/webauthn/src/Hotfix/AndroidKeyAttestationStatementSupport.php',
            '/plugins/system/webauthn/src/Hotfix/FidoU2FAttestationStatementSupport.php',
            '/plugins/system/webauthn/src/Hotfix/Server.php',
            // From 5.0.0-alpha1 to 5.0.0-alpha2
            '/libraries/vendor/jfcherng/php-diff/src/languages/readme.txt',
            '/media/com_actionlogs/js/admin-actionlogs-default-es5.js',
            '/media/com_actionlogs/js/admin-actionlogs-default-es5.min.js',
            '/media/com_actionlogs/js/admin-actionlogs-default-es5.min.js.gz',
            '/media/com_admin/js/admin-help-es5.js',
            '/media/com_admin/js/admin-help-es5.min.js',
            '/media/com_admin/js/admin-help-es5.min.js.gz',
            '/media/com_associations/js/admin-associations-default-es5.js',
            '/media/com_associations/js/admin-associations-default-es5.min.js',
            '/media/com_associations/js/admin-associations-default-es5.min.js.gz',
            '/media/com_associations/js/admin-associations-modal-es5.js',
            '/media/com_associations/js/admin-associations-modal-es5.min.js',
            '/media/com_associations/js/admin-associations-modal-es5.min.js.gz',
            '/media/com_associations/js/associations-edit-es5.js',
            '/media/com_associations/js/associations-edit-es5.min.js',
            '/media/com_associations/js/associations-edit-es5.min.js.gz',
            '/media/com_banners/js/admin-banner-edit-es5.js',
            '/media/com_banners/js/admin-banner-edit-es5.min.js',
            '/media/com_banners/js/admin-banner-edit-es5.min.js.gz',
            '/media/com_cache/js/admin-cache-default-es5.js',
            '/media/com_cache/js/admin-cache-default-es5.min.js',
            '/media/com_cache/js/admin-cache-default-es5.min.js.gz',
            '/media/com_categories/js/shared-categories-accordion-es5.js',
            '/media/com_categories/js/shared-categories-accordion-es5.min.js',
            '/media/com_categories/js/shared-categories-accordion-es5.min.js.gz',
            '/media/com_config/js/config-default-es5.js',
            '/media/com_config/js/config-default-es5.min.js',
            '/media/com_config/js/config-default-es5.min.js.gz',
            '/media/com_config/js/config-filters-es5.js',
            '/media/com_config/js/config-filters-es5.min.js',
            '/media/com_config/js/config-filters-es5.min.js.gz',
            '/media/com_config/js/modules-default-es5.js',
            '/media/com_config/js/modules-default-es5.min.js',
            '/media/com_config/js/modules-default-es5.min.js.gz',
            '/media/com_config/js/templates-default-es5.js',
            '/media/com_config/js/templates-default-es5.min.js',
            '/media/com_config/js/templates-default-es5.min.js.gz',
            '/media/com_contact/js/admin-contacts-modal-es5.js',
            '/media/com_contact/js/admin-contacts-modal-es5.min.js',
            '/media/com_contact/js/admin-contacts-modal-es5.min.js.gz',
            '/media/com_contact/js/contacts-list-es5.js',
            '/media/com_contact/js/contacts-list-es5.min.js',
            '/media/com_contact/js/contacts-list-es5.min.js.gz',
            '/media/com_content/js/admin-article-pagebreak-es5.js',
            '/media/com_content/js/admin-article-pagebreak-es5.min.js',
            '/media/com_content/js/admin-article-pagebreak-es5.min.js.gz',
            '/media/com_content/js/admin-article-readmore-es5.js',
            '/media/com_content/js/admin-article-readmore-es5.min.js',
            '/media/com_content/js/admin-article-readmore-es5.min.js.gz',
            '/media/com_content/js/admin-articles-default-batch-footer-es5.js',
            '/media/com_content/js/admin-articles-default-batch-footer-es5.min.js',
            '/media/com_content/js/admin-articles-default-batch-footer-es5.min.js.gz',
            '/media/com_content/js/admin-articles-default-stage-footer-es5.js',
            '/media/com_content/js/admin-articles-default-stage-footer-es5.min.js',
            '/media/com_content/js/admin-articles-default-stage-footer-es5.min.js.gz',
            '/media/com_content/js/admin-articles-modal-es5.js',
            '/media/com_content/js/admin-articles-modal-es5.min.js',
            '/media/com_content/js/admin-articles-modal-es5.min.js.gz',
            '/media/com_content/js/articles-list-es5.js',
            '/media/com_content/js/articles-list-es5.min.js',
            '/media/com_content/js/articles-list-es5.min.js.gz',
            '/media/com_content/js/articles-status-es5.js',
            '/media/com_content/js/articles-status-es5.min.js',
            '/media/com_content/js/articles-status-es5.min.js.gz',
            '/media/com_content/js/form-edit-es5.js',
            '/media/com_content/js/form-edit-es5.min.js',
            '/media/com_content/js/form-edit-es5.min.js.gz',
            '/media/com_contenthistory/js/admin-compare-compare-es5.js',
            '/media/com_contenthistory/js/admin-compare-compare-es5.min.js',
            '/media/com_contenthistory/js/admin-compare-compare-es5.min.js.gz',
            '/media/com_contenthistory/js/admin-history-modal-es5.js',
            '/media/com_contenthistory/js/admin-history-modal-es5.min.js',
            '/media/com_contenthistory/js/admin-history-modal-es5.min.js.gz',
            '/media/com_contenthistory/js/admin-history-versions-es5.js',
            '/media/com_contenthistory/js/admin-history-versions-es5.min.js',
            '/media/com_contenthistory/js/admin-history-versions-es5.min.js.gz',
            '/media/com_cpanel/js/admin-add_module-es5.js',
            '/media/com_cpanel/js/admin-add_module-es5.min.js',
            '/media/com_cpanel/js/admin-add_module-es5.min.js.gz',
            '/media/com_cpanel/js/admin-cpanel-default-es5.js',
            '/media/com_cpanel/js/admin-cpanel-default-es5.min.js',
            '/media/com_cpanel/js/admin-cpanel-default-es5.min.js.gz',
            '/media/com_cpanel/js/admin-system-loader-es5.js',
            '/media/com_cpanel/js/admin-system-loader-es5.min.js',
            '/media/com_cpanel/js/admin-system-loader-es5.min.js.gz',
            '/media/com_fields/js/admin-field-changecontext-es5.js',
            '/media/com_fields/js/admin-field-changecontext-es5.min.js',
            '/media/com_fields/js/admin-field-changecontext-es5.min.js.gz',
            '/media/com_fields/js/admin-field-edit-es5.js',
            '/media/com_fields/js/admin-field-edit-es5.min.js',
            '/media/com_fields/js/admin-field-edit-es5.min.js.gz',
            '/media/com_fields/js/admin-field-typehaschanged-es5.js',
            '/media/com_fields/js/admin-field-typehaschanged-es5.min.js',
            '/media/com_fields/js/admin-field-typehaschanged-es5.min.js.gz',
            '/media/com_fields/js/admin-fields-default-batch-es5.js',
            '/media/com_fields/js/admin-fields-default-batch-es5.min.js',
            '/media/com_fields/js/admin-fields-default-batch-es5.min.js.gz',
            '/media/com_fields/js/admin-fields-modal-es5.js',
            '/media/com_fields/js/admin-fields-modal-es5.min.js',
            '/media/com_fields/js/admin-fields-modal-es5.min.js.gz',
            '/media/com_finder/js/debug-es5.js',
            '/media/com_finder/js/debug-es5.min.js',
            '/media/com_finder/js/debug-es5.min.js.gz',
            '/media/com_finder/js/filters-es5.js',
            '/media/com_finder/js/filters-es5.min.js',
            '/media/com_finder/js/filters-es5.min.js.gz',
            '/media/com_finder/js/finder-edit-es5.js',
            '/media/com_finder/js/finder-edit-es5.min.js',
            '/media/com_finder/js/finder-edit-es5.min.js.gz',
            '/media/com_finder/js/finder-es5.js',
            '/media/com_finder/js/finder-es5.min.js',
            '/media/com_finder/js/finder-es5.min.js.gz',
            '/media/com_finder/js/indexer-es5.js',
            '/media/com_finder/js/indexer-es5.min.js',
            '/media/com_finder/js/indexer-es5.min.js.gz',
            '/media/com_finder/js/maps-es5.js',
            '/media/com_finder/js/maps-es5.min.js',
            '/media/com_finder/js/maps-es5.min.js.gz',
            '/media/com_installer/js/changelog-es5.js',
            '/media/com_installer/js/changelog-es5.min.js',
            '/media/com_installer/js/changelog-es5.min.js.gz',
            '/media/com_installer/js/installer-es5.js',
            '/media/com_installer/js/installer-es5.min.js',
            '/media/com_installer/js/installer-es5.min.js.gz',
            '/media/com_joomlaupdate/js/admin-update-default-es5.js',
            '/media/com_joomlaupdate/js/admin-update-default-es5.min.js',
            '/media/com_joomlaupdate/js/admin-update-default-es5.min.js.gz',
            '/media/com_joomlaupdate/js/default-es5.js',
            '/media/com_joomlaupdate/js/default-es5.min.js',
            '/media/com_joomlaupdate/js/default-es5.min.js.gz',
            '/media/com_languages/js/admin-language-edit-change-flag-es5.js',
            '/media/com_languages/js/admin-language-edit-change-flag-es5.min.js',
            '/media/com_languages/js/admin-language-edit-change-flag-es5.min.js.gz',
            '/media/com_languages/js/admin-override-edit-refresh-searchstring-es5.js',
            '/media/com_languages/js/admin-override-edit-refresh-searchstring-es5.min.js',
            '/media/com_languages/js/admin-override-edit-refresh-searchstring-es5.min.js.gz',
            '/media/com_languages/js/overrider-es5.js',
            '/media/com_languages/js/overrider-es5.min.js',
            '/media/com_languages/js/overrider-es5.min.js.gz',
            '/media/com_mails/js/admin-email-template-edit-es5.js',
            '/media/com_mails/js/admin-email-template-edit-es5.min.js',
            '/media/com_mails/js/admin-email-template-edit-es5.min.js.gz',
            '/media/com_media/js/edit-images-es5.js',
            '/media/com_media/js/edit-images-es5.min.js',
            '/media/com_media/js/edit-images-es5.min.js.gz',
            '/media/com_media/js/media-manager-es5.js',
            '/media/com_media/js/media-manager-es5.min.js',
            '/media/com_media/js/media-manager-es5.min.js.gz',
            '/media/com_menus/js/admin-item-edit-es5.js',
            '/media/com_menus/js/admin-item-edit-es5.min.js',
            '/media/com_menus/js/admin-item-edit-es5.min.js.gz',
            '/media/com_menus/js/admin-item-edit_container-es5.js',
            '/media/com_menus/js/admin-item-edit_container-es5.min.js',
            '/media/com_menus/js/admin-item-edit_container-es5.min.js.gz',
            '/media/com_menus/js/admin-item-edit_modules-es5.js',
            '/media/com_menus/js/admin-item-edit_modules-es5.min.js',
            '/media/com_menus/js/admin-item-edit_modules-es5.min.js.gz',
            '/media/com_menus/js/admin-item-modal-es5.js',
            '/media/com_menus/js/admin-item-modal-es5.min.js',
            '/media/com_menus/js/admin-item-modal-es5.min.js.gz',
            '/media/com_menus/js/admin-items-modal-es5.js',
            '/media/com_menus/js/admin-items-modal-es5.min.js',
            '/media/com_menus/js/admin-items-modal-es5.min.js.gz',
            '/media/com_menus/js/admin-menus-default-es5.js',
            '/media/com_menus/js/admin-menus-default-es5.min.js',
            '/media/com_menus/js/admin-menus-default-es5.min.js.gz',
            '/media/com_menus/js/default-batch-body-es5.js',
            '/media/com_menus/js/default-batch-body-es5.min.js',
            '/media/com_menus/js/default-batch-body-es5.min.js.gz',
            '/media/com_modules/js/admin-module-edit-es5.js',
            '/media/com_modules/js/admin-module-edit-es5.min.js',
            '/media/com_modules/js/admin-module-edit-es5.min.js.gz',
            '/media/com_modules/js/admin-module-edit_assignment-es5.js',
            '/media/com_modules/js/admin-module-edit_assignment-es5.min.js',
            '/media/com_modules/js/admin-module-edit_assignment-es5.min.js.gz',
            '/media/com_modules/js/admin-module-search-es5.js',
            '/media/com_modules/js/admin-module-search-es5.min.js',
            '/media/com_modules/js/admin-module-search-es5.min.js.gz',
            '/media/com_modules/js/admin-modules-modal-es5.js',
            '/media/com_modules/js/admin-modules-modal-es5.min.js',
            '/media/com_modules/js/admin-modules-modal-es5.min.js.gz',
            '/media/com_modules/js/admin-select-modal-es5.js',
            '/media/com_modules/js/admin-select-modal-es5.min.js',
            '/media/com_modules/js/admin-select-modal-es5.min.js.gz',
            '/media/com_scheduler/js/admin-view-run-test-task-es5.js',
            '/media/com_scheduler/js/admin-view-run-test-task-es5.min.js',
            '/media/com_scheduler/js/admin-view-run-test-task-es5.min.js.gz',
            '/media/com_scheduler/js/admin-view-select-task-search-es5.js',
            '/media/com_scheduler/js/admin-view-select-task-search-es5.min.js',
            '/media/com_scheduler/js/admin-view-select-task-search-es5.min.js.gz',
            '/media/com_scheduler/js/scheduler-config-es5.js',
            '/media/com_scheduler/js/scheduler-config-es5.min.js',
            '/media/com_scheduler/js/scheduler-config-es5.min.js.gz',
            '/media/com_tags/js/tag-default-es5.js',
            '/media/com_tags/js/tag-default-es5.min.js',
            '/media/com_tags/js/tag-default-es5.min.js.gz',
            '/media/com_tags/js/tag-list-es5.js',
            '/media/com_tags/js/tag-list-es5.min.js',
            '/media/com_tags/js/tag-list-es5.min.js.gz',
            '/media/com_tags/js/tags-default-es5.js',
            '/media/com_tags/js/tags-default-es5.min.js',
            '/media/com_tags/js/tags-default-es5.min.js.gz',
            '/media/com_templates/js/admin-template-compare-es5.js',
            '/media/com_templates/js/admin-template-compare-es5.min.js',
            '/media/com_templates/js/admin-template-compare-es5.min.js.gz',
            '/media/com_templates/js/admin-template-toggle-assignment-es5.js',
            '/media/com_templates/js/admin-template-toggle-assignment-es5.min.js',
            '/media/com_templates/js/admin-template-toggle-assignment-es5.min.js.gz',
            '/media/com_templates/js/admin-template-toggle-switch-es5.js',
            '/media/com_templates/js/admin-template-toggle-switch-es5.min.js',
            '/media/com_templates/js/admin-template-toggle-switch-es5.min.js.gz',
            '/media/com_templates/js/admin-templates-default-es5.js',
            '/media/com_templates/js/admin-templates-default-es5.min.js',
            '/media/com_templates/js/admin-templates-default-es5.min.js.gz',
            '/media/com_users/js/admin-users-groups-es5.js',
            '/media/com_users/js/admin-users-groups-es5.min.js',
            '/media/com_users/js/admin-users-groups-es5.min.js.gz',
            '/media/com_users/js/admin-users-mail-es5.js',
            '/media/com_users/js/admin-users-mail-es5.min.js',
            '/media/com_users/js/admin-users-mail-es5.min.js.gz',
            '/media/com_users/js/two-factor-focus-es5.js',
            '/media/com_users/js/two-factor-focus-es5.min.js',
            '/media/com_users/js/two-factor-focus-es5.min.js.gz',
            '/media/com_users/js/two-factor-list-es5.js',
            '/media/com_users/js/two-factor-list-es5.min.js',
            '/media/com_users/js/two-factor-list-es5.min.js.gz',
            '/media/com_workflow/js/admin-items-workflow-buttons-es5.js',
            '/media/com_workflow/js/admin-items-workflow-buttons-es5.min.js',
            '/media/com_workflow/js/admin-items-workflow-buttons-es5.min.js.gz',
            '/media/com_wrapper/js/iframe-height-es5.js',
            '/media/com_wrapper/js/iframe-height-es5.min.js',
            '/media/com_wrapper/js/iframe-height-es5.min.js.gz',
            '/media/layouts/js/joomla/form/field/category-change-es5.js',
            '/media/layouts/js/joomla/form/field/category-change-es5.min.js',
            '/media/layouts/js/joomla/form/field/category-change-es5.min.js.gz',
            '/media/layouts/js/joomla/html/batch/batch-copymove-es5.js',
            '/media/layouts/js/joomla/html/batch/batch-copymove-es5.min.js',
            '/media/layouts/js/joomla/html/batch/batch-copymove-es5.min.js.gz',
            '/media/mod_login/js/admin-login-es5.js',
            '/media/mod_login/js/admin-login-es5.min.js',
            '/media/mod_login/js/admin-login-es5.min.js.gz',
            '/media/mod_menu/js/admin-menu-es5.js',
            '/media/mod_menu/js/admin-menu-es5.min.js',
            '/media/mod_menu/js/admin-menu-es5.min.js.gz',
            '/media/mod_menu/js/menu-es5.js',
            '/media/mod_menu/js/menu-es5.min.js',
            '/media/mod_menu/js/menu-es5.min.js.gz',
            '/media/mod_multilangstatus/js/admin-multilangstatus-es5.js',
            '/media/mod_multilangstatus/js/admin-multilangstatus-es5.min.js',
            '/media/mod_multilangstatus/js/admin-multilangstatus-es5.min.js.gz',
            '/media/mod_quickicon/js/quickicon-es5.js',
            '/media/mod_quickicon/js/quickicon-es5.min.js',
            '/media/mod_quickicon/js/quickicon-es5.min.js.gz',
            '/media/mod_sampledata/js/sampledata-process-es5.js',
            '/media/mod_sampledata/js/sampledata-process-es5.min.js',
            '/media/mod_sampledata/js/sampledata-process-es5.min.js.gz',
            '/media/plg_captcha_recaptcha/js/recaptcha-es5.js',
            '/media/plg_captcha_recaptcha/js/recaptcha-es5.min.js',
            '/media/plg_captcha_recaptcha/js/recaptcha-es5.min.js.gz',
            '/media/plg_captcha_recaptcha_invisible/js/recaptcha-es5.js',
            '/media/plg_captcha_recaptcha_invisible/js/recaptcha-es5.min.js',
            '/media/plg_captcha_recaptcha_invisible/js/recaptcha-es5.min.js.gz',
            '/media/plg_editors_codemirror/js/joomla-editor-codemirror-es5.js',
            '/media/plg_editors_codemirror/js/joomla-editor-codemirror-es5.min.js',
            '/media/plg_editors_codemirror/js/joomla-editor-codemirror-es5.min.js.gz',
            '/media/plg_editors_none/js/joomla-editor-none-es5.js',
            '/media/plg_editors_none/js/joomla-editor-none-es5.min.js',
            '/media/plg_editors_none/js/joomla-editor-none-es5.min.js.gz',
            '/media/plg_editors_tinymce/js/plugins/highlighter/plugin-es5.js',
            '/media/plg_editors_tinymce/js/plugins/highlighter/plugin-es5.min.js',
            '/media/plg_editors_tinymce/js/plugins/highlighter/plugin-es5.min.js.gz',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source-es5.js',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source-es5.min.js',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source-es5.min.js.gz',
            '/media/plg_editors_tinymce/js/tinymce-builder-es5.js',
            '/media/plg_editors_tinymce/js/tinymce-builder-es5.min.js',
            '/media/plg_editors_tinymce/js/tinymce-builder-es5.min.js.gz',
            '/media/plg_editors_tinymce/js/tinymce-es5.js',
            '/media/plg_editors_tinymce/js/tinymce-es5.min.js',
            '/media/plg_editors_tinymce/js/tinymce-es5.min.js.gz',
            '/media/plg_installer_folderinstaller/js/folderinstaller-es5.js',
            '/media/plg_installer_folderinstaller/js/folderinstaller-es5.min.js',
            '/media/plg_installer_folderinstaller/js/folderinstaller-es5.min.js.gz',
            '/media/plg_installer_packageinstaller/js/packageinstaller-es5.js',
            '/media/plg_installer_packageinstaller/js/packageinstaller-es5.min.js',
            '/media/plg_installer_packageinstaller/js/packageinstaller-es5.min.js.gz',
            '/media/plg_installer_urlinstaller/js/urlinstaller-es5.js',
            '/media/plg_installer_urlinstaller/js/urlinstaller-es5.min.js',
            '/media/plg_installer_urlinstaller/js/urlinstaller-es5.min.js.gz',
            '/media/plg_installer_webinstaller/js/client-es5.js',
            '/media/plg_installer_webinstaller/js/client-es5.min.js',
            '/media/plg_installer_webinstaller/js/client-es5.min.js.gz',
            '/media/plg_media-action_crop/js/crop-es5.js',
            '/media/plg_media-action_crop/js/crop-es5.min.js',
            '/media/plg_media-action_crop/js/crop-es5.min.js.gz',
            '/media/plg_media-action_resize/js/resize-es5.js',
            '/media/plg_media-action_resize/js/resize-es5.min.js',
            '/media/plg_media-action_resize/js/resize-es5.min.js.gz',
            '/media/plg_media-action_rotate/js/rotate-es5.js',
            '/media/plg_media-action_rotate/js/rotate-es5.min.js',
            '/media/plg_media-action_rotate/js/rotate-es5.min.js.gz',
            '/media/plg_multifactorauth_totp/js/setup-es5.js',
            '/media/plg_multifactorauth_totp/js/setup-es5.min.js',
            '/media/plg_multifactorauth_totp/js/setup-es5.min.js.gz',
            '/media/plg_multifactorauth_webauthn/js/webauthn-es5.js',
            '/media/plg_multifactorauth_webauthn/js/webauthn-es5.min.js',
            '/media/plg_multifactorauth_webauthn/js/webauthn-es5.min.js.gz',
            '/media/plg_quickicon_eos/js/snooze-es5.js',
            '/media/plg_quickicon_eos/js/snooze-es5.min.js',
            '/media/plg_quickicon_eos/js/snooze-es5.min.js.gz',
            '/media/plg_quickicon_extensionupdate/js/extensionupdatecheck-es5.js',
            '/media/plg_quickicon_extensionupdate/js/extensionupdatecheck-es5.min.js',
            '/media/plg_quickicon_extensionupdate/js/extensionupdatecheck-es5.min.js.gz',
            '/media/plg_quickicon_joomlaupdate/js/jupdatecheck-es5.js',
            '/media/plg_quickicon_joomlaupdate/js/jupdatecheck-es5.min.js',
            '/media/plg_quickicon_joomlaupdate/js/jupdatecheck-es5.min.js.gz',
            '/media/plg_quickicon_overridecheck/js/overridecheck-es5.js',
            '/media/plg_quickicon_overridecheck/js/overridecheck-es5.min.js',
            '/media/plg_quickicon_overridecheck/js/overridecheck-es5.min.js.gz',
            '/media/plg_quickicon_privacycheck/js/privacycheck-es5.js',
            '/media/plg_quickicon_privacycheck/js/privacycheck-es5.min.js',
            '/media/plg_quickicon_privacycheck/js/privacycheck-es5.min.js.gz',
            '/media/plg_system_debug/js/debug-es5.js',
            '/media/plg_system_debug/js/debug-es5.min.js',
            '/media/plg_system_debug/js/debug-es5.min.js.gz',
            '/media/plg_system_guidedtours/js/guidedtours-es5.js',
            '/media/plg_system_guidedtours/js/guidedtours-es5.min.js',
            '/media/plg_system_guidedtours/js/guidedtours-es5.min.js.gz',
            '/media/plg_system_jooa11y/js/jooa11y-es5.js',
            '/media/plg_system_jooa11y/js/jooa11y-es5.min.js',
            '/media/plg_system_jooa11y/js/jooa11y-es5.min.js.gz',
            '/media/plg_system_schedulerunner/js/run-schedule-es5.js',
            '/media/plg_system_schedulerunner/js/run-schedule-es5.min.js',
            '/media/plg_system_schedulerunner/js/run-schedule-es5.min.js.gz',
            '/media/plg_system_shortcut/js/shortcut-es5.js',
            '/media/plg_system_shortcut/js/shortcut-es5.min.js',
            '/media/plg_system_shortcut/js/shortcut-es5.min.js.gz',
            '/media/plg_system_stats/js/stats-es5.js',
            '/media/plg_system_stats/js/stats-es5.min.js',
            '/media/plg_system_stats/js/stats-es5.min.js.gz',
            '/media/plg_system_stats/js/stats-message-es5.js',
            '/media/plg_system_stats/js/stats-message-es5.min.js',
            '/media/plg_system_stats/js/stats-message-es5.min.js.gz',
            '/media/plg_system_webauthn/js/login-es5.js',
            '/media/plg_system_webauthn/js/login-es5.min.js',
            '/media/plg_system_webauthn/js/login-es5.min.js.gz',
            '/media/plg_system_webauthn/js/management-es5.js',
            '/media/plg_system_webauthn/js/management-es5.min.js',
            '/media/plg_system_webauthn/js/management-es5.min.js.gz',
            '/media/plg_user_token/js/token-es5.js',
            '/media/plg_user_token/js/token-es5.min.js',
            '/media/plg_user_token/js/token-es5.min.js.gz',
            '/media/system/js/core-es5.js',
            '/media/system/js/core-es5.min.js',
            '/media/system/js/core-es5.min.js.gz',
            '/media/system/js/draggable-es5.js',
            '/media/system/js/draggable-es5.min.js',
            '/media/system/js/draggable-es5.min.js.gz',
            '/media/system/js/fields/joomla-field-color-slider-es5.js',
            '/media/system/js/fields/joomla-field-color-slider-es5.min.js',
            '/media/system/js/fields/joomla-field-color-slider-es5.min.js.gz',
            '/media/system/js/fields/joomla-field-fancy-select-es5.js',
            '/media/system/js/fields/joomla-field-fancy-select-es5.min.js',
            '/media/system/js/fields/joomla-field-fancy-select-es5.min.js.gz',
            '/media/system/js/fields/joomla-field-media-es5.js',
            '/media/system/js/fields/joomla-field-media-es5.min.js',
            '/media/system/js/fields/joomla-field-media-es5.min.js.gz',
            '/media/system/js/fields/joomla-field-module-order-es5.js',
            '/media/system/js/fields/joomla-field-module-order-es5.min.js',
            '/media/system/js/fields/joomla-field-module-order-es5.min.js.gz',
            '/media/system/js/fields/joomla-field-permissions-es5.js',
            '/media/system/js/fields/joomla-field-permissions-es5.min.js',
            '/media/system/js/fields/joomla-field-permissions-es5.min.js.gz',
            '/media/system/js/fields/joomla-field-send-test-mail-es5.js',
            '/media/system/js/fields/joomla-field-send-test-mail-es5.min.js',
            '/media/system/js/fields/joomla-field-send-test-mail-es5.min.js.gz',
            '/media/system/js/fields/joomla-field-simple-color-es5.js',
            '/media/system/js/fields/joomla-field-simple-color-es5.min.js',
            '/media/system/js/fields/joomla-field-simple-color-es5.min.js.gz',
            '/media/system/js/fields/joomla-field-subform-es5.js',
            '/media/system/js/fields/joomla-field-subform-es5.min.js',
            '/media/system/js/fields/joomla-field-subform-es5.min.js.gz',
            '/media/system/js/fields/joomla-field-user-es5.js',
            '/media/system/js/fields/joomla-field-user-es5.min.js',
            '/media/system/js/fields/joomla-field-user-es5.min.js.gz',
            '/media/system/js/fields/joomla-media-select-es5.js',
            '/media/system/js/fields/joomla-media-select-es5.min.js',
            '/media/system/js/fields/joomla-media-select-es5.min.js.gz',
            '/media/system/js/fields/passwordstrength-es5.js',
            '/media/system/js/fields/passwordstrength-es5.min.js',
            '/media/system/js/fields/passwordstrength-es5.min.js.gz',
            '/media/system/js/fields/passwordview-es5.js',
            '/media/system/js/fields/passwordview-es5.min.js',
            '/media/system/js/fields/passwordview-es5.min.js.gz',
            '/media/system/js/fields/select-colour-es5.js',
            '/media/system/js/fields/select-colour-es5.min.js',
            '/media/system/js/fields/select-colour-es5.min.js.gz',
            '/media/system/js/fields/validate-es5.js',
            '/media/system/js/fields/validate-es5.min.js',
            '/media/system/js/fields/validate-es5.min.js.gz',
            '/media/system/js/highlight-es5.js',
            '/media/system/js/highlight-es5.min.js',
            '/media/system/js/highlight-es5.min.js.gz',
            '/media/system/js/inlinehelp-es5.js',
            '/media/system/js/inlinehelp-es5.min.js',
            '/media/system/js/inlinehelp-es5.min.js.gz',
            '/media/system/js/joomla-core-loader-es5.js',
            '/media/system/js/joomla-core-loader-es5.min.js',
            '/media/system/js/joomla-core-loader-es5.min.js.gz',
            '/media/system/js/joomla-hidden-mail-es5.js',
            '/media/system/js/joomla-hidden-mail-es5.min.js',
            '/media/system/js/joomla-hidden-mail-es5.min.js.gz',
            '/media/system/js/joomla-toolbar-button-es5.js',
            '/media/system/js/joomla-toolbar-button-es5.min.js',
            '/media/system/js/joomla-toolbar-button-es5.min.js.gz',
            '/media/system/js/keepalive-es5.js',
            '/media/system/js/keepalive-es5.min.js',
            '/media/system/js/keepalive-es5.min.js.gz',
            '/media/system/js/list-view-es5.js',
            '/media/system/js/list-view-es5.min.js',
            '/media/system/js/list-view-es5.min.js.gz',
            '/media/system/js/messages-es5.js',
            '/media/system/js/messages-es5.min.js',
            '/media/system/js/messages-es5.min.js.gz',
            '/media/system/js/multiselect-es5.js',
            '/media/system/js/multiselect-es5.min.js',
            '/media/system/js/multiselect-es5.min.js.gz',
            '/media/system/js/searchtools-es5.js',
            '/media/system/js/searchtools-es5.min.js',
            '/media/system/js/searchtools-es5.min.js.gz',
            '/media/system/js/showon-es5.js',
            '/media/system/js/showon-es5.min.js',
            '/media/system/js/showon-es5.min.js.gz',
            '/media/system/js/table-columns-es5.js',
            '/media/system/js/table-columns-es5.min.js',
            '/media/system/js/table-columns-es5.min.js.gz',
            '/media/templates/administrator/atum/js/template-es5.js',
            '/media/templates/administrator/atum/js/template-es5.min.js',
            '/media/templates/administrator/atum/js/template-es5.min.js.gz',
            '/media/templates/site/cassiopeia/js/mod_menu/menu-metismenu-es5.js',
            '/media/templates/site/cassiopeia/js/mod_menu/menu-metismenu-es5.min.js',
            '/media/templates/site/cassiopeia/js/mod_menu/menu-metismenu-es5.min.js.gz',
            '/media/vendor/bootstrap/js/bootstrap-es5.js',
            '/media/vendor/bootstrap/js/bootstrap-es5.min.js',
            '/media/vendor/bootstrap/js/bootstrap-es5.min.js.gz',
            '/media/vendor/joomla-custom-elements/js/joomla-alert-es5.js',
            '/media/vendor/joomla-custom-elements/js/joomla-alert-es5.min.js',
            '/media/vendor/joomla-custom-elements/js/joomla-alert-es5.min.js.gz',
            '/media/vendor/joomla-custom-elements/js/joomla-tab-es5.js',
            '/media/vendor/joomla-custom-elements/js/joomla-tab-es5.min.js',
            '/media/vendor/joomla-custom-elements/js/joomla-tab-es5.min.js.gz',
            '/media/vendor/mediaelement/js/mediaelement-flash-audio-ogg.swf',
            '/media/vendor/mediaelement/js/mediaelement-flash-audio.swf',
            '/media/vendor/mediaelement/js/mediaelement-flash-video-hls.swf',
            '/media/vendor/mediaelement/js/mediaelement-flash-video-mdash.swf',
            '/media/vendor/mediaelement/js/mediaelement-flash-video.swf',
            '/plugins/editors-xtd/pagebreak/pagebreak.php',
            // From 5.0.0-alpha2 to 5.0.0-alpha3
            '/libraries/classmap.php',
            '/libraries/extensions.classmap.php',
            '/media/vendor/codemirror/addon/comment/comment.js',
            '/media/vendor/codemirror/addon/comment/comment.min.js',
            '/media/vendor/codemirror/addon/comment/comment.min.js.gz',
            '/media/vendor/codemirror/addon/comment/continuecomment.js',
            '/media/vendor/codemirror/addon/comment/continuecomment.min.js',
            '/media/vendor/codemirror/addon/comment/continuecomment.min.js.gz',
            '/media/vendor/codemirror/addon/dialog/dialog.css',
            '/media/vendor/codemirror/addon/dialog/dialog.js',
            '/media/vendor/codemirror/addon/dialog/dialog.min.js',
            '/media/vendor/codemirror/addon/dialog/dialog.min.js.gz',
            '/media/vendor/codemirror/addon/display/autorefresh.js',
            '/media/vendor/codemirror/addon/display/autorefresh.min.js',
            '/media/vendor/codemirror/addon/display/autorefresh.min.js.gz',
            '/media/vendor/codemirror/addon/display/fullscreen.css',
            '/media/vendor/codemirror/addon/display/fullscreen.js',
            '/media/vendor/codemirror/addon/display/fullscreen.min.js',
            '/media/vendor/codemirror/addon/display/fullscreen.min.js.gz',
            '/media/vendor/codemirror/addon/display/panel.js',
            '/media/vendor/codemirror/addon/display/panel.min.js',
            '/media/vendor/codemirror/addon/display/panel.min.js.gz',
            '/media/vendor/codemirror/addon/display/placeholder.js',
            '/media/vendor/codemirror/addon/display/placeholder.min.js',
            '/media/vendor/codemirror/addon/display/placeholder.min.js.gz',
            '/media/vendor/codemirror/addon/display/rulers.js',
            '/media/vendor/codemirror/addon/display/rulers.min.js',
            '/media/vendor/codemirror/addon/display/rulers.min.js.gz',
            '/media/vendor/codemirror/addon/edit/closebrackets.js',
            '/media/vendor/codemirror/addon/edit/closebrackets.min.js',
            '/media/vendor/codemirror/addon/edit/closebrackets.min.js.gz',
            '/media/vendor/codemirror/addon/edit/closetag.js',
            '/media/vendor/codemirror/addon/edit/closetag.min.js',
            '/media/vendor/codemirror/addon/edit/closetag.min.js.gz',
            '/media/vendor/codemirror/addon/edit/continuelist.js',
            '/media/vendor/codemirror/addon/edit/continuelist.min.js',
            '/media/vendor/codemirror/addon/edit/continuelist.min.js.gz',
            '/media/vendor/codemirror/addon/edit/matchbrackets.js',
            '/media/vendor/codemirror/addon/edit/matchbrackets.min.js',
            '/media/vendor/codemirror/addon/edit/matchbrackets.min.js.gz',
            '/media/vendor/codemirror/addon/edit/matchtags.js',
            '/media/vendor/codemirror/addon/edit/matchtags.min.js',
            '/media/vendor/codemirror/addon/edit/matchtags.min.js.gz',
            '/media/vendor/codemirror/addon/edit/trailingspace.js',
            '/media/vendor/codemirror/addon/edit/trailingspace.min.js',
            '/media/vendor/codemirror/addon/edit/trailingspace.min.js.gz',
            '/media/vendor/codemirror/addon/fold/brace-fold.js',
            '/media/vendor/codemirror/addon/fold/brace-fold.min.js',
            '/media/vendor/codemirror/addon/fold/brace-fold.min.js.gz',
            '/media/vendor/codemirror/addon/fold/comment-fold.js',
            '/media/vendor/codemirror/addon/fold/comment-fold.min.js',
            '/media/vendor/codemirror/addon/fold/comment-fold.min.js.gz',
            '/media/vendor/codemirror/addon/fold/foldcode.js',
            '/media/vendor/codemirror/addon/fold/foldcode.min.js',
            '/media/vendor/codemirror/addon/fold/foldcode.min.js.gz',
            '/media/vendor/codemirror/addon/fold/foldgutter.css',
            '/media/vendor/codemirror/addon/fold/foldgutter.js',
            '/media/vendor/codemirror/addon/fold/foldgutter.min.js',
            '/media/vendor/codemirror/addon/fold/foldgutter.min.js.gz',
            '/media/vendor/codemirror/addon/fold/indent-fold.js',
            '/media/vendor/codemirror/addon/fold/indent-fold.min.js',
            '/media/vendor/codemirror/addon/fold/indent-fold.min.js.gz',
            '/media/vendor/codemirror/addon/fold/markdown-fold.js',
            '/media/vendor/codemirror/addon/fold/markdown-fold.min.js',
            '/media/vendor/codemirror/addon/fold/markdown-fold.min.js.gz',
            '/media/vendor/codemirror/addon/fold/xml-fold.js',
            '/media/vendor/codemirror/addon/fold/xml-fold.min.js',
            '/media/vendor/codemirror/addon/fold/xml-fold.min.js.gz',
            '/media/vendor/codemirror/addon/hint/anyword-hint.js',
            '/media/vendor/codemirror/addon/hint/anyword-hint.min.js',
            '/media/vendor/codemirror/addon/hint/anyword-hint.min.js.gz',
            '/media/vendor/codemirror/addon/hint/css-hint.js',
            '/media/vendor/codemirror/addon/hint/css-hint.min.js',
            '/media/vendor/codemirror/addon/hint/css-hint.min.js.gz',
            '/media/vendor/codemirror/addon/hint/html-hint.js',
            '/media/vendor/codemirror/addon/hint/html-hint.min.js',
            '/media/vendor/codemirror/addon/hint/html-hint.min.js.gz',
            '/media/vendor/codemirror/addon/hint/javascript-hint.js',
            '/media/vendor/codemirror/addon/hint/javascript-hint.min.js',
            '/media/vendor/codemirror/addon/hint/javascript-hint.min.js.gz',
            '/media/vendor/codemirror/addon/hint/show-hint.css',
            '/media/vendor/codemirror/addon/hint/show-hint.js',
            '/media/vendor/codemirror/addon/hint/show-hint.min.js',
            '/media/vendor/codemirror/addon/hint/show-hint.min.js.gz',
            '/media/vendor/codemirror/addon/hint/sql-hint.js',
            '/media/vendor/codemirror/addon/hint/sql-hint.min.js',
            '/media/vendor/codemirror/addon/hint/sql-hint.min.js.gz',
            '/media/vendor/codemirror/addon/hint/xml-hint.js',
            '/media/vendor/codemirror/addon/hint/xml-hint.min.js',
            '/media/vendor/codemirror/addon/hint/xml-hint.min.js.gz',
            '/media/vendor/codemirror/addon/lint/coffeescript-lint.js',
            '/media/vendor/codemirror/addon/lint/coffeescript-lint.min.js',
            '/media/vendor/codemirror/addon/lint/coffeescript-lint.min.js.gz',
            '/media/vendor/codemirror/addon/lint/css-lint.js',
            '/media/vendor/codemirror/addon/lint/css-lint.min.js',
            '/media/vendor/codemirror/addon/lint/css-lint.min.js.gz',
            '/media/vendor/codemirror/addon/lint/html-lint.js',
            '/media/vendor/codemirror/addon/lint/html-lint.min.js',
            '/media/vendor/codemirror/addon/lint/html-lint.min.js.gz',
            '/media/vendor/codemirror/addon/lint/javascript-lint.js',
            '/media/vendor/codemirror/addon/lint/javascript-lint.min.js',
            '/media/vendor/codemirror/addon/lint/javascript-lint.min.js.gz',
            '/media/vendor/codemirror/addon/lint/json-lint.js',
            '/media/vendor/codemirror/addon/lint/json-lint.min.js',
            '/media/vendor/codemirror/addon/lint/json-lint.min.js.gz',
            '/media/vendor/codemirror/addon/lint/lint.css',
            '/media/vendor/codemirror/addon/lint/lint.js',
            '/media/vendor/codemirror/addon/lint/lint.min.js',
            '/media/vendor/codemirror/addon/lint/lint.min.js.gz',
            '/media/vendor/codemirror/addon/lint/yaml-lint.js',
            '/media/vendor/codemirror/addon/lint/yaml-lint.min.js',
            '/media/vendor/codemirror/addon/lint/yaml-lint.min.js.gz',
            '/media/vendor/codemirror/addon/merge/merge.css',
            '/media/vendor/codemirror/addon/merge/merge.js',
            '/media/vendor/codemirror/addon/merge/merge.min.js',
            '/media/vendor/codemirror/addon/merge/merge.min.js.gz',
            '/media/vendor/codemirror/addon/mode/loadmode.js',
            '/media/vendor/codemirror/addon/mode/loadmode.min.js',
            '/media/vendor/codemirror/addon/mode/loadmode.min.js.gz',
            '/media/vendor/codemirror/addon/mode/multiplex.js',
            '/media/vendor/codemirror/addon/mode/multiplex.min.js',
            '/media/vendor/codemirror/addon/mode/multiplex.min.js.gz',
            '/media/vendor/codemirror/addon/mode/multiplex_test.js',
            '/media/vendor/codemirror/addon/mode/multiplex_test.min.js',
            '/media/vendor/codemirror/addon/mode/multiplex_test.min.js.gz',
            '/media/vendor/codemirror/addon/mode/overlay.js',
            '/media/vendor/codemirror/addon/mode/overlay.min.js',
            '/media/vendor/codemirror/addon/mode/overlay.min.js.gz',
            '/media/vendor/codemirror/addon/mode/simple.js',
            '/media/vendor/codemirror/addon/mode/simple.min.js',
            '/media/vendor/codemirror/addon/mode/simple.min.js.gz',
            '/media/vendor/codemirror/addon/runmode/colorize.js',
            '/media/vendor/codemirror/addon/runmode/colorize.min.js',
            '/media/vendor/codemirror/addon/runmode/colorize.min.js.gz',
            '/media/vendor/codemirror/addon/runmode/runmode-standalone.js',
            '/media/vendor/codemirror/addon/runmode/runmode-standalone.min.js',
            '/media/vendor/codemirror/addon/runmode/runmode-standalone.min.js.gz',
            '/media/vendor/codemirror/addon/runmode/runmode.js',
            '/media/vendor/codemirror/addon/runmode/runmode.min.js',
            '/media/vendor/codemirror/addon/runmode/runmode.min.js.gz',
            '/media/vendor/codemirror/addon/runmode/runmode.node.js',
            '/media/vendor/codemirror/addon/runmode/runmode.node.min.js',
            '/media/vendor/codemirror/addon/runmode/runmode.node.min.js.gz',
            '/media/vendor/codemirror/addon/scroll/annotatescrollbar.js',
            '/media/vendor/codemirror/addon/scroll/annotatescrollbar.min.js',
            '/media/vendor/codemirror/addon/scroll/annotatescrollbar.min.js.gz',
            '/media/vendor/codemirror/addon/scroll/scrollpastend.js',
            '/media/vendor/codemirror/addon/scroll/scrollpastend.min.js',
            '/media/vendor/codemirror/addon/scroll/scrollpastend.min.js.gz',
            '/media/vendor/codemirror/addon/scroll/simplescrollbars.css',
            '/media/vendor/codemirror/addon/scroll/simplescrollbars.js',
            '/media/vendor/codemirror/addon/scroll/simplescrollbars.min.js',
            '/media/vendor/codemirror/addon/scroll/simplescrollbars.min.js.gz',
            '/media/vendor/codemirror/addon/search/jump-to-line.js',
            '/media/vendor/codemirror/addon/search/jump-to-line.min.js',
            '/media/vendor/codemirror/addon/search/jump-to-line.min.js.gz',
            '/media/vendor/codemirror/addon/search/match-highlighter.js',
            '/media/vendor/codemirror/addon/search/match-highlighter.min.js',
            '/media/vendor/codemirror/addon/search/match-highlighter.min.js.gz',
            '/media/vendor/codemirror/addon/search/matchesonscrollbar.css',
            '/media/vendor/codemirror/addon/search/matchesonscrollbar.js',
            '/media/vendor/codemirror/addon/search/matchesonscrollbar.min.js',
            '/media/vendor/codemirror/addon/search/matchesonscrollbar.min.js.gz',
            '/media/vendor/codemirror/addon/search/search.js',
            '/media/vendor/codemirror/addon/search/search.min.js',
            '/media/vendor/codemirror/addon/search/search.min.js.gz',
            '/media/vendor/codemirror/addon/search/searchcursor.js',
            '/media/vendor/codemirror/addon/search/searchcursor.min.js',
            '/media/vendor/codemirror/addon/search/searchcursor.min.js.gz',
            '/media/vendor/codemirror/addon/selection/active-line.js',
            '/media/vendor/codemirror/addon/selection/active-line.min.js',
            '/media/vendor/codemirror/addon/selection/active-line.min.js.gz',
            '/media/vendor/codemirror/addon/selection/mark-selection.js',
            '/media/vendor/codemirror/addon/selection/mark-selection.min.js',
            '/media/vendor/codemirror/addon/selection/mark-selection.min.js.gz',
            '/media/vendor/codemirror/addon/selection/selection-pointer.js',
            '/media/vendor/codemirror/addon/selection/selection-pointer.min.js',
            '/media/vendor/codemirror/addon/selection/selection-pointer.min.js.gz',
            '/media/vendor/codemirror/addon/tern/tern.css',
            '/media/vendor/codemirror/addon/tern/tern.js',
            '/media/vendor/codemirror/addon/tern/tern.min.js',
            '/media/vendor/codemirror/addon/tern/tern.min.js.gz',
            '/media/vendor/codemirror/addon/tern/worker.js',
            '/media/vendor/codemirror/addon/tern/worker.min.js',
            '/media/vendor/codemirror/addon/tern/worker.min.js.gz',
            '/media/vendor/codemirror/addon/wrap/hardwrap.js',
            '/media/vendor/codemirror/addon/wrap/hardwrap.min.js',
            '/media/vendor/codemirror/addon/wrap/hardwrap.min.js.gz',
            '/media/vendor/codemirror/keymap/emacs.js',
            '/media/vendor/codemirror/keymap/emacs.min.js',
            '/media/vendor/codemirror/keymap/emacs.min.js.gz',
            '/media/vendor/codemirror/keymap/sublime.js',
            '/media/vendor/codemirror/keymap/sublime.min.js',
            '/media/vendor/codemirror/keymap/sublime.min.js.gz',
            '/media/vendor/codemirror/keymap/vim.js',
            '/media/vendor/codemirror/keymap/vim.min.js',
            '/media/vendor/codemirror/keymap/vim.min.js.gz',
            '/media/vendor/codemirror/lib/addons.css',
            '/media/vendor/codemirror/lib/addons.js',
            '/media/vendor/codemirror/lib/addons.min.js',
            '/media/vendor/codemirror/lib/addons.min.js.gz',
            '/media/vendor/codemirror/lib/codemirror.css',
            '/media/vendor/codemirror/lib/codemirror.js',
            '/media/vendor/codemirror/lib/codemirror.min.js',
            '/media/vendor/codemirror/lib/codemirror.min.js.gz',
            '/media/vendor/codemirror/mode/apl/apl.js',
            '/media/vendor/codemirror/mode/apl/apl.min.js',
            '/media/vendor/codemirror/mode/apl/apl.min.js.gz',
            '/media/vendor/codemirror/mode/asciiarmor/asciiarmor.js',
            '/media/vendor/codemirror/mode/asciiarmor/asciiarmor.min.js',
            '/media/vendor/codemirror/mode/asciiarmor/asciiarmor.min.js.gz',
            '/media/vendor/codemirror/mode/asn.1/asn.1.js',
            '/media/vendor/codemirror/mode/asn.1/asn.1.min.js',
            '/media/vendor/codemirror/mode/asn.1/asn.1.min.js.gz',
            '/media/vendor/codemirror/mode/asterisk/asterisk.js',
            '/media/vendor/codemirror/mode/asterisk/asterisk.min.js',
            '/media/vendor/codemirror/mode/asterisk/asterisk.min.js.gz',
            '/media/vendor/codemirror/mode/brainfuck/brainfuck.js',
            '/media/vendor/codemirror/mode/brainfuck/brainfuck.min.js',
            '/media/vendor/codemirror/mode/brainfuck/brainfuck.min.js.gz',
            '/media/vendor/codemirror/mode/clike/clike.js',
            '/media/vendor/codemirror/mode/clike/clike.min.js',
            '/media/vendor/codemirror/mode/clike/clike.min.js.gz',
            '/media/vendor/codemirror/mode/clojure/clojure.js',
            '/media/vendor/codemirror/mode/clojure/clojure.min.js',
            '/media/vendor/codemirror/mode/clojure/clojure.min.js.gz',
            '/media/vendor/codemirror/mode/cmake/cmake.js',
            '/media/vendor/codemirror/mode/cmake/cmake.min.js',
            '/media/vendor/codemirror/mode/cmake/cmake.min.js.gz',
            '/media/vendor/codemirror/mode/cobol/cobol.js',
            '/media/vendor/codemirror/mode/cobol/cobol.min.js',
            '/media/vendor/codemirror/mode/cobol/cobol.min.js.gz',
            '/media/vendor/codemirror/mode/coffeescript/coffeescript.js',
            '/media/vendor/codemirror/mode/coffeescript/coffeescript.min.js',
            '/media/vendor/codemirror/mode/coffeescript/coffeescript.min.js.gz',
            '/media/vendor/codemirror/mode/commonlisp/commonlisp.js',
            '/media/vendor/codemirror/mode/commonlisp/commonlisp.min.js',
            '/media/vendor/codemirror/mode/commonlisp/commonlisp.min.js.gz',
            '/media/vendor/codemirror/mode/crystal/crystal.js',
            '/media/vendor/codemirror/mode/crystal/crystal.min.js',
            '/media/vendor/codemirror/mode/crystal/crystal.min.js.gz',
            '/media/vendor/codemirror/mode/css/css.js',
            '/media/vendor/codemirror/mode/css/css.min.js',
            '/media/vendor/codemirror/mode/css/css.min.js.gz',
            '/media/vendor/codemirror/mode/cypher/cypher.js',
            '/media/vendor/codemirror/mode/cypher/cypher.min.js',
            '/media/vendor/codemirror/mode/cypher/cypher.min.js.gz',
            '/media/vendor/codemirror/mode/d/d.js',
            '/media/vendor/codemirror/mode/d/d.min.js',
            '/media/vendor/codemirror/mode/d/d.min.js.gz',
            '/media/vendor/codemirror/mode/dart/dart.js',
            '/media/vendor/codemirror/mode/dart/dart.min.js',
            '/media/vendor/codemirror/mode/dart/dart.min.js.gz',
            '/media/vendor/codemirror/mode/diff/diff.js',
            '/media/vendor/codemirror/mode/diff/diff.min.js',
            '/media/vendor/codemirror/mode/diff/diff.min.js.gz',
            '/media/vendor/codemirror/mode/django/django.js',
            '/media/vendor/codemirror/mode/django/django.min.js',
            '/media/vendor/codemirror/mode/django/django.min.js.gz',
            '/media/vendor/codemirror/mode/dockerfile/dockerfile.js',
            '/media/vendor/codemirror/mode/dockerfile/dockerfile.min.js',
            '/media/vendor/codemirror/mode/dockerfile/dockerfile.min.js.gz',
            '/media/vendor/codemirror/mode/dtd/dtd.js',
            '/media/vendor/codemirror/mode/dtd/dtd.min.js',
            '/media/vendor/codemirror/mode/dtd/dtd.min.js.gz',
            '/media/vendor/codemirror/mode/dylan/dylan.js',
            '/media/vendor/codemirror/mode/dylan/dylan.min.js',
            '/media/vendor/codemirror/mode/dylan/dylan.min.js.gz',
            '/media/vendor/codemirror/mode/ebnf/ebnf.js',
            '/media/vendor/codemirror/mode/ebnf/ebnf.min.js',
            '/media/vendor/codemirror/mode/ebnf/ebnf.min.js.gz',
            '/media/vendor/codemirror/mode/ecl/ecl.js',
            '/media/vendor/codemirror/mode/ecl/ecl.min.js',
            '/media/vendor/codemirror/mode/ecl/ecl.min.js.gz',
            '/media/vendor/codemirror/mode/eiffel/eiffel.js',
            '/media/vendor/codemirror/mode/eiffel/eiffel.min.js',
            '/media/vendor/codemirror/mode/eiffel/eiffel.min.js.gz',
            '/media/vendor/codemirror/mode/elm/elm.js',
            '/media/vendor/codemirror/mode/elm/elm.min.js',
            '/media/vendor/codemirror/mode/elm/elm.min.js.gz',
            '/media/vendor/codemirror/mode/erlang/erlang.js',
            '/media/vendor/codemirror/mode/erlang/erlang.min.js',
            '/media/vendor/codemirror/mode/erlang/erlang.min.js.gz',
            '/media/vendor/codemirror/mode/factor/factor.js',
            '/media/vendor/codemirror/mode/factor/factor.min.js',
            '/media/vendor/codemirror/mode/factor/factor.min.js.gz',
            '/media/vendor/codemirror/mode/fcl/fcl.js',
            '/media/vendor/codemirror/mode/fcl/fcl.min.js',
            '/media/vendor/codemirror/mode/fcl/fcl.min.js.gz',
            '/media/vendor/codemirror/mode/forth/forth.js',
            '/media/vendor/codemirror/mode/forth/forth.min.js',
            '/media/vendor/codemirror/mode/forth/forth.min.js.gz',
            '/media/vendor/codemirror/mode/fortran/fortran.js',
            '/media/vendor/codemirror/mode/fortran/fortran.min.js',
            '/media/vendor/codemirror/mode/fortran/fortran.min.js.gz',
            '/media/vendor/codemirror/mode/gas/gas.js',
            '/media/vendor/codemirror/mode/gas/gas.min.js',
            '/media/vendor/codemirror/mode/gas/gas.min.js.gz',
            '/media/vendor/codemirror/mode/gfm/gfm.js',
            '/media/vendor/codemirror/mode/gfm/gfm.min.js',
            '/media/vendor/codemirror/mode/gfm/gfm.min.js.gz',
            '/media/vendor/codemirror/mode/gherkin/gherkin.js',
            '/media/vendor/codemirror/mode/gherkin/gherkin.min.js',
            '/media/vendor/codemirror/mode/gherkin/gherkin.min.js.gz',
            '/media/vendor/codemirror/mode/go/go.js',
            '/media/vendor/codemirror/mode/go/go.min.js',
            '/media/vendor/codemirror/mode/go/go.min.js.gz',
            '/media/vendor/codemirror/mode/groovy/groovy.js',
            '/media/vendor/codemirror/mode/groovy/groovy.min.js',
            '/media/vendor/codemirror/mode/groovy/groovy.min.js.gz',
            '/media/vendor/codemirror/mode/haml/haml.js',
            '/media/vendor/codemirror/mode/haml/haml.min.js',
            '/media/vendor/codemirror/mode/haml/haml.min.js.gz',
            '/media/vendor/codemirror/mode/handlebars/handlebars.js',
            '/media/vendor/codemirror/mode/handlebars/handlebars.min.js',
            '/media/vendor/codemirror/mode/handlebars/handlebars.min.js.gz',
            '/media/vendor/codemirror/mode/haskell-literate/haskell-literate.js',
            '/media/vendor/codemirror/mode/haskell-literate/haskell-literate.min.js',
            '/media/vendor/codemirror/mode/haskell-literate/haskell-literate.min.js.gz',
            '/media/vendor/codemirror/mode/haskell/haskell.js',
            '/media/vendor/codemirror/mode/haskell/haskell.min.js',
            '/media/vendor/codemirror/mode/haskell/haskell.min.js.gz',
            '/media/vendor/codemirror/mode/haxe/haxe.js',
            '/media/vendor/codemirror/mode/haxe/haxe.min.js',
            '/media/vendor/codemirror/mode/haxe/haxe.min.js.gz',
            '/media/vendor/codemirror/mode/htmlembedded/htmlembedded.js',
            '/media/vendor/codemirror/mode/htmlembedded/htmlembedded.min.js',
            '/media/vendor/codemirror/mode/htmlembedded/htmlembedded.min.js.gz',
            '/media/vendor/codemirror/mode/htmlmixed/htmlmixed.js',
            '/media/vendor/codemirror/mode/htmlmixed/htmlmixed.min.js',
            '/media/vendor/codemirror/mode/htmlmixed/htmlmixed.min.js.gz',
            '/media/vendor/codemirror/mode/http/http.js',
            '/media/vendor/codemirror/mode/http/http.min.js',
            '/media/vendor/codemirror/mode/http/http.min.js.gz',
            '/media/vendor/codemirror/mode/idl/idl.js',
            '/media/vendor/codemirror/mode/idl/idl.min.js',
            '/media/vendor/codemirror/mode/idl/idl.min.js.gz',
            '/media/vendor/codemirror/mode/javascript/javascript.js',
            '/media/vendor/codemirror/mode/javascript/javascript.min.js',
            '/media/vendor/codemirror/mode/javascript/javascript.min.js.gz',
            '/media/vendor/codemirror/mode/jinja2/jinja2.js',
            '/media/vendor/codemirror/mode/jinja2/jinja2.min.js',
            '/media/vendor/codemirror/mode/jinja2/jinja2.min.js.gz',
            '/media/vendor/codemirror/mode/jsx/jsx.js',
            '/media/vendor/codemirror/mode/jsx/jsx.min.js',
            '/media/vendor/codemirror/mode/jsx/jsx.min.js.gz',
            '/media/vendor/codemirror/mode/julia/julia.js',
            '/media/vendor/codemirror/mode/julia/julia.min.js',
            '/media/vendor/codemirror/mode/julia/julia.min.js.gz',
            '/media/vendor/codemirror/mode/livescript/livescript.js',
            '/media/vendor/codemirror/mode/livescript/livescript.min.js',
            '/media/vendor/codemirror/mode/livescript/livescript.min.js.gz',
            '/media/vendor/codemirror/mode/lua/lua.js',
            '/media/vendor/codemirror/mode/lua/lua.min.js',
            '/media/vendor/codemirror/mode/lua/lua.min.js.gz',
            '/media/vendor/codemirror/mode/markdown/markdown.js',
            '/media/vendor/codemirror/mode/markdown/markdown.min.js',
            '/media/vendor/codemirror/mode/markdown/markdown.min.js.gz',
            '/media/vendor/codemirror/mode/mathematica/mathematica.js',
            '/media/vendor/codemirror/mode/mathematica/mathematica.min.js',
            '/media/vendor/codemirror/mode/mathematica/mathematica.min.js.gz',
            '/media/vendor/codemirror/mode/mbox/mbox.js',
            '/media/vendor/codemirror/mode/mbox/mbox.min.js',
            '/media/vendor/codemirror/mode/mbox/mbox.min.js.gz',
            '/media/vendor/codemirror/mode/meta.js',
            '/media/vendor/codemirror/mode/meta.min.js',
            '/media/vendor/codemirror/mode/meta.min.js.gz',
            '/media/vendor/codemirror/mode/mirc/mirc.js',
            '/media/vendor/codemirror/mode/mirc/mirc.min.js',
            '/media/vendor/codemirror/mode/mirc/mirc.min.js.gz',
            '/media/vendor/codemirror/mode/mllike/mllike.js',
            '/media/vendor/codemirror/mode/mllike/mllike.min.js',
            '/media/vendor/codemirror/mode/mllike/mllike.min.js.gz',
            '/media/vendor/codemirror/mode/modelica/modelica.js',
            '/media/vendor/codemirror/mode/modelica/modelica.min.js',
            '/media/vendor/codemirror/mode/modelica/modelica.min.js.gz',
            '/media/vendor/codemirror/mode/mscgen/mscgen.js',
            '/media/vendor/codemirror/mode/mscgen/mscgen.min.js',
            '/media/vendor/codemirror/mode/mscgen/mscgen.min.js.gz',
            '/media/vendor/codemirror/mode/mumps/mumps.js',
            '/media/vendor/codemirror/mode/mumps/mumps.min.js',
            '/media/vendor/codemirror/mode/mumps/mumps.min.js.gz',
            '/media/vendor/codemirror/mode/nginx/nginx.js',
            '/media/vendor/codemirror/mode/nginx/nginx.min.js',
            '/media/vendor/codemirror/mode/nginx/nginx.min.js.gz',
            '/media/vendor/codemirror/mode/nsis/nsis.js',
            '/media/vendor/codemirror/mode/nsis/nsis.min.js',
            '/media/vendor/codemirror/mode/nsis/nsis.min.js.gz',
            '/media/vendor/codemirror/mode/ntriples/ntriples.js',
            '/media/vendor/codemirror/mode/ntriples/ntriples.min.js',
            '/media/vendor/codemirror/mode/ntriples/ntriples.min.js.gz',
            '/media/vendor/codemirror/mode/octave/octave.js',
            '/media/vendor/codemirror/mode/octave/octave.min.js',
            '/media/vendor/codemirror/mode/octave/octave.min.js.gz',
            '/media/vendor/codemirror/mode/oz/oz.js',
            '/media/vendor/codemirror/mode/oz/oz.min.js',
            '/media/vendor/codemirror/mode/oz/oz.min.js.gz',
            '/media/vendor/codemirror/mode/pascal/pascal.js',
            '/media/vendor/codemirror/mode/pascal/pascal.min.js',
            '/media/vendor/codemirror/mode/pascal/pascal.min.js.gz',
            '/media/vendor/codemirror/mode/pegjs/pegjs.js',
            '/media/vendor/codemirror/mode/pegjs/pegjs.min.js',
            '/media/vendor/codemirror/mode/pegjs/pegjs.min.js.gz',
            '/media/vendor/codemirror/mode/perl/perl.js',
            '/media/vendor/codemirror/mode/perl/perl.min.js',
            '/media/vendor/codemirror/mode/perl/perl.min.js.gz',
            '/media/vendor/codemirror/mode/php/php.js',
            '/media/vendor/codemirror/mode/php/php.min.js',
            '/media/vendor/codemirror/mode/php/php.min.js.gz',
            '/media/vendor/codemirror/mode/pig/pig.js',
            '/media/vendor/codemirror/mode/pig/pig.min.js',
            '/media/vendor/codemirror/mode/pig/pig.min.js.gz',
            '/media/vendor/codemirror/mode/powershell/powershell.js',
            '/media/vendor/codemirror/mode/powershell/powershell.min.js',
            '/media/vendor/codemirror/mode/powershell/powershell.min.js.gz',
            '/media/vendor/codemirror/mode/properties/properties.js',
            '/media/vendor/codemirror/mode/properties/properties.min.js',
            '/media/vendor/codemirror/mode/properties/properties.min.js.gz',
            '/media/vendor/codemirror/mode/protobuf/protobuf.js',
            '/media/vendor/codemirror/mode/protobuf/protobuf.min.js',
            '/media/vendor/codemirror/mode/protobuf/protobuf.min.js.gz',
            '/media/vendor/codemirror/mode/pug/pug.js',
            '/media/vendor/codemirror/mode/pug/pug.min.js',
            '/media/vendor/codemirror/mode/pug/pug.min.js.gz',
            '/media/vendor/codemirror/mode/puppet/puppet.js',
            '/media/vendor/codemirror/mode/puppet/puppet.min.js',
            '/media/vendor/codemirror/mode/puppet/puppet.min.js.gz',
            '/media/vendor/codemirror/mode/python/python.js',
            '/media/vendor/codemirror/mode/python/python.min.js',
            '/media/vendor/codemirror/mode/python/python.min.js.gz',
            '/media/vendor/codemirror/mode/q/q.js',
            '/media/vendor/codemirror/mode/q/q.min.js',
            '/media/vendor/codemirror/mode/q/q.min.js.gz',
            '/media/vendor/codemirror/mode/r/r.js',
            '/media/vendor/codemirror/mode/r/r.min.js',
            '/media/vendor/codemirror/mode/r/r.min.js.gz',
            '/media/vendor/codemirror/mode/rpm/changes/index.html',
            '/media/vendor/codemirror/mode/rpm/rpm.js',
            '/media/vendor/codemirror/mode/rpm/rpm.min.js',
            '/media/vendor/codemirror/mode/rpm/rpm.min.js.gz',
            '/media/vendor/codemirror/mode/rst/rst.js',
            '/media/vendor/codemirror/mode/rst/rst.min.js',
            '/media/vendor/codemirror/mode/rst/rst.min.js.gz',
            '/media/vendor/codemirror/mode/ruby/ruby.js',
            '/media/vendor/codemirror/mode/ruby/ruby.min.js',
            '/media/vendor/codemirror/mode/ruby/ruby.min.js.gz',
            '/media/vendor/codemirror/mode/rust/rust.js',
            '/media/vendor/codemirror/mode/rust/rust.min.js',
            '/media/vendor/codemirror/mode/rust/rust.min.js.gz',
            '/media/vendor/codemirror/mode/sas/sas.js',
            '/media/vendor/codemirror/mode/sas/sas.min.js',
            '/media/vendor/codemirror/mode/sas/sas.min.js.gz',
            '/media/vendor/codemirror/mode/sass/sass.js',
            '/media/vendor/codemirror/mode/sass/sass.min.js',
            '/media/vendor/codemirror/mode/sass/sass.min.js.gz',
            '/media/vendor/codemirror/mode/scheme/scheme.js',
            '/media/vendor/codemirror/mode/scheme/scheme.min.js',
            '/media/vendor/codemirror/mode/scheme/scheme.min.js.gz',
            '/media/vendor/codemirror/mode/shell/shell.js',
            '/media/vendor/codemirror/mode/shell/shell.min.js',
            '/media/vendor/codemirror/mode/shell/shell.min.js.gz',
            '/media/vendor/codemirror/mode/sieve/sieve.js',
            '/media/vendor/codemirror/mode/sieve/sieve.min.js',
            '/media/vendor/codemirror/mode/sieve/sieve.min.js.gz',
            '/media/vendor/codemirror/mode/slim/slim.js',
            '/media/vendor/codemirror/mode/slim/slim.min.js',
            '/media/vendor/codemirror/mode/slim/slim.min.js.gz',
            '/media/vendor/codemirror/mode/smalltalk/smalltalk.js',
            '/media/vendor/codemirror/mode/smalltalk/smalltalk.min.js',
            '/media/vendor/codemirror/mode/smalltalk/smalltalk.min.js.gz',
            '/media/vendor/codemirror/mode/smarty/smarty.js',
            '/media/vendor/codemirror/mode/smarty/smarty.min.js',
            '/media/vendor/codemirror/mode/smarty/smarty.min.js.gz',
            '/media/vendor/codemirror/mode/solr/solr.js',
            '/media/vendor/codemirror/mode/solr/solr.min.js',
            '/media/vendor/codemirror/mode/solr/solr.min.js.gz',
            '/media/vendor/codemirror/mode/soy/soy.js',
            '/media/vendor/codemirror/mode/soy/soy.min.js',
            '/media/vendor/codemirror/mode/soy/soy.min.js.gz',
            '/media/vendor/codemirror/mode/sparql/sparql.js',
            '/media/vendor/codemirror/mode/sparql/sparql.min.js',
            '/media/vendor/codemirror/mode/sparql/sparql.min.js.gz',
            '/media/vendor/codemirror/mode/spreadsheet/spreadsheet.js',
            '/media/vendor/codemirror/mode/spreadsheet/spreadsheet.min.js',
            '/media/vendor/codemirror/mode/spreadsheet/spreadsheet.min.js.gz',
            '/media/vendor/codemirror/mode/sql/sql.js',
            '/media/vendor/codemirror/mode/sql/sql.min.js',
            '/media/vendor/codemirror/mode/sql/sql.min.js.gz',
            '/media/vendor/codemirror/mode/stex/stex.js',
            '/media/vendor/codemirror/mode/stex/stex.min.js',
            '/media/vendor/codemirror/mode/stex/stex.min.js.gz',
            '/media/vendor/codemirror/mode/stylus/stylus.js',
            '/media/vendor/codemirror/mode/stylus/stylus.min.js',
            '/media/vendor/codemirror/mode/stylus/stylus.min.js.gz',
            '/media/vendor/codemirror/mode/swift/swift.js',
            '/media/vendor/codemirror/mode/swift/swift.min.js',
            '/media/vendor/codemirror/mode/swift/swift.min.js.gz',
            '/media/vendor/codemirror/mode/tcl/tcl.js',
            '/media/vendor/codemirror/mode/tcl/tcl.min.js',
            '/media/vendor/codemirror/mode/tcl/tcl.min.js.gz',
            '/media/vendor/codemirror/mode/textile/textile.js',
            '/media/vendor/codemirror/mode/textile/textile.min.js',
            '/media/vendor/codemirror/mode/textile/textile.min.js.gz',
            '/media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.css',
            '/media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.js',
            '/media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.min.js',
            '/media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.min.js.gz',
            '/media/vendor/codemirror/mode/tiki/tiki.css',
            '/media/vendor/codemirror/mode/tiki/tiki.js',
            '/media/vendor/codemirror/mode/tiki/tiki.min.js',
            '/media/vendor/codemirror/mode/tiki/tiki.min.js.gz',
            '/media/vendor/codemirror/mode/toml/toml.js',
            '/media/vendor/codemirror/mode/toml/toml.min.js',
            '/media/vendor/codemirror/mode/toml/toml.min.js.gz',
            '/media/vendor/codemirror/mode/tornado/tornado.js',
            '/media/vendor/codemirror/mode/tornado/tornado.min.js',
            '/media/vendor/codemirror/mode/tornado/tornado.min.js.gz',
            '/media/vendor/codemirror/mode/troff/troff.js',
            '/media/vendor/codemirror/mode/troff/troff.min.js',
            '/media/vendor/codemirror/mode/troff/troff.min.js.gz',
            '/media/vendor/codemirror/mode/ttcn-cfg/ttcn-cfg.js',
            '/media/vendor/codemirror/mode/ttcn-cfg/ttcn-cfg.min.js',
            '/media/vendor/codemirror/mode/ttcn-cfg/ttcn-cfg.min.js.gz',
            '/media/vendor/codemirror/mode/ttcn/ttcn.js',
            '/media/vendor/codemirror/mode/ttcn/ttcn.min.js',
            '/media/vendor/codemirror/mode/ttcn/ttcn.min.js.gz',
            '/media/vendor/codemirror/mode/turtle/turtle.js',
            '/media/vendor/codemirror/mode/turtle/turtle.min.js',
            '/media/vendor/codemirror/mode/turtle/turtle.min.js.gz',
            '/media/vendor/codemirror/mode/twig/twig.js',
            '/media/vendor/codemirror/mode/twig/twig.min.js',
            '/media/vendor/codemirror/mode/twig/twig.min.js.gz',
            '/media/vendor/codemirror/mode/vb/vb.js',
            '/media/vendor/codemirror/mode/vb/vb.min.js',
            '/media/vendor/codemirror/mode/vb/vb.min.js.gz',
            '/media/vendor/codemirror/mode/vbscript/vbscript.js',
            '/media/vendor/codemirror/mode/vbscript/vbscript.min.js',
            '/media/vendor/codemirror/mode/vbscript/vbscript.min.js.gz',
            '/media/vendor/codemirror/mode/velocity/velocity.js',
            '/media/vendor/codemirror/mode/velocity/velocity.min.js',
            '/media/vendor/codemirror/mode/velocity/velocity.min.js.gz',
            '/media/vendor/codemirror/mode/verilog/verilog.js',
            '/media/vendor/codemirror/mode/verilog/verilog.min.js',
            '/media/vendor/codemirror/mode/verilog/verilog.min.js.gz',
            '/media/vendor/codemirror/mode/vhdl/vhdl.js',
            '/media/vendor/codemirror/mode/vhdl/vhdl.min.js',
            '/media/vendor/codemirror/mode/vhdl/vhdl.min.js.gz',
            '/media/vendor/codemirror/mode/vue/vue.js',
            '/media/vendor/codemirror/mode/vue/vue.min.js',
            '/media/vendor/codemirror/mode/vue/vue.min.js.gz',
            '/media/vendor/codemirror/mode/wast/wast.js',
            '/media/vendor/codemirror/mode/wast/wast.min.js',
            '/media/vendor/codemirror/mode/wast/wast.min.js.gz',
            '/media/vendor/codemirror/mode/webidl/webidl.js',
            '/media/vendor/codemirror/mode/webidl/webidl.min.js',
            '/media/vendor/codemirror/mode/webidl/webidl.min.js.gz',
            '/media/vendor/codemirror/mode/xml/xml.js',
            '/media/vendor/codemirror/mode/xml/xml.min.js',
            '/media/vendor/codemirror/mode/xml/xml.min.js.gz',
            '/media/vendor/codemirror/mode/xquery/xquery.js',
            '/media/vendor/codemirror/mode/xquery/xquery.min.js',
            '/media/vendor/codemirror/mode/xquery/xquery.min.js.gz',
            '/media/vendor/codemirror/mode/yacas/yacas.js',
            '/media/vendor/codemirror/mode/yacas/yacas.min.js',
            '/media/vendor/codemirror/mode/yacas/yacas.min.js.gz',
            '/media/vendor/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js',
            '/media/vendor/codemirror/mode/yaml-frontmatter/yaml-frontmatter.min.js',
            '/media/vendor/codemirror/mode/yaml-frontmatter/yaml-frontmatter.min.js.gz',
            '/media/vendor/codemirror/mode/yaml/yaml.js',
            '/media/vendor/codemirror/mode/yaml/yaml.min.js',
            '/media/vendor/codemirror/mode/yaml/yaml.min.js.gz',
            '/media/vendor/codemirror/mode/z80/z80.js',
            '/media/vendor/codemirror/mode/z80/z80.min.js',
            '/media/vendor/codemirror/mode/z80/z80.min.js.gz',
            '/media/vendor/codemirror/theme/3024-day.css',
            '/media/vendor/codemirror/theme/3024-night.css',
            '/media/vendor/codemirror/theme/abbott.css',
            '/media/vendor/codemirror/theme/abcdef.css',
            '/media/vendor/codemirror/theme/ambiance-mobile.css',
            '/media/vendor/codemirror/theme/ambiance.css',
            '/media/vendor/codemirror/theme/ayu-dark.css',
            '/media/vendor/codemirror/theme/ayu-mirage.css',
            '/media/vendor/codemirror/theme/base16-dark.css',
            '/media/vendor/codemirror/theme/base16-light.css',
            '/media/vendor/codemirror/theme/bespin.css',
            '/media/vendor/codemirror/theme/blackboard.css',
            '/media/vendor/codemirror/theme/cobalt.css',
            '/media/vendor/codemirror/theme/colorforth.css',
            '/media/vendor/codemirror/theme/darcula.css',
            '/media/vendor/codemirror/theme/dracula.css',
            '/media/vendor/codemirror/theme/duotone-dark.css',
            '/media/vendor/codemirror/theme/duotone-light.css',
            '/media/vendor/codemirror/theme/eclipse.css',
            '/media/vendor/codemirror/theme/elegant.css',
            '/media/vendor/codemirror/theme/erlang-dark.css',
            '/media/vendor/codemirror/theme/gruvbox-dark.css',
            '/media/vendor/codemirror/theme/hopscotch.css',
            '/media/vendor/codemirror/theme/icecoder.css',
            '/media/vendor/codemirror/theme/idea.css',
            '/media/vendor/codemirror/theme/isotope.css',
            '/media/vendor/codemirror/theme/juejin.css',
            '/media/vendor/codemirror/theme/lesser-dark.css',
            '/media/vendor/codemirror/theme/liquibyte.css',
            '/media/vendor/codemirror/theme/lucario.css',
            '/media/vendor/codemirror/theme/material-darker.css',
            '/media/vendor/codemirror/theme/material-ocean.css',
            '/media/vendor/codemirror/theme/material-palenight.css',
            '/media/vendor/codemirror/theme/material.css',
            '/media/vendor/codemirror/theme/mbo.css',
            '/media/vendor/codemirror/theme/mdn-like.css',
            '/media/vendor/codemirror/theme/midnight.css',
            '/media/vendor/codemirror/theme/monokai.css',
            '/media/vendor/codemirror/theme/moxer.css',
            '/media/vendor/codemirror/theme/neat.css',
            '/media/vendor/codemirror/theme/neo.css',
            '/media/vendor/codemirror/theme/night.css',
            '/media/vendor/codemirror/theme/nord.css',
            '/media/vendor/codemirror/theme/oceanic-next.css',
            '/media/vendor/codemirror/theme/panda-syntax.css',
            '/media/vendor/codemirror/theme/paraiso-dark.css',
            '/media/vendor/codemirror/theme/paraiso-light.css',
            '/media/vendor/codemirror/theme/pastel-on-dark.css',
            '/media/vendor/codemirror/theme/railscasts.css',
            '/media/vendor/codemirror/theme/rubyblue.css',
            '/media/vendor/codemirror/theme/seti.css',
            '/media/vendor/codemirror/theme/shadowfox.css',
            '/media/vendor/codemirror/theme/solarized.css',
            '/media/vendor/codemirror/theme/ssms.css',
            '/media/vendor/codemirror/theme/the-matrix.css',
            '/media/vendor/codemirror/theme/tomorrow-night-bright.css',
            '/media/vendor/codemirror/theme/tomorrow-night-eighties.css',
            '/media/vendor/codemirror/theme/ttcn.css',
            '/media/vendor/codemirror/theme/twilight.css',
            '/media/vendor/codemirror/theme/vibrant-ink.css',
            '/media/vendor/codemirror/theme/xq-dark.css',
            '/media/vendor/codemirror/theme/xq-light.css',
            '/media/vendor/codemirror/theme/yeti.css',
            '/media/vendor/codemirror/theme/yonce.css',
            '/media/vendor/codemirror/theme/zenburn.css',
            '/plugins/editors/codemirror/fonts.json',
            '/plugins/editors/codemirror/layouts/editors/codemirror/element.php',
            '/plugins/editors/codemirror/layouts/editors/codemirror/styles.php',
            '/plugins/editors/codemirror/src/Field/FontsField.php',
            // From 5.0.0-alpha3 to 5.0.0-alpha4
            '/libraries/src/Event/Application/DeamonForkEvent.php',
            '/libraries/src/Event/Application/DeamonReceiveSignalEvent.php',
            '/media/plg_editors_tinymce/js/plugins/highlighter/plugin.js',
            '/media/plg_editors_tinymce/js/plugins/highlighter/plugin.min.js',
            '/media/plg_editors_tinymce/js/plugins/highlighter/plugin.min.js.gz',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source.css',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source.html',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source.js',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source.min.css',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source.min.css.gz',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source.min.js',
            '/media/plg_editors_tinymce/js/plugins/highlighter/source.min.js.gz',
            '/media/plg_system_compat/es5.asset.json',
            // From 5.0.0-alpha4 to 5.0.0-beta1
            '/administrator/components/com_categories/tmpl/categories/default_batch_footer.php',
            '/administrator/components/com_content/tmpl/articles/default_batch_footer.php',
            '/administrator/language/en-GB/plg_twofactorauth_totp.ini',
            '/administrator/language/en-GB/plg_twofactorauth_totp.sys.ini',
            '/administrator/language/en-GB/plg_twofactorauth_yubikey.ini',
            '/administrator/language/en-GB/plg_twofactorauth_yubikey.sys.ini',
            '/media/com_contenthistory/js/admin-history-versions.js',
            '/media/com_contenthistory/js/admin-history-versions.min.js',
            '/media/com_contenthistory/js/admin-history-versions.min.js.gz',
            // From 5.0.0-beta1 to 5.0.0-beta2
            '/language/en-GB/lib_simplepie.sys.ini',
            '/libraries/src/Cache/Storage/WincacheStorage.php',
            // From 5.0.0-beta2 to 5.0.0-beta3
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/AbstractString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/AbstractTime.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/ASNObject.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Base128.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Composite/AttributeTypeAndValue.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Composite/RDNString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Composite/RelativeDistinguishedName.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Construct.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Exception/NotImplementedException.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Exception/ParserException.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/ExplicitlyTaggedObject.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Identifier.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/OID.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Parsable.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/TemplateParser.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/BitString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/BMPString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Boolean.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/CharacterString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Enumerated.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GeneralizedTime.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GeneralString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GraphicString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/IA5String.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Integer.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/NullObject.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/NumericString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/ObjectDescriptor.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/ObjectIdentifier.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/OctetString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/PrintableString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/RelativeObjectIdentifier.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Sequence.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Set.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/T61String.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UniversalString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UTCTime.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UTF8String.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal/VisibleString.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/UnknownConstructedObject.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/UnknownObject.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/Utility/BigInteger.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/Utility/BigIntegerBcmath.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/Utility/BigIntegerGmp.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/AlgorithmIdentifier.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/CertificateExtensions.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/CertificateSubject.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/CSR/Attributes.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/CSR/CSR.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/PrivateKey.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/PublicKey.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/SAN/DNSName.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/SAN/IPAddress.php',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/SAN/SubjectAlternativeNames.php',
            '/libraries/vendor/fgrosse/phpasn1/LICENSE',
            '/libraries/vendor/stella-maris/clock/LICENSE.md',
            '/libraries/vendor/stella-maris/clock/src/ClockInterface.php',
            '/media/com_scheduler/css/admin-view-select-task.css',
            '/media/com_scheduler/css/admin-view-select-task.min.css',
            '/media/com_scheduler/css/admin-view-select-task.min.css.gz',
            '/media/system/css/calendar-jos.css',
            '/media/system/css/calendar-jos.min.css',
            '/media/system/css/calendar-jos.min.css.gz',
            '/media/system/css/debug.css',
            '/media/system/css/debug.min.css',
            '/media/system/css/debug.min.css.gz',
            '/media/system/css/frontediting.css',
            '/media/system/css/frontediting.min.css',
            '/media/system/css/frontediting.min.css.gz',
            '/media/system/css/mootree.css',
            '/media/system/css/mootree.min.css',
            '/media/system/css/mootree.min.css.gz',
            '/media/system/css/mootree_rtl.css',
            '/media/system/css/mootree_rtl.min.css',
            '/media/system/css/mootree_rtl.min.css.gz',
            '/media/system/css/sortablelist.css',
            '/media/system/css/sortablelist.min.css',
            '/media/system/css/sortablelist.min.css.gz',
        ];

        $folders = [
            // From 4.4 to 5.0
            '/plugins/system/webauthn/src/Hotfix',
            '/plugins/multifactorauth/webauthn/src/Hotfix',
            '/media/vendor/tinymce/themes/mobile',
            '/media/vendor/tinymce/skins/ui/oxide/fonts',
            '/media/vendor/tinymce/skins/ui/oxide-dark/fonts',
            '/media/vendor/tinymce/plugins/toc',
            '/media/vendor/tinymce/plugins/textpattern',
            '/media/vendor/tinymce/plugins/textcolor',
            '/media/vendor/tinymce/plugins/template',
            '/media/vendor/tinymce/plugins/tabfocus',
            '/media/vendor/tinymce/plugins/spellchecker',
            '/media/vendor/tinymce/plugins/print',
            '/media/vendor/tinymce/plugins/paste',
            '/media/vendor/tinymce/plugins/noneditable',
            '/media/vendor/tinymce/plugins/legacyoutput',
            '/media/vendor/tinymce/plugins/imagetools',
            '/media/vendor/tinymce/plugins/hr',
            '/media/vendor/tinymce/plugins/fullpage',
            '/media/vendor/tinymce/plugins/contextmenu',
            '/media/vendor/tinymce/plugins/colorpicker',
            '/media/vendor/tinymce/plugins/bbcode',
            '/libraries/vendor/symfony/polyfill-php81/Resources/stubs',
            '/libraries/vendor/symfony/polyfill-php81/Resources',
            '/libraries/vendor/symfony/polyfill-php81',
            '/libraries/vendor/symfony/polyfill-php80/Resources/stubs',
            '/libraries/vendor/symfony/polyfill-php80/Resources',
            '/libraries/vendor/symfony/polyfill-php80',
            '/libraries/vendor/symfony/polyfill-php73/Resources/stubs',
            '/libraries/vendor/symfony/polyfill-php73/Resources',
            '/libraries/vendor/symfony/polyfill-php73',
            '/libraries/vendor/symfony/polyfill-php72',
            '/libraries/vendor/spomky-labs/base64url/src',
            '/libraries/vendor/spomky-labs/base64url',
            '/libraries/vendor/ramsey/uuid/src/Provider/Time',
            '/libraries/vendor/ramsey/uuid/src/Provider/Node',
            '/libraries/vendor/ramsey/uuid/src/Provider',
            '/libraries/vendor/ramsey/uuid/src/Generator',
            '/libraries/vendor/ramsey/uuid/src/Exception',
            '/libraries/vendor/ramsey/uuid/src/Converter/Time',
            '/libraries/vendor/ramsey/uuid/src/Converter/Number',
            '/libraries/vendor/ramsey/uuid/src/Converter',
            '/libraries/vendor/ramsey/uuid/src/Codec',
            '/libraries/vendor/ramsey/uuid/src/Builder',
            '/libraries/vendor/ramsey/uuid/src',
            '/libraries/vendor/ramsey/uuid',
            '/libraries/vendor/ramsey',
            '/libraries/vendor/psr/log/Psr/Log',
            '/libraries/vendor/psr/log/Psr',
            '/libraries/vendor/nyholm/psr7/src/Factory',
            '/libraries/vendor/nyholm/psr7/src',
            '/libraries/vendor/nyholm/psr7',
            '/libraries/vendor/nyholm',
            '/libraries/vendor/lcobucci/jwt/src/Parsing',
            '/libraries/vendor/lcobucci/jwt/src/Claim',
            '/libraries/vendor/lcobucci/jwt/compat',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/src',
            '/libraries/vendor/laminas/laminas-zendframework-bridge/config',
            '/libraries/vendor/laminas/laminas-zendframework-bridge',
            '/libraries/vendor/joomla/ldap/src',
            '/libraries/vendor/joomla/ldap',
            '/libraries/vendor/beberlei/assert/lib/Assert',
            '/libraries/vendor/beberlei/assert/lib',
            '/libraries/vendor/beberlei/assert',
            '/libraries/vendor/beberlei',
            '/administrator/components/com_admin/sql/others/mysql',
            '/administrator/components/com_admin/sql/others',
            // From 5.0.0-alpha2 to 5.0.0-alpha3
            '/plugins/editors/codemirror/src/Field',
            '/media/vendor/codemirror/theme',
            '/media/vendor/codemirror/mode/z80',
            '/media/vendor/codemirror/mode/yaml-frontmatter',
            '/media/vendor/codemirror/mode/yaml',
            '/media/vendor/codemirror/mode/yacas',
            '/media/vendor/codemirror/mode/xquery',
            '/media/vendor/codemirror/mode/xml',
            '/media/vendor/codemirror/mode/webidl',
            '/media/vendor/codemirror/mode/wast',
            '/media/vendor/codemirror/mode/vue',
            '/media/vendor/codemirror/mode/vhdl',
            '/media/vendor/codemirror/mode/verilog',
            '/media/vendor/codemirror/mode/velocity',
            '/media/vendor/codemirror/mode/vbscript',
            '/media/vendor/codemirror/mode/vb',
            '/media/vendor/codemirror/mode/twig',
            '/media/vendor/codemirror/mode/turtle',
            '/media/vendor/codemirror/mode/ttcn-cfg',
            '/media/vendor/codemirror/mode/ttcn',
            '/media/vendor/codemirror/mode/troff',
            '/media/vendor/codemirror/mode/tornado',
            '/media/vendor/codemirror/mode/toml',
            '/media/vendor/codemirror/mode/tiki',
            '/media/vendor/codemirror/mode/tiddlywiki',
            '/media/vendor/codemirror/mode/textile',
            '/media/vendor/codemirror/mode/tcl',
            '/media/vendor/codemirror/mode/swift',
            '/media/vendor/codemirror/mode/stylus',
            '/media/vendor/codemirror/mode/stex',
            '/media/vendor/codemirror/mode/sql',
            '/media/vendor/codemirror/mode/spreadsheet',
            '/media/vendor/codemirror/mode/sparql',
            '/media/vendor/codemirror/mode/soy',
            '/media/vendor/codemirror/mode/solr',
            '/media/vendor/codemirror/mode/smarty',
            '/media/vendor/codemirror/mode/smalltalk',
            '/media/vendor/codemirror/mode/slim',
            '/media/vendor/codemirror/mode/sieve',
            '/media/vendor/codemirror/mode/shell',
            '/media/vendor/codemirror/mode/scheme',
            '/media/vendor/codemirror/mode/sass',
            '/media/vendor/codemirror/mode/sas',
            '/media/vendor/codemirror/mode/rust',
            '/media/vendor/codemirror/mode/ruby',
            '/media/vendor/codemirror/mode/rst',
            '/media/vendor/codemirror/mode/rpm/changes',
            '/media/vendor/codemirror/mode/rpm',
            '/media/vendor/codemirror/mode/r',
            '/media/vendor/codemirror/mode/q',
            '/media/vendor/codemirror/mode/python',
            '/media/vendor/codemirror/mode/puppet',
            '/media/vendor/codemirror/mode/pug',
            '/media/vendor/codemirror/mode/protobuf',
            '/media/vendor/codemirror/mode/properties',
            '/media/vendor/codemirror/mode/powershell',
            '/media/vendor/codemirror/mode/pig',
            '/media/vendor/codemirror/mode/php',
            '/media/vendor/codemirror/mode/perl',
            '/media/vendor/codemirror/mode/pegjs',
            '/media/vendor/codemirror/mode/pascal',
            '/media/vendor/codemirror/mode/oz',
            '/media/vendor/codemirror/mode/octave',
            '/media/vendor/codemirror/mode/ntriples',
            '/media/vendor/codemirror/mode/nsis',
            '/media/vendor/codemirror/mode/nginx',
            '/media/vendor/codemirror/mode/mumps',
            '/media/vendor/codemirror/mode/mscgen',
            '/media/vendor/codemirror/mode/modelica',
            '/media/vendor/codemirror/mode/mllike',
            '/media/vendor/codemirror/mode/mirc',
            '/media/vendor/codemirror/mode/mbox',
            '/media/vendor/codemirror/mode/mathematica',
            '/media/vendor/codemirror/mode/markdown',
            '/media/vendor/codemirror/mode/lua',
            '/media/vendor/codemirror/mode/livescript',
            '/media/vendor/codemirror/mode/julia',
            '/media/vendor/codemirror/mode/jsx',
            '/media/vendor/codemirror/mode/jinja2',
            '/media/vendor/codemirror/mode/javascript',
            '/media/vendor/codemirror/mode/idl',
            '/media/vendor/codemirror/mode/http',
            '/media/vendor/codemirror/mode/htmlmixed',
            '/media/vendor/codemirror/mode/htmlembedded',
            '/media/vendor/codemirror/mode/haxe',
            '/media/vendor/codemirror/mode/haskell-literate',
            '/media/vendor/codemirror/mode/haskell',
            '/media/vendor/codemirror/mode/handlebars',
            '/media/vendor/codemirror/mode/haml',
            '/media/vendor/codemirror/mode/groovy',
            '/media/vendor/codemirror/mode/go',
            '/media/vendor/codemirror/mode/gherkin',
            '/media/vendor/codemirror/mode/gfm',
            '/media/vendor/codemirror/mode/gas',
            '/media/vendor/codemirror/mode/fortran',
            '/media/vendor/codemirror/mode/forth',
            '/media/vendor/codemirror/mode/fcl',
            '/media/vendor/codemirror/mode/factor',
            '/media/vendor/codemirror/mode/erlang',
            '/media/vendor/codemirror/mode/elm',
            '/media/vendor/codemirror/mode/eiffel',
            '/media/vendor/codemirror/mode/ecl',
            '/media/vendor/codemirror/mode/ebnf',
            '/media/vendor/codemirror/mode/dylan',
            '/media/vendor/codemirror/mode/dtd',
            '/media/vendor/codemirror/mode/dockerfile',
            '/media/vendor/codemirror/mode/django',
            '/media/vendor/codemirror/mode/diff',
            '/media/vendor/codemirror/mode/dart',
            '/media/vendor/codemirror/mode/d',
            '/media/vendor/codemirror/mode/cypher',
            '/media/vendor/codemirror/mode/css',
            '/media/vendor/codemirror/mode/crystal',
            '/media/vendor/codemirror/mode/commonlisp',
            '/media/vendor/codemirror/mode/coffeescript',
            '/media/vendor/codemirror/mode/cobol',
            '/media/vendor/codemirror/mode/cmake',
            '/media/vendor/codemirror/mode/clojure',
            '/media/vendor/codemirror/mode/clike',
            '/media/vendor/codemirror/mode/brainfuck',
            '/media/vendor/codemirror/mode/asterisk',
            '/media/vendor/codemirror/mode/asn.1',
            '/media/vendor/codemirror/mode/asciiarmor',
            '/media/vendor/codemirror/mode/apl',
            '/media/vendor/codemirror/mode',
            '/media/vendor/codemirror/lib',
            '/media/vendor/codemirror/keymap',
            '/media/vendor/codemirror/addon/wrap',
            '/media/vendor/codemirror/addon/tern',
            '/media/vendor/codemirror/addon/selection',
            '/media/vendor/codemirror/addon/search',
            '/media/vendor/codemirror/addon/scroll',
            '/media/vendor/codemirror/addon/runmode',
            '/media/vendor/codemirror/addon/mode',
            '/media/vendor/codemirror/addon/merge',
            '/media/vendor/codemirror/addon/lint',
            '/media/vendor/codemirror/addon/hint',
            '/media/vendor/codemirror/addon/fold',
            '/media/vendor/codemirror/addon/edit',
            '/media/vendor/codemirror/addon/display',
            '/media/vendor/codemirror/addon/dialog',
            '/media/vendor/codemirror/addon/comment',
            '/media/vendor/codemirror/addon',
            // From 5.0.0-alpha3 to 5.0.0-alpha4
            '/templates/system/incompatible.html,/includes',
            '/templates/system/incompatible.html,',
            '/media/plg_system_compat',
            '/media/plg_editors_tinymce/js/plugins/highlighter',
            // From 5.0.0-beta2 to 5.0.0-beta3
            '/libraries/vendor/stella-maris/clock/src',
            '/libraries/vendor/stella-maris/clock',
            '/libraries/vendor/stella-maris',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/SAN',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509/CSR',
            '/libraries/vendor/fgrosse/phpasn1/lib/X509',
            '/libraries/vendor/fgrosse/phpasn1/lib/Utility',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Universal',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Exception',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1/Composite',
            '/libraries/vendor/fgrosse/phpasn1/lib/ASN1',
            '/libraries/vendor/fgrosse/phpasn1/lib',
            '/libraries/vendor/fgrosse/phpasn1',
            '/libraries/vendor/fgrosse',
        ];

        $status['files_checked']   = $files;
        $status['folders_checked'] = $folders;

        foreach ($files as $file) {
            if ($fileExists = is_file(JPATH_ROOT . $file)) {
                $status['files_exist'][] = $file;

                if ($dryRun === false) {
                    if (File::delete(JPATH_ROOT . $file)) {
                        $status['files_deleted'][] = $file;
                    } else {
                        $status['files_errors'][] = sprintf('Error on deleting file or folder %s', $file);
                    }
                }
            }
        }

        foreach ($folders as $folder) {
            if ($folderExists = Folder::exists(JPATH_ROOT . $folder)) {
                $status['folders_exist'][] = $folder;

                if ($dryRun === false) {
                    if (Folder::delete(JPATH_ROOT . $folder)) {
                        $status['folders_deleted'][] = $folder;
                    } else {
                        $status['folders_errors'][] = sprintf('Error on deleting file or folder %s', $folder);
                    }
                }
            }
        }

        $this->fixFilenameCasing();

        if ($suppressOutput === false && \count($status['folders_errors'])) {
            echo implode('<br>', $status['folders_errors']);
        }

        if ($suppressOutput === false && \count($status['files_errors'])) {
            echo implode('<br>', $status['files_errors']);
        }

        return $status;
    }

    /**
     * Method to create assets for newly installed components
     *
     * @param   Installer  $installer  The class calling this method
     *
     * @return  boolean
     *
     * @since   3.2
     */
    public function updateAssets($installer)
    {
        // List all components added since 4.0
        $newComponents = [
            // Components to be added here
        ];

        foreach ($newComponents as $component) {
            /** @var \Joomla\CMS\Table\Asset $asset */
            $asset = Table::getInstance('Asset');

            if ($asset->loadByName($component)) {
                continue;
            }

            $asset->name      = $component;
            $asset->parent_id = 1;
            $asset->rules     = '{}';
            $asset->title     = $component;
            $asset->setLocation(1, 'last-child');

            if (!$asset->store()) {
                $this->collectError(__METHOD__, new \Exception($asset->getError(true)));

                // Install failed, roll back changes
                $installer->abort(Text::sprintf('JLIB_INSTALLER_ABORT_COMP_INSTALL_ROLLBACK', $asset->getError(true)));

                return false;
            }
        }

        return true;
    }

    /**
     * This method clean the Joomla Cache using the method `clean` from the com_cache model
     *
     * @return  void
     *
     * @since   3.5.1
     */
    private function cleanJoomlaCache()
    {
        /** @var \Joomla\Component\Cache\Administrator\Model\CacheModel $model */
        $model = Factory::getApplication()->bootComponent('com_cache')->getMVCFactory()
            ->createModel('Cache', 'Administrator', ['ignore_request' => true]);

        // Clean frontend cache
        $model->clean();

        // Clean admin cache
        $model->setState('client_id', 1);
        $model->clean();
    }

    /**
     * Called after any type of action
     *
     * @param   string     $action     Which action is happening (install|uninstall|discover_install|update)
     * @param   Installer  $installer  The class calling this method
     *
     * @return  boolean  True on success
     *
     * @since   4.0.0
     */
    public function postflight($action, $installer)
    {
        if ($action !== 'update') {
            return true;
        }

        if (empty($this->fromVersion) || version_compare($this->fromVersion, '5.0.0', 'ge')) {
            return true;
        }

        // Add here code which shall be executed only when updating from an older version than 5.0.0
        if (!$this->migrateTinymceConfiguration()) {
            return false;
        }

        if (!$this->migrateDeleteActionlogsConfiguration()) {
            return false;
        }

        if (!$this->migratePrivacyconsentConfiguration()) {
            return false;
        }

        $this->setGuidedToursUid();

        // Refresh versionable assets cache.
        Factory::getApplication()->flushAssets();

        return true;
    }

    /**
     * Migrate Deleteactionlogs plugin configuration
     *
     * @return  boolean  True on success
     *
     * @since   5.0.0
     */
    private function migrateDeleteActionlogsConfiguration(): bool
    {
        $db = Factory::getDbo();

        try {
            // Get the ActionLogs system plugin's parameters
            $row = $db->setQuery(
                $db->getQuery(true)
                    ->select([$db->quotename('enabled'), $db->quoteName('params')])
                    ->from($db->quoteName('#__extensions'))
                    ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
                    ->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
                    ->where($db->quoteName('element') . ' = ' . $db->quote('actionlogs'))
            )->loadObject();
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return false;
        }

        // If not existing or disabled there is nothing to migrate
        if (!$row || !$row->enabled) {
            return true;
        }

        $params = new Registry($row->params);

        // If deletion of outdated logs was disabled there is nothing to migrate
        if (!$params->get('logDeletePeriod', 0)) {
            return true;
        }

        /** @var SchedulerComponent $component */
        $component = Factory::getApplication()->bootComponent('com_scheduler');

        /** @var TaskModel $model */
        $model = $component->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]);
        $task  = [
            'title'           => 'Delete Action Logs',
            'type'            => 'delete.actionlogs',
            'execution_rules' => [
                'rule-type'      => 'interval-hours',
                'interval-hours' => 24,
                'exec-time'      => gmdate('H:i', $params->get('lastrun', time())),
                'exec-day'       => gmdate('d'),
            ],
            'state'  => 1,
            'params' => [
                'logDeletePeriod' => $params->get('logDeletePeriod', 0),
            ],
        ];

        try {
            $model->save($task);
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return false;
        }

        return true;
    }
    /**
     * Migrate privacyconsents system plugin configuration
     *
     * @return  boolean  True on success
     *
     * @since   5.0.0
     */
    private function migratePrivacyconsentConfiguration(): bool
    {
        $db = Factory::getDbo();

        try {
            // Get the PrivacyConsent system plugin's parameters
            $row = $db->setQuery(
                $db->getQuery(true)
                    ->select([$db->quotename('enabled'), $db->quoteName('params')])
                    ->from($db->quoteName('#__extensions'))
                    ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
                    ->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
                    ->where($db->quoteName('element') . ' = ' . $db->quote('privacyconsent'))
            )->loadObject();
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return false;
        }

        // If not existing or disabled there is nothing to migrate
        if (!$row || !$row->enabled) {
            return true;
        }

        $params = new Registry($row->params);

        // If consent expiration was disabled there is nothing to migrate
        if (!$params->get('enabled', 0)) {
            return true;
        }

        /** @var SchedulerComponent $component */
        $component = Factory::getApplication()->bootComponent('com_scheduler');

        /** @var TaskModel $model */
        $model = $component->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]);
        $task  = [
            'title'           => 'Privacy Consent',
            'type'            => 'privacy.consent',
            'execution_rules' => [
                'rule-type'     => 'interval-days',
                'interval-days' => $params->get('cachetimeout', 30),
                'exec-time'     => gmdate('H:i', $params->get('lastrun', time())),
                'exec-day'      => gmdate('d'),
            ],
            'state'  => 1,
            'params' => [
                'consentexpiration' => $params->get('consentexpiration', 360),
                'remind'            => $params->get('remind', 30),
            ],
        ];

        try {
            $model->save($task);
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return false;
        }

        // Refresh versionable assets cache.
        Factory::getApplication()->flushAssets();

        return true;
    }

    /**
     * Migrate TinyMCE editor plugin configuration
     *
     * @return  boolean  True on success
     *
     * @since   5.0.0
     */
    private function migrateTinymceConfiguration(): bool
    {
        $db = Factory::getDbo();

        try {
            // Get the TinyMCE editor plugin's parameters
            $params = $db->setQuery(
                $db->getQuery(true)
                    ->select($db->quoteName('params'))
                    ->from($db->quoteName('#__extensions'))
                    ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
                    ->where($db->quoteName('folder') . ' = ' . $db->quote('editors'))
                    ->where($db->quoteName('element') . ' = ' . $db->quote('tinymce'))
            )->loadResult();
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return false;
        }

        $params = json_decode($params, true);

        // If there are no toolbars there is nothing to migrate
        if (!isset($params['configuration']['toolbars'])) {
            return true;
        }

        // Each set has its own toolbar configuration
        foreach ($params['configuration']['toolbars'] as $setIdx => $toolbarConfig) {
            // Migrate menu items if there is a menu
            if (isset($toolbarConfig['menu'])) {
                /**
                 * Replace array values with menu item names ("old name" -> "new name"):
                 * "blockformats" -> "blocks"
                 * "fontformats"  -> "fontfamily"
                 * "fontsizes"    -> "fontsize"
                 * "formats"      -> "styles"
                 * "template"     -> "jtemplate"
                 */
                $search  = ['blockformats', 'fontformats', 'fontsizes', 'formats'];
                $replace = ['blocks', 'fontfamily', 'fontsize', 'styles'];

                // Don't redo the template
                if (!\in_array('jtemplate', $params['configuration']['toolbars'][$setIdx]['menu'])) {
                    $search[]  = 'template';
                    $replace[] = 'jtemplate';
                }

                $params['configuration']['toolbars'][$setIdx]['menu'] = str_replace($search, $replace, $toolbarConfig['menu']);
            }

            // There could be no toolbar at all, or only toolbar1, or both toolbar1 and toolbar2
            foreach (['toolbar1', 'toolbar2'] as $toolbarIdx) {
                // Migrate toolbar buttons if that toolbar exists
                if (isset($toolbarConfig[$toolbarIdx])) {
                    /**
                     * Replace array values with button names ("old name" -> "new name"):
                     * "fontselect"     -> "fontfamily"
                     * "fontsizeselect" -> "fontsize"
                     * "formatselect"   -> "blocks"
                     * "styleselect"    -> "styles"
                     * "template"       -> "jtemplate"
                     */
                    $search  = ['fontselect', 'fontsizeselect', 'formatselect', 'styleselect'];
                    $replace = ['fontfamily', 'fontsize', 'blocks', 'styles'];

                    // Don't redo the template
                    if (!\in_array('jtemplate', $params['configuration']['toolbars'][$setIdx][$toolbarIdx])) {
                        $search[]  = 'template';
                        $replace[] = 'jtemplate';
                    }

                    $params['configuration']['toolbars'][$setIdx][$toolbarIdx] = str_replace($search, $replace, $toolbarConfig[$toolbarIdx]);
                }
            }
        }

        $params = json_encode($params);

        $query = $db->getQuery(true)
            ->update($db->quoteName('#__extensions'))
            ->set($db->quoteName('params') . ' = ' . $db->quote($params))
            ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
            ->where($db->quoteName('folder') . ' = ' . $db->quote('editors'))
            ->where($db->quoteName('element') . ' = ' . $db->quote('tinymce'));

        try {
            $db->setQuery($query)->execute();
        } catch (Exception $e) {
            $this->collectError(__METHOD__, $e);

            return false;
        }

        return true;
    }

    /**
     * setup Guided Tours Unique Identifiers
     *
     * @return  boolean  True on success
     *
     * @since   5.0.0
     */
    private function setGuidedToursUid()
    {
        /** @var \Joomla\Component\Cache\Administrator\Model\CacheModel $model */
        $model = Factory::getApplication()->bootComponent('com_guidedtours')->getMVCFactory()
            ->createModel('Tours', 'Administrator', ['ignore_request' => true]);

        $items = $model->getItems();

        foreach ($items as $item) {
            // Set uid for tours where it is empty
            if (empty($item->uid)) {
                $tourItem = $model->getTable('Tour');
                $tourItem->load($item->id);

                // Tour follows Joomla naming convention
                if (str_starts_with($tourItem->title, 'COM_GUIDEDTOURS_TOUR_') && str_ends_with($tourItem->title, '_TITLE')) {
                    $uidTitle = 'joomla_' . str_replace('COM_GUIDEDTOURS_TOUR_', '', $tourItem->title);

                    // Remove the last _TITLE part
                    $pos = strrpos($uidTitle, '_TITLE');
                    if ($pos !== false) {
                        $uidTitle = substr($uidTitle, 0, $pos);
                    }
                } elseif (preg_match('#COM_(\w+)_TOUR_#', $tourItem->title) && str_ends_with($tourItem->title, '_TITLE')) {
                    // Tour follows component naming pattern
                    $uidTitle = preg_replace('#COM_(\w+)_TOUR_#', '$1.', $tourItem->title);

                    // Remove the last _TITLE part
                    $pos = strrpos($uidTitle, "_TITLE");
                    if ($pos !== false) {
                        $uidTitle = substr($uidTitle, 0, $pos);
                    }
                } else {
                    $uri      = Uri::getInstance();
                    $host     = $uri->toString(['host']);
                    $host     = ApplicationHelper::stringURLSafe($host, $tourItem->language);
                    $uidTitle = $host . ' ' . str_replace('COM_GUIDEDTOURS_TOUR_', '', $tourItem->title);
                    // Remove the last _TITLE part
                    if (str_ends_with($uidTitle, '_TITLE')) {
                        $pos      = strrpos($uidTitle, '_TITLE');
                        $uidTitle = substr($uidTitle, 0, $pos);
                    }
                }
                // ApplicationHelper::stringURLSafe will replace a period (.) separator so we split the construction into multiple parts
                $uidTitleParts = explode('.', $uidTitle);
                array_walk($uidTitleParts, function (&$value, $key, $tourLanguage) {
                    $value = ApplicationHelper::stringURLSafe($value, $tourLanguage);
                }, $tourItem->language);
                $tourItem->uid = implode('.', $uidTitleParts);

                $tourItem->store();
            }
        }
    }

    /**
     * Renames or removes incorrectly cased files.
     *
     * @return  void
     *
     * @since   3.9.25
     */
    protected function fixFilenameCasing()
    {
        $files = [
            // From 4.4 to 5.0
            '/libraries/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/ED256.php' => '/libraries/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/Ed256.php',
            '/libraries/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/ED512.php' => '/libraries/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/Ed512.php',
            // From 5.0.0-alpha3 to 5.0.0-alpha4
            '/plugins/schemaorg/blogposting/src/Extension/Blogposting.php' => '/plugins/schemaorg/blogposting/src/Extension/BlogPosting.php',
        ];

        foreach ($files as $old => $expected) {
            $oldRealpath = realpath(JPATH_ROOT . $old);

            // On Unix without incorrectly cased file.
            if ($oldRealpath === false) {
                continue;
            }

            $oldBasename      = basename($oldRealpath);
            $newRealpath      = realpath(JPATH_ROOT . $expected);
            $newBasename      = basename($newRealpath);
            $expectedBasename = basename($expected);

            // On Windows or Unix with only the incorrectly cased file.
            if ($newBasename !== $expectedBasename) {
                // Rename the file.
                File::move(JPATH_ROOT . $old, JPATH_ROOT . $old . '.tmp');
                File::move(JPATH_ROOT . $old . '.tmp', JPATH_ROOT . $expected);

                continue;
            }

            // There might still be an incorrectly cased file on other OS than Windows.
            if ($oldBasename === basename($old)) {
                // Check if case-insensitive file system, eg on OSX.
                if (fileinode($oldRealpath) === fileinode($newRealpath)) {
                    // Check deeper because even realpath or glob might not return the actual case.
                    if (!\in_array($expectedBasename, scandir(\dirname($newRealpath)))) {
                        // Rename the file.
                        File::move(JPATH_ROOT . $old, JPATH_ROOT . $old . '.tmp');
                        File::move(JPATH_ROOT . $old . '.tmp', JPATH_ROOT . $expected);
                    }
                } else {
                    // On Unix with both files: Delete the incorrectly cased file.
                    if (is_file(JPATH_ROOT . $old)) {
                        File::delete(JPATH_ROOT . $old);
                    }
                }
            }
        }
    }
}
