Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,4 +124,34 @@ public function diff(): self

return $this;
}

public function screenshotThreshold(float $threshold): self
{
Playwright::setScreenshotThreshold($threshold);

return $this;
}

/**
* Playwright will use MaxDiffPixels if non 0 and MaxDiffPixelRatio is not set
* else if both are set, it will choose the lower of the two
* else if none set it will have zero tolerance
*
* @see node_modules/playwright-core/lib/server/utils/comparators.js:88
*
* @return $this
*/
public function screenshotMaxDiffPixels(?int $maxDiffPixels): self
{
Playwright::setScreenshotMaxDiffPixels($maxDiffPixels);

return $this;
}

public function screenshotMaxDiffPixelRatio(float $maxDiffPixelRatio): self
{
Playwright::setScreenshotMaxDiffPixelRatio($maxDiffPixelRatio);

return $this;
}
}
23 changes: 6 additions & 17 deletions src/Playwright/Page.php
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ public function waitForURL(string $url): self
}

/**
* Adds a script tag to the page.
* Adds a style tag to the page.
*/
public function addStyleTag(string $content): self
{
Expand Down Expand Up @@ -521,9 +521,9 @@ public function expectScreenshot(bool $fullPage, bool $openDiff): void
'timeout' => 30000,
'isNot' => false,
'comparisonMethod' => 'pixelmatch',
'threshold' => 0.3,
'maxDiffPixels' => 300,
'maxDiffPixelRatio' => 0.01,
'threshold' => Playwright::screenshotThreshold(),
'maxDiffPixels' => Playwright::screenshotMaxDiffPixels(),
'maxDiffPixelRatio' => Playwright::screenshotMaxDiffPixelRatio(),
'detectAntialiasing' => true,
'forceSameDimensions' => true,
]
Expand All @@ -550,19 +550,8 @@ public function expectScreenshot(bool $fullPage, bool $openDiff): void
}
}

$this->createImageDiffView(
$snapshotName,
$expectedImageBlob,
$actualImageBlob,
ImageDiffView::missingImage(),
$openDiff,
);

throw new ExpectationFailedException(<<<'EOT'
Screenshot does not match the last one.
- Expected? Update the snapshots with [--update-snapshots].
EOT,
);
// if there is no diff at this point, Playwright has determined that there are no changes worthy of investigating
// (based on the config passed in to expectScreenshot) so we consider this a pass
}
}

Expand Down
75 changes: 75 additions & 0 deletions src/Playwright/Playwright.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,23 @@ final class Playwright
*/
private static ?string $host = null;

/**
* The default screenshot threshold
*/
private static float $screenshotThreshold = 0.3;

/**
* Default maximum number of total pixels that can be different
* ENHANCE: establish a good actual baseline for this, leaving at the current Pest default of 300 which is very generous
* ENHANCE: establish a way to allow this to be undefined in JS to let the pixel ratio take precedence
*/
private static ?int $screenshotMaxDiffPixels = 300;

/**
* The maximum ratio of pixels that can differ (superseded by $screenshotMaxDiffPixels)
*/
private static float $screenshotMaxDiffPixelRatio = 0.01;

/**
* Get a browser factory for the given browser type.
*/
Expand Down Expand Up @@ -213,6 +230,64 @@ public static function defaultBrowserType(): BrowserType
return self::$defaultBrowserType;
}

/**
* Set the screenshot threshold used for screenshot comparison
*
* @see https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-screenshot-2-option-threshold
*/
public static function setScreenshotThreshold(float $threshold): void
{
self::$screenshotThreshold = max(0, min(1, $threshold));
}

/**
* get the browser screenshot threshold
*/
public static function screenshotThreshold(): float
{
return self::$screenshotThreshold;
}

/**
* An acceptable amount of pixels that could be different.
*
* @see https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-have-screenshot-1-option-max-diff-pixels
*/
public static function setScreenshotMaxDiffPixels(?int $maxDiffPixels): void
{
self::$screenshotMaxDiffPixels = max(0, $maxDiffPixels);
}

/**
* An acceptable ratio of pixels that are different to the total amount of pixels,
*
* get the browser screenshot maxDiffPixels
*/
public static function screenshotMaxDiffPixels(): ?int
{
return self::$screenshotMaxDiffPixels;
}

/**
* An acceptable amount of pixels that could be different.
*
* @see https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-have-screenshot-1-option-max-diff-pixel-ratio
*/
public static function setScreenshotMaxDiffPixelRatio(float $maxDiffPixelRatio): void
{
self::$screenshotMaxDiffPixelRatio = max(0, $maxDiffPixelRatio);
}

/**
* An acceptable ratio of pixels that are different to the total amount of pixels,
*
* get the browser screenshot maxDiffPixels
*/
public static function screenshotMaxDiffPixelRatio(): float
{
return self::$screenshotMaxDiffPixelRatio;
}

/**
* Executes a callback with a temporary timeout.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
iVBORw0KGgoAAAANSUhEUgAABsAAAARdCAIAAABgvBCdAAAQAElEQVR4nOzdIVNUURiA4YtDoEmkSZNI02gkUmk0tkkk+hMwSXNoNMdkdCMm16ZtI7a1rWkdA0PxXTdzn6ed+e4veOd+52yvVqsBAAAAAOBfngwAAAAAAEFABAAAAACSgAgAAAAAJAERAAAAAEgCIgAAAACQBEQAAAAAIAmIAAAAAEASEAEAAACAJCACAAAAAElABAAAAACSgAgAAAAAJAERAAAAAEgCIgAAAACQBEQAAAAAIG0eEJfz6eXxwdaDg/PpYgAAAAAAHrHtjb66u726mJxff/s9AAAAAAAj8t+AuJjdvJlM3n75NQAAAAAAY7M2IC7nN5Ojk+sfAwAAAAAwSuvvQFzMZ/f18OmLs/efP5w9HwAAAACA0djkEZW/7fDr/Pbq9HB3ZwAAAAAAxmP9HYg7e69ev7u6mLzcGwAAAACA8VkbEHcOTi8vBwAAAABgrDZZYQYAAAAARkpABAAAAACSgAgAAAAAJAERAAAAAEgCIgAAAACQBEQAAAAAIAmIAAAAAEASEAEAAACAJCACAAAAAElABAAAAADS9trp4vvt7G75cJzNFw/D5Xw2nQ6798fd/cPD/d0BAAAAAHg8tlarVQ7vbo4PTz7+HDby7OzT7OpIQQQAAACAR8QKMwAAAACQBEQAAAAAIK1dYQYAAAAAxs0fiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABA3QkglwAAEABJREFUEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAAAYoAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAAkoAIAAAAACQBEQAAAABIAiIAAAAAkAREAAAAACAJiAAAAABAEhABAAAAgCQgAgAAAABJQAQAAAAA0h927EAAAAAAQJC/9QQbFEYCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAhEAAAAAWAIRAAAAAFgCEQAAAABYAQAA/w1Nov0AAAABSURBVP8FOpJlAAAABklEQVQDAIzkTiTt/5zLAAAAAElFTkSuQmCC
Loading