Title: [213970] trunk
Revision
213970
Author
aes...@apple.com
Date
2017-03-14 20:27:43 -0700 (Tue, 14 Mar 2017)

Log Message

[iOS] -[WKWebView _dataForDisplayedPDF] returns nil when called before an encrypted PDF has been unlocked
https://bugs.webkit.org/show_bug.cgi?id=169653
<rdar://problem/24137675>

Reviewed by Tim Horton.

Source/WebKit2:

* UIProcess/ios/WKPDFView.mm:
(-[WKPDFView pdfDocument]): Changed to return _cgPDFDocument directly instead of via the
UIPDFDocument, which is only created after the PDF has been unlocked.

Tools:

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit2/encrypted.pdf: Added.
* TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFView.mm: Added.
(runTest):
(TEST):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (213969 => 213970)


--- trunk/Source/WebKit2/ChangeLog	2017-03-15 03:19:02 UTC (rev 213969)
+++ trunk/Source/WebKit2/ChangeLog	2017-03-15 03:27:43 UTC (rev 213970)
@@ -1,3 +1,15 @@
+2017-03-14  Andy Estes  <aes...@apple.com>
+
+        [iOS] -[WKWebView _dataForDisplayedPDF] returns nil when called before an encrypted PDF has been unlocked
+        https://bugs.webkit.org/show_bug.cgi?id=169653
+        <rdar://problem/24137675>
+
+        Reviewed by Tim Horton.
+
+        * UIProcess/ios/WKPDFView.mm:
+        (-[WKPDFView pdfDocument]): Changed to return _cgPDFDocument directly instead of via the
+        UIPDFDocument, which is only created after the PDF has been unlocked.
+
 2017-03-14  Tim Horton  <timothy_hor...@apple.com>
 
         Let PDFLayerController drive cursor updates so that it's correct more often

Modified: trunk/Source/WebKit2/UIProcess/ios/WKPDFView.mm (213969 => 213970)


--- trunk/Source/WebKit2/UIProcess/ios/WKPDFView.mm	2017-03-15 03:19:02 UTC (rev 213969)
+++ trunk/Source/WebKit2/UIProcess/ios/WKPDFView.mm	2017-03-15 03:27:43 UTC (rev 213970)
@@ -151,7 +151,7 @@
 
 - (CGPDFDocumentRef)pdfDocument
 {
-    return [_pdfDocument CGDocument];
+    return _cgPDFDocument.get();
 }
 
 static void detachViewForPage(PDFPageInfo& page)

Modified: trunk/Tools/ChangeLog (213969 => 213970)


--- trunk/Tools/ChangeLog	2017-03-15 03:19:02 UTC (rev 213969)
+++ trunk/Tools/ChangeLog	2017-03-15 03:27:43 UTC (rev 213970)
@@ -1,3 +1,17 @@
+2017-03-14  Andy Estes  <aes...@apple.com>
+
+        [iOS] -[WKWebView _dataForDisplayedPDF] returns nil when called before an encrypted PDF has been unlocked
+        https://bugs.webkit.org/show_bug.cgi?id=169653
+        <rdar://problem/24137675>
+
+        Reviewed by Tim Horton.
+
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKit2/encrypted.pdf: Added.
+        * TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFView.mm: Added.
+        (runTest):
+        (TEST):
+
 2017-03-14  Brady Eidson  <beid...@apple.com>
 
         Rename WKHTTPCookieStorage to WKHTTPCookieStore.

Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (213969 => 213970)


--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2017-03-15 03:19:02 UTC (rev 213969)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2017-03-15 03:27:43 UTC (rev 213970)
@@ -481,6 +481,8 @@
 		A13EBBB01B87436F00097110 /* BundleParametersPlugIn.mm in Sources */ = {isa = PBXBuildFile; fileRef = A13EBBAE1B87436F00097110 /* BundleParametersPlugIn.mm */; };
 		A13EBBB11B87438000097110 /* BundleParameters.mm in Sources */ = {isa = PBXBuildFile; fileRef = A13EBBAC1B87436F00097110 /* BundleParameters.mm */; };
 		A1409AD91E7254D4004949D9 /* password-protected.pages in Copy Resources */ = {isa = PBXBuildFile; fileRef = A1409AD81E7254AC004949D9 /* password-protected.pages */; };
+		A14AAB631E78D7DE00C1ADC2 /* WKPDFView.mm in Sources */ = {isa = PBXBuildFile; fileRef = A14AAB611E78D7DE00C1ADC2 /* WKPDFView.mm */; };
+		A14AAB651E78DC5400C1ADC2 /* encrypted.pdf in Copy Resources */ = {isa = PBXBuildFile; fileRef = A14AAB641E78DC3F00C1ADC2 /* encrypted.pdf */; };
 		A14FC5851B89739100D107EB /* WKWebViewConfigurationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = A14FC5831B89739100D107EB /* WKWebViewConfigurationExtras.mm */; };
 		A14FC5881B8991BF00D107EB /* ContentFiltering.mm in Sources */ = {isa = PBXBuildFile; fileRef = A14FC5861B8991B600D107EB /* ContentFiltering.mm */; };
 		A14FC58B1B89927100D107EB /* ContentFilteringPlugIn.mm in Sources */ = {isa = PBXBuildFile; fileRef = A14FC5891B89927100D107EB /* ContentFilteringPlugIn.mm */; };
@@ -649,6 +651,7 @@
 			dstPath = TestWebKitAPI.resources;
 			dstSubfolderSpec = 7;
 			files = (
+				A14AAB651E78DC5400C1ADC2 /* encrypted.pdf in Copy Resources */,
 				A1409AD91E7254D4004949D9 /* password-protected.pages in Copy Resources */,
 				5120C83E1E67678F0025B250 /* WebsiteDataStoreCustomPaths.html in Copy Resources */,
 				F4856CA31E649EA8009D7EE7 /* attachment-element.html in Copy Resources */,
@@ -1233,6 +1236,8 @@
 		A13EBBAC1B87436F00097110 /* BundleParameters.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BundleParameters.mm; sourceTree = "<group>"; };
 		A13EBBAE1B87436F00097110 /* BundleParametersPlugIn.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BundleParametersPlugIn.mm; sourceTree = "<group>"; };
 		A1409AD81E7254AC004949D9 /* password-protected.pages */ = {isa = PBXFileReference; lastKnownFileType = file; path = "password-protected.pages"; sourceTree = "<group>"; };
+		A14AAB611E78D7DE00C1ADC2 /* WKPDFView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKPDFView.mm; sourceTree = "<group>"; };
+		A14AAB641E78DC3F00C1ADC2 /* encrypted.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = encrypted.pdf; sourceTree = "<group>"; };
 		A14FC5831B89739100D107EB /* WKWebViewConfigurationExtras.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewConfigurationExtras.mm; sourceTree = "<group>"; };
 		A14FC5841B89739100D107EB /* WKWebViewConfigurationExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebViewConfigurationExtras.h; sourceTree = "<group>"; };
 		A14FC5861B8991B600D107EB /* ContentFiltering.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContentFiltering.mm; sourceTree = "<group>"; };
@@ -1654,6 +1659,7 @@
 				51D124971E763AF8002B2820 /* WKHTTPCookieStorage.mm */,
 				375E0E151D66674400EFEC2C /* WKNSNumber.mm */,
 				37B47E2E1D64E7CA005F4EFF /* WKObject.mm */,
+				A14AAB611E78D7DE00C1ADC2 /* WKPDFView.mm */,
 				2D00065D1C1F58940088E6A7 /* WKPDFViewResizeCrash.mm */,
 				5E4B1D2C1D404C6100053621 /* WKScrollViewDelegateCrash.mm */,
 				5CE354D81E70D9C300BEFE3B /* WKUserContentExtensionStore.mm */,
@@ -2117,6 +2123,7 @@
 				9B270FED1DDC25FD002D53F3 /* closed-shadow-tree-test.html */,
 				5C9E56861DF9148E00C9EE33 /* contentBlockerCheck.html */,
 				290F4274172A1FDE00939FF0 /* custom-protocol-sync-xhr.html */,
+				A14AAB641E78DC3F00C1ADC2 /* encrypted.pdf */,
 				07492B391DF8ADA400633DE1 /* enumerateMediaDevices.html */,
 				C5E1AFFD16B22179006CC1F2 /* execCopy.html */,
 				BC2D004A12A9FEB300E732A3 /* file-with-anchor.html */,
@@ -2869,6 +2876,7 @@
 				7CCE7EDE1A411A9200447C4C /* URL.cpp in Sources */,
 				7CCE7EB01A411A4400447C4C /* URLExtras.mm in Sources */,
 				07492B3B1DF8B14C00633DE1 /* EnumerateMediaDevices.cpp in Sources */,
+				A14AAB631E78D7DE00C1ADC2 /* WKPDFView.mm in Sources */,
 				C25CCA061E51380B0026CB8A /* LineBreaking.mm in Sources */,
 				7A6A2C701DCCFA8C00C0D085 /* LocalStorageQuirkTest.mm in Sources */,
 				D34E08761E4E42E1005FF14A /* WKWebViewGetContents.mm in Sources */,

Added: trunk/Tools/TestWebKitAPI/Tests/WebKit2/encrypted.pdf (0 => 213970)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2/encrypted.pdf	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2/encrypted.pdf	2017-03-15 03:27:43 UTC (rev 213970)
@@ -0,0 +1,191 @@
+%PDF-1.6
+%\xC4\xE5\xF2\xE5\xEB\xA7\xF3\xA0\xD0\xC4\xC6
+4 0 obj
+<< /Length 5 0 R /Filter /FlateDecode >>
+stream
+J\x90A|\x84\xF1D\x87ݲmԊ\xC6w+\xFC\xCF1\xF2^8Qp\xE8""f\xE1-O\xB62k\x90\x95>\xE71\xE0\xECr\xD7?\xE8\xCCkz>\x95Q8}{o\x98\xDC?\xB0j\xF53&
+o\xDA%\xB3\xAB҂\x9B\xDCR\xA4Ѣr\x9B\xCAщ\xA1}\x8BV@$0A\xF8\xBD\xBBb\xBB\xC1!\xD7Ѵ\xD6e\xD6a\xDB?҉i\xCEY\xC3?\xF2\xA7\xF7\xEB\xDCK4i\x87\x95\xB9
+Y\x9B\xB7EK\xA1Z\xF3WK@奨\xF7\xE7Z\x80A\x9F\xEC;\xD0\xE4ϙ'jo+Rn\x8F\xE5\xF9SYǶ\xAE'xI\x9FН\xA2:\xFFq.V\xC4Y\xA1lg\x9A0\x8C\xBEb\xEF\x86s\xE2\xD4G\xF11\xA0sn8\xE6\xF7\xFC\xB1v\x88\xE1u\xADg
+endstream
+endobj
+5 0 obj
+240
+endobj
+2 0 obj
+<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]
+>>
+endobj
+6 0 obj
+<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R
+>> >>
+endobj
+9 0 obj
+<< /Length 10 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >>
+stream
+J\x90A|\x84\xF1D\x87ݲmԊ\xC6w+6<\xDDp\x92\x9A\x8Fy\xFDL2\xE2\xA4\xDC\xDA-T\x92\xFCQ\x8D荈?\x9B\xFA\xC5\xAE\xE8\x97vǨD\xC1\xB9q\x99SQ\xBB\xED\x82r:\xEAې\x86ob0>a0ΧPX\xB9\xDBr\xDE\xE7\x81z\xE9\x82\xC7_ʹJ™o5\x8B\x88\x83'\xEF\xB9\xE8I\xDF~\xC9'\x94ӯk^\xB9P\xB4\xBD76\xBE)\xF3\xC8\xE3\xA2`(p\xCAㇰ\xF9\xBEҸ9F\xDC3\xC1\xBEf\xFA\xC8\x8B\xE3\xB7\xC5\xD4(_\xB1\xE0;\xDE\xCEל\xC33\xDD=ƃ\x8B\xB1%\xF9\x973i\xF5p50=\x9F\xF4\xF1\x8DMj뎨4&\xDF\xFA\xA0\x86WȻ\xE0u\xC3\xE5\xF3:\xEF\xAF8\xE3B\xD2:S\xEEdh\xEFNp\xF0ζL\x9B\xD4\xA1\x98\xFBS\xF3C\xA0\xA4IUEyrR\xF0&\x8C\xA3\x81E\xD1C1F\xFD&\xB7\x85@j\xD6l̯`\xEB\x9B*a\xB4\xA83ݽe\xB6}\xE6e\xE5\xCD\xE5\xEB\x95y+Y?\xEB`
+\xAA\x95&\xFE2\x93\xC4\xA00@\x86:\xF7Qf\xAF\xF1\xB8\xEF\xF3\x{DAAB}\x91\xD2E\xC2Z)\xC1u0*T\xC4\xE66\xE2EQ:\xB6`k\x9D\xB6Q%O\xE8Bb\xABy+\xA2\xA1\xCEL\xAF\xB6O\xFA\xB8\xD2\xCF\xF3\xA2\xBCU\xD96\x806erTŸ\xDB\xDA8\xA60\xA5J\x9EA\xC4\xD37\xCB+\x83"\x94)\xF6t\x9C\x85\x9E\xD0\xD5e
+1\xF2\x80ș\xBA^\xE4_\xC7->s\xAE\xEAh,	!
+&\x9D\x85\xE7]X	\x9E\xF2w\xACe\xBC\xB5\x933\x8DGg\xA1e,`\x98\xAB\F\xE7\xEE\xB1oҸ\xAB7Y\xF8F\xEC;\xB2\x90\xF7\xBA\xDC:G\xB1Ps+xtq5EP\xD1\xDFT\xCAK3edH:\xFD\xD5ϖ\xE1k\x93\xC2r\x9A\x99\x82A/x\xD8\xFC\xDD~\x85D\xB9e\x9D9\x940\xE9]c\xE9܊\xD1)\xF5\xA8\x9Dy\xAC\xF9\x80\xD5nC1A4\xA1܌K\xDB߬\xB0\x9E\x98\xEB\xDCY\xF3	\\x9DT'\x9F/"\x9Bb\x87\xE4}Z\xE9T2K\xB4	\xB1\xF6g\xC7">\x9E\x82D\xA9yQhʁ}~\xEA\x9CzYЏ8\x85!\xF8\xFBD{\xA1`VN\M\xFF\xB1\xC9nE\xF2\xAD\xA1)f\xD9\xC1_S\xEAH\xF2Wbc\xCFi\x9E\xD8[\x8E\x99\x9D\xDB\xFE]Nu*\xBE\xBBQ@\xED\x86\xAEt\xDF\xF8Z\x89\xD1$'w<s\xB1\xDA\xCBV\xB8+B*s\x80\x93x\xD1$\xFE\xB3Z,\x9E\xB2s[\xF2\xE6\xF4\xBA\xA2i\xD1`\xD3P}YF\xD5\xF0f\x95\xEE\xEC\xCEZ\xF8Lb\xB8\xB8\xDF\xF3\xB0\xB8\xAB\xC1\x9A\x88\xE5\xF2\xCD5g?\xF5\xE62-\xD0\xDFK!\x8B2\x96&\xD7\xC1\x92\xB9 mZo\xEAX8X\xF5 \x87\x87\xDA4N\xCB\xA7ɟ\x87Wɏ\xCE\xE2\xC7u\xC0\xA8S\xE4\xCD\xD91\xC7\xF9b\xEF\xEA\xF3X\xAC׻R\xB82o
+ِ\xBE9\xAF\x98\xCC=E\x90L\x8E\xFF \xAC\xB5\x94\xEA\xA8\xFDmg\xD2ma\xF0\xA6 $\xE1\xCA\xF4\xC2I\xF3c#a㇖\xA5\xAC\x83\xC0\xB1\xA5\xAC̵V\xF7\xD4\x96\x95\xDD̖
+\xFB\xBE\xD8\xF6\xB9@\xE5\xB2\xD5_ڪ\xBFH(\xFFJ\xB0w8,b\xC7lf\x95\xF1\x81{\xB8e݆\x95h[b\xD8ـ_\xEA}\xFBK\xD8\xDE1\x88f\xE2\xF6\xE2`UDu\x9E\xFC\xFB\xEF+>\xE9\xD3h=G\xDD'j,~KP=\xEDp;\\xBBዼ,\xF9\xC3-1)\l\xBDkbqy\xDAKU*73\xF9\xDA
+\xAAB)x\x9F\xCD\xF2\x9B#N \xEB\xB4g򍜳\xB4\xACzO\x8BZKtg\x9D1	\x9D\xFB\x992\xFCr\x99H\xD66\xB3\xCE{\x97u\xE2\x97\xF9@|wN\xF9r%\xBA[}\x9Ca{\xF0\xD1-M\xA6\xD8\xFD\xE8O\xF7_\xD4a\xF5\x9E\x80\xC34\xFB	\xA18S*\xD2#\x9E\xDD!\xE5!\(\xA9\xFC찘\xB0Y\xAE\x9A\xC9\xCC\xBEt\xD9\xD9\xD8\xFF΄\xFE\xD6\xC4naS\xBD\xC3-M\xD27|\xE6\xFB\xBEi\xD5\xCF	wh|pI5{\xB4\xA4 \xFFЂh^[g\xA9a	\xE96c,\xE15\xED\xB7\xC42lS'\x88\xF4\xA3\x96\xF4+\x96/\x92kE\xE15\xB5\xADA\x81e\xE5\xCB\xC6\xECϒ+m\x9Fv\xAB^i\xF5\x8Fh\xA7\x81\xBD\x82C4\xF0\xAD\x90\xC3|\x83]O_\x911\xB0\x9E\x8A\x86\xD1\xF9ٔZ\xDB|\x92\xD7\xDE\xEFmAz\xCA\xB7\xC1\xAB\x9F\x85\x88v\xA7\x84\xF4\xF8)y\xBD]\xAA\x82$W\xC9\xE0\x9D\x8F-\x9CK\xF8\xF7o\x90\xB2\x89\xAD\x89!M\xAD\x81<\x8B\xA3\x93$,\xC1txY\xF4lb\xDBO\xEB\x9BO}\xEE\\x96C#\xD9N\xD1\xD4Hc\xB6%\xA3F><Ե\xD4`\xCE\xBF6%\xB1\xF4\x81\xC9_p\xFD\xEB\xB7?s\xF5\x9F\xF18Ni\xBBFc\xA5o\xA0\xFE2\x9C/ԣHS,R\xA5Q\xF8Ti!.(\xD7̊w\xFE|\xE6-\xB8\xB4Ö\xAC\x
 ED~O?t\x80\x87\xC2\x99XLC@\xF2N\xD7\\xA7F\x91\x8A0X\xB5a\x8F\x92s\xA7\xCA \xD7U\x95M]a\xE8zz\xC5\xD3݈\xE1\xC2,N0\xDD;qw\xCCs\xF9۫\xA0\x8E7\xC6<\xBA4\xD5)Z5\xB3i󚮤\xF0\x85\xA4\xEC\x8F*7Tf\x9F\xB9\R%\x98\xB0e\xE8@\xADĺ]]!\xD8T\x91]\xFE\xA2\x85\xDA\xAB\xC9\xE9Y\xA4m\x89\xE9\xC5\xAE\x9D#C\xF3\x97\x94\xCD\xCE~\xE9\xEBa\xAF)\x80\xA1\xC8\xFD\xE4[F\xA0Wv\xC3v\xF7i\xFA\xCF\xCA(2\xF8j\xD9צ\xF3ү\xB0\xFC=\xBEXH\xE2\xF6s6(\xED\xABo\xD7\xF2\xE6z{]G\xC1Mp@ڃ0\x9AI\x90\xBA]+\x98\xA2\xDD|_\x8B\x87'\xBFO\x9A\xCBrx\xF3b\xA40\xFA\xDE\x8D\xA1[\xBF\xB4\x95F	p~\xEDx\xC0\xDF\xEC<Va#\xC7k\x9BT(<+)\xBB\xCD\xF0\x9C\xEF<l
+mW\xC5~ce\xB5\xD4\xF0\x98\xF0\xFF\x82-J7\x87\xEDƧ'j^\xCF,௵q\xFBh)\xF1\xECm\xBD\x8B\x8B\xBE\xBD\x9DCe\xF8F\x99\x9C\xB4\xA9ң\xC4\xE5SU\x9D\xAD\xA0\x8Fe\xDFE\x95\xC1\xF8A\xC8`\xFF\\xC5<mT,\x8F,\xD1^ \xA7>\xF5(:\xE2C\xEC'{\xF3xXs\xDCvOJV0:#\x9F\x9C\xA4\xE8\xB7j\xD0L3x\xE5*\x81\xBD?È%\xE1d\xDC*؃\x88\x91\xC9)fAh\xF2Z\xC6b\"B\x9Fg\xDCg<;\xCC`^z\xD6cTk\xD2\xF0\xBD\xD73\xB4\xE2޳\xC7Ė\xA9J	\xF5\x9F\xE3_\xB6\x84\x98ژl\x95\x8E\xB1\xC8\xF4\xC1\x8D\x8F\xCC\xC3"ڋb\xC9M\xB7Ă\xAAf
+\xEDS\xC6\xC3\xD2P<\xE4jeL3\x85)\x9B!O\xF2\x9Cj\x84.\xD2( \xCE\xAF\xCBM\xC2'+\x84p\xFB\x{2A0BCFA}k>q\xEB\xF9\x86\xBF\x89\xCC]yG\x92Ǝ\xB8E7\xD9\xF1\xED\x84\xBC8\xABZI\xA4\x8AQRb\x9F\x80\x98\xEDO\xD1\xF65\xCF\xD6Ԓ	\xA6^#to]\xF5&\xAF\x8A\x9Fu5ñP	\xDEu^\xD5Y\xBD\xF9g\xA5\x87+\x8Cט\xC8k\x9F=\xC8LF\x8D>\x85\xA7\xACs\xF9\x93\x98gTs\xB7\x81T\xC6\xC6U巿(+)\xA2\xA1i_ф\xE0\xF2\x81c\xE5\xFD"o\xA7:\x92\xD3\xDA\xD6\xFA;I\x8B#/\xF5˯;\xAFi\xAD#i\xB6t\x90evyXݫB\xA4\x87\x9A\xE3\x94\xBEM!xLm\xC1\xFCR\x9Buh*\x8Bynb\xE8}!\x93l\xD9I\xD5\xDCeӵQ\xAC\x8F\x9ER{\xD0\xC6+L\xB9\x98\xA90\xD1\xD02Q\xCF\xD66\xDD \\xFEW\x8A\x90\xD5\xC0\xABKngbQ\xE2\xA9|\x8E\xB7vПB(C \xC6\xF9D,8/\xC7"?\xFC\xA3\x86\x90\xE1\xF4\xA7\xA3=cu\xFB\xD8'\xB4\xC6\xEE2\xFFzuܝ\xA5\xB1\xF7\x97\x91\xEE^`$\xE6%\xE7(խ5\xF3\x97\xA8\xE4\x9A<i\xE4\xB4\xF2g\x99\x98\xDEL\xB3\xCDa%m$\xB7l\xB4J[\xD6+s\x90\xE5e\x90ˢ\xA1\xA4\xF3\x87\xE8\xB1\\x86+&
 amp;\xE8\xF1\xA7ow\x8E\xCC\xE9\xC8ְ\x8EW\xE1$\xE4=`\xD6_\xA0:\xA8-\x9C\xF3\xE9Ȣ\xFAЙ\xFED\x8A\xE7\x87\xA1z\x8B\x96\x99F\x94k\xEA\xE5\xF9\xAD\xAFbG ~j-L\xAC!@*\xF1%\xFBe\xEA!(\xE39A\x9CTA\xAA\xFA\xB8 N\xF2p\x8D0\xFEA\xA8_\x9B\x84O\x90gn\xBC\xC2R\x95\xA6[\xBE\xEEs1\x86\xC9\xF1\xE9@R\xF5\x80\xDB\xF4a\xFE\x8DK\x97AYC\xAE\xFF?\xD59\xAE\xB7%hۧk&I6=\x85\xAF\xF8J%;\xA6\xAEEd^\xDCh\xB1\xA4\x95Dnl\xD5I\x8A'6z\xC8z7\xA6CN\xF9\x935\xB7\x80\xE6P\x96{\@\x81\xB9#lѩ\xC7Q|l\xE1\x8Eo\xA0p
+endstream
+endobj
+10 0 obj
+2640
+endobj
+7 0 obj
+[ /ICCBased 9 0 R ]
+endobj
+3 0 obj
+<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>
+endobj
+11 0 obj
+<< /Type /Catalog /Pages 3 0 R /Version /1.6 >>
+endobj
+8 0 obj
+<< /Type /Font /Subtype /TrueType /BaseFont /PZWFFP+Helvetica /FontDescriptor
+12 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 116 /Widths [ 278
+0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 556 556 556 556 556 0 0 0 0 0 0 0 0 0 0
+0 0 0 722 722 0 611 0 0 0 0 0 0 0 0 0 667 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 556 0 0 0 0 0 0 0 0 556 556 0 0 0 500 278 ] >>
+endobj
+12 0 obj
+<< /Type /FontDescriptor /FontName /PZWFFP+Helvetica /Flags 32 /FontBBox [-951 -481 1445 1122]
+/ItalicAngle 0 /Ascent 770 /Descent -230 /CapHeight 717 /StemV 0 /XHeight
+627 /MaxWidth 1500 /FontFile2 13 0 R >>
+endobj
+13 0 obj
+<< /Length 14 0 R /Length1 9172 /Filter /FlateDecode >>
+stream
+J\x90A|\x84\xF1D\x87ݲmԊ\xC6w+\xB9\x95r֎\xA7]|sN\x90^\xFAm\xC0Fɺ+NC(
+\xEE/h\xAD\xD3\xF0?\x9AKo\xE1[PA\xEEf\xD1o\xE42?\x94\xA1\x85"\xE3J㳫\xD7{\xFB\xCCv+ρs\xF5g\xE7.\x91\x85\xEF\xF8\xC0y>4\x9B\xA2'\xE9<j\xFF\xC5\!5W\xB4WWv2n\xD2\x84zϲ\x85f\xA9M\xF5\xEE'\xFE|\xC0Q\x86\xF9ɫ\xAB\xF8.\xE0\x88Ԏ\xC8~@\x98qᛜ\x8BѢ;\x8A\xB9F\xE7\xE5\xB79z\xA3\xC3\xCEyd \xAB!Y+c\xC5ű> :\x91\xE3TipV4\xBC\xD0\xDC\x8D*\x9F\xA3\xB8\xF4˛q}\xB8\xD6~Z\x81\xB6OF8\xD0<\xE5\x9A\xB9\xF7\x99\x90NZz$z\x93=&Q}\xDB\xFAK\xAD\xFB\xC03\xB0\xF0\xBEQ\x99\x99O\xBD 9>>Đ\xE5b\xEC\xB1\xF4uv\xB5\xF0h\xB2t\xC9-\x81	
+l\xF9D\xB9\xB4\x91!”\x92\x87un\xA2jUb\xB5\x9F\x8FO\xDD\xD2c\x82=s\x91cR\xB6\xB7L\x81d\xEDY\xF86\xCA4\x91\xE9l\xB9}\xEC\x80%\xF9\x91\xAB8\xD0\xFA	\xA8\xB1\xEE\xBF!k\x87\xB40\xE9UH\xE6椃\x94,\x8F\xB3;\xB7\xA2b\xFEz\x91\xE5\xD8\xF7\xC3\xCA\xE8\xE72\x82_C&"1O\x88q\xF4\x9C\x8BM\x9F\xB6\xF08\xE65i\xCC}\x91x\x82\x98k\x88\xC81\xB3\xCD}\xB7BD\xE0\xEB\xCCJ\xB8\x96K\x9C99Q\x87\xCEɓ	>\xAB\xC7\xE3J42\xE1(E8\x82\xA4\xE9G\xF3[\x93,\xE7\xF8\xDD\xCA\xDF\xCE\xE5\x9Bߛʔmç\xC7\xF6\x9A\xB3}\xA6\xB8\xC1 \xA6͒\xA8\xB4\xF3\xC5aG5g\xC0\xA3^\xF0\xC5\xE4\xB3+\xCA\xD94>\xB3\xEE\x88\xC0f>\xB6
+\\xF7l\xC6WV\xDD\xFCms\xD0Q\xBE\xB7\x83\xA2\xC0\xC1\xE8|ѵ\xAC\xF0&\x93'to(m߅\xE4yH\xD6M\xA5F9^!\xEAk1~^S/\xC5D\x89i\xB3\xF0ˎC \\xA8\x97\xB9o\xA2\x94â\x88w2q?E\xCEt\xF3\xF3<\xAF]v\xF33\xAD\xF9\xBBEi\xB2\xB0.*\xB9\xA5\xD16b)\xBEKM\xE9e/,\x84\xFB\xACL_S\x99\x85X \xF6>\x86FV#\xF4\xDB\xBAC\xA3)\xEF\xF2\xD0\xFCD\xA4#=\x95!\xDC\xE4bv=\x96\x9DW\xA1s\xCD^\xD8\xD4-\xCA\xE5\xABP-\xF0'\x93\xA5\x85\xD8\xF6$\x85\xF2\xCD\xF2\xBF\xD7#H\xA5\xFB\xF2\xA9\xE4\xB2rN\xE0\x98\xD46\x8E\xCE\xDA\xCBE\xA0ސ\xE8J\xCB\xCCcjR>\x8A\x80\x88\xB1\xAF
+\x85\xFE\xD86\xB3X^K7\x89\xED&y\xDC{\&-6\xF7 M\xFE܈I\xC9򒨨࿰܈\x80\xAFs\x951xp\xB2\xECO'\xF3{p4\xEB\xD2\xD853\x9C\x9Eu\x8Eu\xF4\xA3\x86\xAA\x9B\x98\x9E\xDD\x84l&Y\xAB9\xA4\xB1~e\xBD7\xE5\xDAc\xE9\xB0H\xD25^\x9C\xC2\xFE\xF03\x8B\x86b|\xA9\xE1G}nn\xEA2\xA8\xA6l\x80f\x88\xFEg\xF6\xA1\xA1\xFE+\xAD\x93cO\xEB9\xFC\xA8\xDD\xFA\xC1h2ؐ{Fna\xA3\xE4\xE7|j\xC4\xEB\xFAz\x88\xA1^49q8\x9C\xAA\xF9\xE6-+\xFFM_۝\xB3\xE2\xF9\x8A\xA7ضF\xD0n,X\xE8\xAE\xD5`\xAB=\xB4\x9D\x8D#\x8Ak\xFD9@\x95Q\xA8NC\xFBn4\x96LXd\xAC\xCEA\xCB{\xBE'\xDE\xDC\xF9Y\x81\x94Bl\xA2\xCCI\xF6s|\x80\xF2\xEE\xBEC"\xD15+\x9E\xF77\xFC_ܦR2Տ\x9A\xDE\xFC\x86\xEC2)"\xD8\xDCApD\xF4\x8E_6\xC6R\xAAg\x86\x83\xF51F{\xF2]P;򲖁\xA3Xȫu\xD7\xE9\xF3Qr\xF4qÿ6G\xDA\xBFn\xB3i\xA3D)cG\x8Cx\xA19F\xF8\xB81]\xC52\xC8/5\xF4CM&?s\x94\x8B\xEF]_>\xA0GcF\xE8e\߁\xF5\xE9]\xAB)կ\x97\xFB~_\xAA=k\xF1\xFFV\xA8\xB2\xCC{\xC1\xA4G\xCC	\x8B-\x8Cãޡ\xE9\x92\xD3\
 >\xB4\xD3iyϸo\xEF\x81'\xA6\xFD\xE0\xBEΨ\xFA&\xA1j1w+\xC9\xE6Mڸ$+\xA8\xA8Uڼs%\xEDNO\x89߸ክy\xF3\xD6\xFFP\x8A朌?\x90\xEFu\xB7C.\xE8\xE9\x8CV\xA5H\xAE\x99T\x{13D85E}\xA8\xD88\x88M\xBE\xEFly\x97ec\zE'\xA9\xBC2
+S"{n#\xA0&\xE7\x8F)b\xBEԪ7\xD1\xD1vɼ\x8A\xE4\xF6\x937,]\xBD\xCD.\x89\x85\xF7+\xA3\xE8\xE0\x88*\xC3\xB9\xA5ɰ\xA9\xD1CJfF\xFA/)4Ɓ\x99\xB4\xA6\xF7\xF6͒\xEF	\xE0j\x8B\x84\xEB
+\xEEdA'\xD5Q\xC7a\xDE\xE4\x8A+\xBB!w\x8E9d\xD9\xD2~-.\xBD/`<G\xF6\xC0\x89w\x99p\xA5\xE8\xF9\xBA\xB6۟\xF5(\x9D1\x89\x93\x8C\xC3XMā=P\xE4\xEF/\xE5yYT\x9D\xECg\xF3\\xD7=\xEF͝\x8Cդ\xBD\xF9\x8D\xF6RNhY\x91L+\xB1\xD5{U\xF7@p\x9F\xE5%\xCCg\xBA\x96\x8E \xECBA\xFE0\xCE6a\xE0\xF1\x83X,\x98\x90;\xF9\xB9(\xF4bK\x93\xEA\x8B\xDD\xE6\xC5JG\x9A0n\x88\xA5\xD4\xF2O!:\x86u7\x96+Bx&rf\xEA\xD6\xDAL\xAB\x90	\xC0\xD0s\xB9[[\xB4\x8CⱯ\xF6\xE7\xBF\xC2g7cv\xE4C\xBA\xA79\xD8\xE4M\xE6æԼY%äf0\xE3ƿ_7\xB2h֘\xF2\x97\xCB\xFDTX&\xA8\xE7s]\xC4\G!\x87A\xE1\xDEꚠ\xA4 \xE0\xD4IN\x9Ed\xB2K\xDF\xCD1Iv\xAFߣnj\x9A\xEB\x8F\xD3ð\xCAcQqst\x9Fa\xAF\x87\x90M\xEE\xC1lm\x84l\x8D\x8B-W9\xFC\xD8n\x8E\x95\xBB\x8D\xEB\xA0cUBfȟ\x88O\x9C8\xDCuT(\xA8\xE9n"\xCFSW{\xDEi\xBC\x97h\xB2\xC4\xF7\xEEE4\xC4O\x9D'\x83\xD68\xAD\xB2\xFF%Yj\xE3\xE68\x9A\x85\xC7\xC9\xEC\xF88\x92s)\x88\xCF\xD5d$sҸ(W.p\xEAa\xDB\xCF\xFDm\xEB\xFDR\xE1+\xCA\xE4@\x89U/\xB1\xBCI\xECC\xE2Q>
 \xC9-\xD26\x98\x9A\xA0\xAC+\xF62-\xCD\x96\\x87:\x9E\x87`p\xA0\xFE\xA6f\xA8\xFE\x92\x9Bx.'d\xDB\xE0\xCFq\xA6\xA1\xDF\xFD
+\xB8Q\xE0\xA6s	s\xFBo	\xFC>\xE3ۙ\xF9xݲ0\xF6\xB2\x9C1$Z<\xD0#\xBE\xFFֱZ>4g\xF9鉝\xAA\x97\x92\xB5 \x92\xADu!\xE3ON\xFD\x9DR\xE4\x99ȁG$\xB8?V\xEAu\x91j(YT\xFBd,\xB4,\xDDlHs{\xD4oB\x99\x8A\xE1\xF0c\xFE*3\xE1d.\xBBvR\x96\xBCT%\x8B\xEEQ\xBE\xD66d/\x940ːN\x9C\x8CEa#\xF3 \xF97\x9D\x94-\xDFJ\x9F\xB7\xF0\x81`\xABÉ\x91}V\xAF\xE3\xBAU\xAC\xA9Yk\x9F۲\x99\xE5x\xBB\xF8\x9D\xF93\xD3ɓ\xD5F\xD1ٞ\xA5Ή\x93\xA8K
+\x92\xF7\xB92\x8A\xFFy\xD8\xC2\xD4J\xD4s\xC1_F\xA8n\x94\xE9\xE5}l%\xE0\x92\x80TE\xF5O%\xDD'f\xBA}\xFC\xABT9\x86\xE8\xB5o\x80\x92$V\xD1L3\xA3	n\x97\xFE\xAA\xA0\xDA\xCF+\xEC\xB5IC\xB6\x82\xFB\x9B\xCC/\x8FGϭ\xA2\x8D\xE3]\xF0\xFE\xC0%\x8F%p9ݭ\x96\xA1\x99\x80N\xE7Iz\xA38b\xB2ʍ^\xDBOkE\xEB\xB94\xFAzj:~3\xD3"\xA2\xFF%]\xE8\xAA%\xEB\x83\xFBj>܇\x82\xF8\xBF\x9B\xFD\xFD\xB9\xBD\x8F\x93\x92\xC26\xD9\xFC\xE9\xAAUѥ\x89OO\x9BYB\x88\xA5\xD2~\\xEE'\xDFs\xBC_\x86^-}j\x98\x82\xF0\xAA\xEEgs\xBAh\x82o\xDD5[T\xEF|\x95\xD3dh\xCC,@\xE1\xAEmn\xD5F4\xA3\xBDT<\xD1\xF9}OU@\xFF\xF8V\xF1`9\xC5Ȏ\xA8#\xE9\xACp\xEFq\xC2{\xF42\xDDA\xF3"\xFD\xB6\xFD\xB4\xE1"\xDFj\xEE\xF4<\x8Bd\x83\xDF\xF6x'm\x9Byj'
+*Zt\xB1\x8B\x98\xC7\xC9X,\x85\xF6\xE1D\xB7[\x83_+oLE\xE4X=\x8DZ\xA4\xE8\xBF\xD7M\xF2񔉼\x92t#\xC9Ƌp0Q\xBECr1sv_UT\xFF\xB6(\xA3\xA0\xFF\xEE\xFC\xA4@\xF36\xAD\xDBZ\xDF+F?9\x82\x9F\xE0\xE6\x88o\xA0V\xDE3'\xF0#!Km\xBA\x82\xC7\xD6\xDD\xA6ɽ\xDEb#6Nj\xF9\xEB\x96\xDFӾ\xB6\x92Ϝ*\x8C(M\xEA9\xBF\xB2\xBB!+\s\x8B~\xE1\xFA\xFE\xFF\x8E\xA9\xF2\xF1}4I\xA0䵚\xED\x99\xF6\xC6\xFC\x91\xB1p\xF8\xD0)G\xEC\xEAޅ\xEB\x91\xFA)\xE6X\x94\xECDծ|\xABp(\x90\xA2\xD4\xC5iv%.&\xB6[\x9D\x92|D\xC0\xE3\xFB\xE9"\xC1\xA1\xEBQ]\xAC8\x99Vޖ\xFE\xE8@\xB0\xFD\x8A\x9A\xBF\xADMk0\xC6\xDB0\xE4x@\x9D\xFA\xF1\xEB8\x84\xDFO	\x9C\x83\x8AE\x96\xB4ԁ\xAC\xF9+CMvQ\x8BTkH\x856®\xC1\x9B\xD9$:\x91\xCDw~,\xA7l+\x90*?1g\xA3&\xD8\xD9\xCE\xCBӡ\xADe&b\xDChoU\xBF\xD4m\xC3@\xF9\xA0\xD4^\xA8\x9D\x82\x98\xDAJ\xDE+\x9C.?\xEA%Q\xF6\xBC\xE6+\x9D\xB6\xEA&\xBE\xF4q\x88\xC4¦\x851\x89\xB9\x85F\xC0\x97O\xA5\xC0\x98\xF5\xF9\x96\xA0͜r\x96φ\x91\xD3j\x85Ze=?\xC
 6\x95#8\x92\xB6\xC4s.p{\xBA\xBCO\x99\xDF
+:&wăŅU\xE1\x96\xDB\xB4+\xDA\xC5\xC2\x86\xFB{\x8D\xE86\x8E\x9C}\xFA\xC0\xFB\xD0V\\xAC\xAE\x9DY\x9F8>߻3\xCA~\xEF\xD9^\xAF\xE0\xFD7v\xD7\xE36U!‚\xE4\x809\xD8`\xFB\xE2)\xFEʊhX.`6\xB0\xB7\x89\xC3ȕe\xF1\xB2\xF6\xDC\xEA\xFF`\xE3\xB72\xBC\x94#3/\xDFB\xF2\xA7\xF1\xF8w\xA6Cq̀\xFFy\xD7\xD7ć\xA7\xD6\xE2\xD3\xC6曞4\xBC\xF4m\x8B\xA3/\xE2\xA5%\xED\xBA\xF2\xA2\x87NB\xEC\xF1\xE7\x8A?\xAF\xA5'"!\xE4\x88\xB2\x90i\x87\xB6;\xE9\x98ȴ \x9E\x80\xA5\xD7x8e\xB8t\xA0\x96W\xBE\x999U\xE3|\xB9\xB3\x9D\xAA\xF8b<\xFAT\xDB\.ͤV\xE8\xC7F^\xFA\xA9\xAB.Ja+\xF5\xC5\xE2\x9E罬\xA2\xDF\xC5;A\x91*\xD6@\xE3!LE\xC9\xE06\xF8\xF4\x98\xDAn9\xF0\xD5\xF7k\x82{\xE4 T\xAB\xB6K4\xD0\x86\xBA\xF5\xCA\xD2[\xDC\xF1f\xA8Ke\xF1\\xF2穈o\xA2k\xA9xW\xA0"\xD2:\xA3\xCD^\x9B\xAA
+p\xE3`\x9EV\xED\xA7h9\x80#\xAFBn\xEB@uZ\xD6\xD1\xEA\xD2B{UW\xFD\xAAR\xB3)\xD8\xC9"\xAFP\xAB\x91\x88\x9A\xF4\xB4Vjhhۨ\x88
+ƶ\xFD@Y+2\x98\xE1\xE1՘)\xE4d\x84M\x99L\xF0\xE1\xA7^H%\xC3++\xDD\xA0\xDB\xB9\xE2\xF48\xFC׽\xEF\xA7\xD7OE\xEF#(\x83\xF56Z)\x84W\xBC1j\xFD\xD8E\x8A}\xA3\x86/'C\x8E|~"A\&\x9B\xE3\xA0	\xF7\xBC\xBC\xF7\xF1ncOT\xC9/\xB6s^n\x92\xA7\xAB*H\xC7*\xFE\xA7\xD3e\xAF\xD1µ\xBD\xED\xBF\xD7\xF2\xFE\xA7\xC1\xB8~{?6ə4rDͪ\xBE\xA1\x869P\x99S5n]\xC6\xDD\xEF\xE4R\xBA'\xBAzO|z)B\xF2\xCB\xE6Mg(\xF0\xD6qWY\xD1\xF5\xA6ZX@`2L\xDDR\xF2\xCF\xEC:\xA5\xFB\x87\xD4	Y$\xE6\xCE\xE3
+\xA4\xDC\xDDeD\x90Yг4\x80\x95\xB5/\x97\xAE ."\xC4P!\xB1O0\x98z3\x91\xB3\xFB5\xA6\xFFҋ$\xE7\x84{^\x8B\xE2\xED\xFE\x90\x9E\x8A\xAB\xE1>\x807\xB2\xF0#y\xA1̅	\x98 \xA7~K\xD6К\xEDȮ\xBD\xE0q\x9F\xA2m\xB9\xBF\xCDsީG]\xB5Y8rS(l\xF9\xAB\xDB'Q\xEE{	\x98G\x96Y\x9A*zSvl24d\xCA\xFBWr\xFB\x88\xF1^\xC4A^]\xB2b6l\xD4*\xA4P|\x85\x8B\xAEc\x92O\xE5\xCA\xF6<\xE4\xEC%\xDCK\xCEJ\xE5iU\xD262\xBEx\xF51ɱ\xD8b\x9D}M,\xC4\xF5\xAAD\xA8\x9A\xC1\xD7!\xBC\xEBEQ\x9D\x8B\xC4&\xFE!zMc\xCB\xF5\xFB\xE6\xFFw\xD8\xD0++\xB5t Y\xAA\x93\xD2A\xD7\x9C\x85l\xB6\xC5\xF1\xE1\xB6\xFF11\x85\x99\xCA+.\xD7a\x91\xAF\xCAz\xF99\xA7;\xD2\xFA\xD8[\xFEK\xB0\xFB+B\xAEC\xB5\xE2MZgw\x9El\x87{\x84\xF0\xF5\xCBB\x9A\xEB8\xB5ﮧ)q>Wvք+\xCB0\x91ϱ\xE0\x9E$z\xEF{\x8Cg\xD7R\xAA\x96\xB6%M#\xCCl\x81\xB9?"~BF\x841\xB3\x82\xFA\xF8\xC0\x8F\xD0^\xBE\wL\xBA
+\xB3>*Ÿ^\xBB\xAAdH\x86\xE2±mj9\xE3oc\xC7⇍y\xD5\xE4Rc죠\xFE_\xD5\xD80\xB3	;\xE8\xD0ցS4T\xA9—\xC6\xC2f\x9Dy5h@+\xD7Q\xC1_\xA3\x96\xD3\xE6\x93\xC9\\xF0\xF2ڏt\x9E\xA0a	W\xEC\xC36ٸf\x88^e\xDD\xD1_\xA2X\xCAa\xC4?N\xC2-\xF1\x90\xE0(Ju}\xAB\xC9\x80|\xFA\xC7\xC2 7\xD0\xD9\xFD\xF2{(7+\xDD\xC4Ds\x84>\xFB\x837\xEE趉d[mr\xF0)rڲ[+GGǡ\x87\xC8K[\xF0~\xF1\xEF\xDEv\xEBSD\xC7@\x83\x88V)S\/\xE8\xFE"\xC0C;a\xFD\xBDs\xEA\xEDgg^{-\x83-S\xFF\xFAWg\xE8Q/\xBD6,ЁQb {\xC3\xE9\xBCC7\x91\xCAhE=9+Ψ"a\xB8]\x8BZlx\x9Ard6ѱ'\x85-3mX\xE4\xCC\xE5`[\xD3m\xD4C\xF7\xAAxO\x9C7}7؄\xC6қD;~\x8B\xFA-\x87\xB9\xF2l\xAB\xCD\xE8\xA6
+\xA1\xBBib\xAD\x8C\x8A\xF5T\xA5<\x9Ew\x90\xB18w|"f\xD1\xBF͉\xDF%|a-h\x9A_ט\xDC\xE9\xD1k\xF0\xF6\x88>\xB5\xBC\x96k\x92v\xBC\x83\xBBb\xD5\\xA67t\x9B\xE3\xBFE\x8F\x81\xABwc\xA1\xAC\xDD35\xBB\xCFyq\xA4\xEC\1ϥf\x92\xAD[~\xF0ݑ
+\xD1~\xFA\xDB\xFFe\xCC|~\xA0{\xAC]\xA0P<54^\xC0%\xC6\\xC4n\xBE\xC4{+\x9Er\x82A\xD7\xC2S\xCBF\xDE\xDCv\xB5\x97tM\x9FɥTxM\xD74U\xF8)\xFB\x87\xA9T\xE1D)\xC7\xED\xD1x\xA7\xDAW\xF2\xDC~M۩\xE5>~\xF8\xCAƐ/.\xAD=\x81\xD3֕Ͳm\xF0~.9\x81k7G\xFA}[\x97H\x8DN(/\xEAM\xE67.d0\xE8nj@\x8C\x9E\xDF\\x88C\xCC?V+yK\xFC\xEB $m\x94p\xB6\x90'j\xEC\xB6ШN\x89ת\xB7`\xE4А\xA7N\x8A\xF5\xA4\xF5٩]jԆO\xB0\x84\xF2s\x80\xD9t\x91\xEBnn+\xBDh:\x98`\xF50k\xEA\xF8]\x80u\xBCu\xFE@Q\xF3/\xA0\xC6_9\xD3\xF3\x95*1\xA6\xC9\xE1i\xD3Z\x90\xC3\xDEMä5\xF2\x8A\xE6\xFBV݈\xCB\xFD\xB2\xCEWT\xE7	IJ\x88V\x85mp\xFD'\x80\x88\xCFڱ-\x81\xB6\xA2\xBAe\x98T\xBF<+\xB5p\x9F+lU kt\x8F\xBCnO?S*@\x93$F\xAB\xB8\xFB\xFE"\xD4].i>X\x81xb\x94\xF5ǜ\xF9\x93\xDF\xD1$\xDD\xC4x'\x85\x957\xBD\xFD\xB0\x8F\xB0,\xE1.\xF4\xBC$\x9B\x8D*چ?\xBB2\xA5\xBA\xC2+\xA1\xD4\xE6h'\xA1\xE7\xFF1\xDDʚ+\xD1j$\xCC\xDA\xCFܹ$Jt\xFE\xF5t\xE5t\xCC\xF7Z{\x9D\xC7F9\x9F.\xB3\x89\xB5\xF2\x86\xD8 \xE5'\
 x96P:\xD5v\x94\xFD;9\x8A\xBD`u\xEC\xBB\xEF\xB1\xDE`v\xDAfo\x8D+\x85f\xD0K\x86\xF5|\xA3\xC9̟ob`:\x89\x89+\xC3ѭ\xB0\xF1-\xE3\xDDN+万ڻ\xF1W\xBF\xC7\x8B\x8B:k\xC29\xCC\xD4,\xD1C\xBA`\^\x9C\xAEF^+⯠<R\x99<\x993\x8F?k\x9C\xA0\xBBC\x9B~\xF5S\xD7\xF1\xBC-\xE90:%H\xE2\xF8˟#\xED/u\xAB_񉱻MC3\xD1}\x82\xDD\xE1D\xDCl\xBAע\xEA/\x9D-\x88+K\xF91w\xC8\xF4U	b\xD7b5\xD0v\xC7T\x81DZ锱Q\xA9	\xAB\xDAa^\xEEXov\xA1M\xC96\xB5\x9A͚Tmv
+\x8B\xE6\x97\xA7O\xAD
+\xD7\xFD
+j[\xF3Ȫ\xF4\xFBB\xE5\xC0T\xB5MEv\x8F\xAA+\x86\<\xC6,\xB5L~Fk\xC5\xFD\xB617\xE2\xE5x4\xFFɔ\xF0\xF6{/\xCEh\x84\x81 \xBF\xAD\xAEk\xFA\xB5D\xB8&E\xACPi+\x95\xB5\x8Cl\xDBB\xF7o#&Ix3\xD63\x97l\xE4i\xB5$s\x919"\xB8AP\xBC\x88\xA9>\xBF\xBC\xBC\xAAE\xAC\xABO \xEC\xA8'M0ʼx|[\xB7	\xC6\xCC\xEF\xA0\xA7\xBC\xEA\x99\xCC_\xA6\xC0a)\xBD\xED\xA3Ps\xFC\xC2\xF3\xB4\xE0=\xE0=\xC5H0\xA6bn\x94K\x84T.\xB4\xEA,\xD6X+@5WC\xEAy\xA2\x9E\xEB\xE5\xCC\xE3\xD4\x9D\x8Aͯ\xE4&\x9D\xA1\xC5\xC0l*֝\xFD!\xAF\xC2\xC4T\xEB$\xA7\xFAH\xA7\xA7\xFE\xCAOoo\xF9{ԯ\x90\x9C\xE3\xD5]c~>C=qoD¿\xC3\xF7p\x8F\x83\xFFE\xB5\x823\xBA\xE1+T\xFEG+\x92\x83p\xB5}\xDDb\xB5\xD9\xEFQc˸b\xBFUlp/\xB0A\xEF\xA7+\xA0\x81\x8Aa\xB0>-^:_\x98i\x88\xC8U\xC3ڔu~J\xBB4h\xDAs\xA5+\xDAl$\xC4P\x8C\xFA\xFA\x9A	\xF0l\xDB\xCDV<?\x96Ki1ǂN!:^\xD4\x85\xA9%y\x82\xFA\xA7*J\x84\xD8\xDF\xB0\xA7\xEC\xA7-\xD2\xD7[\x8D-"k\x95y\xB8\x80\x80B"U5\xBD\xD6a\xEE\x856\xD3Ҙ
 \x9E&1u\x85\x90ӊ	%#̾\x93<\xCB
+m\xE4l\x9C\xA8\xAB5&\xD1F\x9E	\xABb\xDDe>\xF2\xD3g\x9E%E*\xFC\x91WfR\x91\xF7\x8CFh[\xAD\xB7pw\x93\x8D]i\xB7x^n\xB7\x8C\x81\xE77\xEB|iy"{\xF7\xB6{\xFC\xD0I\x89Nٓ\xC5\xDBr\xB0_\x{183E43}в\xF3\xA1\xBD\xFF\x90\xFFy\xAB\xB9\x90\xB5\xD5\xAE\x90m:ݚ\xB6\x9EHN\xC2\xD6m\xB1\xCA\xFE[\xB7\x83W汛\x{DC02}\xBE@!\x8DP&1\xC1LM\xF1g\xD8Q\x97\xAD\xDD
+\x9Dt\x85-\xE2A\xD5ЕQ\xFEŰA\x99\x96\xA0\xD8l5奩;!q\xAB_\xF1^(I\xC6#kp\xA1\xBBU\xEC\xBC\xC1K\xF8\xD5q\xF9kX\xA3x\xF8\xEC\xD0fY\xAD\xB8\x9C\xB4iX5\x8B:\xE8\xD7T\xDCrN\xED԰.^­k\xC4[W\xBAA\xC1=\x9Ds.M>xa9j\xF3\xBB\xBBz}k>\xF3@Jɏ\
+\xA1=-\x9B\xBE\x95\x90$}\xB3\x9D\xB68\x8B\x9D\x9C\xD1	 bm\x88\x930P\xC9ӑ\xB0[\xEEF\xD6\xD9\xCC\xD1H\xE6G\xC9}\xAFi\x98\xB7\xE6lB\xFC\xAD\x8F\xE2\xB0>\xBDG	\xCBM\x94\xDC#\xFEg|r\xD6c\xC9\xCA%\xC6\\xA9\xF7ʍ5\xDC\xFA:\x9F=\x9AϚ\xDEki\xCAb4	\xD3\x86\xB4\xF8N\xA1m\xF7\xDFL'?\xBB^.J\xD9ZyVl\xF1\xFCaܑלFj\xF0\xE8	\xCE~\xAC\xB6l"Bv\xE4\^8L8\x96U\xCB+\xD1g|OM\x86\xDE\xEEB\x99\xF5!\xB6d<\xD3KW\xBE\x8D\xE2א\xBB/\xD9X\xE7«3\xF4I\xAF\xE3뤁\x94g\o\xBD\xB5\xE3\xBD]T\xF3\x8A\xFBO\xF0+Y\xD0/ܟ
+m-)e\x9E\xF2h\xA7\xB9W\x9BE\xD7\xC6c\x98\xDF\xD2\xC6\xF0Jb\x90Qe\xDD\xFF\xC0\x9Fvo\x9D\x99\xAAvs\x9AX\x88\xE0<\xF3(]y\x84\xBDXi\xC5ʤ\xF4cHk\x9D
+endstream
+endobj
+14 0 obj
+5888
+endobj
+15 0 obj
+(J\x90A|\x84\xF1D\x87ݲmԊ\xC6w+%\035=榋\xCB\012\017o\xAB\xC6CP\xCF)
+endobj
+16 0 obj
+(J\x90A|\x84\xF1D\x87ݲmԊ\xC6w+\005\x83\xB1&\xE2\xFF?+\014\xB9\xC3\xF8"j\xCE\xE5\031+\xFFKax\026\023+\xF2\xF7߀\xAD\x90\xE6\xB8\001\xAD\xD0\xFF\xB2Vj9\xD8Z\031\x89\x85\xA4\021)
+endobj
+17 0 obj
+(J\x90A|\x84\xF1D\x87ݲmԊ\xC6w+\xB6R;s\x811\xEBp}~\xB2f\xB06\xC0)
+endobj
+18 0 obj
+(J\x90A|\x84\xF1D\x87ݲmԊ\xC6w+\015Pc\x8B蕍\x84\x8D܂ZY\xB7\x86\x8BP\003\x9A\x9AĤ\xB0\xCD\014\xFD2\xE5t>U )
+endobj
+19 0 obj
+(J\x90A|\x84\xF1D\x87ݲmԊ\xC6w+\022\030\000c\x90\xB6\x90d\x9C\xAF\015\xA1\xBE\xB59\xDE)
+endobj
+20 0 obj
+[ ]
+endobj
+1 0 obj
+<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate
+18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>
+endobj
+21 0 obj
+<< /Filter /Standard /V 4 /R 4 /Length 128 /CF << /StdCF << /AuthEvent /DocOpen
+/CFM /AESV2 /Length 16 >> >> /StmF /StdCF /StrF /StdCF /O <badad1e86442699427116d3e5d5271bc80a27814fc5e80f815efeef839354c5f>
+/U <18629a8d723f077fb9874924aa34de8700000000000000000000000000000000> /P -4
+>>
+endobj
+xref
+0 22
+0000000000 65535 f 
+0000010477 00000 n 
+0000000355 00000 n 
+0000003354 00000 n 
+0000000022 00000 n 
+0000000336 00000 n 
+0000000459 00000 n 
+0000003319 00000 n 
+0000003501 00000 n 
+0000000556 00000 n 
+0000003298 00000 n 
+0000003437 00000 n 
+0000003876 00000 n 
+0000004101 00000 n 
+0000010079 00000 n 
+0000010100 00000 n 
+0000010160 00000 n 
+0000010267 00000 n 
+0000010318 00000 n 
+0000010394 00000 n 
+0000010457 00000 n 
+0000010621 00000 n 
+trailer
+<< /Size 22 /Root 11 0 R /Encrypt 21 0 R /Info 1 0 R /ID [ <b75028557a4e9b11574210ac591e19a3>
+<b75028557a4e9b11574210ac591e19a3> ] >>
+startxref
+10921
+%%EOF

Added: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFView.mm (0 => 213970)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFView.mm	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFView.mm	2017-03-15 03:27:43 UTC (rev 213970)
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import <WebKit/WKFoundation.h>
+
+#if WK_API_ENABLED && TARGET_OS_IPHONE
+
+#import "TestNavigationDelegate.h"
+#import <WebKit/WKWebViewPrivate.h>
+#import <wtf/RetainPtr.h>
+
+static void runTest(NSURL *pdfURL)
+{
+    auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectZero]);
+    [webView loadRequest:[NSURLRequest requestWithURL:pdfURL]];
+    [webView _test_waitForDidFinishNavigation];
+
+    NSData *expected = [NSData dataWithContentsOfURL:pdfURL];
+    NSData *actual = [webView _dataForDisplayedPDF];
+    EXPECT_TRUE([expected isEqualToData:actual]);
+}
+
+TEST(WKPDFView, DataForDisplayedPDF)
+{
+    runTest([[NSBundle mainBundle] URLForResource:@"test" withExtension:@"pdf" subdirectory:@"TestWebKitAPI.resources"]);
+}
+
+TEST(WKPDFView, DataForDisplayedPDFEncrypted)
+{
+    runTest([[NSBundle mainBundle] URLForResource:@"encrypted" withExtension:@"pdf" subdirectory:@"TestWebKitAPI.resources"]);
+}
+
+#endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to