git subrepo commit (merge) mailcow/src/mailcow-dockerized

subrepo: subdir:   "mailcow/src/mailcow-dockerized"
  merged:   "32243e56"
upstream: origin:   "https://github.com/mailcow/mailcow-dockerized.git"
  branch:   "master"
  commit:   "e2b4b6f6"
git-subrepo: version:  "0.4.3"
  origin:   "???"
  commit:   "???"
Change-Id: I51e2016ef5ab88a8b0bdc08551b18f48ceef0aa5
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php
new file mode 100644
index 0000000..4da43e4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Twig\Profiler\Dumper;
+
+use Twig\Profiler\Profile;
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+abstract class BaseDumper
+{
+    private $root;
+
+    public function dump(Profile $profile): string
+    {
+        return $this->dumpProfile($profile);
+    }
+
+    abstract protected function formatTemplate(Profile $profile, $prefix): string;
+
+    abstract protected function formatNonTemplate(Profile $profile, $prefix): string;
+
+    abstract protected function formatTime(Profile $profile, $percent): string;
+
+    private function dumpProfile(Profile $profile, $prefix = '', $sibling = false): string
+    {
+        if ($profile->isRoot()) {
+            $this->root = $profile->getDuration();
+            $start = $profile->getName();
+        } else {
+            if ($profile->isTemplate()) {
+                $start = $this->formatTemplate($profile, $prefix);
+            } else {
+                $start = $this->formatNonTemplate($profile, $prefix);
+            }
+            $prefix .= $sibling ? '│ ' : '  ';
+        }
+
+        $percent = $this->root ? $profile->getDuration() / $this->root * 100 : 0;
+
+        if ($profile->getDuration() * 1000 < 1) {
+            $str = $start."\n";
+        } else {
+            $str = sprintf("%s %s\n", $start, $this->formatTime($profile, $percent));
+        }
+
+        $nCount = \count($profile->getProfiles());
+        foreach ($profile as $i => $p) {
+            $str .= $this->dumpProfile($p, $prefix, $i + 1 !== $nCount);
+        }
+
+        return $str;
+    }
+}