diff --git a/INSTALL.md b/INSTALL.md
index 295c4e740ffbd23d44f1cf21bb28ef6b9b2432c8..826458f3555eb2f4015693ff1b052682448065c6 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -7,10 +7,10 @@ or shared hosting, you can install it on most PHP-MySQL compatible web servers.
 
 - [Install instructions](#install-instructions)
   - [0. Pre-requisites](#0-pre-requisites)
-  - [1. Install Wizard](#1-install-wizard)
-  - [1-alt Manual configuration](#1-alt-manual-configuration)
+  - [(recommended) Install Wizard](#recommended-install-wizard)
+  - [(alternative) Manual configuration](#alternative-manual-configuration)
 - [Web Server Requirements](#web-server-requirements)
-  - [PHP v8.0 or higher](#php-v73-or-higher)
+  - [PHP v8.0 or higher](#php-v80-or-higher)
   - [MySQL compatible database](#mysql-compatible-database)
     - [Privileges](#privileges)
   - [(Optional) Other recommendations](#optional-other-recommendations)
@@ -39,17 +39,20 @@ or shared hosting, you can install it on most PHP-MySQL compatible web servers.
    > ⚠️ Social features will not work properly if you do not set the task. It is
    > used to broadcast social activities to the fediverse.
 
-### 1. Install Wizard
+### (recommended) Install Wizard
 
 1. Run the Castopod Host install script by going to the install wizard page
    (`https://your_domain_name.com/cp-install`) in your favorite web browser.
 2. Follow the instructions on your screen.
 3. Start podcasting!
 
-### 1-alt Manual configuration
+> **Note:**
+>
+> The install script writes a `.env` file in the package root. If you cannot go
+> through the install wizard, you can
+> [create and update the `.env` file manually](#alternative-manual-configuration).
 
-The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can create and update the `.env` file yourself:
+### (alternative) Manual configuration
 
 1. Rename the `.env.example` file to `.env` and update the default values with
    your own.
diff --git a/app/Authorization/FlatAuthorization.php b/app/Authorization/FlatAuthorization.php
index 2e706b642c4c480de19dff59a3f68ca8e31e0386..31d9063024861d33e1398c306f51d64855303749 100644
--- a/app/Authorization/FlatAuthorization.php
+++ b/app/Authorization/FlatAuthorization.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace App\Authorization;
 
 use Myth\Auth\Authorization\FlatAuthorization as MythAuthFlatAuthorization;
@@ -26,7 +28,7 @@ class FlatAuthorization extends MythAuthFlatAuthorization
             return false;
         }
 
-        return $this->permissionModel->doesGroupHavePermission($groupId, $permissionId,);
+        return $this->permissionModel->doesGroupHavePermission($groupId, $permissionId);
     }
 
     /**
diff --git a/app/Authorization/GroupModel.php b/app/Authorization/GroupModel.php
index f48ab40c52365aeb2021e7a02641fb3dd26caea6..1e2e74a355353f3fab33bb44a056ba2acf1126fd 100644
--- a/app/Authorization/GroupModel.php
+++ b/app/Authorization/GroupModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace App\Authorization;
 
 use Myth\Auth\Authorization\GroupModel as MythAuthGroupModel;
diff --git a/app/Authorization/PermissionModel.php b/app/Authorization/PermissionModel.php
index aefea9e975f081006fe5016c06a8e73335522d10..8809818dd8555e9ec85ab7e1bb1ac8bcc7df8652 100644
--- a/app/Authorization/PermissionModel.php
+++ b/app/Authorization/PermissionModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace App\Authorization;
 
 use Myth\Auth\Authorization\PermissionModel as MythAuthPermissionModel;
diff --git a/app/Common.php b/app/Common.php
index 6399254229339d361d47d7f605cd7588dce496b4..7448f1ad8394a423199ff57dd2b4f9640814d9e9 100644
--- a/app/Common.php
+++ b/app/Common.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * The goal of this file is to allow developers a location where they can overwrite core procedural functions and
  * replace them with their own. This file is loaded during the bootstrap process and is called during the frameworks
diff --git a/app/Config/ActivityPub.php b/app/Config/ActivityPub.php
index 6f1539e119ce60f4ed4b7f6ab985da9af4e97e46..00bb648211e7d2c4fa76d506f59907bd2e8fe120 100644
--- a/app/Config/ActivityPub.php
+++ b/app/Config/ActivityPub.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use ActivityPub\Config\ActivityPub as ActivityPubBase;
diff --git a/app/Config/Analytics.php b/app/Config/Analytics.php
index d45b3978347ec795603a78473c927def81e48ee3..e1a40f42bb4373cc3f5b9dd829fc9286c52d2be7 100644
--- a/app/Config/Analytics.php
+++ b/app/Config/Analytics.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use Analytics\Config\Analytics as AnalyticsBase;
diff --git a/app/Config/App.php b/app/Config/App.php
index 134dab1789ca80dce3c91e6713e5ddcdcc006664..4eb43e327c96ea74459370c279650088a704e79b 100644
--- a/app/Config/App.php
+++ b/app/Config/App.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Auth.php b/app/Config/Auth.php
index 20e5303db4b7c6d4d49f35bc8ba0b780dd65ce4a..08e2e6249a63703908c7a3ef2cb6ddee9273fd28 100644
--- a/app/Config/Auth.php
+++ b/app/Config/Auth.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use Myth\Auth\Config\Auth as MythAuthConfig;
diff --git a/app/Config/Autoload.php b/app/Config/Autoload.php
index b74370e82b44306438ded6ebfa54738a6237713f..1bc7dd61589f8134c67e3afb7434bb7ad63c751b 100644
--- a/app/Config/Autoload.php
+++ b/app/Config/Autoload.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\AutoloadConfig;
diff --git a/app/Config/Boot/development.php b/app/Config/Boot/development.php
index 036960ed114076cf3d8ff5535670f2efed047f94..8193a56a4a8a60413c2968b063310c6209a8e75d 100644
--- a/app/Config/Boot/development.php
+++ b/app/Config/Boot/development.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * --------------------------------------------------------------------------
  * ERROR DISPLAY
diff --git a/app/Config/Boot/production.php b/app/Config/Boot/production.php
index 4653c264a8e08c3a96d0d1edd653aa6f95c465bb..4cf210d8ffd5c2b388516c3b7ae076d0ed79c36e 100644
--- a/app/Config/Boot/production.php
+++ b/app/Config/Boot/production.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * --------------------------------------------------------------------------
  * ERROR DISPLAY
@@ -8,7 +10,7 @@
  * it and display a generic error message.
  */
 ini_set('display_errors', '0');
-error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED,);
+error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
 
 /**
  * --------------------------------------------------------------------------
diff --git a/app/Config/Boot/testing.php b/app/Config/Boot/testing.php
index a5e9b5e1c61d04f5fdc59ac11500887a64d60b29..56c22a9c7dbd48191d82ebacdd18872fcd04ce0c 100644
--- a/app/Config/Boot/testing.php
+++ b/app/Config/Boot/testing.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * --------------------------------------------------------------------------
  * ERROR DISPLAY
diff --git a/app/Config/Cache.php b/app/Config/Cache.php
index 42266130e4b9d1e9b26bf0db2b3124ab9023ad76..f08efbc61a550e2a76b33fedeef8b31180def632 100644
--- a/app/Config/Cache.php
+++ b/app/Config/Cache.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Cache\Handlers\DummyHandler;
@@ -74,6 +76,19 @@ class Cache extends BaseConfig
      */
     public string $prefix = '';
 
+    /**
+     * --------------------------------------------------------------------------
+     * Default TTL
+     * --------------------------------------------------------------------------
+     *
+     * The default number of seconds to save items when none is specified.
+     *
+     * WARNING: This is not used by framework handlers where 60 seconds is
+     * hard-coded, but may be useful to projects and modules. This will replace
+     * the hard-coded value in a future release.
+     */
+    public int $ttl = 60;
+
     /**
      * --------------------------------------------------------------------------
      * File settings
diff --git a/app/Config/Constants.php b/app/Config/Constants.php
index e486ae7ec2cf67018c979a4256b0d915b1afda49..dcc156dbe0e8f7f979746b237f68dbf3391a4cec 100644
--- a/app/Config/Constants.php
+++ b/app/Config/Constants.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /*
  | --------------------------------------------------------------------
  | Castopod Version
diff --git a/app/Config/ContentSecurityPolicy.php b/app/Config/ContentSecurityPolicy.php
index ae5374e255147ab218d816d48730fc75d75aa125..4467086773f3084ce0eb35e6e3b51fe87ca8c190 100644
--- a/app/Config/ContentSecurityPolicy.php
+++ b/app/Config/ContentSecurityPolicy.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Cookie.php b/app/Config/Cookie.php
index dba5bf4fedd1181ec066c3bae35498178b2e4038..0a051c4176f8149eee8142b1acc0e64ab68a517d 100644
--- a/app/Config/Cookie.php
+++ b/app/Config/Cookie.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Database.php b/app/Config/Database.php
index b2d9918e57633c64967b5d554dd85aeec7291d19..372fcb870d049ac6d283749d323cd1a3838dcfb3 100644
--- a/app/Config/Database.php
+++ b/app/Config/Database.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Database\Config;
diff --git a/app/Config/DocTypes.php b/app/Config/DocTypes.php
index 81bdfb2607f29e0fad5c93f89954b0de44623e05..428c7ee03f8b56e37c894077cfcc94152c2d00a9 100644
--- a/app/Config/DocTypes.php
+++ b/app/Config/DocTypes.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 class DocTypes
diff --git a/app/Config/Email.php b/app/Config/Email.php
index 7d47308f6ff0eab167277856a36fe416f3131d8e..68f787a92b2cb275070b469d57b8c6d5e67f1aff 100644
--- a/app/Config/Email.php
+++ b/app/Config/Email.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Encryption.php b/app/Config/Encryption.php
index bd69c7523f7056069cf709a10a2a711a63f56393..a69b8b38c73132aed27e62b5a536ae319e756ba3 100644
--- a/app/Config/Encryption.php
+++ b/app/Config/Encryption.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Events.php b/app/Config/Events.php
index dc9fe3a34181a66cf56dad00ed79bc9cc7e3c324..4de3cedb8b345ca3846d5ce87d2c907948799cea 100644
--- a/app/Config/Events.php
+++ b/app/Config/Events.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use App\Entities\Actor;
@@ -50,7 +52,7 @@ Events::on('pre_system', function () {
      * @phpstan-ignore-next-line
      */
     if (CI_DEBUG && ! is_cli()) {
-        Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect',);
+        Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect');
         Services::toolbar()->respond();
     }
 });
@@ -76,47 +78,109 @@ Events::on('logout', function (User $user): void {
  * --------------------------------------------------------------------
  * ActivityPub events
  * --------------------------------------------------------------------
- * Update episode metadata counts
  */
-Events::on('on_note_add', function (Note $note): void {
+/**
+ * @param Actor $actor
+ * @param Actor $targetActor
+ */
+Events::on('on_follow', function ($actor, $targetActor): void {
+    if ($actor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$actor->podcast->id}*");
+    }
+
+    if ($targetActor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$targetActor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$targetActor->podcast->id}*");
+    }
+});
+
+/**
+ * @param Actor $actor
+ * @param Actor $targetActor
+ */
+Events::on('on_undo_follow', function ($actor, $targetActor): void {
+    if ($actor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$actor->podcast->id}*");
+    }
+
+    if ($targetActor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$targetActor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$targetActor->podcast->id}*");
+    }
+});
+
+/**
+ * @param Note $note
+ */
+Events::on('on_note_add', function ($note): void {
+    if ($note->is_reply) {
+        $note = $note->reply_to_note;
+    }
+
     if ($note->episode_id) {
         model('EpisodeModel')
             ->where('id', $note->episode_id)
             ->increment('notes_total');
     }
 
-    // Removing all of the podcast pages is a bit overkill, but works perfectly
-    // same for other events below
-    cache()
-        ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
-    cache()
-        ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+    if ($note->actor->is_podcast) {
+        // Removing all of the podcast pages is a bit overkill, but works to avoid caching bugs
+        // same for other events below
+        cache()
+            ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
+    }
 });
 
-Events::on('on_note_remove', function (Note $note): void {
-    if ($note->episode_id) {
+/**
+ * @param Note $note
+ */
+Events::on('on_note_remove', function ($note): void {
+    if ($note->is_reply) {
+        Events::trigger('on_note_remove', $note->reply_to_note);
+    }
+
+    if ($episodeId = $note->episode_id) {
         model('EpisodeModel')
-            ->where('id', $note->episode_id)
+            ->where('id', $episodeId)
             ->decrement('notes_total', 1 + $note->reblogs_count);
 
         model('EpisodeModel')
-            ->where('id', $note->episode_id)
+            ->where('id', $episodeId)
             ->decrement('reblogs_total', $note->reblogs_count);
 
         model('EpisodeModel')
-            ->where('id', $note->episode_id)
+            ->where('id', $episodeId)
             ->decrement('favourites_total', $note->favourites_count);
     }
 
-    cache()
-        ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
-    cache()
-        ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+    if ($note->actor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
+    }
+
     cache()
         ->deleteMatching("page_note#{$note->id}*");
 });
 
-Events::on('on_note_reblog', function (Actor $actor, Note $note): void {
+/**
+ * @param Actor $actor
+ * @param Note $note
+ */
+Events::on('on_note_reblog', function ($actor, $note): void {
     if ($episodeId = $note->episode_id) {
         model('EpisodeModel')
             ->where('id', $episodeId)
@@ -127,19 +191,31 @@ Events::on('on_note_reblog', function (Actor $actor, Note $note): void {
             ->increment('notes_total');
     }
 
-    cache()
-        ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
-    cache()
-        ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+    if ($note->actor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
+    }
+
+    if ($actor->is_podcast) {
+        cache()->deleteMatching("podcast#{$actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$actor->podcast->id}*");
+    }
+
     cache()
         ->deleteMatching("page_note#{$note->id}*");
 
-    if ($actor->is_podcast) {
-        cache()->deleteMatching("page_podcast#{$actor->podcast->id}*");
+    if ($note->is_reply) {
+        cache()->deleteMatching("page_note#{$note->in_reply_to_id}");
     }
 });
 
-Events::on('on_note_undo_reblog', function (Note $reblogNote): void {
+/**
+ * @param Note $reblogNote
+ */
+Events::on('on_note_undo_reblog', function ($reblogNote): void {
     $note = $reblogNote->reblog_of_note;
     if ($episodeId = $note->episode_id) {
         model('EpisodeModel')
@@ -151,74 +227,128 @@ Events::on('on_note_undo_reblog', function (Note $reblogNote): void {
             ->decrement('notes_total');
     }
 
-    cache()
-        ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
-    cache()
-        ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+    if ($note->actor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
+    }
+
     cache()
         ->deleteMatching("page_note#{$note->id}*");
+    cache()
+        ->deleteMatching("page_note#{$reblogNote->id}*");
+
+    if ($note->is_reply) {
+        cache()->deleteMatching("page_note#{$note->in_reply_to_id}");
+    }
 
     if ($reblogNote->actor->is_podcast) {
-        cache()->deleteMatching("page_podcast#{$reblogNote->actor->podcast->id}*",);
+        cache()
+            ->deleteMatching("podcast#{$reblogNote->actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$reblogNote->actor->podcast->id}*");
     }
 });
 
-Events::on('on_note_reply', function (Note $reply): void {
+/**
+ * @param Note $reply
+ */
+Events::on('on_note_reply', function ($reply): void {
     $note = $reply->reply_to_note;
 
-    cache()
-        ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
+    if ($note->actor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
+    }
+
     cache()
         ->deleteMatching("page_note#{$note->id}*");
 });
 
-Events::on('on_reply_remove', function (Note $reply): void {
+/**
+ * @param Note $reply
+ */
+Events::on('on_reply_remove', function ($reply): void {
     $note = $reply->reply_to_note;
 
-    cache()
-        ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
-    cache()
-        ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+    if ($note->actor->is_podcast) {
+        cache()
+            ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
+        cache()
+            ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+    }
+
     cache()
         ->deleteMatching("page_note#{$note->id}*");
+    cache()
+        ->deleteMatching("page_note#{$reply->id}*");
 });
 
-Events::on('on_note_favourite', function (Actor $actor, Note $note): void {
+/**
+ * @param Actor $actor
+ * @param Note $note
+ */
+Events::on('on_note_favourite', function ($actor, $note): void {
     if ($note->episode_id) {
         model('EpisodeModel')
             ->where('id', $note->episode_id)
             ->increment('favourites_total');
     }
 
-    cache()
-        ->deleteMatching("page_podcast#{$actor->podcast->id}*");
-    cache()
-        ->deleteMatching("podcast#{$actor->podcast->id}*");
+    if ($note->actor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
+    }
+
     cache()
         ->deleteMatching("page_note#{$note->id}*");
 
-    if ($note->in_reply_to_id) {
+    if ($note->is_reply) {
         cache()->deleteMatching("page_note#{$note->in_reply_to_id}*");
     }
+
+    if ($actor->is_podcast) {
+        cache()->deleteMatching("podcast#{$actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$actor->podcast->id}*");
+    }
 });
 
-Events::on('on_note_undo_favourite', function (Actor $actor, Note $note): void {
+/**
+ * @param Actor $actor
+ * @param Note $note
+ */
+Events::on('on_note_undo_favourite', function ($actor, $note): void {
     if ($note->episode_id) {
         model('EpisodeModel')
             ->where('id', $note->episode_id)
             ->decrement('favourites_total');
     }
 
-    cache()
-        ->deleteMatching("page_podcast#{$actor->podcast->id}*");
-    cache()
-        ->deleteMatching("podcast#{$actor->podcast->id}*");
+    if ($note->actor->is_podcast) {
+        cache()
+            ->deleteMatching("podcast#{$note->actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
+    }
+
     cache()
         ->deleteMatching("page_note#{$note->id}*");
 
-    if ($note->in_reply_to_id) {
+    if ($note->is_reply) {
         cache()->deleteMatching("page_note#{$note->in_reply_to_id}*");
     }
+
+    if ($actor->is_podcast) {
+        cache()->deleteMatching("podcast#{$actor->podcast->id}*");
+        cache()
+            ->deleteMatching("page_podcast#{$actor->podcast->id}*");
+    }
 });
 
 Events::on('on_block_actor', function (int $actorId): void {
diff --git a/app/Config/Exceptions.php b/app/Config/Exceptions.php
index f264eee9bb9a3871d18240b0cf80a25fd264085a..84f4864705cb3b0b2fca1da5237a3e0aa880cdea 100644
--- a/app/Config/Exceptions.php
+++ b/app/Config/Exceptions.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Filters.php b/app/Config/Filters.php
index 20504ddd9ac9b4287c4e6f9c890c4768435b66e9..9a5b8a2e8521ddcb6decfe9addf045a166a28ba5 100644
--- a/app/Config/Filters.php
+++ b/app/Config/Filters.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use ActivityPub\Filters\ActivityPubFilter;
diff --git a/app/Config/ForeignCharacters.php b/app/Config/ForeignCharacters.php
index 174ddb16a8724189974c8c658a436dea5b2aad3e..c8fb8ba376eb996d97f89a6f36cbcd5f2e188c84 100644
--- a/app/Config/ForeignCharacters.php
+++ b/app/Config/ForeignCharacters.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\ForeignCharacters as BaseForeignCharacters;
diff --git a/app/Config/Format.php b/app/Config/Format.php
index ad234bfac246fbb7f1629327dd223dfcc67a9984..9cf092441c37cef08a353a9c78495b709b3e0bf6 100644
--- a/app/Config/Format.php
+++ b/app/Config/Format.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Generators.php b/app/Config/Generators.php
index 922a02ff6063dcbde900223cc34b3a7cdd4706cc..889825aa923922640c4b8b9200bc3b2240b15cc6 100644
--- a/app/Config/Generators.php
+++ b/app/Config/Generators.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Honeypot.php b/app/Config/Honeypot.php
index 179b01546902cf23cdd32e7839a119e79bbc76c7..e47cfdf4be13c346cbc517be97b1a35a0d1b29b3 100644
--- a/app/Config/Honeypot.php
+++ b/app/Config/Honeypot.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Images.php b/app/Config/Images.php
index 9d1cea8a11a4766dd32392a7116f6b179bcc037e..debc98f039c3207cd27aad8dc046ce544b72e5e2 100644
--- a/app/Config/Images.php
+++ b/app/Config/Images.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Kint.php b/app/Config/Kint.php
index 81fb26e9380769b5597262e421a802c50b67edf4..c814e56453cb2bfb5d231a846c1e86a13cd291d2 100644
--- a/app/Config/Kint.php
+++ b/app/Config/Kint.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Logger.php b/app/Config/Logger.php
index 26cea6dfd5dbd84d86d73bae9902302851073b1c..5e5b728b89cd53081c7a1b3dc80c18b574feda45 100644
--- a/app/Config/Logger.php
+++ b/app/Config/Logger.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Migrations.php b/app/Config/Migrations.php
index 937484ce146c8bfdf70f97588b0d0c36ae48fbdf..d4e7731be3360f51567503d03f615d3f4d5b2dc0 100644
--- a/app/Config/Migrations.php
+++ b/app/Config/Migrations.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Mimes.php b/app/Config/Mimes.php
index 759ccac63f84ced843b5b9d73244cef10e2b8a76..794c58db6063a7ff55be12d5f773effc4058016e 100644
--- a/app/Config/Mimes.php
+++ b/app/Config/Mimes.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 /**
diff --git a/app/Config/Modules.php b/app/Config/Modules.php
index 5fe2b53a27eb327eabbbd3aa620fcaa6e98f54e1..e17d03f7bbf36d3e274d63b64833e7f2acccfc5b 100644
--- a/app/Config/Modules.php
+++ b/app/Config/Modules.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Modules\Modules as BaseModules;
diff --git a/app/Config/Pager.php b/app/Config/Pager.php
index eb14d9a5788151f2133cac3631c5fa6da3411f12..b98b2d8f2324388bb6be5eaaef55691a77a73e62 100644
--- a/app/Config/Pager.php
+++ b/app/Config/Pager.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Paths.php b/app/Config/Paths.php
index ab3c0d7b434e4b19bc6985beed8c07704f48ac7f..92fcea012131cc85d44b830b4bd22d730df4559c 100644
--- a/app/Config/Paths.php
+++ b/app/Config/Paths.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 /**
diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index 7ca364c66ee3630b44ea12798877f85a62ef76ae..edef6a7ed6f3767a8e20d7dd929c316919c07bb2 100644
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 // Create a new instance of our RouteCollection class.
@@ -34,7 +36,7 @@ $routes->addPlaceholder('slug', '[a-zA-Z0-9\-]{1,191}');
 $routes->addPlaceholder('base64', '[A-Za-z0-9\.\_]+\-{0,2}');
 $routes->addPlaceholder('platformType', '\bpodcasting|\bsocial|\bfunding');
 $routes->addPlaceholder('noteAction', '\bfavourite|\breblog|\breply');
-$routes->addPlaceholder('embeddablePlayerTheme', '\blight|\bdark|\blight-transparent|\bdark-transparent',);
+$routes->addPlaceholder('embeddablePlayerTheme', '\blight|\bdark|\blight-transparent|\bdark-transparent');
 $routes->addPlaceholder(
     'uuid',
     '[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}',
@@ -59,10 +61,10 @@ $routes->group(config('App')->installGateway, function ($routes): void {
     ]);
     $routes->post('instance-config', 'InstallController::attemptInstanceConfig', [
         'as' => 'instance-config',
-    ],);
+    ]);
     $routes->post('database-config', 'InstallController::attemptDatabaseConfig', [
         'as' => 'database-config',
-    ],);
+    ]);
     $routes->post('cache-config', 'InstallController::attemptCacheConfig', [
         'as' => 'cache-config',
     ]);
@@ -626,7 +628,7 @@ $routes->group(
                     'as' => 'change-password',
                 ],
             );
-            $routes->post('change-password', 'MyAccountController::attemptChange/$1',);
+            $routes->post('change-password', 'MyAccountController::attemptChange/$1');
         });
     },
 );
diff --git a/app/Config/Security.php b/app/Config/Security.php
index d0f31414b1951a69ed9e1a48b089f6ca0d4f7131..9334bbe98762896e61ac2b966d6f4a5f028dc9e6 100644
--- a/app/Config/Security.php
+++ b/app/Config/Security.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Services.php b/app/Config/Services.php
index 517459be1cf7e962a266b15edd3ef473f756f6e3..cb84fa77a67a7d974cd207cbba829fd54db6e552 100644
--- a/app/Config/Services.php
+++ b/app/Config/Services.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use App\Authorization\FlatAuthorization;
@@ -76,7 +78,7 @@ class Services extends BaseService
         bool $getShared = true
     ) {
         if ($getShared) {
-            return self::getSharedInstance('authentication', $lib, $userModel, $loginModel,);
+            return self::getSharedInstance('authentication', $lib, $userModel, $loginModel);
         }
 
         // config() checks first in app/Config
@@ -108,7 +110,7 @@ class Services extends BaseService
         bool $getShared = true
     ) {
         if ($getShared) {
-            return self::getSharedInstance('authorization', $groupModel, $permissionModel, $userModel,);
+            return self::getSharedInstance('authorization', $groupModel, $permissionModel, $userModel);
         }
 
         if ($groupModel === null) {
diff --git a/app/Config/Toolbar.php b/app/Config/Toolbar.php
index 327d433d6cc7c24a31ec729182efddf4165f7095..bba751e32b7e1ce7b90c1ecc3c818c8499312b43 100644
--- a/app/Config/Toolbar.php
+++ b/app/Config/Toolbar.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/UserAgents.php b/app/Config/UserAgents.php
index 05cdd725eca085a0d7b49364bfa828ba474d584b..0265a5ebb01e175bca019d756d50f0c431abf9fc 100644
--- a/app/Config/UserAgents.php
+++ b/app/Config/UserAgents.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Config/Validation.php b/app/Config/Validation.php
index fd1e70042fba3bd438f20f7c8190825cc39b87e3..bcabb7f47225e748eeb9a4634264cd22c6e72d1b 100644
--- a/app/Config/Validation.php
+++ b/app/Config/Validation.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use App\Validation\FileRules as AppFileRules;
diff --git a/app/Config/View.php b/app/Config/View.php
index e2e65a61968a038c4b7b4ca6bfb689c1ab121ec7..0650d129ee8f9593dd840c32e4a378707024d0da 100644
--- a/app/Config/View.php
+++ b/app/Config/View.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Config;
 
 use CodeIgniter\Config\View as BaseView;
diff --git a/app/Controllers/ActorController.php b/app/Controllers/ActorController.php
index d667957c3b4314d2920b2711145877bd888b7336..fb9c2bc680cef7c927727b2ce479a0d4261c5656 100644
--- a/app/Controllers/ActorController.php
+++ b/app/Controllers/ActorController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -24,6 +26,7 @@ class ActorController extends ActivityPubActorController
     {
         // Prevent analytics hit when authenticated
         if (! can_user_interact()) {
+            // @phpstan-ignore-next-line
             $this->registerPodcastWebpageHit($this->actor->podcast->id);
         }
 
diff --git a/app/Controllers/Admin/BaseController.php b/app/Controllers/Admin/BaseController.php
index 207698faa43c0647778239a23cc6e6be24812257..a5629f250bafaec3d3f323ea62d7ed888aca273c 100644
--- a/app/Controllers/Admin/BaseController.php
+++ b/app/Controllers/Admin/BaseController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace App\Controllers\Admin;
 
 use CodeIgniter\Controller;
diff --git a/app/Controllers/Admin/ContributorController.php b/app/Controllers/Admin/ContributorController.php
index 54abfd3ad7a324da07eb9f2f95e7794afe6868c5..d09ed1c4c509fa38b0d79efaeceaa2bc6bce9324 100644
--- a/app/Controllers/Admin/ContributorController.php
+++ b/app/Controllers/Admin/ContributorController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Controllers/Admin/EpisodeController.php b/app/Controllers/Admin/EpisodeController.php
index 385a94dc5eff082c0f0930f4efa0066828fddd44..2bef93fe999b1fa9bc32bacf70dd612bc93d793f 100644
--- a/app/Controllers/Admin/EpisodeController.php
+++ b/app/Controllers/Admin/EpisodeController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -161,7 +163,7 @@ class EpisodeController extends BaseController
         ) {
             $newEpisode->transcript_file = $transcriptFile;
         } elseif ($transcriptChoice === 'remote-url') {
-            $newEpisode->transcript_file_remote_url = $this->request->getPost('transcript_file_remote_url',);
+            $newEpisode->transcript_file_remote_url = $this->request->getPost('transcript_file_remote_url');
         }
 
         $chaptersChoice = $this->request->getPost('chapters-choice');
@@ -171,7 +173,7 @@ class EpisodeController extends BaseController
         ) {
             $newEpisode->chapters_file = $chaptersFile;
         } elseif ($chaptersChoice === 'remote-url') {
-            $newEpisode->chapters_file_remote_url = $this->request->getPost('chapters_file_remote_url',);
+            $newEpisode->chapters_file_remote_url = $this->request->getPost('chapters_file_remote_url');
         }
 
         $episodeModel = new EpisodeModel();
@@ -187,7 +189,7 @@ class EpisodeController extends BaseController
         $podcastModel = new PodcastModel();
 
         if ($this->podcast->hasChanged('episode_description_footer_markdown')) {
-            $this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer',);
+            $this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer');
 
             if (! $podcastModel->update($this->podcast->id, $this->podcast)) {
                 return redirect()
@@ -237,8 +239,8 @@ class EpisodeController extends BaseController
 
         $this->episode->title = $this->request->getPost('title');
         $this->episode->slug = $this->request->getPost('slug');
-        $this->episode->description_markdown = $this->request->getPost('description',);
-        $this->episode->location = new Location($this->request->getPost('location_name'),);
+        $this->episode->description_markdown = $this->request->getPost('description');
+        $this->episode->location = new Location($this->request->getPost('location_name'));
         $this->episode->parental_advisory =
             $this->request->getPost('parental_advisory') !== 'undefined'
                 ? $this->request->getPost('parental_advisory')
@@ -251,7 +253,7 @@ class EpisodeController extends BaseController
             : null;
         $this->episode->type = $this->request->getPost('type');
         $this->episode->is_blocked = $this->request->getPost('block') === 'yes';
-        $this->episode->custom_rss_string = $this->request->getPost('custom_rss',);
+        $this->episode->custom_rss_string = $this->request->getPost('custom_rss');
 
         $this->episode->updated_by = (int) user_id();
 
@@ -278,7 +280,7 @@ class EpisodeController extends BaseController
                 (($transcriptFile = $this->episode->transcript_file) &&
                     $transcriptFile !== null)
             ) {
-                unlink($transcriptFile);
+                unlink((string) $transcriptFile);
                 $this->episode->transcript_file_path = null;
             }
             $this->episode->transcript_file_remote_url = $transcriptFileRemoteUrl;
@@ -297,7 +299,7 @@ class EpisodeController extends BaseController
                 (($chaptersFile = $this->episode->chapters_file) &&
                     $chaptersFile !== null)
             ) {
-                unlink($chaptersFile);
+                unlink((string) $chaptersFile);
                 $this->episode->chapters_file_path = null;
             }
             $this->episode->chapters_file_remote_url = $chaptersFileRemoteUrl;
@@ -313,7 +315,7 @@ class EpisodeController extends BaseController
         }
 
         // update podcast's episode_description_footer_markdown if changed
-        $this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer',);
+        $this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer');
 
         if ($this->podcast->hasChanged('episode_description_footer_markdown')) {
             $podcastModel = new PodcastModel();
@@ -330,7 +332,7 @@ class EpisodeController extends BaseController
 
     public function transcriptDelete(): RedirectResponse
     {
-        unlink($this->episode->transcript_file);
+        unlink((string) $this->episode->transcript_file);
         $this->episode->transcript_file_path = null;
 
         $episodeModel = new EpisodeModel();
@@ -347,7 +349,7 @@ class EpisodeController extends BaseController
 
     public function chaptersDelete(): RedirectResponse
     {
-        unlink($this->episode->chapters_file);
+        unlink((string) $this->episode->chapters_file);
         $this->episode->chapters_file_path = null;
 
         $episodeModel = new EpisodeModel();
@@ -409,7 +411,7 @@ class EpisodeController extends BaseController
 
         $publishMethod = $this->request->getPost('publication_method');
         if ($publishMethod === 'schedule') {
-            $scheduledPublicationDate = $this->request->getPost('scheduled_publication_date',);
+            $scheduledPublicationDate = $this->request->getPost('scheduled_publication_date');
             if ($scheduledPublicationDate) {
                 $this->episode->published_at = Time::createFromFormat(
                     'Y-m-d H:i',
@@ -498,7 +500,7 @@ class EpisodeController extends BaseController
 
         $publishMethod = $this->request->getPost('publication_method');
         if ($publishMethod === 'schedule') {
-            $scheduledPublicationDate = $this->request->getPost('scheduled_publication_date',);
+            $scheduledPublicationDate = $this->request->getPost('scheduled_publication_date');
             if ($scheduledPublicationDate) {
                 $this->episode->published_at = Time::createFromFormat(
                     'Y-m-d H:i',
@@ -516,7 +518,7 @@ class EpisodeController extends BaseController
             $this->episode->published_at = Time::now();
         }
 
-        $note = (new NoteModel())->getNoteById($this->request->getPost('note_id'),);
+        $note = (new NoteModel())->getNoteById($this->request->getPost('note_id'));
 
         if ($note !== null) {
             $note->message = $this->request->getPost('message');
@@ -688,7 +690,7 @@ class EpisodeController extends BaseController
 
     public function soundbiteDelete(int $soundbiteId): RedirectResponse
     {
-        (new SoundbiteModel())->deleteSoundbite($this->podcast->id, $this->episode->id, $soundbiteId,);
+        (new SoundbiteModel())->deleteSoundbite($this->podcast->id, $this->episode->id, $soundbiteId);
 
         return redirect()->route('soundbites-edit', [$this->podcast->id, $this->episode->id]);
     }
diff --git a/app/Controllers/Admin/EpisodePersonController.php b/app/Controllers/Admin/EpisodePersonController.php
index 4257bef2d82470d436f6f2c71e8d95a3ef57c49d..50289a7a2d90f7f2bf9cc674b9dba016d369fb23 100644
--- a/app/Controllers/Admin/EpisodePersonController.php
+++ b/app/Controllers/Admin/EpisodePersonController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -88,7 +90,7 @@ class EpisodePersonController extends BaseController
 
     public function remove(int $personId): RedirectResponse
     {
-        (new PersonModel())->removePersonFromEpisode($this->podcast->id, $this->episode->id, $personId,);
+        (new PersonModel())->removePersonFromEpisode($this->podcast->id, $this->episode->id, $personId);
 
         return redirect()->back();
     }
diff --git a/app/Controllers/Admin/FediverseController.php b/app/Controllers/Admin/FediverseController.php
index 29a5188d2b77e3220cbf9ae803a31f5422bb1392..a51dc095cd378656210cbc62d352c28fac36239b 100644
--- a/app/Controllers/Admin/FediverseController.php
+++ b/app/Controllers/Admin/FediverseController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Controllers/Admin/HomeController.php b/app/Controllers/Admin/HomeController.php
index 7504b6ed9e077480abe115827252d1df03706606..f0db00f0a3f3812d9e32380b83e8d38029b46d18 100644
--- a/app/Controllers/Admin/HomeController.php
+++ b/app/Controllers/Admin/HomeController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Controllers/Admin/MyAccountController.php b/app/Controllers/Admin/MyAccountController.php
index fa4f87e5e1331002d47c44da3cb431d41f19e781..84ddc14df0b34596c91f558a6458fda672b28fbb 100644
--- a/app/Controllers/Admin/MyAccountController.php
+++ b/app/Controllers/Admin/MyAccountController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Controllers/Admin/PageController.php b/app/Controllers/Admin/PageController.php
index a38ebdf0f4a3274a704b9a68fd678c51357d0619..7c21f99b1937a6726d61fb698aa17f3944528b37 100644
--- a/app/Controllers/Admin/PageController.php
+++ b/app/Controllers/Admin/PageController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -74,7 +76,7 @@ class PageController extends BaseController
             ->route('page-list')
             ->with('message', lang('Page.messages.createSuccess', [
                 'pageTitle' => $page->title,
-            ]),);
+            ]));
     }
 
     public function edit(): string
diff --git a/app/Controllers/Admin/PersonController.php b/app/Controllers/Admin/PersonController.php
index 7de6ae4220c1e30295730b0ea95ace5064658722..d8cb6bca80b186be894e681035ca8f222b1a2c13 100644
--- a/app/Controllers/Admin/PersonController.php
+++ b/app/Controllers/Admin/PersonController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -126,7 +128,7 @@ class PersonController extends BaseController
 
         $this->person->full_name = $this->request->getPost('full_name');
         $this->person->unique_name = $this->request->getPost('unique_name');
-        $this->person->information_url = $this->request->getPost('information_url',);
+        $this->person->information_url = $this->request->getPost('information_url');
         $imageFile = $this->request->getFile('image');
         if ($imageFile !== null && $imageFile->isValid()) {
             $this->person->image = new Image($imageFile);
diff --git a/app/Controllers/Admin/PodcastController.php b/app/Controllers/Admin/PodcastController.php
index 47717682bec7a1ac7f4037daef5a2a2ee9fcf345..f68ef5e3fe1983906491b2c12af59202aeca64d9 100644
--- a/app/Controllers/Admin/PodcastController.php
+++ b/app/Controllers/Admin/PodcastController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -225,7 +227,7 @@ class PodcastController extends BaseController
         $authorize = Services::authorization();
         $podcastAdminGroup = $authorize->group('podcast_admin');
 
-        $podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id,);
+        $podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id);
 
         // set Podcast categories
         (new CategoryModel())->setPodcastCategories(
@@ -276,7 +278,7 @@ class PodcastController extends BaseController
         }
 
         $this->podcast->title = $this->request->getPost('title');
-        $this->podcast->description_markdown = $this->request->getPost('description',);
+        $this->podcast->description_markdown = $this->request->getPost('description');
 
         $image = $this->request->getFile('image');
         if ($image !== null && $image->isValid()) {
@@ -293,12 +295,12 @@ class PodcastController extends BaseController
         $this->podcast->owner_email = $this->request->getPost('owner_email');
         $this->podcast->type = $this->request->getPost('type');
         $this->podcast->copyright = $this->request->getPost('copyright');
-        $this->podcast->location = new Location($this->request->getPost('location_name'),);
-        $this->podcast->payment_pointer = $this->request->getPost('payment_pointer',);
-        $this->podcast->custom_rss_string = $this->request->getPost('custom_rss',);
+        $this->podcast->location = new Location($this->request->getPost('location_name'));
+        $this->podcast->payment_pointer = $this->request->getPost('payment_pointer');
+        $this->podcast->custom_rss_string = $this->request->getPost('custom_rss');
         $this->podcast->partner_id = $this->request->getPost('partner_id');
-        $this->podcast->partner_link_url = $this->request->getPost('partner_link_url',);
-        $this->podcast->partner_image_url = $this->request->getPost('partner_image_url',);
+        $this->podcast->partner_link_url = $this->request->getPost('partner_link_url');
+        $this->podcast->partner_image_url = $this->request->getPost('partner_image_url');
         $this->podcast->is_blocked = $this->request->getPost('block') === 'yes';
         $this->podcast->is_completed =
             $this->request->getPost('complete') === 'yes';
diff --git a/app/Controllers/Admin/PodcastImportController.php b/app/Controllers/Admin/PodcastImportController.php
index 1f669a2a8d621a9797e6c1ec924d73e029b1c1f2..a7962f96bb3e6a82071a46831c55a279809e2989 100644
--- a/app/Controllers/Admin/PodcastImportController.php
+++ b/app/Controllers/Admin/PodcastImportController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -78,7 +80,7 @@ class PodcastImportController extends BaseController
         }
         try {
             ini_set('user_agent', 'Castopod/' . CP_VERSION);
-            $feed = simplexml_load_file($this->request->getPost('imported_feed_url'),);
+            $feed = simplexml_load_file($this->request->getPost('imported_feed_url'));
         } catch (ErrorException $errorException) {
             return redirect()
                 ->back()
@@ -92,11 +94,11 @@ class PodcastImportController extends BaseController
                         ' ⎋</a>',
                 ]);
         }
-        $nsItunes = $feed->channel[0]->children('http://www.itunes.com/dtds/podcast-1.0.dtd',);
+        $nsItunes = $feed->channel[0]->children('http://www.itunes.com/dtds/podcast-1.0.dtd');
         $nsPodcast = $feed->channel[0]->children(
             'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md',
         );
-        $nsContent = $feed->channel[0]->children('http://purl.org/rss/1.0/modules/content/',);
+        $nsContent = $feed->channel[0]->children('http://purl.org/rss/1.0/modules/content/');
 
         if ((string) $nsPodcast->locked === 'yes') {
             return redirect()
@@ -114,9 +116,9 @@ class PodcastImportController extends BaseController
                 property_exists($nsItunes, 'image') && $nsItunes->image !== null &&
                 $nsItunes->image->attributes()['href'] !== null
             ) {
-                $imageFile = download_file((string) $nsItunes->image->attributes()['href'],);
+                $imageFile = download_file((string) $nsItunes->image->attributes()['href']);
             } else {
-                $imageFile = download_file((string) $feed->channel[0]->image->url,);
+                $imageFile = download_file((string) $feed->channel[0]->image->url);
             }
 
             $location = null;
@@ -195,7 +197,7 @@ class PodcastImportController extends BaseController
         $authorize = Services::authorization();
         $podcastAdminGroup = $authorize->group('podcast_admin');
 
-        $podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id,);
+        $podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id);
 
         $podcastsPlatformsData = [];
         $platformTypes = [
@@ -230,7 +232,7 @@ class PodcastImportController extends BaseController
         }
 
         if (count($podcastsPlatformsData) > 1) {
-            $platformModel->createPodcastPlatforms($newPodcastId, $podcastsPlatformsData,);
+            $platformModel->createPodcastPlatforms($newPodcastId, $podcastsPlatformsData);
         }
 
         foreach ($nsPodcast->person as $podcastPerson) {
@@ -291,11 +293,11 @@ class PodcastImportController extends BaseController
         for ($itemNumber = 1; $itemNumber <= $lastItem; ++$itemNumber) {
             $item = $feed->channel[0]->item[$numberItems - $itemNumber];
 
-            $nsItunes = $item->children('http://www.itunes.com/dtds/podcast-1.0.dtd',);
+            $nsItunes = $item->children('http://www.itunes.com/dtds/podcast-1.0.dtd');
             $nsPodcast = $item->children(
                 'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md',
             );
-            $nsContent = $item->children('http://purl.org/rss/1.0/modules/content/',);
+            $nsContent = $item->children('http://purl.org/rss/1.0/modules/content/');
 
             $slug = slugify(
                 $this->request->getPost('slug_field') === 'title'
@@ -321,7 +323,7 @@ class PodcastImportController extends BaseController
                 property_exists($nsItunes, 'image') && $nsItunes->image !== null &&
                 $nsItunes->image->attributes()['href'] !== null
             ) {
-                $episodeImage = new Image(download_file((string) $nsItunes->image->attributes()['href'],),);
+                $episodeImage = new Image(download_file((string) $nsItunes->image->attributes()['href'],));
             } else {
                 $episodeImage = null;
             }
diff --git a/app/Controllers/Admin/PodcastPersonController.php b/app/Controllers/Admin/PodcastPersonController.php
index cd4c5a36131d47b77fbac5c283ca74f12cfa18c4..8bab93babe451811c1fd2dda16ea64a15779de74 100644
--- a/app/Controllers/Admin/PodcastPersonController.php
+++ b/app/Controllers/Admin/PodcastPersonController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -74,7 +76,7 @@ class PodcastPersonController extends BaseController
 
     public function remove(int $personId): RedirectResponse
     {
-        (new PersonModel())->removePersonFromPodcast($this->podcast->id, $personId,);
+        (new PersonModel())->removePersonFromPodcast($this->podcast->id, $personId);
 
         return redirect()->back();
     }
diff --git a/app/Controllers/Admin/PodcastPlatformController.php b/app/Controllers/Admin/PodcastPlatformController.php
index 7a38a8ba5a95a33971c4feafd2cbd3545a7e6236..a8ed9dde0de7a8d04be340e617ce179824e168d3 100644
--- a/app/Controllers/Admin/PodcastPlatformController.php
+++ b/app/Controllers/Admin/PodcastPlatformController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -93,7 +95,7 @@ class PodcastPlatformController extends BaseController
                 ->with('message', lang('Platforms.messages.updateSuccess'));
         }
 
-        $platformModel->savePodcastPlatforms($this->podcast->id, $platformType, $podcastsPlatformsData,);
+        $platformModel->savePodcastPlatforms($this->podcast->id, $platformType, $podcastsPlatformsData);
 
         return redirect()
             ->back()
@@ -102,7 +104,7 @@ class PodcastPlatformController extends BaseController
 
     public function removePodcastPlatform(string $platformSlug): RedirectResponse
     {
-        (new PlatformModel())->removePodcastPlatform($this->podcast->id, $platformSlug,);
+        (new PlatformModel())->removePodcastPlatform($this->podcast->id, $platformSlug);
 
         return redirect()
             ->back()
diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php
index 185dc15627237a6860a53c126bb5392aefe48d08..f6b5096b1d2e180a28214531f578c8c0dff8e3fe 100644
--- a/app/Controllers/Admin/UserController.php
+++ b/app/Controllers/Admin/UserController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -108,7 +110,7 @@ class UserController extends BaseController
             ->route('user-list')
             ->with('message', lang('User.messages.createSuccess', [
                 'username' => $user->username,
-            ]),);
+            ]));
     }
 
     public function edit(): string
@@ -148,7 +150,7 @@ class UserController extends BaseController
             ->route('user-list')
             ->with('message', lang('User.messages.rolesEditSuccess', [
                 'username' => $this->user->username,
-            ]),);
+            ]));
     }
 
     public function forcePassReset(): RedirectResponse
@@ -200,7 +202,7 @@ class UserController extends BaseController
             ->route('user-list')
             ->with('message', lang('User.messages.banSuccess', [
                 'username' => $this->user->username,
-            ]),);
+            ]));
     }
 
     public function unBan(): RedirectResponse
@@ -218,7 +220,7 @@ class UserController extends BaseController
             ->route('user-list')
             ->with('message', lang('User.messages.unbanSuccess', [
                 'username' => $this->user->username,
-            ]),);
+            ]));
     }
 
     public function delete(): RedirectResponse
@@ -240,6 +242,6 @@ class UserController extends BaseController
             ->back()
             ->with('message', lang('User.messages.deleteSuccess', [
                 'username' => $this->user->username,
-            ]),);
+            ]));
     }
 }
diff --git a/app/Controllers/AuthController.php b/app/Controllers/AuthController.php
index fad88706e1f392446aab5234f05d05f5ee0fd8fc..9160453a01ebd7581e30721dc0e2bc34e6a4da17 100644
--- a/app/Controllers/AuthController.php
+++ b/app/Controllers/AuthController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -53,7 +55,7 @@ class AuthController extends MythAuthController
         }
 
         // Save the user
-        $allowedPostFields = array_merge(['password'], $this->config->validFields, $this->config->personalFields,);
+        $allowedPostFields = array_merge(['password'], $this->config->validFields, $this->config->personalFields);
         $user = new User($this->request->getPost($allowedPostFields));
 
         $this->config->requireActivation === null
@@ -80,7 +82,7 @@ class AuthController extends MythAuthController
                 return redirect()
                     ->back()
                     ->withInput()
-                    ->with('error', $activator->error() ?? lang('Auth.unknownError'),);
+                    ->with('error', $activator->error() ?? lang('Auth.unknownError'));
             }
 
             // Success!
diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php
index c3320c050de06017320a12a216e51571b69b7464..b76cf7b2068cf94599e7569de335d0045aadbe62 100644
--- a/app/Controllers/BaseController.php
+++ b/app/Controllers/BaseController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace App\Controllers;
 
 use CodeIgniter\Controller;
diff --git a/app/Controllers/CreditsController.php b/app/Controllers/CreditsController.php
index 99ee06e059abfc8572d8bad0305d8e0162b9799a..8c1b5418bfd0c3a96d82ead5d9e0d5f08f3800a0 100644
--- a/app/Controllers/CreditsController.php
+++ b/app/Controllers/CreditsController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Controllers/EpisodeController.php b/app/Controllers/EpisodeController.php
index 96c1289414fabd2de1fb2ebf2a8d5bce3719fff7..f94fb386c8fd08180c2bb39a2654926450ae74dc 100644
--- a/app/Controllers/EpisodeController.php
+++ b/app/Controllers/EpisodeController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -100,7 +102,7 @@ class EpisodeController extends BaseController
         $session = Services::session();
         $session->start();
         if (isset($_SERVER['HTTP_REFERER'])) {
-            $session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST),);
+            $session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST));
         }
 
         $locale = service('request')
@@ -159,7 +161,7 @@ class EpisodeController extends BaseController
 
     public function oembedXML(): ResponseInterface
     {
-        $oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>",);
+        $oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>");
 
         $oembed->addChild('type', 'rich');
         $oembed->addChild('version', '1.0');
@@ -182,6 +184,6 @@ class EpisodeController extends BaseController
         $oembed->addChild('width', '600');
         $oembed->addChild('height', '200');
 
-        return $this->response->setXML($oembed);
+        return $this->response->setXML((string) $oembed);
     }
 }
diff --git a/app/Controllers/FeedController.php b/app/Controllers/FeedController.php
index 3fca237629bacc197167f6a0701055599385cbf6..ab0d26a4129f113bdd3a17782c13f8e5bc60181a 100644
--- a/app/Controllers/FeedController.php
+++ b/app/Controllers/FeedController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -33,10 +35,10 @@ class FeedController extends Controller
             $service = UserAgentsRSS::find($_SERVER['HTTP_USER_AGENT']);
         } catch (Exception $exception) {
             // If things go wrong the show must go on and the user must be able to download the file
-            log_message('critical', $exception);
+            log_message('critical', $exception->getMessage());
         }
 
-        $serviceSlug = null;
+        $serviceSlug = '';
         if ($service) {
             $serviceSlug = $service['slug'];
         }
diff --git a/app/Controllers/HomeController.php b/app/Controllers/HomeController.php
index 99e4d2bc9e6bbfc46cfd30d3fae46f734fdf2805..26c7e480b616b42c50922aa7a8b5dba332fbf4c5 100644
--- a/app/Controllers/HomeController.php
+++ b/app/Controllers/HomeController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Controllers/InstallController.php b/app/Controllers/InstallController.php
index 8e80b35dfcfd01189b7187e480e37ec77c89f226..9873ac500348548e61aab7d99d49a4daeec7fa4f 100644
--- a/app/Controllers/InstallController.php
+++ b/app/Controllers/InstallController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -123,7 +125,7 @@ class InstallController extends Controller
             // Could not connect to the database
             // show database config view to fix value
             session()
-                ->setFlashdata('error', lang('Install.messages.databaseConnectError'),);
+                ->setFlashdata('error', lang('Install.messages.databaseConnectError'));
 
             return view('install/database_config');
         }
@@ -171,7 +173,7 @@ class InstallController extends Controller
         helper('text');
 
         // redirect to full install url with new baseUrl input
-        return redirect()->to(reduce_double_slashes($baseUrl . '/' . config('App')->installGateway,),);
+        return redirect()->to(reduce_double_slashes($baseUrl . '/' . config('App')->installGateway,));
     }
 
     public function databaseConfig(): string
diff --git a/app/Controllers/NoteController.php b/app/Controllers/NoteController.php
index 35c1fd08c0608cce2856202eca4a6790d161657a..90524b54d24418d08faaec3c3250a59a18b079f8 100644
--- a/app/Controllers/NoteController.php
+++ b/app/Controllers/NoteController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -15,6 +17,7 @@ use App\Entities\Actor;
 use App\Entities\Note as CastopodNote;
 use App\Entities\Podcast;
 use App\Models\EpisodeModel;
+use App\Models\NoteModel;
 use App\Models\PodcastModel;
 use CodeIgniter\Exceptions\PageNotFoundException;
 use CodeIgniter\HTTP\RedirectResponse;
@@ -46,7 +49,7 @@ class NoteController extends ActivityPubNoteController
 
         if (
             count($params) > 1 &&
-            ! ($this->note = model('NoteModel')->getNoteById($params[1]))
+            ! ($this->note = (new NoteModel())->getNoteById($params[1]))
         ) {
             throw PageNotFoundException::forPageNotFound();
         }
@@ -129,14 +132,15 @@ class NoteController extends ActivityPubNoteController
 
         $newNote->message = $message;
 
+        $noteModel = new NoteModel();
         if (
-            ! model('NoteModel')
+            ! $noteModel
                 ->addNote($newNote, ! (bool) $newNote->episode_id, true,)
         ) {
             return redirect()
                 ->back()
                 ->withInput()
-                ->with('errors', model('NoteModel')->errors());
+                ->with('errors', $noteModel->errors());
         }
 
         // Note has been successfully created
@@ -164,11 +168,12 @@ class NoteController extends ActivityPubNoteController
             'created_by' => user_id(),
         ]);
 
-        if (! model('NoteModel')->addReply($newNote)) {
+        $noteModel = new NoteModel();
+        if (! $noteModel->addReply($newNote)) {
             return redirect()
                 ->back()
                 ->withInput()
-                ->with('errors', model('NoteModel')->errors());
+                ->with('errors', $noteModel->errors());
         }
 
         // Reply note without preview card has been successfully created
@@ -177,14 +182,14 @@ class NoteController extends ActivityPubNoteController
 
     public function attemptFavourite(): RedirectResponse
     {
-        model('FavouriteModel')->toggleFavourite(interact_as_actor(), $this->note,);
+        model('FavouriteModel')->toggleFavourite(interact_as_actor(), $this->note);
 
         return redirect()->back();
     }
 
     public function attemptReblog(): RedirectResponse
     {
-        model('NoteModel')->toggleReblog(interact_as_actor(), $this->note);
+        (new NoteModel())->toggleReblog(interact_as_actor(), $this->note);
 
         return redirect()->back();
     }
diff --git a/app/Controllers/PageController.php b/app/Controllers/PageController.php
index d3476ecc817e008b2bf37f1ca6c7c923d33ec4ed..499dabd0f6f75d642cabb0d2f7e19d05d2d531ef 100644
--- a/app/Controllers/PageController.php
+++ b/app/Controllers/PageController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Controllers/PlatformController.php b/app/Controllers/PlatformController.php
index 481f8e437013770adcb6927b0363690d22a6e77b..812bacaf35590cb9b52bb09acf85e01929ffc791 100644
--- a/app/Controllers/PlatformController.php
+++ b/app/Controllers/PlatformController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Controllers/PodcastController.php b/app/Controllers/PodcastController.php
index b9b1da35aa419516bafc7952926f2c05458c2019..07fbc1b0d7c80fbfda4e0b083a8cbf8431ed3e38 100644
--- a/app/Controllers/PodcastController.php
+++ b/app/Controllers/PodcastController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -94,7 +96,7 @@ class PodcastController extends BaseController
         $seasonQuery = $this->request->getGet('season');
 
         if (! $yearQuery && ! $seasonQuery) {
-            $defaultQuery = (new PodcastModel())->getDefaultQuery($this->podcast->id,);
+            $defaultQuery = (new PodcastModel())->getDefaultQuery($this->podcast->id);
             if ($defaultQuery) {
                 if ($defaultQuery['type'] === 'season') {
                     $seasonQuery = $defaultQuery['data']['season_number'];
diff --git a/app/Database/Migrations/2017-12-01-160000_add_podcasts_platforms.php b/app/Database/Migrations/2017-12-01-160000_add_podcasts_platforms.php
index d65ca3e95acf8b4e175225fb219ee0958bf5d1dc..70180803878fdd378c5b2219a905f16d1fb2700f 100644
--- a/app/Database/Migrations/2017-12-01-160000_add_podcasts_platforms.php
+++ b/app/Database/Migrations/2017-12-01-160000_add_podcasts_platforms.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAddPodcastsPlatforms Creates podcasts_platforms table in database
  *
diff --git a/app/Database/Migrations/2020-05-29-152000_add_categories.php b/app/Database/Migrations/2020-05-29-152000_add_categories.php
index d9ea0b6410020ff3c5673d9fc84e044f7e9ae953..78412417226f23645c7c3adb24623d63444f192c 100644
--- a/app/Database/Migrations/2020-05-29-152000_add_categories.php
+++ b/app/Database/Migrations/2020-05-29-152000_add_categories.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddCategories Creates categories table in database
  *
diff --git a/app/Database/Migrations/2020-05-30-101000_add_languages.php b/app/Database/Migrations/2020-05-30-101000_add_languages.php
index 4a4a3417391cdfbe9d0265696a16259a510ee8af..ee287a302d767fe0ba5a532e4712affc5ed7e3a1 100644
--- a/app/Database/Migrations/2020-05-30-101000_add_languages.php
+++ b/app/Database/Migrations/2020-05-30-101000_add_languages.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddLanguages Creates languages table in database
  *
diff --git a/app/Database/Migrations/2020-05-30-101500_add_podcasts.php b/app/Database/Migrations/2020-05-30-101500_add_podcasts.php
index 5e82045a15c3e08f6ab0451f4d0419ba581b8e1f..b04c92667a82de5f1baddf01b4e7a7bbb3e36681 100644
--- a/app/Database/Migrations/2020-05-30-101500_add_podcasts.php
+++ b/app/Database/Migrations/2020-05-30-101500_add_podcasts.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddPodcasts Creates podcasts table in database
  *
@@ -189,7 +191,7 @@ class AddPodcasts extends Migration
         // TODO: remove name in favor of username from actor
         $this->forge->addUniqueKey('name');
         $this->forge->addUniqueKey('actor_id');
-        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE');
         $this->forge->addForeignKey('category_id', 'categories', 'id');
         $this->forge->addForeignKey('language_code', 'languages', 'code');
         $this->forge->addForeignKey('created_by', 'users', 'id');
diff --git a/app/Database/Migrations/2020-06-05-170000_add_episodes.php b/app/Database/Migrations/2020-06-05-170000_add_episodes.php
index b65a09b9a67fd35792c3bcb412a78e21126235ef..e54794a60a6e7af55734d1a9cf95a5a4e78c2514 100644
--- a/app/Database/Migrations/2020-06-05-170000_add_episodes.php
+++ b/app/Database/Migrations/2020-06-05-170000_add_episodes.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddEpisodes Creates episodes table in database
  *
@@ -185,7 +187,7 @@ class AddEpisodes extends Migration
         ]);
         $this->forge->addPrimaryKey('id');
         $this->forge->addUniqueKey(['podcast_id', 'slug']);
-        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
         $this->forge->addForeignKey('created_by', 'users', 'id');
         $this->forge->addForeignKey('updated_by', 'users', 'id');
         $this->forge->createTable('episodes');
diff --git a/app/Database/Migrations/2020-06-05-180000_add_soundbites.php b/app/Database/Migrations/2020-06-05-180000_add_soundbites.php
index 68eecadcc43cd833c49800d4587cc99d191b4188..cf20ee1d3c5023bbc0f147919d8d1a1267400ff1 100644
--- a/app/Database/Migrations/2020-06-05-180000_add_soundbites.php
+++ b/app/Database/Migrations/2020-06-05-180000_add_soundbites.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddSoundbites Creates soundbites table in database
  *
@@ -63,8 +65,8 @@ class AddSoundbites extends Migration
         ]);
         $this->forge->addKey('id', true);
         $this->forge->addUniqueKey(['episode_id', 'start_time', 'duration']);
-        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE');
         $this->forge->addForeignKey('created_by', 'users', 'id');
         $this->forge->addForeignKey('updated_by', 'users', 'id');
         $this->forge->createTable('soundbites');
diff --git a/app/Database/Migrations/2020-06-05-190000_add_platforms.php b/app/Database/Migrations/2020-06-05-190000_add_platforms.php
index 4bb7ba801dcae38fc08f9a0fe79d7b5c8082a5a9..24dec9434ab8b39a7d6a2da2fbbe77fa06e03ded 100644
--- a/app/Database/Migrations/2020-06-05-190000_add_platforms.php
+++ b/app/Database/Migrations/2020-06-05-190000_add_platforms.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddPlatforms Creates platforms table in database
  *
@@ -41,7 +43,7 @@ class AddPlatforms extends Migration
             ],
         ]);
         $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT NOW()');
-        $this->forge->addField('`updated_at` timestamp NOT NULL DEFAULT NOW() ON UPDATE NOW()',);
+        $this->forge->addField('`updated_at` timestamp NOT NULL DEFAULT NOW() ON UPDATE NOW()');
         $this->forge->addPrimaryKey('slug');
         $this->forge->createTable('platforms');
     }
diff --git a/app/Database/Migrations/2020-07-03-191500_add_podcasts_users.php b/app/Database/Migrations/2020-07-03-191500_add_podcasts_users.php
index 18ca8dd0474d4d221aef9f56ae82e9b8e14bde36..75810948c8e5491f8dd078178ec8c9bdf773466c 100644
--- a/app/Database/Migrations/2020-07-03-191500_add_podcasts_users.php
+++ b/app/Database/Migrations/2020-07-03-191500_add_podcasts_users.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddPodcastUsers Creates podcast_users table in database
  *
@@ -32,8 +34,8 @@ class AddPodcastsUsers extends Migration
         ]);
         $this->forge->addPrimaryKey(['user_id', 'podcast_id']);
         $this->forge->addForeignKey('user_id', 'users', 'id', '', 'CASCADE');
-        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('group_id', 'auth_groups', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('group_id', 'auth_groups', 'id', '', 'CASCADE');
         $this->forge->createTable('podcasts_users');
     }
 
diff --git a/app/Database/Migrations/2020-08-17-150000_add_pages.php b/app/Database/Migrations/2020-08-17-150000_add_pages.php
index 6ee21b07ef9244c56e7d7358b23eda7774bf1ca2..cee4ef58779fbe157af4ad9f469e1860cdc1e294 100644
--- a/app/Database/Migrations/2020-08-17-150000_add_pages.php
+++ b/app/Database/Migrations/2020-08-17-150000_add_pages.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddPages Creates pages table in database
  *
diff --git a/app/Database/Migrations/2020-09-29-150000_add_podcasts_categories.php b/app/Database/Migrations/2020-09-29-150000_add_podcasts_categories.php
index a97d4cd8854d2864a54e6d2f51f8af7c696ca097..1b16cc25bc1a3a8a86144f212eaa0e916de294d0 100644
--- a/app/Database/Migrations/2020-09-29-150000_add_podcasts_categories.php
+++ b/app/Database/Migrations/2020-09-29-150000_add_podcasts_categories.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddPodcastsCategories Creates podcasts_categories table in database
  *
@@ -27,8 +29,8 @@ class AddPodcastsCategories extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey(['podcast_id', 'category_id']);
-        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('category_id', 'categories', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('category_id', 'categories', 'id', '', 'CASCADE');
         $this->forge->createTable('podcasts_categories');
     }
 
diff --git a/app/Database/Migrations/2020-12-25-120000_add_persons.php b/app/Database/Migrations/2020-12-25-120000_add_persons.php
index c79530102275625c04d2bfc5b9c12f76c225b949..3067905bcf24210478f816d22cdf01dfc75be5de 100644
--- a/app/Database/Migrations/2020-12-25-120000_add_persons.php
+++ b/app/Database/Migrations/2020-12-25-120000_add_persons.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class Persons Creates persons table in database
  *
diff --git a/app/Database/Migrations/2020-12-25-130000_add_podcasts_persons.php b/app/Database/Migrations/2020-12-25-130000_add_podcasts_persons.php
index b05fe6c68775d99716ad99d57287b30324929fa5..6b758dc3b9a63564e3674812ea3d89d3bc6330c0 100644
--- a/app/Database/Migrations/2020-12-25-130000_add_podcasts_persons.php
+++ b/app/Database/Migrations/2020-12-25-130000_add_podcasts_persons.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddPodcastsPersons Creates podcasts_persons table in database
  *
@@ -41,8 +43,8 @@ class AddPodcastsPersons extends Migration
         ]);
         $this->forge->addKey('id', true);
         $this->forge->addUniqueKey(['podcast_id', 'person_id', 'person_group', 'person_role']);
-        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE');
         $this->forge->createTable('podcasts_persons');
     }
 
diff --git a/app/Database/Migrations/2020-12-25-140000_add_episodes_persons.php b/app/Database/Migrations/2020-12-25-140000_add_episodes_persons.php
index 74ef6bcaa749e1f6a64b2912e84845fa211bd437..c52f8c15b48efe3f88a0ec14b21b993c5fac8541 100644
--- a/app/Database/Migrations/2020-12-25-140000_add_episodes_persons.php
+++ b/app/Database/Migrations/2020-12-25-140000_add_episodes_persons.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddEpisodesPersons Creates episodes_persons table in database
  *
@@ -45,9 +47,9 @@ class AddEpisodesPersons extends Migration
         ]);
         $this->forge->addPrimaryKey('id');
         $this->forge->addUniqueKey(['podcast_id', 'episode_id', 'person_id', 'person_group', 'person_role']);
-        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE');
         $this->forge->createTable('episodes_persons');
     }
 
diff --git a/app/Database/Migrations/2020-12-25-150000_add_credit_view.php b/app/Database/Migrations/2020-12-25-150000_add_credit_view.php
index ee61e0f2a2b5a6360b6c9ac2d723fb62ae6bed29..11029be264b09a6ebdc0abe73bb4986aef654f3d 100644
--- a/app/Database/Migrations/2020-12-25-150000_add_credit_view.php
+++ b/app/Database/Migrations/2020-12-25-150000_add_credit_view.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddCreditView Creates Credit View in database
  *
diff --git a/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php b/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php
index 466fa6d1966bead8acf1efd5f62048ff836411c5..958b011904163c8f516362c069c2b96e33fada65 100644
--- a/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php
+++ b/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddEpisodeIdToNotes Adds episode_id field to activitypub_notes table in database
  *
@@ -28,7 +30,7 @@ class AddEpisodeIdToNotes extends Migration
 
     public function down(): void
     {
-        $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_episode_id_foreign',);
+        $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_episode_id_foreign');
         $this->forge->dropColumn('activitypub_notes', 'episode_id');
     }
 }
diff --git a/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php b/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php
index 035a2b57ea1a4669b113dce0290032da88e6edcc..496bf9023640953a67420238b7b7b42e67ff5325 100644
--- a/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php
+++ b/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddCreatedByToNotes Adds created_by field to activitypub_notes table in database
  *
@@ -28,7 +30,7 @@ class AddCreatedByToNotes extends Migration
 
     public function down(): void
     {
-        $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_created_by_foreign',);
+        $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_created_by_foreign');
         $this->forge->dropColumn('activitypub_notes', 'created_by');
     }
 }
diff --git a/app/Database/Seeds/AppSeeder.php b/app/Database/Seeds/AppSeeder.php
index 0e32cc8316850d4e4cbe58b42fc944b9bb3ddcf0..5101c8e24bd85414456f5c6337ffa3f607b6080e 100644
--- a/app/Database/Seeds/AppSeeder.php
+++ b/app/Database/Seeds/AppSeeder.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AppSeeder Calls all required seeders for castopod to work properly
  *
diff --git a/app/Database/Seeds/AuthSeeder.php b/app/Database/Seeds/AuthSeeder.php
index 56859c7d71d631b9285eaa8a6872b5245a34f67a..3905e55d6aa1f5ed04f89608ae1dce6e2edebbfc 100644
--- a/app/Database/Seeds/AuthSeeder.php
+++ b/app/Database/Seeds/AuthSeeder.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class PermissionSeeder Inserts permissions
  *
diff --git a/app/Database/Seeds/CategorySeeder.php b/app/Database/Seeds/CategorySeeder.php
index ba0699c80438faaabcdd2070a41d1afd536ccdd8..f5117542104eb4b6d75263a25ad4669fa04f64e1 100644
--- a/app/Database/Seeds/CategorySeeder.php
+++ b/app/Database/Seeds/CategorySeeder.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class CategorySeeder Inserts values in categories table in database
  *
diff --git a/app/Database/Seeds/FakePodcastsAnalyticsSeeder.php b/app/Database/Seeds/FakePodcastsAnalyticsSeeder.php
index 15c71043aedb08adf5a239f01b00b7e952c93724..d5a63f42353a0ead45f5f8ca28bfa94d967f7a95 100644
--- a/app/Database/Seeds/FakePodcastsAnalyticsSeeder.php
+++ b/app/Database/Seeds/FakePodcastsAnalyticsSeeder.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class FakePodcastsAnalyticsSeeder Inserts Fake Analytics in the database
  *
@@ -61,7 +63,7 @@ class FakePodcastsAnalyticsSeeder extends Seeder
                     ->where('`published_at` <= NOW()', null, false)
                     ->findAll();
                 foreach ($episodes as $episode) {
-                    $age = floor(($date - strtotime($episode->published_at)) / 86400,);
+                    $age = floor(($date - strtotime($episode->published_at)) / 86400);
                     $probability1 = (int) floor(exp(3 - $age / 40)) + 1;
 
                     for (
@@ -95,7 +97,7 @@ class FakePodcastsAnalyticsSeeder extends Seeder
                             '.' .
                             rand(0, 255);
 
-                        $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb',);
+                        $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb');
 
                         $countryCode = 'N/A';
                         $regionCode = 'N/A';
diff --git a/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php b/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php
index ac10549829dc7e3f156382328cedf0bb62c95363..6dc97eea527c7951ef93eea91d9a00e6e6bf2837 100644
--- a/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php
+++ b/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class FakeWebsiteAnalyticsSeeder Inserts Fake Analytics in the database
  *
@@ -200,7 +202,7 @@ class FakeWebsiteAnalyticsSeeder extends Seeder
                     ->where('`published_at` <= NOW()', null, false)
                     ->findAll();
                 foreach ($episodes as $episode) {
-                    $age = floor(($date - strtotime($episode->published_at)) / 86400,);
+                    $age = floor(($date - strtotime($episode->published_at)) / 86400);
                     $probability1 = (int) floor(exp(3 - $age / 40)) + 1;
 
                     for (
diff --git a/app/Database/Seeds/LanguageSeeder.php b/app/Database/Seeds/LanguageSeeder.php
index eefa2dedafa1c73d5ec651b4e089575c25f68a97..b4080f970a86d533a060f7acc9fc729ccec958f5 100644
--- a/app/Database/Seeds/LanguageSeeder.php
+++ b/app/Database/Seeds/LanguageSeeder.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class LanguageSeeder Inserts values in languages table in database
  *
diff --git a/app/Database/Seeds/PlatformSeeder.php b/app/Database/Seeds/PlatformSeeder.php
index 0af60c65de6780c22cc58286f9b638b34f795b92..fbeb8f6274e9020758198460249445d0c7c17292 100644
--- a/app/Database/Seeds/PlatformSeeder.php
+++ b/app/Database/Seeds/PlatformSeeder.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class PlatformsSeeder Inserts values in platforms table in database
  *
diff --git a/app/Database/Seeds/TestSeeder.php b/app/Database/Seeds/TestSeeder.php
index ed171a5fe2c6c1efbc8ac53c2a68dc3d36546a1a..c9c682ec5dd8997d74e081f00f45e1dc15c13432 100644
--- a/app/Database/Seeds/TestSeeder.php
+++ b/app/Database/Seeds/TestSeeder.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class TestSeeder Inserts a superadmin user in the database
  *
diff --git a/app/Entities/Actor.php b/app/Entities/Actor.php
index 7cf06d6c383f61c535234071b1c4953fc36f8a5f..9bbdc93fd421ddbd1c585dc009dc8e254fd6f4de 100644
--- a/app/Entities/Actor.php
+++ b/app/Entities/Actor.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -20,21 +22,21 @@ class Actor extends ActivityPubActor
 {
     protected ?Podcast $podcast = null;
 
-    protected bool $is_podcast;
+    protected bool $is_podcast = false;
 
     public function getIsPodcast(): bool
     {
-        return $this->podcast !== null;
+        return $this->getPodcast() !== null;
     }
 
     public function getPodcast(): ?Podcast
     {
         if ($this->id === null) {
-            throw new RuntimeException('Podcast id must be set before getting associated podcast.',);
+            throw new RuntimeException('Podcast id must be set before getting associated podcast.');
         }
 
         if ($this->podcast === null) {
-            $this->podcast = (new PodcastModel())->getPodcastByActorId($this->id,);
+            $this->podcast = (new PodcastModel())->getPodcastByActorId($this->id);
         }
 
         return $this->podcast;
diff --git a/app/Entities/Category.php b/app/Entities/Category.php
index e3d9ceaddc8ed5969997ab0b0cacceed1f906c80..c29e37d243239ba072981547d7732206e5d41cd5 100644
--- a/app/Entities/Category.php
+++ b/app/Entities/Category.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Entities/Credit.php b/app/Entities/Credit.php
index bb8f4b497bb8c3a7f7c72d44a69392c95364a228..5eddd9d658a0af0228bdf2a53a9242363c79f081 100644
--- a/app/Entities/Credit.php
+++ b/app/Entities/Credit.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -54,11 +56,11 @@ class Credit extends Entity
     public function getPerson(): ?Person
     {
         if ($this->person_id === null) {
-            throw new RuntimeException('Credit must have person_id before getting person.',);
+            throw new RuntimeException('Credit must have person_id before getting person.');
         }
 
         if ($this->person === null) {
-            $this->person = (new PersonModel())->getPersonById($this->person_id,);
+            $this->person = (new PersonModel())->getPersonById($this->person_id);
         }
 
         return $this->person;
@@ -67,11 +69,11 @@ class Credit extends Entity
     public function getPodcast(): ?Podcast
     {
         if ($this->podcast_id === null) {
-            throw new RuntimeException('Credit must have podcast_id before getting podcast.',);
+            throw new RuntimeException('Credit must have podcast_id before getting podcast.');
         }
 
         if ($this->podcast === null) {
-            $this->podcast = (new PodcastModel())->getPodcastById($this->podcast_id,);
+            $this->podcast = (new PodcastModel())->getPodcastById($this->podcast_id);
         }
 
         return $this->podcast;
@@ -80,11 +82,11 @@ class Credit extends Entity
     public function getEpisode(): ?Episode
     {
         if ($this->episode_id === null) {
-            throw new RuntimeException('Credit must have episode_id before getting episode.',);
+            throw new RuntimeException('Credit must have episode_id before getting episode.');
         }
 
         if ($this->episode === null) {
-            $this->episode = (new EpisodeModel())->getPublishedEpisodeById($this->podcast_id, $this->episode_id,);
+            $this->episode = (new EpisodeModel())->getPublishedEpisodeById($this->podcast_id, $this->episode_id);
         }
 
         return $this->episode;
@@ -109,6 +111,6 @@ class Credit extends Entity
             return '';
         }
 
-        return lang("PersonsTaxonomy.persons.{$this->person_group}.roles.{$this->person_role}.label",);
+        return lang("PersonsTaxonomy.persons.{$this->person_group}.roles.{$this->person_role}.label");
     }
 }
diff --git a/app/Entities/Episode.php b/app/Entities/Episode.php
index b54c4376e86fecf847c0c0c5954623422d6dfb11..4b4b63d37807240efcd68d00a85de7b6906b88ba 100644
--- a/app/Entities/Episode.php
+++ b/app/Entities/Episode.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -178,7 +180,7 @@ class Episode extends Entity
         }
 
         // Save image
-        $image->saveImage('podcasts/' . $this->getPodcast()->name, $this->attributes['slug'],);
+        $image->saveImage('podcasts/' . $this->getPodcast()->name, $this->attributes['slug']);
 
         $this->attributes['image_mimetype'] = $image->mimetype;
         $this->attributes['image_path'] = $image->path;
@@ -189,7 +191,7 @@ class Episode extends Entity
     public function getImage(): Image
     {
         if ($imagePath = $this->attributes['image_path']) {
-            return new Image(null, $imagePath, $this->attributes['image_mimetype'],);
+            return new Image(null, $imagePath, $this->attributes['image_mimetype']);
         }
 
         return $this->getPodcast()
@@ -266,7 +268,7 @@ class Episode extends Entity
         if ($this->attributes['transcript_file_path']) {
             helper('media');
 
-            return new File(media_path($this->attributes['transcript_file_path']),);
+            return new File(media_path($this->attributes['transcript_file_path']));
         }
 
         return null;
@@ -277,7 +279,7 @@ class Episode extends Entity
         if ($this->attributes['chapters_file_path']) {
             helper('media');
 
-            return new File(media_path($this->attributes['chapters_file_path']),);
+            return new File(media_path($this->attributes['chapters_file_path']));
         }
 
         return null;
@@ -348,11 +350,11 @@ class Episode extends Entity
     public function getPersons(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Episode must be created before getting persons.',);
+            throw new RuntimeException('Episode must be created before getting persons.');
         }
 
         if ($this->persons === null) {
-            $this->persons = (new PersonModel())->getEpisodePersons($this->podcast_id, $this->id,);
+            $this->persons = (new PersonModel())->getEpisodePersons($this->podcast_id, $this->id);
         }
 
         return $this->persons;
@@ -366,11 +368,11 @@ class Episode extends Entity
     public function getSoundbites(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Episode must be created before getting soundbites.',);
+            throw new RuntimeException('Episode must be created before getting soundbites.');
         }
 
         if ($this->soundbites === null) {
-            $this->soundbites = (new SoundbiteModel())->getEpisodeSoundbites($this->getPodcast() ->id, $this->id,);
+            $this->soundbites = (new SoundbiteModel())->getEpisodeSoundbites($this->getPodcast() ->id, $this->id);
         }
 
         return $this->soundbites;
@@ -382,7 +384,7 @@ class Episode extends Entity
     public function getNotes(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Episode must be created before getting soundbites.',);
+            throw new RuntimeException('Episode must be created before getting soundbites.');
         }
 
         if ($this->notes === null) {
@@ -394,7 +396,7 @@ class Episode extends Entity
 
     public function getLink(): string
     {
-        return base_url(route_to('episode', $this->getPodcast() ->name, $this->attributes['slug'],),);
+        return base_url(route_to('episode', $this->getPodcast() ->name, $this->attributes['slug'],));
     }
 
     public function getEmbeddablePlayerUrl(string $theme = null): string
@@ -421,7 +423,7 @@ class Episode extends Entity
 
     public function getPodcast(): ?Podcast
     {
-        return (new PodcastModel())->getPodcastById($this->attributes['podcast_id'],);
+        return (new PodcastModel())->getPodcastById($this->podcast_id);
     }
 
     public function setDescriptionMarkdown(string $descriptionMarkdown): static
@@ -432,7 +434,7 @@ class Episode extends Entity
         ]);
 
         $this->attributes['description_markdown'] = $descriptionMarkdown;
-        $this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown,);
+        $this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown);
 
         return $this;
     }
@@ -525,7 +527,7 @@ class Episode extends Entity
         }
 
         if ($this->location === null) {
-            $this->location = new Location($this->location_name, $this->location_geo, $this->location_osm,);
+            $this->location = new Location($this->location_name, $this->location_geo, $this->location_osm);
         }
 
         return $this->location;
@@ -549,7 +551,7 @@ class Episode extends Entity
             ->addChild('item');
         array_to_rss([
             'elements' => $this->custom_rss,
-        ], $xmlNode,);
+        ], $xmlNode);
 
         return str_replace(['<item>', '</item>'], '', $xmlNode->asXML());
     }
@@ -573,7 +575,7 @@ class Episode extends Entity
         )['elements'][0]['elements'][0];
 
         if (array_key_exists('elements', $customRssArray)) {
-            $this->attributes['custom_rss'] = json_encode($customRssArray['elements'],);
+            $this->attributes['custom_rss'] = json_encode($customRssArray['elements']);
         } else {
             $this->attributes['custom_rss'] = null;
         }
diff --git a/app/Entities/Image.php b/app/Entities/Image.php
index 5997ac41aee28e298c4f65d5dff388e1710153d4..799840c8ea60fe06a6f03a1b83bdd156b1be69a3 100644
--- a/app/Entities/Image.php
+++ b/app/Entities/Image.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -48,7 +50,7 @@ class Image extends Entity
     public function __construct(?File $file, string $path = '', string $mimetype = '')
     {
         if ($file === null && $path === '') {
-            throw new RuntimeException('File or path must be set to create an Image.',);
+            throw new RuntimeException('File or path must be set to create an Image.');
         }
 
         $this->config = config('Images');
diff --git a/app/Entities/Language.php b/app/Entities/Language.php
index d42814b41e3c0753858e8a161642521ece85b28d..f8cf6dafd5a5a63704164c47acbc174ebb82af9b 100644
--- a/app/Entities/Language.php
+++ b/app/Entities/Language.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Entities/Location.php b/app/Entities/Location.php
index 0eb3b66de5531b957f97fef98582496e9c3f5f66..19fe3aa1841c2fe9cc7ca96c232809ac913d1b9e 100644
--- a/app/Entities/Location.php
+++ b/app/Entities/Location.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -84,7 +86,7 @@ class Location extends Entity
             ],
         );
 
-        $places = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR,);
+        $places = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR);
 
         if ($places === []) {
             return $this;
diff --git a/app/Entities/Note.php b/app/Entities/Note.php
index 4fa60d10e04354fe2a5657d7f691f8827dd5f406..68d39c4fbed0c22e16a96525f2ebd21aeee54b01 100644
--- a/app/Entities/Note.php
+++ b/app/Entities/Note.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -47,11 +49,11 @@ class Note extends ActivityPubNote
     public function getEpisode(): ?Episode
     {
         if ($this->episode_id === null) {
-            throw new RuntimeException('Note must have an episode_id before getting episode.',);
+            throw new RuntimeException('Note must have an episode_id before getting episode.');
         }
 
         if ($this->episode === null) {
-            $this->episode = (new EpisodeModel())->getEpisodeById($this->episode_id,);
+            $this->episode = (new EpisodeModel())->getEpisodeById($this->episode_id);
         }
 
         return $this->episode;
diff --git a/app/Entities/Page.php b/app/Entities/Page.php
index 85f60d190d2da0b66e86c00189be1d6f7d9a7b71..7cf868a010f4d022b9b8d854120861bb5cadc96f 100644
--- a/app/Entities/Page.php
+++ b/app/Entities/Page.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -53,7 +55,7 @@ class Page extends Entity
         ]);
 
         $this->attributes['content_markdown'] = $contentMarkdown;
-        $this->attributes['content_html'] = $converter->convertToHtml($contentMarkdown,);
+        $this->attributes['content_html'] = $converter->convertToHtml($contentMarkdown);
 
         return $this;
     }
diff --git a/app/Entities/Person.php b/app/Entities/Person.php
index 3e298f4d73f7cbf81239b252e47683a2bbe743fa..5f7f0f22aa0600f678c8ddd543427c0138d744eb 100644
--- a/app/Entities/Person.php
+++ b/app/Entities/Person.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -71,7 +73,7 @@ class Person extends Entity
 
     public function getImage(): Image
     {
-        return new Image(null, $this->attributes['image_path'], $this->attributes['image_mimetype'],);
+        return new Image(null, $this->attributes['image_path'], $this->attributes['image_mimetype']);
     }
 
     /**
@@ -80,14 +82,14 @@ class Person extends Entity
     public function getRoles(): array
     {
         if ($this->attributes['podcast_id'] === null) {
-            throw new RuntimeException('Person must have a podcast_id before getting roles.',);
+            throw new RuntimeException('Person must have a podcast_id before getting roles.');
         }
 
         if ($this->roles === null) {
             $this->roles = (new PersonModel())->getPersonRoles(
                 $this->id,
-                $this->attributes['podcast_id'],
-                $this->attributes['episode_id'] ?? null
+                (int) $this->attributes['podcast_id'],
+                array_key_exists('episode_id', $this->attributes) ? (int) $this->attributes['episode_id'] : null
             );
         }
 
diff --git a/app/Entities/Platform.php b/app/Entities/Platform.php
index cfa50a52e945e70814c8e8e60b0226fc6682f153..34965c94329a60306a6cb030b0c268685189ee60 100644
--- a/app/Entities/Platform.php
+++ b/app/Entities/Platform.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Entities/Podcast.php b/app/Entities/Podcast.php
index ed771270751fe6e3d13f422fc11b896fdd106273..bf1b92b6d131ef8cece3c373684c42fd30eb816c 100644
--- a/app/Entities/Podcast.php
+++ b/app/Entities/Podcast.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -172,7 +174,7 @@ class Podcast extends Entity
     public function getActor(): Actor
     {
         if ($this->actor_id === 0) {
-            throw new RuntimeException('Podcast must have an actor_id before getting actor.',);
+            throw new RuntimeException('Podcast must have an actor_id before getting actor.');
         }
 
         if ($this->actor === null) {
@@ -220,11 +222,11 @@ class Podcast extends Entity
     public function getEpisodes(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Podcast must be created before getting episodes.',);
+            throw new RuntimeException('Podcast must be created before getting episodes.');
         }
 
         if ($this->episodes === null) {
-            $this->episodes = (new EpisodeModel())->getPodcastEpisodes($this->id, $this->type,);
+            $this->episodes = (new EpisodeModel())->getPodcastEpisodes($this->id, $this->type);
         }
 
         return $this->episodes;
@@ -238,7 +240,7 @@ class Podcast extends Entity
     public function getPersons(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Podcast must be created before getting persons.',);
+            throw new RuntimeException('Podcast must be created before getting persons.');
         }
 
         if ($this->persons === null) {
@@ -254,11 +256,11 @@ class Podcast extends Entity
     public function getCategory(): ?Category
     {
         if ($this->id === null) {
-            throw new RuntimeException('Podcast must be created before getting category.',);
+            throw new RuntimeException('Podcast must be created before getting category.');
         }
 
         if ($this->category === null) {
-            $this->category = (new CategoryModel())->getCategoryById($this->category_id,);
+            $this->category = (new CategoryModel())->getCategoryById($this->category_id);
         }
 
         return $this->category;
@@ -272,11 +274,11 @@ class Podcast extends Entity
     public function getContributors(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Podcasts must be created before getting contributors.',);
+            throw new RuntimeException('Podcasts must be created before getting contributors.');
         }
 
         if ($this->contributors === null) {
-            $this->contributors = (new UserModel())->getPodcastContributors($this->id,);
+            $this->contributors = (new UserModel())->getPodcastContributors($this->id);
         }
 
         return $this->contributors;
@@ -290,7 +292,7 @@ class Podcast extends Entity
         ]);
 
         $this->attributes['description_markdown'] = $descriptionMarkdown;
-        $this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown,);
+        $this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown);
 
         return $this;
     }
@@ -333,11 +335,11 @@ class Podcast extends Entity
     public function getPodcastingPlatforms(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Podcast must be created before getting podcasting platform links.',);
+            throw new RuntimeException('Podcast must be created before getting podcasting platform links.');
         }
 
         if ($this->podcasting_platforms === null) {
-            $this->podcasting_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'podcasting',);
+            $this->podcasting_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'podcasting');
         }
 
         return $this->podcasting_platforms;
@@ -351,11 +353,11 @@ class Podcast extends Entity
     public function getSocialPlatforms(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Podcast must be created before getting social platform links.',);
+            throw new RuntimeException('Podcast must be created before getting social platform links.');
         }
 
         if ($this->social_platforms === null) {
-            $this->social_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'social',);
+            $this->social_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'social');
         }
 
         return $this->social_platforms;
@@ -369,11 +371,11 @@ class Podcast extends Entity
     public function getFundingPlatforms(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Podcast must be created before getting funding platform links.',);
+            throw new RuntimeException('Podcast must be created before getting funding platform links.');
         }
 
         if ($this->funding_platforms === null) {
-            $this->funding_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'funding',);
+            $this->funding_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'funding');
         }
 
         return $this->funding_platforms;
@@ -385,11 +387,11 @@ class Podcast extends Entity
     public function getOtherCategories(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Podcast must be created before getting other categories.',);
+            throw new RuntimeException('Podcast must be created before getting other categories.');
         }
 
         if ($this->other_categories === null) {
-            $this->other_categories = (new CategoryModel())->getPodcastCategories($this->id,);
+            $this->other_categories = (new CategoryModel())->getPodcastCategories($this->id);
         }
 
         return $this->other_categories;
@@ -401,7 +403,7 @@ class Podcast extends Entity
     public function getOtherCategoriesIds(): array
     {
         if ($this->other_categories_ids === null) {
-            $this->other_categories_ids = array_column($this->getOtherCategories(), 'id',);
+            $this->other_categories_ids = array_column($this->getOtherCategories(), 'id');
         }
 
         return $this->other_categories_ids;
@@ -441,7 +443,7 @@ class Podcast extends Entity
         }
 
         if ($this->location === null) {
-            $this->location = new Location($this->location_name, $this->location_geo, $this->location_osm,);
+            $this->location = new Location($this->location_name, $this->location_geo, $this->location_osm);
         }
 
         return $this->location;
@@ -463,7 +465,7 @@ class Podcast extends Entity
         ))->addChild('channel');
         array_to_rss([
             'elements' => $this->custom_rss,
-        ], $xmlNode,);
+        ], $xmlNode);
 
         return str_replace(['<channel>', '</channel>'], '', $xmlNode->asXML());
     }
@@ -487,7 +489,7 @@ class Podcast extends Entity
         )['elements'][0];
 
         if (array_key_exists('elements', $customRssArray)) {
-            $this->attributes['custom_rss'] = json_encode($customRssArray['elements'],);
+            $this->attributes['custom_rss'] = json_encode($customRssArray['elements']);
         } else {
             $this->attributes['custom_rss'] = null;
         }
diff --git a/app/Entities/Soundbite.php b/app/Entities/Soundbite.php
index 081cb1a60038045bfda5a478dce7930999becfe1..f6e85cfd6035440759fb7643cb7a30ef73d50901 100644
--- a/app/Entities/Soundbite.php
+++ b/app/Entities/Soundbite.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Entities/User.php b/app/Entities/User.php
index 7ea83d1c3c2e45b70330ffa6d52dd9006115a0e4..f2b018c3d7ffd7d0f4e1c241789996d8e77a4d3e 100644
--- a/app/Entities/User.php
+++ b/app/Entities/User.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -52,7 +54,7 @@ class User extends MythAuthUser
     public function getPodcasts(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Users must be created before getting podcasts.',);
+            throw new RuntimeException('Users must be created before getting podcasts.');
         }
 
         if ($this->podcasts === null) {
diff --git a/app/Filters/PermissionFilter.php b/app/Filters/PermissionFilter.php
index cb3893439e5824bae4fb56dca94f875bfdbc3335..5a338c345d103bd851112ce575835c5b2267fcf7 100644
--- a/app/Filters/PermissionFilter.php
+++ b/app/Filters/PermissionFilter.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace App\Filters;
 
 use App\Models\PodcastModel;
diff --git a/app/Helpers/auth_helper.php b/app/Helpers/auth_helper.php
index 88fe1817ed63e11418ab729c77d25c9ca80543f4..31842fbbba4b113d27f8f54e3298068477ffdfc7 100644
--- a/app/Helpers/auth_helper.php
+++ b/app/Helpers/auth_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -73,7 +75,7 @@ if (! function_exists('interact_as_actor')) {
 
         $session = session();
         if ($session->has('interact_as_actor_id')) {
-            return model('ActorModel')->getActorById($session->get('interact_as_actor_id'),);
+            return model('ActorModel')->getActorById($session->get('interact_as_actor_id'));
         }
 
         return false;
diff --git a/app/Helpers/breadcrumb_helper.php b/app/Helpers/breadcrumb_helper.php
index 6de3e85564d8af984c22febeba329972ce254131..4e9b6a2e4881d08bef407765051e898dd8e08b43 100644
--- a/app/Helpers/breadcrumb_helper.php
+++ b/app/Helpers/breadcrumb_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Helpers/components_helper.php b/app/Helpers/components_helper.php
index 5a869b2f286567ba1b4c23931bc02434ad9c740a..5cb29ff2fe5b468afb3250fb2d4dddf4929446f9 100644
--- a/app/Helpers/components_helper.php
+++ b/app/Helpers/components_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -94,13 +96,13 @@ if (! function_exists('button')) {
         if ($uri !== '') {
             return anchor($uri, $label, array_merge([
                 'class' => $buttonClass,
-            ], $customAttributes,),);
+            ], $customAttributes,));
         }
 
         $defaultButtonAttributes = [
             'type' => 'button',
         ];
-        $attributes = stringify_attributes(array_merge($defaultButtonAttributes, $customAttributes),);
+        $attributes = stringify_attributes(array_merge($defaultButtonAttributes, $customAttributes));
 
         return <<<CODE_SAMPLE
             <button class="{$buttonClass}" {$attributes}>
@@ -258,7 +260,7 @@ if (! function_exists('publication_pill')) {
             '</time>',
         ];
 
-        $label = lang('Episode.publication_status.' . $publicationStatus, $langOptions,);
+        $label = lang('Episode.publication_status.' . $publicationStatus, $langOptions);
 
         return '<span class="px-1 font-semibold border ' .
             $class .
@@ -290,7 +292,7 @@ if (! function_exists('publication_button')) {
                 break;
             case 'scheduled':
                 $label = lang('Episode.publish_edit');
-                $route = route_to('episode-publish_edit', $podcastId, $episodeId,);
+                $route = route_to('episode-publish_edit', $podcastId, $episodeId);
                 $variant = 'accent';
                 $iconLeft = 'upload-cloud';
                 break;
diff --git a/app/Helpers/form_helper.php b/app/Helpers/form_helper.php
index 85e59e8055ceeb5e3e0cd23c53ff00226be1e055..2111845a55c579c27f7b724e4df7d05ea0bf8b76 100644
--- a/app/Helpers/form_helper.php
+++ b/app/Helpers/form_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Helpers/id3_helper.php b/app/Helpers/id3_helper.php
index 4195d3f76272e2900a4da638537ccf6c32b88842..e7232a1611cbd0ed5472edda3ace552108bbfda1 100644
--- a/app/Helpers/id3_helper.php
+++ b/app/Helpers/id3_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -20,7 +22,7 @@ if (! function_exists('get_file_tags')) {
     function get_file_tags(File $file): array
     {
         $getID3 = new GetID3();
-        $FileInfo = $getID3->analyze($file);
+        $FileInfo = $getID3->analyze((string) $file);
 
         return [
             'filesize' => $FileInfo['filesize'],
diff --git a/app/Helpers/media_helper.php b/app/Helpers/media_helper.php
index 17df25714a430ac7ac3a9bd313c771638fe2176f..4e8ddd3f3deb2a72269d2382c52d0d6b221d7f08 100644
--- a/app/Helpers/media_helper.php
+++ b/app/Helpers/media_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Helpers/misc_helper.php b/app/Helpers/misc_helper.php
index 70b40671006c939c0fd06f329325af5e3ed07a18..68404ba10418f5fd32e253ca4866fdf6dab12de1 100644
--- a/app/Helpers/misc_helper.php
+++ b/app/Helpers/misc_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Helpers/page_helper.php b/app/Helpers/page_helper.php
index 4197229fd548cda2255d309316fa725ce8b3c273..7177f7cc16206fb212347c05d194564637f79eb3 100644
--- a/app/Helpers/page_helper.php
+++ b/app/Helpers/page_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Helpers/rss_helper.php b/app/Helpers/rss_helper.php
index 0c221d6e10b4a6d33eb8ab36fe0c0ed934325a93..4b95ecf3fbad441123d10b8aa2671b82f0bbaccb 100644
--- a/app/Helpers/rss_helper.php
+++ b/app/Helpers/rss_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -19,7 +21,7 @@ if (! function_exists('get_rss_feed')) {
      * @param string $serviceSlug The name of the service that fetches the RSS feed for future reference when the audio file is eventually downloaded
      * @return string rss feed as xml
      */
-    function get_rss_feed(Podcast $podcast, ?string $serviceSlug = null): string
+    function get_rss_feed(Podcast $podcast, string $serviceSlug = ''): string
     {
         $episodes = $podcast->episodes;
 
@@ -34,18 +36,18 @@ if (! function_exists('get_rss_feed')) {
 
         $channel = $rss->addChild('channel');
 
-        $atomLink = $channel->addChild('atom:link', null, 'http://www.w3.org/2005/Atom',);
+        $atomLink = $channel->addChild('atom:link', null, 'http://www.w3.org/2005/Atom');
         $atomLink->addAttribute('href', $podcast->feed_url);
         $atomLink->addAttribute('rel', 'self');
         $atomLink->addAttribute('type', 'application/rss+xml');
 
         if ($podcast->new_feed_url !== null) {
-            $channel->addChild('new-feed-url', $podcast->new_feed_url, $itunesNamespace,);
+            $channel->addChild('new-feed-url', $podcast->new_feed_url, $itunesNamespace);
         }
 
         // the last build date corresponds to the creation of the feed.xml cache
-        $channel->addChild('lastBuildDate', (new Time('now'))->format(DATE_RFC1123),);
-        $channel->addChild('generator', 'Castopod Host - https://castopod.org/',);
+        $channel->addChild('lastBuildDate', (new Time('now'))->format(DATE_RFC1123));
+        $channel->addChild('generator', 'Castopod Host - https://castopod.org/');
         $channel->addChild('docs', 'https://cyber.harvard.edu/rss/rss.html');
 
         $channel->addChild('title', $podcast->title);
@@ -71,31 +73,31 @@ if (! function_exists('get_rss_feed')) {
             }
         }
         if ($podcast->payment_pointer !== null) {
-            $valueElement = $channel->addChild('value', null, $podcastNamespace,);
+            $valueElement = $channel->addChild('value', null, $podcastNamespace);
             $valueElement->addAttribute('type', 'webmonetization');
             $valueElement->addAttribute('method', '');
             $valueElement->addAttribute('suggested', '');
-            $recipientElement = $valueElement->addChild('valueRecipient', null, $podcastNamespace,);
+            $recipientElement = $valueElement->addChild('valueRecipient', null, $podcastNamespace);
             $recipientElement->addAttribute('name', $podcast->owner_name);
             $recipientElement->addAttribute('type', 'ILP');
-            $recipientElement->addAttribute('address', $podcast->payment_pointer,);
+            $recipientElement->addAttribute('address', $podcast->payment_pointer);
             $recipientElement->addAttribute('split', '100');
         }
         $channel
             ->addChild('locked', $podcast->is_locked ? 'yes' : 'no', $podcastNamespace,)
             ->addAttribute('owner', $podcast->owner_email);
         if ($podcast->imported_feed_url !== null) {
-            $channel->addChild('previousUrl', $podcast->imported_feed_url, $podcastNamespace,);
+            $channel->addChild('previousUrl', $podcast->imported_feed_url, $podcastNamespace);
         }
 
         foreach ($podcast->podcasting_platforms as $podcastingPlatform) {
-            $podcastingPlatformElement = $channel->addChild('id', null, $podcastNamespace,);
-            $podcastingPlatformElement->addAttribute('platform', $podcastingPlatform->slug,);
+            $podcastingPlatformElement = $channel->addChild('id', null, $podcastNamespace);
+            $podcastingPlatformElement->addAttribute('platform', $podcastingPlatform->slug);
             if ($podcastingPlatform->link_content !== null) {
-                $podcastingPlatformElement->addAttribute('id', $podcastingPlatform->link_content,);
+                $podcastingPlatformElement->addAttribute('id', $podcastingPlatform->link_content);
             }
             if ($podcastingPlatform->link_url !== null) {
-                $podcastingPlatformElement->addAttribute('url', htmlspecialchars($podcastingPlatform->link_url),);
+                $podcastingPlatformElement->addAttribute('url', htmlspecialchars($podcastingPlatform->link_url));
             }
         }
 
@@ -105,9 +107,9 @@ if (! function_exists('get_rss_feed')) {
                 $socialPlatform->link_content,
                 $podcastNamespace,
             );
-            $socialPlatformElement->addAttribute('platform', $socialPlatform->slug,);
+            $socialPlatformElement->addAttribute('platform', $socialPlatform->slug);
             if ($socialPlatform->link_url !== null) {
-                $socialPlatformElement->addAttribute('url', htmlspecialchars($socialPlatform->link_url),);
+                $socialPlatformElement->addAttribute('url', htmlspecialchars($socialPlatform->link_url));
             }
         }
 
@@ -117,9 +119,9 @@ if (! function_exists('get_rss_feed')) {
                 $fundingPlatform->link_content,
                 $podcastNamespace,
             );
-            $fundingPlatformElement->addAttribute('platform', $fundingPlatform->slug,);
+            $fundingPlatformElement->addAttribute('platform', $fundingPlatform->slug);
             if ($fundingPlatform->link_url !== null) {
-                $fundingPlatformElement->addAttribute('url', htmlspecialchars($fundingPlatform->link_url),);
+                $fundingPlatformElement->addAttribute('url', htmlspecialchars($fundingPlatform->link_url));
             }
         }
 
@@ -134,7 +136,7 @@ if (! function_exists('get_rss_feed')) {
                 $personElement->addAttribute('img', $person->image->large_url);
 
                 if ($person->information_url !== null) {
-                    $personElement->addAttribute('href', $person->information_url,);
+                    $personElement->addAttribute('href', $person->information_url);
                 }
 
                 $personElement->addAttribute(
@@ -192,7 +194,7 @@ if (! function_exists('get_rss_feed')) {
         if ($podcast->custom_rss !== null) {
             array_to_rss([
                 'elements' => $podcast->custom_rss,
-            ], $channel,);
+            ], $channel);
         }
 
         foreach ($episodes as $episode) {
@@ -207,11 +209,11 @@ if (! function_exists('get_rss_feed')) {
                         ? ''
                         : '?_from=' . urlencode($serviceSlug)),
             );
-            $enclosure->addAttribute('length', $episode->audio_file_size);
+            $enclosure->addAttribute('length', (string) $episode->audio_file_size);
             $enclosure->addAttribute('type', $episode->audio_file_mimetype);
 
             $item->addChild('guid', $episode->guid);
-            $item->addChild('pubDate', $episode->published_at->format(DATE_RFC1123),);
+            $item->addChild('pubDate', $episode->published_at->format(DATE_RFC1123));
             if ($episode->location !== null) {
                 $locationElement = $item->addChild(
                     'location',
@@ -219,17 +221,17 @@ if (! function_exists('get_rss_feed')) {
                     $podcastNamespace,
                 );
                 if ($episode->location->geo !== null) {
-                    $locationElement->addAttribute('geo', $episode->location->geo,);
+                    $locationElement->addAttribute('geo', $episode->location->geo);
                 }
                 if ($episode->location->osm !== null) {
-                    $locationElement->addAttribute('osm', $episode->location->osm,);
+                    $locationElement->addAttribute('osm', $episode->location->osm);
                 }
             }
-            $item->addChildWithCDATA('description', $episode->getDescriptionHtml($serviceSlug),);
-            $item->addChild('duration', $episode->audio_file_duration, $itunesNamespace,);
+            $item->addChildWithCDATA('description', $episode->getDescriptionHtml($serviceSlug));
+            $item->addChild('duration', $episode->audio_file_duration, $itunesNamespace);
             $item->addChild('link', $episode->link);
-            $episodeItunesImage = $item->addChild('image', null, $itunesNamespace,);
-            $episodeItunesImage->addAttribute('href', $episode->image->feed_url,);
+            $episodeItunesImage = $item->addChild('image', null, $itunesNamespace);
+            $episodeItunesImage->addAttribute('href', $episode->image->feed_url);
 
             $episode->parental_advisory &&
                 $item->addChild(
@@ -243,29 +245,29 @@ if (! function_exists('get_rss_feed')) {
             $episode->number &&
                 $item->addChild('episode', $episode->number, $itunesNamespace);
             $episode->season_number &&
-                $item->addChild('season', $episode->season_number, $itunesNamespace,);
+                $item->addChild('season', $episode->season_number, $itunesNamespace);
             $item->addChild('episodeType', $episode->type, $itunesNamespace);
 
             if ($episode->transcript_file_url) {
-                $transcriptElement = $item->addChild('transcript', null, $podcastNamespace,);
-                $transcriptElement->addAttribute('url', $episode->transcript_file_url,);
+                $transcriptElement = $item->addChild('transcript', null, $podcastNamespace);
+                $transcriptElement->addAttribute('url', $episode->transcript_file_url);
                 $transcriptElement->addAttribute(
                     'type',
                     Mimes::guessTypeFromExtension(pathinfo($episode->transcript_file_url, PATHINFO_EXTENSION,),),
                 );
-                $transcriptElement->addAttribute('language', $podcast->language_code,);
+                $transcriptElement->addAttribute('language', $podcast->language_code);
             }
 
             if ($episode->chapters_file_url) {
-                $chaptersElement = $item->addChild('chapters', null, $podcastNamespace,);
-                $chaptersElement->addAttribute('url', $episode->chapters_file_url,);
-                $chaptersElement->addAttribute('type', 'application/json+chapters',);
+                $chaptersElement = $item->addChild('chapters', null, $podcastNamespace);
+                $chaptersElement->addAttribute('url', $episode->chapters_file_url);
+                $chaptersElement->addAttribute('type', 'application/json+chapters');
             }
 
             foreach ($episode->soundbites as $soundbite) {
-                $soundbiteElement = $item->addChild('soundbite', $soundbite->label, $podcastNamespace,);
-                $soundbiteElement->addAttribute('start_time', $soundbite->start_time,);
-                $soundbiteElement->addAttribute('duration', $soundbite->duration,);
+                $soundbiteElement = $item->addChild('soundbite', $soundbite->label, $podcastNamespace);
+                $soundbiteElement->addAttribute('start_time', $soundbite->start_time);
+                $soundbiteElement->addAttribute('duration', $soundbite->duration);
             }
 
             foreach ($episode->persons as $person) {
@@ -288,10 +290,10 @@ if (! function_exists('get_rss_feed')) {
                         htmlspecialchars(lang("PersonsTaxonomy.persons.{$role->group}.label", [], 'en',),),
                     );
 
-                    $personElement->addAttribute('img', $person->image->large_url,);
+                    $personElement->addAttribute('img', $person->image->large_url);
 
                     if ($person->information_url !== null) {
-                        $personElement->addAttribute('href', $person->information_url,);
+                        $personElement->addAttribute('href', $person->information_url);
                     }
                 }
             }
@@ -302,7 +304,7 @@ if (! function_exists('get_rss_feed')) {
             if ($episode->custom_rss !== null) {
                 array_to_rss([
                     'elements' => $episode->custom_rss,
-                ], $item,);
+                ], $item);
             }
         }
 
@@ -327,8 +329,8 @@ if (! function_exists('add_category_tag')) {
         );
 
         if ($category->parent !== null) {
-            $itunesCategoryChild = $itunesCategory->addChild('category', '', $itunesNamespace,);
-            $itunesCategoryChild->addAttribute('text', $category->apple_category,);
+            $itunesCategoryChild = $itunesCategory->addChild('category', '', $itunesNamespace);
+            $itunesCategoryChild->addAttribute('text', $category->apple_category);
             $node->addChild('category', $category->parent->apple_category);
         }
         $node->addChild('category', $category->apple_category);
@@ -393,7 +395,7 @@ if (! function_exists('array_to_rss')) {
                         $childArrayNode['attributes']
                         as $attributeKey => $attributeValue
                     ) {
-                        $childXmlNode->addAttribute($attributeKey, $attributeValue,);
+                        $childXmlNode->addAttribute($attributeKey, $attributeValue);
                     }
                 }
                 array_to_rss($childArrayNode, $childXmlNode);
diff --git a/app/Helpers/svg_helper.php b/app/Helpers/svg_helper.php
index a911e5ea3fad1a2dde5aebd7e9c8107a16f0388d..a187e40011dda64b244d1ee54051ebc646ee848e 100644
--- a/app/Helpers/svg_helper.php
+++ b/app/Helpers/svg_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -18,7 +20,7 @@ if (! function_exists('icon')) {
     {
         $svgContents = file_get_contents('assets/icons/' . $name . '.svg');
         if ($class !== '') {
-            $svgContents = str_replace('<svg', '<svg class="' . $class . '"', $svgContents,);
+            $svgContents = str_replace('<svg', '<svg class="' . $class . '"', $svgContents);
         }
 
         return $svgContents;
@@ -37,7 +39,7 @@ if (! function_exists('svg')) {
     {
         $svgContents = file_get_contents('assets/images/' . $name . '.svg');
         if ($class) {
-            $svgContents = str_replace('<svg', '<svg class="' . $class . '"', $svgContents,);
+            $svgContents = str_replace('<svg', '<svg class="' . $class . '"', $svgContents);
         }
         return $svgContents;
     }
diff --git a/app/Helpers/url_helper.php b/app/Helpers/url_helper.php
index e72246aee5acd9e1dd7ce04749726f040c1f3b4e..b655ad705c9c5410e8e74a421c27106350604342 100644
--- a/app/Helpers/url_helper.php
+++ b/app/Helpers/url_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/ActivityPub.php b/app/Language/en/ActivityPub.php
index 62a78d81647c7dc7996acaa4093438fa9c1fa817..1c64c6183ee34490bc3197bf9e6a2a30871ed2d1 100644
--- a/app/Language/en/ActivityPub.php
+++ b/app/Language/en/ActivityPub.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Admin.php b/app/Language/en/Admin.php
index 5585b4ff2f20c16c19479910cd5a1b3e46d94f16..944e7af2b6d1cd0500155e1549d468820c79f93c 100644
--- a/app/Language/en/Admin.php
+++ b/app/Language/en/Admin.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/AdminNavigation.php b/app/Language/en/AdminNavigation.php
index 820767f4ddfd620bfd0307d402c912aa21c5aadb..f5ca5aeab3253f21a462d861ec527a2b80847a8f 100644
--- a/app/Language/en/AdminNavigation.php
+++ b/app/Language/en/AdminNavigation.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Breadcrumb.php b/app/Language/en/Breadcrumb.php
index 3dc3967ab81bdf24c2f23c575790454679399f58..b3a7e3bb21e026a0e0c84d42cea3f6244f816e50 100644
--- a/app/Language/en/Breadcrumb.php
+++ b/app/Language/en/Breadcrumb.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Charts.php b/app/Language/en/Charts.php
index 0b6078d1a1c9dc6833adf591ed47c4184c824efb..2bc933ef280659a76095b6957442c8cda203a258 100644
--- a/app/Language/en/Charts.php
+++ b/app/Language/en/Charts.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Common.php b/app/Language/en/Common.php
index da350b4322bdf3ca48c532d480ef92c3673f0f5a..b406878cc8879e70ccb35efa9c7fa6c4567d3f20 100644
--- a/app/Language/en/Common.php
+++ b/app/Language/en/Common.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Contributor.php b/app/Language/en/Contributor.php
index 629d44910ff5ff275d4ca912a739e46491ec6fee..e2e500268447f7a634adfc3000a99b7b27100085 100644
--- a/app/Language/en/Contributor.php
+++ b/app/Language/en/Contributor.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Countries.php b/app/Language/en/Countries.php
index d0d7e6464ae42c1297a09eac3fb71f47b02a9f70..b682d306f711ccac6068ded43a8538494ebdcb16 100644
--- a/app/Language/en/Countries.php
+++ b/app/Language/en/Countries.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * ISO 3166 country codes
  *
diff --git a/app/Language/en/Episode.php b/app/Language/en/Episode.php
index 44a817fba768b488acea6d7354c3f9e7b91320bc..0226b6eaa8247e7f0db4db525fbeb2328f9043fa 100644
--- a/app/Language/en/Episode.php
+++ b/app/Language/en/Episode.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Fediverse.php b/app/Language/en/Fediverse.php
index 17cd0d0b768ccfca7feb43ac09ec00aec4e190c0..a445724791d24a411c138e4e8e921860edcad2e4 100644
--- a/app/Language/en/Fediverse.php
+++ b/app/Language/en/Fediverse.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Home.php b/app/Language/en/Home.php
index ee18880595f87fb182fb5334c6b456cac78313a8..eda08142ef15ee9a08ff7529369a07fc079fa2b8 100644
--- a/app/Language/en/Home.php
+++ b/app/Language/en/Home.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Install.php b/app/Language/en/Install.php
index df78956d4900ea2d865217048b038306b79ea3f6..c70faf69a56ec390d3bba9653a5d68bdfee36ba2 100644
--- a/app/Language/en/Install.php
+++ b/app/Language/en/Install.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/MyAccount.php b/app/Language/en/MyAccount.php
index ccdced98be7ddeb01307a26ae84c32dac2637a57..68e79e82d9ca18adb73a5664e381b11b07d263ec 100644
--- a/app/Language/en/MyAccount.php
+++ b/app/Language/en/MyAccount.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Note.php b/app/Language/en/Note.php
index 7c4daaa8f0e4a1773acbb1e672bed155684efed1..7a6cca3c01a8a5c79454a0e25a6113e13f49451a 100644
--- a/app/Language/en/Note.php
+++ b/app/Language/en/Note.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Page.php b/app/Language/en/Page.php
index cafd882084dac5aa8c2b4dee9867e95b34d0e83e..7981e9d4fad249bf7f52357ea5bc3b3486c4c09f 100644
--- a/app/Language/en/Page.php
+++ b/app/Language/en/Page.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Pager.php b/app/Language/en/Pager.php
index d18f15edbfaeb177c745e812ad0d281d387d30b4..3b6fb25355873701d1689eac70e8ad1c99262376 100644
--- a/app/Language/en/Pager.php
+++ b/app/Language/en/Pager.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Person.php b/app/Language/en/Person.php
index 1c7ce78eb2d8cd15fcd2c3c09823d1db3e57f053..d6b0050d077db81e9951d7c282086f78979a2b19 100644
--- a/app/Language/en/Person.php
+++ b/app/Language/en/Person.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Platforms.php b/app/Language/en/Platforms.php
index c1890482cb63d3b39e30bc15fc1bad415864f04a..27582cdad8bb32477dbdaef513f513f678bf1485 100644
--- a/app/Language/en/Platforms.php
+++ b/app/Language/en/Platforms.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Podcast.php b/app/Language/en/Podcast.php
index bad2860811d31f62d4b535e62f875ce630ade0ec..03e857a4afedd0b4bda0ddf4483b5a7de6841556 100644
--- a/app/Language/en/Podcast.php
+++ b/app/Language/en/Podcast.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/PodcastImport.php b/app/Language/en/PodcastImport.php
index 1ce609d3d3baeb3b70ffb3cc5271534cfd22341b..a19eb43561d337a14ff77f856d865b1b8c605729 100644
--- a/app/Language/en/PodcastImport.php
+++ b/app/Language/en/PodcastImport.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/PodcastNavigation.php b/app/Language/en/PodcastNavigation.php
index f577326d4d6e93a149ebae6e28d59c51fc500f8e..147eebb6a654d2b3d1188282c77149dd85ed2c8f 100644
--- a/app/Language/en/PodcastNavigation.php
+++ b/app/Language/en/PodcastNavigation.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/User.php b/app/Language/en/User.php
index 493b3fe65ca5e5164bc5884bc1e39145cf4ca09b..97cfe2f73cb726e713c2e7b8a26c21b089cd64e9 100644
--- a/app/Language/en/User.php
+++ b/app/Language/en/User.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/en/Validation.php b/app/Language/en/Validation.php
index fb27793e148a4a20b7a30cd4598913b8e6f98573..ae627c4b2122b0f3877da54c87c2ca7c0b5c10ba 100644
--- a/app/Language/en/Validation.php
+++ b/app/Language/en/Validation.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/ActivityPub.php b/app/Language/fr/ActivityPub.php
index b60d822d96f2b54ee0c6033153430270dc904299..54c2d1868df14005592db5f7889b7bf48df69dcf 100644
--- a/app/Language/fr/ActivityPub.php
+++ b/app/Language/fr/ActivityPub.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Admin.php b/app/Language/fr/Admin.php
index 4a54b1bc2236e72a64eac62751109219574de665..5c0d82e17b2545ded5a38673e24454355a4f8b29 100644
--- a/app/Language/fr/Admin.php
+++ b/app/Language/fr/Admin.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/AdminNavigation.php b/app/Language/fr/AdminNavigation.php
index 011880451a81b71bb1ddc6418d99f8ee062ef9ec..357b64ffabadbb2881ed2763257a0b7effe76756 100644
--- a/app/Language/fr/AdminNavigation.php
+++ b/app/Language/fr/AdminNavigation.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Breadcrumb.php b/app/Language/fr/Breadcrumb.php
index 9c235352a7b1cc561825488e88541e8daa4fe20b..81c1e17c197eab2e39789f15bf21f88dfa869217 100644
--- a/app/Language/fr/Breadcrumb.php
+++ b/app/Language/fr/Breadcrumb.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Charts.php b/app/Language/fr/Charts.php
index 1b72c51b440e47bf6f36329fe1c084589c78533b..071918ae78042cd672826bc61fb1fc38d302184d 100644
--- a/app/Language/fr/Charts.php
+++ b/app/Language/fr/Charts.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Common.php b/app/Language/fr/Common.php
index 8d466bf28de78de011c99a3f518a3a55f1d6cefb..668a160735ef9c711243be337fde46577b95ba20 100644
--- a/app/Language/fr/Common.php
+++ b/app/Language/fr/Common.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Contributor.php b/app/Language/fr/Contributor.php
index 1e59c0c652d1f24084a1ea84de18c15a51723c42..4ed4799ad7bd2cee5fe234c838d87b23bd813ed1 100644
--- a/app/Language/fr/Contributor.php
+++ b/app/Language/fr/Contributor.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Countries.php b/app/Language/fr/Countries.php
index f5af074c8e565483163731a3e95eda29b03d0013..f1974eee7d3948045fc71ea5dc7c88641c0ae56d 100644
--- a/app/Language/fr/Countries.php
+++ b/app/Language/fr/Countries.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * ISO 3166 country codes
  *
diff --git a/app/Language/fr/Episode.php b/app/Language/fr/Episode.php
index 39e860e578ec0521033d185ec77d468a3efe45be..9e360cbe69c1138c3d7fd282921998e508d768af 100644
--- a/app/Language/fr/Episode.php
+++ b/app/Language/fr/Episode.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Fediverse.php b/app/Language/fr/Fediverse.php
index 3d7da1af9efc768d6b61a61ede5fcf219a26e37f..fa6b48972c7c5465fd0c89debac46fee159df9b6 100644
--- a/app/Language/fr/Fediverse.php
+++ b/app/Language/fr/Fediverse.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Home.php b/app/Language/fr/Home.php
index b8b7c4911a0ede03a90e82642c37af907347691f..ab847e8f412484def718d5c7f5724c427fac4faf 100644
--- a/app/Language/fr/Home.php
+++ b/app/Language/fr/Home.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Install.php b/app/Language/fr/Install.php
index 92640320320549e82683e0d2d9533a6d32164a7f..64eebae16403a1e33ef5bbe53f95cd2c66be700a 100644
--- a/app/Language/fr/Install.php
+++ b/app/Language/fr/Install.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/MyAccount.php b/app/Language/fr/MyAccount.php
index 3d75c589dc61e872acc34896e864582c6b697572..837b04f4604ab6ddc9614dd8d396c6a1781e9937 100644
--- a/app/Language/fr/MyAccount.php
+++ b/app/Language/fr/MyAccount.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Note.php b/app/Language/fr/Note.php
index fe97031c052a10e5b6ec556a0d0e13c9e461da49..682686f1ac6ff45d21f91eb9a836b08271ad0cab 100644
--- a/app/Language/fr/Note.php
+++ b/app/Language/fr/Note.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Page.php b/app/Language/fr/Page.php
index 0514060255e663fb782fcf32789e3178c15f6ef5..fb71fa5636cd6844126e6c0750c6121f184c8ea8 100644
--- a/app/Language/fr/Page.php
+++ b/app/Language/fr/Page.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Pager.php b/app/Language/fr/Pager.php
index 181a18e30fd8b9eae06a00ccc7a9e7eeea962574..4dcbffa71abed817cef2048e0aba1b5f7930380e 100644
--- a/app/Language/fr/Pager.php
+++ b/app/Language/fr/Pager.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Person.php b/app/Language/fr/Person.php
index aef667f0ac8e143e3cf73d1c2466cfe0440729d6..1e0e9bd45c365cf473ffc4529a503f7cc7be3ddb 100644
--- a/app/Language/fr/Person.php
+++ b/app/Language/fr/Person.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Platforms.php b/app/Language/fr/Platforms.php
index 4a4fdc5d8814158d8d56e444812df871437f16c1..1a5a59c4d45b2c10e0a264e5f33db6bb2e1e9922 100644
--- a/app/Language/fr/Platforms.php
+++ b/app/Language/fr/Platforms.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Podcast.php b/app/Language/fr/Podcast.php
index 7d390a00ff860e777fc18a922217c4212726d4c8..f01fc101dda531d02c37351a32d2d3e20cc2a97d 100644
--- a/app/Language/fr/Podcast.php
+++ b/app/Language/fr/Podcast.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/PodcastImport.php b/app/Language/fr/PodcastImport.php
index 371185a142fa06c075e09216c5fac7680c6da3d8..b04e26484864489a2da532099980d48122b5dca9 100644
--- a/app/Language/fr/PodcastImport.php
+++ b/app/Language/fr/PodcastImport.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/PodcastNavigation.php b/app/Language/fr/PodcastNavigation.php
index cc8bea64104c8a54898cb88ec87abf6adf39b67a..69397254326ed9ab47594424d54e184145ccc2c8 100644
--- a/app/Language/fr/PodcastNavigation.php
+++ b/app/Language/fr/PodcastNavigation.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/User.php b/app/Language/fr/User.php
index 69fda7b17548b26b3a2c3eb6073b9a9dfa38b895..ccb262b15853d1e3434875226850a786277c06c8 100644
--- a/app/Language/fr/User.php
+++ b/app/Language/fr/User.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Language/fr/Validation.php b/app/Language/fr/Validation.php
index 519fbe9a0340fdf90b8a79061fd560202dc39d9d..12b45319f92a4522f54f9c0bdba3ec39dbe8a00c 100644
--- a/app/Language/fr/Validation.php
+++ b/app/Language/fr/Validation.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Activities/AcceptActivity.php b/app/Libraries/ActivityPub/Activities/AcceptActivity.php
index 9d139fa939660cdad2cea095b72a84593f3b016d..9dd1e04918e77bf895a5ef1ed3c5b623f5bc7c50 100644
--- a/app/Libraries/ActivityPub/Activities/AcceptActivity.php
+++ b/app/Libraries/ActivityPub/Activities/AcceptActivity.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Activity objects are specializations of the base Object type that provide information about actions that have either
  * already occurred, are in the process of occurring, or may occur in the future.
diff --git a/app/Libraries/ActivityPub/Activities/AnnounceActivity.php b/app/Libraries/ActivityPub/Activities/AnnounceActivity.php
index 644b58cdda8a76cc46d8d727a3c903b8c0261510..d258c46a31a2170c1b46cc5e41ce96fea7e2b34b 100644
--- a/app/Libraries/ActivityPub/Activities/AnnounceActivity.php
+++ b/app/Libraries/ActivityPub/Activities/AnnounceActivity.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Activity objects are specializations of the base Object type that provide information about actions that have either
  * already occurred, are in the process of occurring, or may occur in the future.
diff --git a/app/Libraries/ActivityPub/Activities/CreateActivity.php b/app/Libraries/ActivityPub/Activities/CreateActivity.php
index 9fe680edcea16b2532969c04048f9bdf7927ae8a..42bc4d546036051c3d1452492fe2c0385a258b2a 100644
--- a/app/Libraries/ActivityPub/Activities/CreateActivity.php
+++ b/app/Libraries/ActivityPub/Activities/CreateActivity.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Activity objects are specializations of the base Object type that provide information about actions that have either
  * already occurred, are in the process of occurring, or may occur in the future.
diff --git a/app/Libraries/ActivityPub/Activities/DeleteActivity.php b/app/Libraries/ActivityPub/Activities/DeleteActivity.php
index 06c153b44f58fe9ab670b62598273171b1ab55d9..015b5310a265c2e798c4f7792d6d455caa0a1841 100644
--- a/app/Libraries/ActivityPub/Activities/DeleteActivity.php
+++ b/app/Libraries/ActivityPub/Activities/DeleteActivity.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Activity objects are specializations of the base Object type that provide information about actions that have either
  * already occurred, are in the process of occurring, or may occur in the future.
diff --git a/app/Libraries/ActivityPub/Activities/FollowActivity.php b/app/Libraries/ActivityPub/Activities/FollowActivity.php
index 65b3edddd8c141ab144922e23d6d41aafe0adeff..ee8f7b4baf6db436ef4ea0190143cf8ca35ab2ca 100644
--- a/app/Libraries/ActivityPub/Activities/FollowActivity.php
+++ b/app/Libraries/ActivityPub/Activities/FollowActivity.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Activity objects are specializations of the base Object type that provide information about actions that have either
  * already occurred, are in the process of occurring, or may occur in the future.
diff --git a/app/Libraries/ActivityPub/Activities/LikeActivity.php b/app/Libraries/ActivityPub/Activities/LikeActivity.php
index bda97846a38303b305a445203dafa10af38e9291..ce5634294a3f5438b4b9153d31040f03f53c1d60 100644
--- a/app/Libraries/ActivityPub/Activities/LikeActivity.php
+++ b/app/Libraries/ActivityPub/Activities/LikeActivity.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Activity objects are specializations of the base Object type that provide information about actions that have either
  * already occurred, are in the process of occurring, or may occur in the future.
diff --git a/app/Libraries/ActivityPub/Activities/UndoActivity.php b/app/Libraries/ActivityPub/Activities/UndoActivity.php
index 234d141f474bc3d11ef4d2f2f2ebdbca11c2b4b5..222b164ba00b8c4bfeeb47ec2eff2ae6b091b9a4 100644
--- a/app/Libraries/ActivityPub/Activities/UndoActivity.php
+++ b/app/Libraries/ActivityPub/Activities/UndoActivity.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Activity objects are specializations of the base Object type that provide information about actions that have either
  * already occurred, are in the process of occurring, or may occur in the future.
diff --git a/app/Libraries/ActivityPub/ActivityRequest.php b/app/Libraries/ActivityPub/ActivityRequest.php
index e59a361b3ec3803f2c6b195b478c5031e0745501..729c03e6f43a0e200751708ab8be9d6ec073d548 100644
--- a/app/Libraries/ActivityPub/ActivityRequest.php
+++ b/app/Libraries/ActivityPub/ActivityRequest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -22,7 +24,7 @@ class ActivityRequest
 
     protected URI $uri;
 
-    protected ?Activity $activity;
+    protected ?Activity $activity = null;
 
     /**
      * @var array<string, string[]>
@@ -49,12 +51,12 @@ class ActivityRequest
     public function post(): void
     {
         // send Message to Fediverse instance
-        $this->request->post($this->uri, $this->options);
+        $this->request->post((string) $this->uri, $this->options);
     }
 
     public function get(): ResponseInterface
     {
-        return $this->request->get($this->uri, $this->options);
+        return $this->request->get((string) $this->uri, $this->options);
     }
 
     public function getDomain(): string
diff --git a/app/Libraries/ActivityPub/Config/ActivityPub.php b/app/Libraries/ActivityPub/Config/ActivityPub.php
index 45f63fb6af8461c7edc28e50ff1cec14a48845dd..28e38bcfbb12f42dc2144f1c958cce4d6c8e1aab 100644
--- a/app/Libraries/ActivityPub/Config/ActivityPub.php
+++ b/app/Libraries/ActivityPub/Config/ActivityPub.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Config/Routes.php b/app/Libraries/ActivityPub/Config/Routes.php
index 8856e08e2ba7f3d73306b82c5a161dbe17980b81..fede909495aba22948a2209d6a766341fb9ef53b 100644
--- a/app/Libraries/ActivityPub/Config/Routes.php
+++ b/app/Libraries/ActivityPub/Config/Routes.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Controllers/ActorController.php b/app/Libraries/ActivityPub/Controllers/ActorController.php
index 88b4dbd62aaa28f4cbe87f03373d7b4c3c3615a3..7e68c63516bddd696c9d518f00967fba05d4ce67 100644
--- a/app/Libraries/ActivityPub/Controllers/ActorController.php
+++ b/app/Libraries/ActivityPub/Controllers/ActorController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -9,10 +11,10 @@
 namespace ActivityPub\Controllers;
 
 use ActivityPub\Config\ActivityPub;
+use ActivityPub\Entities\Actor;
 use ActivityPub\Entities\Note;
 use ActivityPub\Objects\OrderedCollectionObject;
 use ActivityPub\Objects\OrderedCollectionPage;
-use App\Entities\Actor;
 use CodeIgniter\Controller;
 use CodeIgniter\Exceptions\PageNotFoundException;
 use CodeIgniter\HTTP\RedirectResponse;
@@ -93,26 +95,34 @@ class ActorController extends Controller
                         return $this->response->setStatusCode(501)
                             ->setJSON([]);
                     }
+
                     $replyToNote = model('NoteModel')
-                        ->getNoteByUri($payload->object->inReplyTo,);
-                    // TODO: strip content from html to retrieve message
-                    // remove all html tags and reconstruct message with mentions?
-                    extract_text_from_html($payload->object->content);
-                    $reply = new Note([
-                        'uri' => $payload->object->id,
-                        'actor_id' => $payloadActor->id,
-                        'in_reply_to_id' => $replyToNote->id,
-                        'message' => $payload->object->content,
-                        'published_at' => Time::parse($payload->object->published,),
-                    ]);
-                    $noteId = model('NoteModel')
-                        ->addReply($reply, true, false);
-                    model('ActivityModel')
-                        ->update($activityId, [
-                            'note_id' => service('uuid')
-                                ->fromBytes($noteId)
-                                ->getString(),
+                        ->getNoteByUri($payload->object->inReplyTo);
+
+                    $reply = null;
+                    if ($replyToNote !== null) {
+                        // TODO: strip content from html to retrieve message
+                        // remove all html tags and reconstruct message with mentions?
+                        extract_text_from_html($payload->object->content);
+                        $reply = new Note([
+                            'uri' => $payload->object->id,
+                            'actor_id' => $payloadActor->id,
+                            'in_reply_to_id' => $replyToNote->id,
+                            'message' => $payload->object->content,
+                            'published_at' => Time::parse($payload->object->published,),
                         ]);
+                    }
+
+                    if ($reply !== null) {
+                        $noteId = model('NoteModel')
+                            ->addReply($reply, true, false);
+
+                        model('ActivityModel')
+                            ->update($activityId, [
+                                'note_id' => $noteId,
+                            ]);
+                    }
+
                     return $this->response->setStatusCode(200)
                         ->setJSON([]);
                 }
@@ -121,17 +131,19 @@ class ActorController extends Controller
                     ->setJSON([]);
             case 'Delete':
                 $noteToDelete = model('NoteModel')
-                    ->getNoteByUri($payload->object->id,);
+                    ->getNoteByUri($payload->object->id);
 
-                model('NoteModel')
-                    ->removeNote($noteToDelete, false);
+                if ($noteToDelete !== null) {
+                    model('NoteModel')
+                        ->removeNote($noteToDelete, false);
+                }
 
                 return $this->response->setStatusCode(200)
                     ->setJSON([]);
             case 'Follow':
                 // add to followers table
                 model('FollowModel')
-                    ->addFollower($payloadActor, $this->actor, false,);
+                    ->addFollower($payloadActor, $this->actor, false);
 
                 // Automatically accept follow by returning accept activity
                 accept_follow($this->actor, $payloadActor, $payload->id);
@@ -145,14 +157,16 @@ class ActorController extends Controller
                 $note = model('NoteModel')
                     ->getNoteByUri($payload->object);
 
-                // Like side-effect
-                model('FavouriteModel')
-                    ->addFavourite($payloadActor, $note, false,);
+                if ($note !== null) {
+                    // Like side-effect
+                    model('FavouriteModel')
+                        ->addFavourite($payloadActor, $note, false);
 
-                model('ActivityModel')
-                    ->update($activityId, [
-                        'note_id' => $note->id,
-                    ]);
+                    model('ActivityModel')
+                        ->update($activityId, [
+                            'note_id' => $note->id,
+                        ]);
+                }
 
                 return $this->response->setStatusCode(200)
                     ->setJSON([]);
@@ -160,13 +174,15 @@ class ActorController extends Controller
                 $note = model('NoteModel')
                     ->getNoteByUri($payload->object);
 
-                model('ActivityModel')
-                    ->update($activityId, [
-                        'note_id' => $note->id,
-                    ]);
+                if ($note !== null) {
+                    model('ActivityModel')
+                        ->update($activityId, [
+                            'note_id' => $note->id,
+                        ]);
 
-                model('NoteModel')
-                    ->reblog($payloadActor, $note, false);
+                    model('NoteModel')
+                        ->reblog($payloadActor, $note, false);
+                }
 
                 return $this->response->setStatusCode(200)
                     ->setJSON([]);
@@ -177,46 +193,53 @@ class ActorController extends Controller
                     case 'Follow':
                         // revert side-effect by removing follow from database
                         model('FollowModel')
-                            ->removeFollower($payloadActor, $this->actor, false,);
+                            ->removeFollower($payloadActor, $this->actor, false);
 
                         // TODO: undo has been accepted! (202 - Accepted)
                         return $this->response->setStatusCode(202)
                             ->setJSON([]);
                     case 'Like':
                         $note = model('NoteModel')
-                            ->getNoteByUri($payload->object->object,);
+                            ->getNoteByUri($payload->object->object);
 
-                        // revert side-effect by removing favourite from database
-                        model('FavouriteModel')
-                            ->removeFavourite($payloadActor, $note, false,);
+                        if ($note !== null) {
+                            // revert side-effect by removing favourite from database
+                            model('FavouriteModel')
+                                ->removeFavourite($payloadActor, $note, false);
 
-                        model('ActivityModel')
-                            ->update($activityId, [
-                                'note_id' => $note->id,
-                            ]);
+                            model('ActivityModel')
+                                ->update($activityId, [
+                                    'note_id' => $note->id,
+                                ]);
+                        }
 
                         return $this->response->setStatusCode(200)
                             ->setJSON([]);
                     case 'Announce':
                         $note = model('NoteModel')
-                            ->getNoteByUri($payload->object->object,);
-
-                        $reblogNote = model('NoteModel')
-                            ->where([
-                                'actor_id' => $payloadActor->id,
-                                'reblog_of_id' => service('uuid')
-                                    ->fromString($note->id)
-                                    ->getBytes(),
-                            ])
-                            ->first();
-
-                        model('NoteModel')
-                            ->undoReblog($reblogNote, false);
-
-                        model('ActivityModel')
-                            ->update($activityId, [
-                                'note_id' => $note->id,
-                            ]);
+                            ->getNoteByUri($payload->object->object);
+
+                        $reblogNote = null;
+                        if ($note !== null) {
+                            $reblogNote = model('NoteModel')
+                                ->where([
+                                    'actor_id' => $payloadActor->id,
+                                    'reblog_of_id' => service('uuid')
+                                        ->fromString($note->id)
+                                        ->getBytes(),
+                                ])
+                                ->first();
+                        }
+
+                        if ($reblogNote !== null) {
+                            model('NoteModel')
+                                ->undoReblog($reblogNote, false);
+
+                            model('ActivityModel')
+                                ->update($activityId, [
+                                    'note_id' => $note->id,
+                                ]);
+                        }
 
                         return $this->response->setStatusCode(200)
                             ->setJSON([]);
@@ -251,7 +274,7 @@ class ActorController extends Controller
             $pager = $actorActivity->pager;
             $collection = new OrderedCollectionObject(null, $pager);
         } else {
-            $paginatedActivity = $actorActivity->paginate(12, 'default', $pageNumber,);
+            $paginatedActivity = $actorActivity->paginate(12, 'default', $pageNumber);
             $pager = $actorActivity->pager;
             $orderedItems = [];
             foreach ($paginatedActivity as $activity) {
@@ -283,14 +306,14 @@ class ActorController extends Controller
             $pager = $followers->pager;
             $followersCollection = new OrderedCollectionObject(null, $pager);
         } else {
-            $paginatedFollowers = $followers->paginate(12, 'default', $pageNumber,);
+            $paginatedFollowers = $followers->paginate(12, 'default', $pageNumber);
             $pager = $followers->pager;
 
             $orderedItems = [];
             foreach ($paginatedFollowers as $follower) {
                 $orderedItems[] = $follower->uri;
             }
-            $followersCollection = new OrderedCollectionPage($pager, $orderedItems,);
+            $followersCollection = new OrderedCollectionPage($pager, $orderedItems);
         }
 
         return $this->response
diff --git a/app/Libraries/ActivityPub/Controllers/BlockController.php b/app/Libraries/ActivityPub/Controllers/BlockController.php
index c3006993d47c08dfe0520f2f55d1667cf6c38d4b..9c0fcafda1ce7e05caea1fe5757e53757227f918 100644
--- a/app/Libraries/ActivityPub/Controllers/BlockController.php
+++ b/app/Libraries/ActivityPub/Controllers/BlockController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -64,7 +66,7 @@ class BlockController extends Controller
         }
 
         model('BlockedDomainModel')
-            ->blockDomain($this->request->getPost('domain'),);
+            ->blockDomain($this->request->getPost('domain'));
 
         return redirect()->back();
     }
@@ -102,7 +104,7 @@ class BlockController extends Controller
         }
 
         model('BlockedDomainModel')
-            ->unblockDomain($this->request->getPost('domain'),);
+            ->unblockDomain($this->request->getPost('domain'));
 
         return redirect()->back();
     }
diff --git a/app/Libraries/ActivityPub/Controllers/NoteController.php b/app/Libraries/ActivityPub/Controllers/NoteController.php
index c5e26fa536b2b9af617df64fb45a10c4c286026d..017d709c0407d40dd00f7ddfbfcf82d2805d5fd9 100644
--- a/app/Libraries/ActivityPub/Controllers/NoteController.php
+++ b/app/Libraries/ActivityPub/Controllers/NoteController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -15,6 +17,7 @@ use ActivityPub\Objects\OrderedCollectionPage;
 use CodeIgniter\Controller;
 use CodeIgniter\Exceptions\PageNotFoundException;
 use CodeIgniter\HTTP\RedirectResponse;
+use CodeIgniter\HTTP\Response;
 use CodeIgniter\HTTP\ResponseInterface;
 use CodeIgniter\I18n\Time;
 
@@ -44,7 +47,10 @@ class NoteController extends Controller
         return $this->{$method}(...$params);
     }
 
-    public function index(): RedirectResponse
+    /**
+     * @noRector ReturnTypeDeclarationRector
+     */
+    public function index(): Response
     {
         $noteObjectClass = $this->config->noteObject;
         $noteObject = new $noteObjectClass($this->note);
@@ -54,7 +60,10 @@ class NoteController extends Controller
             ->setBody($noteObject->toJSON());
     }
 
-    public function replies(): RedirectResponse
+    /**
+     * @noRector ReturnTypeDeclarationRector
+     */
+    public function replies(): Response
     {
         /**
          * get note replies
@@ -71,7 +80,7 @@ class NoteController extends Controller
             $pager = $noteReplies->pager;
             $collection = new OrderedCollectionObject(null, $pager);
         } else {
-            $paginatedReplies = $noteReplies->paginate(12, 'default', $pageNumber,);
+            $paginatedReplies = $noteReplies->paginate(12, 'default', $pageNumber);
             $pager = $noteReplies->pager;
 
             $orderedItems = [];
@@ -138,7 +147,7 @@ class NoteController extends Controller
         }
 
         $actor = model('ActorModel')
-            ->getActorById($this->request->getPost('actor_id'),);
+            ->getActorById($this->request->getPost('actor_id'));
 
         model('FavouriteModel')
             ->toggleFavourite($actor, $this->note->id);
@@ -160,7 +169,7 @@ class NoteController extends Controller
         }
 
         $actor = model('ActorModel')
-            ->getActorById($this->request->getPost('actor_id'),);
+            ->getActorById($this->request->getPost('actor_id'));
 
         model('NoteModel')
             ->toggleReblog($actor, $this->note);
diff --git a/app/Libraries/ActivityPub/Controllers/SchedulerController.php b/app/Libraries/ActivityPub/Controllers/SchedulerController.php
index 4ed00bb4fb1c5b4a33419dbc4d6eb7e0decba8e3..22abde21ac974a975f99c47ce074fc0bda9dcbca 100644
--- a/app/Libraries/ActivityPub/Controllers/SchedulerController.php
+++ b/app/Libraries/ActivityPub/Controllers/SchedulerController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Controllers/WebFingerController.php b/app/Libraries/ActivityPub/Controllers/WebFingerController.php
index bbdf39558262e14273633cdbdd357600a3a8b01b..7e6adab0463d504bb7e8d8008596dc2179052260 100644
--- a/app/Libraries/ActivityPub/Controllers/WebFingerController.php
+++ b/app/Libraries/ActivityPub/Controllers/WebFingerController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Core/AbstractObject.php b/app/Libraries/ActivityPub/Core/AbstractObject.php
index ca1edd1f9b164d60cd198f3ed541fb75e1daddc4..97e761ecbd7e042109c0a91c89436e382f1baab0 100644
--- a/app/Libraries/ActivityPub/Core/AbstractObject.php
+++ b/app/Libraries/ActivityPub/Core/AbstractObject.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * This class defines the Object which is the primary base type for the Activity Streams vocabulary.
  *
diff --git a/app/Libraries/ActivityPub/Core/Activity.php b/app/Libraries/ActivityPub/Core/Activity.php
index 42c148731d089a310f57aed8a14c4e878273b6f7..4bc5de4adb71614ec1805195f50b1e930dcf0796 100644
--- a/app/Libraries/ActivityPub/Core/Activity.php
+++ b/app/Libraries/ActivityPub/Core/Activity.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Activity objects are specializations of the base Object type that provide information about actions that have either
  * already occurred, are in the process of occurring, or may occur in the future.
diff --git a/app/Libraries/ActivityPub/Core/ObjectType.php b/app/Libraries/ActivityPub/Core/ObjectType.php
index 2d873400601f833de4ea1d57c0896c16699c1c04..dbe77da2dfa698e4818b76b848476112f6d72142 100644
--- a/app/Libraries/ActivityPub/Core/ObjectType.php
+++ b/app/Libraries/ActivityPub/Core/ObjectType.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * This class defines the Object which is the primary base type for the Activity Streams vocabulary.
  *
diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php
index afa4a8b1f98106369b6ac509ef6a57f8aad6d254..23183a0d2c6c7234521eecaa870c1f87f6783b2f 100644
--- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php
+++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddActors Creates activitypub_actors table in database
  *
diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php
index 044bcbc76637b7e1cb1a08ba7d862bdf3dcf2d26..8ef29e060b6a724fd141e3de2878456f5d5c5e4f 100644
--- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php
+++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddNotes Creates activitypub_notes table in database
  *
@@ -76,9 +78,9 @@ class AddNotes extends Migration
         $this->forge->addUniqueKey('uri');
         // FIXME: an actor must reblog a note only once
         // $this->forge->addUniqueKey(['actor_id', 'reblog_of_id']);
-        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('in_reply_to_id', 'activitypub_notes', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('reblog_of_id', 'activitypub_notes', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('in_reply_to_id', 'activitypub_notes', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('reblog_of_id', 'activitypub_notes', 'id', '', 'CASCADE');
         $this->forge->createTable('activitypub_notes');
     }
 
diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php
index c16ff3dd0644765ba221da78687bdf5bcb542ebc..a20bafb53cacd94805b9ef2dd8aa52833e6961d5 100644
--- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php
+++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddActivities Creates activitypub_activities table in database
  *
@@ -58,9 +60,9 @@ class AddActivities extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey('id');
-        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('target_actor_id', 'activitypub_actors', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('target_actor_id', 'activitypub_actors', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE');
         $this->forge->createTable('activitypub_activities');
     }
 
diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php
index a1cf21a77bf0fe11cda4f7f7f6f324b98a8871dd..d3ff03a96f911d6baf87e3cacd245732f5700742 100644
--- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php
+++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddFavourites Creates activitypub_favourites table in database
  *
@@ -26,10 +28,10 @@ class AddFavourites extends Migration
                 'constraint' => 16,
             ],
         ]);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addPrimaryKey(['actor_id', 'note_id']);
-        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE');
         $this->forge->createTable('activitypub_favourites');
     }
 
diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_follows.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_follows.php
index 83e72f7efe925ea08783e1b322db30c43a803f93..0d7550d07fffdf6f872256bce91a503691e8c74f 100644
--- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_follows.php
+++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_follows.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddFollowers Creates activitypub_followers table in database
  *
@@ -28,10 +30,10 @@ class AddFollowers extends Migration
                 'comment' => 'Actor that is followed',
             ],
         ]);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addPrimaryKey(['actor_id', 'target_actor_id']);
-        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('target_actor_id', 'activitypub_actors', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('target_actor_id', 'activitypub_actors', 'id', '', 'CASCADE');
         $this->forge->createTable('activitypub_follows');
     }
 
diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_preview_cards.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_preview_cards.php
index b9d102269afa43e092e7fbad2f5fee338b091a75..0eeb77fe88f3a5124880967a9e49fd25c8a65e1b 100644
--- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_preview_cards.php
+++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_preview_cards.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddPreviewCards Creates activitypub_preview_cards table in database
  *
diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php
index 8baed0f13289bf72e8b9adf5ce9a9bf1414bb381..4c3829eb3d781bd94dd4b7579e246b0a30371681 100644
--- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php
+++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddNotePreviewCards Creates activitypub_notes_preview_cards table in database
  *
@@ -28,8 +30,8 @@ class AddNotesPreviewCards extends Migration
         ]);
 
         $this->forge->addPrimaryKey(['note_id', 'preview_card_id']);
-        $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE',);
-        $this->forge->addForeignKey('preview_card_id', 'activitypub_preview_cards', 'id', '', 'CASCADE',);
+        $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE');
+        $this->forge->addForeignKey('preview_card_id', 'activitypub_preview_cards', 'id', '', 'CASCADE');
         $this->forge->createTable('activitypub_notes_preview_cards');
     }
 
diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-120000_add_blocked_domains.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-120000_add_blocked_domains.php
index d4324ccc538dbe47226763797d3656f6668677d8..b7b0b49a20a10110ec79bde8b81c388d918216f9 100644
--- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-120000_add_blocked_domains.php
+++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-120000_add_blocked_domains.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddBlockedDomains Creates activitypub_blocked_domains table in database
  *
diff --git a/app/Libraries/ActivityPub/Entities/Activity.php b/app/Libraries/ActivityPub/Entities/Activity.php
index 5d4ab368acd8be13df9da926fdd48777d8fe9ce8..967e48a595d1a3bd005a6c663fa35364777d2178 100644
--- a/app/Libraries/ActivityPub/Entities/Activity.php
+++ b/app/Libraries/ActivityPub/Entities/Activity.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -27,11 +29,11 @@ use RuntimeException;
  */
 class Activity extends UuidEntity
 {
-    protected ?Actor $actor;
+    protected ?Actor $actor = null;
 
-    protected ?Actor $target_actor;
+    protected ?Actor $target_actor = null;
 
-    protected ?Note $note;
+    protected ?Note $note = null;
 
     /**
      * @var string[]
@@ -59,7 +61,7 @@ class Activity extends UuidEntity
     public function getActor(): Actor
     {
         if ($this->actor_id === null) {
-            throw new RuntimeException('Activity must have an actor_id before getting the actor.',);
+            throw new RuntimeException('Activity must have an actor_id before getting the actor.');
         }
 
         if ($this->actor === null) {
@@ -73,12 +75,12 @@ class Activity extends UuidEntity
     public function getTargetActor(): Actor
     {
         if ($this->target_actor_id === null) {
-            throw new RuntimeException('Activity must have a target_actor_id before getting the target actor.',);
+            throw new RuntimeException('Activity must have a target_actor_id before getting the target actor.');
         }
 
         if ($this->target_actor === null) {
             $this->target_actor = model('ActorModel')
-                ->getActorById($this->target_actor_id,);
+                ->getActorById($this->target_actor_id);
         }
 
         return $this->target_actor;
@@ -87,7 +89,7 @@ class Activity extends UuidEntity
     public function getNote(): Note
     {
         if ($this->note_id === null) {
-            throw new RuntimeException('Activity must have a note_id before getting note.',);
+            throw new RuntimeException('Activity must have a note_id before getting note.');
         }
 
         if ($this->note === null) {
diff --git a/app/Libraries/ActivityPub/Entities/Actor.php b/app/Libraries/ActivityPub/Entities/Actor.php
index 300cd77c1f513be963bc7fcf52a5c8ba67128b31..d55b21136c4ee8bcd4ed6c5dbb696b8661a5d550 100644
--- a/app/Libraries/ActivityPub/Entities/Actor.php
+++ b/app/Libraries/ActivityPub/Entities/Actor.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -95,12 +97,12 @@ class Actor extends Entity
     public function getFollowers(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Actor must be created before getting followers.',);
+            throw new RuntimeException('Actor must be created before getting followers.');
         }
 
         if ($this->followers === null) {
             $this->followers = (array) model('ActorModel')
-                ->getFollowers($this->id,);
+                ->getFollowers($this->id);
         }
 
         return $this->followers;
diff --git a/app/Libraries/ActivityPub/Entities/BlockedDomain.php b/app/Libraries/ActivityPub/Entities/BlockedDomain.php
index 9d0009a538d0bfddada8d619df9a93e476d19360..ca49556904f10f8d22873a6084e77d391b663a95 100644
--- a/app/Libraries/ActivityPub/Entities/BlockedDomain.php
+++ b/app/Libraries/ActivityPub/Entities/BlockedDomain.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Entities/Favourite.php b/app/Libraries/ActivityPub/Entities/Favourite.php
index 6bc1a52e67291c8d6ce2ccf44958a2d48eeed068..4ba92256feab2f50b2a797423ef20c40fc8805d5 100644
--- a/app/Libraries/ActivityPub/Entities/Favourite.php
+++ b/app/Libraries/ActivityPub/Entities/Favourite.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Entities/Follow.php b/app/Libraries/ActivityPub/Entities/Follow.php
index cb5ff3647421e648b397613f796c83d02d858a2f..5eb57258e7f13fa5fc48f9351ebbd95e643e36fb 100644
--- a/app/Libraries/ActivityPub/Entities/Follow.php
+++ b/app/Libraries/ActivityPub/Entities/Follow.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Entities/Note.php b/app/Libraries/ActivityPub/Entities/Note.php
index c0a0c9e51cddb0044a05025c02e15a4a65c28034..2491c7021c2a233f5f24b14171b29b3b61804060 100644
--- a/app/Libraries/ActivityPub/Entities/Note.php
+++ b/app/Libraries/ActivityPub/Entities/Note.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -16,7 +18,7 @@ use RuntimeException;
  * @property string $id
  * @property string $uri
  * @property int $actor_id
- * @property Actor $actor
+ * @property Actor|null $actor
  * @property string|null $in_reply_to_id
  * @property bool $is_reply
  * @property Note|null $reply_to_note
@@ -95,10 +97,10 @@ class Note extends UuidEntity
     /**
      * Returns the note's actor
      */
-    public function getActor(): Actor
+    public function getActor(): ?Actor
     {
         if ($this->actor_id === null) {
-            throw new RuntimeException('Note must have an actor_id before getting actor.',);
+            throw new RuntimeException('Note must have an actor_id before getting actor.');
         }
 
         if ($this->actor === null) {
@@ -112,12 +114,12 @@ class Note extends UuidEntity
     public function getPreviewCard(): ?PreviewCard
     {
         if ($this->id === null) {
-            throw new RuntimeException('Note must be created before getting preview_card.',);
+            throw new RuntimeException('Note must be created before getting preview_card.');
         }
 
         if ($this->preview_card === null) {
             $this->preview_card = model('PreviewCardModel')
-                ->getNotePreviewCard($this->id,);
+                ->getNotePreviewCard($this->id);
         }
 
         return $this->preview_card;
@@ -130,9 +132,7 @@ class Note extends UuidEntity
 
     public function getIsReply(): bool
     {
-        $this->is_reply = $this->in_reply_to_id !== null;
-
-        return $this->is_reply;
+        return $this->in_reply_to_id && ($this->getReplyToNote() !== null);
     }
 
     /**
@@ -141,12 +141,12 @@ class Note extends UuidEntity
     public function getReplies(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Note must be created before getting replies.',);
+            throw new RuntimeException('Note must be created before getting replies.');
         }
 
         if ($this->replies === null) {
             $this->replies = (array) model('NoteModel')
-                ->getNoteReplies($this->id,);
+                ->getNoteReplies($this->id);
         }
 
         return $this->replies;
@@ -157,7 +157,7 @@ class Note extends UuidEntity
         return $this->getReplies() !== null;
     }
 
-    public function getReplyToNote(): self
+    public function getReplyToNote(): ?self
     {
         if ($this->in_reply_to_id === null) {
             throw new RuntimeException('Note is not a reply.');
@@ -165,7 +165,7 @@ class Note extends UuidEntity
 
         if ($this->reply_to_note === null) {
             $this->reply_to_note = model('NoteModel')
-                ->getNoteById($this->in_reply_to_id,);
+                ->getNoteById($this->in_reply_to_id);
         }
 
         return $this->reply_to_note;
@@ -177,12 +177,12 @@ class Note extends UuidEntity
     public function getReblogs(): array
     {
         if ($this->id === null) {
-            throw new RuntimeException('Note must be created before getting reblogs.',);
+            throw new RuntimeException('Note must be created before getting reblogs.');
         }
 
         if ($this->reblogs === null) {
             $this->reblogs = (array) model('NoteModel')
-                ->getNoteReblogs($this->id,);
+                ->getNoteReblogs($this->id);
         }
 
         return $this->reblogs;
@@ -193,7 +193,7 @@ class Note extends UuidEntity
         return $this->reblog_of_id !== null;
     }
 
-    public function getReblogOfNote(): self
+    public function getReblogOfNote(): ?self
     {
         if ($this->reblog_of_id === null) {
             throw new RuntimeException('Note is not a reblog.');
@@ -201,7 +201,7 @@ class Note extends UuidEntity
 
         if ($this->reblog_of_note === null) {
             $this->reblog_of_note = model('NoteModel')
-                ->getNoteById($this->reblog_of_id,);
+                ->getNoteById($this->reblog_of_id);
         }
 
         return $this->reblog_of_note;
@@ -214,7 +214,7 @@ class Note extends UuidEntity
         $messageWithoutTags = strip_tags($message);
 
         $this->attributes['message'] = $messageWithoutTags;
-        $this->attributes['message_html'] = str_replace("\n", '<br />', linkify($messageWithoutTags),);
+        $this->attributes['message_html'] = str_replace("\n", '<br />', linkify($messageWithoutTags));
 
         return $this;
     }
diff --git a/app/Libraries/ActivityPub/Entities/PreviewCard.php b/app/Libraries/ActivityPub/Entities/PreviewCard.php
index 35cb197330c5b368d509004c54f2fe20084b1b9a..a2fe1537a11b978a3ce74996c65f6763c2aa1749 100644
--- a/app/Libraries/ActivityPub/Entities/PreviewCard.php
+++ b/app/Libraries/ActivityPub/Entities/PreviewCard.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Filters/ActivityPubFilter.php b/app/Libraries/ActivityPub/Filters/ActivityPubFilter.php
index 3c035704f48c14c05507fb1265031d4a4b1051be..370d6884f100d21bff79885af029fa8036377f9d 100644
--- a/app/Libraries/ActivityPub/Filters/ActivityPubFilter.php
+++ b/app/Libraries/ActivityPub/Filters/ActivityPubFilter.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace ActivityPub\Filters;
 
 use ActivityPub\HttpSignature;
diff --git a/app/Libraries/ActivityPub/Helpers/activitypub_helper.php b/app/Libraries/ActivityPub/Helpers/activitypub_helper.php
index c56f444e4c7e137bfa48a6019092c7203c2a7117..8c3b214b26533424234c042d808c9b693fb5b4d2 100644
--- a/app/Libraries/ActivityPub/Helpers/activitypub_helper.php
+++ b/app/Libraries/ActivityPub/Helpers/activitypub_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -27,10 +29,10 @@ if (! function_exists('get_webfinger_data')) {
         $webfingerUri->setPath('/.well-known/webfinger');
         $webfingerUri->setQuery("resource=acct:{$username}@{$domain}");
 
-        $webfingerRequest = new ActivityRequest($webfingerUri);
+        $webfingerRequest = new ActivityRequest((string) $webfingerUri);
         $webfingerResponse = $webfingerRequest->get();
 
-        return json_decode($webfingerResponse->getBody(), false, 512, JSON_THROW_ON_ERROR,);
+        return json_decode($webfingerResponse->getBody(), false, 512, JSON_THROW_ON_ERROR);
     }
 }
 
@@ -77,14 +79,14 @@ if (! function_exists('accept_follow')) {
             $acceptActivity->toJSON(),
         );
 
-        $acceptActivity->set('id', url_to('activity', $actor->username, $activityId),);
+        $acceptActivity->set('id', url_to('activity', $actor->username, $activityId));
 
         $activityModel->update($activityId, [
             'payload' => $acceptActivity->toJSON(),
         ]);
 
         try {
-            $acceptRequest = new ActivityRequest($targetActor->inbox_url, $acceptActivity->toJSON(),);
+            $acceptRequest = new ActivityRequest($targetActor->inbox_url, $acceptActivity->toJSON());
             $acceptRequest->sign($actor->public_key_id, $actor->private_key);
             $acceptRequest->post();
         } catch (Exception) {
@@ -103,12 +105,12 @@ if (! function_exists('send_activity_to_followers')) {
     {
         foreach ($actor->followers as $follower) {
             try {
-                $acceptRequest = new ActivityRequest($follower->inbox_url, $activityPayload,);
-                $acceptRequest->sign($actor->public_key_id, $actor->private_key,);
+                $acceptRequest = new ActivityRequest($follower->inbox_url, $activityPayload);
+                $acceptRequest->sign($actor->public_key_id, $actor->private_key);
                 $acceptRequest->post();
             } catch (Exception $exception) {
                 // log error
-                log_message('critical', $exception);
+                log_message('critical', $exception->getMessage());
             }
         }
     }
@@ -122,7 +124,7 @@ if (! function_exists('extract_urls_from_message')) {
      */
     function extract_urls_from_message(string $message): array
     {
-        preg_match_all('~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i', $message, $match,);
+        preg_match_all('~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i', $message, $match);
 
         return $match[0];
     }
@@ -236,7 +238,7 @@ if (! function_exists('get_or_create_actor')) {
 
         // get actorUri with webfinger request
         $webfingerData = get_webfinger_data($username, $domain);
-        $actorUriKey = array_search('self', array_column($webfingerData->links, 'rel'), true,);
+        $actorUriKey = array_search('self', array_column($webfingerData->links, 'rel'), true);
 
         return create_actor_from_uri($webfingerData->links[$actorUriKey]->href);
     }
@@ -250,7 +252,7 @@ if (! function_exists('create_actor_from_uri')) {
     {
         $activityRequest = new ActivityRequest($actorUri);
         $actorResponse = $activityRequest->get();
-        $actorPayload = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR,);
+        $actorPayload = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR);
 
         $newActor = new Actor();
         $newActor->uri = $actorUri;
@@ -331,7 +333,7 @@ if (! function_exists('linkify')) {
 
                             helper('text');
 
-                            $link = preg_replace('~^www\.(.+\.)~i', '$1', $link,);
+                            $link = preg_replace('~^www\.(.+\.)~i', '$1', $link);
 
                             return '<' .
                                 array_push(
@@ -374,7 +376,7 @@ if (! function_exists('linkify')) {
                                 }
 
                                 try {
-                                    $actor = get_or_create_actor($match['username'], $match['domain'],);
+                                    $actor = get_or_create_actor($match['username'], $match['domain']);
                                     return '<' .
                                         array_push(
                                             $links,
diff --git a/app/Libraries/ActivityPub/HttpSignature.php b/app/Libraries/ActivityPub/HttpSignature.php
index aa6af720d3a2bc372fad15e0d7482ef1219f2833..046a1cf62d1bc710b4d0f944694896110ff09e71 100644
--- a/app/Libraries/ActivityPub/HttpSignature.php
+++ b/app/Libraries/ActivityPub/HttpSignature.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * This file is based on the HttpSignature file from the ActivityPhp package. It is adapted to work with CodeIgniter4
  *
@@ -37,10 +39,7 @@ class HttpSignature
         signature="(?P<signature>[\w+\/]+={0,2})"
     /x';
 
-    /**
-     * @var IncomingRequest
-     */
-    protected ?IncomingRequest $request;
+    protected ?IncomingRequest $request = null;
 
     public function __construct(IncomingRequest $request = null)
     {
@@ -64,7 +63,7 @@ class HttpSignature
 
         // verify that request has been made within the last hour
         $currentTime = Time::now();
-        $requestTime = Time::createFromFormat('D, d M Y H:i:s T', $dateHeader->getValue(),);
+        $requestTime = Time::createFromFormat('D, d M Y H:i:s T', $dateHeader->getValue());
 
         $diff = $requestTime->difference($currentTime);
         if ($diff->getSeconds() > 3600) {
@@ -101,7 +100,7 @@ class HttpSignature
         // Fetch the public key linked from keyId
         $actorRequest = new ActivityRequest($keyId);
         $actorResponse = $actorRequest->get();
-        $actor = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR,);
+        $actor = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR);
 
         $publicKeyPem = $actor->publicKey->publicKeyPem;
 
diff --git a/app/Libraries/ActivityPub/Models/ActivityModel.php b/app/Libraries/ActivityPub/Models/ActivityModel.php
index 92654d7af8b1c48193de3d8436ae4be53f4b822f..3b00d9dbf525add2e8446ea26431b5be579c2be5 100644
--- a/app/Libraries/ActivityPub/Models/ActivityModel.php
+++ b/app/Libraries/ActivityPub/Models/ActivityModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Models/ActorModel.php b/app/Libraries/ActivityPub/Models/ActorModel.php
index 789714f519df2c9ed879c0402276350b03a08a73..ff5b7e3a05d134bc207a2289db5c7f4b3d8a81fb 100644
--- a/app/Libraries/ActivityPub/Models/ActorModel.php
+++ b/app/Libraries/ActivityPub/Models/ActorModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -58,7 +60,7 @@ class ActorModel extends Model
      */
     protected $useTimestamps = true;
 
-    public function getActorById(int $id): Actor
+    public function getActorById(int $id): ?Actor
     {
         $cacheName = config('ActivityPub')
             ->cachePrefix . "actor#{$id}";
@@ -179,11 +181,11 @@ class ActorModel extends Model
         cache()
             ->deleteMatching($prefix . '*replies');
 
-        Events::trigger('on_block_actor', $actorId);
-
         $this->update($actorId, [
             'is_blocked' => 1,
         ]);
+
+        Events::trigger('on_block_actor', $actorId);
     }
 
     public function unblockActor(int $actorId): void
@@ -195,10 +197,25 @@ class ActorModel extends Model
         cache()
             ->deleteMatching($prefix . '*replies');
 
-        Events::trigger('on_unblock_actor', $actorId);
-
         $this->update($actorId, [
             'is_blocked' => 0,
         ]);
+
+        Events::trigger('on_unblock_actor', $actorId);
+    }
+
+    public function clearCache(Actor $actor): void
+    {
+        $cachePrefix = config('ActivityPub')
+            ->cachePrefix;
+        $hashedActorUri = md5($actor->uri);
+        $cacheDomain = str_replace(':', '', $actor->domain);
+
+        cache()
+            ->delete($cachePrefix . "actor-{$actor->username}-{$cacheDomain}");
+        cache()
+            ->delete($cachePrefix . "actor-{$hashedActorUri}");
+        cache()
+            ->deleteMatching($cachePrefix . "actor#{$actor->id}*");
     }
 }
diff --git a/app/Libraries/ActivityPub/Models/BlockedDomainModel.php b/app/Libraries/ActivityPub/Models/BlockedDomainModel.php
index 910af9d0ea0f5716771f54c3712d8d8ca672c115..ff9bee5e361d46ff9bc45a2c6102b484a9907fc3 100644
--- a/app/Libraries/ActivityPub/Models/BlockedDomainModel.php
+++ b/app/Libraries/ActivityPub/Models/BlockedDomainModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -95,8 +97,6 @@ class BlockedDomainModel extends Model
         cache()
             ->deleteMatching($prefix . '*replies');
 
-        Events::trigger('on_block_domain', $name);
-
         $this->db->transStart();
 
         // set all actors from the domain as blocked
@@ -109,6 +109,8 @@ class BlockedDomainModel extends Model
             'name' => $name,
         ]);
 
+        Events::trigger('on_block_domain', $name);
+
         $this->db->transComplete();
 
         return $result;
@@ -127,8 +129,6 @@ class BlockedDomainModel extends Model
         cache()
             ->deleteMatching($prefix . '*replies');
 
-        Events::trigger('on_unblock_domain', $name);
-
         $this->db->transStart();
         // unblock all actors from the domain
         model('ActorModel')
@@ -138,6 +138,8 @@ class BlockedDomainModel extends Model
 
         $result = $this->delete($name);
 
+        Events::trigger('on_unblock_domain', $name);
+
         $this->db->transComplete();
 
         return $result;
diff --git a/app/Libraries/ActivityPub/Models/FavouriteModel.php b/app/Libraries/ActivityPub/Models/FavouriteModel.php
index 57ba1b92b1fe1663fa8aad72182ed70eeb0f63f0..84d375713a271124e1f1679b9c9557aa616a5419 100644
--- a/app/Libraries/ActivityPub/Models/FavouriteModel.php
+++ b/app/Libraries/ActivityPub/Models/FavouriteModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -58,24 +60,6 @@ class FavouriteModel extends UuidModel
             ->where('id', service('uuid') ->fromString($note->id) ->getBytes(),)
             ->increment('favourites_count');
 
-        $prefix = config('ActivityPub')
-            ->cachePrefix;
-        $hashedNoteUri = md5($note->uri);
-        cache()
-            ->delete($prefix . "note#{$note->id}");
-        cache()
-            ->delete($prefix . "note-{$hashedNoteUri}");
-        cache()
-            ->delete($prefix . "actor#{$actor->id}_published_notes");
-
-        if ($note->in_reply_to_id) {
-            cache()->delete($prefix . "note#{$note->in_reply_to_id}_replies");
-            cache()
-                ->delete($prefix . "note#{$note->in_reply_to_id}_replies_withBlocked",);
-        }
-
-        Events::trigger('on_note_favourite', $actor, $note);
-
         if ($registerActivity) {
             $likeActivity = new LikeActivity();
             $likeActivity->set('actor', $actor->uri)
@@ -92,7 +76,7 @@ class FavouriteModel extends UuidModel
                     'queued',
                 );
 
-            $likeActivity->set('id', url_to('activity', $actor->username, $activityId),);
+            $likeActivity->set('id', url_to('activity', $actor->username, $activityId));
 
             model('ActivityModel')
                 ->update($activityId, [
@@ -100,6 +84,11 @@ class FavouriteModel extends UuidModel
                 ]);
         }
 
+        Events::trigger('on_note_favourite', $actor, $note);
+
+        model('NoteModel')
+            ->clearCache($note);
+
         $this->db->transComplete();
     }
 
@@ -111,22 +100,6 @@ class FavouriteModel extends UuidModel
             ->where('id', service('uuid') ->fromString($note->id) ->getBytes(),)
             ->decrement('favourites_count');
 
-        $prefix = config('ActivityPub')
-            ->cachePrefix;
-        $hashedNoteUri = md5($note->uri);
-        cache()
-            ->delete($prefix . "note#{$note->id}");
-        cache()
-            ->delete($prefix . "note-{$hashedNoteUri}");
-        cache()
-            ->delete($prefix . "actor#{$actor->id}_published_notes");
-
-        if ($note->in_reply_to_id) {
-            cache()->delete($prefix . "note#{$note->in_reply_to_id}_replies");
-            cache()
-                ->delete($prefix . "note#{$note->in_reply_to_id}_replies_withBlocked",);
-        }
-
         $this->db
             ->table('activitypub_favourites')
             ->where([
@@ -137,8 +110,6 @@ class FavouriteModel extends UuidModel
             ])
             ->delete();
 
-        Events::trigger('on_note_undo_favourite', $actor, $note);
-
         if ($registerActivity) {
             $undoActivity = new UndoActivity();
             // get like activity
@@ -173,7 +144,7 @@ class FavouriteModel extends UuidModel
                     'queued',
                 );
 
-            $undoActivity->set('id', url_to('activity', $actor->username, $activityId),);
+            $undoActivity->set('id', url_to('activity', $actor->username, $activityId));
 
             model('ActivityModel')
                 ->update($activityId, [
@@ -181,6 +152,11 @@ class FavouriteModel extends UuidModel
                 ]);
         }
 
+        Events::trigger('on_note_undo_favourite', $actor, $note);
+
+        model('NoteModel')
+            ->clearCache($note);
+
         $this->db->transComplete();
     }
 
diff --git a/app/Libraries/ActivityPub/Models/FollowModel.php b/app/Libraries/ActivityPub/Models/FollowModel.php
index 047def6466e6635b1548cfa6ebf90081a5a8fa1e..b54069b59ce072fb7c66050b66ed67ee9bafb2ec 100644
--- a/app/Libraries/ActivityPub/Models/FollowModel.php
+++ b/app/Libraries/ActivityPub/Models/FollowModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -13,6 +15,7 @@ use ActivityPub\Activities\UndoActivity;
 use ActivityPub\Entities\Actor;
 use ActivityPub\Entities\Follow;
 use CodeIgniter\Database\Exceptions\DatabaseException;
+use CodeIgniter\Events\Events;
 use CodeIgniter\I18n\Time;
 use CodeIgniter\Model;
 use Exception;
@@ -62,11 +65,6 @@ class FollowModel extends Model
                 ->where('id', $targetActor->id)
                 ->increment('followers_count');
 
-            cache()
-                ->delete(config('ActivityPub') ->cachePrefix . "actor#{$targetActor->id}",);
-            cache()
-                ->delete(config('ActivityPub') ->cachePrefix . "actor#{$targetActor->id}_followers",);
-
             if ($registerActivity) {
                 $followActivity = new FollowActivity();
 
@@ -85,7 +83,7 @@ class FollowModel extends Model
                         'queued',
                     );
 
-                $followActivity->set('id', base_url(route_to('activity', $actor->username, $activityId),),);
+                $followActivity->set('id', base_url(route_to('activity', $actor->username, $activityId),));
 
                 model('ActivityModel')
                     ->update($activityId, [
@@ -93,6 +91,11 @@ class FollowModel extends Model
                     ]);
             }
 
+            Events::trigger('on_follow', $actor, $targetActor);
+
+            model('ActorModel')
+                ->clearCache($targetActor);
+
             $this->db->transComplete();
         } catch (Exception) {
             // follow already exists, do nothing
@@ -119,11 +122,6 @@ class FollowModel extends Model
             ->where('id', $targetActor->id)
             ->decrement('followers_count');
 
-        cache()
-            ->delete(config('ActivityPub') ->cachePrefix . "actor#{$targetActor->id}",);
-        cache()
-            ->delete(config('ActivityPub') ->cachePrefix . "actor#{$targetActor->id}_followers",);
-
         if ($registerActivity) {
             $undoActivity = new UndoActivity();
             // get follow activity from database
@@ -150,7 +148,7 @@ class FollowModel extends Model
                     'queued',
                 );
 
-            $undoActivity->set('id', url_to('activity', $actor->username, $activityId),);
+            $undoActivity->set('id', url_to('activity', $actor->username, $activityId));
 
             model('ActivityModel')
                 ->update($activityId, [
@@ -158,6 +156,11 @@ class FollowModel extends Model
                 ]);
         }
 
+        Events::trigger('on_undo_follow', $actor, $targetActor);
+
+        model('ActorModel')
+            ->clearCache($targetActor);
+
         $this->db->transComplete();
     }
 }
diff --git a/app/Libraries/ActivityPub/Models/NoteModel.php b/app/Libraries/ActivityPub/Models/NoteModel.php
index 8eca3d44f85f7792848c9516900c77b936facc0b..2da2fdc53659837f60db128ccc57f1c09b29c455 100644
--- a/app/Libraries/ActivityPub/Models/NoteModel.php
+++ b/app/Libraries/ActivityPub/Models/NoteModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -138,10 +140,10 @@ class NoteModel extends UuidModel
                 ->orderBy('published_at', 'DESC')
                 ->findAll();
 
-            $secondsToNextUnpublishedNote = $this->getSecondsToNextUnpublishedNote($actorId,);
+            $secondsToNextUnpublishedNote = $this->getSecondsToNextUnpublishedNote($actorId);
 
             cache()
-                ->save($cacheName, $found, $secondsToNextUnpublishedNote ? $secondsToNextUnpublishedNote : DECADE,);
+                ->save($cacheName, $found, $secondsToNextUnpublishedNote ? $secondsToNextUnpublishedNote : DECADE);
         }
 
         return $found;
@@ -273,19 +275,10 @@ class NoteModel extends UuidModel
             ->where('id', $note->actor_id)
             ->increment('notes_count');
 
-        $cachePrefix = config('ActivityPub')
-            ->cachePrefix;
-        cache()
-            ->delete($cachePrefix . "actor#{$note->actor_id}");
-        cache()
-            ->delete($cachePrefix . "actor#{$note->actor_id}_published_notes",);
-
-        Events::trigger('on_note_add', $note);
-
         if ($registerActivity) {
             // set note id and uri to construct NoteObject
             $note->id = $newNoteId;
-            $note->uri = base_url(route_to('note', $note->actor->username, $newNoteId),);
+            $note->uri = base_url(route_to('note', $note->actor->username, $newNoteId));
 
             $createActivity = new CreateActivity();
             $noteObjectClass = config('ActivityPub')
@@ -305,7 +298,7 @@ class NoteModel extends UuidModel
                     'queued',
                 );
 
-            $createActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),),);
+            $createActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),));
 
             model('ActivityModel')
                 ->update($activityId, [
@@ -313,6 +306,10 @@ class NoteModel extends UuidModel
                 ]);
         }
 
+        Events::trigger('on_note_add', $note);
+
+        $this->clearCache($note);
+
         $this->db->transComplete();
 
         return $newNoteId;
@@ -334,7 +331,7 @@ class NoteModel extends UuidModel
 
         // update published date in payload
         $newPayload = $scheduledActivity->payload;
-        $newPayload->object->published = $updatedNote->published_at->format(DATE_W3C,);
+        $newPayload->object->published = $updatedNote->published_at->format(DATE_W3C);
         model('ActivityModel')
             ->update($scheduledActivity->id, [
                 'payload' => json_encode($newPayload, JSON_THROW_ON_ERROR),
@@ -344,14 +341,9 @@ class NoteModel extends UuidModel
         // update note
         $updateResult = $this->update($updatedNote->id, $updatedNote);
 
-        // Clear note cache
-        $prefix = config('ActivityPub')
-            ->cachePrefix;
-        $hashedNoteUri = md5($updatedNote->uri);
-        cache()
-            ->delete($prefix . "note#{$updatedNote->id}");
-        cache()
-            ->delete($prefix . "note-{$hashedNoteUri}");
+        Events::trigger('on_note_edit', $updatedNote);
+
+        $this->clearCache($updatedNote);
 
         $this->db->transComplete();
 
@@ -365,33 +357,16 @@ class NoteModel extends UuidModel
     {
         $this->db->transStart();
 
-        $cachePrefix = config('ActivityPub')
-            ->cachePrefix;
-
         model('ActorModel')
             ->where('id', $note->actor_id)
             ->decrement('notes_count');
-        cache()
-            ->delete($cachePrefix . "actor#{$note->actor_id}");
-        cache()
-            ->delete($cachePrefix . "actor#{$note->actor_id}_published_notes",);
 
-        if ($note->in_reply_to_id) {
+        if ($note->is_reply) {
             // Note to remove is a reply
             model('NoteModel')
                 ->where('id', $this->uuid->fromString($note->in_reply_to_id) ->getBytes(),)
                 ->decrement('replies_count');
 
-            $replyToNote = $note->reply_to_note;
-            cache()
-                ->delete($cachePrefix . "note#{$replyToNote->id}");
-            cache()
-                ->delete($cachePrefix . "note-{$replyToNote->uri}");
-            cache()
-                ->delete($cachePrefix . "note#{$replyToNote->id}_replies");
-            cache()
-                ->delete($cachePrefix . "note#{$replyToNote->id}_replies_withBlocked",);
-
             Events::trigger('on_reply_remove', $note);
         }
 
@@ -405,7 +380,7 @@ class NoteModel extends UuidModel
             $this->removeNote($reply);
         }
 
-        // check that preview card in no longer used elsewhere before deleting it
+        // check that preview card is no longer used elsewhere before deleting it
         if (
             $note->preview_card &&
             $this->db
@@ -413,11 +388,9 @@ class NoteModel extends UuidModel
                 ->where('preview_card_id', $note->preview_card->id)
                 ->countAll() <= 1
         ) {
-            model('PreviewCardModel')->deletePreviewCard($note->preview_card->id, $note->preview_card->url,);
+            model('PreviewCardModel')->deletePreviewCard($note->preview_card->id, $note->preview_card->url);
         }
 
-        Events::trigger('on_note_remove', $note);
-
         if ($registerActivity) {
             $deleteActivity = new DeleteActivity();
             $tombstoneObject = new TombstoneObject();
@@ -437,7 +410,7 @@ class NoteModel extends UuidModel
                     'queued',
                 );
 
-            $deleteActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),),);
+            $deleteActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),));
 
             model('ActivityModel')
                 ->update($activityId, [
@@ -445,24 +418,13 @@ class NoteModel extends UuidModel
                 ]);
         }
 
-        // clear note + replies / reblogs + actor  and its published notes
-        $hashedNoteUri = md5($note->uri);
-        cache()
-            ->delete($cachePrefix . "note#{$note->id}");
-        cache()
-            ->delete($cachePrefix . "note-{$hashedNoteUri}");
-        cache()
-            ->delete($cachePrefix . "note#{$note->id}_replies");
-        cache()
-            ->delete($cachePrefix . "note#{$note->id}_replies_withBlocked");
-        cache()
-            ->delete($cachePrefix . "note#{$note->id}_reblogs");
-        cache()
-            ->delete($cachePrefix . "note#{$note->id}_preview_card");
-
         $result = model('NoteModel', false)
             ->delete($note->id);
 
+        Events::trigger('on_note_remove', $note);
+
+        $this->clearCache($note);
+
         $this->db->transComplete();
 
         return $result;
@@ -485,20 +447,10 @@ class NoteModel extends UuidModel
             ->where('id', $this->uuid->fromString($reply->in_reply_to_id) ->getBytes(),)
             ->increment('replies_count');
 
-        $prefix = config('ActivityPub')
-            ->cachePrefix;
-        $hashedNoteUri = md5($reply->reply_to_note->uri);
-        cache()
-            ->delete($prefix . "note#{$reply->in_reply_to_id}");
-        cache()
-            ->delete($prefix . "note-{$hashedNoteUri}");
-        cache()
-            ->delete($prefix . "note#{$reply->in_reply_to_id}_replies");
-        cache()
-            ->delete($prefix . "note#{$reply->in_reply_to_id}_replies_withBlocked",);
-
         Events::trigger('on_note_reply', $reply);
 
+        $this->clearCache($reply);
+
         $this->db->transComplete();
 
         return $noteId;
@@ -521,27 +473,10 @@ class NoteModel extends UuidModel
             ->where('id', $actor->id)
             ->increment('notes_count');
 
-        $prefix = config('ActivityPub')
-            ->cachePrefix;
-        cache()
-            ->delete($prefix . "actor#{$note->actor_id}");
-        cache()
-            ->delete($prefix . "actor#{$note->actor_id}_published_notes");
-
         model('NoteModel')
             ->where('id', $this->uuid->fromString($note->id)->getBytes())
             ->increment('reblogs_count');
 
-        $hashedNoteUri = md5($note->uri);
-        cache()
-            ->delete($prefix . "note#{$note->id}");
-        cache()
-            ->delete($prefix . "note-{$hashedNoteUri}");
-        cache()
-            ->delete($prefix . "note#{$note->id}_reblogs");
-
-        Events::trigger('on_note_reblog', $actor, $note);
-
         if ($registerActivity) {
             $announceActivity = new AnnounceActivity($reblog);
 
@@ -556,7 +491,7 @@ class NoteModel extends UuidModel
                     'queued',
                 );
 
-            $announceActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),),);
+            $announceActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),));
 
             model('ActivityModel')
                 ->update($activityId, [
@@ -564,6 +499,10 @@ class NoteModel extends UuidModel
                 ]);
         }
 
+        Events::trigger('on_note_reblog', $actor, $note);
+
+        $this->clearCache($note);
+
         $this->db->transComplete();
 
         return $reblogId;
@@ -577,30 +516,10 @@ class NoteModel extends UuidModel
             ->where('id', $reblogNote->actor_id)
             ->decrement('notes_count');
 
-        $cachePrefix = config('ActivityPub')
-            ->cachePrefix;
-        cache()
-            ->delete($cachePrefix . "actor#{$reblogNote->actor_id}");
-        cache()
-            ->delete($cachePrefix . "actor#{$reblogNote->actor_id}_published_notes",);
-
         model('NoteModel')
             ->where('id', $this->uuid->fromString($reblogNote->reblog_of_id) ->getBytes(),)
             ->decrement('reblogs_count');
 
-        $hashedReblogNoteUri = md5($reblogNote->uri);
-        $hashedNoteUri = md5($reblogNote->reblog_of_note->uri);
-        cache()
-            ->delete($cachePrefix . "note#{$reblogNote->id}");
-        cache()
-            ->delete($cachePrefix . "note-{$hashedReblogNoteUri}");
-        cache()
-            ->delete($cachePrefix . "note#{$reblogNote->reblog_of_id}");
-        cache()
-            ->delete($cachePrefix . "note-{$hashedNoteUri}");
-
-        Events::trigger('on_note_undo_reblog', $reblogNote);
-
         if ($registerActivity) {
             $undoActivity = new UndoActivity();
             // get like activity
@@ -649,6 +568,10 @@ class NoteModel extends UuidModel
         $result = model('NoteModel', false)
             ->delete($reblogNote->id);
 
+        Events::trigger('on_note_undo_reblog', $reblogNote);
+
+        $this->clearCache($reblogNote);
+
         $this->db->transComplete();
 
         return $result;
@@ -670,6 +593,29 @@ class NoteModel extends UuidModel
         }
     }
 
+    public function clearCache(Note $note): void
+    {
+        $cachePrefix = config('ActivityPub')
+            ->cachePrefix;
+
+        $hashedNoteUri = md5($note->uri);
+
+        model('ActorModel')
+            ->clearCache($note->actor);
+        cache()
+            ->deleteMatching($cachePrefix . "note#{$note->id}*");
+        cache()
+            ->deleteMatching($cachePrefix . "note-{$hashedNoteUri}*");
+
+        if ($note->is_reply) {
+            $this->clearCache($note->reply_to_note);
+        }
+
+        if ($note->is_reblog) {
+            $this->clearCache($note->reblog_of_note);
+        }
+    }
+
     /**
      * @param array<string, array<string|int, mixed>> $data
      * @return array<string, array<string|int, mixed>>
@@ -681,9 +627,9 @@ class NoteModel extends UuidModel
 
         if (! isset($data['data']['uri'])) {
             $actor = model('ActorModel')
-                ->getActorById($data['data']['actor_id'],);
+                ->getActorById($data['data']['actor_id']);
 
-            $data['data']['uri'] = base_url(route_to('note', $actor->username, $uuid4->toString()),);
+            $data['data']['uri'] = base_url(route_to('note', $actor->username, $uuid4->toString()));
         }
 
         return $data;
diff --git a/app/Libraries/ActivityPub/Models/PreviewCardModel.php b/app/Libraries/ActivityPub/Models/PreviewCardModel.php
index 2c4c09ba7a7c315095ff42524737e2e080e124be..90c404eb83c564850c13e5f36dd86a3184afcfef 100644
--- a/app/Libraries/ActivityPub/Models/PreviewCardModel.php
+++ b/app/Libraries/ActivityPub/Models/PreviewCardModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -93,7 +95,7 @@ class PreviewCardModel extends Model
     {
         $hashedPreviewCardUrl = md5($url);
         cache()
-            ->delete(config('ActivityPub') ->cachePrefix . "preview_card-{$hashedPreviewCardUrl}",);
+            ->delete(config('ActivityPub') ->cachePrefix . "preview_card-{$hashedPreviewCardUrl}");
 
         return $this->delete($id);
     }
diff --git a/app/Libraries/ActivityPub/Objects/ActorObject.php b/app/Libraries/ActivityPub/Objects/ActorObject.php
index ac134f651f48c5f63c05cd4af057f5291e1a5460..b3280650f4904d26335c8c355e0d73fbc9e173e3 100644
--- a/app/Libraries/ActivityPub/Objects/ActorObject.php
+++ b/app/Libraries/ActivityPub/Objects/ActorObject.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/Objects/NoteObject.php b/app/Libraries/ActivityPub/Objects/NoteObject.php
index 80b1a3e717c511ddadc89b0abb43f07c8bc47fdc..e308706241b50e4fb993a316c5facb55149920f5 100644
--- a/app/Libraries/ActivityPub/Objects/NoteObject.php
+++ b/app/Libraries/ActivityPub/Objects/NoteObject.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * This class defines the Object which is the primary base type for the Activity Streams vocabulary.
  *
@@ -37,7 +39,7 @@ class NoteObject extends ObjectType
             $this->inReplyTo = $note->reply_to_note->uri;
         }
 
-        $this->replies = base_url(route_to('note-replies', $note->actor->username, $note->id),);
+        $this->replies = base_url(route_to('note-replies', $note->actor->username, $note->id));
 
         $this->cc = [$note->actor->followers_url];
     }
diff --git a/app/Libraries/ActivityPub/Objects/OrderedCollectionObject.php b/app/Libraries/ActivityPub/Objects/OrderedCollectionObject.php
index e68c1935f0b7eabf53daba9921f7d2e08c171d60..1b2d2888628fbcff54d3682da4a572b7e24d586f 100644
--- a/app/Libraries/ActivityPub/Objects/OrderedCollectionObject.php
+++ b/app/Libraries/ActivityPub/Objects/OrderedCollectionObject.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * This class defines a Paginated OrderedCollection based on CodeIgniter4 Pager to get the pagination metadata
  *
@@ -19,11 +21,11 @@ class OrderedCollectionObject extends ObjectType
 
     protected int $totalItems;
 
-    protected ?string $first;
+    protected ?string $first = null;
 
-    protected ?string $current;
+    protected ?string $current = null;
 
-    protected ?string $last;
+    protected ?string $last = null;
 
     /**
      * @param ObjectType[] $orderedItems
diff --git a/app/Libraries/ActivityPub/Objects/OrderedCollectionPage.php b/app/Libraries/ActivityPub/Objects/OrderedCollectionPage.php
index 3053ee904e459b2a38846386de6dae77cd40b22d..de177ebd56dada8c9d416348678c57a71246751a 100644
--- a/app/Libraries/ActivityPub/Objects/OrderedCollectionPage.php
+++ b/app/Libraries/ActivityPub/Objects/OrderedCollectionPage.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * This class defines a Paginated OrderedCollection based on CodeIgniter4 Pager to get the pagination metadata
  *
@@ -18,9 +20,9 @@ class OrderedCollectionPage extends OrderedCollectionObject
 
     protected string $partOf;
 
-    protected ?string $prev;
+    protected ?string $prev = null;
 
-    protected ?string $next;
+    protected ?string $next = null;
 
     public function __construct(Pager $pager, ?array $orderedItems = null)
     {
diff --git a/app/Libraries/ActivityPub/Objects/TombstoneObject.php b/app/Libraries/ActivityPub/Objects/TombstoneObject.php
index 5f4a5ea6407e1630b772b705aca7815b6fe78ba7..aca1ac1e7fef8fd505245450cab0595ee17061a6 100644
--- a/app/Libraries/ActivityPub/Objects/TombstoneObject.php
+++ b/app/Libraries/ActivityPub/Objects/TombstoneObject.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/ActivityPub/WebFinger.php b/app/Libraries/ActivityPub/WebFinger.php
index 882e7d1333c382cd94902556f153afdd0cbf22f4..f81779adf05ebfd70d52b09e7f8c5b64b880045d 100644
--- a/app/Libraries/ActivityPub/WebFinger.php
+++ b/app/Libraries/ActivityPub/WebFinger.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/Analytics/AnalyticsTrait.php b/app/Libraries/Analytics/AnalyticsTrait.php
index d2561ffa200a0e66b453745b2a33293bcd80d739..6aa3cd5d50e6fd3b223ff00b3f9338c6c42ac034 100644
--- a/app/Libraries/Analytics/AnalyticsTrait.php
+++ b/app/Libraries/Analytics/AnalyticsTrait.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -33,7 +35,7 @@ trait AnalyticsTrait
                 parse_url($referer, PHP_URL_HOST) === null
                     ? '- Direct -'
                     : parse_url($referer, PHP_URL_HOST);
-            parse_str(parse_url($referer, PHP_URL_QUERY), $queries);
+            parse_str((string) parse_url($referer, PHP_URL_QUERY), $queries);
             $keywords = $queries['q'] ?? null;
 
             $procedureName = $db->prefixTable('analytics_website');
diff --git a/app/Libraries/Analytics/Config/Analytics.php b/app/Libraries/Analytics/Config/Analytics.php
index 84842d57a25af9a0c567630bc27b91a049050d8c..08f7a901e186fad351ede0cf3bc9d3c4945a8fe3 100644
--- a/app/Libraries/Analytics/Config/Analytics.php
+++ b/app/Libraries/Analytics/Config/Analytics.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Analytics\Config;
 
 use CodeIgniter\Config\BaseConfig;
diff --git a/app/Libraries/Analytics/Config/Routes.php b/app/Libraries/Analytics/Config/Routes.php
index 4a57aec13f24d4b7144d8dd4925dfe79f841233f..7fe14863ed2e50d9c60eccbc6690a62893eaf348 100644
--- a/app/Libraries/Analytics/Config/Routes.php
+++ b/app/Libraries/Analytics/Config/Routes.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -69,4 +71,4 @@ $routes->group('', [
 
 // Show the Unknown UserAgents
 $routes->get('.well-known/unknown-useragents', 'UnknownUserAgentsController');
-$routes->get('.well-known/unknown-useragents/(:num)', 'UnknownUserAgentsController/$1',);
+$routes->get('.well-known/unknown-useragents/(:num)', 'UnknownUserAgentsController/$1');
diff --git a/app/Libraries/Analytics/Controllers/AnalyticsController.php b/app/Libraries/Analytics/Controllers/AnalyticsController.php
index f6fa8d70ce92f35a8c3f620d324a83a89aad3423..e0ed21af6212588bd1455c40bdf65a747e929c3f 100644
--- a/app/Libraries/Analytics/Controllers/AnalyticsController.php
+++ b/app/Libraries/Analytics/Controllers/AnalyticsController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -29,8 +31,8 @@ class AnalyticsController extends Controller
         $this->methodName = 'getData' . (count($params) >= 3 ? $params[2] : '');
 
         return $this->{$method}(
-            $params[0],
-            count($params) >= 4 ? $params[3] : null,
+            (int) $params[0],
+            count($params) >= 4 ? (int) $params[3] : null,
         );
     }
 
@@ -39,9 +41,9 @@ class AnalyticsController extends Controller
         $methodName = $this->methodName;
 
         if ($episodeId === null) {
-            return $this->response->setJSON($this->analyticsModel->{$methodName}($podcastId),);
+            return $this->response->setJSON($this->analyticsModel->{$methodName}($podcastId));
         }
 
-        return $this->response->setJSON($this->analyticsModel->{$methodName}($podcastId, $episodeId),);
+        return $this->response->setJSON($this->analyticsModel->{$methodName}($podcastId, $episodeId));
     }
 }
diff --git a/app/Libraries/Analytics/Controllers/EpisodeAnalyticsController.php b/app/Libraries/Analytics/Controllers/EpisodeAnalyticsController.php
index 1d1141848ca18f197f88696ab3b0aff1072037f3..05ae1462d0cf47f6d752ff7065d7cc76fe2a91b2 100644
--- a/app/Libraries/Analytics/Controllers/EpisodeAnalyticsController.php
+++ b/app/Libraries/Analytics/Controllers/EpisodeAnalyticsController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/Analytics/Controllers/EpisodeController.php b/app/Libraries/Analytics/Controllers/EpisodeController.php
index 96c1289414fabd2de1fb2ebf2a8d5bce3719fff7..f94fb386c8fd08180c2bb39a2654926450ae74dc 100644
--- a/app/Libraries/Analytics/Controllers/EpisodeController.php
+++ b/app/Libraries/Analytics/Controllers/EpisodeController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -100,7 +102,7 @@ class EpisodeController extends BaseController
         $session = Services::session();
         $session->start();
         if (isset($_SERVER['HTTP_REFERER'])) {
-            $session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST),);
+            $session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST));
         }
 
         $locale = service('request')
@@ -159,7 +161,7 @@ class EpisodeController extends BaseController
 
     public function oembedXML(): ResponseInterface
     {
-        $oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>",);
+        $oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>");
 
         $oembed->addChild('type', 'rich');
         $oembed->addChild('version', '1.0');
@@ -182,6 +184,6 @@ class EpisodeController extends BaseController
         $oembed->addChild('width', '600');
         $oembed->addChild('height', '200');
 
-        return $this->response->setXML($oembed);
+        return $this->response->setXML((string) $oembed);
     }
 }
diff --git a/app/Libraries/Analytics/Controllers/UnknownUserAgentsController.php b/app/Libraries/Analytics/Controllers/UnknownUserAgentsController.php
index 283081862221459662b6532c318cb0e78bd0138b..0747f6edfc9ca8f1fec78a34da83ecb9dcd4d23c 100644
--- a/app/Libraries/Analytics/Controllers/UnknownUserAgentsController.php
+++ b/app/Libraries/Analytics/Controllers/UnknownUserAgentsController.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-120000_add_analytics_podcasts.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-120000_add_analytics_podcasts.php
index e80887ea4d9b5f94fa7d563cd72922c036873f84..8a4914f200a5435d2b049f341acd04a90f8b1978 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-120000_add_analytics_podcasts.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-120000_add_analytics_podcasts.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsPodcasts Creates analytics_podcasts table in database
  *
@@ -44,7 +46,7 @@ class AddAnalyticsPodcasts extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey(['podcast_id', 'date']);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_episode.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_episode.php
index a00f5eaa206853439936bc868d66454a76d54c48..27e0412618b9482f77b3be787a237746dc3f1545 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_episode.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_episode.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsPodcastsByEpisode Creates analytics_episodes_by_episode table in database
  *
@@ -40,7 +42,7 @@ class AddAnalyticsPodcastsByEpisode extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey(['podcast_id', 'date', 'episode_id']);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_hour.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_hour.php
index 412b75f6aedf4009b4ba084bbca5262bf9063b8b..ad4ee5c5ffdf4f3ba546010e0a7a43f06a777446 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_hour.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_hour.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsPodcastsByHour Creates analytics_podcasts_by_hour table in database
  *
@@ -35,7 +37,7 @@ class AddAnalyticsPodcastsByHour extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey(['podcast_id', 'date', 'hour']);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-140000_add_analytics_podcasts_by_player.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-140000_add_analytics_podcasts_by_player.php
index d93270f4e370c4bf639cbf328d1c3a1df8057a5c..09e4386d45b4ed0a051bfb82b1f39500ba07a03a 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-140000_add_analytics_podcasts_by_player.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-140000_add_analytics_podcasts_by_player.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsPodcastsByPlayer Creates analytics_podcasts_by_player table in database
  *
@@ -52,7 +54,7 @@ class AddAnalyticsPodcastsByPlayer extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey(['podcast_id', 'date', 'service', 'app', 'device', 'os', 'is_bot']);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-150000_add_analytics_podcasts_by_country.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-150000_add_analytics_podcasts_by_country.php
index e7eb3597dbc735344c55b19207cc8df98829e79e..069302794d73dbe3065e1f89319bab120cd92acb 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-150000_add_analytics_podcasts_by_country.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-150000_add_analytics_podcasts_by_country.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsPodcastsByCountry Creates analytics_podcasts_by_country table in database
  *
@@ -36,7 +38,7 @@ class AddAnalyticsPodcastsByCountry extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey(['podcast_id', 'date', 'country_code']);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-160000_add_analytics_podcasts_by_region.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-160000_add_analytics_podcasts_by_region.php
index 8747fed8d0cc2e38c5425adeac5c1dd5390c1c52..57ee57b31a471067a50d41626eceac2ddd6fbc2b 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-160000_add_analytics_podcasts_by_region.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-160000_add_analytics_podcasts_by_region.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsPodcastsByRegion Creates analytics_podcasts_by_region table in database
  *
@@ -49,7 +51,7 @@ class AddAnalyticsPodcastsByRegion extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey(['podcast_id', 'date', 'country_code', 'region_code']);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-170000_add_analytics_website_by_browser.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-170000_add_analytics_website_by_browser.php
index 209a792feb475588548eecc13ccd9a1b53e69393..bea21b069458c5b6494c4c645c0f02c3c45cee34 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-170000_add_analytics_website_by_browser.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-170000_add_analytics_website_by_browser.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsWebsiteByBrowser Creates analytics_website_by_browser table in database
  *
@@ -36,7 +38,7 @@ class AddAnalyticsWebsiteByBrowser extends Migration
         ]);
 
         $this->forge->addPrimaryKey(['podcast_id', 'date', 'browser']);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-180000_add_analytics_website_by_referer.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-180000_add_analytics_website_by_referer.php
index 897245524633a66370315a4d02b69b90f6f5f618..c43005da1d09117cf6b17d6bf5ff5b4f35589a69 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-180000_add_analytics_website_by_referer.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-180000_add_analytics_website_by_referer.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsWebsiteByReferer Creates analytics_website_by_referer table in database
  *
@@ -46,7 +48,7 @@ class AddAnalyticsWebsiteByReferer extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey(['podcast_id', 'date', 'referer_url']);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-190000_add_analytics_website_by_entry_page.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-190000_add_analytics_website_by_entry_page.php
index c8f5324249fde096151d0d96cd3c816e19975aef..d83cbba3c411c1ea1856b091d2ca04556afdf2fb 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-190000_add_analytics_website_by_entry_page.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-190000_add_analytics_website_by_entry_page.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsWebsiteByEntryPage Creates analytics_website_by_entry_page table in database
  *
@@ -35,7 +37,7 @@ class AddAnalyticsWebsiteByEntryPage extends Migration
             ],
         ]);
         $this->forge->addPrimaryKey(['podcast_id', 'date', 'entry_page_url']);
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-200000_add_analytics_unknown_useragents.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-200000_add_analytics_unknown_useragents.php
index 6372a03272acc05700d9f02bebc670c14f99fad9..801cd9638e06b5aa38b751212dd697b5e5571fe9 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-200000_add_analytics_unknown_useragents.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-200000_add_analytics_unknown_useragents.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsUnknownUseragents Creates analytics_unknown_useragents table in database
  *
@@ -36,7 +38,7 @@ class AddAnalyticsUnknownUseragents extends Migration
 
         $this->forge->addPrimaryKey('id');
         // `created_at` and `updated_at` are created with SQL because Model class won’t be used for insertion (Procedure will be used instead)
-        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',);
+        $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()');
         $this->forge->addField(
             '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()',
         );
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php
index 0750c4a38260061af757895c9835bc2f75451d46..b04b4e08b0e9eb074a98bffbe5b59e9b54a18430 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsPodcastsProcedure Creates analytics_podcasts procedure in database
  *
@@ -79,6 +81,6 @@ class AddAnalyticsPodcastsProcedure extends Migration
     public function down(): void
     {
         $prefix = $this->db->getPrefix();
-        $this->db->query("DROP PROCEDURE IF EXISTS `{$prefix}analytics_podcasts`",);
+        $this->db->query("DROP PROCEDURE IF EXISTS `{$prefix}analytics_podcasts`");
     }
 }
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php
index 396bd45d4edf76f7999af550f78a3e1250943ba1..918fa96097381095a58ee80fa63a09a7028abcd9 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsUnknownUseragentsProcedure Creates analytics_unknown_useragents procedure in database
  *
diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php
index fea2bd588b4b5e9b1739e7c29b2b6c21e612fbbf..6f91cdddbf1eddf011a6ba8d25ac3adcd9a8a7ed 100644
--- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php
+++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AddAnalyticsWebsiteProcedure Creates analytics_website stored procedure in database
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcasts.php b/app/Libraries/Analytics/Entities/AnalyticsPodcasts.php
index 3a97fbeb0a166ae5eb7606f348f7d8218f7c1c23..3912b72931f7471b27776e4501778cf820b163f9 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsPodcasts.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsPodcasts.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcasts Entity for AnalyticsPodcasts
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByCountry.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByCountry.php
index ee7f8d813252c195412dfd4ec03b64885fff020a..ca9ed80ecf73f3da6658c263a689f3a0194d17c6 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByCountry.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByCountry.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastsByCountry Entity for AnalyticsPodcastsByCountry
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByEpisode.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByEpisode.php
index 2bcbe3f54705a5babd884466f8d6a324e64f318c..07dd6967268323be074b6767ce1633d2289d1ce1 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByEpisode.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByEpisode.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastsByEpisode Entity for AnalyticsPodcastsByEpisode
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByHour.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByHour.php
index 3c70d2fb7c0e6ca8e5ed196115200b21f83b1d6a..88856020654e1cf23bc9bde950edab49f33cbfa1 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByHour.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByHour.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastsByHour Entity for AnalyticsPodcastsByHour
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByPlayer.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByPlayer.php
index 2e386171bd5cec92cd7b69d7f84c1cb7f29c66fc..b35435877b6a6da3edd0b1c22fadcd7339783f5d 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByPlayer.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByPlayer.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastsByPlayer Entity for AnalyticsPodcastsByPlayer
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByRegion.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByRegion.php
index 0cc95d809e99f68e98d4d9781c6b8f4ffb505b5c..f193f3cfd85017b6885a8054849e762c8846bcb7 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByRegion.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByRegion.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastsByRegion Entity for AnalyticsPodcastsByRegion
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByService.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByService.php
index 18109a32f837511257a7e9139f905ef813fa6254..6604820f67ae460f96a8916da9a89a4090cab3bc 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByService.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByService.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastsByService Entity for AnalyticsPodcastsByService
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsUnknownUserAgent.php b/app/Libraries/Analytics/Entities/AnalyticsUnknownUserAgent.php
index af22085d69ee1ca527dde68a1d9a0b22e0c1a752..b5d460e8192e345013e32ca20a3fba5ae800385c 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsUnknownUserAgent.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsUnknownUserAgent.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsUnknownUseragents Entity for AnalyticsUnknownUseragents
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByBrowser.php b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByBrowser.php
index 2ff0c0cc01e455f8ad9ca70a5efb8af9973599e2..0dcb8e341388af4e4c02ec1149c0305222c55f36 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByBrowser.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByBrowser.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsWebsiteByBrowser Entity for AnalyticsWebsiteByBrowser
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByEntryPage.php b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByEntryPage.php
index 4d88372ad6b01f41808801c6953722127c253c8a..4e59db25d942eb4c271b69759379bbf6abeb0647 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByEntryPage.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByEntryPage.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsWebsiteByEntryPage Entity for AnalyticsWebsiteByEntryPage
  *
diff --git a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByReferer.php b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByReferer.php
index af05447bc6524570c646d1ee417a05f4ec0013f0..570fad0de9980c1a89516966545eb5d9be7f5a21 100644
--- a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByReferer.php
+++ b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByReferer.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class class AnalyticsWebsiteByReferer Entity for AnalyticsWebsiteByReferer
  *
diff --git a/app/Libraries/Analytics/Helpers/analytics_helper.php b/app/Libraries/Analytics/Helpers/analytics_helper.php
index c028ffe01e5e254ab83fa431a2124ed9b126fc98..838ad78e6023e0abb616890c63993161ee84ae5e 100644
--- a/app/Libraries/Analytics/Helpers/analytics_helper.php
+++ b/app/Libraries/Analytics/Helpers/analytics_helper.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 use CodeIgniter\Router\Exceptions\RouterException;
 use Config\Database;
 use Config\Services;
@@ -65,7 +67,7 @@ if (! function_exists('generate_episode_analytics_url')) {
                             floor((($audioFileSize - $audioFileHeaderSize) / $audioFileDuration) * 60,),
                     $audioFileSize,
                     $audioFileDuration,
-                    strtotime($publicationDate),
+                    $publicationDate->getTimestamp(),
                 ),
             ),
             $audioFilePath,
@@ -83,7 +85,7 @@ if (! function_exists('set_user_session_deny_list_ip')) {
         $session->start();
 
         if (! $session->has('denyListIp')) {
-            $session->set('denyListIp', IpDb::find($_SERVER['REMOTE_ADDR']) !== null,);
+            $session->set('denyListIp', IpDb::find($_SERVER['REMOTE_ADDR']) !== null);
         }
     }
 }
@@ -107,7 +109,7 @@ if (! function_exists('set_user_session_location')) {
         // Finds location:
         if (! $session->has('location')) {
             try {
-                $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb',);
+                $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb');
                 $city = $cityReader->city($_SERVER['REMOTE_ADDR']);
 
                 $location = [
@@ -158,8 +160,8 @@ if (! function_exists('set_user_session_player')) {
                 // Add to unknown list
                 try {
                     $db = Database::connect();
-                    $procedureNameAnalyticsUnknownUseragents = $db->prefixTable('analytics_unknown_useragents',);
-                    $db->query("CALL {$procedureNameAnalyticsUnknownUseragents}(?)", [$userAgent],);
+                    $procedureNameAnalyticsUnknownUseragents = $db->prefixTable('analytics_unknown_useragents');
+                    $db->query("CALL {$procedureNameAnalyticsUnknownUseragents}(?)", [$userAgent]);
                     // If things go wrong the show must go on and the user must be able to download the file
                 } catch (Exception) {
                 }
@@ -280,7 +282,7 @@ if (! function_exists('podcast_hit')) {
             // We create a sha1 hash for this IP_Address+User_Agent+Episode_ID (used to count only once multiple episode downloads):
             $episodeHashId =
                 '_IpUaEp_' .
-                sha1($_SERVER['REMOTE_ADDR'] . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $episodeId,);
+                sha1($_SERVER['REMOTE_ADDR'] . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $episodeId);
             // Was this episode downloaded in the past 24h:
             $downloadedBytes = cache($episodeHashId);
             // Rolling window is 24 hours (86400 seconds):
@@ -327,7 +329,7 @@ if (! function_exists('podcast_hit')) {
                     // We create a sha1 hash for this IP_Address+User_Agent+Podcast_ID (used to count unique listeners):
                     $listenerHashId =
                         '_IpUaPo_' .
-                        sha1($_SERVER['REMOTE_ADDR'] . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $podcastId,);
+                        sha1($_SERVER['REMOTE_ADDR'] . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $podcastId);
                     $newListener = 1;
                     // Has this listener already downloaded an episode today:
                     $downloadsByUser = cache($listenerHashId);
@@ -342,7 +344,7 @@ if (! function_exists('podcast_hit')) {
                     $midnightTTL = strtotime('tomorrow') - time();
                     // We save the download count for this user until midnight:
                     cache()
-                        ->save($listenerHashId, $downloadsByUser, $midnightTTL,);
+                        ->save($listenerHashId, $downloadsByUser, $midnightTTL);
 
                     $db->query(
                         "CALL {$procedureName}(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);",
@@ -368,7 +370,7 @@ if (! function_exists('podcast_hit')) {
             }
         } catch (Exception $exception) {
             // If things go wrong the show must go on and the user must be able to download the file
-            log_message('critical', $exception);
+            log_message('critical', $exception->getMessage());
         }
     }
 }
diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByCountryModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByCountryModel.php
index c84196772a9b416e2a7741e76a774bedc9530332..0b65fffc3b669022d705d632366cb3f1ef6e2ed7 100644
--- a/app/Libraries/Analytics/Models/AnalyticsPodcastByCountryModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByCountryModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastByCountryModel Model for analytics_podcasts_by_country table in database
  *
@@ -57,7 +59,7 @@ class AnalyticsPodcastByCountryModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcast_by_country_weekly", $found, 600,);
+                ->save("{$podcastId}_analytics_podcast_by_country_weekly", $found, 600);
         }
 
         return $found;
@@ -85,7 +87,7 @@ class AnalyticsPodcastByCountryModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcast_by_country_yearly", $found, 600,);
+                ->save("{$podcastId}_analytics_podcast_by_country_yearly", $found, 600);
         }
         return $found;
     }
diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByEpisodeModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByEpisodeModel.php
index ad654c26cbfb3cbcf7590ca7fe50fb27672454ca..a3fc88df5ba3db8a152096781aea3cef8a64be09 100644
--- a/app/Libraries/Analytics/Models/AnalyticsPodcastByEpisodeModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByEpisodeModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastByEpisodeModel Model for analytics_podcasts_by_episodes table in database
  *
@@ -55,7 +57,7 @@ class AnalyticsPodcastByEpisodeModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_{$episodeId}_analytics_podcast_by_episode_by_day", $found, 600,);
+                ->save("{$podcastId}_{$episodeId}_analytics_podcast_by_episode_by_day", $found, 600);
         }
 
         return $found;
@@ -80,7 +82,7 @@ class AnalyticsPodcastByEpisodeModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_{$episodeId}_analytics_podcast_by_episode_by_month", $found, 600,);
+                ->save("{$podcastId}_{$episodeId}_analytics_podcast_by_episode_by_month", $found, 600);
         }
 
         return $found;
diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByHourModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByHourModel.php
index afd8ebbc53ab81f57367a74f1ce3b8f2617bacbc..d582f77a30669ea575e9c058ee8700ebb6f486db 100644
--- a/app/Libraries/Analytics/Models/AnalyticsPodcastByHourModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByHourModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastByHour Model for analytics_podcasts_by_hour table in database
  *
@@ -54,7 +56,7 @@ class AnalyticsPodcastByHourModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcasts_by_hour", $found, 600,);
+                ->save("{$podcastId}_analytics_podcasts_by_hour", $found, 600);
         }
 
         return $found;
diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByPlayerModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByPlayerModel.php
index 66f258bc4264ab78377fcffdd6a7bc5d09f190a4..b8b8f32acd291c6a42ddafaeb576c8def41d7c77 100644
--- a/app/Libraries/Analytics/Models/AnalyticsPodcastByPlayerModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByPlayerModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastByPlayerModel Model for analytics_podcasts_by_player table in database
  *
@@ -58,7 +60,7 @@ class AnalyticsPodcastByPlayerModel extends Model
                 ->orderBy('values', 'DESC')
                 ->findAll();
             cache()
-                ->save("{$podcastId}_analytics_podcasts_by_player_by_app_weekly", $found, 600,);
+                ->save("{$podcastId}_analytics_podcasts_by_player_by_app_weekly", $found, 600);
         }
         return $found;
     }
@@ -86,7 +88,7 @@ class AnalyticsPodcastByPlayerModel extends Model
                 ->orderBy('values', 'DESC')
                 ->findAll();
             cache()
-                ->save("{$podcastId}_analytics_podcasts_by_player_by_app_yearly", $found, 600,);
+                ->save("{$podcastId}_analytics_podcasts_by_player_by_app_yearly", $found, 600);
         }
         return $found;
     }
@@ -115,7 +117,7 @@ class AnalyticsPodcastByPlayerModel extends Model
                 ->orderBy('values', 'DESC')
                 ->findAll();
             cache()
-                ->save("{$podcastId}_analytics_podcasts_by_player_by_os_weekly", $found, 600,);
+                ->save("{$podcastId}_analytics_podcasts_by_player_by_os_weekly", $found, 600);
         }
         return $found;
     }
@@ -143,7 +145,7 @@ class AnalyticsPodcastByPlayerModel extends Model
                 ->orderBy('values', 'DESC')
                 ->findAll();
             cache()
-                ->save("{$podcastId}_analytics_podcasts_by_player_by_device_weekly", $found, 600,);
+                ->save("{$podcastId}_analytics_podcasts_by_player_by_device_weekly", $found, 600);
         }
         return $found;
     }
@@ -171,7 +173,7 @@ class AnalyticsPodcastByPlayerModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcasts_by_player_bots", $found, 600,);
+                ->save("{$podcastId}_analytics_podcasts_by_player_bots", $found, 600);
         }
         return $found;
     }
diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByRegionModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByRegionModel.php
index 27d12160960f55625117cca07385e2015d9fd369..be9b5af347f982e0da09919a6e33ae7f398dd7d0 100644
--- a/app/Libraries/Analytics/Models/AnalyticsPodcastByRegionModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByRegionModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastByRegionModel Model for analytics_podcasts_by_region table in database
  *
@@ -60,7 +62,7 @@ class AnalyticsPodcastByRegionModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcast_by_region_{$locale}", $found, 600,);
+                ->save("{$podcastId}_analytics_podcast_by_region_{$locale}", $found, 600);
         }
         return $found;
     }
diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByServiceModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByServiceModel.php
index 298fbf72b16952bc206eaa0646614c8c335c5bc0..b0519119b496c8445e23dd821dd1256fccb8e3df 100644
--- a/app/Libraries/Analytics/Models/AnalyticsPodcastByServiceModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByServiceModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastByServiceModel Model for analytics_podcasts_by_player table in database
  *
@@ -58,7 +60,7 @@ class AnalyticsPodcastByServiceModel extends Model
                 ->orderBy('values', 'DESC')
                 ->findAll();
             cache()
-                ->save("{$podcastId}_analytics_podcasts_by_service_weekly", $found, 600,);
+                ->save("{$podcastId}_analytics_podcasts_by_service_weekly", $found, 600);
         }
         return $found;
     }
diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastModel.php
index 807bdca0b929a7c16a192b9975d133d15571ec12..630c7c413357ddac642b6257b6c17993f14f31fe 100644
--- a/app/Libraries/Analytics/Models/AnalyticsPodcastModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsPodcastModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsPodcastModel Model for analytics_podcasts table in database
  *
@@ -76,7 +78,7 @@ class AnalyticsPodcastModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcasts_by_weekday", $found, 600,);
+                ->save("{$podcastId}_analytics_podcasts_by_weekday", $found, 600);
         }
         return $found;
     }
@@ -98,7 +100,7 @@ class AnalyticsPodcastModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcast_by_bandwidth", $found, 600,);
+                ->save("{$podcastId}_analytics_podcast_by_bandwidth", $found, 600);
         }
         return $found;
     }
@@ -121,7 +123,7 @@ class AnalyticsPodcastModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcast_by_month", $found, 600,);
+                ->save("{$podcastId}_analytics_podcast_by_month", $found, 600);
         }
         return $found;
     }
@@ -145,7 +147,7 @@ class AnalyticsPodcastModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcast_unique_listeners_by_day", $found, 600,);
+                ->save("{$podcastId}_analytics_podcast_unique_listeners_by_day", $found, 600);
         }
         return $found;
     }
@@ -170,7 +172,7 @@ class AnalyticsPodcastModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcast_unique_listeners_by_month", $found, 600,);
+                ->save("{$podcastId}_analytics_podcast_unique_listeners_by_month", $found, 600);
         }
         return $found;
     }
@@ -196,7 +198,7 @@ class AnalyticsPodcastModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcast_listening_time_by_day", $found, 600,);
+                ->save("{$podcastId}_analytics_podcast_listening_time_by_day", $found, 600);
         }
         return $found;
     }
@@ -221,7 +223,7 @@ class AnalyticsPodcastModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_podcast_listening_time_by_month", $found, 600,);
+                ->save("{$podcastId}_analytics_podcast_listening_time_by_month", $found, 600);
         }
         return $found;
     }
diff --git a/app/Libraries/Analytics/Models/AnalyticsUnknownUseragentsModel.php b/app/Libraries/Analytics/Models/AnalyticsUnknownUseragentsModel.php
index 8b4ba41434d800bce2527b7bea92bb55bf2a092c..f3230eaad99fd5459739a971100d46b47aaa88ab 100644
--- a/app/Libraries/Analytics/Models/AnalyticsUnknownUseragentsModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsUnknownUseragentsModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsUnknownUseragentsModel Model for analytics_unknown_useragents table in database
  *
diff --git a/app/Libraries/Analytics/Models/AnalyticsWebsiteByBrowserModel.php b/app/Libraries/Analytics/Models/AnalyticsWebsiteByBrowserModel.php
index ec4817c95f6eed515fbcde76d12d69130f6aee65..438beda401442f772ed08c51929ca302f7588915 100644
--- a/app/Libraries/Analytics/Models/AnalyticsWebsiteByBrowserModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsWebsiteByBrowserModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsWebsiteByBrowserModel Model for analytics_website_by_browser table in database
  *
@@ -55,7 +57,7 @@ class AnalyticsWebsiteByBrowserModel extends Model
                 ->findAll();
 
             cache()
-                ->save("{$podcastId}_analytics_website_by_browser", $found, 600,);
+                ->save("{$podcastId}_analytics_website_by_browser", $found, 600);
         }
         return $found;
     }
diff --git a/app/Libraries/Analytics/Models/AnalyticsWebsiteByEntryPageModel.php b/app/Libraries/Analytics/Models/AnalyticsWebsiteByEntryPageModel.php
index f0bdf89d360d6cce5a964e64554f14cf0e15bf23..fa425e8dc50c8eaf584bfc6ded01b2ef81d4b066 100644
--- a/app/Libraries/Analytics/Models/AnalyticsWebsiteByEntryPageModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsWebsiteByEntryPageModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsWebsiteByEntryPageModel Model for analytics_website_by_entry_page table in database
  *
@@ -54,7 +56,7 @@ class AnalyticsWebsiteByEntryPageModel extends Model
                 ->orderBy('values', 'DESC')
                 ->findAll();
             cache()
-                ->save("{$podcastId}_analytics_website_by_entry_page", $found, 600,);
+                ->save("{$podcastId}_analytics_website_by_entry_page", $found, 600);
         }
         return $found;
     }
diff --git a/app/Libraries/Analytics/Models/AnalyticsWebsiteByRefererModel.php b/app/Libraries/Analytics/Models/AnalyticsWebsiteByRefererModel.php
index a0b0a9cc6c374449b86478b02764e6ed41b56cf7..fd4ff8185dd130710a4eceb4974cd9d32346a06f 100644
--- a/app/Libraries/Analytics/Models/AnalyticsWebsiteByRefererModel.php
+++ b/app/Libraries/Analytics/Models/AnalyticsWebsiteByRefererModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class AnalyticsWebsiteByRefererModel Model for analytics_website_by_referer table in database
  *
@@ -54,7 +56,7 @@ class AnalyticsWebsiteByRefererModel extends Model
                 ->orderBy('values', 'DESC')
                 ->findAll();
             cache()
-                ->save("{$podcastId}_analytics_website_by_referer", $found, 600,);
+                ->save("{$podcastId}_analytics_website_by_referer", $found, 600);
         }
         return $found;
     }
@@ -80,7 +82,7 @@ class AnalyticsWebsiteByRefererModel extends Model
                 ->orderBy('values', 'DESC')
                 ->findAll();
             cache()
-                ->save("{$podcastId}_analytics_website_by_domain_weekly", $found, 600,);
+                ->save("{$podcastId}_analytics_website_by_domain_weekly", $found, 600);
         }
         return $found;
     }
@@ -106,7 +108,7 @@ class AnalyticsWebsiteByRefererModel extends Model
                 ->orderBy('values', 'DESC')
                 ->findAll();
             cache()
-                ->save("{$podcastId}_analytics_website_by_domain_yearly", $found, 600,);
+                ->save("{$podcastId}_analytics_website_by_domain_yearly", $found, 600);
         }
         return $found;
     }
diff --git a/app/Libraries/Breadcrumb.php b/app/Libraries/Breadcrumb.php
index 00fa6659d8b63c023f1ee66f3b53fffa5590515d..1aa69dc8d7051a66403dbbcfb5b77ba4a4d43418 100644
--- a/app/Libraries/Breadcrumb.php
+++ b/app/Libraries/Breadcrumb.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Generates and renders a breadcrumb based on the current url segments
  *
diff --git a/app/Libraries/Negotiate.php b/app/Libraries/Negotiate.php
index 16923866ebae8d349f6698c666a7a9cf4cef28fe..19717daef2831adf2fa49c72256694f596a0a07a 100644
--- a/app/Libraries/Negotiate.php
+++ b/app/Libraries/Negotiate.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace App\Libraries;
 
 use CodeIgniter\HTTP\Negotiate as CodeIgniterHTTPNegotiate;
diff --git a/app/Libraries/NoteObject.php b/app/Libraries/NoteObject.php
index 48905df67cbf9c29052b9303b91c088f7cc4ed57..feabd9f6caa8394a2f6d1a4a0ce3f67cbca984ed 100644
--- a/app/Libraries/NoteObject.php
+++ b/app/Libraries/NoteObject.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -13,7 +15,10 @@ use App\Entities\Note;
 
 class NoteObject extends ActivityPubNoteObject
 {
-    public function __construct(Note $note)
+    /**
+     * @param Note $note
+     */
+    public function __construct($note)
     {
         parent::__construct($note);
 
diff --git a/app/Libraries/PodcastActor.php b/app/Libraries/PodcastActor.php
index 1ae3991468e9042373db668bc6cc089013045bf7..bde1736960d4a2fd335be92a32f4e118dd9033c0 100644
--- a/app/Libraries/PodcastActor.php
+++ b/app/Libraries/PodcastActor.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Libraries/Router.php b/app/Libraries/Router.php
index 8d428528d990d02a2995db4166cb61dd5fd9e337..368c64f5db7d6df04365de94426c97c17ea7890b 100644
--- a/app/Libraries/Router.php
+++ b/app/Libraries/Router.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * This file extends the Router class from the CodeIgniter 4 framework.
  *
@@ -30,7 +32,7 @@ class Router extends CodeIgniterRouter
     protected function checkRoutes(string $uri): bool
     {
         /** @noRector RemoveExtraParametersRector */
-        $routes = $this->collection->getRoutes($this->collection->getHTTPVerb(),);
+        $routes = $this->collection->getRoutes($this->collection->getHTTPVerb());
 
         // Don't waste any time
         if ($routes === []) {
@@ -64,7 +66,7 @@ class Router extends CodeIgniterRouter
 
             // Does the RegEx match?
             if (preg_match('#^' . $key . '$#u', $uri, $matches)) {
-                $this->matchedRouteOptions = $this->collection->getRoutesOptions($matchedKey,);
+                $this->matchedRouteOptions = $this->collection->getRoutesOptions($matchedKey);
 
                 // Is this route supposed to redirect to another?
                 if ($this->collection->isRedirect($key)) {
@@ -112,7 +114,7 @@ class Router extends CodeIgniterRouter
                         ->getValue();
                     $parsedHeader = $negotiate->parseHeader($acceptHeader);
 
-                    $supported = array_keys($this->matchedRouteOptions['alternate-content'],);
+                    $supported = array_keys($this->matchedRouteOptions['alternate-content']);
 
                     $expectedContentType = $parsedHeader[0];
                     foreach ($supported as $available) {
@@ -157,7 +159,7 @@ class Router extends CodeIgniterRouter
                 ) {
                     $replacekey = str_replace('/(.*)', '', $key);
                     $val = preg_replace('#^' . $key . '$#u', $val, $uri);
-                    $val = str_replace($replacekey, str_replace('/', '\\', $replacekey), $val,);
+                    $val = str_replace($replacekey, str_replace('/', '\\', $replacekey), $val);
                 } elseif (str_contains($val, '$') && str_contains($key, '(')) {
                     $val = preg_replace('#^' . $key . '$#u', $val, $uri);
                 } elseif (str_contains($val, '/')) {
diff --git a/app/Libraries/SimpleRSSElement.php b/app/Libraries/SimpleRSSElement.php
index b4d4b454b800beec34120a551c4b7b24d9554042..84944700ce102b0998d39ac7d094194d67036ed8 100644
--- a/app/Libraries/SimpleRSSElement.php
+++ b/app/Libraries/SimpleRSSElement.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -51,7 +53,7 @@ class SimpleRSSElement extends SimpleXMLElement
         if ($newChild !== null) {
             $node = dom_import_simplexml($newChild);
             $no = $node->ownerDocument;
-            $node->appendChild($no->createTextNode(esc($value)));
+            $node->appendChild($no->createTextNode((string) esc($value)));
         }
 
         return $newChild;
diff --git a/app/Models/ActorModel.php b/app/Models/ActorModel.php
index b58b095578a6a1132a3093ecee5088b4e8bec07c..8191299ae49596958c60ff448c3f76e784e84939 100644
--- a/app/Models/ActorModel.php
+++ b/app/Models/ActorModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Models/CategoryModel.php b/app/Models/CategoryModel.php
index 1c8e9cd501d3a3935106667b9b3221118c3bca5c..fe91ac4f4f7d0c6c4daab4529a946e7d774f48e7 100644
--- a/app/Models/CategoryModel.php
+++ b/app/Models/CategoryModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -63,7 +65,7 @@ class CategoryModel extends Model
             $options = array_reduce(
                 $categories,
                 function (array $result, Category $category): array {
-                    $result[$category->id] = lang('Podcast.category_options.' . $category->code,);
+                    $result[$category->id] = lang('Podcast.category_options.' . $category->code);
                     return $result;
                 },
                 [],
diff --git a/app/Models/CreditModel.php b/app/Models/CreditModel.php
index dfded4b217fddc02f69b99fd24d5de886d56afe0..b8b73fddd8c040939867b95cd0f12ac524630770 100644
--- a/app/Models/CreditModel.php
+++ b/app/Models/CreditModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Models/EpisodeModel.php b/app/Models/EpisodeModel.php
index 225c1889bc02ed62839af4be619acbcd6db2911c..b3bff1275f848896497e1104c25da54953d8ce19 100644
--- a/app/Models/EpisodeModel.php
+++ b/app/Models/EpisodeModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -240,7 +242,7 @@ class EpisodeModel extends Model
                     ->findAll();
             }
 
-            $secondsToNextUnpublishedEpisode = $this->getSecondsToNextUnpublishedEpisode($podcastId,);
+            $secondsToNextUnpublishedEpisode = $this->getSecondsToNextUnpublishedEpisode($podcastId);
 
             cache()
                 ->save(
@@ -284,7 +286,7 @@ class EpisodeModel extends Model
      */
     public function clearCache(array $data): array
     {
-        $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id'],);
+        $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id']);
 
         // delete podcast cache
         cache()
@@ -310,7 +312,7 @@ class EpisodeModel extends Model
     {
         helper('id3');
 
-        $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id'],);
+        $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id']);
 
         write_audio_file_tags($episode);
 
diff --git a/app/Models/LanguageModel.php b/app/Models/LanguageModel.php
index ee5853b4764e404d588c91ab66c8aeffa3d4d1cf..83e68e59c3ed4474ca04bab7802d3f1298f4c614 100644
--- a/app/Models/LanguageModel.php
+++ b/app/Models/LanguageModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Models/NoteModel.php b/app/Models/NoteModel.php
index 5abca34fcbed2c2fdd4ba42519f05049755162f1..5e8833decb60e480eacb77c3d671ee33ecf2691a 100644
--- a/app/Models/NoteModel.php
+++ b/app/Models/NoteModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Models/PageModel.php b/app/Models/PageModel.php
index 809489a58d477680e65688cefb76f042b0e34c25..cb32877bbe3e2be8563779b5513c00f154d7caff 100644
--- a/app/Models/PageModel.php
+++ b/app/Models/PageModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Models/PersonModel.php b/app/Models/PersonModel.php
index 07b2cea57513e90e97a130959eeb233d4d11b60a..20eed991bb7e3e1e77ce2273eb9e1d35c4ce2054 100644
--- a/app/Models/PersonModel.php
+++ b/app/Models/PersonModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Models/PlatformModel.php b/app/Models/PlatformModel.php
index a1bc89d14bff35f26cfd07cb6460e94d82b1e673..ab7f1f5a3ab175bd0be3c94c0cb809aeebbf5a1f 100644
--- a/app/Models/PlatformModel.php
+++ b/app/Models/PlatformModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class PlatformModel Model for platforms table in database
  *
@@ -111,7 +113,7 @@ class PlatformModel extends Model
                 ->findAll();
 
             cache()
-                ->save("podcast#{$podcastId}_platforms_{$platformType}_withLinks", $found, DECADE,);
+                ->save("podcast#{$podcastId}_platforms_{$platformType}_withLinks", $found, DECADE);
         }
 
         return $found;
diff --git a/app/Models/PodcastModel.php b/app/Models/PodcastModel.php
index 66a81d9d3cd60d3ddb8dcac08d1c70c784a04aeb..05e200bccf46788aa21ee001b9c434305065db58 100644
--- a/app/Models/PodcastModel.php
+++ b/app/Models/PodcastModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2021 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@@ -253,7 +255,7 @@ class PodcastModel extends Model
         }
 
         return count($userPodcast) > 0
-            ? $userPodcast[0]->group_id
+            ? (int) $userPodcast[0]->group_id
             : false;
     }
 
@@ -278,7 +280,7 @@ class PodcastModel extends Model
                 ->get()
                 ->getResultArray();
 
-            $secondsToNextUnpublishedEpisode = $episodeModel->getSecondsToNextUnpublishedEpisode($podcastId,);
+            $secondsToNextUnpublishedEpisode = $episodeModel->getSecondsToNextUnpublishedEpisode($podcastId);
 
             cache()
                 ->save(
@@ -314,7 +316,7 @@ class PodcastModel extends Model
                 ->get()
                 ->getResultArray();
 
-            $secondsToNextUnpublishedEpisode = $episodeModel->getSecondsToNextUnpublishedEpisode($podcastId,);
+            $secondsToNextUnpublishedEpisode = $episodeModel->getSecondsToNextUnpublishedEpisode($podcastId);
 
             cache()
                 ->save(
@@ -367,21 +369,23 @@ class PodcastModel extends Model
      */
     public function clearCache(array $data): array
     {
-        $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id'],);
+        $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id']);
 
-        // delete cache all podcast pages
-        cache()
-            ->deleteMatching("page_podcast#{$podcast->id}*");
+        if ($podcast !== null) {
+            // delete cache all podcast pages
+            cache()
+                ->deleteMatching("page_podcast#{$podcast->id}*");
 
-        // delete all cache for podcast actor
-        cache()
-            ->deleteMatching(config('ActivityPub') ->cachePrefix . "actor#{$podcast->actor_id}*",);
+            // delete all cache for podcast actor
+            cache()
+                ->deleteMatching(config('ActivityPub') ->cachePrefix . "actor#{$podcast->actor_id}*");
 
-        // delete model requests cache, includes feed / query / episode lists, etc.
-        cache()
-            ->deleteMatching("podcast#{$podcast->id}*");
-        cache()
-            ->delete("podcast-{$podcast->name}");
+            // delete model requests cache, includes feed / query / episode lists, etc.
+            cache()
+                ->deleteMatching("podcast#{$podcast->id}*");
+            cache()
+                ->delete("podcast-{$podcast->name}");
+        }
 
         // clear cache for every credit page
         cache()
@@ -440,7 +444,7 @@ class PodcastModel extends Model
      */
     protected function setActorAvatar(array $data): array
     {
-        $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id'],);
+        $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id']);
 
         $podcastActor = (new ActorModel())->find($podcast->actor_id);
 
@@ -459,19 +463,21 @@ class PodcastModel extends Model
      */
     protected function updatePodcastActor(array $data): array
     {
-        $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id'],);
+        $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id']);
 
-        $actorModel = new ActorModel();
-        $actor = $actorModel->getActorById($podcast->actor_id);
+        if ($podcast !== null) {
+            $actorModel = new ActorModel();
+            $actor = $actorModel->getActorById($podcast->actor_id);
 
-        // update values
-        $actor->display_name = $podcast->title;
-        $actor->summary = $podcast->description_html;
-        $actor->avatar_image_url = $podcast->image->thumbnail_url;
-        $actor->avatar_image_mimetype = $podcast->image_mimetype;
+            // update values
+            $actor->display_name = $podcast->title;
+            $actor->summary = $podcast->description_html;
+            $actor->avatar_image_url = $podcast->image->thumbnail_url;
+            $actor->avatar_image_mimetype = $podcast->image_mimetype;
 
-        if ($actor->hasChanged()) {
-            $actorModel->update($actor->id, $actor);
+            if ($actor->hasChanged()) {
+                $actorModel->update($actor->id, $actor);
+            }
         }
 
         return $data;
diff --git a/app/Models/SoundbiteModel.php b/app/Models/SoundbiteModel.php
index 9211d73ee971c078f6b67d44900d06f3f219be09..e17140b0a76cab994549cb74c5b7d1dbde02c13e 100644
--- a/app/Models/SoundbiteModel.php
+++ b/app/Models/SoundbiteModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * Class SoundbiteModel Model for podcasts_soundbites table in database
  *
@@ -112,14 +114,14 @@ class SoundbiteModel extends Model
         );
 
         cache()
-            ->delete("podcast#{$episode->podcast_id}_episode#{$episode->id}_soundbites",);
+            ->delete("podcast#{$episode->podcast_id}_episode#{$episode->id}_soundbites");
 
         // delete cache for rss feed
         cache()
             ->deleteMatching("podcast#{$episode->podcast_id}_feed*");
 
         cache()
-            ->deleteMatching("page_podcast#{$episode->podcast_id}_episode#{$episode->id}_*",);
+            ->deleteMatching("page_podcast#{$episode->podcast_id}_episode#{$episode->id}_*");
 
         return $data;
     }
diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php
index cfb3d7953fa10341735d0a5015e2ecf96a3d885a..e228622a98754e4ab25e29c8026468088d8af7ca 100644
--- a/app/Models/UserModel.php
+++ b/app/Models/UserModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Validation/FileRules.php b/app/Validation/FileRules.php
index b236a49c0a5970203e4f8e6fba7c10062c4a486c..6b6ed3f31f0f31ae2f5663338ac06ac3214f3292 100644
--- a/app/Validation/FileRules.php
+++ b/app/Validation/FileRules.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Validation/Rules.php b/app/Validation/Rules.php
index fd978700a9227c63b5ee9f106cd713735cb1b134..eab37ce8530f90507b5d1dbcf2a61f694aadf6fc 100644
--- a/app/Validation/Rules.php
+++ b/app/Validation/Rules.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * @copyright  2020 Podlibre
  * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
diff --git a/app/Views/admin/_layout.php b/app/Views/admin/_layout.php
index 3ca4c951ba957897d07c48fdd8b882491dc81667..66b3a947a4967c9d4d88476f3c38904e5a09c954 100644
--- a/app/Views/admin/_layout.php
+++ b/app/Views/admin/_layout.php
@@ -46,7 +46,7 @@
     <footer class="px-2 py-2 mx-auto text-xs text-right holy-grail-footer">
         <?= lang('Common.powered_by', [
             'castopod' =>
-                '<a class="underline hover:no-underline" href="https://castopod.org/" target="_blank" rel="noreferrer noopener">Castopod</a> v' .
+                '<a class="underline hover:no-underline" href="https://castopod.org/" target="_blank" rel="noreferrer noopener">Castopod</a> ' .
                 CP_VERSION,
         ]) ?>
     </footer>
diff --git a/composer.lock b/composer.lock
index 0a81d96eca0f58be152a773eff194937513b78cf..3895ee087dbd06be4cf0f6b43982fcf6377cc7c7 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,6701 +1,7379 @@
 {
-  "_readme": [
-    "This file locks the dependencies of your project to a known state",
-    "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
-    "This file is @generated automatically"
-  ],
-  "content-hash": "371c6aac9ca489338bf3b3fa06ffdb21",
-  "packages": [
-    {
-      "name": "brick/math",
-      "version": "0.9.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/brick/math.git",
-        "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0",
-        "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0",
-        "shasum": ""
-      },
-      "require": {
-        "ext-json": "*",
-        "php": "^7.1 || ^8.0"
-      },
-      "require-dev": {
-        "php-coveralls/php-coveralls": "^2.2",
-        "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
-        "vimeo/psalm": "4.3.2"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Brick\\Math\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Arbitrary-precision arithmetic library",
-      "keywords": [
-        "Arbitrary-precision",
-        "BigInteger",
-        "BigRational",
-        "arithmetic",
-        "bigdecimal",
-        "bignum",
-        "brick",
-        "math"
-      ],
-      "support": {
-        "issues": "https://github.com/brick/math/issues",
-        "source": "https://github.com/brick/math/tree/0.9.2"
-      },
-      "funding": [
-        {
-          "url": "https://tidelift.com/funding/github/packagist/brick/math",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-20T22:51:39+00:00"
-    },
-    {
-      "name": "codeigniter4/codeigniter4",
-      "version": "dev-develop",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/codeigniter4/CodeIgniter4.git",
-        "reference": "7eef1f708750fe11089e5eb056e7c817a691d0fa"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/codeigniter4/CodeIgniter4/zipball/7eef1f708750fe11089e5eb056e7c817a691d0fa",
-        "reference": "7eef1f708750fe11089e5eb056e7c817a691d0fa",
-        "shasum": ""
-      },
-      "require": {
-        "ext-curl": "*",
-        "ext-intl": "*",
-        "ext-json": "*",
-        "ext-mbstring": "*",
-        "kint-php/kint": "^3.3",
-        "laminas/laminas-escaper": "^2.6",
-        "php": "^7.3 || ^8.0",
-        "psr/log": "^1.1"
-      },
-      "require-dev": {
-        "codeigniter4/codeigniter4-standard": "^1.0",
-        "fakerphp/faker": "^1.9",
-        "mikey179/vfsstream": "^1.6",
-        "nexusphp/tachycardia": "^1.0",
-        "phpstan/phpstan": "0.12.86",
-        "phpunit/phpunit": "^9.1",
-        "predis/predis": "^1.1",
-        "rector/rector": "0.11.2",
-        "squizlabs/php_codesniffer": "^3.3",
-        "symplify/package-builder": "^9.3"
-      },
-      "suggest": {
-        "ext-fileinfo": "Improves mime type detection for files"
-      },
-      "default-branch": true,
-      "type": "project",
-      "extra": {
-        "branch-alias": {
-          "dev-develop": "4.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "CodeIgniter\\": "system/"
-        },
-        "exclude-from-classmap": ["**/Database/Migrations/**"]
-      },
-      "autoload-dev": {
-        "psr-4": {
-          "CodeIgniter\\": "tests/system/",
-          "Utils\\": "utils/"
-        }
-      },
-      "scripts": {
-        "post-update-cmd": [
-          "CodeIgniter\\ComposerScripts::postUpdate",
-          "bash -c \"if [ -f admin/setup.sh ]; then bash admin/setup.sh; fi\""
-        ],
-        "analyze": ["phpstan analyze"],
-        "test": ["phpunit"]
-      },
-      "license": ["MIT"],
-      "description": "The CodeIgniter framework v4",
-      "homepage": "https://codeigniter.com",
-      "support": {
-        "forum": "http://forum.codeigniter.com/",
-        "source": "https://github.com/codeigniter4/CodeIgniter4",
-        "slack": "https://codeigniterchat.slack.com",
-        "issues": "https://github.com/codeigniter4/CodeIgniter4/issues"
-      },
-      "time": "2021-05-19T15:17:22+00:00"
-    },
-    {
-      "name": "composer/ca-bundle",
-      "version": "1.2.9",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/composer/ca-bundle.git",
-        "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
-        "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
-        "shasum": ""
-      },
-      "require": {
-        "ext-openssl": "*",
-        "ext-pcre": "*",
-        "php": "^5.3.2 || ^7.0 || ^8.0"
-      },
-      "require-dev": {
-        "phpstan/phpstan": "^0.12.55",
-        "psr/log": "^1.0",
-        "symfony/phpunit-bridge": "^4.2 || ^5",
-        "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "1.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Composer\\CaBundle\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Jordi Boggiano",
-          "email": "j.boggiano@seld.be",
-          "homepage": "http://seld.be"
-        }
-      ],
-      "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
-      "keywords": ["cabundle", "cacert", "certificate", "ssl", "tls"],
-      "support": {
-        "irc": "irc://irc.freenode.org/composer",
-        "issues": "https://github.com/composer/ca-bundle/issues",
-        "source": "https://github.com/composer/ca-bundle/tree/1.2.9"
-      },
-      "funding": [
-        {
-          "url": "https://packagist.com",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/composer",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-12T12:10:35+00:00"
-    },
-    {
-      "name": "essence/dom",
-      "version": "1.0.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/essence/dom.git",
-        "reference": "e5776d2286f4ccbd048d160c28ac77ccc6d68f3a"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/essence/dom/zipball/e5776d2286f4ccbd048d160c28ac77ccc6d68f3a",
-        "reference": "e5776d2286f4ccbd048d160c28ac77ccc6d68f3a",
-        "shasum": ""
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Essence\\Dom\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Félix Girault",
-          "email": "felix.girault@gmail.com",
-          "homepage": "http://www.felix-girault.fr",
-          "role": "Developer"
-        }
-      ],
-      "description": "Essence's DOM parser.",
-      "homepage": "http://github.com/essence/dom",
-      "keywords": ["dom", "parser"],
-      "support": {
-        "issues": "https://github.com/essence/dom/issues",
-        "source": "https://github.com/essence/dom/tree/1.0.0"
-      },
-      "time": "2015-07-23T20:33:17+00:00"
-    },
-    {
-      "name": "essence/essence",
-      "version": "3.5.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/essence/essence.git",
-        "reference": "81e889a87603840dadd04b317a51487df1d45933"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/essence/essence/zipball/81e889a87603840dadd04b317a51487df1d45933",
-        "reference": "81e889a87603840dadd04b317a51487df1d45933",
-        "shasum": ""
-      },
-      "require": {
-        "essence/dom": "~1.0.0",
-        "essence/http": "~1.0.0",
-        "fg/parkour": "~1.1.0",
-        "php": ">=5.5.0"
-      },
-      "suggest": {
-        "ext-curl": "*"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Essence\\": "lib/Essence"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-2-Clause"],
-      "authors": [
-        {
-          "name": "Félix Girault",
-          "email": "felix.girault@gmail.com",
-          "homepage": "http://www.felix-girault.fr",
-          "role": "Developer"
-        }
-      ],
-      "description": "Extracts information about medias on the web, like youtube videos, twitter statuses or blog articles.",
-      "homepage": "http://github.com/essence/essence",
-      "keywords": ["embed", "media", "oembed", "opengraph"],
-      "support": {
-        "issues": "https://github.com/essence/essence/issues",
-        "source": "https://github.com/essence/essence/tree/3.5.4"
-      },
-      "time": "2021-01-21T09:58:10+00:00"
-    },
-    {
-      "name": "essence/http",
-      "version": "1.0.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/essence/http.git",
-        "reference": "ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/essence/http/zipball/ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2",
-        "reference": "ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2",
-        "shasum": ""
-      },
-      "suggest": {
-        "ext-curl": "*"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Essence\\Http\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Félix Girault",
-          "email": "felix.girault@gmail.com",
-          "homepage": "http://www.felix-girault.fr",
-          "role": "Developer"
-        }
-      ],
-      "description": "Essence's HTTP client.",
-      "homepage": "http://github.com/essence/http",
-      "keywords": ["client", "http"],
-      "support": {
-        "issues": "https://github.com/essence/http/issues",
-        "source": "https://github.com/essence/http/tree/1.0.0"
-      },
-      "time": "2015-07-23T20:33:50+00:00"
-    },
-    {
-      "name": "fg/parkour",
-      "version": "1.1.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/felixgirault/parkour.git",
-        "reference": "f837eb640fc4aac81b11fe50d2fa04fb4ec71496"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/felixgirault/parkour/zipball/f837eb640fc4aac81b11fe50d2fa04fb4ec71496",
-        "reference": "f837eb640fc4aac81b11fe50d2fa04fb4ec71496",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=5.5.0"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "4.3.*"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Parkour\\": "lib"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-2-Clause"],
-      "authors": [
-        {
-          "name": "Félix Girault",
-          "email": "felix.girault@gmail.com",
-          "homepage": "http://www.felix-girault.fr",
-          "role": "Developer"
-        }
-      ],
-      "description": "A collection of utilities to manipulate arrays.",
-      "homepage": "http://github.com/felixgirault/parkour",
-      "keywords": ["array", "manipulation", "traversing"],
-      "support": {
-        "issues": "https://github.com/felixgirault/parkour/issues",
-        "source": "https://github.com/felixgirault/parkour/tree/1.1.1"
-      },
-      "time": "2015-10-03T10:39:22+00:00"
-    },
-    {
-      "name": "geoip2/geoip2",
-      "version": "v2.11.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/maxmind/GeoIP2-php.git",
-        "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/d01be5894a5c1a3381c58c9b1795cd07f96c30f7",
-        "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7",
-        "shasum": ""
-      },
-      "require": {
-        "ext-json": "*",
-        "maxmind-db/reader": "~1.8",
-        "maxmind/web-service-common": "~0.8",
-        "php": ">=7.2"
-      },
-      "require-dev": {
-        "friendsofphp/php-cs-fixer": "2.*",
-        "phpunit/phpunit": "^8.0 || ^9.0",
-        "squizlabs/php_codesniffer": "3.*"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "GeoIp2\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["Apache-2.0"],
-      "authors": [
-        {
-          "name": "Gregory J. Oschwald",
-          "email": "goschwald@maxmind.com",
-          "homepage": "https://www.maxmind.com/"
-        }
-      ],
-      "description": "MaxMind GeoIP2 PHP API",
-      "homepage": "https://github.com/maxmind/GeoIP2-php",
-      "keywords": ["IP", "geoip", "geoip2", "geolocation", "maxmind"],
-      "support": {
-        "issues": "https://github.com/maxmind/GeoIP2-php/issues",
-        "source": "https://github.com/maxmind/GeoIP2-php/tree/v2.11.0"
-      },
-      "time": "2020-10-01T18:48:34+00:00"
-    },
-    {
-      "name": "graham-campbell/result-type",
-      "version": "v1.0.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/GrahamCampbell/Result-Type.git",
-        "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb",
-        "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.0|^8.0",
-        "phpoption/phpoption": "^1.7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.0-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "GrahamCampbell\\ResultType\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Graham Campbell",
-          "email": "graham@alt-three.com"
-        }
-      ],
-      "description": "An Implementation Of The Result Type",
-      "keywords": [
-        "Graham Campbell",
-        "GrahamCampbell",
-        "Result Type",
-        "Result-Type",
-        "result"
-      ],
-      "support": {
-        "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
-        "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/GrahamCampbell",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2020-04-13T13:17:36+00:00"
-    },
-    {
-      "name": "james-heinrich/getid3",
-      "version": "v2.0.0-beta3",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/JamesHeinrich/getID3.git",
-        "reference": "5515a2d24667c3c0ff49fdcbdadc405c0880c7a2"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/5515a2d24667c3c0ff49fdcbdadc405c0880c7a2",
-        "reference": "5515a2d24667c3c0ff49fdcbdadc405c0880c7a2",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=5.4.0"
-      },
-      "require-dev": {
-        "jakub-onderka/php-parallel-lint": "^0.9 || ^1.0",
-        "phpunit/phpunit": "^4.8|^5.0"
-      },
-      "suggest": {
-        "ext-SimpleXML": "SimpleXML extension is required to analyze RIFF/WAV/BWF audio files (also requires `ext-libxml`).",
-        "ext-com_dotnet": "COM extension is required when loading files larger than 2GB on Windows.",
-        "ext-ctype": "ctype extension is required when loading files larger than 2GB on 32-bit PHP (also on 64-bit PHP on Windows) or executing `getid3_lib::CopyTagsToComments`.",
-        "ext-dba": "DBA extension is required to use the DBA database as a cache storage.",
-        "ext-exif": "EXIF extension is required for graphic modules.",
-        "ext-iconv": "iconv extension is required to work with different character sets (when `ext-mbstring` is not available).",
-        "ext-json": "JSON extension is required to analyze Apple Quicktime videos.",
-        "ext-libxml": "libxml extension is required to analyze RIFF/WAV/BWF audio files.",
-        "ext-mbstring": "mbstring extension is required to work with different character sets.",
-        "ext-mysql": "MySQL extension is required to use the MySQL database as a cache storage (deprecated in PHP 5.5, removed in PHP >= 7.0, use `ext-mysqli` instead).",
-        "ext-mysqli": "MySQLi extension is required to use the MySQL database as a cache storage.",
-        "ext-rar": "RAR extension is required for RAR archive module.",
-        "ext-sqlite3": "SQLite3 extension is required to use the SQLite3 database as a cache storage.",
-        "ext-xml": "XML extension is required for graphic modules to analyze the XML metadata.",
-        "ext-zlib": "Zlib extension is required for archive modules and compressed metadata."
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "2.0.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "JamesHeinrich\\GetID3\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["GPL-1.0-or-later", "LGPL-3.0-only", "MPL-2.0"],
-      "authors": [
-        {
-          "name": "James Heinrich",
-          "email": "info@getid3.org",
-          "homepage": "https://github.com/JamesHeinrich",
-          "role": "Developer"
-        },
-        {
-          "name": "Craig Duncan",
-          "email": "git@duncanc.co.uk",
-          "homepage": "https://github.com/duncan3dc",
-          "role": "Developer"
-        }
-      ],
-      "description": "Extract and write useful information to/from popular multimedia file formats",
-      "homepage": "https://www.getid3.org/",
-      "keywords": ["audio", "codecs", "id3", "metadata", "tags", "video"],
-      "support": {
-        "issues": "https://github.com/JamesHeinrich/getID3/issues",
-        "source": "https://github.com/JamesHeinrich/getID3/tree/2.0"
-      },
-      "time": "2020-07-21T08:15:44+00:00"
-    },
-    {
-      "name": "kint-php/kint",
-      "version": "3.3",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/kint-php/kint.git",
-        "reference": "335ac1bcaf04d87df70d8aa51e8887ba2c6d203b"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/kint-php/kint/zipball/335ac1bcaf04d87df70d8aa51e8887ba2c6d203b",
-        "reference": "335ac1bcaf04d87df70d8aa51e8887ba2c6d203b",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=5.3.6"
-      },
-      "require-dev": {
-        "friendsofphp/php-cs-fixer": "^2.0",
-        "phpunit/phpunit": "^4.0",
-        "seld/phar-utils": "^1.0",
-        "symfony/finder": "^2.0 || ^3.0 || ^4.0",
-        "vimeo/psalm": "^3.0"
-      },
-      "suggest": {
-        "ext-ctype": "Simple data type tests",
-        "ext-iconv": "Provides fallback detection for ambiguous legacy string encodings such as the Windows and ISO 8859 code pages",
-        "ext-mbstring": "Provides string encoding detection",
-        "kint-php/kint-js": "Provides a simplified dump to console.log()",
-        "kint-php/kint-twig": "Provides d() and s() functions in twig templates",
-        "symfony/polyfill-ctype": "Replacement for ext-ctype if missing",
-        "symfony/polyfill-iconv": "Replacement for ext-iconv if missing",
-        "symfony/polyfill-mbstring": "Replacement for ext-mbstring if missing"
-      },
-      "type": "library",
-      "autoload": {
-        "files": ["init.php"],
-        "psr-4": {
-          "Kint\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Jonathan Vollebregt",
-          "homepage": "https://github.com/jnvsor"
-        },
-        {
-          "name": "Rokas Å leinius",
-          "homepage": "https://github.com/raveren"
-        },
-        {
-          "name": "Contributors",
-          "homepage": "https://github.com/kint-php/kint/graphs/contributors"
-        }
-      ],
-      "description": "Kint - debugging tool for PHP developers",
-      "homepage": "https://kint-php.github.io/kint/",
-      "keywords": ["debug", "kint", "php"],
-      "support": {
-        "issues": "https://github.com/kint-php/kint/issues",
-        "source": "https://github.com/kint-php/kint/tree/master"
-      },
-      "time": "2019-10-17T18:05:24+00:00"
-    },
-    {
-      "name": "laminas/laminas-escaper",
-      "version": "2.7.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/laminas/laminas-escaper.git",
-        "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/5e04bc5ae5990b17159d79d331055e2c645e5cc5",
-        "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5",
-        "shasum": ""
-      },
-      "require": {
-        "laminas/laminas-zendframework-bridge": "^1.0",
-        "php": "^7.3 || ~8.0.0"
-      },
-      "replace": {
-        "zendframework/zend-escaper": "^2.6.1"
-      },
-      "require-dev": {
-        "laminas/laminas-coding-standard": "~1.0.0",
-        "phpunit/phpunit": "^9.3",
-        "psalm/plugin-phpunit": "^0.12.2",
-        "vimeo/psalm": "^3.16"
-      },
-      "suggest": {
-        "ext-iconv": "*",
-        "ext-mbstring": "*"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Laminas\\Escaper\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
-      "homepage": "https://laminas.dev",
-      "keywords": ["escaper", "laminas"],
-      "support": {
-        "chat": "https://laminas.dev/chat",
-        "docs": "https://docs.laminas.dev/laminas-escaper/",
-        "forum": "https://discourse.laminas.dev",
-        "issues": "https://github.com/laminas/laminas-escaper/issues",
-        "rss": "https://github.com/laminas/laminas-escaper/releases.atom",
-        "source": "https://github.com/laminas/laminas-escaper"
-      },
-      "funding": [
-        {
-          "url": "https://funding.communitybridge.org/projects/laminas-project",
-          "type": "community_bridge"
-        }
-      ],
-      "time": "2020-11-17T21:26:43+00:00"
-    },
-    {
-      "name": "laminas/laminas-zendframework-bridge",
-      "version": "1.2.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/laminas/laminas-zendframework-bridge.git",
-        "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6cccbddfcfc742eb02158d6137ca5687d92cee32",
-        "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.3 || ^8.0"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3",
-        "psalm/plugin-phpunit": "^0.15.1",
-        "squizlabs/php_codesniffer": "^3.5",
-        "vimeo/psalm": "^4.6"
-      },
-      "type": "library",
-      "extra": {
-        "laminas": {
-          "module": "Laminas\\ZendFrameworkBridge"
-        }
-      },
-      "autoload": {
-        "files": ["src/autoload.php"],
-        "psr-4": {
-          "Laminas\\ZendFrameworkBridge\\": "src//"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "description": "Alias legacy ZF class names to Laminas Project equivalents.",
-      "keywords": ["ZendFramework", "autoloading", "laminas", "zf"],
-      "support": {
-        "forum": "https://discourse.laminas.dev/",
-        "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues",
-        "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom",
-        "source": "https://github.com/laminas/laminas-zendframework-bridge"
-      },
-      "funding": [
-        {
-          "url": "https://funding.communitybridge.org/projects/laminas-project",
-          "type": "community_bridge"
-        }
-      ],
-      "time": "2021-02-25T21:54:58+00:00"
-    },
-    {
-      "name": "league/commonmark",
-      "version": "1.6.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/thephpleague/commonmark.git",
-        "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/7d70d2f19c84bcc16275ea47edabee24747352eb",
-        "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb",
-        "shasum": ""
-      },
-      "require": {
-        "ext-mbstring": "*",
-        "php": "^7.1 || ^8.0"
-      },
-      "conflict": {
-        "scrutinizer/ocular": "1.7.*"
-      },
-      "require-dev": {
-        "cebe/markdown": "~1.0",
-        "commonmark/commonmark.js": "0.29.2",
-        "erusev/parsedown": "~1.0",
-        "ext-json": "*",
-        "github/gfm": "0.29.0",
-        "michelf/php-markdown": "~1.4",
-        "mikehaertl/php-shellcommand": "^1.4",
-        "phpstan/phpstan": "^0.12",
-        "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2",
-        "scrutinizer/ocular": "^1.5",
-        "symfony/finder": "^4.2"
-      },
-      "bin": ["bin/commonmark"],
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "League\\CommonMark\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Colin O'Dell",
-          "email": "colinodell@gmail.com",
-          "homepage": "https://www.colinodell.com",
-          "role": "Lead Developer"
-        }
-      ],
-      "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)",
-      "homepage": "https://commonmark.thephpleague.com",
-      "keywords": [
-        "commonmark",
-        "flavored",
-        "gfm",
-        "github",
-        "github-flavored",
-        "markdown",
-        "md",
-        "parser"
-      ],
-      "support": {
-        "docs": "https://commonmark.thephpleague.com/",
-        "issues": "https://github.com/thephpleague/commonmark/issues",
-        "rss": "https://github.com/thephpleague/commonmark/releases.atom",
-        "source": "https://github.com/thephpleague/commonmark"
-      },
-      "funding": [
-        {
-          "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark",
-          "type": "custom"
-        },
-        {
-          "url": "https://www.colinodell.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://www.paypal.me/colinpodell/10.00",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/colinodell",
-          "type": "github"
-        },
-        {
-          "url": "https://www.patreon.com/colinodell",
-          "type": "patreon"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-12T11:39:41+00:00"
-    },
-    {
-      "name": "league/html-to-markdown",
-      "version": "4.10.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/thephpleague/html-to-markdown.git",
-        "reference": "0868ae7a552e809e5cd8f93ba022071640408e88"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/0868ae7a552e809e5cd8f93ba022071640408e88",
-        "reference": "0868ae7a552e809e5cd8f93ba022071640408e88",
-        "shasum": ""
-      },
-      "require": {
-        "ext-dom": "*",
-        "ext-xml": "*",
-        "php": ">=5.3.3"
-      },
-      "require-dev": {
-        "mikehaertl/php-shellcommand": "~1.1.0",
-        "phpunit/phpunit": "^4.8|^5.7",
-        "scrutinizer/ocular": "~1.1"
-      },
-      "bin": ["bin/html-to-markdown"],
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "4.10-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "League\\HTMLToMarkdown\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Colin O'Dell",
-          "email": "colinodell@gmail.com",
-          "homepage": "https://www.colinodell.com",
-          "role": "Lead Developer"
-        },
-        {
-          "name": "Nick Cernis",
-          "email": "nick@cern.is",
-          "homepage": "http://modernnerd.net",
-          "role": "Original Author"
-        }
-      ],
-      "description": "An HTML-to-markdown conversion helper for PHP",
-      "homepage": "https://github.com/thephpleague/html-to-markdown",
-      "keywords": ["html", "markdown"],
-      "support": {
-        "issues": "https://github.com/thephpleague/html-to-markdown/issues",
-        "source": "https://github.com/thephpleague/html-to-markdown/tree/4.10.0"
-      },
-      "funding": [
-        {
-          "url": "https://www.colinodell.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://www.paypal.me/colinpodell/10.00",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/colinodell",
-          "type": "github"
-        },
-        {
-          "url": "https://www.patreon.com/colinodell",
-          "type": "patreon"
-        }
-      ],
-      "time": "2020-07-01T00:34:03+00:00"
-    },
-    {
-      "name": "maxmind-db/reader",
-      "version": "v1.10.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
-        "reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/569bd44d97d30a4ec12c7793a33004a76d4caf18",
-        "reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2"
-      },
-      "conflict": {
-        "ext-maxminddb": "<1.10.1,>=2.0.0"
-      },
-      "require-dev": {
-        "friendsofphp/php-cs-fixer": "*",
-        "php-coveralls/php-coveralls": "^2.1",
-        "phpstan/phpstan": "*",
-        "phpunit/phpcov": ">=6.0.0",
-        "phpunit/phpunit": ">=8.0.0,<10.0.0",
-        "squizlabs/php_codesniffer": "3.*"
-      },
-      "suggest": {
-        "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
-        "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
-        "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "MaxMind\\Db\\": "src/MaxMind/Db"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["Apache-2.0"],
-      "authors": [
-        {
-          "name": "Gregory J. Oschwald",
-          "email": "goschwald@maxmind.com",
-          "homepage": "https://www.maxmind.com/"
-        }
-      ],
-      "description": "MaxMind DB Reader API",
-      "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
-      "keywords": ["database", "geoip", "geoip2", "geolocation", "maxmind"],
-      "support": {
-        "issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues",
-        "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.10.1"
-      },
-      "time": "2021-04-14T17:49:35+00:00"
-    },
-    {
-      "name": "maxmind/web-service-common",
-      "version": "v0.8.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/maxmind/web-service-common-php.git",
-        "reference": "32f274051c543fc865e5a84d3a2c703913641ea8"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/32f274051c543fc865e5a84d3a2c703913641ea8",
-        "reference": "32f274051c543fc865e5a84d3a2c703913641ea8",
-        "shasum": ""
-      },
-      "require": {
-        "composer/ca-bundle": "^1.0.3",
-        "ext-curl": "*",
-        "ext-json": "*",
-        "php": ">=7.2"
-      },
-      "require-dev": {
-        "friendsofphp/php-cs-fixer": "2.*",
-        "phpunit/phpunit": "^8.0 || ^9.0",
-        "squizlabs/php_codesniffer": "3.*"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "MaxMind\\Exception\\": "src/Exception",
-          "MaxMind\\WebService\\": "src/WebService"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["Apache-2.0"],
-      "authors": [
-        {
-          "name": "Gregory Oschwald",
-          "email": "goschwald@maxmind.com"
-        }
-      ],
-      "description": "Internal MaxMind Web Service API",
-      "homepage": "https://github.com/maxmind/web-service-common-php",
-      "support": {
-        "issues": "https://github.com/maxmind/web-service-common-php/issues",
-        "source": "https://github.com/maxmind/web-service-common-php/tree/v0.8.1"
-      },
-      "time": "2020-11-02T17:00:53+00:00"
-    },
-    {
-      "name": "michalsn/codeigniter4-uuid",
-      "version": "dev-develop",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/michalsn/codeigniter4-uuid.git",
-        "reference": "b26512ac4f3f0c772fbfa2c3317346d3c17e2d44"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/michalsn/codeigniter4-uuid/zipball/b26512ac4f3f0c772fbfa2c3317346d3c17e2d44",
-        "reference": "b26512ac4f3f0c772fbfa2c3317346d3c17e2d44",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3",
-        "ramsey/uuid": "^4.0"
-      },
-      "require-dev": {
-        "codeigniter4/codeigniter4": "dev-develop",
-        "phpunit/phpunit": "8.5.*"
-      },
-      "default-branch": true,
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Michalsn\\Uuid\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "michalsn",
-          "homepage": "https://github.com/michalsn",
-          "role": "Developer"
-        }
-      ],
-      "description": "UUID package for CodeIgniter 4 with support for Model and Entity.",
-      "homepage": "https://github.com/michalsn/codeigniter4-uuid",
-      "keywords": ["codeigniter4", "entity", "model", "uuid"],
-      "support": {
-        "issues": "https://github.com/michalsn/codeigniter4-uuid/issues",
-        "source": "https://github.com/michalsn/codeigniter4-uuid/tree/develop"
-      },
-      "time": "2021-05-10T16:28:01+00:00"
-    },
-    {
-      "name": "myth/auth",
-      "version": "dev-develop",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/lonnieezell/myth-auth.git",
-        "reference": "d3df41fb24b19c1362a163da4167b07efcff69e4"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/lonnieezell/myth-auth/zipball/d3df41fb24b19c1362a163da4167b07efcff69e4",
-        "reference": "d3df41fb24b19c1362a163da4167b07efcff69e4",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.3 || ^8.0"
-      },
-      "provide": {
-        "codeigniter4/authentication-implementation": "1.0"
-      },
-      "require-dev": {
-        "codeigniter4/codeigniter4": "dev-develop",
-        "codeigniter4/codeigniter4-standard": "^1.0",
-        "fakerphp/faker": "^1.9",
-        "mockery/mockery": "^1.0",
-        "phpstan/phpstan": "^0.12",
-        "phpunit/phpunit": "^9.2",
-        "squizlabs/php_codesniffer": "^3.5"
-      },
-      "default-branch": true,
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Myth\\Auth\\": "src"
-        },
-        "exclude-from-classmap": ["**/Database/Migrations/**"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Lonnie Ezell",
-          "email": "lonnieje@gmail.com",
-          "homepage": "http://newmythmedia.com",
-          "role": "Developer"
-        }
-      ],
-      "description": "Flexible authentication/authorization system for CodeIgniter 4.",
-      "homepage": "https://github.com/lonnieezell/myth-auth",
-      "keywords": ["Authentication", "authorization", "codeigniter"],
-      "support": {
-        "issues": "https://github.com/lonnieezell/myth-auth/issues",
-        "source": "https://github.com/lonnieezell/myth-auth/tree/develop"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/lonnieezell",
-          "type": "github"
-        },
-        {
-          "url": "https://www.patreon.com/lonnieezell",
-          "type": "patreon"
-        }
-      ],
-      "time": "2021-05-15T03:29:54+00:00"
-    },
-    {
-      "name": "opawg/user-agents-php",
-      "version": "v1.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/opawg/user-agents-php.git",
-        "reference": "e22c7be05f475b44d0e6ecd76acf1617a2efef85"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/opawg/user-agents-php/zipball/e22c7be05f475b44d0e6ecd76acf1617a2efef85",
-        "reference": "e22c7be05f475b44d0e6ecd76acf1617a2efef85",
-        "shasum": ""
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Opawg\\UserAgentsPhp\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Benjamin Bellamy",
-          "email": "ben@podlibre.org",
-          "homepage": "https://podlibre.org/"
-        }
-      ],
-      "description": "PHP implementation for opawg/user-agents.",
-      "homepage": "https://github.com/opawg/user-agents-php",
-      "support": {
-        "source": "https://github.com/opawg/user-agents-php/tree/v1.0"
-      },
-      "time": "2020-11-28T10:54:05+00:00"
-    },
-    {
-      "name": "phpoption/phpoption",
-      "version": "1.7.5",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/schmittjoh/php-option.git",
-        "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525",
-        "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^5.5.9 || ^7.0 || ^8.0"
-      },
-      "require-dev": {
-        "bamarni/composer-bin-plugin": "^1.4.1",
-        "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.7-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "PhpOption\\": "src/PhpOption/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["Apache-2.0"],
-      "authors": [
-        {
-          "name": "Johannes M. Schmitt",
-          "email": "schmittjoh@gmail.com"
-        },
-        {
-          "name": "Graham Campbell",
-          "email": "graham@alt-three.com"
-        }
-      ],
-      "description": "Option Type for PHP",
-      "keywords": ["language", "option", "php", "type"],
-      "support": {
-        "issues": "https://github.com/schmittjoh/php-option/issues",
-        "source": "https://github.com/schmittjoh/php-option/tree/1.7.5"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/GrahamCampbell",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2020-07-20T17:29:33+00:00"
-    },
-    {
-      "name": "phpseclib/phpseclib",
-      "version": "2.0.31",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phpseclib/phpseclib.git",
-        "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4",
-        "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=5.3.3"
-      },
-      "require-dev": {
-        "phing/phing": "~2.7",
-        "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4",
-        "squizlabs/php_codesniffer": "~2.0"
-      },
-      "suggest": {
-        "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
-        "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
-        "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
-        "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
-      },
-      "type": "library",
-      "autoload": {
-        "files": ["phpseclib/bootstrap.php"],
-        "psr-4": {
-          "phpseclib\\": "phpseclib/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Jim Wigginton",
-          "email": "terrafrost@php.net",
-          "role": "Lead Developer"
-        },
-        {
-          "name": "Patrick Monnerat",
-          "email": "pm@datasphere.ch",
-          "role": "Developer"
-        },
-        {
-          "name": "Andreas Fischer",
-          "email": "bantu@phpbb.com",
-          "role": "Developer"
-        },
-        {
-          "name": "Hans-Jürgen Petrich",
-          "email": "petrich@tronic-media.com",
-          "role": "Developer"
-        },
-        {
-          "name": "Graham Campbell",
-          "email": "graham@alt-three.com",
-          "role": "Developer"
-        }
-      ],
-      "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
-      "homepage": "http://phpseclib.sourceforge.net",
-      "keywords": [
-        "BigInteger",
-        "aes",
-        "asn.1",
-        "asn1",
-        "blowfish",
-        "crypto",
-        "cryptography",
-        "encryption",
-        "rsa",
-        "security",
-        "sftp",
-        "signature",
-        "signing",
-        "ssh",
-        "twofish",
-        "x.509",
-        "x509"
-      ],
-      "support": {
-        "issues": "https://github.com/phpseclib/phpseclib/issues",
-        "source": "https://github.com/phpseclib/phpseclib/tree/2.0.31"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/terrafrost",
-          "type": "github"
-        },
-        {
-          "url": "https://www.patreon.com/phpseclib",
-          "type": "patreon"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-04-06T13:56:45+00:00"
-    },
-    {
-      "name": "podlibre/ipcat",
-      "version": "v1.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/podlibre/ipcat.git",
-        "reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/podlibre/ipcat/zipball/1adfc821be508ddc8a742f6a5d5e6e42fdf28e86",
-        "reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86",
-        "shasum": ""
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Podlibre\\Ipcat\\": ""
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["GPL-3.0-only"],
-      "authors": [
-        {
-          "name": "Benjamin Bellamy",
-          "email": "ben@podlibre.org",
-          "homepage": "https://podlibre.org/"
-        }
-      ],
-      "description": "Categorization of IP Addresses forked from https://github.com/client9/ipcat",
-      "homepage": "https://github.com/podlibre/ipcat",
-      "support": {
-        "source": "https://github.com/podlibre/ipcat/tree/v1.0"
-      },
-      "time": "2020-10-05T17:15:07+00:00"
-    },
-    {
-      "name": "podlibre/podcast-namespace",
-      "version": "v1.0.6",
-      "source": {
-        "type": "git",
-        "url": "https://code.podlibre.org/podlibre/podcastnamespace",
-        "reference": "4525c06ee9dd95bb745ee875d55b64a053c74cd6"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Podlibre\\PodcastNamespace\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Benjamin Bellamy",
-          "email": "ben@podlibre.org",
-          "homepage": "https://podlibre.org/"
-        }
-      ],
-      "description": "PHP implementation for the Podcast Namespace.",
-      "homepage": "https://code.podlibre.org/podlibre/podcastnamespace",
-      "time": "2021-01-14T15:47:06+00:00"
-    },
-    {
-      "name": "psr/cache",
-      "version": "1.0.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/php-fig/cache.git",
-        "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
-        "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=5.3.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.0.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Psr\\Cache\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "PHP-FIG",
-          "homepage": "http://www.php-fig.org/"
-        }
-      ],
-      "description": "Common interface for caching libraries",
-      "keywords": ["cache", "psr", "psr-6"],
-      "support": {
-        "source": "https://github.com/php-fig/cache/tree/master"
-      },
-      "time": "2016-08-06T20:24:11+00:00"
-    },
-    {
-      "name": "psr/log",
-      "version": "1.1.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/php-fig/log.git",
-        "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
-        "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=5.3.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.1.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Psr\\Log\\": "Psr/Log/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "PHP-FIG",
-          "homepage": "https://www.php-fig.org/"
-        }
-      ],
-      "description": "Common interface for logging libraries",
-      "homepage": "https://github.com/php-fig/log",
-      "keywords": ["log", "psr", "psr-3"],
-      "support": {
-        "source": "https://github.com/php-fig/log/tree/1.1.4"
-      },
-      "time": "2021-05-03T11:20:27+00:00"
-    },
-    {
-      "name": "ramsey/collection",
-      "version": "1.1.3",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/ramsey/collection.git",
-        "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1",
-        "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.2 || ^8"
-      },
-      "require-dev": {
-        "captainhook/captainhook": "^5.3",
-        "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
-        "ergebnis/composer-normalize": "^2.6",
-        "fakerphp/faker": "^1.5",
-        "hamcrest/hamcrest-php": "^2",
-        "jangregor/phpstan-prophecy": "^0.8",
-        "mockery/mockery": "^1.3",
-        "phpstan/extension-installer": "^1",
-        "phpstan/phpstan": "^0.12.32",
-        "phpstan/phpstan-mockery": "^0.12.5",
-        "phpstan/phpstan-phpunit": "^0.12.11",
-        "phpunit/phpunit": "^8.5 || ^9",
-        "psy/psysh": "^0.10.4",
-        "slevomat/coding-standard": "^6.3",
-        "squizlabs/php_codesniffer": "^3.5",
-        "vimeo/psalm": "^4.4"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Ramsey\\Collection\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Ben Ramsey",
-          "email": "ben@benramsey.com",
-          "homepage": "https://benramsey.com"
-        }
-      ],
-      "description": "A PHP 7.2+ library for representing and manipulating collections.",
-      "keywords": ["array", "collection", "hash", "map", "queue", "set"],
-      "support": {
-        "issues": "https://github.com/ramsey/collection/issues",
-        "source": "https://github.com/ramsey/collection/tree/1.1.3"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/ramsey",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-21T17:40:04+00:00"
-    },
-    {
-      "name": "ramsey/uuid",
-      "version": "4.1.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/ramsey/uuid.git",
-        "reference": "cd4032040a750077205918c86049aa0f43d22947"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947",
-        "reference": "cd4032040a750077205918c86049aa0f43d22947",
-        "shasum": ""
-      },
-      "require": {
-        "brick/math": "^0.8 || ^0.9",
-        "ext-json": "*",
-        "php": "^7.2 || ^8",
-        "ramsey/collection": "^1.0",
-        "symfony/polyfill-ctype": "^1.8"
-      },
-      "replace": {
-        "rhumsaa/uuid": "self.version"
-      },
-      "require-dev": {
-        "codeception/aspect-mock": "^3",
-        "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0",
-        "doctrine/annotations": "^1.8",
-        "goaop/framework": "^2",
-        "mockery/mockery": "^1.3",
-        "moontoast/math": "^1.1",
-        "paragonie/random-lib": "^2",
-        "php-mock/php-mock-mockery": "^1.3",
-        "php-mock/php-mock-phpunit": "^2.5",
-        "php-parallel-lint/php-parallel-lint": "^1.1",
-        "phpbench/phpbench": "^0.17.1",
-        "phpstan/extension-installer": "^1.0",
-        "phpstan/phpstan": "^0.12",
-        "phpstan/phpstan-mockery": "^0.12",
-        "phpstan/phpstan-phpunit": "^0.12",
-        "phpunit/phpunit": "^8.5",
-        "psy/psysh": "^0.10.0",
-        "slevomat/coding-standard": "^6.0",
-        "squizlabs/php_codesniffer": "^3.5",
-        "vimeo/psalm": "3.9.4"
-      },
-      "suggest": {
-        "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
-        "ext-ctype": "Enables faster processing of character classification using ctype functions.",
-        "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
-        "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
-        "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
-        "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "4.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Ramsey\\Uuid\\": "src/"
-        },
-        "files": ["src/functions.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
-      "homepage": "https://github.com/ramsey/uuid",
-      "keywords": ["guid", "identifier", "uuid"],
-      "support": {
-        "issues": "https://github.com/ramsey/uuid/issues",
-        "rss": "https://github.com/ramsey/uuid/releases.atom",
-        "source": "https://github.com/ramsey/uuid"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/ramsey",
-          "type": "github"
-        }
-      ],
-      "time": "2020-08-18T17:17:46+00:00"
-    },
-    {
-      "name": "symfony/polyfill-ctype",
-      "version": "v1.22.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/polyfill-ctype.git",
-        "reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
-        "reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.1"
-      },
-      "suggest": {
-        "ext-ctype": "For best performance"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "1.22-dev"
-        },
-        "thanks": {
-          "name": "symfony/polyfill",
-          "url": "https://github.com/symfony/polyfill"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Polyfill\\Ctype\\": ""
-        },
-        "files": ["bootstrap.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Gert de Pagter",
-          "email": "BackEndTea@gmail.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Symfony polyfill for ctype functions",
-      "homepage": "https://symfony.com",
-      "keywords": ["compatibility", "ctype", "polyfill", "portable"],
-      "support": {
-        "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-07T16:49:33+00:00"
-    },
-    {
-      "name": "symfony/polyfill-mbstring",
-      "version": "v1.22.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/polyfill-mbstring.git",
-        "reference": "5232de97ee3b75b0360528dae24e73db49566ab1"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1",
-        "reference": "5232de97ee3b75b0360528dae24e73db49566ab1",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.1"
-      },
-      "suggest": {
-        "ext-mbstring": "For best performance"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "1.22-dev"
-        },
-        "thanks": {
-          "name": "symfony/polyfill",
-          "url": "https://github.com/symfony/polyfill"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Polyfill\\Mbstring\\": ""
-        },
-        "files": ["bootstrap.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Symfony polyfill for the Mbstring extension",
-      "homepage": "https://symfony.com",
-      "keywords": ["compatibility", "mbstring", "polyfill", "portable", "shim"],
-      "support": {
-        "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-22T09:19:47+00:00"
-    },
-    {
-      "name": "symfony/polyfill-php80",
-      "version": "v1.22.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/polyfill-php80.git",
-        "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
-        "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.1"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "1.22-dev"
-        },
-        "thanks": {
-          "name": "symfony/polyfill",
-          "url": "https://github.com/symfony/polyfill"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Polyfill\\Php80\\": ""
-        },
-        "files": ["bootstrap.php"],
-        "classmap": ["Resources/stubs"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Ion Bazan",
-          "email": "ion.bazan@gmail.com"
-        },
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
-      "homepage": "https://symfony.com",
-      "keywords": ["compatibility", "polyfill", "portable", "shim"],
-      "support": {
-        "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-07T16:49:33+00:00"
-    },
-    {
-      "name": "vlucas/phpdotenv",
-      "version": "v5.3.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/vlucas/phpdotenv.git",
-        "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56",
-        "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56",
-        "shasum": ""
-      },
-      "require": {
-        "ext-pcre": "*",
-        "graham-campbell/result-type": "^1.0.1",
-        "php": "^7.1.3 || ^8.0",
-        "phpoption/phpoption": "^1.7.4",
-        "symfony/polyfill-ctype": "^1.17",
-        "symfony/polyfill-mbstring": "^1.17",
-        "symfony/polyfill-php80": "^1.17"
-      },
-      "require-dev": {
-        "bamarni/composer-bin-plugin": "^1.4.1",
-        "ext-filter": "*",
-        "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1"
-      },
-      "suggest": {
-        "ext-filter": "Required to use the boolean validator."
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "5.3-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Dotenv\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Graham Campbell",
-          "email": "graham@alt-three.com",
-          "homepage": "https://gjcampbell.co.uk/"
-        },
-        {
-          "name": "Vance Lucas",
-          "email": "vance@vancelucas.com",
-          "homepage": "https://vancelucas.com/"
-        }
-      ],
-      "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
-      "keywords": ["dotenv", "env", "environment"],
-      "support": {
-        "issues": "https://github.com/vlucas/phpdotenv/issues",
-        "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/GrahamCampbell",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-20T15:23:13+00:00"
-    },
-    {
-      "name": "whichbrowser/parser",
-      "version": "v2.1.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/WhichBrowser/Parser-PHP.git",
-        "reference": "bcf642a1891032de16a5ab976fd352753dd7f9a0"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/WhichBrowser/Parser-PHP/zipball/bcf642a1891032de16a5ab976fd352753dd7f9a0",
-        "reference": "bcf642a1891032de16a5ab976fd352753dd7f9a0",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=5.4.0",
-        "psr/cache": "^1.0"
-      },
-      "require-dev": {
-        "cache/array-adapter": "^1.1",
-        "icomefromthenet/reverse-regex": "0.0.6.3",
-        "php-coveralls/php-coveralls": "^2.0",
-        "phpunit/php-code-coverage": "^5.0 || ^7.0",
-        "phpunit/phpunit": "^6.0 || ^8.0",
-        "squizlabs/php_codesniffer": "^3.5",
-        "symfony/yaml": "~3.4 || ~4.0"
-      },
-      "suggest": {
-        "cache/array-adapter": "Allows testing of the caching functionality"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "WhichBrowser\\": ["src/", "tests/src/"]
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Niels Leenheer",
-          "email": "niels@leenheer.nl",
-          "role": "Developer"
-        }
-      ],
-      "description": "Useragent sniffing library for PHP",
-      "homepage": "http://whichbrowser.net",
-      "keywords": ["browser", "sniffing", "ua", "useragent"],
-      "support": {
-        "issues": "https://github.com/WhichBrowser/Parser-PHP/issues",
-        "source": "https://github.com/WhichBrowser/Parser-PHP/tree/v2.1.2"
-      },
-      "time": "2021-05-10T10:18:11+00:00"
-    }
-  ],
-  "packages-dev": [
-    {
-      "name": "captainhook/captainhook",
-      "version": "5.10.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/captainhookphp/captainhook.git",
-        "reference": "2ee0cc1e356b95b3482be304bb31c68fe72d8ad6"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/captainhookphp/captainhook/zipball/2ee0cc1e356b95b3482be304bb31c68fe72d8ad6",
-        "reference": "2ee0cc1e356b95b3482be304bb31c68fe72d8ad6",
-        "shasum": ""
-      },
-      "require": {
-        "ext-json": "*",
-        "ext-spl": "*",
-        "ext-xml": "*",
-        "php": ">=7.2",
-        "sebastianfeldmann/camino": "^0.9.2",
-        "sebastianfeldmann/cli": "^3.3",
-        "sebastianfeldmann/git": "^3.7",
-        "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0",
-        "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0",
-        "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0"
-      },
-      "replace": {
-        "sebastianfeldmann/captainhook": "*"
-      },
-      "require-dev": {
-        "composer/composer": "~1",
-        "mikey179/vfsstream": "~1"
-      },
-      "bin": ["bin/captainhook"],
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "6.0.x-dev"
-        },
-        "captainhook": {
-          "config": "captainhook.json"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "CaptainHook\\App\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Sebastian Feldmann",
-          "email": "sf@sebastian-feldmann.info"
-        }
-      ],
-      "description": "PHP git hook manager",
-      "homepage": "https://github.com/captainhookphp/captainhook",
-      "keywords": [
-        "commit-msg",
-        "git",
-        "hooks",
-        "post-merge",
-        "pre-commit",
-        "pre-push",
-        "prepare-commit-msg"
-      ],
-      "support": {
-        "issues": "https://github.com/captainhookphp/captainhook/issues",
-        "source": "https://github.com/captainhookphp/captainhook/tree/5.10.0"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sponsors/sebastianfeldmann",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-15T12:39:06+00:00"
-    },
-    {
-      "name": "doctrine/instantiator",
-      "version": "1.4.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/doctrine/instantiator.git",
-        "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
-        "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.1 || ^8.0"
-      },
-      "require-dev": {
-        "doctrine/coding-standard": "^8.0",
-        "ext-pdo": "*",
-        "ext-phar": "*",
-        "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
-        "phpstan/phpstan": "^0.12",
-        "phpstan/phpstan-phpunit": "^0.12",
-        "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Marco Pivetta",
-          "email": "ocramius@gmail.com",
-          "homepage": "https://ocramius.github.io/"
-        }
-      ],
-      "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-      "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
-      "keywords": ["constructor", "instantiate"],
-      "support": {
-        "issues": "https://github.com/doctrine/instantiator/issues",
-        "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
-      },
-      "funding": [
-        {
-          "url": "https://www.doctrine-project.org/sponsorship.html",
-          "type": "custom"
-        },
-        {
-          "url": "https://www.patreon.com/phpdoctrine",
-          "type": "patreon"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2020-11-10T18:47:58+00:00"
-    },
-    {
-      "name": "mikey179/vfsstream",
-      "version": "v1.6.8",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/bovigo/vfsStream.git",
-        "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/231c73783ebb7dd9ec77916c10037eff5a2b6efe",
-        "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=5.3.0"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^4.5|^5.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.6.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-0": {
-          "org\\bovigo\\vfs\\": "src/main/php"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Frank Kleine",
-          "homepage": "http://frankkleine.de/",
-          "role": "Developer"
-        }
-      ],
-      "description": "Virtual file system to mock the real file system in unit tests.",
-      "homepage": "http://vfs.bovigo.org/",
-      "support": {
-        "issues": "https://github.com/bovigo/vfsStream/issues",
-        "source": "https://github.com/bovigo/vfsStream/tree/master",
-        "wiki": "https://github.com/bovigo/vfsStream/wiki"
-      },
-      "time": "2019-10-30T15:31:00+00:00"
-    },
-    {
-      "name": "myclabs/deep-copy",
-      "version": "1.10.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/myclabs/DeepCopy.git",
-        "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
-        "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.1 || ^8.0"
-      },
-      "replace": {
-        "myclabs/deep-copy": "self.version"
-      },
-      "require-dev": {
-        "doctrine/collections": "^1.0",
-        "doctrine/common": "^2.6",
-        "phpunit/phpunit": "^7.1"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "DeepCopy\\": "src/DeepCopy/"
-        },
-        "files": ["src/DeepCopy/deep_copy.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Create deep copies (clones) of your objects",
-      "keywords": ["clone", "copy", "duplicate", "object", "object graph"],
-      "support": {
-        "issues": "https://github.com/myclabs/DeepCopy/issues",
-        "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
-      },
-      "funding": [
-        {
-          "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2020-11-13T09:40:50+00:00"
-    },
-    {
-      "name": "nette/neon",
-      "version": "v3.2.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/nette/neon.git",
-        "reference": "e4ca6f4669121ca6876b1d048c612480e39a28d5"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/nette/neon/zipball/e4ca6f4669121ca6876b1d048c612480e39a28d5",
-        "reference": "e4ca6f4669121ca6876b1d048c612480e39a28d5",
-        "shasum": ""
-      },
-      "require": {
-        "ext-json": "*",
-        "php": ">=7.1"
-      },
-      "require-dev": {
-        "nette/tester": "^2.0",
-        "phpstan/phpstan": "^0.12",
-        "tracy/tracy": "^2.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "3.2-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"],
-      "authors": [
-        {
-          "name": "David Grudl",
-          "homepage": "https://davidgrudl.com"
-        },
-        {
-          "name": "Nette Community",
-          "homepage": "https://nette.org/contributors"
-        }
-      ],
-      "description": "🍸 Nette NEON: encodes and decodes NEON file format.",
-      "homepage": "https://ne-on.org",
-      "keywords": ["export", "import", "neon", "nette", "yaml"],
-      "support": {
-        "issues": "https://github.com/nette/neon/issues",
-        "source": "https://github.com/nette/neon/tree/v3.2.2"
-      },
-      "time": "2021-02-28T12:30:32+00:00"
-    },
-    {
-      "name": "nette/utils",
-      "version": "v3.2.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/nette/utils.git",
-        "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/nette/utils/zipball/967cfc4f9a1acd5f1058d76715a424c53343c20c",
-        "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2 <8.1"
-      },
-      "conflict": {
-        "nette/di": "<3.0.6"
-      },
-      "require-dev": {
-        "nette/tester": "~2.0",
-        "phpstan/phpstan": "^0.12",
-        "tracy/tracy": "^2.3"
-      },
-      "suggest": {
-        "ext-gd": "to use Image",
-        "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
-        "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
-        "ext-json": "to use Nette\\Utils\\Json",
-        "ext-mbstring": "to use Strings::lower() etc...",
-        "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()",
-        "ext-xml": "to use Strings::length() etc. when mbstring is not available"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "3.2-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"],
-      "authors": [
-        {
-          "name": "David Grudl",
-          "homepage": "https://davidgrudl.com"
-        },
-        {
-          "name": "Nette Community",
-          "homepage": "https://nette.org/contributors"
-        }
-      ],
-      "description": "🛠  Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
-      "homepage": "https://nette.org",
-      "keywords": [
-        "array",
-        "core",
-        "datetime",
-        "images",
-        "json",
-        "nette",
-        "paginator",
-        "password",
-        "slugify",
-        "string",
-        "unicode",
-        "utf-8",
-        "utility",
-        "validation"
-      ],
-      "support": {
-        "issues": "https://github.com/nette/utils/issues",
-        "source": "https://github.com/nette/utils/tree/v3.2.2"
-      },
-      "time": "2021-03-03T22:53:25+00:00"
-    },
-    {
-      "name": "nikic/php-parser",
-      "version": "v4.10.5",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/nikic/PHP-Parser.git",
-        "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f",
-        "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f",
-        "shasum": ""
-      },
-      "require": {
-        "ext-tokenizer": "*",
-        "php": ">=7.0"
-      },
-      "require-dev": {
-        "ircmaxell/php-yacc": "^0.0.7",
-        "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
-      },
-      "bin": ["bin/php-parse"],
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "4.9-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "PhpParser\\": "lib/PhpParser"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Nikita Popov"
-        }
-      ],
-      "description": "A PHP parser written in PHP",
-      "keywords": ["parser", "php"],
-      "support": {
-        "issues": "https://github.com/nikic/PHP-Parser/issues",
-        "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5"
-      },
-      "time": "2021-05-03T19:11:20+00:00"
-    },
-    {
-      "name": "phar-io/manifest",
-      "version": "2.0.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phar-io/manifest.git",
-        "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
-        "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
-        "shasum": ""
-      },
-      "require": {
-        "ext-dom": "*",
-        "ext-phar": "*",
-        "ext-xmlwriter": "*",
-        "phar-io/version": "^3.0.1",
-        "php": "^7.2 || ^8.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "2.0.x-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Arne Blankerts",
-          "email": "arne@blankerts.de",
-          "role": "Developer"
-        },
-        {
-          "name": "Sebastian Heuer",
-          "email": "sebastian@phpeople.de",
-          "role": "Developer"
-        },
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "Developer"
-        }
-      ],
-      "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
-      "support": {
-        "issues": "https://github.com/phar-io/manifest/issues",
-        "source": "https://github.com/phar-io/manifest/tree/master"
-      },
-      "time": "2020-06-27T14:33:11+00:00"
-    },
-    {
-      "name": "phar-io/version",
-      "version": "3.1.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phar-io/version.git",
-        "reference": "bae7c545bef187884426f042434e561ab1ddb182"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
-        "reference": "bae7c545bef187884426f042434e561ab1ddb182",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.2 || ^8.0"
-      },
-      "type": "library",
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Arne Blankerts",
-          "email": "arne@blankerts.de",
-          "role": "Developer"
-        },
-        {
-          "name": "Sebastian Heuer",
-          "email": "sebastian@phpeople.de",
-          "role": "Developer"
-        },
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "Developer"
-        }
-      ],
-      "description": "Library for handling version information and constraints",
-      "support": {
-        "issues": "https://github.com/phar-io/version/issues",
-        "source": "https://github.com/phar-io/version/tree/3.1.0"
-      },
-      "time": "2021-02-23T14:00:09+00:00"
-    },
-    {
-      "name": "phpdocumentor/reflection-common",
-      "version": "2.2.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-        "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
-        "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.2 || ^8.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-2.x": "2.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "phpDocumentor\\Reflection\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Jaap van Otterdijk",
-          "email": "opensource@ijaap.nl"
-        }
-      ],
-      "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
-      "homepage": "http://www.phpdoc.org",
-      "keywords": [
-        "FQSEN",
-        "phpDocumentor",
-        "phpdoc",
-        "reflection",
-        "static analysis"
-      ],
-      "support": {
-        "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
-        "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
-      },
-      "time": "2020-06-27T09:03:43+00:00"
-    },
-    {
-      "name": "phpdocumentor/reflection-docblock",
-      "version": "5.2.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-        "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
-        "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
-        "shasum": ""
-      },
-      "require": {
-        "ext-filter": "*",
-        "php": "^7.2 || ^8.0",
-        "phpdocumentor/reflection-common": "^2.2",
-        "phpdocumentor/type-resolver": "^1.3",
-        "webmozart/assert": "^1.9.1"
-      },
-      "require-dev": {
-        "mockery/mockery": "~1.3.2"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "5.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "phpDocumentor\\Reflection\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Mike van Riel",
-          "email": "me@mikevanriel.com"
-        },
-        {
-          "name": "Jaap van Otterdijk",
-          "email": "account@ijaap.nl"
-        }
-      ],
-      "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-      "support": {
-        "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-        "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
-      },
-      "time": "2020-09-03T19:13:55+00:00"
-    },
-    {
-      "name": "phpdocumentor/type-resolver",
-      "version": "1.4.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phpDocumentor/TypeResolver.git",
-        "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
-        "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.2 || ^8.0",
-        "phpdocumentor/reflection-common": "^2.0"
-      },
-      "require-dev": {
-        "ext-tokenizer": "*"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-1.x": "1.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "phpDocumentor\\Reflection\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Mike van Riel",
-          "email": "me@mikevanriel.com"
-        }
-      ],
-      "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
-      "support": {
-        "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
-        "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0"
-      },
-      "time": "2020-09-17T18:55:26+00:00"
-    },
-    {
-      "name": "phpspec/prophecy",
-      "version": "1.13.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phpspec/prophecy.git",
-        "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea",
-        "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea",
-        "shasum": ""
-      },
-      "require": {
-        "doctrine/instantiator": "^1.2",
-        "php": "^7.2 || ~8.0, <8.1",
-        "phpdocumentor/reflection-docblock": "^5.2",
-        "sebastian/comparator": "^3.0 || ^4.0",
-        "sebastian/recursion-context": "^3.0 || ^4.0"
-      },
-      "require-dev": {
-        "phpspec/phpspec": "^6.0",
-        "phpunit/phpunit": "^8.0 || ^9.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.11.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Prophecy\\": "src/Prophecy"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Konstantin Kudryashov",
-          "email": "ever.zet@gmail.com",
-          "homepage": "http://everzet.com"
-        },
-        {
-          "name": "Marcello Duarte",
-          "email": "marcello.duarte@gmail.com"
-        }
-      ],
-      "description": "Highly opinionated mocking framework for PHP 5.3+",
-      "homepage": "https://github.com/phpspec/prophecy",
-      "keywords": ["Double", "Dummy", "fake", "mock", "spy", "stub"],
-      "support": {
-        "issues": "https://github.com/phpspec/prophecy/issues",
-        "source": "https://github.com/phpspec/prophecy/tree/1.13.0"
-      },
-      "time": "2021-03-17T13:42:18+00:00"
-    },
-    {
-      "name": "phpstan/extension-installer",
-      "version": "1.1.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phpstan/extension-installer.git",
-        "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/66c7adc9dfa38b6b5838a9fb728b68a7d8348051",
-        "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051",
-        "shasum": ""
-      },
-      "require": {
-        "composer-plugin-api": "^1.1 || ^2.0",
-        "php": "^7.1 || ^8.0",
-        "phpstan/phpstan": ">=0.11.6"
-      },
-      "require-dev": {
-        "composer/composer": "^1.8",
-        "phing/phing": "^2.16.3",
-        "php-parallel-lint/php-parallel-lint": "^1.2.0",
-        "phpstan/phpstan-strict-rules": "^0.11 || ^0.12"
-      },
-      "type": "composer-plugin",
-      "extra": {
-        "class": "PHPStan\\ExtensionInstaller\\Plugin"
-      },
-      "autoload": {
-        "psr-4": {
-          "PHPStan\\ExtensionInstaller\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Composer plugin for automatic installation of PHPStan extensions",
-      "support": {
-        "issues": "https://github.com/phpstan/extension-installer/issues",
-        "source": "https://github.com/phpstan/extension-installer/tree/1.1.0"
-      },
-      "time": "2020-12-13T13:06:13+00:00"
-    },
-    {
-      "name": "phpstan/phpdoc-parser",
-      "version": "0.5.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phpstan/phpdoc-parser.git",
-        "reference": "e352d065af1ae9b41c12d1dfd309e90f7b1f55c9"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/e352d065af1ae9b41c12d1dfd309e90f7b1f55c9",
-        "reference": "e352d065af1ae9b41c12d1dfd309e90f7b1f55c9",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.1 || ^8.0"
-      },
-      "require-dev": {
-        "phing/phing": "^2.16.3",
-        "php-parallel-lint/php-parallel-lint": "^1.2",
-        "phpstan/extension-installer": "^1.0",
-        "phpstan/phpstan": "^0.12.60",
-        "phpstan/phpstan-strict-rules": "^0.12.5",
-        "phpunit/phpunit": "^7.5.20",
-        "symfony/process": "^5.2"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "0.5-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "PHPStan\\PhpDocParser\\": ["src/"]
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "PHPDoc parser with support for nullable, intersection and generic types",
-      "support": {
-        "issues": "https://github.com/phpstan/phpdoc-parser/issues",
-        "source": "https://github.com/phpstan/phpdoc-parser/tree/0.5.4"
-      },
-      "time": "2021-04-03T14:46:19+00:00"
-    },
-    {
-      "name": "phpstan/phpstan",
-      "version": "0.12.86",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/phpstan/phpstan.git",
-        "reference": "a84fdc53ecca7643dbc89ef8880d8b393a6c155a"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a84fdc53ecca7643dbc89ef8880d8b393a6c155a",
-        "reference": "a84fdc53ecca7643dbc89ef8880d8b393a6c155a",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.1|^8.0"
-      },
-      "conflict": {
-        "phpstan/phpstan-shim": "*"
-      },
-      "bin": ["phpstan", "phpstan.phar"],
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "0.12-dev"
-        }
-      },
-      "autoload": {
-        "files": ["bootstrap.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "PHPStan - PHP Static Analysis Tool",
-      "support": {
-        "issues": "https://github.com/phpstan/phpstan/issues",
-        "source": "https://github.com/phpstan/phpstan/tree/0.12.86"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/ondrejmirtes",
-          "type": "github"
-        },
-        {
-          "url": "https://www.patreon.com/phpstan",
-          "type": "patreon"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-08T11:29:01+00:00"
-    },
-    {
-      "name": "phpunit/php-code-coverage",
-      "version": "9.2.6",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-        "reference": "f6293e1b30a2354e8428e004689671b83871edde"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde",
-        "reference": "f6293e1b30a2354e8428e004689671b83871edde",
-        "shasum": ""
-      },
-      "require": {
-        "ext-dom": "*",
-        "ext-libxml": "*",
-        "ext-xmlwriter": "*",
-        "nikic/php-parser": "^4.10.2",
-        "php": ">=7.3",
-        "phpunit/php-file-iterator": "^3.0.3",
-        "phpunit/php-text-template": "^2.0.2",
-        "sebastian/code-unit-reverse-lookup": "^2.0.2",
-        "sebastian/complexity": "^2.0",
-        "sebastian/environment": "^5.1.2",
-        "sebastian/lines-of-code": "^1.0.3",
-        "sebastian/version": "^3.0.1",
-        "theseer/tokenizer": "^1.2.0"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "suggest": {
-        "ext-pcov": "*",
-        "ext-xdebug": "*"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "9.2-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-      "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
-      "keywords": ["coverage", "testing", "xunit"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
-        "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2021-03-28T07:26:59+00:00"
-    },
-    {
-      "name": "phpunit/php-file-iterator",
-      "version": "3.0.5",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-        "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
-        "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "3.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-      "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-      "keywords": ["filesystem", "iterator"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
-        "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-09-28T05:57:25+00:00"
-    },
-    {
-      "name": "phpunit/php-invoker",
-      "version": "3.1.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/php-invoker.git",
-        "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
-        "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "ext-pcntl": "*",
-        "phpunit/phpunit": "^9.3"
-      },
-      "suggest": {
-        "ext-pcntl": "*"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "3.1-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Invoke callables with a timeout",
-      "homepage": "https://github.com/sebastianbergmann/php-invoker/",
-      "keywords": ["process"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
-        "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-09-28T05:58:55+00:00"
-    },
-    {
-      "name": "phpunit/php-text-template",
-      "version": "2.0.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/php-text-template.git",
-        "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
-        "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "2.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Simple template engine.",
-      "homepage": "https://github.com/sebastianbergmann/php-text-template/",
-      "keywords": ["template"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
-        "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T05:33:50+00:00"
-    },
-    {
-      "name": "phpunit/php-timer",
-      "version": "5.0.3",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/php-timer.git",
-        "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
-        "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "5.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Utility class for timing",
-      "homepage": "https://github.com/sebastianbergmann/php-timer/",
-      "keywords": ["timer"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/php-timer/issues",
-        "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T13:16:10+00:00"
-    },
-    {
-      "name": "phpunit/phpunit",
-      "version": "9.5.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/phpunit.git",
-        "reference": "c73c6737305e779771147af66c96ca6a7ed8a741"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741",
-        "reference": "c73c6737305e779771147af66c96ca6a7ed8a741",
-        "shasum": ""
-      },
-      "require": {
-        "doctrine/instantiator": "^1.3.1",
-        "ext-dom": "*",
-        "ext-json": "*",
-        "ext-libxml": "*",
-        "ext-mbstring": "*",
-        "ext-xml": "*",
-        "ext-xmlwriter": "*",
-        "myclabs/deep-copy": "^1.10.1",
-        "phar-io/manifest": "^2.0.1",
-        "phar-io/version": "^3.0.2",
-        "php": ">=7.3",
-        "phpspec/prophecy": "^1.12.1",
-        "phpunit/php-code-coverage": "^9.2.3",
-        "phpunit/php-file-iterator": "^3.0.5",
-        "phpunit/php-invoker": "^3.1.1",
-        "phpunit/php-text-template": "^2.0.3",
-        "phpunit/php-timer": "^5.0.2",
-        "sebastian/cli-parser": "^1.0.1",
-        "sebastian/code-unit": "^1.0.6",
-        "sebastian/comparator": "^4.0.5",
-        "sebastian/diff": "^4.0.3",
-        "sebastian/environment": "^5.1.3",
-        "sebastian/exporter": "^4.0.3",
-        "sebastian/global-state": "^5.0.1",
-        "sebastian/object-enumerator": "^4.0.3",
-        "sebastian/resource-operations": "^3.0.3",
-        "sebastian/type": "^2.3",
-        "sebastian/version": "^3.0.2"
-      },
-      "require-dev": {
-        "ext-pdo": "*",
-        "phpspec/prophecy-phpunit": "^2.0.1"
-      },
-      "suggest": {
-        "ext-soap": "*",
-        "ext-xdebug": "*"
-      },
-      "bin": ["phpunit"],
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "9.5-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"],
-        "files": ["src/Framework/Assert/Functions.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "The PHP Unit Testing framework.",
-      "homepage": "https://phpunit.de/",
-      "keywords": ["phpunit", "testing", "xunit"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/phpunit/issues",
-        "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.4"
-      },
-      "funding": [
-        {
-          "url": "https://phpunit.de/donate.html",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2021-03-23T07:16:29+00:00"
-    },
-    {
-      "name": "psr/container",
-      "version": "1.1.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/php-fig/container.git",
-        "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
-        "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.0"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Psr\\Container\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "PHP-FIG",
-          "homepage": "https://www.php-fig.org/"
-        }
-      ],
-      "description": "Common Container Interface (PHP FIG PSR-11)",
-      "homepage": "https://github.com/php-fig/container",
-      "keywords": [
-        "PSR-11",
-        "container",
-        "container-interface",
-        "container-interop",
-        "psr"
-      ],
-      "support": {
-        "issues": "https://github.com/php-fig/container/issues",
-        "source": "https://github.com/php-fig/container/tree/1.1.1"
-      },
-      "time": "2021-03-05T17:36:06+00:00"
-    },
-    {
-      "name": "psr/event-dispatcher",
-      "version": "1.0.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/php-fig/event-dispatcher.git",
-        "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
-        "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.0.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Psr\\EventDispatcher\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "PHP-FIG",
-          "homepage": "http://www.php-fig.org/"
-        }
-      ],
-      "description": "Standard interfaces for event handling.",
-      "keywords": ["events", "psr", "psr-14"],
-      "support": {
-        "issues": "https://github.com/php-fig/event-dispatcher/issues",
-        "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
-      },
-      "time": "2019-01-08T18:20:26+00:00"
-    },
-    {
-      "name": "rector/rector",
-      "version": "0.11.5",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/rectorphp/rector.git",
-        "reference": "270eaef34d0f34b49ad0fc3e44cff377b9aa04ce"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/rectorphp/rector/zipball/270eaef34d0f34b49ad0fc3e44cff377b9aa04ce",
-        "reference": "270eaef34d0f34b49ad0fc3e44cff377b9aa04ce",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.1|^8.0",
-        "phpstan/phpstan": "0.12.86"
-      },
-      "conflict": {
-        "phpstan/phpdoc-parser": "<=0.5.3",
-        "phpstan/phpstan": "<=0.12.82",
-        "rector/rector-cakephp": "*",
-        "rector/rector-doctrine": "*",
-        "rector/rector-nette": "*",
-        "rector/rector-nette-to-symfony": "*",
-        "rector/rector-phpunit": "*",
-        "rector/rector-prefixed": "*",
-        "rector/rector-symfony": "*"
-      },
-      "bin": ["bin/rector"],
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "0.10-dev"
-        }
-      },
-      "autoload": {
-        "files": ["bootstrap.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Prefixed and PHP 7.1 downgraded version of rector/rector",
-      "support": {
-        "issues": "https://github.com/rectorphp/rector/issues",
-        "source": "https://github.com/rectorphp/rector/tree/0.11.5"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-18T13:45:09+00:00"
-    },
-    {
-      "name": "rector/rector-phpstan-rules",
-      "version": "0.2.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/rectorphp/phpstan-rules.git",
-        "reference": "84b2034aab951be7e86dc6cc7e141ee92a3d115b"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/rectorphp/phpstan-rules/zipball/84b2034aab951be7e86dc6cc7e141ee92a3d115b",
-        "reference": "84b2034aab951be7e86dc6cc7e141ee92a3d115b",
-        "shasum": ""
-      },
-      "require": {
-        "nette/utils": "^3.2",
-        "php": ">=7.3",
-        "phpstan/phpstan": "^0.12.86",
-        "symplify/phpstan-rules": "^9.3.5"
-      },
-      "require-dev": {
-        "phpstan/extension-installer": "^1.1",
-        "phpunit/phpunit": "^9.5",
-        "symplify/easy-coding-standard": "^9.3",
-        "symplify/phpstan-extensions": "^9.3"
-      },
-      "type": "phpstan-extension",
-      "extra": {
-        "phpstan": {
-          "includes": ["config/config.neon"]
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Rector\\PHPStanRules\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "PHPStan rules for Rector projects - with focus on static reflection, constant re-use and Rector design patterns",
-      "support": {
-        "issues": "https://github.com/rectorphp/phpstan-rules/issues",
-        "source": "https://github.com/rectorphp/phpstan-rules/tree/0.2.12"
-      },
-      "time": "2021-05-20T22:31:19+00:00"
-    },
-    {
-      "name": "sebastian/cli-parser",
-      "version": "1.0.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/cli-parser.git",
-        "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
-        "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Library for parsing CLI options",
-      "homepage": "https://github.com/sebastianbergmann/cli-parser",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
-        "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-09-28T06:08:49+00:00"
-    },
-    {
-      "name": "sebastian/code-unit",
-      "version": "1.0.8",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/code-unit.git",
-        "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
-        "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Collection of value objects that represent the PHP code units",
-      "homepage": "https://github.com/sebastianbergmann/code-unit",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/code-unit/issues",
-        "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T13:08:54+00:00"
-    },
-    {
-      "name": "sebastian/code-unit-reverse-lookup",
-      "version": "2.0.3",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
-        "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
-        "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "2.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        }
-      ],
-      "description": "Looks up which function or method a line of code belongs to",
-      "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
-        "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-09-28T05:30:19+00:00"
-    },
-    {
-      "name": "sebastian/comparator",
-      "version": "4.0.6",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/comparator.git",
-        "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
-        "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3",
-        "sebastian/diff": "^4.0",
-        "sebastian/exporter": "^4.0"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "4.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        },
-        {
-          "name": "Jeff Welch",
-          "email": "whatthejeff@gmail.com"
-        },
-        {
-          "name": "Volker Dusch",
-          "email": "github@wallbash.com"
-        },
-        {
-          "name": "Bernhard Schussek",
-          "email": "bschussek@2bepublished.at"
-        }
-      ],
-      "description": "Provides the functionality to compare PHP values for equality",
-      "homepage": "https://github.com/sebastianbergmann/comparator",
-      "keywords": ["comparator", "compare", "equality"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/comparator/issues",
-        "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T15:49:45+00:00"
-    },
-    {
-      "name": "sebastian/complexity",
-      "version": "2.0.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/complexity.git",
-        "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
-        "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
-        "shasum": ""
-      },
-      "require": {
-        "nikic/php-parser": "^4.7",
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "2.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Library for calculating the complexity of PHP code units",
-      "homepage": "https://github.com/sebastianbergmann/complexity",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/complexity/issues",
-        "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T15:52:27+00:00"
-    },
-    {
-      "name": "sebastian/diff",
-      "version": "4.0.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/diff.git",
-        "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
-        "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3",
-        "symfony/process": "^4.2 || ^5"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "4.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        },
-        {
-          "name": "Kore Nordmann",
-          "email": "mail@kore-nordmann.de"
-        }
-      ],
-      "description": "Diff implementation",
-      "homepage": "https://github.com/sebastianbergmann/diff",
-      "keywords": ["diff", "udiff", "unidiff", "unified diff"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/diff/issues",
-        "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T13:10:38+00:00"
-    },
-    {
-      "name": "sebastian/environment",
-      "version": "5.1.3",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/environment.git",
-        "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
-        "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "suggest": {
-        "ext-posix": "*"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "5.1-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        }
-      ],
-      "description": "Provides functionality to handle HHVM/PHP environments",
-      "homepage": "http://www.github.com/sebastianbergmann/environment",
-      "keywords": ["Xdebug", "environment", "hhvm"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/environment/issues",
-        "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-09-28T05:52:38+00:00"
-    },
-    {
-      "name": "sebastian/exporter",
-      "version": "4.0.3",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/exporter.git",
-        "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
-        "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3",
-        "sebastian/recursion-context": "^4.0"
-      },
-      "require-dev": {
-        "ext-mbstring": "*",
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "4.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        },
-        {
-          "name": "Jeff Welch",
-          "email": "whatthejeff@gmail.com"
-        },
-        {
-          "name": "Volker Dusch",
-          "email": "github@wallbash.com"
-        },
-        {
-          "name": "Adam Harvey",
-          "email": "aharvey@php.net"
-        },
-        {
-          "name": "Bernhard Schussek",
-          "email": "bschussek@gmail.com"
-        }
-      ],
-      "description": "Provides the functionality to export PHP variables for visualization",
-      "homepage": "http://www.github.com/sebastianbergmann/exporter",
-      "keywords": ["export", "exporter"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/exporter/issues",
-        "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-09-28T05:24:23+00:00"
-    },
-    {
-      "name": "sebastian/global-state",
-      "version": "5.0.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/global-state.git",
-        "reference": "a90ccbddffa067b51f574dea6eb25d5680839455"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455",
-        "reference": "a90ccbddffa067b51f574dea6eb25d5680839455",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3",
-        "sebastian/object-reflector": "^2.0",
-        "sebastian/recursion-context": "^4.0"
-      },
-      "require-dev": {
-        "ext-dom": "*",
-        "phpunit/phpunit": "^9.3"
-      },
-      "suggest": {
-        "ext-uopz": "*"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "5.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        }
-      ],
-      "description": "Snapshotting of global state",
-      "homepage": "http://www.github.com/sebastianbergmann/global-state",
-      "keywords": ["global state"],
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/global-state/issues",
-        "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T15:55:19+00:00"
-    },
-    {
-      "name": "sebastian/lines-of-code",
-      "version": "1.0.3",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/lines-of-code.git",
-        "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
-        "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
-        "shasum": ""
-      },
-      "require": {
-        "nikic/php-parser": "^4.6",
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Library for counting the lines of code in PHP source code",
-      "homepage": "https://github.com/sebastianbergmann/lines-of-code",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
-        "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-11-28T06:42:11+00:00"
-    },
-    {
-      "name": "sebastian/object-enumerator",
-      "version": "4.0.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/object-enumerator.git",
-        "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
-        "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3",
-        "sebastian/object-reflector": "^2.0",
-        "sebastian/recursion-context": "^4.0"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "4.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        }
-      ],
-      "description": "Traverses array structures and object graphs to enumerate all referenced objects",
-      "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
-        "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T13:12:34+00:00"
-    },
-    {
-      "name": "sebastian/object-reflector",
-      "version": "2.0.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/object-reflector.git",
-        "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
-        "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "2.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        }
-      ],
-      "description": "Allows reflection of object attributes, including inherited and non-public ones",
-      "homepage": "https://github.com/sebastianbergmann/object-reflector/",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
-        "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T13:14:26+00:00"
-    },
-    {
-      "name": "sebastian/recursion-context",
-      "version": "4.0.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/recursion-context.git",
-        "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
-        "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "4.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        },
-        {
-          "name": "Jeff Welch",
-          "email": "whatthejeff@gmail.com"
-        },
-        {
-          "name": "Adam Harvey",
-          "email": "aharvey@php.net"
-        }
-      ],
-      "description": "Provides functionality to recursively process PHP variables",
-      "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
-        "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T13:17:30+00:00"
-    },
-    {
-      "name": "sebastian/resource-operations",
-      "version": "3.0.3",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/resource-operations.git",
-        "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
-        "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "3.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de"
-        }
-      ],
-      "description": "Provides a list of PHP built-in functions that operate on resources",
-      "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
-        "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-09-28T06:45:17+00:00"
-    },
-    {
-      "name": "sebastian/type",
-      "version": "2.3.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/type.git",
-        "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2",
-        "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "2.3-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Collection of value objects that represent the types of the PHP type system",
-      "homepage": "https://github.com/sebastianbergmann/type",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/type/issues",
-        "source": "https://github.com/sebastianbergmann/type/tree/2.3.1"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-10-26T13:18:59+00:00"
-    },
-    {
-      "name": "sebastian/version",
-      "version": "3.0.2",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianbergmann/version.git",
-        "reference": "c6c1022351a901512170118436c764e473f6de8c"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
-        "reference": "c6c1022351a901512170118436c764e473f6de8c",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "3.0-dev"
-        }
-      },
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Sebastian Bergmann",
-          "email": "sebastian@phpunit.de",
-          "role": "lead"
-        }
-      ],
-      "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-      "homepage": "https://github.com/sebastianbergmann/version",
-      "support": {
-        "issues": "https://github.com/sebastianbergmann/version/issues",
-        "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianbergmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-09-28T06:39:44+00:00"
-    },
-    {
-      "name": "sebastianfeldmann/camino",
-      "version": "0.9.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianfeldmann/camino.git",
-        "reference": "3b611368e22e8565c3a6504613136402ed9e6f69"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianfeldmann/camino/zipball/3b611368e22e8565c3a6504613136402ed9e6f69",
-        "reference": "3b611368e22e8565c3a6504613136402ed9e6f69",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.1"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.0.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "SebastianFeldmann\\Camino\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Sebastian Feldmann",
-          "email": "sf@sebastian-feldmann.info"
-        }
-      ],
-      "description": "Path management the OO way",
-      "homepage": "https://github.com/sebastianfeldmann/camino",
-      "keywords": ["file system", "path"],
-      "support": {
-        "issues": "https://github.com/sebastianfeldmann/camino/issues",
-        "source": "https://github.com/sebastianfeldmann/camino/tree/0.9.4"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianfeldmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-12-08T09:25:24+00:00"
-    },
-    {
-      "name": "sebastianfeldmann/cli",
-      "version": "3.3.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianfeldmann/cli.git",
-        "reference": "490a6ba01d62e56d597b4d3377024feb87871f6f"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/490a6ba01d62e56d597b4d3377024feb87871f6f",
-        "reference": "490a6ba01d62e56d597b4d3377024feb87871f6f",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2"
-      },
-      "require-dev": {
-        "symfony/process": "^4.3 | ^5.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "3.4.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "SebastianFeldmann\\Cli\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Sebastian Feldmann",
-          "email": "sf@sebastian-feldmann.info"
-        }
-      ],
-      "description": "PHP cli helper classes",
-      "homepage": "https://github.com/sebastianfeldmann/cli",
-      "keywords": ["cli"],
-      "support": {
-        "issues": "https://github.com/sebastianfeldmann/cli/issues",
-        "source": "https://github.com/sebastianfeldmann/cli/tree/3.3.1"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianfeldmann",
-          "type": "github"
-        }
-      ],
-      "time": "2020-12-08T09:20:06+00:00"
-    },
-    {
-      "name": "sebastianfeldmann/git",
-      "version": "3.7.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/sebastianfeldmann/git.git",
-        "reference": "ca827dc741a90043ee46e59a96b1ca88b9ed5264"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/ca827dc741a90043ee46e59a96b1ca88b9ed5264",
-        "reference": "ca827dc741a90043ee46e59a96b1ca88b9ed5264",
-        "shasum": ""
-      },
-      "require": {
-        "ext-json": "*",
-        "ext-xml": "*",
-        "php": ">=7.2",
-        "sebastianfeldmann/cli": "^3.0"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "4.0.x-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "SebastianFeldmann\\Git\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Sebastian Feldmann",
-          "email": "sf@sebastian-feldmann.info"
-        }
-      ],
-      "description": "PHP git wrapper",
-      "homepage": "https://github.com/sebastianfeldmann/git",
-      "keywords": ["git"],
-      "support": {
-        "issues": "https://github.com/sebastianfeldmann/git/issues",
-        "source": "https://github.com/sebastianfeldmann/git/tree/3.7.0"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/sebastianfeldmann",
-          "type": "github"
-        }
-      ],
-      "time": "2021-04-10T08:31:02+00:00"
-    },
-    {
-      "name": "symfony/config",
-      "version": "v5.2.8",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/config.git",
-        "reference": "8dfa5f8adea9cd5155920069224beb04f11d6b7e"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/config/zipball/8dfa5f8adea9cd5155920069224beb04f11d6b7e",
-        "reference": "8dfa5f8adea9cd5155920069224beb04f11d6b7e",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "symfony/deprecation-contracts": "^2.1",
-        "symfony/filesystem": "^4.4|^5.0",
-        "symfony/polyfill-ctype": "~1.8",
-        "symfony/polyfill-php80": "^1.15"
-      },
-      "conflict": {
-        "symfony/finder": "<4.4"
-      },
-      "require-dev": {
-        "symfony/event-dispatcher": "^4.4|^5.0",
-        "symfony/finder": "^4.4|^5.0",
-        "symfony/messenger": "^4.4|^5.0",
-        "symfony/service-contracts": "^1.1|^2",
-        "symfony/yaml": "^4.4|^5.0"
-      },
-      "suggest": {
-        "symfony/yaml": "To use the yaml reference dumper"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\Config\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/config/tree/v5.2.8"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-07T13:41:16+00:00"
-    },
-    {
-      "name": "symfony/console",
-      "version": "v5.2.8",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/console.git",
-        "reference": "864568fdc0208b3eba3638b6000b69d2386e6768"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/console/zipball/864568fdc0208b3eba3638b6000b69d2386e6768",
-        "reference": "864568fdc0208b3eba3638b6000b69d2386e6768",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "symfony/polyfill-mbstring": "~1.0",
-        "symfony/polyfill-php73": "^1.8",
-        "symfony/polyfill-php80": "^1.15",
-        "symfony/service-contracts": "^1.1|^2",
-        "symfony/string": "^5.1"
-      },
-      "conflict": {
-        "symfony/dependency-injection": "<4.4",
-        "symfony/dotenv": "<5.1",
-        "symfony/event-dispatcher": "<4.4",
-        "symfony/lock": "<4.4",
-        "symfony/process": "<4.4"
-      },
-      "provide": {
-        "psr/log-implementation": "1.0"
-      },
-      "require-dev": {
-        "psr/log": "~1.0",
-        "symfony/config": "^4.4|^5.0",
-        "symfony/dependency-injection": "^4.4|^5.0",
-        "symfony/event-dispatcher": "^4.4|^5.0",
-        "symfony/lock": "^4.4|^5.0",
-        "symfony/process": "^4.4|^5.0",
-        "symfony/var-dumper": "^4.4|^5.0"
-      },
-      "suggest": {
-        "psr/log": "For using the console logger",
-        "symfony/event-dispatcher": "",
-        "symfony/lock": "",
-        "symfony/process": ""
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\Console\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Eases the creation of beautiful and testable command line interfaces",
-      "homepage": "https://symfony.com",
-      "keywords": ["cli", "command line", "console", "terminal"],
-      "support": {
-        "source": "https://github.com/symfony/console/tree/v5.2.8"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-11T15:45:21+00:00"
-    },
-    {
-      "name": "symfony/dependency-injection",
-      "version": "v5.2.9",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/dependency-injection.git",
-        "reference": "2761ca2f7e2f41af3a45951e1ce8c01f121245eb"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2761ca2f7e2f41af3a45951e1ce8c01f121245eb",
-        "reference": "2761ca2f7e2f41af3a45951e1ce8c01f121245eb",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "psr/container": "^1.0",
-        "symfony/deprecation-contracts": "^2.1",
-        "symfony/polyfill-php80": "^1.15",
-        "symfony/service-contracts": "^1.1.6|^2"
-      },
-      "conflict": {
-        "symfony/config": "<5.1",
-        "symfony/finder": "<4.4",
-        "symfony/proxy-manager-bridge": "<4.4",
-        "symfony/yaml": "<4.4"
-      },
-      "provide": {
-        "psr/container-implementation": "1.0",
-        "symfony/service-implementation": "1.0|2.0"
-      },
-      "require-dev": {
-        "symfony/config": "^5.1",
-        "symfony/expression-language": "^4.4|^5.0",
-        "symfony/yaml": "^4.4|^5.0"
-      },
-      "suggest": {
-        "symfony/config": "",
-        "symfony/expression-language": "For using expressions in service container configuration",
-        "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
-        "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
-        "symfony/yaml": ""
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\DependencyInjection\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Allows you to standardize and centralize the way objects are constructed in your application",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/dependency-injection/tree/v5.2.9"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-16T13:07:46+00:00"
-    },
-    {
-      "name": "symfony/deprecation-contracts",
-      "version": "v2.4.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/deprecation-contracts.git",
-        "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
-        "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.1"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "2.4-dev"
-        },
-        "thanks": {
-          "name": "symfony/contracts",
-          "url": "https://github.com/symfony/contracts"
-        }
-      },
-      "autoload": {
-        "files": ["function.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "A generic function and convention to trigger deprecation notices",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-03-23T23:28:01+00:00"
-    },
-    {
-      "name": "symfony/error-handler",
-      "version": "v5.2.8",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/error-handler.git",
-        "reference": "1416bc16317a8188aabde251afef7618bf4687ac"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/error-handler/zipball/1416bc16317a8188aabde251afef7618bf4687ac",
-        "reference": "1416bc16317a8188aabde251afef7618bf4687ac",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "psr/log": "^1.0",
-        "symfony/polyfill-php80": "^1.15",
-        "symfony/var-dumper": "^4.4|^5.0"
-      },
-      "require-dev": {
-        "symfony/deprecation-contracts": "^2.1",
-        "symfony/http-kernel": "^4.4|^5.0",
-        "symfony/serializer": "^4.4|^5.0"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\ErrorHandler\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Provides tools to manage errors and ease debugging PHP code",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/error-handler/tree/v5.2.8"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-07T13:42:21+00:00"
-    },
-    {
-      "name": "symfony/event-dispatcher",
-      "version": "v5.2.4",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/event-dispatcher.git",
-        "reference": "d08d6ec121a425897951900ab692b612a61d6240"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d08d6ec121a425897951900ab692b612a61d6240",
-        "reference": "d08d6ec121a425897951900ab692b612a61d6240",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "symfony/deprecation-contracts": "^2.1",
-        "symfony/event-dispatcher-contracts": "^2",
-        "symfony/polyfill-php80": "^1.15"
-      },
-      "conflict": {
-        "symfony/dependency-injection": "<4.4"
-      },
-      "provide": {
-        "psr/event-dispatcher-implementation": "1.0",
-        "symfony/event-dispatcher-implementation": "2.0"
-      },
-      "require-dev": {
-        "psr/log": "~1.0",
-        "symfony/config": "^4.4|^5.0",
-        "symfony/dependency-injection": "^4.4|^5.0",
-        "symfony/error-handler": "^4.4|^5.0",
-        "symfony/expression-language": "^4.4|^5.0",
-        "symfony/http-foundation": "^4.4|^5.0",
-        "symfony/service-contracts": "^1.1|^2",
-        "symfony/stopwatch": "^4.4|^5.0"
-      },
-      "suggest": {
-        "symfony/dependency-injection": "",
-        "symfony/http-kernel": ""
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\EventDispatcher\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.4"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-02-18T17:12:37+00:00"
-    },
-    {
-      "name": "symfony/event-dispatcher-contracts",
-      "version": "v2.4.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/event-dispatcher-contracts.git",
-        "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11",
-        "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "psr/event-dispatcher": "^1"
-      },
-      "suggest": {
-        "symfony/event-dispatcher-implementation": ""
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "2.4-dev"
-        },
-        "thanks": {
-          "name": "symfony/contracts",
-          "url": "https://github.com/symfony/contracts"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Contracts\\EventDispatcher\\": ""
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Generic abstractions related to dispatching event",
-      "homepage": "https://symfony.com",
-      "keywords": [
-        "abstractions",
-        "contracts",
-        "decoupling",
-        "interfaces",
-        "interoperability",
-        "standards"
-      ],
-      "support": {
-        "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-03-23T23:28:01+00:00"
-    },
-    {
-      "name": "symfony/filesystem",
-      "version": "v5.2.7",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/filesystem.git",
-        "reference": "056e92acc21d977c37e6ea8e97374b2a6c8551b0"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/filesystem/zipball/056e92acc21d977c37e6ea8e97374b2a6c8551b0",
-        "reference": "056e92acc21d977c37e6ea8e97374b2a6c8551b0",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "symfony/polyfill-ctype": "~1.8"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\Filesystem\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Provides basic utilities for the filesystem",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/filesystem/tree/v5.2.7"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-04-01T10:42:13+00:00"
-    },
-    {
-      "name": "symfony/finder",
-      "version": "v5.2.9",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/finder.git",
-        "reference": "ccccb9d48ca42757dd12f2ca4bf857a4e217d90d"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/finder/zipball/ccccb9d48ca42757dd12f2ca4bf857a4e217d90d",
-        "reference": "ccccb9d48ca42757dd12f2ca4bf857a4e217d90d",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\Finder\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Finds files and directories via an intuitive fluent interface",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/finder/tree/v5.2.9"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-16T13:07:46+00:00"
-    },
-    {
-      "name": "symfony/http-client-contracts",
-      "version": "v2.4.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/http-client-contracts.git",
-        "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4",
-        "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5"
-      },
-      "suggest": {
-        "symfony/http-client-implementation": ""
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "2.4-dev"
-        },
-        "thanks": {
-          "name": "symfony/contracts",
-          "url": "https://github.com/symfony/contracts"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Contracts\\HttpClient\\": ""
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Generic abstractions related to HTTP clients",
-      "homepage": "https://symfony.com",
-      "keywords": [
-        "abstractions",
-        "contracts",
-        "decoupling",
-        "interfaces",
-        "interoperability",
-        "standards"
-      ],
-      "support": {
-        "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-04-11T23:07:08+00:00"
-    },
-    {
-      "name": "symfony/http-foundation",
-      "version": "v5.2.8",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/http-foundation.git",
-        "reference": "e8fbbab7c4a71592985019477532629cb2e142dc"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8fbbab7c4a71592985019477532629cb2e142dc",
-        "reference": "e8fbbab7c4a71592985019477532629cb2e142dc",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "symfony/deprecation-contracts": "^2.1",
-        "symfony/polyfill-mbstring": "~1.1",
-        "symfony/polyfill-php80": "^1.15"
-      },
-      "require-dev": {
-        "predis/predis": "~1.0",
-        "symfony/cache": "^4.4|^5.0",
-        "symfony/expression-language": "^4.4|^5.0",
-        "symfony/mime": "^4.4|^5.0"
-      },
-      "suggest": {
-        "symfony/mime": "To use the file extension guesser"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\HttpFoundation\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Defines an object-oriented layer for the HTTP specification",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/http-foundation/tree/v5.2.8"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-07T13:41:16+00:00"
-    },
-    {
-      "name": "symfony/http-kernel",
-      "version": "v5.2.9",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/http-kernel.git",
-        "reference": "eb540ef6870dbf33c92e372cfb869ebf9649e6cb"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/http-kernel/zipball/eb540ef6870dbf33c92e372cfb869ebf9649e6cb",
-        "reference": "eb540ef6870dbf33c92e372cfb869ebf9649e6cb",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "psr/log": "~1.0",
-        "symfony/deprecation-contracts": "^2.1",
-        "symfony/error-handler": "^4.4|^5.0",
-        "symfony/event-dispatcher": "^5.0",
-        "symfony/http-client-contracts": "^1.1|^2",
-        "symfony/http-foundation": "^4.4|^5.0",
-        "symfony/polyfill-ctype": "^1.8",
-        "symfony/polyfill-php73": "^1.9",
-        "symfony/polyfill-php80": "^1.15"
-      },
-      "conflict": {
-        "symfony/browser-kit": "<4.4",
-        "symfony/cache": "<5.0",
-        "symfony/config": "<5.0",
-        "symfony/console": "<4.4",
-        "symfony/dependency-injection": "<5.1.8",
-        "symfony/doctrine-bridge": "<5.0",
-        "symfony/form": "<5.0",
-        "symfony/http-client": "<5.0",
-        "symfony/mailer": "<5.0",
-        "symfony/messenger": "<5.0",
-        "symfony/translation": "<5.0",
-        "symfony/twig-bridge": "<5.0",
-        "symfony/validator": "<5.0",
-        "twig/twig": "<2.13"
-      },
-      "provide": {
-        "psr/log-implementation": "1.0"
-      },
-      "require-dev": {
-        "psr/cache": "^1.0|^2.0|^3.0",
-        "symfony/browser-kit": "^4.4|^5.0",
-        "symfony/config": "^5.0",
-        "symfony/console": "^4.4|^5.0",
-        "symfony/css-selector": "^4.4|^5.0",
-        "symfony/dependency-injection": "^5.1.8",
-        "symfony/dom-crawler": "^4.4|^5.0",
-        "symfony/expression-language": "^4.4|^5.0",
-        "symfony/finder": "^4.4|^5.0",
-        "symfony/process": "^4.4|^5.0",
-        "symfony/routing": "^4.4|^5.0",
-        "symfony/stopwatch": "^4.4|^5.0",
-        "symfony/translation": "^4.4|^5.0",
-        "symfony/translation-contracts": "^1.1|^2",
-        "twig/twig": "^2.13|^3.0.4"
-      },
-      "suggest": {
-        "symfony/browser-kit": "",
-        "symfony/config": "",
-        "symfony/console": "",
-        "symfony/dependency-injection": ""
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\HttpKernel\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Provides a structured process for converting a Request into a Response",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/http-kernel/tree/v5.2.9"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-19T12:23:45+00:00"
-    },
-    {
-      "name": "symfony/polyfill-intl-grapheme",
-      "version": "v1.22.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
-        "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170",
-        "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.1"
-      },
-      "suggest": {
-        "ext-intl": "For best performance"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "1.22-dev"
-        },
-        "thanks": {
-          "name": "symfony/polyfill",
-          "url": "https://github.com/symfony/polyfill"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
-        },
-        "files": ["bootstrap.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Symfony polyfill for intl's grapheme_* functions",
-      "homepage": "https://symfony.com",
-      "keywords": [
-        "compatibility",
-        "grapheme",
-        "intl",
-        "polyfill",
-        "portable",
-        "shim"
-      ],
-      "support": {
-        "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-22T09:19:47+00:00"
-    },
-    {
-      "name": "symfony/polyfill-intl-normalizer",
-      "version": "v1.22.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
-        "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248",
-        "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.1"
-      },
-      "suggest": {
-        "ext-intl": "For best performance"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "1.22-dev"
-        },
-        "thanks": {
-          "name": "symfony/polyfill",
-          "url": "https://github.com/symfony/polyfill"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
-        },
-        "files": ["bootstrap.php"],
-        "classmap": ["Resources/stubs"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Symfony polyfill for intl's Normalizer class and related functions",
-      "homepage": "https://symfony.com",
-      "keywords": [
-        "compatibility",
-        "intl",
-        "normalizer",
-        "polyfill",
-        "portable",
-        "shim"
-      ],
-      "support": {
-        "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-22T09:19:47+00:00"
-    },
-    {
-      "name": "symfony/polyfill-php73",
-      "version": "v1.22.1",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/polyfill-php73.git",
-        "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
-        "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.1"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "1.22-dev"
-        },
-        "thanks": {
-          "name": "symfony/polyfill",
-          "url": "https://github.com/symfony/polyfill"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Polyfill\\Php73\\": ""
-        },
-        "files": ["bootstrap.php"],
-        "classmap": ["Resources/stubs"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
-      "homepage": "https://symfony.com",
-      "keywords": ["compatibility", "polyfill", "portable", "shim"],
-      "support": {
-        "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-01-07T16:49:33+00:00"
-    },
-    {
-      "name": "symfony/process",
-      "version": "v5.2.7",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/process.git",
-        "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/process/zipball/98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e",
-        "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "symfony/polyfill-php80": "^1.15"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\Process\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Fabien Potencier",
-          "email": "fabien@symfony.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Executes commands in sub-processes",
-      "homepage": "https://symfony.com",
-      "support": {
-        "source": "https://github.com/symfony/process/tree/v5.3.0-BETA1"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-04-08T10:27:02+00:00"
-    },
-    {
-      "name": "symfony/service-contracts",
-      "version": "v2.4.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/service-contracts.git",
-        "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
-        "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "psr/container": "^1.1"
-      },
-      "suggest": {
-        "symfony/service-implementation": ""
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "2.4-dev"
-        },
-        "thanks": {
-          "name": "symfony/contracts",
-          "url": "https://github.com/symfony/contracts"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Contracts\\Service\\": ""
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Generic abstractions related to writing services",
-      "homepage": "https://symfony.com",
-      "keywords": [
-        "abstractions",
-        "contracts",
-        "decoupling",
-        "interfaces",
-        "interoperability",
-        "standards"
-      ],
-      "support": {
-        "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-04-01T10:43:52+00:00"
-    },
-    {
-      "name": "symfony/string",
-      "version": "v5.2.8",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/string.git",
-        "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/string/zipball/01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db",
-        "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "symfony/polyfill-ctype": "~1.8",
-        "symfony/polyfill-intl-grapheme": "~1.0",
-        "symfony/polyfill-intl-normalizer": "~1.0",
-        "symfony/polyfill-mbstring": "~1.0",
-        "symfony/polyfill-php80": "~1.15"
-      },
-      "require-dev": {
-        "symfony/error-handler": "^4.4|^5.0",
-        "symfony/http-client": "^4.4|^5.0",
-        "symfony/translation-contracts": "^1.1|^2",
-        "symfony/var-exporter": "^4.4|^5.0"
-      },
-      "type": "library",
-      "autoload": {
-        "psr-4": {
-          "Symfony\\Component\\String\\": ""
-        },
-        "files": ["Resources/functions.php"],
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
-      "homepage": "https://symfony.com",
-      "keywords": ["grapheme", "i18n", "string", "unicode", "utf-8", "utf8"],
-      "support": {
-        "source": "https://github.com/symfony/string/tree/v5.2.8"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-10T14:56:10+00:00"
-    },
-    {
-      "name": "symfony/var-dumper",
-      "version": "v5.2.8",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symfony/var-dumper.git",
-        "reference": "d693200a73fae179d27f8f1b16b4faf3e8569eba"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d693200a73fae179d27f8f1b16b4faf3e8569eba",
-        "reference": "d693200a73fae179d27f8f1b16b4faf3e8569eba",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.2.5",
-        "symfony/polyfill-mbstring": "~1.0",
-        "symfony/polyfill-php80": "^1.15"
-      },
-      "conflict": {
-        "phpunit/phpunit": "<5.4.3",
-        "symfony/console": "<4.4"
-      },
-      "require-dev": {
-        "ext-iconv": "*",
-        "symfony/console": "^4.4|^5.0",
-        "symfony/process": "^4.4|^5.0",
-        "twig/twig": "^2.13|^3.0.4"
-      },
-      "suggest": {
-        "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
-        "ext-intl": "To show region name in time zone dump",
-        "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
-      },
-      "bin": ["Resources/bin/var-dump-server"],
-      "type": "library",
-      "autoload": {
-        "files": ["Resources/functions/dump.php"],
-        "psr-4": {
-          "Symfony\\Component\\VarDumper\\": ""
-        },
-        "exclude-from-classmap": ["/Tests/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Nicolas Grekas",
-          "email": "p@tchwork.com"
-        },
-        {
-          "name": "Symfony Community",
-          "homepage": "https://symfony.com/contributors"
-        }
-      ],
-      "description": "Provides mechanisms for walking through any arbitrary PHP variable",
-      "homepage": "https://symfony.com",
-      "keywords": ["debug", "dump"],
-      "support": {
-        "source": "https://github.com/symfony/var-dumper/tree/v5.2.8"
-      },
-      "funding": [
-        {
-          "url": "https://symfony.com/sponsor",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/fabpot",
-          "type": "github"
-        },
-        {
-          "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-          "type": "tidelift"
-        }
-      ],
-      "time": "2021-05-07T13:42:21+00:00"
-    },
-    {
-      "name": "symplify/astral",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/astral.git",
-        "reference": "8b704cb02702e8519a404aa775ef4d53c4c74037"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/astral/zipball/8b704cb02702e8519a404aa775ef4d53c4c74037",
-        "reference": "8b704cb02702e8519a404aa775ef4d53c4c74037",
-        "shasum": ""
-      },
-      "require": {
-        "nette/utils": "^3.2",
-        "nikic/php-parser": "4.10.5",
-        "php": ">=7.3",
-        "symfony/dependency-injection": "^5.2",
-        "symfony/http-kernel": "^4.4|^5.2",
-        "symplify/autowire-array-parameter": "^9.3.12",
-        "symplify/package-builder": "^9.3.12"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.5",
-        "symplify/easy-testing": "^9.3.12"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\Astral\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Toolking for smart daily work with AST",
-      "support": {
-        "source": "https://github.com/symplify/astral/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-17T20:54:14+00:00"
-    },
-    {
-      "name": "symplify/autowire-array-parameter",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/autowire-array-parameter.git",
-        "reference": "7fb6af895aacb9dbd48eaa24c0d9dc3294a82068"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/7fb6af895aacb9dbd48eaa24c0d9dc3294a82068",
-        "reference": "7fb6af895aacb9dbd48eaa24c0d9dc3294a82068",
-        "shasum": ""
-      },
-      "require": {
-        "nette/utils": "^3.2",
-        "php": ">=7.3",
-        "symfony/dependency-injection": "^5.2",
-        "symplify/package-builder": "^9.3.12"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.5"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\AutowireArrayParameter\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Autowire array parameters for your Symfony applications",
-      "support": {
-        "source": "https://github.com/symplify/autowire-array-parameter/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-17T20:54:14+00:00"
-    },
-    {
-      "name": "symplify/coding-standard",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/coding-standard.git",
-        "reference": "bea1cb8577d3bd391bc2c04a98d727ce8fcbc642"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/coding-standard/zipball/bea1cb8577d3bd391bc2c04a98d727ce8fcbc642",
-        "reference": "bea1cb8577d3bd391bc2c04a98d727ce8fcbc642",
-        "shasum": ""
-      },
-      "require": {
-        "friendsofphp/php-cs-fixer": "^3.0",
-        "nette/utils": "^3.2",
-        "php": ">=7.3",
-        "symplify/autowire-array-parameter": "^9.3.12",
-        "symplify/package-builder": "^9.3.12",
-        "symplify/rule-doc-generator-contracts": "^9.3.12",
-        "symplify/symplify-kernel": "^9.3.12"
-      },
-      "require-dev": {
-        "doctrine/orm": "^2.7",
-        "nette/application": "^3.1",
-        "nette/bootstrap": "^3.1",
-        "phpunit/phpunit": "^9.5",
-        "symfony/framework-bundle": "^4.4|^5.2",
-        "symfony/http-kernel": "^4.4|^5.2",
-        "symplify/easy-coding-standard-tester": "^9.3.12",
-        "symplify/php-config-printer": "^9.3.12",
-        "symplify/rule-doc-generator": "^9.3.12",
-        "symplify/smart-file-system": "^9.3.12"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\CodingStandard\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Set of Symplify rules for PHP_CodeSniffer and PHP CS Fixer.",
-      "support": {
-        "source": "https://github.com/symplify/coding-standard/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-17T20:54:17+00:00"
-    },
-    {
-      "name": "symplify/composer-json-manipulator",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/composer-json-manipulator.git",
-        "reference": "932727993137ac6be539cb637590b0b487111924"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/composer-json-manipulator/zipball/932727993137ac6be539cb637590b0b487111924",
-        "reference": "932727993137ac6be539cb637590b0b487111924",
-        "shasum": ""
-      },
-      "require": {
-        "nette/utils": "^3.2",
-        "php": ">=7.3",
-        "symfony/config": "^4.4|^5.2",
-        "symfony/dependency-injection": "^5.2",
-        "symfony/filesystem": "^4.4|^5.2",
-        "symfony/http-kernel": "^4.4|^5.2",
-        "symplify/package-builder": "^9.3.12",
-        "symplify/smart-file-system": "^9.3.12"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.5"
-      },
-      "type": "symfony-bundle",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\ComposerJsonManipulator\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Package to load, merge and save composer.json file(s)",
-      "support": {
-        "source": "https://github.com/symplify/composer-json-manipulator/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-17T20:54:16+00:00"
-    },
-    {
-      "name": "symplify/console-package-builder",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/console-package-builder.git",
-        "reference": "f6c964c83de064b5c4fd6fc238bec75fbcd20221"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/console-package-builder/zipball/f6c964c83de064b5c4fd6fc238bec75fbcd20221",
-        "reference": "f6c964c83de064b5c4fd6fc238bec75fbcd20221",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3",
-        "symfony/console": "^4.4|^5.2",
-        "symfony/dependency-injection": "^5.2",
-        "symplify/symplify-kernel": "^9.3.12"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.5",
-        "symfony/http-kernel": "^4.4|^5.2",
-        "symplify/package-builder": "^9.3.12"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\ConsolePackageBuilder\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Package to speed up building command line applications",
-      "support": {
-        "source": "https://github.com/symplify/console-package-builder/tree/v9.3.12"
-      },
-      "time": "2021-05-17T20:54:15+00:00"
-    },
-    {
-      "name": "symplify/easy-coding-standard",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/easy-coding-standard.git",
-        "reference": "5fa2935c28e572e6a0f8f448dd9ca4f17f5324ad"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/easy-coding-standard/zipball/5fa2935c28e572e6a0f8f448dd9ca4f17f5324ad",
-        "reference": "5fa2935c28e572e6a0f8f448dd9ca4f17f5324ad",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.1"
-      },
-      "conflict": {
-        "friendsofphp/php-cs-fixer": "<3.0",
-        "squizlabs/php_codesniffer": "<3.6"
-      },
-      "replace": {
-        "friendsofphp/php-cs-fixer": "^3.0",
-        "squizlabs/php_codesniffer": "^3.6"
-      },
-      "bin": ["bin/ecs"],
-      "type": "library",
-      "autoload": {
-        "files": ["bootstrap.php"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Prefixed scoped version of ECS package",
-      "support": {
-        "source": "https://github.com/symplify/easy-coding-standard/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-17T20:57:41+00:00"
-    },
-    {
-      "name": "symplify/easy-testing",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/easy-testing.git",
-        "reference": "f2a0e79a3893920b56dce110fb684c1760db8a74"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/easy-testing/zipball/f2a0e79a3893920b56dce110fb684c1760db8a74",
-        "reference": "f2a0e79a3893920b56dce110fb684c1760db8a74",
-        "shasum": ""
-      },
-      "require": {
-        "nette/utils": "^3.2",
-        "php": ">=7.3",
-        "symfony/console": "^4.4|^5.2",
-        "symfony/dependency-injection": "^5.2",
-        "symfony/finder": "^4.4|^5.2",
-        "symfony/http-kernel": "^4.4|^5.2",
-        "symplify/console-package-builder": "^9.3.12",
-        "symplify/package-builder": "^9.3.12",
-        "symplify/smart-file-system": "^9.3.12",
-        "symplify/symplify-kernel": "^9.3.12"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.5"
-      },
-      "bin": ["bin/easy-testing"],
-      "type": "symfony-bundle",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\EasyTesting\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Testing made easy",
-      "support": {
-        "source": "https://github.com/symplify/easy-testing/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-17T20:54:29+00:00"
-    },
-    {
-      "name": "symplify/package-builder",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/package-builder.git",
-        "reference": "748eade6acc32798013e41203ab362f6ce77a024"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/package-builder/zipball/748eade6acc32798013e41203ab362f6ce77a024",
-        "reference": "748eade6acc32798013e41203ab362f6ce77a024",
-        "shasum": ""
-      },
-      "require": {
-        "nette/neon": "^3.2",
-        "nette/utils": "^3.2",
-        "php": ">=7.3",
-        "symfony/config": "^4.4|^5.2",
-        "symfony/console": "^4.4|^5.2",
-        "symfony/dependency-injection": "^5.2",
-        "symfony/finder": "^4.4|^5.2",
-        "symfony/http-kernel": "^4.4|^5.2",
-        "symplify/easy-testing": "^9.3.12",
-        "symplify/symplify-kernel": "^9.3.12"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.5"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\PackageBuilder\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Dependency Injection, Console and Kernel toolkit for Symplify packages.",
-      "support": {
-        "source": "https://github.com/symplify/package-builder/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-17T20:54:52+00:00"
-    },
-    {
-      "name": "symplify/phpstan-extensions",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/phpstan-extensions.git",
-        "reference": "21a5766407aba2013b65da53020dfc7fdc7fb495"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/phpstan-extensions/zipball/21a5766407aba2013b65da53020dfc7fdc7fb495",
-        "reference": "21a5766407aba2013b65da53020dfc7fdc7fb495",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3",
-        "phpstan/phpstan": "0.12.86",
-        "symplify/astral": "^9.3.12",
-        "symplify/package-builder": "^9.3.12",
-        "symplify/smart-file-system": "^9.3.12"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.5"
-      },
-      "type": "phpstan-extension",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        },
-        "phpstan": {
-          "includes": ["config/config.neon"]
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\PHPStanExtensions\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Pre-escaped error messages in 'symplify' error format, container aware test case and other useful extensions for PHPStan",
-      "support": {
-        "source": "https://github.com/symplify/phpstan-extensions/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-17T20:54:58+00:00"
-    },
-    {
-      "name": "symplify/phpstan-rules",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/phpstan-rules.git",
-        "reference": "420dd5876ce7374e403f0a8b1d798ea22676e601"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/phpstan-rules/zipball/420dd5876ce7374e403f0a8b1d798ea22676e601",
-        "reference": "420dd5876ce7374e403f0a8b1d798ea22676e601",
-        "shasum": ""
-      },
-      "require": {
-        "nette/utils": "^3.2",
-        "nikic/php-parser": "4.10.5",
-        "php": ">=7.3",
-        "phpstan/phpdoc-parser": "^0.5",
-        "phpstan/phpstan": "0.12.86",
-        "symplify/astral": "^9.3.12",
-        "symplify/composer-json-manipulator": "^9.3.12",
-        "symplify/package-builder": "^9.3.12",
-        "symplify/rule-doc-generator-contracts": "^9.3.12",
-        "symplify/smart-file-system": "^9.3.12",
-        "webmozart/assert": "^1.9"
-      },
-      "require-dev": {
-        "nette/application": "^3.1",
-        "nette/forms": "^3.1",
-        "phpunit/phpunit": "^9.5",
-        "symfony/framework-bundle": "^4.4|^5.2",
-        "symplify/easy-testing": "^9.3.12",
-        "symplify/phpstan-extensions": "^9.3.12",
-        "symplify/rule-doc-generator": "^9.3.12"
-      },
-      "type": "phpstan-extension",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        },
-        "phpstan": {
-          "includes": [
-            "config/services/services.neon",
-            "packages/cognitive-complexity/config/cognitive-complexity-services.neon",
-            "packages/object-calisthenics/config/object-calisthenics-services.neon"
-          ]
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\PHPStanRules\\": "src",
-          "Symplify\\PHPStanRules\\CognitiveComplexity\\": "packages/cognitive-complexity/src",
-          "Symplify\\PHPStanRules\\ObjectCalisthenics\\": "packages/object-calisthenics/src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Set of Symplify rules for PHPStan",
-      "support": {
-        "source": "https://github.com/symplify/phpstan-rules/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-17T20:54:27+00:00"
-    },
-    {
-      "name": "symplify/rule-doc-generator-contracts",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/rule-doc-generator-contracts.git",
-        "reference": "06f23a3bfe1426030c4032e99665472a229d5b43"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/rule-doc-generator-contracts/zipball/06f23a3bfe1426030c4032e99665472a229d5b43",
-        "reference": "06f23a3bfe1426030c4032e99665472a229d5b43",
-        "shasum": ""
-      },
-      "require": {
-        "nette/utils": "^3.2",
-        "php": ">=7.3"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\RuleDocGenerator\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Contracts for production code of RuleDocGenerator",
-      "support": {
-        "source": "https://github.com/symplify/rule-doc-generator-contracts/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-11T13:31:15+00:00"
-    },
-    {
-      "name": "symplify/smart-file-system",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/smart-file-system.git",
-        "reference": "aafc000f17d9f4b2d1274115095e3cbc2c32d63d"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/smart-file-system/zipball/aafc000f17d9f4b2d1274115095e3cbc2c32d63d",
-        "reference": "aafc000f17d9f4b2d1274115095e3cbc2c32d63d",
-        "shasum": ""
-      },
-      "require": {
-        "nette/utils": "^3.2",
-        "php": ">=7.3",
-        "symfony/filesystem": "^4.4|^5.2",
-        "symfony/finder": "^4.4|^5.2"
-      },
-      "require-dev": {
-        "nette/finder": "^2.5",
-        "phpunit/phpunit": "^9.5"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\SmartFileSystem\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Sanitized FileInfo with safe getRealPath() and other handy methods",
-      "support": {
-        "source": "https://github.com/symplify/smart-file-system/tree/v9.3.12"
-      },
-      "funding": [
-        {
-          "url": "https://www.paypal.me/rectorphp",
-          "type": "custom"
-        },
-        {
-          "url": "https://github.com/tomasvotruba",
-          "type": "github"
-        }
-      ],
-      "time": "2021-05-11T13:30:32+00:00"
-    },
-    {
-      "name": "symplify/symplify-kernel",
-      "version": "v9.3.12",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/symplify/symplify-kernel.git",
-        "reference": "213455059541e8a707b716c5759982876e4e1118"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/symplify/symplify-kernel/zipball/213455059541e8a707b716c5759982876e4e1118",
-        "reference": "213455059541e8a707b716c5759982876e4e1118",
-        "shasum": ""
-      },
-      "require": {
-        "php": ">=7.3",
-        "symfony/console": "^4.4|^5.2",
-        "symfony/dependency-injection": "^5.2",
-        "symfony/http-kernel": "^4.4|^5.2",
-        "symplify/autowire-array-parameter": "^9.3.12",
-        "symplify/composer-json-manipulator": "^9.3.12",
-        "symplify/package-builder": "^9.3.12",
-        "symplify/smart-file-system": "^9.3.12"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^9.5"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-main": "9.4-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Symplify\\SymplifyKernel\\": "src"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "description": "Internal Kernel for Symplify packages",
-      "support": {
-        "source": "https://github.com/symplify/symplify-kernel/tree/v9.3.12"
-      },
-      "time": "2021-05-17T20:54:52+00:00"
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "371c6aac9ca489338bf3b3fa06ffdb21",
+    "packages": [
+        {
+            "name": "brick/math",
+            "version": "0.9.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/brick/math.git",
+                "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0",
+                "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
+                "vimeo/psalm": "4.3.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Brick\\Math\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Arbitrary-precision arithmetic library",
+            "keywords": [
+                "Arbitrary-precision",
+                "BigInteger",
+                "BigRational",
+                "arithmetic",
+                "bigdecimal",
+                "bignum",
+                "brick",
+                "math"
+            ],
+            "support": {
+                "issues": "https://github.com/brick/math/issues",
+                "source": "https://github.com/brick/math/tree/0.9.2"
+            },
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/brick/math",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-01-20T22:51:39+00:00"
+        },
+        {
+            "name": "codeigniter4/codeigniter4",
+            "version": "dev-develop",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/codeigniter4/CodeIgniter4.git",
+                "reference": "67e6f3d9eaff82d003ad30058857f37536ea4252"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/codeigniter4/CodeIgniter4/zipball/67e6f3d9eaff82d003ad30058857f37536ea4252",
+                "reference": "67e6f3d9eaff82d003ad30058857f37536ea4252",
+                "shasum": ""
+            },
+            "require": {
+                "ext-curl": "*",
+                "ext-intl": "*",
+                "ext-json": "*",
+                "ext-mbstring": "*",
+                "kint-php/kint": "^3.3",
+                "laminas/laminas-escaper": "^2.6",
+                "php": "^7.3 || ^8.0",
+                "psr/log": "^1.1"
+            },
+            "require-dev": {
+                "fakerphp/faker": "^1.9",
+                "friendsofphp/php-cs-fixer": "^3.0",
+                "mikey179/vfsstream": "^1.6",
+                "nexusphp/cs-config": "^3.1",
+                "nexusphp/tachycardia": "^1.0",
+                "phpstan/phpstan": "0.12.88",
+                "phpunit/phpunit": "^9.1",
+                "predis/predis": "^1.1",
+                "rector/rector": "0.11.14",
+                "symplify/package-builder": "^9.3"
+            },
+            "suggest": {
+                "ext-fileinfo": "Improves mime type detection for files"
+            },
+            "default-branch": true,
+            "type": "project",
+            "extra": {
+                "branch-alias": {
+                    "dev-develop": "4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "CodeIgniter\\": "system/"
+                },
+                "exclude-from-classmap": [
+                    "**/Database/Migrations/**"
+                ]
+            },
+            "autoload-dev": {
+                "psr-4": {
+                    "CodeIgniter\\": "tests/system/",
+                    "Utils\\": "utils/"
+                }
+            },
+            "scripts": {
+                "post-update-cmd": [
+                    "CodeIgniter\\ComposerScripts::postUpdate",
+                    "bash -c \"if [ -f admin/setup.sh ]; then bash admin/setup.sh; fi\""
+                ],
+                "analyze": [
+                    "phpstan analyse"
+                ],
+                "test": [
+                    "phpunit"
+                ]
+            },
+            "license": [
+                "MIT"
+            ],
+            "description": "The CodeIgniter framework v4",
+            "homepage": "https://codeigniter.com",
+            "support": {
+                "forum": "http://forum.codeigniter.com/",
+                "source": "https://github.com/codeigniter4/CodeIgniter4",
+                "slack": "https://codeigniterchat.slack.com",
+                "issues": "https://github.com/codeigniter4/CodeIgniter4/issues"
+            },
+            "time": "2021-06-07T06:25:13+00:00"
+        },
+        {
+            "name": "composer/ca-bundle",
+            "version": "1.2.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/ca-bundle.git",
+                "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
+                "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
+                "shasum": ""
+            },
+            "require": {
+                "ext-openssl": "*",
+                "ext-pcre": "*",
+                "php": "^5.3.2 || ^7.0 || ^8.0"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^0.12.55",
+                "psr/log": "^1.0",
+                "symfony/phpunit-bridge": "^4.2 || ^5",
+                "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\CaBundle\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "keywords": [
+                "cabundle",
+                "cacert",
+                "certificate",
+                "ssl",
+                "tls"
+            ],
+            "support": {
+                "irc": "irc://irc.freenode.org/composer",
+                "issues": "https://github.com/composer/ca-bundle/issues",
+                "source": "https://github.com/composer/ca-bundle/tree/1.2.9"
+            },
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-01-12T12:10:35+00:00"
+        },
+        {
+            "name": "essence/dom",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/essence/dom.git",
+                "reference": "e5776d2286f4ccbd048d160c28ac77ccc6d68f3a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/essence/dom/zipball/e5776d2286f4ccbd048d160c28ac77ccc6d68f3a",
+                "reference": "e5776d2286f4ccbd048d160c28ac77ccc6d68f3a",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Essence\\Dom\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Félix Girault",
+                    "email": "felix.girault@gmail.com",
+                    "homepage": "http://www.felix-girault.fr",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Essence's DOM parser.",
+            "homepage": "http://github.com/essence/dom",
+            "keywords": [
+                "dom",
+                "parser"
+            ],
+            "support": {
+                "issues": "https://github.com/essence/dom/issues",
+                "source": "https://github.com/essence/dom/tree/1.0.0"
+            },
+            "time": "2015-07-23T20:33:17+00:00"
+        },
+        {
+            "name": "essence/essence",
+            "version": "3.5.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/essence/essence.git",
+                "reference": "81e889a87603840dadd04b317a51487df1d45933"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/essence/essence/zipball/81e889a87603840dadd04b317a51487df1d45933",
+                "reference": "81e889a87603840dadd04b317a51487df1d45933",
+                "shasum": ""
+            },
+            "require": {
+                "essence/dom": "~1.0.0",
+                "essence/http": "~1.0.0",
+                "fg/parkour": "~1.1.0",
+                "php": ">=5.5.0"
+            },
+            "suggest": {
+                "ext-curl": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Essence\\": "lib/Essence"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Félix Girault",
+                    "email": "felix.girault@gmail.com",
+                    "homepage": "http://www.felix-girault.fr",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Extracts information about medias on the web, like youtube videos, twitter statuses or blog articles.",
+            "homepage": "http://github.com/essence/essence",
+            "keywords": [
+                "embed",
+                "media",
+                "oembed",
+                "opengraph"
+            ],
+            "support": {
+                "issues": "https://github.com/essence/essence/issues",
+                "source": "https://github.com/essence/essence/tree/3.5.4"
+            },
+            "time": "2021-01-21T09:58:10+00:00"
+        },
+        {
+            "name": "essence/http",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/essence/http.git",
+                "reference": "ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/essence/http/zipball/ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2",
+                "reference": "ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2",
+                "shasum": ""
+            },
+            "suggest": {
+                "ext-curl": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Essence\\Http\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Félix Girault",
+                    "email": "felix.girault@gmail.com",
+                    "homepage": "http://www.felix-girault.fr",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Essence's HTTP client.",
+            "homepage": "http://github.com/essence/http",
+            "keywords": [
+                "client",
+                "http"
+            ],
+            "support": {
+                "issues": "https://github.com/essence/http/issues",
+                "source": "https://github.com/essence/http/tree/1.0.0"
+            },
+            "time": "2015-07-23T20:33:50+00:00"
+        },
+        {
+            "name": "fg/parkour",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/felixgirault/parkour.git",
+                "reference": "f837eb640fc4aac81b11fe50d2fa04fb4ec71496"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/felixgirault/parkour/zipball/f837eb640fc4aac81b11fe50d2fa04fb4ec71496",
+                "reference": "f837eb640fc4aac81b11fe50d2fa04fb4ec71496",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.3.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Parkour\\": "lib"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Félix Girault",
+                    "email": "felix.girault@gmail.com",
+                    "homepage": "http://www.felix-girault.fr",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A collection of utilities to manipulate arrays.",
+            "homepage": "http://github.com/felixgirault/parkour",
+            "keywords": [
+                "array",
+                "manipulation",
+                "traversing"
+            ],
+            "support": {
+                "issues": "https://github.com/felixgirault/parkour/issues",
+                "source": "https://github.com/felixgirault/parkour/tree/1.1.1"
+            },
+            "time": "2015-10-03T10:39:22+00:00"
+        },
+        {
+            "name": "geoip2/geoip2",
+            "version": "v2.11.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/maxmind/GeoIP2-php.git",
+                "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/d01be5894a5c1a3381c58c9b1795cd07f96c30f7",
+                "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "maxmind-db/reader": "~1.8",
+                "maxmind/web-service-common": "~0.8",
+                "php": ">=7.2"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "2.*",
+                "phpunit/phpunit": "^8.0 || ^9.0",
+                "squizlabs/php_codesniffer": "3.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "GeoIp2\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Gregory J. Oschwald",
+                    "email": "goschwald@maxmind.com",
+                    "homepage": "https://www.maxmind.com/"
+                }
+            ],
+            "description": "MaxMind GeoIP2 PHP API",
+            "homepage": "https://github.com/maxmind/GeoIP2-php",
+            "keywords": [
+                "IP",
+                "geoip",
+                "geoip2",
+                "geolocation",
+                "maxmind"
+            ],
+            "support": {
+                "issues": "https://github.com/maxmind/GeoIP2-php/issues",
+                "source": "https://github.com/maxmind/GeoIP2-php/tree/v2.11.0"
+            },
+            "time": "2020-10-01T18:48:34+00:00"
+        },
+        {
+            "name": "graham-campbell/result-type",
+            "version": "v1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/GrahamCampbell/Result-Type.git",
+                "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb",
+                "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0|^8.0",
+                "phpoption/phpoption": "^1.7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GrahamCampbell\\ResultType\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "graham@alt-three.com"
+                }
+            ],
+            "description": "An Implementation Of The Result Type",
+            "keywords": [
+                "Graham Campbell",
+                "GrahamCampbell",
+                "Result Type",
+                "Result-Type",
+                "result"
+            ],
+            "support": {
+                "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+                "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-04-13T13:17:36+00:00"
+        },
+        {
+            "name": "james-heinrich/getid3",
+            "version": "v2.0.0-beta3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/JamesHeinrich/getID3.git",
+                "reference": "5515a2d24667c3c0ff49fdcbdadc405c0880c7a2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/5515a2d24667c3c0ff49fdcbdadc405c0880c7a2",
+                "reference": "5515a2d24667c3c0ff49fdcbdadc405c0880c7a2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "jakub-onderka/php-parallel-lint": "^0.9 || ^1.0",
+                "phpunit/phpunit": "^4.8|^5.0"
+            },
+            "suggest": {
+                "ext-SimpleXML": "SimpleXML extension is required to analyze RIFF/WAV/BWF audio files (also requires `ext-libxml`).",
+                "ext-com_dotnet": "COM extension is required when loading files larger than 2GB on Windows.",
+                "ext-ctype": "ctype extension is required when loading files larger than 2GB on 32-bit PHP (also on 64-bit PHP on Windows) or executing `getid3_lib::CopyTagsToComments`.",
+                "ext-dba": "DBA extension is required to use the DBA database as a cache storage.",
+                "ext-exif": "EXIF extension is required for graphic modules.",
+                "ext-iconv": "iconv extension is required to work with different character sets (when `ext-mbstring` is not available).",
+                "ext-json": "JSON extension is required to analyze Apple Quicktime videos.",
+                "ext-libxml": "libxml extension is required to analyze RIFF/WAV/BWF audio files.",
+                "ext-mbstring": "mbstring extension is required to work with different character sets.",
+                "ext-mysql": "MySQL extension is required to use the MySQL database as a cache storage (deprecated in PHP 5.5, removed in PHP >= 7.0, use `ext-mysqli` instead).",
+                "ext-mysqli": "MySQLi extension is required to use the MySQL database as a cache storage.",
+                "ext-rar": "RAR extension is required for RAR archive module.",
+                "ext-sqlite3": "SQLite3 extension is required to use the SQLite3 database as a cache storage.",
+                "ext-xml": "XML extension is required for graphic modules to analyze the XML metadata.",
+                "ext-zlib": "Zlib extension is required for archive modules and compressed metadata."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "JamesHeinrich\\GetID3\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "GPL-1.0-or-later",
+                "LGPL-3.0-only",
+                "MPL-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "James Heinrich",
+                    "email": "info@getid3.org",
+                    "homepage": "https://github.com/JamesHeinrich",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Craig Duncan",
+                    "email": "git@duncanc.co.uk",
+                    "homepage": "https://github.com/duncan3dc",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Extract and write useful information to/from popular multimedia file formats",
+            "homepage": "https://www.getid3.org/",
+            "keywords": [
+                "audio",
+                "codecs",
+                "id3",
+                "metadata",
+                "tags",
+                "video"
+            ],
+            "support": {
+                "issues": "https://github.com/JamesHeinrich/getID3/issues",
+                "source": "https://github.com/JamesHeinrich/getID3/tree/2.0"
+            },
+            "time": "2020-07-21T08:15:44+00:00"
+        },
+        {
+            "name": "kint-php/kint",
+            "version": "3.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/kint-php/kint.git",
+                "reference": "335ac1bcaf04d87df70d8aa51e8887ba2c6d203b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/kint-php/kint/zipball/335ac1bcaf04d87df70d8aa51e8887ba2c6d203b",
+                "reference": "335ac1bcaf04d87df70d8aa51e8887ba2c6d203b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.6"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^2.0",
+                "phpunit/phpunit": "^4.0",
+                "seld/phar-utils": "^1.0",
+                "symfony/finder": "^2.0 || ^3.0 || ^4.0",
+                "vimeo/psalm": "^3.0"
+            },
+            "suggest": {
+                "ext-ctype": "Simple data type tests",
+                "ext-iconv": "Provides fallback detection for ambiguous legacy string encodings such as the Windows and ISO 8859 code pages",
+                "ext-mbstring": "Provides string encoding detection",
+                "kint-php/kint-js": "Provides a simplified dump to console.log()",
+                "kint-php/kint-twig": "Provides d() and s() functions in twig templates",
+                "symfony/polyfill-ctype": "Replacement for ext-ctype if missing",
+                "symfony/polyfill-iconv": "Replacement for ext-iconv if missing",
+                "symfony/polyfill-mbstring": "Replacement for ext-mbstring if missing"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "init.php"
+                ],
+                "psr-4": {
+                    "Kint\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jonathan Vollebregt",
+                    "homepage": "https://github.com/jnvsor"
+                },
+                {
+                    "name": "Rokas Å leinius",
+                    "homepage": "https://github.com/raveren"
+                },
+                {
+                    "name": "Contributors",
+                    "homepage": "https://github.com/kint-php/kint/graphs/contributors"
+                }
+            ],
+            "description": "Kint - debugging tool for PHP developers",
+            "homepage": "https://kint-php.github.io/kint/",
+            "keywords": [
+                "debug",
+                "kint",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/kint-php/kint/issues",
+                "source": "https://github.com/kint-php/kint/tree/master"
+            },
+            "time": "2019-10-17T18:05:24+00:00"
+        },
+        {
+            "name": "laminas/laminas-escaper",
+            "version": "2.7.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laminas/laminas-escaper.git",
+                "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/5e04bc5ae5990b17159d79d331055e2c645e5cc5",
+                "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5",
+                "shasum": ""
+            },
+            "require": {
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^7.3 || ~8.0.0"
+            },
+            "replace": {
+                "zendframework/zend-escaper": "^2.6.1"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^9.3",
+                "psalm/plugin-phpunit": "^0.12.2",
+                "vimeo/psalm": "^3.16"
+            },
+            "suggest": {
+                "ext-iconv": "*",
+                "ext-mbstring": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\Escaper\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "escaper",
+                "laminas"
+            ],
+            "support": {
+                "chat": "https://laminas.dev/chat",
+                "docs": "https://docs.laminas.dev/laminas-escaper/",
+                "forum": "https://discourse.laminas.dev",
+                "issues": "https://github.com/laminas/laminas-escaper/issues",
+                "rss": "https://github.com/laminas/laminas-escaper/releases.atom",
+                "source": "https://github.com/laminas/laminas-escaper"
+            },
+            "funding": [
+                {
+                    "url": "https://funding.communitybridge.org/projects/laminas-project",
+                    "type": "community_bridge"
+                }
+            ],
+            "time": "2020-11-17T21:26:43+00:00"
+        },
+        {
+            "name": "laminas/laminas-zendframework-bridge",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laminas/laminas-zendframework-bridge.git",
+                "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6cccbddfcfc742eb02158d6137ca5687d92cee32",
+                "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3 || ^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3",
+                "psalm/plugin-phpunit": "^0.15.1",
+                "squizlabs/php_codesniffer": "^3.5",
+                "vimeo/psalm": "^4.6"
+            },
+            "type": "library",
+            "extra": {
+                "laminas": {
+                    "module": "Laminas\\ZendFrameworkBridge"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/autoload.php"
+                ],
+                "psr-4": {
+                    "Laminas\\ZendFrameworkBridge\\": "src//"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "Alias legacy ZF class names to Laminas Project equivalents.",
+            "keywords": [
+                "ZendFramework",
+                "autoloading",
+                "laminas",
+                "zf"
+            ],
+            "support": {
+                "forum": "https://discourse.laminas.dev/",
+                "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues",
+                "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom",
+                "source": "https://github.com/laminas/laminas-zendframework-bridge"
+            },
+            "funding": [
+                {
+                    "url": "https://funding.communitybridge.org/projects/laminas-project",
+                    "type": "community_bridge"
+                }
+            ],
+            "time": "2021-02-25T21:54:58+00:00"
+        },
+        {
+            "name": "league/commonmark",
+            "version": "1.6.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/commonmark.git",
+                "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/7d70d2f19c84bcc16275ea47edabee24747352eb",
+                "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "php": "^7.1 || ^8.0"
+            },
+            "conflict": {
+                "scrutinizer/ocular": "1.7.*"
+            },
+            "require-dev": {
+                "cebe/markdown": "~1.0",
+                "commonmark/commonmark.js": "0.29.2",
+                "erusev/parsedown": "~1.0",
+                "ext-json": "*",
+                "github/gfm": "0.29.0",
+                "michelf/php-markdown": "~1.4",
+                "mikehaertl/php-shellcommand": "^1.4",
+                "phpstan/phpstan": "^0.12",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2",
+                "scrutinizer/ocular": "^1.5",
+                "symfony/finder": "^4.2"
+            },
+            "bin": [
+                "bin/commonmark"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "League\\CommonMark\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Colin O'Dell",
+                    "email": "colinodell@gmail.com",
+                    "homepage": "https://www.colinodell.com",
+                    "role": "Lead Developer"
+                }
+            ],
+            "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)",
+            "homepage": "https://commonmark.thephpleague.com",
+            "keywords": [
+                "commonmark",
+                "flavored",
+                "gfm",
+                "github",
+                "github-flavored",
+                "markdown",
+                "md",
+                "parser"
+            ],
+            "support": {
+                "docs": "https://commonmark.thephpleague.com/",
+                "issues": "https://github.com/thephpleague/commonmark/issues",
+                "rss": "https://github.com/thephpleague/commonmark/releases.atom",
+                "source": "https://github.com/thephpleague/commonmark"
+            },
+            "funding": [
+                {
+                    "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.colinodell.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.paypal.me/colinpodell/10.00",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/colinodell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/colinodell",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-12T11:39:41+00:00"
+        },
+        {
+            "name": "league/html-to-markdown",
+            "version": "4.10.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/html-to-markdown.git",
+                "reference": "0868ae7a552e809e5cd8f93ba022071640408e88"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/0868ae7a552e809e5cd8f93ba022071640408e88",
+                "reference": "0868ae7a552e809e5cd8f93ba022071640408e88",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-xml": "*",
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "mikehaertl/php-shellcommand": "~1.1.0",
+                "phpunit/phpunit": "^4.8|^5.7",
+                "scrutinizer/ocular": "~1.1"
+            },
+            "bin": [
+                "bin/html-to-markdown"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.10-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "League\\HTMLToMarkdown\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Colin O'Dell",
+                    "email": "colinodell@gmail.com",
+                    "homepage": "https://www.colinodell.com",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Nick Cernis",
+                    "email": "nick@cern.is",
+                    "homepage": "http://modernnerd.net",
+                    "role": "Original Author"
+                }
+            ],
+            "description": "An HTML-to-markdown conversion helper for PHP",
+            "homepage": "https://github.com/thephpleague/html-to-markdown",
+            "keywords": [
+                "html",
+                "markdown"
+            ],
+            "support": {
+                "issues": "https://github.com/thephpleague/html-to-markdown/issues",
+                "source": "https://github.com/thephpleague/html-to-markdown/tree/4.10.0"
+            },
+            "funding": [
+                {
+                    "url": "https://www.colinodell.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.paypal.me/colinpodell/10.00",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/colinodell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/colinodell",
+                    "type": "patreon"
+                }
+            ],
+            "time": "2020-07-01T00:34:03+00:00"
+        },
+        {
+            "name": "maxmind-db/reader",
+            "version": "v1.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
+                "reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/569bd44d97d30a4ec12c7793a33004a76d4caf18",
+                "reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "conflict": {
+                "ext-maxminddb": "<1.10.1,>=2.0.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "*",
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpstan/phpstan": "*",
+                "phpunit/phpcov": ">=6.0.0",
+                "phpunit/phpunit": ">=8.0.0,<10.0.0",
+                "squizlabs/php_codesniffer": "3.*"
+            },
+            "suggest": {
+                "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
+                "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
+                "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "MaxMind\\Db\\": "src/MaxMind/Db"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Gregory J. Oschwald",
+                    "email": "goschwald@maxmind.com",
+                    "homepage": "https://www.maxmind.com/"
+                }
+            ],
+            "description": "MaxMind DB Reader API",
+            "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
+            "keywords": [
+                "database",
+                "geoip",
+                "geoip2",
+                "geolocation",
+                "maxmind"
+            ],
+            "support": {
+                "issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues",
+                "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.10.1"
+            },
+            "time": "2021-04-14T17:49:35+00:00"
+        },
+        {
+            "name": "maxmind/web-service-common",
+            "version": "v0.8.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/maxmind/web-service-common-php.git",
+                "reference": "32f274051c543fc865e5a84d3a2c703913641ea8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/32f274051c543fc865e5a84d3a2c703913641ea8",
+                "reference": "32f274051c543fc865e5a84d3a2c703913641ea8",
+                "shasum": ""
+            },
+            "require": {
+                "composer/ca-bundle": "^1.0.3",
+                "ext-curl": "*",
+                "ext-json": "*",
+                "php": ">=7.2"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "2.*",
+                "phpunit/phpunit": "^8.0 || ^9.0",
+                "squizlabs/php_codesniffer": "3.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "MaxMind\\Exception\\": "src/Exception",
+                    "MaxMind\\WebService\\": "src/WebService"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Gregory Oschwald",
+                    "email": "goschwald@maxmind.com"
+                }
+            ],
+            "description": "Internal MaxMind Web Service API",
+            "homepage": "https://github.com/maxmind/web-service-common-php",
+            "support": {
+                "issues": "https://github.com/maxmind/web-service-common-php/issues",
+                "source": "https://github.com/maxmind/web-service-common-php/tree/v0.8.1"
+            },
+            "time": "2020-11-02T17:00:53+00:00"
+        },
+        {
+            "name": "michalsn/codeigniter4-uuid",
+            "version": "dev-develop",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/michalsn/codeigniter4-uuid.git",
+                "reference": "b26512ac4f3f0c772fbfa2c3317346d3c17e2d44"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/michalsn/codeigniter4-uuid/zipball/b26512ac4f3f0c772fbfa2c3317346d3c17e2d44",
+                "reference": "b26512ac4f3f0c772fbfa2c3317346d3c17e2d44",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "ramsey/uuid": "^4.0"
+            },
+            "require-dev": {
+                "codeigniter4/codeigniter4": "dev-develop",
+                "phpunit/phpunit": "8.5.*"
+            },
+            "default-branch": true,
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Michalsn\\Uuid\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "michalsn",
+                    "homepage": "https://github.com/michalsn",
+                    "role": "Developer"
+                }
+            ],
+            "description": "UUID package for CodeIgniter 4 with support for Model and Entity.",
+            "homepage": "https://github.com/michalsn/codeigniter4-uuid",
+            "keywords": [
+                "codeigniter4",
+                "entity",
+                "model",
+                "uuid"
+            ],
+            "support": {
+                "issues": "https://github.com/michalsn/codeigniter4-uuid/issues",
+                "source": "https://github.com/michalsn/codeigniter4-uuid/tree/develop"
+            },
+            "time": "2021-05-10T16:28:01+00:00"
+        },
+        {
+            "name": "myth/auth",
+            "version": "dev-develop",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/lonnieezell/myth-auth.git",
+                "reference": "fb0c8b8cae5b796d4f6d89e74ce6cab07966cdc1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/lonnieezell/myth-auth/zipball/fb0c8b8cae5b796d4f6d89e74ce6cab07966cdc1",
+                "reference": "fb0c8b8cae5b796d4f6d89e74ce6cab07966cdc1",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3 || ^8.0"
+            },
+            "provide": {
+                "codeigniter4/authentication-implementation": "1.0"
+            },
+            "require-dev": {
+                "codeigniter4/codeigniter4": "dev-develop",
+                "codeigniter4/codeigniter4-standard": "^1.0",
+                "fakerphp/faker": "^1.9",
+                "mockery/mockery": "^1.0",
+                "phpstan/phpstan": "^0.12",
+                "phpunit/phpunit": "^9.2",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "default-branch": true,
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Myth\\Auth\\": "src"
+                },
+                "exclude-from-classmap": [
+                    "**/Database/Migrations/**"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Lonnie Ezell",
+                    "email": "lonnieje@gmail.com",
+                    "homepage": "http://newmythmedia.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Flexible authentication/authorization system for CodeIgniter 4.",
+            "homepage": "https://github.com/lonnieezell/myth-auth",
+            "keywords": [
+                "Authentication",
+                "authorization",
+                "codeigniter"
+            ],
+            "support": {
+                "issues": "https://github.com/lonnieezell/myth-auth/issues",
+                "source": "https://github.com/lonnieezell/myth-auth/tree/develop"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/lonnieezell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/lonnieezell",
+                    "type": "patreon"
+                }
+            ],
+            "time": "2021-06-04T13:20:03+00:00"
+        },
+        {
+            "name": "opawg/user-agents-php",
+            "version": "v1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/opawg/user-agents-php.git",
+                "reference": "e22c7be05f475b44d0e6ecd76acf1617a2efef85"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/opawg/user-agents-php/zipball/e22c7be05f475b44d0e6ecd76acf1617a2efef85",
+                "reference": "e22c7be05f475b44d0e6ecd76acf1617a2efef85",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Opawg\\UserAgentsPhp\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Benjamin Bellamy",
+                    "email": "ben@podlibre.org",
+                    "homepage": "https://podlibre.org/"
+                }
+            ],
+            "description": "PHP implementation for opawg/user-agents.",
+            "homepage": "https://github.com/opawg/user-agents-php",
+            "support": {
+                "source": "https://github.com/opawg/user-agents-php/tree/v1.0"
+            },
+            "time": "2020-11-28T10:54:05+00:00"
+        },
+        {
+            "name": "phpoption/phpoption",
+            "version": "1.7.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/php-option.git",
+                "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525",
+                "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9 || ^7.0 || ^8.0"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.4.1",
+                "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.7-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpOption\\": "src/PhpOption/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                },
+                {
+                    "name": "Graham Campbell",
+                    "email": "graham@alt-three.com"
+                }
+            ],
+            "description": "Option Type for PHP",
+            "keywords": [
+                "language",
+                "option",
+                "php",
+                "type"
+            ],
+            "support": {
+                "issues": "https://github.com/schmittjoh/php-option/issues",
+                "source": "https://github.com/schmittjoh/php-option/tree/1.7.5"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-20T17:29:33+00:00"
+        },
+        {
+            "name": "phpseclib/phpseclib",
+            "version": "2.0.31",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpseclib/phpseclib.git",
+                "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4",
+                "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phing/phing": "~2.7",
+                "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4",
+                "squizlabs/php_codesniffer": "~2.0"
+            },
+            "suggest": {
+                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
+                "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
+                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
+                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "phpseclib/bootstrap.php"
+                ],
+                "psr-4": {
+                    "phpseclib\\": "phpseclib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jim Wigginton",
+                    "email": "terrafrost@php.net",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Patrick Monnerat",
+                    "email": "pm@datasphere.ch",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Andreas Fischer",
+                    "email": "bantu@phpbb.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Hans-Jürgen Petrich",
+                    "email": "petrich@tronic-media.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Graham Campbell",
+                    "email": "graham@alt-three.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
+            "homepage": "http://phpseclib.sourceforge.net",
+            "keywords": [
+                "BigInteger",
+                "aes",
+                "asn.1",
+                "asn1",
+                "blowfish",
+                "crypto",
+                "cryptography",
+                "encryption",
+                "rsa",
+                "security",
+                "sftp",
+                "signature",
+                "signing",
+                "ssh",
+                "twofish",
+                "x.509",
+                "x509"
+            ],
+            "support": {
+                "issues": "https://github.com/phpseclib/phpseclib/issues",
+                "source": "https://github.com/phpseclib/phpseclib/tree/2.0.31"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/terrafrost",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/phpseclib",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-04-06T13:56:45+00:00"
+        },
+        {
+            "name": "podlibre/ipcat",
+            "version": "v1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/podlibre/ipcat.git",
+                "reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/podlibre/ipcat/zipball/1adfc821be508ddc8a742f6a5d5e6e42fdf28e86",
+                "reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Podlibre\\Ipcat\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "GPL-3.0-only"
+            ],
+            "authors": [
+                {
+                    "name": "Benjamin Bellamy",
+                    "email": "ben@podlibre.org",
+                    "homepage": "https://podlibre.org/"
+                }
+            ],
+            "description": "Categorization of IP Addresses forked from https://github.com/client9/ipcat",
+            "homepage": "https://github.com/podlibre/ipcat",
+            "support": {
+                "source": "https://github.com/podlibre/ipcat/tree/v1.0"
+            },
+            "time": "2020-10-05T17:15:07+00:00"
+        },
+        {
+            "name": "podlibre/podcast-namespace",
+            "version": "v1.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://code.podlibre.org/podlibre/podcastnamespace",
+                "reference": "4525c06ee9dd95bb745ee875d55b64a053c74cd6"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Podlibre\\PodcastNamespace\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Benjamin Bellamy",
+                    "email": "ben@podlibre.org",
+                    "homepage": "https://podlibre.org/"
+                }
+            ],
+            "description": "PHP implementation for the Podcast Namespace.",
+            "homepage": "https://code.podlibre.org/podlibre/podcastnamespace",
+            "time": "2021-01-14T15:47:06+00:00"
+        },
+        {
+            "name": "psr/cache",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/cache.git",
+                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
+                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Cache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for caching libraries",
+            "keywords": [
+                "cache",
+                "psr",
+                "psr-6"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/cache/tree/master"
+            },
+            "time": "2016-08-06T20:24:11+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.1.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+                "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/log/tree/1.1.4"
+            },
+            "time": "2021-05-03T11:20:27+00:00"
+        },
+        {
+            "name": "ramsey/collection",
+            "version": "1.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ramsey/collection.git",
+                "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1",
+                "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8"
+            },
+            "require-dev": {
+                "captainhook/captainhook": "^5.3",
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "ergebnis/composer-normalize": "^2.6",
+                "fakerphp/faker": "^1.5",
+                "hamcrest/hamcrest-php": "^2",
+                "jangregor/phpstan-prophecy": "^0.8",
+                "mockery/mockery": "^1.3",
+                "phpstan/extension-installer": "^1",
+                "phpstan/phpstan": "^0.12.32",
+                "phpstan/phpstan-mockery": "^0.12.5",
+                "phpstan/phpstan-phpunit": "^0.12.11",
+                "phpunit/phpunit": "^8.5 || ^9",
+                "psy/psysh": "^0.10.4",
+                "slevomat/coding-standard": "^6.3",
+                "squizlabs/php_codesniffer": "^3.5",
+                "vimeo/psalm": "^4.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Ramsey\\Collection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ben Ramsey",
+                    "email": "ben@benramsey.com",
+                    "homepage": "https://benramsey.com"
+                }
+            ],
+            "description": "A PHP 7.2+ library for representing and manipulating collections.",
+            "keywords": [
+                "array",
+                "collection",
+                "hash",
+                "map",
+                "queue",
+                "set"
+            ],
+            "support": {
+                "issues": "https://github.com/ramsey/collection/issues",
+                "source": "https://github.com/ramsey/collection/tree/1.1.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/ramsey",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-01-21T17:40:04+00:00"
+        },
+        {
+            "name": "ramsey/uuid",
+            "version": "4.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ramsey/uuid.git",
+                "reference": "cd4032040a750077205918c86049aa0f43d22947"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947",
+                "reference": "cd4032040a750077205918c86049aa0f43d22947",
+                "shasum": ""
+            },
+            "require": {
+                "brick/math": "^0.8 || ^0.9",
+                "ext-json": "*",
+                "php": "^7.2 || ^8",
+                "ramsey/collection": "^1.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "replace": {
+                "rhumsaa/uuid": "self.version"
+            },
+            "require-dev": {
+                "codeception/aspect-mock": "^3",
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0",
+                "doctrine/annotations": "^1.8",
+                "goaop/framework": "^2",
+                "mockery/mockery": "^1.3",
+                "moontoast/math": "^1.1",
+                "paragonie/random-lib": "^2",
+                "php-mock/php-mock-mockery": "^1.3",
+                "php-mock/php-mock-phpunit": "^2.5",
+                "php-parallel-lint/php-parallel-lint": "^1.1",
+                "phpbench/phpbench": "^0.17.1",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^0.12",
+                "phpstan/phpstan-mockery": "^0.12",
+                "phpstan/phpstan-phpunit": "^0.12",
+                "phpunit/phpunit": "^8.5",
+                "psy/psysh": "^0.10.0",
+                "slevomat/coding-standard": "^6.0",
+                "squizlabs/php_codesniffer": "^3.5",
+                "vimeo/psalm": "3.9.4"
+            },
+            "suggest": {
+                "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+                "ext-ctype": "Enables faster processing of character classification using ctype functions.",
+                "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+                "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+                "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+                "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Ramsey\\Uuid\\": "src/"
+                },
+                "files": [
+                    "src/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+            "homepage": "https://github.com/ramsey/uuid",
+            "keywords": [
+                "guid",
+                "identifier",
+                "uuid"
+            ],
+            "support": {
+                "issues": "https://github.com/ramsey/uuid/issues",
+                "rss": "https://github.com/ramsey/uuid/releases.atom",
+                "source": "https://github.com/ramsey/uuid"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/ramsey",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-08-18T17:17:46+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
+                "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-02-19T12:13:01+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
+                "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-27T09:27:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0",
+                "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-02-19T12:13:01+00:00"
+        },
+        {
+            "name": "vlucas/phpdotenv",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/vlucas/phpdotenv.git",
+                "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56",
+                "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56",
+                "shasum": ""
+            },
+            "require": {
+                "ext-pcre": "*",
+                "graham-campbell/result-type": "^1.0.1",
+                "php": "^7.1.3 || ^8.0",
+                "phpoption/phpoption": "^1.7.4",
+                "symfony/polyfill-ctype": "^1.17",
+                "symfony/polyfill-mbstring": "^1.17",
+                "symfony/polyfill-php80": "^1.17"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.4.1",
+                "ext-filter": "*",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1"
+            },
+            "suggest": {
+                "ext-filter": "Required to use the boolean validator."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Dotenv\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "graham@alt-three.com",
+                    "homepage": "https://gjcampbell.co.uk/"
+                },
+                {
+                    "name": "Vance Lucas",
+                    "email": "vance@vancelucas.com",
+                    "homepage": "https://vancelucas.com/"
+                }
+            ],
+            "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+            "keywords": [
+                "dotenv",
+                "env",
+                "environment"
+            ],
+            "support": {
+                "issues": "https://github.com/vlucas/phpdotenv/issues",
+                "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-01-20T15:23:13+00:00"
+        },
+        {
+            "name": "whichbrowser/parser",
+            "version": "v2.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/WhichBrowser/Parser-PHP.git",
+                "reference": "bcf642a1891032de16a5ab976fd352753dd7f9a0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/WhichBrowser/Parser-PHP/zipball/bcf642a1891032de16a5ab976fd352753dd7f9a0",
+                "reference": "bcf642a1891032de16a5ab976fd352753dd7f9a0",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0",
+                "psr/cache": "^1.0"
+            },
+            "require-dev": {
+                "cache/array-adapter": "^1.1",
+                "icomefromthenet/reverse-regex": "0.0.6.3",
+                "php-coveralls/php-coveralls": "^2.0",
+                "phpunit/php-code-coverage": "^5.0 || ^7.0",
+                "phpunit/phpunit": "^6.0 || ^8.0",
+                "squizlabs/php_codesniffer": "^3.5",
+                "symfony/yaml": "~3.4 || ~4.0"
+            },
+            "suggest": {
+                "cache/array-adapter": "Allows testing of the caching functionality"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "WhichBrowser\\": [
+                        "src/",
+                        "tests/src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Niels Leenheer",
+                    "email": "niels@leenheer.nl",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Useragent sniffing library for PHP",
+            "homepage": "http://whichbrowser.net",
+            "keywords": [
+                "browser",
+                "sniffing",
+                "ua",
+                "useragent"
+            ],
+            "support": {
+                "issues": "https://github.com/WhichBrowser/Parser-PHP/issues",
+                "source": "https://github.com/WhichBrowser/Parser-PHP/tree/v2.1.2"
+            },
+            "time": "2021-05-10T10:18:11+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "captainhook/captainhook",
+            "version": "5.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/captainhookphp/captainhook.git",
+                "reference": "03f31d3c6bdec50c831381f27ecad48c73840726"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/captainhookphp/captainhook/zipball/03f31d3c6bdec50c831381f27ecad48c73840726",
+                "reference": "03f31d3c6bdec50c831381f27ecad48c73840726",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-spl": "*",
+                "ext-xml": "*",
+                "php": ">=7.2",
+                "sebastianfeldmann/camino": "^0.9.2",
+                "sebastianfeldmann/cli": "^3.3",
+                "sebastianfeldmann/git": "^3.7",
+                "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0"
+            },
+            "replace": {
+                "sebastianfeldmann/captainhook": "*"
+            },
+            "require-dev": {
+                "composer/composer": "~1",
+                "mikey179/vfsstream": "~1"
+            },
+            "bin": [
+                "bin/captainhook"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "6.0.x-dev"
+                },
+                "captainhook": {
+                    "config": "captainhook.json"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "CaptainHook\\App\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Feldmann",
+                    "email": "sf@sebastian-feldmann.info"
+                }
+            ],
+            "description": "PHP git hook manager",
+            "homepage": "https://github.com/captainhookphp/captainhook",
+            "keywords": [
+                "commit-msg",
+                "git",
+                "hooks",
+                "post-merge",
+                "pre-commit",
+                "pre-push",
+                "prepare-commit-msg"
+            ],
+            "support": {
+                "issues": "https://github.com/captainhookphp/captainhook/issues",
+                "source": "https://github.com/captainhookphp/captainhook/tree/5.10.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sponsors/sebastianfeldmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-05-25T21:21:59+00:00"
+        },
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
+                "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^8.0",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
+                "phpstan/phpstan": "^0.12",
+                "phpstan/phpstan-phpunit": "^0.12",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "https://ocramius.github.io/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/instantiator/issues",
+                "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-11-10T18:47:58+00:00"
+        },
+        {
+            "name": "mikey179/vfsstream",
+            "version": "v1.6.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/bovigo/vfsStream.git",
+                "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/231c73783ebb7dd9ec77916c10037eff5a2b6efe",
+                "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5|^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.6.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "org\\bovigo\\vfs\\": "src/main/php"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Frank Kleine",
+                    "homepage": "http://frankkleine.de/",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Virtual file system to mock the real file system in unit tests.",
+            "homepage": "http://vfs.bovigo.org/",
+            "support": {
+                "issues": "https://github.com/bovigo/vfsStream/issues",
+                "source": "https://github.com/bovigo/vfsStream/tree/master",
+                "wiki": "https://github.com/bovigo/vfsStream/wiki"
+            },
+            "time": "2019-10-30T15:31:00+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.10.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
+                "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.0",
+                "doctrine/common": "^2.6",
+                "phpunit/phpunit": "^7.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                },
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "support": {
+                "issues": "https://github.com/myclabs/DeepCopy/issues",
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
+            },
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-11-13T09:40:50+00:00"
+        },
+        {
+            "name": "nette/neon",
+            "version": "v3.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nette/neon.git",
+                "reference": "e4ca6f4669121ca6876b1d048c612480e39a28d5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nette/neon/zipball/e4ca6f4669121ca6876b1d048c612480e39a28d5",
+                "reference": "e4ca6f4669121ca6876b1d048c612480e39a28d5",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "php": ">=7.1"
+            },
+            "require-dev": {
+                "nette/tester": "^2.0",
+                "phpstan/phpstan": "^0.12",
+                "tracy/tracy": "^2.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause",
+                "GPL-2.0-only",
+                "GPL-3.0-only"
+            ],
+            "authors": [
+                {
+                    "name": "David Grudl",
+                    "homepage": "https://davidgrudl.com"
+                },
+                {
+                    "name": "Nette Community",
+                    "homepage": "https://nette.org/contributors"
+                }
+            ],
+            "description": "🍸 Nette NEON: encodes and decodes NEON file format.",
+            "homepage": "https://ne-on.org",
+            "keywords": [
+                "export",
+                "import",
+                "neon",
+                "nette",
+                "yaml"
+            ],
+            "support": {
+                "issues": "https://github.com/nette/neon/issues",
+                "source": "https://github.com/nette/neon/tree/v3.2.2"
+            },
+            "time": "2021-02-28T12:30:32+00:00"
+        },
+        {
+            "name": "nette/utils",
+            "version": "v3.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nette/utils.git",
+                "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nette/utils/zipball/967cfc4f9a1acd5f1058d76715a424c53343c20c",
+                "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2 <8.1"
+            },
+            "conflict": {
+                "nette/di": "<3.0.6"
+            },
+            "require-dev": {
+                "nette/tester": "~2.0",
+                "phpstan/phpstan": "^0.12",
+                "tracy/tracy": "^2.3"
+            },
+            "suggest": {
+                "ext-gd": "to use Image",
+                "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
+                "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+                "ext-json": "to use Nette\\Utils\\Json",
+                "ext-mbstring": "to use Strings::lower() etc...",
+                "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()",
+                "ext-xml": "to use Strings::length() etc. when mbstring is not available"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause",
+                "GPL-2.0-only",
+                "GPL-3.0-only"
+            ],
+            "authors": [
+                {
+                    "name": "David Grudl",
+                    "homepage": "https://davidgrudl.com"
+                },
+                {
+                    "name": "Nette Community",
+                    "homepage": "https://nette.org/contributors"
+                }
+            ],
+            "description": "🛠  Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+            "homepage": "https://nette.org",
+            "keywords": [
+                "array",
+                "core",
+                "datetime",
+                "images",
+                "json",
+                "nette",
+                "paginator",
+                "password",
+                "slugify",
+                "string",
+                "unicode",
+                "utf-8",
+                "utility",
+                "validation"
+            ],
+            "support": {
+                "issues": "https://github.com/nette/utils/issues",
+                "source": "https://github.com/nette/utils/tree/v3.2.2"
+            },
+            "time": "2021-03-03T22:53:25+00:00"
+        },
+        {
+            "name": "nikic/php-parser",
+            "version": "v4.10.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f",
+                "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=7.0"
+            },
+            "require-dev": {
+                "ircmaxell/php-yacc": "^0.0.7",
+                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+            },
+            "bin": [
+                "bin/php-parse"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.9-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpParser\\": "lib/PhpParser"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov"
+                }
+            ],
+            "description": "A PHP parser written in PHP",
+            "keywords": [
+                "parser",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/nikic/PHP-Parser/issues",
+                "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5"
+            },
+            "time": "2021-05-03T19:11:20+00:00"
+        },
+        {
+            "name": "phar-io/manifest",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phar-io/manifest.git",
+                "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
+                "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-phar": "*",
+                "ext-xmlwriter": "*",
+                "phar-io/version": "^3.0.1",
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+            "support": {
+                "issues": "https://github.com/phar-io/manifest/issues",
+                "source": "https://github.com/phar-io/manifest/tree/master"
+            },
+            "time": "2020-06-27T14:33:11+00:00"
+        },
+        {
+            "name": "phar-io/version",
+            "version": "3.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phar-io/version.git",
+                "reference": "bae7c545bef187884426f042434e561ab1ddb182"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
+                "reference": "bae7c545bef187884426f042434e561ab1ddb182",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Library for handling version information and constraints",
+            "support": {
+                "issues": "https://github.com/phar-io/version/issues",
+                "source": "https://github.com/phar-io/version/tree/3.1.0"
+            },
+            "time": "2021-02-23T14:00:09+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "FQSEN",
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "support": {
+                "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+                "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+            },
+            "time": "2020-06-27T09:03:43+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "5.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "shasum": ""
+            },
+            "require": {
+                "ext-filter": "*",
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.2",
+                "phpdocumentor/type-resolver": "^1.3",
+                "webmozart/assert": "^1.9.1"
+            },
+            "require-dev": {
+                "mockery/mockery": "~1.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "account@ijaap.nl"
+                }
+            ],
+            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "support": {
+                "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
+            },
+            "time": "2020-09-03T19:13:55+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.0"
+            },
+            "require-dev": {
+                "ext-tokenizer": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-1.x": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "support": {
+                "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0"
+            },
+            "time": "2020-09-17T18:55:26+00:00"
+        },
+        {
+            "name": "phpspec/prophecy",
+            "version": "1.13.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea",
+                "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.2",
+                "php": "^7.2 || ~8.0, <8.1",
+                "phpdocumentor/reflection-docblock": "^5.2",
+                "sebastian/comparator": "^3.0 || ^4.0",
+                "sebastian/recursion-context": "^3.0 || ^4.0"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "^6.0",
+                "phpunit/phpunit": "^8.0 || ^9.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.11.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "marcello.duarte@gmail.com"
+                }
+            ],
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "support": {
+                "issues": "https://github.com/phpspec/prophecy/issues",
+                "source": "https://github.com/phpspec/prophecy/tree/1.13.0"
+            },
+            "time": "2021-03-17T13:42:18+00:00"
+        },
+        {
+            "name": "phpstan/extension-installer",
+            "version": "1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpstan/extension-installer.git",
+                "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/66c7adc9dfa38b6b5838a9fb728b68a7d8348051",
+                "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.1 || ^2.0",
+                "php": "^7.1 || ^8.0",
+                "phpstan/phpstan": ">=0.11.6"
+            },
+            "require-dev": {
+                "composer/composer": "^1.8",
+                "phing/phing": "^2.16.3",
+                "php-parallel-lint/php-parallel-lint": "^1.2.0",
+                "phpstan/phpstan-strict-rules": "^0.11 || ^0.12"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "PHPStan\\ExtensionInstaller\\Plugin"
+            },
+            "autoload": {
+                "psr-4": {
+                    "PHPStan\\ExtensionInstaller\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Composer plugin for automatic installation of PHPStan extensions",
+            "support": {
+                "issues": "https://github.com/phpstan/extension-installer/issues",
+                "source": "https://github.com/phpstan/extension-installer/tree/1.1.0"
+            },
+            "time": "2020-12-13T13:06:13+00:00"
+        },
+        {
+            "name": "phpstan/phpdoc-parser",
+            "version": "0.5.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpstan/phpdoc-parser.git",
+                "reference": "e352d065af1ae9b41c12d1dfd309e90f7b1f55c9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/e352d065af1ae9b41c12d1dfd309e90f7b1f55c9",
+                "reference": "e352d065af1ae9b41c12d1dfd309e90f7b1f55c9",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "phing/phing": "^2.16.3",
+                "php-parallel-lint/php-parallel-lint": "^1.2",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^0.12.60",
+                "phpstan/phpstan-strict-rules": "^0.12.5",
+                "phpunit/phpunit": "^7.5.20",
+                "symfony/process": "^5.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PHPStan\\PhpDocParser\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHPDoc parser with support for nullable, intersection and generic types",
+            "support": {
+                "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/0.5.4"
+            },
+            "time": "2021-04-03T14:46:19+00:00"
+        },
+        {
+            "name": "phpstan/phpstan",
+            "version": "0.12.88",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpstan/phpstan.git",
+                "reference": "464d1a81af49409c41074aa6640ed0c4cbd9bb68"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/464d1a81af49409c41074aa6640ed0c4cbd9bb68",
+                "reference": "464d1a81af49409c41074aa6640ed0c4cbd9bb68",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1|^8.0"
+            },
+            "conflict": {
+                "phpstan/phpstan-shim": "*"
+            },
+            "bin": [
+                "phpstan",
+                "phpstan.phar"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.12-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHPStan - PHP Static Analysis Tool",
+            "support": {
+                "issues": "https://github.com/phpstan/phpstan/issues",
+                "source": "https://github.com/phpstan/phpstan/tree/0.12.88"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/ondrejmirtes",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/phpstan",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-17T12:24:49+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "9.2.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "f6293e1b30a2354e8428e004689671b83871edde"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde",
+                "reference": "f6293e1b30a2354e8428e004689671b83871edde",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "ext-xmlwriter": "*",
+                "nikic/php-parser": "^4.10.2",
+                "php": ">=7.3",
+                "phpunit/php-file-iterator": "^3.0.3",
+                "phpunit/php-text-template": "^2.0.2",
+                "sebastian/code-unit-reverse-lookup": "^2.0.2",
+                "sebastian/complexity": "^2.0",
+                "sebastian/environment": "^5.1.2",
+                "sebastian/lines-of-code": "^1.0.3",
+                "sebastian/version": "^3.0.1",
+                "theseer/tokenizer": "^1.2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "suggest": {
+                "ext-pcov": "*",
+                "ext-xdebug": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "9.2-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-03-28T07:26:59+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "3.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
+                "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T05:57:25+00:00"
+        },
+        {
+            "name": "phpunit/php-invoker",
+            "version": "3.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-invoker.git",
+                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "ext-pcntl": "*",
+                "phpunit/phpunit": "^9.3"
+            },
+            "suggest": {
+                "ext-pcntl": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Invoke callables with a timeout",
+            "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+            "keywords": [
+                "process"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+                "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T05:58:55+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "2.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+                "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T05:33:50+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "5.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+                "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:16:10+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "9.5.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/89ff45ea9d70e35522fb6654a2ebc221158de276",
+                "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.3.1",
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "ext-xmlwriter": "*",
+                "myclabs/deep-copy": "^1.10.1",
+                "phar-io/manifest": "^2.0.1",
+                "phar-io/version": "^3.0.2",
+                "php": ">=7.3",
+                "phpspec/prophecy": "^1.12.1",
+                "phpunit/php-code-coverage": "^9.2.3",
+                "phpunit/php-file-iterator": "^3.0.5",
+                "phpunit/php-invoker": "^3.1.1",
+                "phpunit/php-text-template": "^2.0.3",
+                "phpunit/php-timer": "^5.0.2",
+                "sebastian/cli-parser": "^1.0.1",
+                "sebastian/code-unit": "^1.0.6",
+                "sebastian/comparator": "^4.0.5",
+                "sebastian/diff": "^4.0.3",
+                "sebastian/environment": "^5.1.3",
+                "sebastian/exporter": "^4.0.3",
+                "sebastian/global-state": "^5.0.1",
+                "sebastian/object-enumerator": "^4.0.3",
+                "sebastian/resource-operations": "^3.0.3",
+                "sebastian/type": "^2.3.2",
+                "sebastian/version": "^3.0.2"
+            },
+            "require-dev": {
+                "ext-pdo": "*",
+                "phpspec/prophecy-phpunit": "^2.0.1"
+            },
+            "suggest": {
+                "ext-soap": "*",
+                "ext-xdebug": "*"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "9.5-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ],
+                "files": [
+                    "src/Framework/Assert/Functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.5"
+            },
+            "funding": [
+                {
+                    "url": "https://phpunit.de/donate.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T04:49:07+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
+                "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "support": {
+                "issues": "https://github.com/php-fig/container/issues",
+                "source": "https://github.com/php-fig/container/tree/1.1.1"
+            },
+            "time": "2021-03-05T17:36:06+00:00"
+        },
+        {
+            "name": "psr/event-dispatcher",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/event-dispatcher.git",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\EventDispatcher\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Standard interfaces for event handling.",
+            "keywords": [
+                "events",
+                "psr",
+                "psr-14"
+            ],
+            "support": {
+                "issues": "https://github.com/php-fig/event-dispatcher/issues",
+                "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+            },
+            "time": "2019-01-08T18:20:26+00:00"
+        },
+        {
+            "name": "rector/rector",
+            "version": "0.11.14",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/rectorphp/rector.git",
+                "reference": "49dd2ff88bd67d5126557db91c446c322f5bbcef"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/49dd2ff88bd67d5126557db91c446c322f5bbcef",
+                "reference": "49dd2ff88bd67d5126557db91c446c322f5bbcef",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1|^8.0",
+                "phpstan/phpstan": ">=0.12.86 <=0.12.88"
+            },
+            "conflict": {
+                "phpstan/phpdoc-parser": "<=0.5.3",
+                "phpstan/phpstan": "<=0.12.82",
+                "rector/rector-cakephp": "*",
+                "rector/rector-doctrine": "*",
+                "rector/rector-nette": "*",
+                "rector/rector-nette-to-symfony": "*",
+                "rector/rector-phpunit": "*",
+                "rector/rector-prefixed": "*",
+                "rector/rector-symfony": "*"
+            },
+            "bin": [
+                "bin/rector"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "0.10-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Prefixed and PHP 7.1 downgraded version of rector/rector",
+            "support": {
+                "issues": "https://github.com/rectorphp/rector/issues",
+                "source": "https://github.com/rectorphp/rector/tree/0.11.14"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T21:48:47+00:00"
+        },
+        {
+            "name": "rector/rector-phpstan-rules",
+            "version": "0.2.12",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/rectorphp/phpstan-rules.git",
+                "reference": "84b2034aab951be7e86dc6cc7e141ee92a3d115b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/rectorphp/phpstan-rules/zipball/84b2034aab951be7e86dc6cc7e141ee92a3d115b",
+                "reference": "84b2034aab951be7e86dc6cc7e141ee92a3d115b",
+                "shasum": ""
+            },
+            "require": {
+                "nette/utils": "^3.2",
+                "php": ">=7.3",
+                "phpstan/phpstan": "^0.12.86",
+                "symplify/phpstan-rules": "^9.3.5"
+            },
+            "require-dev": {
+                "phpstan/extension-installer": "^1.1",
+                "phpunit/phpunit": "^9.5",
+                "symplify/easy-coding-standard": "^9.3",
+                "symplify/phpstan-extensions": "^9.3"
+            },
+            "type": "phpstan-extension",
+            "extra": {
+                "phpstan": {
+                    "includes": [
+                        "config/config.neon"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Rector\\PHPStanRules\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHPStan rules for Rector projects - with focus on static reflection, constant re-use and Rector design patterns",
+            "support": {
+                "issues": "https://github.com/rectorphp/phpstan-rules/issues",
+                "source": "https://github.com/rectorphp/phpstan-rules/tree/0.2.12"
+            },
+            "time": "2021-05-20T22:31:19+00:00"
+        },
+        {
+            "name": "sebastian/cli-parser",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/cli-parser.git",
+                "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+                "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library for parsing CLI options",
+            "homepage": "https://github.com/sebastianbergmann/cli-parser",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+                "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T06:08:49+00:00"
+        },
+        {
+            "name": "sebastian/code-unit",
+            "version": "1.0.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit.git",
+                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Collection of value objects that represent the PHP code units",
+            "homepage": "https://github.com/sebastianbergmann/code-unit",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+                "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:08:54+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "2.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T05:30:19+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "4.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
+                "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "sebastian/diff": "^4.0",
+                "sebastian/exporter": "^4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "https://github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/comparator/issues",
+                "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T15:49:45+00:00"
+        },
+        {
+            "name": "sebastian/complexity",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/complexity.git",
+                "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
+                "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "^4.7",
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library for calculating the complexity of PHP code units",
+            "homepage": "https://github.com/sebastianbergmann/complexity",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/complexity/issues",
+                "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T15:52:27+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "4.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+                "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3",
+                "symfony/process": "^4.2 || ^5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff",
+                "udiff",
+                "unidiff",
+                "unified diff"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/diff/issues",
+                "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:10:38+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "5.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
+                "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "suggest": {
+                "ext-posix": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/environment/issues",
+                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T05:52:38+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "4.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
+                "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "sebastian/recursion-context": "^4.0"
+            },
+            "require-dev": {
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/exporter/issues",
+                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T05:24:23+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "5.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "a90ccbddffa067b51f574dea6eb25d5680839455"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455",
+                "reference": "a90ccbddffa067b51f574dea6eb25d5680839455",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "sebastian/object-reflector": "^2.0",
+                "sebastian/recursion-context": "^4.0"
+            },
+            "require-dev": {
+                "ext-dom": "*",
+                "phpunit/phpunit": "^9.3"
+            },
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/global-state/issues",
+                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T15:55:19+00:00"
+        },
+        {
+            "name": "sebastian/lines-of-code",
+            "version": "1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+                "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+                "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "^4.6",
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library for counting the lines of code in PHP source code",
+            "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-11-28T06:42:11+00:00"
+        },
+        {
+            "name": "sebastian/object-enumerator",
+            "version": "4.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "sebastian/object-reflector": "^2.0",
+                "sebastian/recursion-context": "^4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:12:34+00:00"
+        },
+        {
+            "name": "sebastian/object-reflector",
+            "version": "2.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-reflector.git",
+                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Allows reflection of object attributes, including inherited and non-public ones",
+            "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+                "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:14:26+00:00"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "4.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
+                "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+                "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:17:30+00:00"
+        },
+        {
+            "name": "sebastian/resource-operations",
+            "version": "3.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+                "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+                "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T06:45:17+00:00"
+        },
+        {
+            "name": "sebastian/type",
+            "version": "2.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/type.git",
+                "reference": "0d1c587401514d17e8f9258a27e23527cb1b06c1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0d1c587401514d17e8f9258a27e23527cb1b06c1",
+                "reference": "0d1c587401514d17e8f9258a27e23527cb1b06c1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Collection of value objects that represent the types of the PHP type system",
+            "homepage": "https://github.com/sebastianbergmann/type",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/type/issues",
+                "source": "https://github.com/sebastianbergmann/type/tree/2.3.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-04T13:02:07+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "3.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "c6c1022351a901512170118436c764e473f6de8c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+                "reference": "c6c1022351a901512170118436c764e473f6de8c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/version/issues",
+                "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T06:39:44+00:00"
+        },
+        {
+            "name": "sebastianfeldmann/camino",
+            "version": "0.9.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianfeldmann/camino.git",
+                "reference": "3b611368e22e8565c3a6504613136402ed9e6f69"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianfeldmann/camino/zipball/3b611368e22e8565c3a6504613136402ed9e6f69",
+                "reference": "3b611368e22e8565c3a6504613136402ed9e6f69",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "SebastianFeldmann\\Camino\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Feldmann",
+                    "email": "sf@sebastian-feldmann.info"
+                }
+            ],
+            "description": "Path management the OO way",
+            "homepage": "https://github.com/sebastianfeldmann/camino",
+            "keywords": [
+                "file system",
+                "path"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianfeldmann/camino/issues",
+                "source": "https://github.com/sebastianfeldmann/camino/tree/0.9.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianfeldmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-12-08T09:25:24+00:00"
+        },
+        {
+            "name": "sebastianfeldmann/cli",
+            "version": "3.3.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianfeldmann/cli.git",
+                "reference": "c4a677f229976c88cc8f50b1477ab15244a4f6d8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/c4a677f229976c88cc8f50b1477ab15244a4f6d8",
+                "reference": "c4a677f229976c88cc8f50b1477ab15244a4f6d8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "require-dev": {
+                "symfony/process": "^4.3 | ^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "SebastianFeldmann\\Cli\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Feldmann",
+                    "email": "sf@sebastian-feldmann.info"
+                }
+            ],
+            "description": "PHP cli helper classes",
+            "homepage": "https://github.com/sebastianfeldmann/cli",
+            "keywords": [
+                "cli"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianfeldmann/cli/issues",
+                "source": "https://github.com/sebastianfeldmann/cli/tree/3.3.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianfeldmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-03T16:02:45+00:00"
+        },
+        {
+            "name": "sebastianfeldmann/git",
+            "version": "3.7.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianfeldmann/git.git",
+                "reference": "406b98e09c37249ce586be8ed5766bf0ca389490"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/406b98e09c37249ce586be8ed5766bf0ca389490",
+                "reference": "406b98e09c37249ce586be8ed5766bf0ca389490",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-xml": "*",
+                "php": ">=7.2",
+                "sebastianfeldmann/cli": "^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "SebastianFeldmann\\Git\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Feldmann",
+                    "email": "sf@sebastian-feldmann.info"
+                }
+            ],
+            "description": "PHP git wrapper",
+            "homepage": "https://github.com/sebastianfeldmann/git",
+            "keywords": [
+                "git"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianfeldmann/git/issues",
+                "source": "https://github.com/sebastianfeldmann/git/tree/3.7.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianfeldmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-05-29T12:47:08+00:00"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "9f4a448c2d7fd2c90882dfff930b627ddbe16810"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/9f4a448c2d7fd2c90882dfff930b627ddbe16810",
+                "reference": "9f4a448c2d7fd2c90882dfff930b627ddbe16810",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1",
+                "symfony/filesystem": "^4.4|^5.0",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/polyfill-php81": "^1.22"
+            },
+            "conflict": {
+                "symfony/finder": "<4.4"
+            },
+            "require-dev": {
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/finder": "^4.4|^5.0",
+                "symfony/messenger": "^4.4|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^4.4|^5.0"
+            },
+            "suggest": {
+                "symfony/yaml": "To use the yaml reference dumper"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/config/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-26T17:43:10+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "058553870f7809087fa80fa734704a21b9bcaeb2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/058553870f7809087fa80fa734704a21b9bcaeb2",
+                "reference": "058553870f7809087fa80fa734704a21b9bcaeb2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/string": "^5.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<4.4",
+                "symfony/dotenv": "<5.1",
+                "symfony/event-dispatcher": "<4.4",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<4.4"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "symfony/var-dumper": "^4.4|^5.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Eases the creation of beautiful and testable command line interfaces",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "cli",
+                "command line",
+                "console",
+                "terminal"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/console/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-26T17:43:10+00:00"
+        },
+        {
+            "name": "symfony/dependency-injection",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/dependency-injection.git",
+                "reference": "94d973cb742d8c5c5dcf9534220e6b73b09af1d4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/94d973cb742d8c5c5dcf9534220e6b73b09af1d4",
+                "reference": "94d973cb742d8c5c5dcf9534220e6b73b09af1d4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/container": "^1.1.1",
+                "symfony/deprecation-contracts": "^2.1",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1.6|^2"
+            },
+            "conflict": {
+                "ext-psr": "<1.1|>=2",
+                "symfony/config": "<5.3",
+                "symfony/finder": "<4.4",
+                "symfony/proxy-manager-bridge": "<4.4",
+                "symfony/yaml": "<4.4"
+            },
+            "provide": {
+                "psr/container-implementation": "1.0",
+                "symfony/service-implementation": "1.0|2.0"
+            },
+            "require-dev": {
+                "symfony/config": "^5.3",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/yaml": "^4.4|^5.0"
+            },
+            "suggest": {
+                "symfony/config": "",
+                "symfony/expression-language": "For using expressions in service container configuration",
+                "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
+                "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
+                "symfony/yaml": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\DependencyInjection\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Allows you to standardize and centralize the way objects are constructed in your application",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/dependency-injection/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-26T17:57:12+00:00"
+        },
+        {
+            "name": "symfony/deprecation-contracts",
+            "version": "v2.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/deprecation-contracts.git",
+                "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+                "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.4-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "function.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "A generic function and convention to trigger deprecation notices",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-03-23T23:28:01+00:00"
+        },
+        {
+            "name": "symfony/error-handler",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/error-handler.git",
+                "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/error-handler/zipball/0e6768b8c0dcef26df087df2bbbaa143867a59b2",
+                "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/log": "^1.0",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/var-dumper": "^4.4|^5.0"
+            },
+            "require-dev": {
+                "symfony/deprecation-contracts": "^2.1",
+                "symfony/http-kernel": "^4.4|^5.0",
+                "symfony/serializer": "^4.4|^5.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\ErrorHandler\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides tools to manage errors and ease debugging PHP code",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/error-handler/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-26T17:43:10+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67a5f354afa8e2f231081b3fa11a5912f933c3ce",
+                "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1",
+                "symfony/event-dispatcher-contracts": "^2",
+                "symfony/polyfill-php80": "^1.15"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<4.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "2.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/error-handler": "^4.4|^5.0",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/http-foundation": "^4.4|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^4.4|^5.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-26T17:43:10+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v2.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11",
+                "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/event-dispatcher": "^1"
+            },
+            "suggest": {
+                "symfony/event-dispatcher-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.4-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to dispatching event",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-03-23T23:28:01+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "348116319d7fb7d1faa781d26a48922428013eb2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/348116319d7fb7d1faa781d26a48922428013eb2",
+                "reference": "348116319d7fb7d1faa781d26a48922428013eb2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides basic utilities for the filesystem",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/filesystem/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-26T17:43:10+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6",
+                "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Finds files and directories via an intuitive fluent interface",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/finder/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-26T12:52:38+00:00"
+        },
+        {
+            "name": "symfony/http-client-contracts",
+            "version": "v2.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/http-client-contracts.git",
+                "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4",
+                "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5"
+            },
+            "suggest": {
+                "symfony/http-client-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.4-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\HttpClient\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to HTTP clients",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-04-11T23:07:08+00:00"
+        },
+        {
+            "name": "symfony/http-foundation",
+            "version": "v5.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/http-foundation.git",
+                "reference": "8827b90cf8806e467124ad476acd15216c2fceb6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8827b90cf8806e467124ad476acd15216c2fceb6",
+                "reference": "8827b90cf8806e467124ad476acd15216c2fceb6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1",
+                "symfony/polyfill-mbstring": "~1.1",
+                "symfony/polyfill-php80": "^1.15"
+            },
+            "require-dev": {
+                "predis/predis": "~1.0",
+                "symfony/cache": "^4.4|^5.0",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/mime": "^4.4|^5.0"
+            },
+            "suggest": {
+                "symfony/mime": "To use the file extension guesser"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\HttpFoundation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Defines an object-oriented layer for the HTTP specification",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/http-foundation/tree/v5.3.1"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-06-02T09:32:00+00:00"
+        },
+        {
+            "name": "symfony/http-kernel",
+            "version": "v5.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/http-kernel.git",
+                "reference": "74eb022e3bac36b3d3a897951a98759f2b32b864"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/74eb022e3bac36b3d3a897951a98759f2b32b864",
+                "reference": "74eb022e3bac36b3d3a897951a98759f2b32b864",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/log": "~1.0",
+                "symfony/deprecation-contracts": "^2.1",
+                "symfony/error-handler": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^5.0",
+                "symfony/http-client-contracts": "^1.1|^2",
+                "symfony/http-foundation": "^5.3",
+                "symfony/polyfill-ctype": "^1.8",
+                "symfony/polyfill-php73": "^1.9",
+                "symfony/polyfill-php80": "^1.15"
+            },
+            "conflict": {
+                "symfony/browser-kit": "<4.4",
+                "symfony/cache": "<5.0",
+                "symfony/config": "<5.0",
+                "symfony/console": "<4.4",
+                "symfony/dependency-injection": "<5.3",
+                "symfony/doctrine-bridge": "<5.0",
+                "symfony/form": "<5.0",
+                "symfony/http-client": "<5.0",
+                "symfony/mailer": "<5.0",
+                "symfony/messenger": "<5.0",
+                "symfony/translation": "<5.0",
+                "symfony/twig-bridge": "<5.0",
+                "symfony/validator": "<5.0",
+                "twig/twig": "<2.13"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
+            "require-dev": {
+                "psr/cache": "^1.0|^2.0|^3.0",
+                "symfony/browser-kit": "^4.4|^5.0",
+                "symfony/config": "^5.0",
+                "symfony/console": "^4.4|^5.0",
+                "symfony/css-selector": "^4.4|^5.0",
+                "symfony/dependency-injection": "^5.3",
+                "symfony/dom-crawler": "^4.4|^5.0",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/finder": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "symfony/routing": "^4.4|^5.0",
+                "symfony/stopwatch": "^4.4|^5.0",
+                "symfony/translation": "^4.4|^5.0",
+                "symfony/translation-contracts": "^1.1|^2",
+                "twig/twig": "^2.13|^3.0.4"
+            },
+            "suggest": {
+                "symfony/browser-kit": "",
+                "symfony/config": "",
+                "symfony/console": "",
+                "symfony/dependency-injection": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\HttpKernel\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides a structured process for converting a Request into a Response",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/http-kernel/tree/v5.3.1"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-06-02T10:07:12+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-grapheme",
+            "version": "v1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+                "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab",
+                "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's grapheme_* functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "grapheme",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-27T09:17:38+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-normalizer",
+            "version": "v1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+                "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
+                "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's Normalizer class and related functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "intl",
+                "normalizer",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-02-19T12:13:01+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
+                "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-02-19T12:13:01+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php81",
+            "version": "v1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php81.git",
+                "reference": "e66119f3de95efc359483f810c4c3e6436279436"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436",
+                "reference": "e66119f3de95efc359483f810c4c3e6436279436",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php81\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-21T13:25:03+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "53e36cb1c160505cdaf1ef201501669c4c317191"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/53e36cb1c160505cdaf1ef201501669c4c317191",
+                "reference": "53e36cb1c160505cdaf1ef201501669c4c317191",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/polyfill-php80": "^1.15"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Executes commands in sub-processes",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/process/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-26T12:52:38+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v2.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+                "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/container": "^1.1"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.4-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-04-01T10:43:52+00:00"
+        },
+        {
+            "name": "symfony/string",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/string.git",
+                "reference": "a9a0f8b6aafc5d2d1c116dcccd1573a95153515b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/string/zipball/a9a0f8b6aafc5d2d1c116dcccd1573a95153515b",
+                "reference": "a9a0f8b6aafc5d2d1c116dcccd1573a95153515b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-intl-grapheme": "~1.0",
+                "symfony/polyfill-intl-normalizer": "~1.0",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php80": "~1.15"
+            },
+            "require-dev": {
+                "symfony/error-handler": "^4.4|^5.0",
+                "symfony/http-client": "^4.4|^5.0",
+                "symfony/translation-contracts": "^1.1|^2",
+                "symfony/var-exporter": "^4.4|^5.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\String\\": ""
+                },
+                "files": [
+                    "Resources/functions.php"
+                ],
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "grapheme",
+                "i18n",
+                "string",
+                "unicode",
+                "utf-8",
+                "utf8"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/string/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-26T17:43:10+00:00"
+        },
+        {
+            "name": "symfony/var-dumper",
+            "version": "v5.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/var-dumper.git",
+                "reference": "1d3953e627fe4b5f6df503f356b6545ada6351f3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1d3953e627fe4b5f6df503f356b6545ada6351f3",
+                "reference": "1d3953e627fe4b5f6df503f356b6545ada6351f3",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php80": "^1.15"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.4.3",
+                "symfony/console": "<4.4"
+            },
+            "require-dev": {
+                "ext-iconv": "*",
+                "symfony/console": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "twig/twig": "^2.13|^3.0.4"
+            },
+            "suggest": {
+                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+                "ext-intl": "To show region name in time zone dump",
+                "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+            },
+            "bin": [
+                "Resources/bin/var-dump-server"
+            ],
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "Resources/functions/dump.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Component\\VarDumper\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides mechanisms for walking through any arbitrary PHP variable",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "debug",
+                "dump"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/var-dumper/tree/v5.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-27T12:28:50+00:00"
+        },
+        {
+            "name": "symplify/astral",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/astral.git",
+                "reference": "5a1f3cbd56d75e7a7c7ee7a8ce61fddba31aa44d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/astral/zipball/5a1f3cbd56d75e7a7c7ee7a8ce61fddba31aa44d",
+                "reference": "5a1f3cbd56d75e7a7c7ee7a8ce61fddba31aa44d",
+                "shasum": ""
+            },
+            "require": {
+                "nette/utils": "^3.2",
+                "nikic/php-parser": "4.10.5",
+                "php": ">=7.3",
+                "symfony/dependency-injection": "^5.2",
+                "symfony/http-kernel": "^4.4|^5.2",
+                "symplify/autowire-array-parameter": "^9.3.20",
+                "symplify/package-builder": "^9.3.20"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5",
+                "symplify/easy-testing": "^9.3.20"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\Astral\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Toolking for smart daily work with AST",
+            "support": {
+                "source": "https://github.com/symplify/astral/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T15:49:44+00:00"
+        },
+        {
+            "name": "symplify/autowire-array-parameter",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/autowire-array-parameter.git",
+                "reference": "a557f4dba14d291d648a3fa863e9d887686d46d3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/a557f4dba14d291d648a3fa863e9d887686d46d3",
+                "reference": "a557f4dba14d291d648a3fa863e9d887686d46d3",
+                "shasum": ""
+            },
+            "require": {
+                "nette/utils": "^3.2",
+                "php": ">=7.3",
+                "symfony/dependency-injection": "^5.2",
+                "symplify/package-builder": "^9.3.20"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\AutowireArrayParameter\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Autowire array parameters for your Symfony applications",
+            "support": {
+                "source": "https://github.com/symplify/autowire-array-parameter/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T15:49:46+00:00"
+        },
+        {
+            "name": "symplify/coding-standard",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/coding-standard.git",
+                "reference": "40bffb20e222b9dfcbf5f6d93abd2867bd2dc935"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/coding-standard/zipball/40bffb20e222b9dfcbf5f6d93abd2867bd2dc935",
+                "reference": "40bffb20e222b9dfcbf5f6d93abd2867bd2dc935",
+                "shasum": ""
+            },
+            "require": {
+                "friendsofphp/php-cs-fixer": "^3.0",
+                "nette/utils": "^3.2",
+                "php": ">=7.3",
+                "symplify/autowire-array-parameter": "^9.3.20",
+                "symplify/package-builder": "^9.3.20",
+                "symplify/rule-doc-generator-contracts": "^9.3.20",
+                "symplify/symplify-kernel": "^9.3.20"
+            },
+            "require-dev": {
+                "doctrine/orm": "^2.7",
+                "nette/application": "^3.1",
+                "nette/bootstrap": "^3.1",
+                "phpunit/phpunit": "^9.5",
+                "symfony/framework-bundle": "^4.4|^5.2",
+                "symfony/http-kernel": "^4.4|^5.2",
+                "symplify/easy-coding-standard-tester": "^9.3.20",
+                "symplify/php-config-printer": "^9.3.20",
+                "symplify/rule-doc-generator": "^9.3.20",
+                "symplify/smart-file-system": "^9.3.20"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\CodingStandard\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Set of Symplify rules for PHP_CodeSniffer and PHP CS Fixer.",
+            "support": {
+                "source": "https://github.com/symplify/coding-standard/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T15:49:48+00:00"
+        },
+        {
+            "name": "symplify/composer-json-manipulator",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/composer-json-manipulator.git",
+                "reference": "39dffab1eef2b8f04baf0ecae0f42d8f4751b485"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/composer-json-manipulator/zipball/39dffab1eef2b8f04baf0ecae0f42d8f4751b485",
+                "reference": "39dffab1eef2b8f04baf0ecae0f42d8f4751b485",
+                "shasum": ""
+            },
+            "require": {
+                "nette/utils": "^3.2",
+                "php": ">=7.3",
+                "symfony/config": "^4.4|^5.2",
+                "symfony/dependency-injection": "^5.2",
+                "symfony/filesystem": "^4.4|^5.2",
+                "symfony/http-kernel": "^4.4|^5.2",
+                "symplify/package-builder": "^9.3.20",
+                "symplify/smart-file-system": "^9.3.20"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5"
+            },
+            "type": "symfony-bundle",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\ComposerJsonManipulator\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Package to load, merge and save composer.json file(s)",
+            "support": {
+                "source": "https://github.com/symplify/composer-json-manipulator/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T15:49:47+00:00"
+        },
+        {
+            "name": "symplify/console-package-builder",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/console-package-builder.git",
+                "reference": "95c88f29bd2dacdce5645af1521cfd3e13396d02"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/console-package-builder/zipball/95c88f29bd2dacdce5645af1521cfd3e13396d02",
+                "reference": "95c88f29bd2dacdce5645af1521cfd3e13396d02",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "symfony/console": "^4.4|^5.2",
+                "symfony/dependency-injection": "^5.2",
+                "symplify/symplify-kernel": "^9.3.20"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5",
+                "symfony/http-kernel": "^4.4|^5.2",
+                "symplify/package-builder": "^9.3.20"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\ConsolePackageBuilder\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Package to speed up building command line applications",
+            "support": {
+                "source": "https://github.com/symplify/console-package-builder/tree/v9.3.20"
+            },
+            "time": "2021-06-05T15:50:03+00:00"
+        },
+        {
+            "name": "symplify/easy-coding-standard",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/easy-coding-standard.git",
+                "reference": "0a2700ce5b4cd4054261b5f4b95d4b6563401918"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/easy-coding-standard/zipball/0a2700ce5b4cd4054261b5f4b95d4b6563401918",
+                "reference": "0a2700ce5b4cd4054261b5f4b95d4b6563401918",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "conflict": {
+                "friendsofphp/php-cs-fixer": "<3.0",
+                "squizlabs/php_codesniffer": "<3.6"
+            },
+            "replace": {
+                "friendsofphp/php-cs-fixer": "^3.0",
+                "squizlabs/php_codesniffer": "^3.6"
+            },
+            "bin": [
+                "bin/ecs"
+            ],
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Prefixed scoped version of ECS package",
+            "support": {
+                "source": "https://github.com/symplify/easy-coding-standard/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T15:51:56+00:00"
+        },
+        {
+            "name": "symplify/easy-testing",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/easy-testing.git",
+                "reference": "e7306f997146e33895602739c9e93931b7a2227d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/easy-testing/zipball/e7306f997146e33895602739c9e93931b7a2227d",
+                "reference": "e7306f997146e33895602739c9e93931b7a2227d",
+                "shasum": ""
+            },
+            "require": {
+                "nette/utils": "^3.2",
+                "php": ">=7.3",
+                "symfony/console": "^4.4|^5.2",
+                "symfony/dependency-injection": "^5.2",
+                "symfony/finder": "^4.4|^5.2",
+                "symfony/http-kernel": "^4.4|^5.2",
+                "symplify/console-package-builder": "^9.3.20",
+                "symplify/package-builder": "^9.3.20",
+                "symplify/smart-file-system": "^9.3.20",
+                "symplify/symplify-kernel": "^9.3.20"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5"
+            },
+            "bin": [
+                "bin/easy-testing"
+            ],
+            "type": "symfony-bundle",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\EasyTesting\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Testing made easy",
+            "support": {
+                "source": "https://github.com/symplify/easy-testing/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T15:50:09+00:00"
+        },
+        {
+            "name": "symplify/package-builder",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/package-builder.git",
+                "reference": "22254c8ad54e3672e91a4a390f85110d639a9167"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/package-builder/zipball/22254c8ad54e3672e91a4a390f85110d639a9167",
+                "reference": "22254c8ad54e3672e91a4a390f85110d639a9167",
+                "shasum": ""
+            },
+            "require": {
+                "nette/neon": "^3.2",
+                "nette/utils": "^3.2",
+                "php": ">=7.3",
+                "symfony/config": "^4.4|^5.2",
+                "symfony/console": "^4.4|^5.2",
+                "symfony/dependency-injection": "^5.2",
+                "symfony/finder": "^4.4|^5.2",
+                "symfony/http-kernel": "^4.4|^5.2",
+                "symplify/easy-testing": "^9.3.20",
+                "symplify/symplify-kernel": "^9.3.20"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\PackageBuilder\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Dependency Injection, Console and Kernel toolkit for Symplify packages.",
+            "support": {
+                "source": "https://github.com/symplify/package-builder/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T15:50:27+00:00"
+        },
+        {
+            "name": "symplify/phpstan-extensions",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/phpstan-extensions.git",
+                "reference": "5bd71787c21b0dc2191a2d9a76012c525c09a900"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/phpstan-extensions/zipball/5bd71787c21b0dc2191a2d9a76012c525c09a900",
+                "reference": "5bd71787c21b0dc2191a2d9a76012c525c09a900",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "phpstan/phpstan": "^0.12.88",
+                "symplify/astral": "^9.3.20",
+                "symplify/package-builder": "^9.3.20",
+                "symplify/smart-file-system": "^9.3.20"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5"
+            },
+            "type": "phpstan-extension",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                },
+                "phpstan": {
+                    "includes": [
+                        "config/config.neon"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\PHPStanExtensions\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Pre-escaped error messages in 'symplify' error format, container aware test case and other useful extensions for PHPStan",
+            "support": {
+                "source": "https://github.com/symplify/phpstan-extensions/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T15:50:25+00:00"
+        },
+        {
+            "name": "symplify/phpstan-rules",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/phpstan-rules.git",
+                "reference": "5fd5875093bdcec1118c86ae8d7a36d1335a30b0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/phpstan-rules/zipball/5fd5875093bdcec1118c86ae8d7a36d1335a30b0",
+                "reference": "5fd5875093bdcec1118c86ae8d7a36d1335a30b0",
+                "shasum": ""
+            },
+            "require": {
+                "nette/utils": "^3.2",
+                "nikic/php-parser": "4.10.5",
+                "php": ">=7.3",
+                "phpstan/phpdoc-parser": "^0.5",
+                "phpstan/phpstan": "^0.12.88",
+                "symplify/astral": "^9.3.20",
+                "symplify/composer-json-manipulator": "^9.3.20",
+                "symplify/package-builder": "^9.3.20",
+                "symplify/rule-doc-generator-contracts": "^9.3.20",
+                "symplify/smart-file-system": "^9.3.20",
+                "webmozart/assert": "^1.9"
+            },
+            "require-dev": {
+                "nette/application": "^3.1",
+                "nette/forms": "^3.1",
+                "phpunit/phpunit": "^9.5",
+                "symfony/framework-bundle": "^4.4|^5.2",
+                "symplify/easy-testing": "^9.3.20",
+                "symplify/phpstan-extensions": "^9.3.20",
+                "symplify/rule-doc-generator": "^9.3.20"
+            },
+            "type": "phpstan-extension",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                },
+                "phpstan": {
+                    "includes": [
+                        "config/services/services.neon",
+                        "packages/cognitive-complexity/config/cognitive-complexity-services.neon",
+                        "packages/object-calisthenics/config/object-calisthenics-services.neon"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\PHPStanRules\\": "src",
+                    "Symplify\\PHPStanRules\\CognitiveComplexity\\": "packages/cognitive-complexity/src",
+                    "Symplify\\PHPStanRules\\ObjectCalisthenics\\": "packages/object-calisthenics/src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Set of Symplify rules for PHPStan",
+            "support": {
+                "source": "https://github.com/symplify/phpstan-rules/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-06-05T15:50:31+00:00"
+        },
+        {
+            "name": "symplify/rule-doc-generator-contracts",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/rule-doc-generator-contracts.git",
+                "reference": "75bda667533565fe72ddee131234851f1893e091"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/rule-doc-generator-contracts/zipball/75bda667533565fe72ddee131234851f1893e091",
+                "reference": "75bda667533565fe72ddee131234851f1893e091",
+                "shasum": ""
+            },
+            "require": {
+                "nette/utils": "^3.2",
+                "php": ">=7.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\RuleDocGenerator\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Contracts for production code of RuleDocGenerator",
+            "support": {
+                "source": "https://github.com/symplify/rule-doc-generator-contracts/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-05-20T20:17:13+00:00"
+        },
+        {
+            "name": "symplify/smart-file-system",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/smart-file-system.git",
+                "reference": "a2a8d39fe46b01ead8d2af7368b0b36b68fac979"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/smart-file-system/zipball/a2a8d39fe46b01ead8d2af7368b0b36b68fac979",
+                "reference": "a2a8d39fe46b01ead8d2af7368b0b36b68fac979",
+                "shasum": ""
+            },
+            "require": {
+                "nette/utils": "^3.2",
+                "php": ">=7.3",
+                "symfony/filesystem": "^4.4|^5.2",
+                "symfony/finder": "^4.4|^5.2"
+            },
+            "require-dev": {
+                "nette/finder": "^2.5",
+                "phpunit/phpunit": "^9.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\SmartFileSystem\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Sanitized FileInfo with safe getRealPath() and other handy methods",
+            "support": {
+                "source": "https://github.com/symplify/smart-file-system/tree/v9.3.20"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/rectorphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/tomasvotruba",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-05-20T20:16:49+00:00"
+        },
+        {
+            "name": "symplify/symplify-kernel",
+            "version": "v9.3.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symplify/symplify-kernel.git",
+                "reference": "af78940e82ea73334d2c7b6f15afaace600f98c6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symplify/symplify-kernel/zipball/af78940e82ea73334d2c7b6f15afaace600f98c6",
+                "reference": "af78940e82ea73334d2c7b6f15afaace600f98c6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "symfony/console": "^4.4|^5.2",
+                "symfony/dependency-injection": "^5.2",
+                "symfony/http-kernel": "^4.4|^5.2",
+                "symplify/autowire-array-parameter": "^9.3.20",
+                "symplify/composer-json-manipulator": "^9.3.20",
+                "symplify/package-builder": "^9.3.20",
+                "symplify/smart-file-system": "^9.3.20"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symplify\\SymplifyKernel\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Internal Kernel for Symplify packages",
+            "support": {
+                "source": "https://github.com/symplify/symplify-kernel/tree/v9.3.20"
+            },
+            "time": "2021-06-05T15:51:05+00:00"
+        },
+        {
+            "name": "theseer/tokenizer",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/theseer/tokenizer.git",
+                "reference": "75a63c33a8577608444246075ea0af0d052e452a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
+                "reference": "75a63c33a8577608444246075ea0af0d052e452a",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+            "support": {
+                "issues": "https://github.com/theseer/tokenizer/issues",
+                "source": "https://github.com/theseer/tokenizer/tree/master"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/theseer",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-07-12T23:59:07+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.10.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozarts/assert.git",
+                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
+                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<4.6.1 || 4.6.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^8.5.13"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.10-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "support": {
+                "issues": "https://github.com/webmozarts/assert/issues",
+                "source": "https://github.com/webmozarts/assert/tree/1.10.0"
+            },
+            "time": "2021-03-09T10:59:23+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "dev",
+    "stability-flags": {
+        "james-heinrich/getid3": 20,
+        "myth/auth": 20,
+        "codeigniter4/codeigniter4": 20,
+        "michalsn/codeigniter4-uuid": 20
     },
-    {
-      "name": "theseer/tokenizer",
-      "version": "1.2.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/theseer/tokenizer.git",
-        "reference": "75a63c33a8577608444246075ea0af0d052e452a"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
-        "reference": "75a63c33a8577608444246075ea0af0d052e452a",
-        "shasum": ""
-      },
-      "require": {
-        "ext-dom": "*",
-        "ext-tokenizer": "*",
-        "ext-xmlwriter": "*",
-        "php": "^7.2 || ^8.0"
-      },
-      "type": "library",
-      "autoload": {
-        "classmap": ["src/"]
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["BSD-3-Clause"],
-      "authors": [
-        {
-          "name": "Arne Blankerts",
-          "email": "arne@blankerts.de",
-          "role": "Developer"
-        }
-      ],
-      "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-      "support": {
-        "issues": "https://github.com/theseer/tokenizer/issues",
-        "source": "https://github.com/theseer/tokenizer/tree/master"
-      },
-      "funding": [
-        {
-          "url": "https://github.com/theseer",
-          "type": "github"
-        }
-      ],
-      "time": "2020-07-12T23:59:07+00:00"
+    "prefer-stable": true,
+    "prefer-lowest": false,
+    "platform": {
+        "php": "^8.0"
     },
-    {
-      "name": "webmozart/assert",
-      "version": "1.10.0",
-      "source": {
-        "type": "git",
-        "url": "https://github.com/webmozarts/assert.git",
-        "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
-      },
-      "dist": {
-        "type": "zip",
-        "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
-        "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
-        "shasum": ""
-      },
-      "require": {
-        "php": "^7.2 || ^8.0",
-        "symfony/polyfill-ctype": "^1.8"
-      },
-      "conflict": {
-        "phpstan/phpstan": "<0.12.20",
-        "vimeo/psalm": "<4.6.1 || 4.6.2"
-      },
-      "require-dev": {
-        "phpunit/phpunit": "^8.5.13"
-      },
-      "type": "library",
-      "extra": {
-        "branch-alias": {
-          "dev-master": "1.10-dev"
-        }
-      },
-      "autoload": {
-        "psr-4": {
-          "Webmozart\\Assert\\": "src/"
-        }
-      },
-      "notification-url": "https://packagist.org/downloads/",
-      "license": ["MIT"],
-      "authors": [
-        {
-          "name": "Bernhard Schussek",
-          "email": "bschussek@gmail.com"
-        }
-      ],
-      "description": "Assertions to validate method input/output with nice error messages.",
-      "keywords": ["assert", "check", "validate"],
-      "support": {
-        "issues": "https://github.com/webmozarts/assert/issues",
-        "source": "https://github.com/webmozarts/assert/tree/1.10.0"
-      },
-      "time": "2021-03-09T10:59:23+00:00"
-    }
-  ],
-  "aliases": [],
-  "minimum-stability": "dev",
-  "stability-flags": {
-    "james-heinrich/getid3": 20,
-    "myth/auth": 20,
-    "codeigniter4/codeigniter4": 20,
-    "michalsn/codeigniter4-uuid": 20
-  },
-  "prefer-stable": true,
-  "prefer-lowest": false,
-  "platform": {
-    "php": "^8.0"
-  },
-  "platform-dev": [],
-  "plugin-api-version": "2.0.0"
+    "platform-dev": [],
+    "plugin-api-version": "2.0.0"
 }
diff --git a/docs/setup-development.md b/docs/setup-development.md
index 838b9e75066d5e6e741a97f82c42136485df283b..63617d7d249130e2cd333df7f65a85999532be88 100644
--- a/docs/setup-development.md
+++ b/docs/setup-development.md
@@ -213,6 +213,11 @@ You do not wish to use the VSCode devcontainer? No problem!
 
 ## Initialize and populate database
 
+> **Note:**
+>
+> You may skip this section if you go through the install wizard (go to
+> `/cp-install`).
+
 1. Build the database with the migrate command:
 
    ```bash
diff --git a/public/index.php b/public/index.php
index 752c63dbde5ea5255f15ff4f3f6801ab2c5164d8..4d04f8a58b5ffb94235999cc042f003e6acdecd7 100644
--- a/public/index.php
+++ b/public/index.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 use Config\Paths;
 
 // Path to the front controller (this file)
@@ -19,7 +21,9 @@ chdir(__DIR__);
 
 // Load our paths config file
 // This is the line that might need to be changed, depending on your folder structure.
-require realpath(FCPATH . '../app/Config/Paths.php') ?: FCPATH . '../app/Config/Paths.php';
+$pathsConfig = FCPATH . '../app/Config/Paths.php';
+// ^^^ Change this if you move your application folder
+require realpath($pathsConfig) ?: $pathsConfig;
 
 $paths = new Paths();
 
diff --git a/spark b/spark
index c4ad645a366ba4a0204246d4d1131ad957583e0c..f62aeddb2978ec82f8e0bcb8f629763c384ab512 100644
--- a/spark
+++ b/spark
@@ -33,8 +33,9 @@ if (strpos(PHP_SAPI, 'cgi') === 0)
 define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR);
 
 // Load our paths config file
-require realpath('app/Config/Paths.php') ?: 'app/Config/Paths.php';
+$pathsConfig = 'app/Config/Paths.php';
 // ^^^ Change this line if you move your application folder
+require realpath($pathsConfig) ?: $pathsConfig;
 
 $paths = new Config\Paths();
 
diff --git a/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php b/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php
index 2a5d6232496cb01cee8c5cbaadb7867890a1728b..243f4682eca98b670ef65a8aa7f79b5dcb297db1 100644
--- a/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php
+++ b/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Tests\Support\Database\Migrations;
 
 use CodeIgniter\Database\Migration;
diff --git a/tests/_support/Database/Seeds/ExampleSeeder.php b/tests/_support/Database/Seeds/ExampleSeeder.php
index 4d8a3154fe7720962016ff0967aaf3977d6ce88c..e519a9132dde16dc1f9b1bab758ec6571b024fea 100644
--- a/tests/_support/Database/Seeds/ExampleSeeder.php
+++ b/tests/_support/Database/Seeds/ExampleSeeder.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Tests\Support\Database\Seeds;
 
 use CodeIgniter\Database\Seeder;
diff --git a/tests/_support/DatabaseTestCase.php b/tests/_support/DatabaseTestCase.php
index ad81dd34410639411d23bef445de037c17c31375..76b8b721125c85477d05750035edde43601403f5 100644
--- a/tests/_support/DatabaseTestCase.php
+++ b/tests/_support/DatabaseTestCase.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Tests\Support;
 
 use CodeIgniter\Test\CIUnitTestCase;
diff --git a/tests/_support/Libraries/ConfigReader.php b/tests/_support/Libraries/ConfigReader.php
index ae751047e458dabe43ad98f53b3653c9b5b4af95..b6b85d4536b780b4b53c326f6f1269e8c592fa8d 100644
--- a/tests/_support/Libraries/ConfigReader.php
+++ b/tests/_support/Libraries/ConfigReader.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 /**
  * CodeIgniter
  *
diff --git a/tests/_support/Models/ExampleModel.php b/tests/_support/Models/ExampleModel.php
index 446a425bf623c00b293b53204559a5566d69fec7..aedcdd94a01f7af1c6d23f7216fe5df9a54b0993 100644
--- a/tests/_support/Models/ExampleModel.php
+++ b/tests/_support/Models/ExampleModel.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Tests\Support\Models;
 
 use CodeIgniter\Model;
diff --git a/tests/_support/SessionTestCase.php b/tests/_support/SessionTestCase.php
index e5bdca84c9b85c37616e994fedcb82f2e6908fa1..19e18bfd11a9d40cf016e744f627f6a9b843b8ad 100644
--- a/tests/_support/SessionTestCase.php
+++ b/tests/_support/SessionTestCase.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Tests\Support;
 
 use CodeIgniter\Session\Handlers\ArrayHandler;
diff --git a/tests/database/ExampleDatabaseTest.php b/tests/database/ExampleDatabaseTest.php
index 072cb0815aeffc0fffc107023f7044d9c954fec3..00b2709797db6983b129f4a09e76430b7dbae634 100644
--- a/tests/database/ExampleDatabaseTest.php
+++ b/tests/database/ExampleDatabaseTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Tests\Database;
 
 use Tests\Support\DatabaseTestCase;
diff --git a/tests/session/ExampleSessionTest.php b/tests/session/ExampleSessionTest.php
index ce1623fb43140febb0447410e3d67cb9fd4e708b..63adeb2c340b5c3fb3b210d9cd959d26e48a6a56 100644
--- a/tests/session/ExampleSessionTest.php
+++ b/tests/session/ExampleSessionTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Tests\Session;
 
 use Tests\Support\SessionTestCase;
diff --git a/tests/unit/HealthTest.php b/tests/unit/HealthTest.php
index d8672bf12f02b8a6a0a4ab3533ff3c3d8fb8d7ea..0095448df36384eb414febb3c1d36a154f2132ff 100644
--- a/tests/unit/HealthTest.php
+++ b/tests/unit/HealthTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Tests\Unit;
 
 use CodeIgniter\Test\CIUnitTestCase;