Title: [283146] branches/safari-612-branch
Revision
283146
Author
[email protected]
Date
2021-09-27 15:49:35 -0700 (Mon, 27 Sep 2021)

Log Message

Cherry-pick r283035. rdar://problem/83584492

    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
    https://bugs.webkit.org/show_bug.cgi?id=229792
    <rdar://problem/82776741>

    Reviewed by Eric Carlson.

    Source/WebCore:

    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.

    Test: fast/mediastream/video-rotation.html

    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
    * platform/graphics/cg/ImageBufferUtilitiesCG.h:

    Source/WebKit:

    Helper routined used in WTR.

    * Shared/API/c/cg/WKImageCG.cpp:
    (WKImageCreateDataURLFromImage):
    * Shared/API/c/cg/WKImageCG.h:

    Tools:

    Add testRunner API to take a view port snapshot as a PNG data URL.
    We can then use this data URL to validate some rendered pixel values.

    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
    (WTR::InjectedBundle::didReceiveMessageToPage):
    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
    (WTR::TestRunner::takeViewPortSnapshot):
    (WTR::TestRunner::viewPortSnapshotTaken):
    * WebKitTestRunner/InjectedBundle/TestRunner.h:
    * WebKitTestRunner/TestController.cpp:
    (WTR::TestController::takeViewPortSnapshot):
    * WebKitTestRunner/TestController.h:
    * WebKitTestRunner/TestInvocation.cpp:
    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
    (WTR::TestController::takeViewPortSnapshot):

    LayoutTests:

    * fast/mediastream/video-rotation-expected.txt: Added.
    * fast/mediastream/video-rotation.html: Added.
    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Added Paths

Diff

Modified: branches/safari-612-branch/LayoutTests/ChangeLog (283145 => 283146)


--- branches/safari-612-branch/LayoutTests/ChangeLog	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/LayoutTests/ChangeLog	2021-09-27 22:49:35 UTC (rev 283146)
@@ -1,5 +1,79 @@
 2021-09-27  Alan Coon  <[email protected]>
 
+        Cherry-pick r283035. rdar://problem/83584492
+
+    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+    https://bugs.webkit.org/show_bug.cgi?id=229792
+    <rdar://problem/82776741>
+    
+    Reviewed by Eric Carlson.
+    
+    Source/WebCore:
+    
+    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+    
+    Test: fast/mediastream/video-rotation.html
+    
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+    * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+    
+    Source/WebKit:
+    
+    Helper routined used in WTR.
+    
+    * Shared/API/c/cg/WKImageCG.cpp:
+    (WKImageCreateDataURLFromImage):
+    * Shared/API/c/cg/WKImageCG.h:
+    
+    Tools:
+    
+    Add testRunner API to take a view port snapshot as a PNG data URL.
+    We can then use this data URL to validate some rendered pixel values.
+    
+    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+    (WTR::InjectedBundle::didReceiveMessageToPage):
+    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+    (WTR::TestRunner::takeViewPortSnapshot):
+    (WTR::TestRunner::viewPortSnapshotTaken):
+    * WebKitTestRunner/InjectedBundle/TestRunner.h:
+    * WebKitTestRunner/TestController.cpp:
+    (WTR::TestController::takeViewPortSnapshot):
+    * WebKitTestRunner/TestController.h:
+    * WebKitTestRunner/TestInvocation.cpp:
+    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+    (WTR::TestController::takeViewPortSnapshot):
+    
+    LayoutTests:
+    
+    * fast/mediastream/video-rotation-expected.txt: Added.
+    * fast/mediastream/video-rotation.html: Added.
+    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-09-24  Youenn Fablet  <[email protected]>
+
+            <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+            https://bugs.webkit.org/show_bug.cgi?id=229792
+            <rdar://problem/82776741>
+
+            Reviewed by Eric Carlson.
+
+            * fast/mediastream/video-rotation-expected.txt: Added.
+            * fast/mediastream/video-rotation.html: Added.
+            * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+            * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+
+2021-09-27  Alan Coon  <[email protected]>
+
         Cherry-pick r282924. rdar://problem/83584505
 
     Make SharedBuffer inherit from ThreadSafeRefCounted

Added: branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation-expected.txt (0 => 283146)


--- branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation-expected.txt	                        (rev 0)
+++ branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation-expected.txt	2021-09-27 22:49:35 UTC (rev 283146)
@@ -0,0 +1,2 @@
+
+PASS

Added: branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation.html (0 => 283146)


--- branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation.html	                        (rev 0)
+++ branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation.html	2021-09-27 22:49:35 UTC (rev 283146)
@@ -0,0 +1,109 @@
+<!doctype html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>Testing video rotation</title>
+    </head>
+    <body>
+        <video style="z-index: 1; position: absolute; top: 0px; left: 0px;" id="video" autoplay playsInline></video>
+        <div style="z-index: 2; position: absolute; top: 5px; left: 0px; background-color:green; width:200px; height:390px"></div>
+        <image id='image'></image>
+        <canvas id='canvas'></canvas>
+        <div style="z-index: 3" id="log"></div>
+        <script>
+
+function getPixel(x, y, canvas, data)
+{
+    const position = 4 * (x * canvas.width + y);
+    return {r: data[position], g: data[position+1], b: data[position+2]};
+}
+
+function isPixelGreen(x, y, canvas, data)
+{
+   const pixel = getPixel(x, y, canvas, data);
+   return pixel.r === 0 && pixel.g === 128 && pixel.b === 0;
+}
+
+function isPixelWhite(x, y, canvas, data)
+{
+   const pixel = getPixel(x, y, canvas, data);
+   return pixel.r === 255 && pixel.g === 255 && pixel.b === 255;
+}
+
+async function validateSnapshot()
+{
+    const dataURL = await new Promise(resolve => testRunner.takeViewPortSnapshot(resolve));
+
+    const loadPromise = new Promise((resolve, reject) => {
+        image._onload_ = resolve;
+        image._onerror_ = reject;
+        setTimeout(() => reject("image load timed out"), 2000);
+    });
+    image.src = ""
+    await loadPromise;
+
+    canvas.width = image.width;
+    canvas.height = image.height;
+    canvas.getContext('2d').drawImage(image, 0, 0);
+    const data = "" 0, canvas.width, canvas.height).data;
+
+    document.body.appendChild(canvas);
+
+    // We expect to have a green horizontal line until getting some white.
+    let j = 100;
+    if (!isPixelGreen(100, j, canvas, data))
+        return Promise.reject("first pixel is not green");
+
+    while (isPixelGreen(100, ++j, canvas, data)) { };
+
+    // We then expect a vertical line until the end of the canvas.
+    j = j + 5;
+    if (!isPixelWhite(100, j, canvas, data))
+        return Promise.reject("did not find white pixel");
+
+    let i = 100;
+    while (++i < canvas.height && isPixelWhite(i, j, canvas, data)) { };
+
+    return i === canvas.height;
+}
+
+_onload_ = async () => {
+    try {
+        video.srcObject = await navigator.mediaDevices.getUserMedia({video: {width: 400, height: 200} });
+        await video.play();
+
+        if (!window.testRunner)
+            return;
+
+        testRunner.setMockCameraOrientation(90);
+        let counter = 0;
+        while (video.videoWidth !== 200 && ++counter < 100)
+            await new Promise(resolve => setTimeout(resolve, 50));
+
+        counter = 0;
+        let isValidSnapshot = false;
+        do {
+            await new Promise(resolve => setTimeout(resolve, 50));
+            isValidSnapshot = await validateSnapshot();
+        } while (++counter < 50 && !isValidSnapshot)
+
+        log.innerHTML = counter < 50 ? "PASS" : "FAIL";
+
+         if (counter < 50) {
+            document.body.removeChild(image);
+            document.body.removeChild(canvas);
+         }
+    } catch (e) {
+        console.log(e);
+    }
+
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+if (window.testRunner) {
+    testRunner.dumpAsText(true);
+    testRunner.waitUntilDone();
+}
+        </script>
+    </body>
+</html>

Added: branches/safari-612-branch/LayoutTests/platform/ios-simulator/fast/mediastream/video-rotation-expected.png (0 => 283146)


--- branches/safari-612-branch/LayoutTests/platform/ios-simulator/fast/mediastream/video-rotation-expected.png	                        (rev 0)
+++ branches/safari-612-branch/LayoutTests/platform/ios-simulator/fast/mediastream/video-rotation-expected.png	2021-09-27 22:49:35 UTC (rev 283146)
@@ -0,0 +1,206 @@
+\x89PNG
+
+������+IHDR����@����\xB0������\xA3\x86\x97������)tEXtchecksum��12934a747eff1e218fd4db450c305da8\xD2\xE7\xA7������sRGB��\xAE\xCE\xE9������DeXIfMM��*��������\x87i������������������������\xA0��������������\xA0������������@\xA0������������\xB0��������\x9B\x88\xEC~����@��IDATx\xEC\xDDɊd\x85\xBA\xE0]\xF6\xF6v\xA03\x87:)A\x9C\xF8\xEA;8\xF7>\x81\x88O\xE0\xF8
+
+*\x8A\x94\x82\xA2\xD8\xEC\xFB\xBE\xEF\xEA\xDE\xD7ٕi\x9D\xAA\xB8\x87Ź\x9Ce\xD5\x90\x95\x91\x91\xB12\xFE\xFC\xFE5\xD8+#\xF3\xC0\xB2,G8\xB0\xCC\xDB\\x8E9\xB2\|\xF1\xC5\xCB+7ܰ<xpy\xE0\x81\x96\xDBn\xBBm\xF9\xED\xB7\xDF\xD6ϟ}\xF6\xD9˻ᄏ<\xF5\xD4SˡC\x87\x96\xA7\x9F~zy\xFF\xFD\xF7\x97\xB9}.s\xBF\xB9\xFF\x83>\xB8毿\xFE\xFA\xE5\x92K.Y\xBF\xEE\xFC\xB1~\xFE\x99g\x9EY}\xF4\xD1e\xDE\xCF\xFD\xFF\xFC\xF3\xCF5;\xF7\xF3\xB8u\xE3\xCD\xF9\x83>X\xCE;\xEF\xBC宻\xEEZz\xE8\xA1\xE5\xCE;\xEF\\xDDgwc;\xBB\x9B\xEB\xE3\xF9믿\xAE\xBE\x9C\x97\xF5\xF8;\x9D\x8E\xABK/\xBD\xF4\xD8\xF3\xE8\xFE\xFB\xEF_\xAE\xBB\xEE\xBA\xE5\x8D7\xDEX\xBE\xFA\xEA\xAB\xF5x\xF9\xEC\xB3ϖ\x97_~yy\xE5\x95W\x96W_}u\x99\x8F\xCF<\xF3\xCC\xF598\xC7э7޸\xDCs\xCF=\xEB\xF3\xF8\x9Ak\xAEY.\xBC\xF0\xC2\xF5\x98\x9A\xCF\xFD\xFE\xFB\xEF\xCBk\xAF\xBD\xB6<\xF9\xE4\x93\xEB\xFB\xB9m{\xFE\xCE\xFD\xAE\xBE\xFA\xEA5w\xEF\xBD\xF7\xAE3l\xFFo\x9C{\xEE\xB9\xEB\xE3>|\xD8\xE3\xFE\xAF\xF4\xA9\xE0|\xF3\xCD7/\xF7\xDDw\xD
 Fz\xDC\xF8\x87�� @\x80�� @\x80@\xA3\xC0Y'jN\xA2\x9Fq\xC6\xEB\xDBv};A\xBA\xDD>\xCF\xDB|\xFE\xF8\xCB\xDC笳\xCEZ\xDF\xE6\xFA\xDCg\xDE\xE6\xFD\xFE\xDCv\x{359F3F7}\xAF\xBF]\xF7\xB8'w\xB7\xCDpܶdn\xE7\xBCw\n\xC7\xD2v,\xCE\xFBS\xF9\xB8\x9A\xFD\xEF\xFF^\xCF9\xE7\x9CeJ\x91\xF9\x9E\xE7y9\xA5\xC4E]\xB4\x96i\xDB\xFD\xC6h.\xF3~\xEE3\x9F\xBF\xEC\xB2˖\xCB/\xBF|\xBD>%ǼM2E\xE5|\xCD-\xB3\xF7e\xCF?\xFF\xFC\xF5>W\q\xC5\xFAXs\xBF)H=\xEE^\xD1|*8ϱ\xE1B\x80�� @\x80�� @\xA0Y`g\xB2\x9DD\x9F\xF7s\xA2t.s\xE2n>\x9E\xA0sRs\xBB}\xFF79\xB7\xCD+\xE6D\xE8\xDCg\xEE?\x97\xB9}\xAE\xCFO\x83o\xB7\xED\xCF\xCD\xD7\xDE\xEE3\x9F\x9F\xB7\xED럎\x8F;'\xA2\xC7o\xDE\xE6\xFB\x9F\xCB\xF6\xFEx\xB7\xB1\xDA
+\x901\x9B7\xCEG\x95N\xD7\xE3j\x8E\x9F9\xA6̘WbMy1\xCF\xF3r^M4E\xC6[s\xD9\\xCDs\xF7\xDAk\xAF]n\xBA\xE9\xA6\xF5\xD5#\xF3\x8A\xB09\xB6\xB6d^I2\xAF\xF6؟\x99\xAF1\xC7\xE0d\xA78\x99ǻ\xF5\xD6[\xD7W:l\x9F\x9BǝW\x8By\xDCYV\xAB\xBF\xB3\xF3-\xB7\xDCr\xF4\xF1/ @\x80�� @\x80��\x81R\x81 s\xA2s~Z\xFB\xDBo\xBF]>\xFA\xE8\xA3\xF5\xA7\xC7\xE7\xE8\\xE6\xA4\xE7\x87~\xB8|\xF1\xC5\xCB?\xFC\xB0\x9ET=\xFE{\x9B\xEC\x9C$\x9D\xFB\xCD\xF5.\xB8\xE0\xD8]\xE6\xEB|\xF2\xC9'\xCBO?\xFD\xB4\x9ETݾ\xEE\xDC\xC1\xE3^\xBA\x9A\x8C\xC5\xE6\xFC\xE5\x97_\xAE\xCE\xF3+s\xE6\xB2\xDFk>\x9E\xDB\xFE\xF9\xE7uW\xBF\xFC\xF2\xCBܴ^8=^\xE3t>\xAE>\xFE\xF8㵬\xF8\xF1\xC7\x8F \xF3\x9C\xDEu\m\xCF\xDF\xC9\xCE\xE5\x9Bo\xBE9V\x80\xCC\xF1\xF6駟\xAE\xC7\xDC\xF1\xC7\xE28ϯ^\xFB\xEE\xBB\xEF\x96\xC9Nq\xB2\xB7S\x8Exܿ>\xFF\xEE\xCESdͫ|\ @\x80�� @\x80��\xB4
+\x9C\xB0��\x99ss\xD2s\xFE\xD6Nj/\xBE\xB8\xFBOdN\xF9\xF1\xFA믯?\xCD=E\xC6\\xE6\xE4\xE7v\x99\xEC\xFCm\x81\xF9\x89\xF3\xF95)\xF3S\xE1s\x99\xA6s\xBF\xF9{\xF35\xF6g\xE6\xF3\x{1D3FDC}0\xA3\xB1\x9A\x9F\x9A\x9F؛߼\x9F\x9F\xE4\xDF\xCC\xE6\x84\xF4x\xFE\xF9\xE7\xEBm\xDB\xFD8\xAF\xA7\xDDq5ϻ)/\xDF{\xEF\xBD\xE5\x85^X\xDEz\xEB\xAD\xF5\xDF\xFF\xFD\xFA*\x8D\xEDss\MY\xB1/\xA35\xD7\xE7\xB8{\xF6\xD9g\xD7\xE7\xFF\xF6뮶\xFB\xCCsv\x8A\xCDy\xC9\xFC\x9F0\xB7o\x97)?\xA6X\x99cqn\xBF\xF2\xCA+\x8F\xCF\xF3j\x94y\xAC\xF9?\xC5\xE3\x9E\xCEW]u\xD5\xF2\xD8c\x8Fm\xEB\xF7\x9E�� @\x80�� @\x80@\x9D\xC0Z\x80\xEC?\x899\xD7\xE7Ꜭ\x9C\xA8S\x80\xBC\xFD\xF6\xDB\xC7ʊ9\xF1>\xAF\xFC\x98\x9F枟\xF2\x9EWLf+3\xE6\xFAd\xA7 \xF9\xFA\xEB\xAF\xD7_\xBF3\xBF.kn\xDF\xEE7\xAF��\x99\xA5\x93\x99۶\x8B\xC7\xDD\xED<N\x9B\xD7V\x80\xCCI\xE7\xF1|饗\x96w\xDEyg}\xE5\xC8\xDCgNNs>zd\x9Dn\xC7\xD5\x89\xFB\x9F\xBF\xF3k\xAE\xA6\xB4\x98d\x8E\x9B\xEDU\xF3\xF1ɞ\xBFo\xBE\xF9\xE6\xFA\x9F_\xA36\x999\xA6\xB6\x
 B7y\
 xFE\xCF+\xBCN\xF6\xFC\xDD
+\xBB)>\xB7\xFF\xE6 3ה/\xF7\xE8\xF3xv\xF4wv\x9E_i\xE6B\x80�� @\x80�� @\xA0Y`\xFE\xB0\xC4^\xF1\x8FI\xE7\x84\xE7\xFC\xC4\xF6\x9C\xC0\x9C\xBF\xB0\xF3\xE9\xF9\xD5LsByN\x9Cno\xF3\xF1\xF6\xF7��\xE6$\xE9\xDC\xFB#\xCB\xDB\xDF!\x98\xEC|n.\x93\x9BW\x89̯l\xDAn\x9B\xDB=\xEEѢh,N\xE4<'\x93\xE7d\xF6\xDDw߽<\xFC\xF0\xC3\xCBwܱ\x9EP~\xEE\xB9\xE7\x96'\x9Exb9|\xF8\xF0D\xD7˸r>jq\xBAW\xF3\xFD\xCF+\xB5\xB6\xE7\xE9GSF\xCC\xC7S\x94m%\xC5?\x9D\xF5U"s\x9C\xCDsw\x8A\x8B\xFD\x979\xAE&3\xCF\xDD\xC9\xEF\xBF\xCC1\xBBY\xCF\xFFs}\xBB\xCC\xE7<\xEEޫ\xE4\xC6el\xFF\xCE\xCE3\xFFa. @\x80�� @\x80��ZNX\x80\xECv+6\xF6߶]\xDF_^l\xB7m\xEFw\xE5\xE6>\xBB\xB2\xF3\xF9]\xF9]\xD9]\xB9\xBF\xEB\xE3ns\xCF	\xE59az\xF0\xE0\xC1\xE5\x91GYn\xBF\xFD\xF6\xF5\xE4\xA1C\x87\x96\xC7|y\xFE\xF9\xE7\xE7\xAE\xB9첚;\xEE\xF2ڕݕ\x9B\xAF\xBB+\xEBqG`\xEF\xB2\xCB\xEA\xFF\xCBy\xD7cn\x93\x9D\xEC\xB1e7\xA1\xBD\xF7\xA7\xAB\xD5\xF1\xE5ٞ\x88k @\x80�� @\x80��\xFE\xF3'\xFC 3\
 xD6vBoN
 \xBAo׷q\xE7\xE8vt{\xBF}n\xCBNf{\xDB\xFF\xB9\xB9>\x999qv\xB2\xEC\xDC\xC7\xE3\xEE\x95\xC7;\x8D\xEBv\xDB\\xAB\xF9i\xEC\xFD\xB4>\xE79\x9AN\xEF\xE3\xF9\xA8\xC0\xDE\xF1\xB4}<\xEF\xB7\xE3h\xFFms\xFDd\xCF\xDD\xED~\xBBr[~\xBB\xEF\x89\xDE\xEF\xCA\xCFc\x9F\xEC\xB2+7\x99]\xD9\xF9\xFC\xAE\xFC\xAE쮜\xC7 @\x80�� @\x80��}{\xBF\xA3\xA6o6\xFD\xFF׉\xEA\xE1K\xB8 @\x80�� @\x80��8\xE5,\xFF\xFD\xCF\xE4\x94\xFB.}C \xF0o8\xF2_\xFF\xF4'\xA4\xFE\xED\x8F\xE1 @\x80�� @\x80��H\xBC$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xBA\xA1\xE7����@��IDAT\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB1 @\x80�� @\x80�� \x90
+(@R99 @\x80�� @\x80�� @\xA0V@R\xBB\x83 @\x80�� @\x80�� @\x80��\xA9\x80$\x95\x93#@\x80�� @\x80�� @\x80��j \xB5\xAB\xF9\x9F\xF6\xEE\\xC7\xCE\xDD\xC2\xF0\xA61\xF3$ !C\x82\x88!d\x993\xB8r.\x83\xCB!$C"!\x82	B\x8Cb\xA6\xFB\xDF֦\x8Du8\xE0\xB7i\x9De\xCESRS@\xD5r\xADz\xBE\xEDji/\xAA\xAC @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x980\x80̞F1 @\x80�� @\x80�� @\xA0
+@\xAA\x9C @\x80�� @\x80�� 0+`��\x99=\x8Db @\x80�� @\x80�� @\x80@0\x80T99 @\x80�� @\x80�� @`V\xC0��2{\xC5 @\x80�� @\x80�� @\x80��\x81*`��\xA9rr @\x80�� @\x80�� @\x80\xC0\xAC\x80d\xF64\x8A @\x80�� @\x80�� @\x80��U\xC0��R\xE5\xE4 @\x80�� @\x80�� @\x80��\x81Y\xC8\xECi#@\x80�� @\x80�� @\x80��\xAA\x80\xA4\xCA\xC9 @\x80�� @\x80�� @\x80��\xB3\x90\xD9\xD3(F\x80�� @\x80�� @\x80��TH\x95\x93#@\x80�� @\x80�� @\x80��f \xB3\xA7Q\x8C�� @\x80�� @\x80��\xA8\x90*'G\x80�� @\x80�� @\x80��\xCC
+@fO\xA3 @\x80�� @\x80�� P UN\x8E�� @\x80�� @\x80��\x98\xB8\xED_\xCD~\x99mw\xC5n\xBB\xED\xF8T\xFE\xFC\xCB/\xBF\xDC\x9F\xF6\xE5\xF3:\xFA\xFE\xE3\xFF8\xDDq\xC7\xA7\xABW\xAF\x9E^{\xED\xB5\xD3\xF3\xCF?\xFA\xFC\xF3\xCFOo\xBE\xF9\xE6\xE9\xF5\xD7_?\xBD\xF5\xD6[\xA7\xEB\xDF\xFF\xCFkxOܼ\xC0\xAD\xF2u\xF4\xE6?3	 @\x80�� @\x80��\x81\xBF\x83\xC0\x95\xBF\xC3'q|\x97'\xE2.\xC0\xE5\xF3\xBA\xFC\xFB\xCB?\xDFʯ\x8F\xCF\xED\xC6\xCF\xEFV\xFE|t'@\x80�� @\x80�� @\x80��\xFF-\x81+7>\xA1\xFEG\x83\xC1\x8D\xEF)Vs\xFFi\xFEƏ{\xE3?\xFF^߿\xFA\xE3^~\xBD\xCB\xEB\xBF\xFA\xE3\xFEѯw\xF9\xB8\x97׿\xF7\xFE7\xFA\\xDE\xFF\xF2\xFA\xAF\xCE]~]\xF7"q\xED5\xE7k\xF5qqѬ\xF9\x9A\xF3q/^ @\x80�� @\x80��\xD8\xF0g\x80\xEC\xDF\xE87+\x8F'n\xFF\xE8\xC9\xDB\xDF\xFC @\x80�� @\x80��\xF8(p\xE5f\x9FL\xBF\xD9\xF7\xBF\x98\xD6\xDC\x9A\xFF;}\xDC\xE3s\xF9\xA3\xCF\xE7\x8F\xDE~\xF1\xFC\xBD\xD75_s\x975_s>\xEEE\xE0Ͻ\xE6\xFC\xE7\x9C.\xEF
 U\xBDj\xEE\xF
 F\xFA\xE3^>\xBE\xD7 @\x80�� @\x80��\x96\xAE\xBC\xF8⋧\x9F\xFE\xF9\xF4\xE3\x8F?\x9E\xBE\xF8\xE2\x8B\xD3\xC7|\xFAꫯ~\xFD\xB3&\x8E'\xE4\x8E?x\xFB\xDE{\xEF==\xF8\xE0\x83\xA7\x87~\xF8t\xF7\xDDw\xFF\xFAD\xFC\xF1\xA3|\xBE\xFD\xF6\xDB\xD3g\x9F}v\xCE\xF3\xCD7\xA7~\xF8\xE17\xF9\xFB\xEF\xBF\xFF\xF4\xD8c\x8F\x9D\xF3\xB7\xDF~\xFB\xF9\xF3>|ܛs\xFE\xFE\xFB\xEFO_~\xF9\xE5\xD9\xF1\xF8\xD1\xBF\xE3\xE5\xF2\xE3\x948_\xFB\x86&\x8F\xAB\x9B{\\xF9\xFD\xEB\xEB՟\xFD\xFA|\xFE\x82\xE3/ @\x80�� @\x80��n\x81+\xAF\xBE\xFA\xEA\xE9xb\xFD믿>\xBD\xFB7\xDEx\xE3\xFC\xF7\xC7\xEC\xC7\xCB\xF1d\xF21~<\xFE\xF8㧧\x9Ez\xEA\xF4\xDCsϝnj\x9F~\xFA\xE9\xFC\xF6c\xD0\xF8裏No\xBF\xFD\xF6\xE9\xBD\xF7\xDE;}\xF8\xE1\x87\xE7!\xE4\xF2\xA4\xFC\xF1NǓk/\xBF\xFC\xF2\xE9駟>\xFFZw\xDEy\xE79\xEB\xE3~\xFD\x9B1菜?\xF9\xE4\x93\xD3;\xEF\xBCsz\xF4\xD1GOW\xAE\9\xDF퀼Xί\xBC\xF2\xCA\xF9N\xF7\xDDw\xDFy\xB8:\xDE\xCE\xF9\xE6\x9C=\x9E\xBF\xF8\xF51u<~\xFC\xFE\xF5\xF5\xEA\xF8\xFF\x85
 \x8
 7\xF1\xE3\xB1\xE1\x85�� @\x80�� @\x80\xC0\xB2\xC0\x95\xABW\xAF\x9E\xBF\x83\xE3\xF3\xCF???\xE9\xF9\xD6[o\x9D\xFB^\x9ET?\xFEᮻ\xEE:?\xE9\xFE\xE4\x93O\x9E^x\xE1\x85\xD3O<q\xFE\x8E\x91\xE3m\xC7\xF1\xEF\xBF\xFF\xFE\xE9\xD3O?=\xF7\xC8\xF1\xE4\xF1\xF1r\xC9\xDFAr|\xE7ȳ\xCF>{z饗\xCE\xFCz\xC7\xCB\xF1_\x9E\xFB\xB8\xB7\x9D-\x8E\xBF\xFCO\xCE\xD7M|\xF0\xC1\xF9;@\xDBc\xA0:\xDEv\xF8\xFF|\xFC\xEFp~\xE6\x99g8{\\xFD\xFA\xFB\xEF\xF7W\xC7w|/~\xFF\xFAzu3_\x9F\xCF!@\x80�� @\x80�� p\x8B\9~\xA4\xD5w\xDF}w~"\xF4\xA1\x87\xFA\xF5\xBB\xAE\xEF<\xD9~|\xD7\xC6\xF1]\xC7\xFB<\xF2\xC8#\xBF\xFE\xF8\xA5\xE3m\xC7\xF8q|\xF7\xC2\xF1>\x97\xEF\xB9 ǯs\xFC\xAD\xE3I\xB6\xE3;x\xE0\x81\xF3\xFB\xFF\xDE\xC7=\xFE\xFDr\xA3\xF3\xE1u\xF91W\xC7ێ3v8\xC3\xC7\xE1{y\xDB\xC5\xFAp>\xEE\xC3\xD9\xE3\xF9ߏ\xAA\xD3\xF9\xF7\xA4߿\xD7~\\x9C\xAFW׾\xB3\xEF\xF25\xE3x\x9Cԯ\xCF\xD7?\xC6\xFC= @\x80�� @\x80��\x81E\x81+\xF7\xDCs\xCF\xF9	\xD2\xE3\xBF?\xBE\xE12`\_\xF6
 x\xB2\
 xEC\xF8QW\xC7eǟ\xFFqd.X\xEF\xF1\xB6#w<\xC1z\xBC\xCF\xF5O\xAC]~\x8D\xE3\xD7<\xDE\xE7\xC8\xFF;\xDE\xF7x9\xFE\xBD\x8F{Q\xBA\xF6]3\xFF\x9B\xF3a\xDC\xE0\xF7^\x8E\xEC\xE1|\x8C$\x9C=\x9E/\x8F\xBF}\xBD\xFAo|}\xBE<\xBE\xBC&@\x80�� @\x80�� \xB0*pۿ\x86\x8C_V\xCB\xE9E\x80�� @\x80�� @\x80��(\xD7~JI\xCA @\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\xB8\xC3Ir����IDAT\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\x90\xD1èE\x80�� @\x80�� @\x80��tH\xB7\x93$@\x80�� @\x80�� @\x80��F \xA3\x87Q\x8B�� @\x80�� @\x80��\xE8\x90n'I\x80�� @\x80�� @\x80��\x8C
+@F\xA3 @\x80�� @\x80�� \xD0 \xDDN\x92�� @\x80�� @\x80��0\x80\x8CF- @\x80�� @\x80�� @\xA0@\xBA\x9D$ @\x80�� @\x80�� 0*`��=\x8CZ @\x80�� @\x80�� @\x80@0\x80t;I @\x80�� @\x80�� @`T\xC0��2z\xB5 @\x80�� @\x80�� @\x80��\x81.`��\xE9v\x92 @\x80�� @\x80�� @\x80\xC0\xA8\x80d\xF40j @\x80�� @\x80�� @\x80��]\xC0��\xD2\xED$	 @\x80�� @\x80�� @\x80��\x81Q\xC8\xE8a\xD4"@\x80�� @\x80�� @\x80��\xBA\x80\xA4\xDBI @\x80�� @\x80�� @\x80��\xA3\xFF\xBBDH\xA0\xF1\x9D\xDC��������IEND\xAEB`\x82
\ No newline at end of file

Added: branches/safari-612-branch/LayoutTests/platform/mac/fast/mediastream/video-rotation-expected.png (0 => 283146)


--- branches/safari-612-branch/LayoutTests/platform/mac/fast/mediastream/video-rotation-expected.png	                        (rev 0)
+++ branches/safari-612-branch/LayoutTests/platform/mac/fast/mediastream/video-rotation-expected.png	2021-09-27 22:49:35 UTC (rev 283146)
@@ -0,0 +1,82 @@
+\x89PNG
+
+������+IHDR���� ����X������\x9Av\x82p������)tEXtchecksum��ba93e369ed7c8cf5cb4096aceee4495a\xA3ޞ9������sRGB��\xAE\xCE\xE9������DeXIfMM��*��������\x87i������������������������\xA0��������������\xA0������������ \xA0������������X��������\xC2j\xB5\x94����,\xE6IDATx\xED۱\x8E\xED\xB5\xF0}\xC1	\x85+1\xD4VR@\xE2*Z_\x84{K\xF0I(\xB41\xB6\xC0\xCE
+:\x94\xC5 \xE3\xF9o\xB3\xE7\x8E\xC0\\xEEZr\xBE{8\xDFo\xD8s\xF6\xCC7k\xAF\xDFY&\xF3\xCD\xC8\xE9t:]]\xFE\xF9\xD9\xCF~vu\xBC\xFD\xE5/9?\xBE\xF2\xCA+\xE7\x8F=\xF2\xC8#\xE7\xC7\xDF\xFF\xFE\xF7\xE7\xE7?\xFF\xFC\xF3\xF3\xE7\\x9E?\xF2\xF7[\xF6\xD1G\xBD\xFA\xE4\x93Oί\xF7\xEF\xFF\xFBշ\xE15_<\xEF\x95\xF3\xF3\xCF?\xF6\xF8\xCDo~s\xF5\xF6\xDBo_\xBD\xFC\xF2\xCB\xE7\xBF\xD7\xEF}\xEF{\xE7\xC7W_}\xF5\xEA\x8D7޸\xFA\xDD\xEF~w\xF5\xEB_\xFF\xFA\xEA\xF2\xFC\xF1\xF7\xFB\xDCs\xCF]\xAF\xEBx\xFE\xF8CM\xF6\xE6_ @\x80��ߘ\xC0\xC3w\xBF\xB9\xBC~\xBB\xFB+\xF0\xF9\xFD\xC7{\xEC\xFC\xF8\xF8㏟\xEFܹs~|\xFA駯\xFF||\xCE\xE5\xF9\xE3\xC9\xFB-{\xBC\xA6\xBB\xA5\xE3x8}\xF7\xBB\xDF=?\xDE\xEF\xAF\xF9\xE2y\xAF\x9C\xBF\xFF\xFD\xEF\x9F^z\xE9\xA5\xF3\xE3;\xEF\xBCsz\xFD\xF5\xD7O=\xF4\xD0\xF9\xCF?\xFF\xF9\xCFO?\xFD\xE9O\xCF\xEF\xFF\xBA<\xBC\xFF\xA3\xFD\xE8\xF4\xC2/\xEF\x9E\xDF\xDEz뭪\xECeo\x8F @\x80��\xFF\x99\xC0\xBF\x90w\xDF}\xF7\xF4\xAB_\xFD\xEAt\xF77 \xA7'\x9Ex\xE2t\xF7'\xE1\xE7\xAF~
 \
 xF77\xE7ǻ?!?=\xFB쳧\xE3ϗ.\xE3\xEF\xB7\xEC?\xFE\xF1\x8F\xD3\xF1+\xF7\xC7|z\xED\xB5\xD7N?\xFC\xF0\xE9\xB3\xCF>;\xBF\xEE\xFB\xF55\xDFk\xE7\xF7\xDE{\xEFt\xFC\xFE\xF6\xB7\xBF=\xDB>\xDE.s\xF9\xCB_\x9E~\xF8\xC3\x9E\xBB\xE3\x9F\xCB\xF3\xC7\xE7\xFC\xF1\x8F<\xBD\xF8⋧O?\xFD\xF4\xF4\x83\xFC\xE0t\xFC}o\x97\xCFyP\xB3w\xEBs\xDEӿ @\x80��\xBE\x81\xE3W\xC7\xFF\xFD\xE6\xFC\xD3\xEE\xCBon~\xE9\xE3\xA7\xE0\xC7\xF3\x97Ǜ\xBB\xBC\xDB\xC7.\xCF_/\x9F\xF3\xF1\xB6\x8F]\x9E\xBF<\xDE\xCC\\xDE\xFF\xDF>v\x94\x8F\xBF\xFD\xEDo\xA7\xF7\xDF\xFF\xF4\xE3\xFF\xF8\xB9~\xBC-{y\xFE\xF2x\xB8\xF1\xCEm\xBB<y\xBC\xB9~\xF7\xB6\x8F]\x9E\xBF<^n\xBCs\xDB\xC7.\xCF_oD\xAE߽\xEDc\xC7o]\xEE\xFE>\xED\xFC۬\xE3\xF1\xAB\xDE.\x9F\xF3ŏ]\x9E\xBF<~\xF1\xE3ǟo\xFB\xD8\xE5\xF9\xCB\xE3\xFD\x9A\xBD\xCD\xE4\xAB^\xAF\xE7 @\x80��\xBE^\xE0\xFA7 G\xC98\xBE<~Sp)\xC7O\xC1/\xA5\xE4x\xFC\xCEw\xBE\xF3oE\xE4\xF8\xF8\xF1v?f\x8F]\x8E\xB7c\x9F\xCB\xDB\xF1\xFA\xEF\xE7\xD7|\xBC΄\xF3
 \
 xC5\xE0\xF8\xE6\xFA\xF2+\xF6\xF1x\x98]\xDC.\xAF\xE5x\xBC|\xCEQb.om\xD9\xCB\xDE	 @\x80��\xFE3\x81;\xA7\xFF\xFE\xD7o@\xFE\xB3/#M\xE0\xC1\xB8\xFA\xAF\xAF\xFE\xADЃ\xB9\xAD\xAD @\x80��\xF7^\xE0~\xA4}\xEFg\x99@\x80�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5
+H\xF9X\x9F�� @\x80@R@Ij\x9BE\x80�� @\xA0\@)?��\xEB @\x80��H
+( Im\xB3 @\x80��\x94( \xE5`} @\x80��I$\xA9m @\x80��\x81r\xA4\xFC��\xACO\x80�� @ )\xA0\x80$\xB5\xCD"@\x80�� P.\xA0\x80\x94\x80\xF5	 @\x80��$\x90\xA4\xB6Y @\x80��\xCA\x90\xF2\xB0> @\x80��\x81\xA4\x80\x92\xD46\x8B�� @\x80@\xB9\x80R~��\xD6'@\x80�� \x90P@\x92\xDAf @\x80��(P@\xCA\xC0\xFA @\x80��\x92
+HR\xDB, @\x80��\xE5w\xEE\xEE\xF5 <\xF2\xC8#\xA7\xBF\xFE\xF5\xAF\xA7>\xF8\xE0\xF4\xCC3\xCF<\x88+\xDA) pu\xF5@\xFE\xCF# g @\xE0\xAB\xD8߀|\xFE\xF9\xE7_\xBD\xB1g	 @\x80��\xF8\xF8R\xB9s\xE7\xF8\xA5ȗ\xDFn{\xFE\xE6g\xDE\xF69\xB7=/\xB3\xFFן\\xDF\xF6\xDAn{\xFE^\xBE\xE6\xE3k\x9B{S\xF8_\xEF\xDFfr\xDB\xF37\xBF\xC2m\x9Fs\xDB\xF37\xB3\xDE'@\x80��\xF8\xE6\xFA\xF0\xC3Oo\xBF\xFD\xF6\xF5W>\xBEq\xFF\xC5/~q\xFA\xF8\xE3\x8FO\xFAӟΏǟo~C|\xFE\x91\xBB_\xB3}\xF4\xD1饗^:\xFD\xF9\xCF\xBE\xDE\xEB\xCD7߼\xAF_\xF3\xE1\xFDms~\xD0_\xF3\xF5\xF1x\x87�� @\xE0x\xF8\xA9\xA7\x9E\xFA\xD2O\xDD\xFC\xF1ӣ\x8F>z\xFA\xC9O~rt\xFC\xF9\xE6\xDB\xF1\xFC\x93O>y~\xEA\x8B?I\xBE_\xB2O<\xF1\xC4\xE9\xB3\xCF>\xBB~\xD9\xCF>\xFB\xEC\xE9\xD8\xF5x\xBB__\xF3\xB7\xD1\xF9A\xCD\xD7\xE4 @\x80��\x81oD\xE0\xCE\xDD\xDFl\xF8\xAFl\xBFJ_\x84�� @\x80��\x81\xAF\xF8\xD2\xF2u'@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x
 90\xAD\x9C
  @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\x
 D9\xCA\xC9 @\x80�� 0P@\xC6d
  @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&a
 mp;@\x80�� @\x80\xC0V@\xD9\xC
 A\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\
 xAD\x9C @\x80��cdL&@\
 x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P
 @\xC6d @\x80��l\x90\xAD\x
 9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@
 \xD9\xCA\xC9 @\x80�� 0P@\xC6
 d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\x90\xAD\x9C @\x80��cdL&@\x80�� @\x80\xC0V@\xD9\xCA\xC9 @\x80�� 0P@\xC6d @\x80��l\xFE	z|\xC5B']\xEE��������IEND\xAEB`\x82
\ No newline at end of file

Modified: branches/safari-612-branch/Source/WebCore/ChangeLog (283145 => 283146)


--- branches/safari-612-branch/Source/WebCore/ChangeLog	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebCore/ChangeLog	2021-09-27 22:49:35 UTC (rev 283146)
@@ -1,5 +1,86 @@
 2021-09-27  Alan Coon  <[email protected]>
 
+        Cherry-pick r283035. rdar://problem/83584492
+
+    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+    https://bugs.webkit.org/show_bug.cgi?id=229792
+    <rdar://problem/82776741>
+    
+    Reviewed by Eric Carlson.
+    
+    Source/WebCore:
+    
+    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+    
+    Test: fast/mediastream/video-rotation.html
+    
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+    * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+    
+    Source/WebKit:
+    
+    Helper routined used in WTR.
+    
+    * Shared/API/c/cg/WKImageCG.cpp:
+    (WKImageCreateDataURLFromImage):
+    * Shared/API/c/cg/WKImageCG.h:
+    
+    Tools:
+    
+    Add testRunner API to take a view port snapshot as a PNG data URL.
+    We can then use this data URL to validate some rendered pixel values.
+    
+    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+    (WTR::InjectedBundle::didReceiveMessageToPage):
+    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+    (WTR::TestRunner::takeViewPortSnapshot):
+    (WTR::TestRunner::viewPortSnapshotTaken):
+    * WebKitTestRunner/InjectedBundle/TestRunner.h:
+    * WebKitTestRunner/TestController.cpp:
+    (WTR::TestController::takeViewPortSnapshot):
+    * WebKitTestRunner/TestController.h:
+    * WebKitTestRunner/TestInvocation.cpp:
+    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+    (WTR::TestController::takeViewPortSnapshot):
+    
+    LayoutTests:
+    
+    * fast/mediastream/video-rotation-expected.txt: Added.
+    * fast/mediastream/video-rotation.html: Added.
+    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-09-24  Youenn Fablet  <[email protected]>
+
+            <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+            https://bugs.webkit.org/show_bug.cgi?id=229792
+            <rdar://problem/82776741>
+
+            Reviewed by Eric Carlson.
+
+            We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+            We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+            This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+
+            Test: fast/mediastream/video-rotation.html
+
+            * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+            * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+            (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+            (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+            * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+
+2021-09-27  Alan Coon  <[email protected]>
+
         Cherry-pick r282924. rdar://problem/83584505
 
     Make SharedBuffer inherit from ThreadSafeRefCounted

Modified: branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h (283145 => 283146)


--- branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h	2021-09-27 22:49:35 UTC (rev 283146)
@@ -88,6 +88,7 @@
     void addSampleToPendingQueue(MediaSample&);
     void requestNotificationWhenReadyForVideoData();
     void enqueueSampleBuffer(MediaSample&);
+    void setRootLayerBoundsAndPositions(CGRect, MediaSample::VideoRotation);
 
 #if !RELEASE_LOG_DISABLED
     void onIrregularFrameRateNotification(MonotonicTime frameTime, MonotonicTime lastFrameTime);

Modified: branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm (283145 => 283146)


--- branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm	2021-09-27 22:49:35 UTC (rev 283146)
@@ -267,19 +267,27 @@
     updateRootLayerBoundsAndPosition(bounds, rotation, ShouldUpdateRootLayer::No);
 }
 
+void LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions(CGRect bounds, MediaSample::VideoRotation rotation)
+{
+    CGPoint position = { bounds.size.width / 2, bounds.size.height / 2};
+    if (rotation == MediaSample::VideoRotation::Right || rotation == MediaSample::VideoRotation::Left)
+        std::swap(bounds.size.width, bounds.size.height);
+
+    m_rootLayer.get().position = position;
+    m_rootLayer.get().bounds = bounds;
+}
+
 void LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition(CGRect bounds, MediaSample::VideoRotation rotation, ShouldUpdateRootLayer shouldUpdateRootLayer)
 {
     runWithoutAnimations([&] {
-        CGPoint position = { bounds.size.width / 2, bounds.size.height / 2};
+        if (shouldUpdateRootLayer == ShouldUpdateRootLayer::Yes)
+            setRootLayerBoundsAndPositions(bounds, rotation);
 
-        if (shouldUpdateRootLayer == ShouldUpdateRootLayer::Yes) {
-            m_rootLayer.get().position = position;
-            m_rootLayer.get().bounds = bounds;
-        }
-
         if (rotation == MediaSample::VideoRotation::Right || rotation == MediaSample::VideoRotation::Left)
             std::swap(bounds.size.width, bounds.size.height);
 
+        CGPoint position = { bounds.size.width / 2, bounds.size.height / 2};
+
         m_sampleBufferDisplayLayer.get().position = position;
         m_sampleBufferDisplayLayer.get().bounds = bounds;
     });

Modified: branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferUtilitiesCG.h (283145 => 283146)


--- branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferUtilitiesCG.h	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferUtilitiesCG.h	2021-09-27 22:49:35 UTC (rev 283146)
@@ -37,12 +37,12 @@
 WEBCORE_EXPORT uint8_t verifyImageBufferIsBigEnough(const void* buffer, size_t bufferSize);
 
 CFStringRef jpegUTI();
-RetainPtr<CFStringRef> utiFromImageBufferMIMEType(const String&);
+WEBCORE_EXPORT RetainPtr<CFStringRef> utiFromImageBufferMIMEType(const String&);
 
 Vector<uint8_t> data(CGImageRef, CFStringRef destinationUTI, std::optional<double> quality);
 Vector<uint8_t> data(const PixelBuffer&, const String& mimeType, std::optional<double> quality);
 
-String dataURL(CGImageRef, CFStringRef destinationUTI, const String& mimeType, std::optional<double> quality);
+WEBCORE_EXPORT String dataURL(CGImageRef, CFStringRef destinationUTI, const String& mimeType, std::optional<double> quality);
 String dataURL(const PixelBuffer&, const String& mimeType, std::optional<double> quality);
 
 } // namespace WebCore

Modified: branches/safari-612-branch/Source/WebKit/ChangeLog (283145 => 283146)


--- branches/safari-612-branch/Source/WebKit/ChangeLog	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebKit/ChangeLog	2021-09-27 22:49:35 UTC (rev 283146)
@@ -1,3 +1,78 @@
+2021-09-27  Alan Coon  <[email protected]>
+
+        Cherry-pick r283035. rdar://problem/83584492
+
+    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+    https://bugs.webkit.org/show_bug.cgi?id=229792
+    <rdar://problem/82776741>
+    
+    Reviewed by Eric Carlson.
+    
+    Source/WebCore:
+    
+    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+    
+    Test: fast/mediastream/video-rotation.html
+    
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+    * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+    
+    Source/WebKit:
+    
+    Helper routined used in WTR.
+    
+    * Shared/API/c/cg/WKImageCG.cpp:
+    (WKImageCreateDataURLFromImage):
+    * Shared/API/c/cg/WKImageCG.h:
+    
+    Tools:
+    
+    Add testRunner API to take a view port snapshot as a PNG data URL.
+    We can then use this data URL to validate some rendered pixel values.
+    
+    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+    (WTR::InjectedBundle::didReceiveMessageToPage):
+    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+    (WTR::TestRunner::takeViewPortSnapshot):
+    (WTR::TestRunner::viewPortSnapshotTaken):
+    * WebKitTestRunner/InjectedBundle/TestRunner.h:
+    * WebKitTestRunner/TestController.cpp:
+    (WTR::TestController::takeViewPortSnapshot):
+    * WebKitTestRunner/TestController.h:
+    * WebKitTestRunner/TestInvocation.cpp:
+    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+    (WTR::TestController::takeViewPortSnapshot):
+    
+    LayoutTests:
+    
+    * fast/mediastream/video-rotation-expected.txt: Added.
+    * fast/mediastream/video-rotation.html: Added.
+    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-09-24  Youenn Fablet  <[email protected]>
+
+            <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+            https://bugs.webkit.org/show_bug.cgi?id=229792
+            <rdar://problem/82776741>
+
+            Reviewed by Eric Carlson.
+
+            Helper routined used in WTR.
+
+            * Shared/API/c/cg/WKImageCG.cpp:
+            (WKImageCreateDataURLFromImage):
+            * Shared/API/c/cg/WKImageCG.h:
+
 2021-09-23  Russell Epstein  <[email protected]>
 
         Cherry-pick r282175. rdar://problem/83460931

Modified: branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.cpp (283145 => 283146)


--- branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.cpp	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.cpp	2021-09-27 22:49:35 UTC (rev 283146)
@@ -31,6 +31,7 @@
 #include "WebImage.h"
 #include <WebCore/ColorSpace.h>
 #include <WebCore/GraphicsContext.h>
+#include <WebCore/ImageBufferUtilitiesCG.h>
 #include <WebCore/NativeImage.h>
 
 CGImageRef WKImageCreateCGImage(WKImageRef imageRef)
@@ -62,3 +63,10 @@
     return toAPI(webImage.leakRef());
 }
 
+WKStringRef WKImageCreateDataURLFromImage(CGImageRef imageRef)
+{
+    String mimeType { "image/png"_s };
+    auto destinationUTI = WebCore::utiFromImageBufferMIMEType(mimeType);
+    auto value = WebCore::dataURL(imageRef, destinationUTI.get(), mimeType, { });
+    return WKStringCreateWithUTF8CString(value.utf8().data());
+}

Modified: branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.h (283145 => 283146)


--- branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.h	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.h	2021-09-27 22:49:35 UTC (rev 283146)
@@ -38,6 +38,8 @@
 
 WK_EXPORT WKImageRef WKImageCreateFromCGImage(CGImageRef imageRef, WKImageOptions options);
 
+WK_EXPORT WKStringRef WKImageCreateDataURLFromImage(CGImageRef imageRef);
+
 #ifdef __cplusplus
 }
 #endif

Modified: branches/safari-612-branch/Tools/ChangeLog (283145 => 283146)


--- branches/safari-612-branch/Tools/ChangeLog	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/ChangeLog	2021-09-27 22:49:35 UTC (rev 283146)
@@ -1,3 +1,90 @@
+2021-09-27  Alan Coon  <[email protected]>
+
+        Cherry-pick r283035. rdar://problem/83584492
+
+    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+    https://bugs.webkit.org/show_bug.cgi?id=229792
+    <rdar://problem/82776741>
+    
+    Reviewed by Eric Carlson.
+    
+    Source/WebCore:
+    
+    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+    
+    Test: fast/mediastream/video-rotation.html
+    
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+    * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+    
+    Source/WebKit:
+    
+    Helper routined used in WTR.
+    
+    * Shared/API/c/cg/WKImageCG.cpp:
+    (WKImageCreateDataURLFromImage):
+    * Shared/API/c/cg/WKImageCG.h:
+    
+    Tools:
+    
+    Add testRunner API to take a view port snapshot as a PNG data URL.
+    We can then use this data URL to validate some rendered pixel values.
+    
+    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+    (WTR::InjectedBundle::didReceiveMessageToPage):
+    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+    (WTR::TestRunner::takeViewPortSnapshot):
+    (WTR::TestRunner::viewPortSnapshotTaken):
+    * WebKitTestRunner/InjectedBundle/TestRunner.h:
+    * WebKitTestRunner/TestController.cpp:
+    (WTR::TestController::takeViewPortSnapshot):
+    * WebKitTestRunner/TestController.h:
+    * WebKitTestRunner/TestInvocation.cpp:
+    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+    (WTR::TestController::takeViewPortSnapshot):
+    
+    LayoutTests:
+    
+    * fast/mediastream/video-rotation-expected.txt: Added.
+    * fast/mediastream/video-rotation.html: Added.
+    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-09-24  Youenn Fablet  <[email protected]>
+
+            <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+            https://bugs.webkit.org/show_bug.cgi?id=229792
+            <rdar://problem/82776741>
+
+            Reviewed by Eric Carlson.
+
+            Add testRunner API to take a view port snapshot as a PNG data URL.
+            We can then use this data URL to validate some rendered pixel values.
+
+            * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+            * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+            (WTR::InjectedBundle::didReceiveMessageToPage):
+            * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+            (WTR::TestRunner::takeViewPortSnapshot):
+            (WTR::TestRunner::viewPortSnapshotTaken):
+            * WebKitTestRunner/InjectedBundle/TestRunner.h:
+            * WebKitTestRunner/TestController.cpp:
+            (WTR::TestController::takeViewPortSnapshot):
+            * WebKitTestRunner/TestController.h:
+            * WebKitTestRunner/TestInvocation.cpp:
+            (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+            * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+            (WTR::TestController::takeViewPortSnapshot):
+
 2021-09-23  Alan Coon  <[email protected]>
 
         Cherry-pick r282881. rdar://problem/83430003

Modified: branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl (283145 => 283146)


--- branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl	2021-09-27 22:49:35 UTC (rev 283146)
@@ -423,4 +423,6 @@
 
     // MediaKeySystem
     undefined setIsMediaKeySystemPermissionGranted(boolean value);
+
+    undefined takeViewPortSnapshot(object callback);
 };

Modified: branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp (283145 => 283146)


--- branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp	2021-09-27 22:49:35 UTC (rev 283146)
@@ -491,6 +491,13 @@
         return;
     }
 
+    if (WKStringIsEqualToUTF8CString(messageName, "ViewPortSnapshotTaken")) {
+        ASSERT(messageBody);
+        ASSERT(WKGetTypeID(messageBody) == WKStringGetTypeID());
+        m_testRunner->viewPortSnapshotTaken(static_cast<WKStringRef>(messageBody));
+        return;
+    }
+
     postPageMessage("Error", "Unknown");
 }
 

Modified: branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (283145 => 283146)


--- branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp	2021-09-27 22:49:35 UTC (rev 283146)
@@ -650,6 +650,7 @@
     ExitFullscreenForElementCallbackID,
     AppBoundRequestContextDataForDomainCallbackID,
     DidHandleTapCallbackID,
+    TakeViewPortSnapshotCallbackID,
     FirstUIScriptCallbackID = 100
 };
 
@@ -2173,6 +2174,23 @@
     postSynchronousPageMessage("SetIsMediaKeySystemPermissionGranted", granted);
 }
 
+void TestRunner::takeViewPortSnapshot(JSValueRef callback)
+{
+    if (m_takeViewPortSnapshot)
+        return;
+
+    cacheTestRunnerCallback(TakeViewPortSnapshotCallbackID, callback);
+    postMessage("TakeViewPortSnapshot");
+    m_takeViewPortSnapshot = true;
+}
+
+void TestRunner::viewPortSnapshotTaken(WKStringRef value)
+{
+    auto jsValue = JSValueMakeString(mainFrameJSContext(), toJS(value).get());
+    callTestRunnerCallback(TakeViewPortSnapshotCallbackID, 1, &jsValue);
+    m_takeViewPortSnapshot = false;
+}
+
 ALLOW_DEPRECATED_DECLARATIONS_END
 
 } // namespace WTR

Modified: branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (283145 => 283146)


--- branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h	2021-09-27 22:49:35 UTC (rev 283146)
@@ -541,6 +541,9 @@
 
     void setIsMediaKeySystemPermissionGranted(bool);
 
+    void takeViewPortSnapshot(JSValueRef callback);
+    void viewPortSnapshotTaken(WKStringRef);
+
 private:
     TestRunner();
 
@@ -609,6 +612,7 @@
     bool m_hasSetDowngradeReferrerCallback { false };
     bool m_hasSetBlockThirdPartyCookiesCallback { false };
     bool m_hasSetFirstPartyWebsiteDataRemovalModeCallback { false };
+    bool m_takeViewPortSnapshot { false };
 };
 
 } // namespace WTR

Modified: branches/safari-612-branch/Tools/WebKitTestRunner/TestController.cpp (283145 => 283146)


--- branches/safari-612-branch/Tools/WebKitTestRunner/TestController.cpp	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/TestController.cpp	2021-09-27 22:49:35 UTC (rev 283146)
@@ -3579,6 +3579,10 @@
 {
 }
 
+WKRetainPtr<WKStringRef> TestController::takeViewPortSnapshot()
+{
+    return adoptWK(WKStringCreateWithUTF8CString("not implemented"));
+}
 #endif
 
 void TestController::sendDisplayConfigurationChangedMessageForTesting()

Modified: branches/safari-612-branch/Tools/WebKitTestRunner/TestController.h (283145 => 283146)


--- branches/safari-612-branch/Tools/WebKitTestRunner/TestController.h	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/TestController.h	2021-09-27 22:49:35 UTC (rev 283146)
@@ -361,6 +361,7 @@
 
     void completeMediaKeySystemPermissionCheck(WKMediaKeySystemPermissionCallbackRef);
     void setIsMediaKeySystemPermissionGranted(bool);
+    WKRetainPtr<WKStringRef> takeViewPortSnapshot();
 
     void didHandleTap(bool wasMeaningful);
 

Modified: branches/safari-612-branch/Tools/WebKitTestRunner/TestInvocation.cpp (283145 => 283146)


--- branches/safari-612-branch/Tools/WebKitTestRunner/TestInvocation.cpp	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/TestInvocation.cpp	2021-09-27 22:49:35 UTC (rev 283146)
@@ -744,6 +744,12 @@
         TestController::singleton().setStatisticsFirstPartyWebsiteDataRemovalMode(booleanValue(messageBody));
         return;
     }
+    
+    if (WKStringIsEqualToUTF8CString(messageName, "TakeViewPortSnapshot")) {
+        auto value = TestController::singleton().takeViewPortSnapshot();
+        postPageMessage("ViewPortSnapshotTaken", value.get());
+        return;
+    }
 
     if (WKStringIsEqualToUTF8CString(messageName, "StatisticsSetToSameSiteStrictCookies")) {
         TestController::singleton().setStatisticsToSameSiteStrictCookies(stringValue(messageBody));

Modified: branches/safari-612-branch/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm (283145 => 283146)


--- branches/safari-612-branch/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm	2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm	2021-09-27 22:49:35 UTC (rev 283146)
@@ -37,6 +37,7 @@
 #import <Security/SecItem.h>
 #import <WebKit/WKContextConfigurationRef.h>
 #import <WebKit/WKContextPrivate.h>
+#import <WebKit/WKImageCG.h>
 #import <WebKit/WKPreferencesRefPrivate.h>
 #import <WebKit/WKProcessPoolPrivate.h>
 #import <WebKit/WKStringCF.h>
@@ -570,4 +571,9 @@
     configuration.defaultWebpagePreferences = webpagePreferences.get();
 }
 
+WKRetainPtr<WKStringRef> TestController::takeViewPortSnapshot()
+{
+    return adoptWK(WKImageCreateDataURLFromImage(mainWebView()->windowSnapshotImage().get()));
+}
+
 } // namespace WTR
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to