You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2013/08/15 03:59:26 UTC

svn commit: r1514126 - in /tika/trunk: ./ tika-parsers/src/main/java/org/apache/tika/parser/html/ tika-parsers/src/test/java/org/apache/tika/parser/html/ tika-parsers/src/test/resources/test-documents/

Author: tallison
Date: Thu Aug 15 01:59:26 2013
New Revision: 1514126

URL: http://svn.apache.org/r1514126
Log:
TIKA 1001 more flexible html meta-header encoding detector

Added:
    tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_1.html
    tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_2.html
    tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_3.html
    tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_4.html
Modified:
    tika/trunk/CHANGES.txt
    tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlEncodingDetector.java
    tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java

Modified: tika/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/tika/trunk/CHANGES.txt?rev=1514126&r1=1514125&r2=1514126&view=diff
==============================================================================
--- tika/trunk/CHANGES.txt (original)
+++ tika/trunk/CHANGES.txt Thu Aug 15 01:59:26 2013
@@ -1,6 +1,8 @@
 Release 1.5 - Current Development
+  * Made HtmlEncodingDetector more flexible in finding meta 
+    header charset (TIKA-1001).
 
-  * Added sanitized test HTML file for local file test (Tika-1139).
+  * Added sanitized test HTML file for local file test (TIKA-1139).
 
   * Fixed bug that prevented attachments within a PDF from being processed
     if the PDF itself was an attachment (TIKA-1124).

Modified: tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlEncodingDetector.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlEncodingDetector.java?rev=1514126&r1=1514125&r2=1514126&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlEncodingDetector.java (original)
+++ tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlEncodingDetector.java Thu Aug 15 01:59:26 2013
@@ -42,14 +42,25 @@ public class HtmlEncodingDetector implem
     // TIKA-357 - use bigger buffer for meta tag sniffing (was 4K)
     private static final int META_TAG_BUFFER_SIZE = 8192;
 
-    private static final Pattern HTTP_EQUIV_PATTERN = Pattern.compile(
-            "(?is)<meta\\s+http-equiv\\s*=\\s*['\\\"]\\s*"
-            + "Content-Type['\\\"]\\s+content\\s*=\\s*['\\\"]"
-            + "([^'\\\"]+)['\\\"]");
-
-    private static final Pattern META_CHARSET_PATTERN = Pattern.compile(
-            "(?is)<meta\\s+charset\\s*=\\s*['\\\"]([^'\\\"]+)['\\\"]");
-
+  
+    private static final Pattern HTTP_META_PATTERN = Pattern.compile(
+          "(?is)<\\s*meta\\s+([^<>]+)"
+          );
+    
+    //this should match both the older:
+    //<meta http-equiv="content-type" content="text/html; charset=xyz"/>
+    //and 
+    //html5 <meta charset="xyz">
+    //See http://webdesign.about.com/od/metatags/qt/meta-charset.htm
+    //for the noisiness that one might encounter in charset attrs.
+    //Chose to go with strict ([-_:\\.a-z0-9]+) to match encodings
+    //following http://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html
+    //For a more general "not" matcher, try:
+    //("(?is)charset\\s*=\\s*['\\\"]?\\s*([^<>\\s'\\\";]+)")
+    private static final Pattern FLEXIBLE_CHARSET_ATTR_PATTERN = Pattern.compile(
+          ("(?is)charset\\s*=\\s*(?:['\\\"]\\s*)?([-_:\\.a-z0-9]+)")
+          );
+    
     private static final Charset ASCII = Charset.forName("US-ASCII");
 
     public Charset detect(InputStream input, Metadata metadata)
@@ -71,32 +82,28 @@ public class HtmlEncodingDetector implem
 
         // Interpret the head as ASCII and try to spot a meta tag with
         // a possible character encoding hint
-        String charset = null;
+        
         String head = ASCII.decode(ByteBuffer.wrap(buffer, 0, n)).toString();
 
-        Matcher equiv = HTTP_EQUIV_PATTERN.matcher(head);
-        if (equiv.find()) {
-            MediaType type = MediaType.parse(equiv.group(1));
-            if (type != null) {
-                charset = type.getParameters().get("charset");
-            }
-        }
-        if (charset == null) {
-            // TIKA-892: HTML5 meta charset tag
-            Matcher meta = META_CHARSET_PATTERN.matcher(head);
-            if (meta.find()) {
-                charset = meta.group(1);
-            }
-        }
-
-        if (charset != null) {
-            try {
-                return CharsetUtils.forName(charset);
-            } catch (Exception e) {
-                // ignore
-            }
+        Matcher equiv = HTTP_META_PATTERN.matcher(head);
+        Matcher charsetMatcher = FLEXIBLE_CHARSET_ATTR_PATTERN.matcher("");
+        //iterate through meta tags
+        while (equiv.find()) {
+           String attrs = equiv.group(1);
+           charsetMatcher.reset(attrs);
+           //iterate through charset= and return the first match
+           //that is valid
+           while (charsetMatcher.find()){
+              String candCharset = charsetMatcher.group(1);
+              if (CharsetUtils.isSupported(candCharset)){
+                 try{
+                    return CharsetUtils.forName(candCharset);
+                 } catch (Exception e){
+                    //ignore
+                 }
+              }
+           }
         }
-
         return null;
     }
 

Modified: tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java?rev=1514126&r1=1514125&r2=1514126&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java (original)
+++ tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java Thu Aug 15 01:59:26 2013
@@ -809,4 +809,17 @@ public class HtmlParserTest extends Test
                 HtmlParserTest.class.getResourceAsStream("/test-documents/testUserDefinedCharset.mhtml"), new Metadata());
         assertNotNull(content);
     }
+    
+    //TIKA-1001
+    public void testNoisyMetaCharsetHeaders() throws Exception {
+       Tika tika = new Tika();
+       String hit = "\u0623\u0639\u0631\u0628";
+
+       for (int i = 1; i <=4; i++){
+          String fileName = "/test-documents/testHTMLNoisyMetaEncoding_"+i+".html";
+          String content = tika.parseToString(
+                HtmlParserTest.class.getResourceAsStream(fileName));
+          assertTrue("testing: " +fileName, content.contains(hit));
+       }
+    }
 }

Added: tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_1.html
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_1.html?rev=1514126&view=auto
==============================================================================
--- tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_1.html (added)
+++ tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_1.html Thu Aug 15 01:59:26 2013
@@ -0,0 +1,77 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-6">
+<meta name=Generator content="Microsoft Word 12 (filtered medium)">
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+	{font-family:"Cambria Math";
+	panose-1:0 0 0 0 0 0 0 0 0 0;}
+@font-face
+	{font-family:Calibri;
+	panose-1:2 15 5 2 2 2 4 3 2 4;}
+@font-face
+	{font-family:"Arabic Transparent";
+	panose-1:2 1 0 0 0 0 0 0 0 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:10.0pt;
+	margin-left:0in;
+	line-height:115%;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";}
+a:link, span.MsoHyperlink
+	{mso-style-priority:99;
+	color:blue;
+	text-decoration:underline;}
+a:visited, span.MsoHyperlinkFollowed
+	{mso-style-priority:99;
+	color:purple;
+	text-decoration:underline;}
+span.EmailStyle17
+	{mso-style-type:personal-compose;
+	font-family:"Calibri","sans-serif";
+	color:windowtext;}
+.MsoChpDefault
+	{mso-style-type:export-only;}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.0in 1.0in 1.0in;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="1026" />
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1" />
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body lang=EN-US link=blue vlink=purple>
+
+<div class=Section1>
+
+<p class=MsoNormal dir=RTL style='mso-margin-top-alt:auto;mso-margin-bottom-alt:
+auto;text-align:right;line-height:normal;direction:rtl;unicode-bidi:embed'><span
+dir=LTR style='font-size:12.0pt;color:red'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal dir=RTL style='mso-margin-top-alt:auto;mso-margin-bottom-alt:
+auto;text-align:right;line-height:normal;direction:rtl;unicode-bidi:embed'><span
+lang=AR-SA style='font-size:12.0pt;font-family:"Arabic Transparent"'>èÃÙÑÈ
+ÇäÇÊÍÇÏ ÇäÌÒÇÆÑê èâÊçÇ Ùæ &quot;ÃÓáç äçÐÇ Çäåèâá ÚêÑ ÇäåâÈèä èÇäáÑÏê èÚêÑ
+ÇäÑêÇÖê&quot;¬ èçÏÏ &quot;ÈÇÊÎÇÐ ãä ÇäÅÌÑÇÁÇÊ äÏé ÇäåæØåÇÊ ÇäåÙæêÉ ääÏáÇÙ Ùæ
+åÕÇäÍç èÇäÖÑÑ ÇäãÈêÑ ÇäæÇÌå Ùæ Ðäã&quot;.<o:p></o:p></span></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>

Added: tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_2.html
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_2.html?rev=1514126&view=auto
==============================================================================
--- tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_2.html (added)
+++ tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_2.html Thu Aug 15 01:59:26 2013
@@ -0,0 +1,77 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-6">
+<meta name=Generator content="Microsoft Word 12 (filtered medium)">
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+	{font-family:"Cambria Math";
+	panose-1:0 0 0 0 0 0 0 0 0 0;}
+@font-face
+	{font-family:Calibri;
+	panose-1:2 15 5 2 2 2 4 3 2 4;}
+@font-face
+	{font-family:"Arabic Transparent";
+	panose-1:2 1 0 0 0 0 0 0 0 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:10.0pt;
+	margin-left:0in;
+	line-height:115%;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";}
+a:link, span.MsoHyperlink
+	{mso-style-priority:99;
+	color:blue;
+	text-decoration:underline;}
+a:visited, span.MsoHyperlinkFollowed
+	{mso-style-priority:99;
+	color:purple;
+	text-decoration:underline;}
+span.EmailStyle17
+	{mso-style-type:personal-compose;
+	font-family:"Calibri","sans-serif";
+	color:windowtext;}
+.MsoChpDefault
+	{mso-style-type:export-only;}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.0in 1.0in 1.0in;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="1026" />
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1" />
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body lang=EN-US link=blue vlink=purple>
+
+<div class=Section1>
+
+<p class=MsoNormal dir=RTL style='mso-margin-top-alt:auto;mso-margin-bottom-alt:
+auto;text-align:right;line-height:normal;direction:rtl;unicode-bidi:embed'><span
+dir=LTR style='font-size:12.0pt;color:red'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal dir=RTL style='mso-margin-top-alt:auto;mso-margin-bottom-alt:
+auto;text-align:right;line-height:normal;direction:rtl;unicode-bidi:embed'><span
+lang=AR-SA style='font-size:12.0pt;font-family:"Arabic Transparent"'>èÃÙÑÈ
+ÇäÇÊÍÇÏ ÇäÌÒÇÆÑê èâÊçÇ Ùæ &quot;ÃÓáç äçÐÇ Çäåèâá ÚêÑ ÇäåâÈèä èÇäáÑÏê èÚêÑ
+ÇäÑêÇÖê&quot;¬ èçÏÏ &quot;ÈÇÊÎÇÐ ãä ÇäÅÌÑÇÁÇÊ äÏé ÇäåæØåÇÊ ÇäåÙæêÉ ääÏáÇÙ Ùæ
+åÕÇäÍç èÇäÖÑÑ ÇäãÈêÑ ÇäæÇÌå Ùæ Ðäã&quot;.<o:p></o:p></span></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>

Added: tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_3.html
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_3.html?rev=1514126&view=auto
==============================================================================
--- tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_3.html (added)
+++ tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_3.html Thu Aug 15 01:59:26 2013
@@ -0,0 +1,77 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta content=text/html; charset = iso-8859-6 http-equiv=Content-Type>
+<meta name=Generator content="Microsoft Word 12 (filtered medium)">
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+	{font-family:"Cambria Math";
+	panose-1:0 0 0 0 0 0 0 0 0 0;}
+@font-face
+	{font-family:Calibri;
+	panose-1:2 15 5 2 2 2 4 3 2 4;}
+@font-face
+	{font-family:"Arabic Transparent";
+	panose-1:2 1 0 0 0 0 0 0 0 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:10.0pt;
+	margin-left:0in;
+	line-height:115%;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";}
+a:link, span.MsoHyperlink
+	{mso-style-priority:99;
+	color:blue;
+	text-decoration:underline;}
+a:visited, span.MsoHyperlinkFollowed
+	{mso-style-priority:99;
+	color:purple;
+	text-decoration:underline;}
+span.EmailStyle17
+	{mso-style-type:personal-compose;
+	font-family:"Calibri","sans-serif";
+	color:windowtext;}
+.MsoChpDefault
+	{mso-style-type:export-only;}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.0in 1.0in 1.0in;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="1026" />
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1" />
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body lang=EN-US link=blue vlink=purple>
+
+<div class=Section1>
+
+<p class=MsoNormal dir=RTL style='mso-margin-top-alt:auto;mso-margin-bottom-alt:
+auto;text-align:right;line-height:normal;direction:rtl;unicode-bidi:embed'><span
+dir=LTR style='font-size:12.0pt;color:red'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal dir=RTL style='mso-margin-top-alt:auto;mso-margin-bottom-alt:
+auto;text-align:right;line-height:normal;direction:rtl;unicode-bidi:embed'><span
+lang=AR-SA style='font-size:12.0pt;font-family:"Arabic Transparent"'>èÃÙÑÈ
+ÇäÇÊÍÇÏ ÇäÌÒÇÆÑê èâÊçÇ Ùæ &quot;ÃÓáç äçÐÇ Çäåèâá ÚêÑ ÇäåâÈèä èÇäáÑÏê èÚêÑ
+ÇäÑêÇÖê&quot;¬ èçÏÏ &quot;ÈÇÊÎÇÐ ãä ÇäÅÌÑÇÁÇÊ äÏé ÇäåæØåÇÊ ÇäåÙæêÉ ääÏáÇÙ Ùæ
+åÕÇäÍç èÇäÖÑÑ ÇäãÈêÑ ÇäæÇÌå Ùæ Ðäã&quot;.<o:p></o:p></span></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>

Added: tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_4.html
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_4.html?rev=1514126&view=auto
==============================================================================
--- tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_4.html (added)
+++ tika/trunk/tika-parsers/src/test/resources/test-documents/testHTMLNoisyMetaEncoding_4.html Thu Aug 15 01:59:26 2013
@@ -0,0 +1,77 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta content=text/html; charset = iso-8859-6 http-equiv=Content-Type>
+<meta name=Generator content="Microsoft Word 12 (filtered medium)">
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+	{font-family:"Cambria Math";
+	panose-1:0 0 0 0 0 0 0 0 0 0;}
+@font-face
+	{font-family:Calibri;
+	panose-1:2 15 5 2 2 2 4 3 2 4;}
+@font-face
+	{font-family:"Arabic Transparent";
+	panose-1:2 1 0 0 0 0 0 0 0 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:10.0pt;
+	margin-left:0in;
+	line-height:115%;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";}
+a:link, span.MsoHyperlink
+	{mso-style-priority:99;
+	color:blue;
+	text-decoration:underline;}
+a:visited, span.MsoHyperlinkFollowed
+	{mso-style-priority:99;
+	color:purple;
+	text-decoration:underline;}
+span.EmailStyle17
+	{mso-style-type:personal-compose;
+	font-family:"Calibri","sans-serif";
+	color:windowtext;}
+.MsoChpDefault
+	{mso-style-type:export-only;}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.0in 1.0in 1.0in;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="1026" />
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1" />
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body lang=EN-US link=blue vlink=purple>
+
+<div class=Section1>
+
+<p class=MsoNormal dir=RTL style='mso-margin-top-alt:auto;mso-margin-bottom-alt:
+auto;text-align:right;line-height:normal;direction:rtl;unicode-bidi:embed'><span
+dir=LTR style='font-size:12.0pt;color:red'><o:p>&nbsp;</o:p></span></p>
+
+<p class=MsoNormal dir=RTL style='mso-margin-top-alt:auto;mso-margin-bottom-alt:
+auto;text-align:right;line-height:normal;direction:rtl;unicode-bidi:embed'><span
+lang=AR-SA style='font-size:12.0pt;font-family:"Arabic Transparent"'>èÃÙÑÈ
+ÇäÇÊÍÇÏ ÇäÌÒÇÆÑê èâÊçÇ Ùæ &quot;ÃÓáç äçÐÇ Çäåèâá ÚêÑ ÇäåâÈèä èÇäáÑÏê èÚêÑ
+ÇäÑêÇÖê&quot;¬ èçÏÏ &quot;ÈÇÊÎÇÐ ãä ÇäÅÌÑÇÁÇÊ äÏé ÇäåæØåÇÊ ÇäåÙæêÉ ääÏáÇÙ Ùæ
+åÕÇäÍç èÇäÖÑÑ ÇäãÈêÑ ÇäæÇÌå Ùæ Ðäã&quot;.<o:p></o:p></span></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>