new parameter -s textonly
[swftools.git] / wx / viewers / technoargia.py
1 #!/usr/bin/env python
2 # -*- coding: UTF-8 -*-
3 #
4 # gpdf2swf.py
5 # graphical user interface for pdf2swf
6 #
7 # Part of the swftools package.
8
9 # Copyright (c) 2008,2009 Matthias Kramm <kramm@quiss.org> 
10 #
11 # This program is free software; you can redistribute it and/or modify
12 # it under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 2 of the License, or
14 # (at your option) any later version.
15 #
16 # This program is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 # GNU General Public License for more details.
20 #
21 # You should have received a copy of the GNU General Public License
22 # along with this program; if not, write to the Free Software
23 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
24
25 from gui.fields import Choose, ChooseAndInt, Hidden
26
27 order = 1
28 type = "custom"
29 name = u"technoargia Viewer"
30 desc = (u"Simple viewer with home link from Laurent Lalanne"
31         u" (http://technoargia.free.fr/swftools/examples/viewer_home/viewer_home.html)")
32
33 swf_options = [
34     Hidden("flashversion", 6),
35 ]
36
37 viewer_options = [
38     Choose("html", u"Save HTML:",
39            (u"no", False, u"yes", True, ), True),
40     ChooseAndInt('width', 'Width:',
41                   ('same as PDF', -2, 'fullscreen', -1, 'custom', 0), 1, 2, 600),
42     ChooseAndInt('height', 'Height:',
43                   ('same as PDF', -2, 'fullscreen', -1, 'custom', 0), 1, 2, 800),
44     Choose('zoomtype', 'Initial zoom level:',
45             ('Original resolution', 1,
46              'Show all', 2,
47              'Maximum width/height', 3), 2),
48 ]
49
50
51 html_template = """<html>
52 <body style="padding: 0px; margin: 0px">
53 <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
54         width="%(width)s"
55         height="%(height)s"
56         codebase="http://active.macromedia.com/flash5/cabs/swflash.cab#version=%(version)d,0,0,0">
57         <param name="MOVIE" value="%(swffilename)s">
58         <param name="PLAY" value="true">
59         <param name="LOOP" value="true">
60         <param name="QUALITY" value="high">
61         <param name="FLASHVARS" value="%(flashvars)s">
62           <embed src="%(swffilename)s" width="%(width)s" height="%(height)s"
63                  play="true" ALIGN="" loop="true" quality="high"
64                  type="application/x-shockwave-flash"
65                  flashvars="%(flashvars)s"
66                  pluginspage="http://www.macromedia.com/go/getflashplayer">
67           </embed>
68 </object>
69 </body>
70 </html>
71 """
72
73 from gui.plugin import Plugin
74 import os, sys
75
76 class Technoargia(Plugin):
77     def __init__(self, swf, filename):
78         self.__swf = swf
79         self.__filename = filename
80
81         for opt in swf_options:
82             swf.setparameter(opt.name, str(opt.value))
83             setattr(self, "_%s" % opt.name, opt.value)
84
85         for opt in viewer_options:
86             setattr(self, "_%s" % opt.name, opt.value)
87
88     def after_save(self, page):
89         basedir = GPDF2SWF_BASEDIR
90         viewerfilename = os.path.join(basedir,
91                                       "viewers",
92                                       "technoargia.swf")
93
94         self.swfcombine(
95                u"%s" % viewerfilename,
96                u"viewport=%s" % self.__filename,
97                u"-o", u"%s" % self.__filename,
98         )
99
100         if not self._html:
101             return
102
103         if self._width == -1:
104             width = "100%"
105         elif self._width == -2:
106             width = page.width+40
107         else:
108             width = self._width
109
110         if self._height == -1:
111             height = "100%"
112         elif self._height == -2:
113             height = page.height+70
114         else:
115             height = self._height
116
117         template_vars = {
118                          'width': width,
119                          'height': height,
120                          'version': self._flashversion,
121                          'flashvars': "zoomtype=%s" % self._zoomtype,
122                          'swffilename': os.path.basename(self.__filename),
123                         }
124
125         htmlfilename = self._swap_extension(self.__filename, "html")
126         f = open(htmlfilename, "wb")
127         f.write(html_template % template_vars)
128         f.close()
129
130
131 def init(swf, filename):
132     return Technoargia(swf, filename)
133
134
135 from lib.embeddedimage import PyEmbeddedImage
136
137 preview = PyEmbeddedImage(
138     "iVBORw0KGgoAAAANSUhEUgAAAGYAAABmCAYAAAA53+RiAAAABHNCSVQICAgIfAhkiAAAIABJ"
139     "REFUeJztfXl4FUXW/nv6XiABFGWN7IGwhG1ARHlQNhlBNgkIPIAjiw6bKMig4oZ+IOgnOCCL"
140     "gowyMOqgDojIjOACyBpERoiKGLYQAyGGQHaSu9X5/XG76lbX7RucVfk9Xz/PTXfXcuq8p06d"
141     "c6q6ukPMzKv5JLKoDBYDIWIEmQFC5GD7TFe4Jq28Xt/tYO36SnTltVs9sz2Gkx+Tl18YFgLg"
142     "AcFDBAZQiytjMiWBXuXjfA5lTCB4mXAraqM1roUI1yKwAZE08mz/Za1pUwjkKhadyTAFWTt8"
143     "ZpUHI5cdYtCBOrvOLPULxSLAyEYZ9iEPBQjAIsL1qET0NH/NALgZqmECmrlrWOQ+0rB5xNI4"
144     "Z2p0nYq1OlLvSiPBfUy5txMRFbvQ+dmwfIhz+AIX4QGR12KgKnnDnWI3+8e3vsfpsyEMvP16"
145     "6npzfd6+4wxZBO7QrhZq1bkGzExEpDdNDAYRcThBqotDYIox5gguApFdPgKJAGZmBw1S7TAY"
146     "ICJFR/LCzND4MtMcNGR9IiKtzM+K5S40wLdUCB9CsAIQSEEDSCYAICdPoG7rtvg6LYcfnX8M"
147     "3+Y34e8Km+J//1iADe9/jzCW8CHxSyAuB+tnF2HqddlOUrTsS5kUqw3VAczsEJazCEcIaU3Y"
148     "7f/DWHQc/y4s/ZCAIDMsQUBVeMON2L1qWYDXA/z9WIhad0lGfBUir4fRqn0jZPqa4Q/rjtua"
149     "BtLadaiqmc7MBABFBWWmtps0HHSUthttxBA+iovKABFyK0M6LSLS+TDbrRCLma838K9iqYs4"
150     "hIhhAZGRIgTb4HzweIAuv+7CoQADDCaE8V5zTWWU12iJFW+chGVF+NAHkAStN0xEWL4yDU8t"
151     "/gGbNp/Qy+jSc0jS0GqVH8tcnc8uxIx5GXho7mn8/e/ZDhOn1Y0auaYGV4TFFKQ8/p1YAMDS"
152     "ohAQC3rmhSO4oV1HggCEAHHYbhLLyAVAFS/IUzcJ85ceJ8siCMFkqyMBIDk67GsQERatOAZR"
153     "pz3d3Ls1jmawKmeXJdvMyJ4mTSBk/KDT18/7v/gRt97Rlm68tSU2fxFPXx46r4aJwZvuI91o"
154     "umIx+8KNrhu9K2Gx88lOpXDH2B1VXuLD5McOc4NfdUQlLzlMo90860rlIUadpJaYv/Q4LIvY"
155     "Hm2s/QBbOxa/dhLXNE1GfJzFAT/g9YTLEBHbTMkziCJaLWnovsEor84AEF+F4PeDgwGgceL1"
156     "/PHX1+DQ33OUo9f5isKntWe3E4XFrZxNqMJyTjfjHJ0On8SRsxcAqqESLViWzt3vuonKS8Ei"
157     "3NvSSNnaJQMLBkDEDFgE3JDcEotWHKNHH0xWWmILgomI/rA2HVUSWkkNIBbgMlSnxxZ8D0Nr"
158     "pe1AoOwyzZzUnBs2uAa2HoGI6IXfH0GBLy5cyCVADQZDaNkpnBYKMiUkVOfNqeVUt/Ylbtyk"
159     "piSj+JRRmeRZ40Wd9WjNEDhJ4Zi+DBFz5cRm+DmZZvcWqWiO7I5hgK+NFzj95XeMuOvQoFl9"
160     "DglFKyIABtkyYY+XKOeHPPhLi+G/HEQoGITl8Sj7TUT4+OOTnEeNqZYXYBEOQUMhRuOk+kxW"
161     "fVMQCNcN87Nl61E8MLEtJPjS4jK+XKUBtWpXRwrKPBMABPxhmARwKMRIbFGbF69Nx++fugYe"
162     "byVHZ0oFgmZyI3ywLlwtyTFNUGdT4HoIbk4tXNqPwuIFgFIO0KMzfwUAeHjO12iYVB8QJFsg"
163     "2Z26IC0LKLpwAQufbkmAxyFkIkJhQSm2HfKi3Y3xCAYZNm9ERAiFAA5F5gf6fCLMGVGlSpai"
164     "ycyoVNlDLEII+O2Ry/asgeX4sfHqToUZAT+j7c2tsHz1N3j4gfbKh+n8akdEzaVUtQ4zOso1"
165     "MnPJ0zud9FFqWBhb3uHa3nBGZAZMlhIIWOtfWwuJIzbNLuuJmpsAwMbNGWjfpR0CPlvoiHjD"
166     "COdSsIQY0W/EDJjxjuwMOaBJkdd6y/ZJDFz01QCLIEAOJWKHUH7aoZumCEsuMohVzxydql5E"
167     "3mQ5quk9zWyOEn2sOiKLMF1yRCZJidcg/1JARmvSBurKTLZ+kxrtFEVXRi3uGk4cWe2KnoYQ"
168     "bKFXqgz4S4uJLK8Di4HNFYuh3crf6eXlT6sHPU2yL7G4+Bk9igMIsKI6xNkYwitjJBUQrIIH"
169     "52FqQY8eTSgj7Si8laQ2RSSotEtrTnk9RU9JSbYbpSTyLjzRlTdOLJZFdPL7izSiXw2bnMOP"
170     "RMi4zLu0MtIfmPVMx+8we2b5GAGGqzn1IvahRSLaGAO5DGT3+o9NaUyrN+eiaYu6CNl+Jjx3"
171     "Iyot9Stz46zFCASBOpaexKhc2QMR9OPy5SAL92VUeD2EqlW94YmyzaMvQGh+3Y98U5c2pAvI"
172     "xdlXZIaUszbTzahM0olFz+gkJWNlypSPCV9ERwb6TDYsUUhJ6gZEYzCq8cZNavKgW85h+7HL"
173     "VK9uVQ6FGF4v4Yej6dyvWzUEhasAIATjli5JElyYNnkxdkBV5F740ZVfi4hOnb6ES6IVV6tW"
174     "ORztWIRAzvc8fmobxzxId8CShh45xeggPeSNmpiYB7mvt0XRDvdr2PVQ2DhFojK9nGJAemWA"
175     "KRKZ6TGzzjCZw9VukLre0gA5uadxLK8+1akTB8FgWJWoW7eGbsB13yIdsxJg69a1qXVrh1I4"
176     "HHGVysCu42GdEiAqOH2cH3+oleRHrrzqbZjRlyuWCDuOtTWpNI4REyEXHVrrWOzMaCy2FCwt"
177     "MUJBORUOG37Sa2vmPcZQ1YcyMyNlcDMkX5eFrDMF4XCDQ47ybtcubchlG8cEURdU7ZpVkJ9f"
178     "SgWFfpScOYrHH2oJ5ojgdZyx+K8Ii17HjOZ+SnRnYrHbcJpI+6GAHDHKJFSiIEovg1ko4UXN"
179     "sAHAKzwoKbrs2rhr59zVAg0PncPO1Gz0uLGaK3Dd4WrXunbJeYC5tMEAKLF5bdT3fs314yth"
180     "6INtWRsFDpuujxxT4G7CduucWD7q34WFZvMRfgBJ3BhhYeXklODEiUvweFRIZ3YMA6BgiNEi"
181     "6XrccMM1UcPfaJD0NInZNBdRY9++dwHDphBl+Km34SJQtfShY5GmyOi4nwULgfADleJVnHT6"
182     "GGZGQkJ1JCRUx089dA3RGGRdMDrTklG4mBW3srG00+0wTdOVTIsbDhdefhYsXt1AuRA0h5mi"
183     "h4jGOSIeE6TbodcxyivNMhg3ozBX0xNLuEZdZ6JzFP2sWHTOLMRo03CWJEeFNAvyLG/shJgT"
184     "rhigiN1n9qSVgUbXEVFVpMlXIxY9xnQ8KDOYd6Rx5CGWDjbqXgemN67RUr8raaPGSxRvhl9x"
185     "i7yuOiz68kc4XNY6x3BaSrO0oe3GoCtIeS01IpYGmhqk03WzwWYHuLQZhcVsU2IxR09FWHQ8"
186     "sej+q1giIyaSrGwfESEYDDrMhLyX+TptyZib4F9//XVH5/r9fle7rdti2U4UCi1fi2gc/Oh1"
187     "2UUShrLx9u3bkZ+fDyFEFBbTTOr+y+TnH8Fi0tWxyC6yzE6RDioxMVEyyUuWLMGGDRsqdIp6"
188     "FHPkyBHevHkzA+BXX33VwfOhQ4c4LS2NdWavEME4nKV9b3aKY65ia7d67Czs595kL+/oglu0"
189     "aBEKCgoghFB8PPDAA7rA2KYp6epOnG1aUYJ3URYV4T333HM63yZPHO4YF70UQuCaa65RhQKB"
190     "AFepUgV5eXkYO3YsLMtiy7Lw8ssv86BBg3Dw4EH5/J6//fZbdOvWDTNmzMD69etRp04dnDp1"
191     "CnPmzAEAeDwedOzYEdnZ2ZgwYQJXqlSJLctSzJ08eRJ9+/bldevWgYiwZMkSLFy4kIkIDz30"
192     "EK9fvx5PPPEEZsyYgU2bNiEtLQ0bNmzA8OHDsXLlSowePVrhGDp0KGbPng3LsjB79myeNWsW"
193     "5s+fz3Ik/+Y3v0Fubi7Xrl1bdVqnTp14zZo1PGzYMCYizJ07FytXrowaMVOnTsU999wDIsL6"
194     "9etx//3384oVK5iIeMKECRg9ejQXFhairKyMBw0ahOeffx4lJSW44YYbePHixXjssceYiDB2"
195     "7FiMGDECPp/P4fwxWxzhTC4RzCyYWQghBDOLNm3aCFtLxP3338/nz58XAHjv3r0iMzOT9+7d"
196     "y/PmzeNt27aJ7t27hwuKcJX3339f/P73vxfMLAYPHsx33XUXP/fcc7x7926RkpIimFkA4D17"
197     "9vC5c+c4GAyy3S536NCBmZlTU1PF1q1bed68eWLZsmV86NAh0bFjR54+fbpISkoSqampokuX"
198     "LiI/P18AEKtXr+Y+ffrw9OnTxXfffSduuukmcerUKTFq1CjV3rfffiv69OnDp06dEpMmTeJL"
199     "ly6JFi1acGlpqYOH5ORkZmZ+6qmn+M033xRTpkwRx48fl/LgBQsW8J49e8QPP/ygaJ86dYoH"
200     "Dx7MTzzxBGdmZoqJEyfyn/70J05KSmJmFt27d+f8/HxRUFDAAwYMEMzMkyZNEpmZmWLcuHFi"
201     "9erVgplFJpeI2XyEvaabkloRCkXWs3bt2oXrrrsORUVFmDNnDrKzs9GpUyd89NFH8Pv92L17"
202     "N4QQsOynn4FAgEKhEANAYWEhdu3ahbVr1yIYDCI+Ph4AqKSkBHPnzsW3336Ljz76CMFgEEeP"
203     "HsWwYcMAAF27dkVKSgrWrFkDIsIf//hH1KhRA0uXLsWOHTvQtWtXVK5cGUSE5557Dm3atMHQ"
204     "oUPRuXNnHDt2DJmZmWjWrBlycnIAAA0bNkTbtm0RCARw6tQp9O7dG9dffz26deumsErzKa3K"
205     "1q1bMX/+fKpXrx6npqaiRYsWAIAPP/wQTz75pBJZ586d0axZM3z44Ydo27YtvvjiC8yaNQsD"
206     "BgzAs88+CwAoKSlBXFwcioqKFP1du3YhKysLjzzyCG6//fbI7NDNlMlKzzzzDAYOHIiRI0ei"
207     "SZMmiIuLw/Dhw9GkSRPs3bsXU6ZMgccTfqycnJysnDoQDhQuX74MAFRaWgoAqFy5MtLT06la"
208     "tfDST9++fVGvXj0cP348zIhloUOHDtiyZYs0DXj88cfRp08f9OzZExMmTMA333wDALj22msB"
209     "AJcvX8bu3buRn5+PxMREHD58GDVr1sT27dvRvn17vPLKK8jMzERGRoZSuNLSUnTs2BGLFy/G"
210     "tGnTsG7dOphHYWEhAGD06NHo2bMnpk2bhmHDhikV7t+/P5555hmaOHEiACA/P1/Vfeihh1Cr"
211     "Vi3s2LEDKSkpqFOnDt544w1kZGTg5MmTYGYUFRUBAMaPH4969eph06ZNGDhwoDOWs00Z26Ys"
212     "bMvCI1r4fD4uLS1lZuZQKMQlJSX86aefilAoJEc1FxUVqSEuD5/Px/n5+SpdmricnBzZBBcW"
213     "FvKOHTs4GAyqYvLi888/V/dpaWmcm5urkxepqanMzCIrK0vnm7/44gvZjmBmvnTpkigrK1P3"
214     "kgfJf3Fxsaqr82DzyczMhw4dcpSTZQ8dOqToZmZmOnD6fD5RXFysaEg+8vPzORAI8MWLF2VZ"
215     "UV5eruhzSIhMLuHZfIRptjjCD5BaxHQsIRCpJQXH9AbOvnUs/Nn17MEXWcvjSPhp0tOjL30O"
216     "5SgnidlnWce5uhjhR85R9MhPLiE52jDmOooHdkaKrlj0dA2fKxazHY0faBD4B4QXMbUHuOEK"
217     "Rqyuh9ESsH6vbmRUhkgYCe3eEeYa5VR5mabVgd6OdnbwpwtMEyjrflLnVVc+kwep9TavqqyJ"
218     "RfpQE4smJwcWPU2TjcJC4Tc41GE+KFPrOPKMyJKGWnawFYCYmUKhEIiIduzYQb/73e+IiOid"
219     "d94hIoIQgoQQDloA8Oc//5k8Hg/t2LGDiMhRRtYhIoRCIdhtONIlnVAopJZYZMcQEc2cORPp"
220     "6enk8XhQr1496tWrlxxRjiUUALBp0qJFi4iIUFBQQD6fj4iImjVrJvlz8C+EoAsXLhAzY9++"
221     "ffT4448rGVmWRfPnz1drZ8FgUB8pZPyUrJm1zSYcYxFTB68NNUe+EAJEhJKSEgBAXFwcgsEg"
222     "AGDIkCHw+XxkWRYsy1I0JMCVK1ciFAqFIxH78Pv9YU2x6wBAQUEBLMtCKBSCx+OBZVmOTvD5"
223     "fGp+oUeF586dQ0JCAnJzczFw4EB8/vnnjmcmknfZHjNj2rRpAMIOedeuXQCA6667TpZxmLdA"
224     "IIA2bdrA7/dT7dq14fF4dLlh5syZ6j4tLQ2FhYWONjWr5r64RpGozDGspGmymXGYC3lYloXJ"
225     "kydj3Lhx+O1vf4saNWogLi4OW7duxe7du7Fz506uVasWEhMTsXHjRhARLMvCfffdxwcPHkSj"
226     "Ro3g9/tRo0YNdOzYEW3atAEA1K1bFw0aNEAoFEKfPn3QvXt31KhRA40aNeLOnTvL2TMTERo3"
227     "boy2bdti8ODBbFkWevXqhebNm/Nf/vIX+Hw+dO7cGVu2bOHx48crE7p48WIcPnwYvXv3BhHh"
228     "5ptvhs/nw/z587F582YcOHAATz75JE6dOoX4+HgMHz4cNWvWZKkEAPDggw+itLQUQ4cO5bi4"
229     "OOzduxdt2rTByJEjVceUlZWhQYMGWLFiBZYuXaqURjPZUrzOJS65P8xtgikP815GEsws8vLy"
230     "xMiRI1W9ffv2iccee0y8++67Ytu2beKDDz4Qb731lmBm0ahRI2ZmEQqFBDOLO+64Q9VLSEgQ"
231     "zCx27dolVq1aJXbv3i1KS0vF6tWrxejRo/nUqVPitttuE8wsOnTo4JgE9+3bV50//PBDXrly"
232     "JTOzuOuuuwQziwMHDoiNGzcK2XYgEBDbtm0Tb7/9toiPj+ePP/5YDBkyRDCzmDx5sjqnp6cL"
233     "Zhbt27cXmZmZ4tVXXxWpqamSDjOzaNq0qWBmceLECdGiRQvBzKJt27aitLRUjBs3TuTm5ooW"
234     "LVqIefPmOeq5yVZhEpEJpu5j9OcJ6mxcS1NCxcXF1KBBAwJAeXl55PF4KBAIkM/no0AgQAjP"
235     "YejSpUtUr1496HT8fr+iXbt2bQJAPXr0oCNHjlAgEKD09HSKj4+n48ePo1mzZlRSUkIAqFq1"
236     "aqafIAB08uRJateuHb788ksAoHPnzhEAunDhAhUVFSnbT0SUlJREjzzyCL322mtYs2YNpaSk"
237     "0KVLl+jy5csEgMrKyqiwsJAAkM/no8aNG1NOTg55ws/aydZ8hcHn89GgQYPUNTOT3++nOnXq"
238     "0PHjx+mGG26g1atXq3qmr3P9sbEZQ/cn0pHCGdqp1ZymTZvStddei8aNG/PTTz9NvXv3xk03"
239     "3cRdu3aFz+dDVlYWnnnmGbz11lu0Z88eaSYZgPJFAFCjRg3pUHnlypVUu3ZtNGrUiA8fPozU"
240     "1FQCwF26dKFAIMBJSUmUm5vLderUAQB89dVX6NSpE1auXInExETq1KkTevbsyXXr1lUYbL8G"
241     "W6jcvHlzqlGjBt977700b948fvPNNxEIBMheceDGjRtTpUqVAIClaerVqxdOnDiBLl26KJvT"
242     "okULtvnGnXfeCQC48cYbKT4+HnfffTd/8sknNGrUKHg8Hj5+/DhCoRBZliWnADKcdl9BJ1DM"
243     "CaayW/akSp+ECSFYm2RGTTCZmd977z2xYcMGZmZ9EsnMrCZfMl0Oc33iGggEHHRd2hP9+vXT"
244     "+Xa0IYRgv98vfD6fg0fZZiAQUOW0NqImxZI3lzRHeZmmmXsnMy6HJmNhI1MTzKjtS9rcQWk5"
245     "2yOGjQ1rHD3RUvWaN28On8/HAEgu3cj8qlWrhpe2I8PbnI+wjHR02kb76N+/v863Y5cMEbHX"
246     "K1//UQdb4RdH2ePxyEhN0bX5cWDRHLOaJErMWnk9klXzPVOW9rU+YpzPYiJ9QXIRUxI0zzJP"
247     "neU8Bs5D+R9pDm+88Ua1ImCEh1I4jvrsTJAdoc/oSafDzDxjxgzSes0UjupMDfw/jEUTmls5"
248     "1/SKsLA9Z9FCZ6X06o0y1t7BlGepdRpDakYvhS7ztRHimPnrobYRu+ta4fjp9DQgDtrvvfce"
249     "Hz9+HCL8Nq6Dnq7Z+rkiLDJfP5tYJB3DivzLWNz4tO9Yn8fo3asvbTg0TFcEI9+heVp9s3zU"
250     "NWyl0elJIGfPng0/QAIoLS0NQ4cOpZYtW8KyLKxatQp79uwBEakV6qKiIhQWFuLChQu4cOEC"
251     "Vq5cidzcXAghcOHCBXrjjTeQmZlJZE8yv/zyS/z1r391TKj/E1iMw1WmqpydG3P7kuY73LQF"
252     "MNaB9Gt9lGh13WiodF2rZcbevXvxxhtvYN++fXzgwAHceuutDAB33nknOnbsiDFjxmD//v14"
253     "4oknMGfOHCxatAiPPPIIrr32WgwYMACtWrVCu3btUFxcjLp163JOTg6efvpp1V7Lli3RtWtX"
254     "cz3u347FLCN9m55olHFOMF0mPlFRGkdHQc5wTaNj5LGWppepMJLp3r27GDx4MDOzuO2225iZ"
255     "Ra1atUT37t3F66+/LphZjBgxQowcOZIffPBBHjVqlPjb3/4m2rdvL3r27CnOnDkjcnJyxG9/"
256     "+1uddyGE4PLycuH3+//jWLR7U4ZRNDK5RMwWR9gxYjQfonpXt6cRhXGuvMJtaSFa+7TiKsGh"
257     "WXYBB62EhARFo6ysjAEgPj4eL774IizLwurVq5GZmYnOnTujpKQEVapUQadOnSCEwJIlS/DM"
258     "M8/gzJkzDj6A8FwqLS0Nq1ev/o9jMcpFjTpD5mFzFmtJxuhVxwM0bRSxVq9CLdM0xdQSBw1D"
259     "k7iwsFAUFhayEEL8+OOPcu4g1qxZI9555x3BzGL79u2irKyM9+7dy9nZ2YKZRU5Ojli1apU4"
260     "fPiwKCsrE7t27TI11eT9P45FF6d27xwxIrwkIx+UQe72lx2qzSkiHRn9cMvUGMfqQQytc23H"
261     "Lc/kw2VER2tbjLRfAha3dh3pDPyAUrxKJ23nz7EBuYHWhRQLbEVA3Bg3abmBknRFZJkl6rGE"
262     "zptJX85L9M42y7vx/u/A4qbo0eAil3InporBmZ22kSOUmCNzGD0qMcs6NsmZvJs/Ge3oNGWe"
263     "3A9WXFwMIuLu3bvjnnvuYcuy+LPPPuNHHnmEs7OzpY8w+VFn2c7ChQu5efPmsM2IAwsR4YUX"
264     "XuC+ffvy8uXL5bzi34ZF8mbK1CH38BwmnDebnT7GsJlmpOawi2b5GHbZYXvd2jB/0o8wM7dq"
265     "1Uows9i/f7+YP3++YGaxadMmcf/99wt7r5vD/geDwZi0ExMTK8Qil+979+4tjhw5Yvrbn4TF"
266     "LK83VpFsZV5kXxk7h5Ddo2rSRdpKqGbjo97C0jXCOPQJlRndQQhBeXl56N27NycmJtKIESMw"
267     "btw4DBkyhL///nvk5eXhzJkzNG3aND59+jRZlsVPPPEEUlJS8N577+Gee+4BANx1111IS0vD"
268     "b37zG2RlZWHNmjV49tlnMX36dKxfvx6nTp2irKws7t+/P23dulUf8Qq91+tlAFSrVi3YK8H/"
269     "EBYtX5eJGcI5ZMqaKbXfWg4fZlRm9qBxOGLvWL+fomXyCIVC4scffxT9+vUTzCzq1q0rtm7d"
270     "Kh9wsb0jVCxevFh89dVXqv4999wj7r//fsHM4uDBg6J+/fp84MABZmZx8803i3Xr1olWrVqJ"
271     "l19+WWRkZIjc3FwxZcoU1XYoFOLy8nLx4osviueff14ws2jZsqVo2bKlACAKCwt/8ohxCCi2"
272     "JYmK9KKsjIgxj3HTAH25QjpOjiw56LXN6a2blrkdJIRAy5YtgfACIJ0/fx7164e/zlS1alVV"
273     "pry8nIDwRvA+ffrg9ddfBwB06dIF586dw9tvv433338fycnJ2LhxI8aOHYvdu3ejadOmCAQC"
274     "FAgEHFgqV66MGTNm4He/+x0BoEqVKiE9PR3p6ek0bNgwN4ddIRZpSbQyZOS70mDTfZHLlzH0"
275     "aMtciJPDTjNp+iRJOdFYYaNbtMMcXuJfvnw5/vSnP/GSJUtowoQJ6N69O7xer9wVyeXl5QgG"
276     "gwwAiYmJ8iEcmjZtil69emHu3Lnw+/0YM2YMunXrhhMnTqB9+/bYv38/gPCDOHvjiGM5pUqV"
277     "KmpyWLt2bfTt2xcXL17k7du3Vxh2x4jcTKdPLnWi3lBwdIysdaUHZXZa1LKFlmbex1pica0f"
278     "CoX4/PnzPGnSJFVAfzglj9zcXC4pKYlaGjLLueUJIYTf72d75+YVsbjw/ZOw6OUrkoVGRxj5"
279     "6kFZ1LK/HCHGYqUaFEJ7wcfQDhVimvTMcszsKOf1erlWrVq69jEA+c4KMzPq1KnD1apVi1py"
280     "Zy1Sl9dmHhGhUqVKaNiwoaO8G4+hUEhuFFThMjPDfhtA8gdbeVS5ijDrbWm0IYSAECJSjyPn"
281     "qA1/8iyJceThFzEzzp07p8ppnee2QVCnB/3ezicgvLmhdu3a9PzzzzuezwPhzdr2xg6VJtux"
282     "O0Ll6bxcCYtJS2fw7NmzlJmZqbDIOhkZGXT+/HlVLicnh+y9C6T9XGWj48/OzlZp586dw5kz"
283     "ZyQvkfpkPChzUyepvZZl8csvv4wTJ07A5/Op1wGFEJg6dSosy0IwGGS5WmvvolTbVKWmBAIB"
284     "+P1+NakKBoNqs585SmfNmoWMjAwuLy9XIycYDCIYDCo7HQqFEAgEOBAIqNFs09Q1GlLrJT45"
285     "wmyTAiLCkSNHkJycLN8qUCNm7dq1sN9vwdq1a3Hy5ElMnjyZ7Q7kQCDAkrZsi5kRCATkhBN2"
286     "4MG33XYbAPCxY8fQokULHD582BxpYXlrvUq6JkvVkiMFAL3++uu4/fbbKT8/n4Dw6wp+v59W"
287     "rlwJWwNo//79RERUUFBAzExyp2ZeXh4A0LFjx+jgwYNERFRcXExFRUU4evRolGYBoMaNGyMu"
288     "Lo7OnDmjtD0rK4sKCgoIAO3YsYMuX75M2dnZdPLkSVy6dAkA6Mcff6S9e/eSEMKh9SdOnKAR"
289     "I0bA7/dTaWmp2sJ7+fJllJWVYd26dfTnP/8ZvXr1UjyEQiF6++236bPPPqOkpCSMHj0aSUlJ"
290     "iIuLU/I6ePAgSc0HgGAwSEePHsX58+fliKfMzEycPn2aZJT55ptvYu1adyc0AAAMAUlEQVTa"
291     "tXTHHXfoI44g38JU8xjhuroshBAiGAyKjz76SCxdupSZI5v0EhMTRVFRkZg5c6a4dOmSGDJk"
292     "iFi2bJkYMWKEGDt2rDh79qycmXOPHj3EJ598ImbNmiWmTp0qXnjhBbFgwQJRtWpV0b59e5Gf"
293     "n++M6ZnFokWLOCEhQYwcOVK8/fbbYvny5WL48OFCrgY0atRI3H777aJy5coiJSWFe/Xqxcws"
294     "unXrJt599121QZCZxfjx48W9994r1q5dKz744APx1FNPcUpKitizZ48YNGiQ2L9/v0hKShJj"
295     "xowRBw8eVPX+9re/iTp16oiHH35Y5Obmih49ejAzi7vvvlvk5uaKYcOGiQ8++EAkJCSIUCgk"
296     "gsGgyMvLEwDEs88+K7p16yYKCgpE//79efLkyaJatWoiLy9PJCcni1GjRol9+/ZF5j3aPMac"
297     "YLLROSq8aNGihQomZsyYwR9//DHffffdXFpaKhYsWMAPP/wwjxkzhps3b87MzH/4wx/EunXr"
298     "uGHDhvyXv/yFn3/+ee7evTuPGzdO9OzZk5mZp0yZwqWlpVxWVsahUEgPBJmZxaOPPso7d+7k"
299     "goICXrhwoejWrRszs9iwYYPYuXOnuOWWW5jtJRRm5r59+/KiRYvEsGHDRMuWLbm0tFSB3rNn"
300     "D3ft2lXcd999XFhYyI8++ii3bdtWrF69mn/9618zM/PEiRNFfn5+hAGbn65duyrGZNnhw4fz"
301     "d999J5o0acK33HILL1myhJnD26IuXLggJk6cyMzMrVu35qlTpwr5js+vfvUrZmbx0EMPyfdr"
302     "IuJ27MQkZTqUfZTDSk7q1q5di8mTJwMIb6hesGAB+vXrhxUrViA/Px/5+flo164dqlWrhvT0"
303     "dNx7773o168fjRs3Dp9//jlGjBiBUaNGoUmTJujZsyd99tlnGD9+PICw75Gv7Jkxvd/vR0JC"
304     "AoqLi5GXl0dVq1bFnj17aN26ddSxY0ekpaUBALKyskiay+TkZKpSpQrS09MlzwSAMjIykJqa"
305     "SkePHoXX68WiRYuwePFizJ8/H0OGDFHYysvLVRAifZ5tEgGEN7oDQHFxMa6//nq6ePEitmzZ"
306     "gk6dOmHZsmXweDwgIhw9ehQ7d+6E3+9HSkoKli1bhvT0dHz99dcAQIFAAHLnpjEnsk0ZO+cx"
307     "cpCEQiGRk5PDs2bN4nfeeUdpkFTrTz/9VGqIyM7OZmbmzZs381NPPcXffPMNM7N46aWXmJl5"
308     "zpw5Sgtfe+018eyzz3JxcTG///77bG/I46ysLJGVlcXyl5ubK7788kv2+/3s9/t5/fr1zMw8"
309     "bNgw8e6778qRw8wsZs6cyczMy5cvZ2bmjz76SDz55JP89ddfi7Nnz/Ljjz8uPvvsM+7fvz+/"
310     "+uqrzMy8atUqZmbxyiuvcEFBATMzT548WehvnMmjR48easRkZGQwM/Mnn3zCoVBIFBYW8tNP"
311     "P82vvPIKMzOnpKRwXl6e6NixI69YsYLLy8uZmcWWLVt44cKFLDdBTp8+nX/44QfnPEawyBTu"
312     "b5SpUeP2HIa09XVdu4X9CgQzq9cm9Ncv9Hqyrny1Qh7/8z//o15StSwLXq8Xc+bMIWFvVTLr"
313     "SB5l20IIsnlgnQ9ZXr+26zg+SyW01zj0Q6bL+qFQiDzah79DoRDsjYWqTG5uLiZNmoQPPvhA"
314     "f/1CLl5GtSVFo38WK+pVP2jhpSZQx0qpviYkV0q1e7Vcw5E5UGScVlAecERmZv2oV/10frUV"
315     "b9nYz4YlGAzyiRMnSL5aYrYTCwvBftWPIq/6OXyMwYTbQlzMQ2qyPur0swHMUU7Pcxm1MT9X"
316     "aID+WbEAgNfrRevWraPouUzIo7CAYuzEtAnoC5JqMsfs/ig5lrAr6gQTuElPu2aDD7WoavL9"
317     "S8Ai8/UXlf4ZLFHL/iYTJgC3owLNU67FMDMVtmne/5Q2pR+qiO7VgkVfkvnJjJvl3YhLLTDS"
318     "9HpRjUgAZpYbsJ/C59WOxbF32UVbXFdMNWb0tSd940KF9luaE/nT6UmnrDPuxofbCIkl3KsR"
319     "y/99evEXhEXfSvZ/n178BWGxn14ScIVPL2rUdKbdGHQFqdtPNzuqRStRdBARYlQ9swNchHzV"
320     "YomMmEiysrFulbWhb264VuGom2mRZd0iJqMNNvJiem5pu9340etejVhkF0V9elGjHeUU3Zhw"
321     "OaLexrLrQ0tjN6HFYJy1ujoNJyBECeGqw6L3hesbZSZIcu6GMQlLuvorfnpZRc/FlrMEX5Gm"
322     "u+Q7aMYyMVcbFr37o1btDEaUs5RppvPSzuqDCKZgYtyT8VP0NIfo6tCvZEquZiymKbsiSJlX"
323     "0ajV6l7JRjj8cgVOUV3HKuPiX2Lem3m/NCx6S1F7lysK+2IJIlYdqZ0GyJgmOZaQY/GjO2k3"
324     "Pq42LHpfuG5fMsJIFWebUUosW68LzI2RWBoW4zqKJ80cmWbo/xss5uqyVp7drmMyZVT+KRFP"
325     "FI0rANdD0IrCUeVU5YZBJ2u/XCzOqMzgwy2SgREuIhIiOvJdQkvXa62uHnLCSINR1gSkh5+O"
326     "w35qyOnp6eqLrUbI/IvEonP1T396EZHIRZUzfnq6qmMzElVei5DUBgXbpCgehBBkP34m+VlG"
327     "I7ICEN7dmZycTOvWrUOHDh3o7Nmzqs3/FhadruGXouhqOMNl+F/49KJbHTNkt0FEFY1uMXJs"
328     "27YNmzdvxty5c9Wz8WnTpqkPS1+4cIGWLl2qvoqxe/dujBs3Djt37lR8hUIhfPXVV3jxxRdR"
329     "vXp1VK9e/WfBYtIyrFHs+vQvfHrRTHOxxaynudlXt+P06dPYtGkTbr75Zrz00ksYMWIEBg4c"
330     "iIKCAk5NTcWoUaN4xowZ/Nhjj+HEiRN47rnn8OCDD/KYMWMUfSJCfHw8GjZsiLlz5/J1113H"
331     "tlb+17DE8jeamZN0XT+9aL4fo0yxzQgb6aSqOwG4frBAq+/YkaILyNBCLi4uxsKFC1G9enW8"
332     "+OKLKCoq4gEDBmDjxo0IBoPcoUMHxV9ubi6fOXMGq1atwvnz59UIsywLtWrV4osXL8YSxn8c"
333     "iyxjjBa9raiACxpX//SnF2W6bkt1fyDTNAFE5bv9atWqRXfeeSd16dKFXnrpJdSoUYPWrVtH"
334     "J0+epOzsbNq5cyfNmjWLDh8+TLfeeisBoE6dOlGXLl1g78anUChEfr+fbrvtNuratSsFg0E3"
335     "XP9RLC7puBJ29WNc8WOlsb4lI9Pkvb4Z0NyDzDJf1tXbMfJ48eLF/PHHH4uzZ8+q9r766is+"
336     "e/asOHPmjKIh3zBmZvHNN98I+al72XZBQYFgZhEMBoX9JvN/FYuzePTXRbT76HcwtS/8ESLz"
337     "Tv0Mvbe1YaqcqX6QM4GBqAdIOn29nrq2t8VSzZo15bCn9u3bK/J33HEHqlSpQoMHD2YAJITg"
338     "1q1bq6btC65evbrcLEi6GfpvYdFMnWpfo0laeW3TWoTeP/3pRYNRszNVXYPxqBgehs2ePn06"
339     "KleuzNpORfZ4PBIcffrpp6q+rCdfA9dtt7Zb8mfBotOT1zYvpNPSsOv0yNxUHtWjZhpFzxvU"
340     "vWF3Y5aDi+2V8ouLi3N8GZwi6FQa24+G9XY0QfxisMh7raMcWFSmMy36876I9K5DG3TCWr6u"
341     "Va6RjBqiESG4aRn0fGmKuIIoyeRPb+eXhAURS1VRxCf5YnudgEEgCwyY/3GcI4t4Dm1hZzio"
342     "55sLc1GTMZe6WpP/2ucKNXvurHQVY7EsIhQjYFZ22EfDTiue4NSWqDKGv3KjodI1LXObBEoy"
343     "phTceL6qsRQhAAsEy8uEPbgga+i1AXebLO8ddlWaBlnXiJJ0WiYzUetUFC1hZUV0PvR2TM2+"
344     "GrGAgEO4BC8TLCIgA6U4gLxwIQ4Xts0b29dMIL2P2baJEQ1ibWXaybctFefqqUaP7e8NAxEr"
345     "a9gOzf5L2uzURCKX/z15lWE5jRJ8h0IQAd7KbAEEbMJZnEEpOqMmqrAHNn2SzsjRgG0OHXeR"
346     "suahI2RHKqscdpSNdqiydISTSEr02SmICAe/UCxBYhzlQuyhC4hnL4gAyhGX+TU6jRAEBIAg"
347     "C6kW0WR1RmNF9WRcxzoqKuMGxS3PbKsintzq6uV+RiwEwEsWLA4n3UeJ+H/DuFHe8Nz9egAA"
348     "AABJRU5ErkJggg==")
349 getpreviewData = preview.GetData
350 getpreviewImage = preview.GetImage
351 getpreviewBitmap = preview.GetBitmap
352 getpreviewIcon = preview.GetIcon
353