summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2015-07-11 15:25:08 +0000
committerintrigeri <intrigeri@boum.org>2015-07-11 15:25:08 +0000
commitaeb18a4feba18ae7e2a13736104300dd2fdd6940 (patch)
tree05ffe65f5af39b21f358c3813e935042cbd0de2a
parentfdb16775a7ae4734dcdcbcf505464217ad42b17f (diff)
parentf32ee387d9e54c4d188c77a7e0eb0d57169f7902 (diff)
Merge branch 'feature/gtk3' into feature/jessie
Fix-committed: #8980
-rw-r--r--.gitignore5
-rw-r--r--AUTHORS2
-rw-r--r--MANIFEST.in9
-rw-r--r--Makefile52
-rw-r--r--data/fedora.icobin9662 -> 0 bytes
-rw-r--r--data/fedorausb.pngbin8861 -> 0 bytes
-rw-r--r--[-rwxr-xr-x]data/liveusb-creator-launcher.ui785
-rw-r--r--data/liveusb-creator-logo-small.pngbin3074 -> 0 bytes
-rw-r--r--data/liveusb-creator-logo.pngbin13439 -> 0 bytes
-rw-r--r--data/liveusb-creator-tabbed.ui506
-rwxr-xr-xdata/liveusb-creator.ui681
-rwxr-xr-xdata/liveusb-header-old.pngbin15736 -> 0 bytes
-rwxr-xr-xdata/liveusb-header.pngbin15930 -> 0 bytes
-rw-r--r--data/liveusb-header.xcfbin26650 -> 0 bytes
-rw-r--r--data/resources.qrc11
-rwxr-xr-xdata/tails-installer-launcher.ui259
-rw-r--r--fedora.ini2
-rwxr-xr-xliveusb-creator8
-rwxr-xr-xliveusb-creator-launcher13
-rw-r--r--liveusb-creator.spec214
-rw-r--r--liveusb/__init__.py8
-rw-r--r--liveusb/config.py3
-rw-r--r--liveusb/dialog.py167
-rwxr-xr-xliveusb/gui.py507
-rw-r--r--liveusb/launcher.py57
-rw-r--r--liveusb/launcher_ui.py158
-rwxr-xr-xliveusb/resources_rc.py1590
-rw-r--r--liveusb/tails_launcher_ui.py140
-rw-r--r--liveusb/utils.py10
-rw-r--r--po/POTFILES.in18
-rwxr-xr-xpyuic4_custom40
-rwxr-xr-x[-rw-r--r--]setup.py57
32 files changed, 1128 insertions, 4174 deletions
diff --git a/.gitignore b/.gitignore
index a9c1833..4633976 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,7 @@
*.pyc
+build/
+dist/
+MANIFEST
+data/liveusb-creator.ui.h
+.*.swp
po/locale/
diff --git a/AUTHORS b/AUTHORS
index 594d7f8..ed0e424 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -3,7 +3,7 @@ Developers
Luke Macken <lmacken@redhat.com> (liveusb modules, PyQt interface, etc)
Kushal Das <kushal@fedoraproject.org> (Initial PyQt interface)
Kevin Kofler <kkofler@fedoraproject.org> (KDE integration)
-Tails Developers <tails@boum.org> (Tails installer)
+Tails Developers <tails@boum.org> (adaptation to Tails)
Translators
===========
diff --git a/MANIFEST.in b/MANIFEST.in
index e5d178b..2de4f56 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -9,27 +9,20 @@ include liveusb/creator.py
include liveusb/dialog.py
include liveusb/gui.py
include liveusb/launcher.py
-include liveusb/launcher_ui.py
include liveusb/releases.py
-include liveusb/resources_rc.py
-include liveusb/tails_launcher_ui.py
include liveusb/urlgrabber/__init__.py
include liveusb/urlgrabber/byterange.py
include liveusb/urlgrabber/grabber.py
include liveusb/urlgrabber/keepalive.py
include liveusb/urlgrabber/mirror.py
include liveusb/urlgrabber/progress.py
-include data/liveusb-header.png
include data/liveusb-creator.ui
include data/liveusb-creator-launcher.ui
-include data/liveusb-creator-tabbed.ui
-include data/resources.qrc
include data/refresh.png
include data/liveusb-creator.desktop
-include data/tails-installer-launcher.ui
+include data/tails-liveusb-header.png
include data/usb-creator-gtk.svg
include liveusb-creator.console
include liveusb-creator.pam
include liveusb-creator.spec
include po/*.po
-include po/mki18n.py
diff --git a/Makefile b/Makefile
deleted file mode 100644
index afecdc1..0000000
--- a/Makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-PKGNAME=liveusb-creator
-PKGRPMFLAGS=--define "_topdir ${PWD}" --define "_specdir ${PWD}" --define "_sourcedir ${PWD}/dist" --define "_srcrpmdir ${PWD}" --define "_rpmdir ${PWD}" --define "_builddir ${PWD}"
-
-dist:
- python setup.py sdist --format=bztar
-
-srpm: dist
- @rpmbuild -bs ${PKGRPMFLAGS} ${PKGNAME}.spec
-
-rpm: dist
- cp dist/* ~/rpmbuild/SOURCES/
- cp *.spec ~/rpmbuild/SPECS/
- rpmbuild -ba ~/rpmbuild/SPECS/liveusb-creator.spec
-
-gui:
- pyrcc4 data/resources.qrc -o liveusb/resources_rc.py
- ./pyuic4_custom data/liveusb-creator.ui -o liveusb/dialog.py
- ./pyuic4_custom data/liveusb-creator-launcher.ui -o liveusb/launcher_ui.py
- ./pyuic4_custom data/tails-installer-launcher.ui -o liveusb/tails_launcher_ui.py
-
-pyflakes:
- pyflakes liveusb/*.py
-
-pylint:
- pylint liveusb/*.py
-
-pot:
- cd po; python mki18n.py -v --domain=liveusb-creator -p
- #cd po ; intltool-update --pot -g liveusb-creator
- cp po/messages.pot po/liveusb-creator.pot
-
-mo:
- cd po; for po in `ls *.po`; do cp $$po liveusb-creator_$$po; done
- cd po; python mki18n.py -v --domain=liveusb-creator -m
- rm po/liveusb-creator_*.po*
-
-clean:
- rm -f *.py{c,o} */*.py{c,o} */*/*.py{c,o}
- rm -fr po/${PKGNAME}*.po{,.new} po/locale
- rm -fr build
-
-docs:
- epydoc --name liveusb-creator -u http://liveusb-creator.fedorahosted.org -o docs --exclude urlgrabber liveusb
-
-
-everything:
- python setup.py sdist --format=bztar
- rm -f ~/rpmbuild/RPMS/noarch/liveusb-creator*.rpm
- make clean rpm
- sudo rpm -e liveusb-creator
- sudo rpm -Uvh ~/rpmbuild/RPMS/noarch/liveusb-creator*.rpm
- sudo /usr/bin/liveusb-creator -v
diff --git a/data/fedora.ico b/data/fedora.ico
deleted file mode 100644
index e9599ae..0000000
--- a/data/fedora.ico
+++ /dev/null
Binary files differ
diff --git a/data/fedorausb.png b/data/fedorausb.png
deleted file mode 100644
index fe02c84..0000000
--- a/data/fedorausb.png
+++ /dev/null
Binary files differ
diff --git a/data/liveusb-creator-launcher.ui b/data/liveusb-creator-launcher.ui
index 6501ce0..9da1767 100755..100644
--- a/data/liveusb-creator-launcher.ui
+++ b/data/liveusb-creator-launcher.ui
@@ -1,334 +1,453 @@
<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Dialog</class>
- <widget class="QDialog" name="Dialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>530</width>
- <height>363</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>512</width>
- <height>300</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>512</width>
- <height>300</height>
- </size>
- </property>
- <property name="windowTitle">
- <string>%(distribution)s Installer</string>
- </property>
- <widget class="QWidget" name="">
- <property name="geometry">
- <rect>
- <x>2</x>
- <y>9</y>
- <width>520</width>
- <height>349</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QGridLayout" name="gridLayout">
- <property name="leftMargin">
- <number>6</number>
- </property>
- <property name="rightMargin">
- <number>6</number>
- </property>
- <property name="verticalSpacing">
- <number>6</number>
- </property>
- <item row="0" column="0">
- <widget class="QPushButton" name="cloneInstallButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>200</width>
- <height>96</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>200</width>
- <height>96</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>12</pointsize>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Clone
-&amp;&amp;
-Install</string>
- </property>
- <property name="iconSize">
- <size>
- <width>64</width>
- <height>64</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="cloneInstallLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>300</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>300</width>
- <height>96</height>
- </size>
- </property>
- <property name="text">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Copy the running Tails onto a USB stick or SD card. All data on the target drive will be lost.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="margin">
- <number>6</number>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QPushButton" name="cloneUpgradeButton">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>200</width>
- <height>96</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>0</width>
- <height>96</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>12</pointsize>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Clone
-&amp;&amp;
-Upgrade</string>
- </property>
- <property name="iconSize">
- <size>
- <width>128</width>
- <height>128</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="cloneUpgradeLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>300</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>300</width>
- <height>96</height>
- </size>
- </property>
- <property name="text">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Copy the running Tails onto an already installed Tails device. Other partitions found on the stick are preserved.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="margin">
- <number>6</number>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QPushButton" name="upgradeFromIsoButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>200</width>
- <height>96</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>0</width>
- <height>96</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>12</pointsize>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Upgrade from ISO</string>
- </property>
- <property name="iconSize">
- <size>
- <width>128</width>
- <height>128</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="upgradeFromIsoLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>300</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>300</width>
- <height>96</height>
- </size>
- </property>
- <property name="text">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Upgrade an already installed Tails device from a new ISO image.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="margin">
- <number>6</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QLabel" name="helpLabel">
- <property name="text">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Need help? Read the &lt;/span&gt;&lt;a href=&quot;file:///usr/share/doc/tails/website/doc/first_steps/installation.en.html&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;documentation&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="margin">
- <number>6</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- <resources>
- <include location="resources.qrc"/>
- </resources>
- <connections/>
-</ui>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+ <requires lib="gtk+" version="3.14"/>
+ <object class="GtkBox" id="box_launcher">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="margin_left">18</property>
+ <property name="margin_right">18</property>
+ <property name="margin_top">18</property>
+ <property name="margin_bottom">18</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox" id="box_standalone">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label_intro">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_bottom">12</property>
+ <property name="label" translatable="yes">To run Tails Installer you need an ISO image which can be downloaded from the Tails website: &lt;a href="https://tails.boum.org/download/"&gt;https://tails.boum.org/download/&lt;/a&gt;</property>
+ <property name="use_markup">True</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_install">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="on_install_iso" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="box_install">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label_install_title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Install</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid_install">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label_install_tr">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Install Tails on a new removable device.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">30</property>
+ <property name="max_width_chars">30</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_install_br">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">The removable device that you install on is formatted and all data is lost.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">30</property>
+ <property name="max_width_chars">30</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_install_bl">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">•</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_install_tl">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">•</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_upgrade">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="on_upgrade_iso" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="box_upgrade">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label_upgrade_title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Upgrade</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid_upgrade">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label_upgrade_tr">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Upgrade a Tails device to the version of an ISO image.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">30</property>
+ <property name="max_width_chars">30</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_upgrade_br">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">The encrypted persistent storage of the Tails device that you upgrade is preserved.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">30</property>
+ <property name="max_width_chars">30</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_upgrade_bl">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">•</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_upgrade_tl">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">•</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_tails">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkButton" id="button_clone_install">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="on_clone_install" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="box_clone_install">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label_clone_install_title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Clone and install</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_clone_install_description">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Copy the running Tails onto a USB stick or SD card. All data on the target device will be lost.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">30</property>
+ <property name="max_width_chars">30</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_clone_upgrade">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="on_clone_upgrade" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="box_clone_upgrade">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label_clone_upgrade_title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Clone and upgrade</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_clone_upgrade_description">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Copy the running Tails onto an already installed Tails device. Other partitions found on the stick are preserved.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">30</property>
+ <property name="max_width_chars">30</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_upgrade_iso">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="on_upgrade_iso" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="box_upgrade_iso">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label_upgrade_iso_title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Upgrade from ISO</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_upgrade_iso_description">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Upgrade an already installed Tails device from a new ISO image. Other partitions found on the stick are preserved.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">30</property>
+ <property name="max_width_chars">30</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_help">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">12</property>
+ <property name="label" translatable="yes">Need help? Read the &lt;a href="file:///usr/share/doc/tails/website/doc/first_steps/installation.en.html"&gt;documentation&lt;/a&gt;</property>
+ <property name="use_markup">True</property>
+ <property name="width_chars">30</property>
+ <property name="max_width_chars">30</property>
+ <property name="lines">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <object class="GtkSizeGroup" id="sizegroup_standalone_buttons">
+ <widgets>
+ <widget name="label_install_title"/>
+ <widget name="label_upgrade_title"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup" id="sizegroup_tails_buttons">
+ <widgets>
+ <widget name="label_clone_install_title"/>
+ <widget name="label_clone_upgrade_title"/>
+ <widget name="label_upgrade_iso_title"/>
+ </widgets>
+ </object>
+</interface>
diff --git a/data/liveusb-creator-logo-small.png b/data/liveusb-creator-logo-small.png
deleted file mode 100644
index b67aa2e..0000000
--- a/data/liveusb-creator-logo-small.png
+++ /dev/null
Binary files differ
diff --git a/data/liveusb-creator-logo.png b/data/liveusb-creator-logo.png
deleted file mode 100644
index b90ac10..0000000
--- a/data/liveusb-creator-logo.png
+++ /dev/null
Binary files differ
diff --git a/data/liveusb-creator-tabbed.ui b/data/liveusb-creator-tabbed.ui
deleted file mode 100644
index 09cb1f6..0000000
--- a/data/liveusb-creator-tabbed.ui
+++ /dev/null
@@ -1,506 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Dialog</class>
- <widget class="QDialog" name="Dialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>428</width>
- <height>300</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="windowTitle">
- <string>Fedora LiveUSB Creator</string>
- </property>
- <widget class="QProgressBar" name="progressBar">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>230</y>
- <width>411</width>
- <height>23</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>10</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string>This is the progress bar that will indicate how far along in the LiveUSB creation process you are</string>
- </property>
- <property name="value">
- <number>0</number>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="textVisible">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="QLabel" name="label">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>430</width>
- <height>71</height>
- </rect>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="pixmap">
- <pixmap resource="resources.qrc">:/liveusb-header.png</pixmap>
- </property>
- </widget>
- <widget class="QTabWidget" name="tabWidget">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>80</y>
- <width>411</width>
- <height>142</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>9</pointsize>
- </font>
- </property>
- <property name="currentIndex">
- <number>3</number>
- </property>
- <widget class="QWidget" name="tab">
- <attribute name="title">
- <string>Operating System</string>
- </attribute>
- <widget class="QGroupBox" name="groupBox">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>10</y>
- <width>161</width>
- <height>71</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string>This button allows you to browse for an existing Live CD ISO that you have previously downloaded. If you do not select one, a release will be downloaded for you automatically.</string>
- </property>
- <property name="title">
- <string>Use existing Live CD</string>
- </property>
- <widget class="QPushButton" name="isoBttn">
- <property name="geometry">
- <rect>
- <x>11</x>
- <y>30</y>
- <width>141</width>
- <height>25</height>
- </rect>
- </property>
- <property name="text">
- <string>Browse</string>
- </property>
- <property name="shortcut">
- <string>Alt+B</string>
- </property>
- </widget>
- </widget>
- <widget class="QLabel" name="label_2">
- <property name="geometry">
- <rect>
- <x>180</x>
- <y>40</y>
- <width>21</width>
- <height>24</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <family>Verdana</family>
- <pointsize>9</pointsize>
- <weight>75</weight>
- <bold>true</bold>
- <kerning>false</kerning>
- </font>
- </property>
- <property name="layoutDirection">
- <enum>Qt::RightToLeft</enum>
- </property>
- <property name="text">
- <string>or</string>
- </property>
- </widget>
- <widget class="QGroupBox" name="downloadGroup">
- <property name="geometry">
- <rect>
- <x>210</x>
- <y>10</y>
- <width>191</width>
- <height>71</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string>If you do not select an existing Live CD, the selected release will be downloaded for you.</string>
- </property>
- <property name="title">
- <string>Download</string>
- </property>
- <widget class="QComboBox" name="downloadCombo">
- <property name="geometry">
- <rect>
- <x>8</x>
- <y>30</y>
- <width>171</width>
- <height>25</height>
- </rect>
- </property>
- </widget>
- </widget>
- <widget class="QCheckBox" name="verifyImage">
- <property name="geometry">
- <rect>
- <x>20</x>
- <y>80</y>
- <width>101</width>
- <height>31</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="text">
- <string>Verify image</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </widget>
- <widget class="QWidget" name="tab_2">
- <attribute name="title">
- <string>Hardware </string>
- </attribute>
- <widget class="QGroupBox" name="groupBox_4">
- <property name="geometry">
- <rect>
- <x>210</x>
- <y>10</y>
- <width>191</width>
- <height>81</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="title">
- <string>Additional Architectures</string>
- </property>
- <widget class="QCheckBox" name="olpcSupport">
- <property name="geometry">
- <rect>
- <x>20</x>
- <y>20</y>
- <width>201</width>
- <height>30</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="text">
- <string>OLPC </string>
- </property>
- </widget>
- <widget class="QCheckBox" name="macSupport">
- <property name="geometry">
- <rect>
- <x>20</x>
- <y>50</y>
- <width>211</width>
- <height>30</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="text">
- <string>Mac (Intel)</string>
- </property>
- </widget>
- </widget>
- <widget class="QGroupBox" name="groupBox_2">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>10</y>
- <width>191</width>
- <height>81</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string>This is the USB stick that you want to install your Live CD on. This device must be formatted with the FAT filesystem.</string>
- </property>
- <property name="title">
- <string>Target Device</string>
- </property>
- <widget class="QComboBox" name="driveBox">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>171</width>
- <height>25</height>
- </rect>
- </property>
- <property name="editable">
- <bool>false</bool>
- </property>
- <property name="insertPolicy">
- <enum>QComboBox::InsertAtTop</enum>
- </property>
- <property name="duplicatesEnabled">
- <bool>false</bool>
- </property>
- </widget>
- <widget class="QCheckBox" name="formatDevice">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>50</y>
- <width>181</width>
- <height>21</height>
- </rect>
- </property>
- <property name="text">
- <string>Format Device</string>
- </property>
- </widget>
- </widget>
- </widget>
- <widget class="QWidget" name="widget">
- <attribute name="title">
- <string>Storage</string>
- </attribute>
- <widget class="QGroupBox" name="groupBox_3">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>10</y>
- <width>191</width>
- <height>81</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="title">
- <string>Home Directory (0 MB)</string>
- </property>
- <widget class="QSlider" name="horizontalSlider">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>111</width>
- <height>20</height>
- </rect>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- <widget class="QCheckBox" name="encryptedHome">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>50</y>
- <width>181</width>
- <height>30</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="text">
- <string>Encrypted</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="QSpinBox" name="homeSpinBox">
- <property name="geometry">
- <rect>
- <x>130</x>
- <y>30</y>
- <width>51</width>
- <height>22</height>
- </rect>
- </property>
- <property name="maximum">
- <number>999999</number>
- </property>
- </widget>
- </widget>
- <widget class="QGroupBox" name="overlayTitle">
- <property name="geometry">
- <rect>
- <x>210</x>
- <y>10</y>
- <width>191</width>
- <height>81</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string comment="comment!">By allocating extra space on your USB stick for a persistent overlay, you will be able to store data and make permanent modifications to your live operating system. Without it, you will not be able to save data that will persist after a reboot.</string>
- </property>
- <property name="title">
- <string>Persistent Storage (0 MB)</string>
- </property>
- <widget class="QSlider" name="overlaySlider">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>111</width>
- <height>21</height>
- </rect>
- </property>
- <property name="maximum">
- <number>2047</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- </widget>
- <widget class="QSpinBox" name="persistentSpinBox">
- <property name="geometry">
- <rect>
- <x>130</x>
- <y>30</y>
- <width>51</width>
- <height>22</height>
- </rect>
- </property>
- <property name="minimum">
- <number>0</number>
- </property>
- <property name="maximum">
- <number>999999</number>
- </property>
- </widget>
- </widget>
- </widget>
- <widget class="QWidget" name="tab_3">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <attribute name="title">
- <string>Output</string>
- </attribute>
- <widget class="QTextEdit" name="textEdit">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>407</width>
- <height>111</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string>This is the status console, where all messages get written to.</string>
- </property>
- <property name="readOnly">
- <bool>true</bool>
- </property>
- <property name="html">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:408;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- </widget>
- </widget>
- </widget>
- <widget class="QCommandLinkButton" name="startButton">
- <property name="geometry">
- <rect>
- <x>130</x>
- <y>260</y>
- <width>161</width>
- <height>37</height>
- </rect>
- </property>
- <property name="cursor">
- <cursorShape>PointingHandCursor</cursorShape>
- </property>
- <property name="toolTip">
- <string extracomment="Begin the Live USB creation process"/>
- </property>
- <property name="text">
- <string>Create Live USB</string>
- </property>
- </widget>
- </widget>
- <resources>
- <include location="resources.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/data/liveusb-creator.ui b/data/liveusb-creator.ui
index aef3431..eceaa83 100755
--- a/data/liveusb-creator.ui
+++ b/data/liveusb-creator.ui
@@ -1,348 +1,335 @@
<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Dialog</class>
- <widget class="QDialog" name="Dialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>431</width>
- <height>405</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>422</width>
- <height>388</height>
- </size>
- </property>
- <property name="windowTitle">
- <string>%(distribution)s Installer</string>
- </property>
- <widget class="QWidget" name="layoutWidget">
- <property name="geometry">
- <rect>
- <x>5</x>
- <y>0</y>
- <width>421</width>
- <height>401</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="sizeConstraint">
- <enum>QLayout::SetDefaultConstraint</enum>
- </property>
- <item>
- <widget class="QLabel" name="titleLabel">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="sourceHorizontalLayout">
- <property name="spacing">
- <number>6</number>
- </property>
- <property name="sizeConstraint">
- <enum>QLayout::SetDefaultConstraint</enum>
- </property>
- <item>
- <widget class="QGroupBox" name="sourceFileGroupBox">
- <property name="minimumSize">
- <size>
- <width>161</width>
- <height>61</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>161</width>
- <height>61</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>11</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string>This button allows you to browse for an existing Live system ISO that you have previously downloaded. If you do not select one, a release will be downloaded for you automatically.</string>
- </property>
- <property name="title">
- <string>Use existing Live system ISO</string>
- </property>
- <widget class="QPushButton" name="isoBttn">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>141</width>
- <height>25</height>
- </rect>
- </property>
- <property name="text">
- <string>Browse</string>
- </property>
- <property name="shortcut">
- <string>Alt+B</string>
- </property>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="orLabel">
- <property name="minimumSize">
- <size>
- <width>23</width>
- <height>24</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>23</width>
- <height>24</height>
- </size>
- </property>
- <property name="font">
- <font>
- <family>Verdana</family>
- <pointsize>12</pointsize>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>or</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="downloadGroupBox">
- <property name="minimumSize">
- <size>
- <width>201</width>
- <height>61</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>201</width>
- <height>61</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>11</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string>If you do not select an existing Live ISO, the selected release will be downloaded for you.</string>
- </property>
- <property name="title">
- <string>Download %(distribution)s</string>
- </property>
- <widget class="QComboBox" name="downloadCombo">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>181</width>
- <height>22</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="targetHorizontalLayout">
- <property name="spacing">
- <number>10</number>
- </property>
- <item>
- <widget class="QGroupBox" name="targetGroupBox">
- <property name="minimumSize">
- <size>
- <width>191</width>
- <height>61</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>191</width>
- <height>61</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>11</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string>This is the USB stick that you want to install your Live system on. This device must be formatted with the FAT filesystem.</string>
- </property>
- <property name="title">
- <string>Target Device</string>
- </property>
- <widget class="QComboBox" name="driveBox">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>400</width>
- <height>24</height>
- </rect>
- </property>
- <property name="editable">
- <bool>false</bool>
- </property>
- <property name="insertPolicy">
- <enum>QComboBox::InsertAtTop</enum>
- </property>
- <property name="duplicatesEnabled">
- <bool>false</bool>
- </property>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="overlayTitle">
- <property name="minimumSize">
- <size>
- <width>201</width>
- <height>61</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>201</width>
- <height>61</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>11</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string comment="comment!">By allocating extra space on your USB stick for a persistent overlay, you will be able to store data and make permanent modifications to your live operating system. Without it, you will not be able to save data that will persist after a reboot.</string>
- </property>
- <property name="title">
- <string>Persistent Storage (0 MB)</string>
- </property>
- <widget class="QSlider" name="overlaySlider">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>181</width>
- <height>21</height>
- </rect>
- </property>
- <property name="maximum">
- <number>2047</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- </widget>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QTextEdit" name="textEdit">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>401</width>
- <height>110</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>401</width>
- <height>111</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>11</pointsize>
- </font>
- </property>
- <property name="whatsThis">
- <string>This is the status console, where all messages get written to.</string>
- </property>
- <property name="readOnly">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QProgressBar" name="progressBar">
- <property name="minimumSize">
- <size>
- <width>401</width>
- <height>23</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>401</width>
- <height>23</height>
- </size>
- </property>
- <property name="whatsThis">
- <string>This is the progress bar that will indicate how far along in the LiveUSB creation process you are</string>
- </property>
- <property name="value">
- <number>0</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="startButton">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="whatsThis">
- <string>This button will begin the LiveUSB creation process. This entails optionally downloading a release (if an existing one wasn't selected), extracting the ISO to the USB device, creating the persistent overlay, and installing the bootloader.</string>
- </property>
- <property name="text">
- <string>Install Tails</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- <resources>
- <include location="resources.qrc"/>
- </resources>
- <connections/>
-</ui>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+ <requires lib="gtk+" version="3.14"/>
+ <object class="GtkImage" id="image_next">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">next</property>
+ </object>
+ <object class="GtkListStore" id="liststore_source_dl">
+ <columns>
+ <!-- column-name name -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkListStore" id="liststore_target">
+ <columns>
+ <!-- column-name name -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkBox" id="box_installer">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkImage" id="image_header">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">baseline</property>
+ <property name="xalign">0</property>
+ <property name="pixbuf">tails-liveusb-header.png</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInfoBar" id="infobar">
+ <property name="app_paintable">True</property>
+ <property name="can_focus">False</property>
+ <property name="no_show_all">True</property>
+ <property name="show_close_button">True</property>
+ <signal name="response" handler="on_infobar_response" swapped="no"/>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="infobar-action_area">
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">end</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="infobar-content_area">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label_infobar_title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_infobar_details">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_source">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">18</property>
+ <property name="margin_right">18</property>
+ <property name="margin_top">18</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox" id="box_source_file">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label_source_file">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Use existing Live system ISO:</property>
+ <property name="justify">fill</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="filechooserbutton_source_file">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <signal name="file-set" handler="on_source_file_set" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_source_dl">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label_source_dl">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Select a distribution to download:</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="combobox_source_dl">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="model">liststore_source_dl</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_target">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">18</property>
+ <property name="margin_right">18</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label_target">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">12</property>
+ <property name="label" translatable="yes">Target Device:</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="combobox_target">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="model">liststore_target</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_log">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="margin_left">18</property>
+ <property name="margin_right">18</property>
+ <property name="margin_bottom">6</property>
+ <property name="shadow_type">in</property>
+ <property name="min_content_height">200</property>
+ <child>
+ <object class="GtkTextView" id="textview_log">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">False</property>
+ <property name="wrap_mode">word</property>
+ <property name="left_margin">6</property>
+ <property name="right_margin">6</property>
+ <property name="cursor_visible">False</property>
+ <property name="accepts_tab">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkProgressBar" id="progressbar_progress">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">18</property>
+ <property name="margin_right">18</property>
+ <property name="margin_bottom">12</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_start">
+ <property name="label" translatable="yes">Install Tails</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="margin_left">18</property>
+ <property name="margin_right">18</property>
+ <property name="margin_bottom">18</property>
+ <property name="image">image_next</property>
+ <property name="always_show_image">True</property>
+ <signal name="clicked" handler="on_start_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/data/liveusb-header-old.png b/data/liveusb-header-old.png
deleted file mode 100755
index 4d3e10b..0000000
--- a/data/liveusb-header-old.png
+++ /dev/null
Binary files differ
diff --git a/data/liveusb-header.png b/data/liveusb-header.png
deleted file mode 100755
index 89fb0ae..0000000
--- a/data/liveusb-header.png
+++ /dev/null
Binary files differ
diff --git a/data/liveusb-header.xcf b/data/liveusb-header.xcf
deleted file mode 100644
index 8ecd39c..0000000
--- a/data/liveusb-header.xcf
+++ /dev/null
Binary files differ
diff --git a/data/resources.qrc b/data/resources.qrc
deleted file mode 100644
index 3262318..0000000
--- a/data/resources.qrc
+++ /dev/null
@@ -1,11 +0,0 @@
-<RCC>
- <qresource>
- <file>liveusb-header.png</file>
- </qresource>
- <qresource>
- <file>tails-liveusb-header.png</file>
- </qresource>
- <qresource>
- <file>refresh.png</file>
- </qresource>
-</RCC>
diff --git a/data/tails-installer-launcher.ui b/data/tails-installer-launcher.ui
deleted file mode 100755
index eb96b1b..0000000
--- a/data/tails-installer-launcher.ui
+++ /dev/null
@@ -1,259 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Dialog</class>
- <widget class="QDialog" name="Dialog">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>530</width>
- <height>349</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>512</width>
- <height>300</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>512</width>
- <height>300</height>
- </size>
- </property>
- <property name="windowTitle">
- <string>%(distribution)s Installer</string>
- </property>
- <widget class="QWidget" name="layoutWidget">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>10</y>
- <width>511</width>
- <height>331</height>
- </rect>
- </property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="helpLabel_2">
- <property name="text">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;To run Tails Installer you need an ISO image which can be downloaded &lt;/p&gt;
-&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;from the Tails website: &lt;a href=&quot;https://tails.boum.org/download/&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://tails.boum.org/download/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="margin">
- <number>6</number>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <layout class="QGridLayout" name="gridLayout">
- <property name="leftMargin">
- <number>6</number>
- </property>
- <property name="rightMargin">
- <number>6</number>
- </property>
- <property name="verticalSpacing">
- <number>6</number>
- </property>
- <item row="2" column="0">
- <widget class="QPushButton" name="upgradeFromIsoButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>200</width>
- <height>96</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>0</width>
- <height>96</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>12</pointsize>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Upgrade</string>
- </property>
- <property name="iconSize">
- <size>
- <width>128</width>
- <height>128</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="upgradeFromIsoLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>300</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>300</width>
- <height>96</height>
- </size>
- </property>
- <property name="text">
- <string>&lt;ul&gt;
-&lt;li&gt;Upgrade a Tails device to the version of an ISO image.&lt;/li&gt;
-&lt;li&gt;The encrypted persistent storage of the Tails device that you upgrade is preserved.&lt;/li&gt;
-&lt;/ul&gt;</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="margin">
- <number>6</number>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="installFromIsoLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>300</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>300</width>
- <height>96</height>
- </size>
- </property>
- <property name="text">
- <string>
-&lt;ul&gt;
-&lt;li&gt;Install Tails on a new removable device.&lt;/li&gt;
-&lt;li&gt;The removable device that you install on is formatted and all data is lost.&lt;/li&gt;
-&lt;/ul&gt;</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="margin">
- <number>6</number>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QPushButton" name="installFromIsoButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>200</width>
- <height>96</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>0</width>
- <height>96</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>12</pointsize>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Install</string>
- </property>
- <property name="iconSize">
- <size>
- <width>128</width>
- <height>128</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="helpLabel">
- <property name="text">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Need help? Read the &lt;a href=&quot;file:///usr/share/doc/tails/website/doc/first_steps/installation.en.html&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;documentation&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="margin">
- <number>6</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- <resources>
- <include location="resources.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/fedora.ini b/fedora.ini
index d9516a0..cd67feb 100644
--- a/fedora.ini
+++ b/fedora.ini
@@ -4,7 +4,7 @@ running_liveos_mountpoint = /run/initramfs/live
[branding]
distribution = Fedora
-header = :/liveusb-header.png
+header = :/tails-liveusb-header.png
partition_label = FEDORA
[download]
diff --git a/liveusb-creator b/liveusb-creator
index 600feb8..d594e0c 100755
--- a/liveusb-creator
+++ b/liveusb-creator
@@ -2,6 +2,7 @@
# coding: utf-8
#
# Copyright © 2008-2013 Red Hat, Inc. All rights reserved.
+# Copyright © 2012-2015 Tails Developers <tails@boum.org>
#
# This copyrighted material is made available to anyone wishing to use, modify,
# copy, or redistribute it subject to the terms and conditions of the GNU
@@ -17,6 +18,7 @@
# permission of Red Hat, Inc.
#
# Author(s): Luke Macken <lmacken@redhat.com>
+# Tails Developers <tails@boum.org>
import os
import sys
@@ -89,9 +91,11 @@ def main():
x = raw_input("\nDone! Press any key to exit")
else:
## Start our graphical interface
- from liveusb.gui import LiveUSBApp
+ from gi.repository import Gtk
+ from liveusb.gui import LiveUSBWindow
try:
- LiveUSBApp(opts, sys.argv)
+ win = LiveUSBWindow(opts=opts, args=sys.argv)
+ Gtk.main()
except KeyboardInterrupt:
pass
diff --git a/liveusb-creator-launcher b/liveusb-creator-launcher
index 85c318c..5d4b23d 100755
--- a/liveusb-creator-launcher
+++ b/liveusb-creator-launcher
@@ -1,7 +1,7 @@
#!/usr/bin/python -tt
# coding: utf-8
#
-# Copyright © 2012, Tails developers <tails@boum.org>
+# Copyright © 2012-2015, Tails developers <tails@boum.org>
#
# This copyrighted material is made available to anyone wishing to use, modify,
# copy, or redistribute it subject to the terms and conditions of the GNU
@@ -13,15 +13,20 @@
# not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
# Floor, Boston, MA 02110-1301, USA.
+import sys
+
+from gi.repository import Gtk
+
+from liveusb.launcher import LiveUSBLauncherWindow
+
def main():
- import sys
- from liveusb.launcher import LiveUSBLauncher
try:
if len(sys.argv) > 1:
args = sys.argv[1:]
else:
args = []
- LiveUSBLauncher(args)
+ LiveUSBLauncherWindow(args)
+ Gtk.main()
except KeyboardInterrupt:
pass
diff --git a/liveusb-creator.spec b/liveusb-creator.spec
deleted file mode 100644
index b03a2fb..0000000
--- a/liveusb-creator.spec
+++ /dev/null
@@ -1,214 +0,0 @@
-%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
-
-Name: liveusb-creator
-Version: 3.11.8
-Release: 1%{?dist}
-Summary: A liveusb creator
-
-Group: Applications/System
-License: GPLv2
-URL: https://fedorahosted.org/liveusb-creator
-Source0: https://fedorahosted.org/releases/l/i/liveusb-creator/%{name}-%{version}.tar.bz2
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-
-BuildArch: noarch
-ExcludeArch: ppc
-ExcludeArch: ppc64
-
-BuildRequires: python-devel, python-setuptools, PyQt4-devel, desktop-file-utils gettext
-Requires: syslinux, PyQt4, usermode, isomd5sum
-Requires: python-urlgrabber
-Requires: pyparted >= 2.0
-
-%description
-A liveusb creator from Live Fedora images
-
-%prep
-%setup -q
-
-%build
-%{__python} setup.py build
-make mo
-make mo
-
-%install
-rm -rf %{buildroot}
-%{__python} setup.py install -O1 --skip-build --root %{buildroot}
-%{__rm} -r liveusb/urlgrabber
-
-# Adjust for console-helper magic
-mkdir -p %{buildroot}%{_sbindir}
-mv %{buildroot}%{_bindir}/%{name} %{buildroot}%{_sbindir}/%{name}
-ln -s ../bin/consolehelper %{buildroot}%{_bindir}/%{name}
-mkdir -p %{buildroot}%{_sysconfdir}/pam.d
-cp %{name}.pam %{buildroot}%{_sysconfdir}/pam.d/%{name}
-mkdir -p %{buildroot}%{_sysconfdir}/security/console.apps
-cp %{name}.console %{buildroot}%{_sysconfdir}/security/console.apps/%{name}
-
-desktop-file-install --vendor="fedora" \
---dir=%{buildroot}%{_datadir}/applications \
-%{buildroot}/%{_datadir}/applications/liveusb-creator.desktop
-rm -rf %{buildroot}/%{_datadir}/applications/liveusb-creator.desktop
-
-%find_lang %{name}
-
-%clean
-rm -rf %{buildroot}
-
-%files -f %{name}.lang
-%defattr(-,root,root,-)
-%doc README.txt LICENSE.txt
-%{python_sitelib}/*
-%{_bindir}/%{name}
-%{_sbindir}/%{name}
-%{_datadir}/applications/fedora-liveusb-creator.desktop
-%{_datadir}/pixmaps/fedorausb.png
-#%{_datadir}/locale/*/LC_MESSAGES/liveusb-creator.mo
-%config(noreplace) %{_sysconfdir}/pam.d/%{name}
-%config(noreplace) %{_sysconfdir}/security/console.apps/%{name}
-
-%changelog
-* Tue Jan 15 2013 Luke Macken <lmacken@redhat.com> - 3.11.8-1
-- Update to 3.11.8
-
-* Tue Nov 08 2011 Luke Macken <lmacken@redhat.com> - 3.11.6-1
-- Update our release list for F16
-
-* Wed Nov 02 2011 Luke Macken <lmacken@redhat.com> - 3.11.5-1
-- Update to the 3.11.5 release
-
-* Tue Jun 21 2011 Luke Macken <lmacken@redhat.com> - 3.11.4-1
-- 3.11.4 bugfix release
-
-* Tue Jun 21 2011 Luke Macken <lmacken@redhat.com> - 3.11.3-1
-- 3.11.3 bugfix release
-
-* Sun Jun 12 2011 Luke Macken <lmacken@redhat.com> - 3.11.2-1
-- 3.11.2 minor bugfix release
-
-* Tue May 24 2011 Luke Macken <lmacken@redhat.com> - 3.11.1-1
-- 3.11.1 release
-
-* Mon Apr 25 2011 Luke Macken <lmacken@redhat.com> - 3.11.0-1
-- 3.11.0 release
-
-* Mon Jan 24 2011 Luke Macken <lmacken@redhat.com> - 3.10.0-1
-- 3.10.0 upstream release
-
-* Tue Dec 08 2009 Luke Macken <lmacken@redhat.com> - 3.9.1-1
-- 3.9.1 bugfix release
-
-* Tue Dec 01 2009 Luke Macken <lmacken@redhat.com> - 3.9-1
-- 3.9 release
-
-* Tue Dec 01 2009 Luke Macken <lmacken@redhat.com> - 3.8.9-1
-- 3.8.9, fixes bug #540255
-
-* Tue Dec 01 2009 Luke Macken <lmacken@redhat.com> - 3.8.8-1
-- 3.8.8, bugfix release
-
-* Tue Nov 17 2009 Luke Macken <lmacken@redhat.com> - 3.8.7-1
-- 3.8.7, containing the F12 release
-
-* Sat Nov 07 2009 Luke Macken <lmacken@redhat.com> - 3.8.6-1
-- 3.8.6
-
-* Thu Aug 27 2009 Luke Macken <lmacken@redhat.com> - 3.7.3-1
-- 3.7.3
-
-* Wed Aug 05 2009 Luke Macken <lmacken@redhat.com> - 3.7.2-1
-- 3.7.2
-
-* Sat Jun 27 2009 Luke Macken <lmacken@redhat.com> - 3.7.1-1
-- 3.7.1
-
-* Wed Jun 24 2009 Luke Macken <lmacken@redhat.com> - 3.7
-- Latest upstream bugfix release
-
-* Fri Jun 12 2009 Luke Macken <lmacken@redhat.com> - 3.6.8-1
-- Latest upstream bugfix release
-
-* Tue Jun 09 2009 Luke Macken <lmacken@redhat.com> - 3.6.7-1
-- Fix a bug with ext formatted sticks
-
-* Tue Jun 09 2009 Luke Macken <lmacken@redhat.com> - 3.6.6-1
-- Update to v3.6.6
-- Merge the dcon-unfreeze patch upstream
-- Add Fedora 11 to the release list
-
-* Wed May 20 2009 Christoph Wickert <cwickert@fedoraproject.org> - 3.6.5-3
-- Make olpc.fth unfreeze disply for newer BIOSes than Q2E30 (#501688)
-
-* Thu Apr 09 2009 Luke Macken <lmacken@redhat.com> 3.6.5-2
-- Fix the checksum verification to support sha256
-
-* Thu Apr 09 2009 Luke Macken <lmacken@redhat.com> 3.6.5-1
-- Update to v3.6.5, which supports F11 beta, and the latest SoaS releases
-
-* Wed Mar 18 2009 Luke Macken <lmacken@redhat.com> 3.6.4-1
-- Update to v3.6.4, which works with the PyParted 2.0 API
-
-* Thu Mar 12 2009 Luke Macken <lmacken@redhat.com> 3.6.3-1
-- Update to v3.6.3
-
-* Mon Mar 07 2009 Luke Macken <lmacken@redhat.com> 3.6-1
-- Require pyparted
-- Update to v3.6
-
-* Fri Mar 06 2009 wwp <subscript@free.fr> 3.5-2
-- Fix dd commands when output path contain whitespaces
-
-* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> 3.5-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
-
-* Fri Jan 16 2009 Luke Macken <lmacken@redhat.com> 3.5-1
-- Update to v3.5
-
-* Fri Jan 16 2009 Luke Macken <lmacken@redhat.com> 3.4-1
-- Update to 3.4.
-
-* Fri Jan 16 2009 Luke Macken <lmacken@redhat.com> 3.3-2
-- Require python-urlgrabber
-
-* Fri Jan 15 2009 Luke Macken <lmacken@redhat.com> 3.3-1
-- Update to 3.3
-
-* Fri Jan 02 2009 Luke Macken <lmacken@redhat.com> 3.2-1
-- Fixed some syslinux-related issues (#167)
-- Fixed some windows-related logging problems (#337)
-- Mitigate a DBus/HAL-related segfault by unmounting upon termination
-
-* Thu Jan 01 2009 Luke Macken <lmacken@redhat.com> 3.1-1
-- Latest upstream release, containing some windows-specific
- optimizations and fixes.
-
-* Mon Dec 29 2008 Luke Macken <lmacken@redhat.com> 3.0-4
-- Latest upstream release.
-- Fedora 10 support
-- Update to the latest sugar spin
-- Lots of bug fixes and code improvements
-- Improved OLPC support with the --xo flag
-- Translation improvements
- - Greek translation (Nikos Charonitakis)
- - Slovak translation (Ondrej Sulek)
- - Catalan translation (Xavier Conde)
- - French translation (PabloMartin-Gomez)
- - Serbian (Milos Komarcevic)
- - Chinese (sainrysec)
-
-* Fri Oct 03 2008 Luke Macken <lmacken@redhat.com> 3.0-2
-- Exclude ppc and ppc64, as syslinux will not work on those architectures.
-
-* Fri Aug 29 2008 Luke Macken <lmacken@redhat.com> 3.0-1
-- Latest upstream release, containing various bugfixes
-- Fedora 10 Beta support
-- Brazilian Portuguese translation (Igor Pires Soares)
-- Spanish translation (Domingo Becker)
-- Malay translation (Sharuzzaman Ahmat Raslan)
-- German Translation (Marcus Nitzschke, Fabian Affolter)
-- Polish translation (Piotr Drąg)
-- Portuguese translation (Valter Fukuoka)
-- Czech translation (Adam Pribyl)
-
-* Tue Aug 12 2008 Kushal Das <kushal@fedoraproject.org> 2.7-1
-- Initial release
diff --git a/liveusb/__init__.py b/liveusb/__init__.py
index 060910c..c6c0f9c 100644
--- a/liveusb/__init__.py
+++ b/liveusb/__init__.py
@@ -57,12 +57,4 @@ branding = {
'header': config['branding']['header']
}
-from liveusb.dialog import Ui_Dialog as LiveUSBInterface
-
-from liveusb.utils import is_running_from_tails
-if is_running_from_tails():
- from liveusb.launcher_ui import Ui_Dialog as LiveUSBLauncherInterface
-else :
- from liveusb.tails_launcher_ui import Ui_Dialog as LiveUSBLauncherInterface
-
__all__ = ("LiveUSBCreator", "LiveUSBError", "LiveUSBDialog", "_", "utf8_gettext", "branding")
diff --git a/liveusb/config.py b/liveusb/config.py
index dddbfa3..6c0fc12 100644
--- a/liveusb/config.py
+++ b/liveusb/config.py
@@ -22,7 +22,8 @@ default_config = {
'persistence': { 'enabled': False,
},
'branding': { 'distribution': 'Tails',
- 'header': ':/tails-liveusb-header.png',
+ 'header': 'tails-liveusb-header.png',
+ 'color': '#56347c',
'partition_label': 'Tails',
},
}
diff --git a/liveusb/dialog.py b/liveusb/dialog.py
deleted file mode 100644
index 988f94d..0000000
--- a/liveusb/dialog.py
+++ /dev/null
@@ -1,167 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'data/liveusb-creator.ui'
-#
-# Created: Thu Jun 12 18:09:09 2014
-# by: PyQt4 UI code generator 4.9.3
-#
-# WARNING! All changes made in this file will be lost!
-
-
-import sys
-if sys.platform == "win32":
- from liveusb import utf8_gettext as _
-else:
- from liveusb import _
-from liveusb import branding
-
-def translate_and_brand(string):
- return _(string) % branding
-
-from PyQt4 import QtCore, QtGui
-
-try:
- _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
- _fromUtf8 = lambda s: s
-
-class Ui_Dialog(object):
- def setupUi(self, Dialog):
- Dialog.setObjectName(_fromUtf8("Dialog"))
- Dialog.resize(431, 405)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
- Dialog.setSizePolicy(sizePolicy)
- Dialog.setMinimumSize(QtCore.QSize(0, 0))
- Dialog.setBaseSize(QtCore.QSize(422, 388))
- self.layoutWidget = QtGui.QWidget(Dialog)
- self.layoutWidget.setGeometry(QtCore.QRect(5, 0, 421, 401))
- self.layoutWidget.setObjectName(_fromUtf8("layoutWidget"))
- self.verticalLayout = QtGui.QVBoxLayout(self.layoutWidget)
- self.verticalLayout.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint)
- self.verticalLayout.setMargin(0)
- self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
- self.titleLabel = QtGui.QLabel(self.layoutWidget)
- self.titleLabel.setText(_fromUtf8(""))
- self.titleLabel.setObjectName(_fromUtf8("titleLabel"))
- self.verticalLayout.addWidget(self.titleLabel)
- self.sourceHorizontalLayout = QtGui.QHBoxLayout()
- self.sourceHorizontalLayout.setSpacing(6)
- self.sourceHorizontalLayout.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint)
- self.sourceHorizontalLayout.setObjectName(_fromUtf8("sourceHorizontalLayout"))
- self.sourceFileGroupBox = QtGui.QGroupBox(self.layoutWidget)
- self.sourceFileGroupBox.setMinimumSize(QtCore.QSize(161, 61))
- self.sourceFileGroupBox.setBaseSize(QtCore.QSize(161, 61))
- font = QtGui.QFont()
- font.setPointSize(11)
- self.sourceFileGroupBox.setFont(font)
- self.sourceFileGroupBox.setObjectName(_fromUtf8("sourceFileGroupBox"))
- self.isoBttn = QtGui.QPushButton(self.sourceFileGroupBox)
- self.isoBttn.setGeometry(QtCore.QRect(10, 30, 141, 25))
- self.isoBttn.setObjectName(_fromUtf8("isoBttn"))
- self.sourceHorizontalLayout.addWidget(self.sourceFileGroupBox)
- self.orLabel = QtGui.QLabel(self.layoutWidget)
- self.orLabel.setMinimumSize(QtCore.QSize(23, 24))
- self.orLabel.setBaseSize(QtCore.QSize(23, 24))
- font = QtGui.QFont()
- font.setFamily(_fromUtf8("Verdana"))
- font.setPointSize(12)
- font.setBold(True)
- font.setWeight(75)
- self.orLabel.setFont(font)
- self.orLabel.setAlignment(QtCore.Qt.AlignCenter)
- self.orLabel.setObjectName(_fromUtf8("orLabel"))
- self.sourceHorizontalLayout.addWidget(self.orLabel)
- self.downloadGroupBox = QtGui.QGroupBox(self.layoutWidget)
- self.downloadGroupBox.setMinimumSize(QtCore.QSize(201, 61))
- self.downloadGroupBox.setBaseSize(QtCore.QSize(201, 61))
- font = QtGui.QFont()
- font.setPointSize(11)
- self.downloadGroupBox.setFont(font)
- self.downloadGroupBox.setObjectName(_fromUtf8("downloadGroupBox"))
- self.downloadCombo = QtGui.QComboBox(self.downloadGroupBox)
- self.downloadCombo.setGeometry(QtCore.QRect(10, 30, 181, 22))
- self.downloadCombo.setObjectName(_fromUtf8("downloadCombo"))
- self.sourceHorizontalLayout.addWidget(self.downloadGroupBox)
- self.verticalLayout.addLayout(self.sourceHorizontalLayout)
- self.targetHorizontalLayout = QtGui.QHBoxLayout()
- self.targetHorizontalLayout.setSpacing(10)
- self.targetHorizontalLayout.setObjectName(_fromUtf8("targetHorizontalLayout"))
- self.targetGroupBox = QtGui.QGroupBox(self.layoutWidget)
- self.targetGroupBox.setMinimumSize(QtCore.QSize(191, 61))
- self.targetGroupBox.setBaseSize(QtCore.QSize(191, 61))
- font = QtGui.QFont()
- font.setPointSize(11)
- self.targetGroupBox.setFont(font)
- self.targetGroupBox.setObjectName(_fromUtf8("targetGroupBox"))
- self.driveBox = QtGui.QComboBox(self.targetGroupBox)
- self.driveBox.setGeometry(QtCore.QRect(10, 30, 400, 24))
- self.driveBox.setEditable(False)
- self.driveBox.setInsertPolicy(QtGui.QComboBox.InsertAtTop)
- self.driveBox.setDuplicatesEnabled(False)
- self.driveBox.setObjectName(_fromUtf8("driveBox"))
- self.targetHorizontalLayout.addWidget(self.targetGroupBox)
- self.overlayTitle = QtGui.QGroupBox(self.layoutWidget)
- self.overlayTitle.setMinimumSize(QtCore.QSize(201, 61))
- self.overlayTitle.setBaseSize(QtCore.QSize(201, 61))
- font = QtGui.QFont()
- font.setPointSize(11)
- self.overlayTitle.setFont(font)
- self.overlayTitle.setObjectName(_fromUtf8("overlayTitle"))
- self.overlaySlider = QtGui.QSlider(self.overlayTitle)
- self.overlaySlider.setGeometry(QtCore.QRect(10, 30, 181, 21))
- self.overlaySlider.setMaximum(2047)
- self.overlaySlider.setOrientation(QtCore.Qt.Horizontal)
- self.overlaySlider.setTickPosition(QtGui.QSlider.NoTicks)
- self.overlaySlider.setObjectName(_fromUtf8("overlaySlider"))
- self.targetHorizontalLayout.addWidget(self.overlayTitle)
- self.verticalLayout.addLayout(self.targetHorizontalLayout)
- self.textEdit = QtGui.QTextEdit(self.layoutWidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.textEdit.sizePolicy().hasHeightForWidth())
- self.textEdit.setSizePolicy(sizePolicy)
- self.textEdit.setMinimumSize(QtCore.QSize(401, 110))
- self.textEdit.setBaseSize(QtCore.QSize(401, 111))
- font = QtGui.QFont()
- font.setPointSize(11)
- self.textEdit.setFont(font)
- self.textEdit.setReadOnly(True)
- self.textEdit.setObjectName(_fromUtf8("textEdit"))
- self.verticalLayout.addWidget(self.textEdit)
- self.progressBar = QtGui.QProgressBar(self.layoutWidget)
- self.progressBar.setMinimumSize(QtCore.QSize(401, 23))
- self.progressBar.setBaseSize(QtCore.QSize(401, 23))
- self.progressBar.setProperty("value", 0)
- self.progressBar.setObjectName(_fromUtf8("progressBar"))
- self.verticalLayout.addWidget(self.progressBar)
- self.startButton = QtGui.QPushButton(self.layoutWidget)
- self.startButton.setEnabled(True)
- self.startButton.setObjectName(_fromUtf8("startButton"))
- self.verticalLayout.addWidget(self.startButton)
-
- self.retranslateUi(Dialog)
- QtCore.QMetaObject.connectSlotsByName(Dialog)
-
- def retranslateUi(self, Dialog):
- Dialog.setWindowTitle(translate_and_brand('%(distribution)s Installer'))
- self.sourceFileGroupBox.setWhatsThis(translate_and_brand('This button allows you to browse for an existing Live system ISO that you have previously downloaded. If you do not select one, a release will be downloaded for you automatically.'))
- self.sourceFileGroupBox.setTitle(translate_and_brand('Use existing Live system ISO'))
- self.isoBttn.setText(translate_and_brand('Browse'))
- self.isoBttn.setShortcut(translate_and_brand('Alt+B'))
- self.orLabel.setText(translate_and_brand('or'))
- self.downloadGroupBox.setWhatsThis(translate_and_brand('If you do not select an existing Live ISO, the selected release will be downloaded for you.'))
- self.downloadGroupBox.setTitle(translate_and_brand('Download %(distribution)s'))
- self.targetGroupBox.setWhatsThis(translate_and_brand('This is the USB stick that you want to install your Live system on. This device must be formatted with the FAT filesystem.'))
- self.targetGroupBox.setTitle(translate_and_brand('Target Device'))
- self.overlayTitle.setWhatsThis(translate_and_brand('By allocating extra space on your USB stick for a persistent overlay, you will be able to store data and make permanent modifications to your live operating system. Without it, you will not be able to save data that will persist after a reboot.'))
- self.overlayTitle.setTitle(translate_and_brand('Persistent Storage (0 MB)'))
- self.textEdit.setWhatsThis(translate_and_brand('This is the status console, where all messages get written to.'))
- self.progressBar.setWhatsThis(translate_and_brand('This is the progress bar that will indicate how far along in the LiveUSB creation process you are'))
- self.startButton.setWhatsThis(translate_and_brand('This button will begin the LiveUSB creation process. This entails optionally downloading a release (if an existing one wasn\'t selected), extracting the ISO to the USB device, creating the persistent overlay, and installing the bootloader.'))
- self.startButton.setText(translate_and_brand('Install Tails'))
-
-import resources_rc
diff --git a/liveusb/gui.py b/liveusb/gui.py
index e0a67bb..15b46ac 100755
--- a/liveusb/gui.py
+++ b/liveusb/gui.py
@@ -3,6 +3,7 @@
# Copyright © 2008-2013 Red Hat, Inc. All rights reserved.
# Copyright © 2008-2013 Luke Macken <lmacken@redhat.com>
# Copyright © 2008 Kushal Das <kushal@fedoraproject.org>
+# Copyright © 2012-2015 Tails Developers <tails@boum.org>
#
# This copyrighted material is made available to anyone wishing to use, modify,
# copy, or redistribute it subject to the terms and conditions of the GNU
@@ -19,6 +20,7 @@
#
# Author(s): Luke Macken <lmacken@redhat.com>
# Kushal Das <kushal@fedoraproject.org>
+# Tails Developers <tails@boum.org>
"""
A cross-platform graphical interface for the LiveUSBCreator
@@ -27,18 +29,21 @@ A cross-platform graphical interface for the LiveUSBCreator
import os
import sys
import logging
+import threading
import urlparse
+import traceback
from time import sleep
from datetime import datetime
-from PyQt4 import QtCore, QtGui
-from liveusb import LiveUSBCreator, LiveUSBError, LiveUSBInterface, _
+from gi.repository import Gdk, GLib, Gtk
+
+from liveusb import LiveUSBCreator, LiveUSBError, _
from liveusb.config import config
from liveusb.source import SourceError, LocalIsoSource
from liveusb.source import RunningLiveSystemSource
from liveusb.releases import releases, get_fedora_releases
-from liveusb.utils import _to_unicode, _format_bytes_in_gb
+from liveusb.utils import _to_unicode, _format_bytes_in_gb, _get_datadir
if sys.platform == 'win32':
from liveusb.urlgrabber.grabber import URLGrabber, URLGrabError
from liveusb.urlgrabber.progress import BaseMeter
@@ -50,26 +55,15 @@ MAX_FAT16 = 2047
MAX_FAT32 = 3999
MAX_EXT = 2097152
+# FIXME: port to Gtk.Application
-class LiveUSBApp(QtGui.QApplication):
- """ Main application class """
- def __init__(self, opts, args):
- QtGui.QApplication.__init__(self, args)
- self.mywindow = LiveUSBDialog(opts, args)
- self.mywindow.show()
- try:
- self.exec_()
- finally:
- self.mywindow.terminate()
-
-
-class ReleaseDownloader(QtCore.QThread):
-
- def __init__(self, release, progress, proxies):
- QtCore.QThread.__init__(self)
+class ReleaseDownloader(threading.Thread):
+ def __init__(self, release, progress, proxies, parent):
+ threading.Thread.__init__(self)
self.release = release
self.progress = progress
self.proxies = proxies
+ self.parent = parent
for rel in releases:
if rel['name'] == str(release):
self.url = rel['url']
@@ -78,8 +72,8 @@ class ReleaseDownloader(QtCore.QThread):
raise LiveUSBError(_("Unknown release: %s") % release)
def run(self):
- self.emit(QtCore.SIGNAL("status(PyQt_PyObject)"),
- _("Downloading %s...") % os.path.basename(self.url))
+ GLib.idle_add(self.parent.update_log,
+ _("Downloading %s...") % os.path.basename(self.url))
grabber = URLGrabber(progress_obj=self.progress, proxies=self.proxies)
home = os.getenv('HOME', 'USERPROFILE')
filename = os.path.basename(urlparse.urlparse(self.url).path)
@@ -90,34 +84,39 @@ class ReleaseDownloader(QtCore.QThread):
try:
iso = grabber.urlgrab(self.url, reget='simple')
except URLGrabError, e:
- self.emit(QtCore.SIGNAL("dlcomplete(PyQt_PyObject)"), e.strerror)
+ GLib.idle_add(self.parent.download_complete, e.strerror)
else:
- self.emit(QtCore.SIGNAL("dlcomplete(PyQt_PyObject)"), iso)
+ GLib.idle_add(self.parent.download_complete, iso)
-class DownloadProgress(QtCore.QObject, BaseMeter):
- """ A QObject urlgrabber BaseMeter class.
+class DownloadProgress(BaseMeter):
+ """ An urlgrabber BaseMeter class.
This class is called automatically by urlgrabber with our download details.
This class then sends signals to our main dialog window to update the
progress bar.
"""
+ def __init__(self, parent):
+ BaseMeter.__init__(self)
+ self.parent = parent
+ self.size = 0
+
def start(self, filename=None, url=None, basename=None, size=None,
now=None, text=None):
- self.emit(QtCore.SIGNAL("maxprogress(int)"), size)
+ self.size = size
def update(self, amount_read, now=None):
""" Update our download progressbar.
:read: the number of bytes read so far
"""
- self.emit(QtCore.SIGNAL("progress(int)"), amount_read)
+ GLib.idle_add(parent.progress, float(amount_read) / self.size)
def end(self, amount_read):
self.update(amount_read)
-class ProgressThread(QtCore.QThread):
+class ProgressThread(threading.Thread):
""" A thread that monitors the progress of Live USB creation.
This thread periodically checks the amount of free space left on the
@@ -128,44 +127,47 @@ class ProgressThread(QtCore.QThread):
orig_free = 0
drive = None
get_free_bytes = None
- alive = True
+
+ def __init__(self, parent):
+ threading.Thread.__init__(self)
+ self.parent = parent
+ self.terminate = False
def set_data(self, size, drive, freebytes):
self.totalsize = size / 1024
self.drive = drive
self.get_free_bytes = freebytes
self.orig_free = self.get_free_bytes()
- self.emit(QtCore.SIGNAL("maxprogress(int)"), self.totalsize)
def run(self):
- while self.alive:
+ while not self.terminate:
free = self.get_free_bytes()
if free is None:
break
value = (self.orig_free - free) / 1024
- self.emit(QtCore.SIGNAL("progress(int)"), value)
+ GLib.idle_add(self.parent.progress, float(value) / self.totalsize)
if value >= self.totalsize:
break
sleep(3)
def stop(self):
- self.alive = False
-
- def terminate(self):
- self.emit(QtCore.SIGNAL("progress(int)"), self.totalsize)
- QtCore.QThread.terminate(self)
+ self.terminate = True
+ def __del__(self):
+ GLib.idle_add(self.parent.progress, 1.0)
+ threading.Thread.__del__(self)
-class LiveUSBThread(QtCore.QThread):
+class LiveUSBThread(threading.Thread):
- def __init__(self, live, progress, parent=None):
- QtCore.QThread.__init__(self, parent)
+ def __init__(self, live, progress, parent):
+ threading.Thread.__init__(self)
self.progress = progress
- self.parent = parent
self.live = live
+ self.parent = parent
+ self.maximum = 0
def status(self, text):
- self.emit(QtCore.SIGNAL("status(PyQt_PyObject)"), text)
+ GLib.idle_add(self.parent.status, text)
def rescan_devices(self, force_partitions=False):
self._waiting_detection = True
@@ -181,7 +183,7 @@ class LiveUSBThread(QtCore.QThread):
self.sleep(1)
def installation_complete(self):
- self.emit(QtCore.SIGNAL("done()"))
+ GLib.idle_add(self.parent.on_installation_complete, None)
def run(self):
self.handler = LiveUSBLogHandler(self.status)
@@ -265,15 +267,16 @@ class LiveUSBThread(QtCore.QThread):
self.status(e.args[0])
self.status(_("LiveUSB creation failed!"))
self.live.log.exception(unicode(e))
+ self.live.log.debug(traceback.format_exc())
self.live.log.removeHandler(self.handler)
- self.progress.terminate()
+ self.progress.stop()
def set_max_progress(self, maximum):
- self.emit(QtCore.SIGNAL("maxprogress(int)"), maximum)
+ self.maximum = maximum
def update_progress(self, value):
- self.emit(QtCore.SIGNAL("progress(int)"), value)
+ GLib.idle_add(self.parent.progress, float(value) / maximum)
def __del__(self):
self.wait()
@@ -290,74 +293,61 @@ class LiveUSBLogHandler(logging.Handler):
self.cb(record.msg)
-class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
+class LiveUSBWindow(Gtk.ApplicationWindow):
""" Our main dialog class """
- def __init__(self, opts, args):
- self.in_process = False
- QtGui.QDialog.__init__(self)
- LiveUSBInterface.__init__(self)
- self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint)
+ def __init__(self, app=None, opts=None, args=None):
+ Gtk.ApplicationWindow.__init__(self, application=app)
+
self.opts = opts
self.args = args
+ self.in_process = False
self.signals_connected = []
- self.setupUi(self)
- self.titleLabel.setPixmap(QtGui.QPixmap(config['branding']['header']))
self.source_available = False
self.target_available = False
self.target_selected = False
self.persistence = False
+
+ self._build_ui()
+
self.update_start_button()
- self.startButton.setIcon(QtGui.QIcon.fromTheme("go-next"))
if self.opts.clone or config['download']['enabled']:
self.source_available = True
if self.opts.clone:
- self.sourceFileGroupBox.setVisible(False)
- self.orLabel.setVisible(False)
- self.downloadGroupBox.setVisible(False)
+ self.__box_source.set_visible(False)
if not config['download']['enabled']:
- self.orLabel.setVisible(False)
- self.downloadGroupBox.setVisible(False)
- if sys.platform == 'win32':
- self.driveBox.setGeometry(QtCore.QRect(10, 20, 145, 22))
- self.refreshDevicesButton = QtGui.QPushButton(self.targetGroupBox)
- self.refreshDevicesButton.setGeometry(QtCore.QRect(156, 16, 30, 26))
- self.refreshDevicesButton.setText("")
- icon = QtGui.QIcon()
- icon.addPixmap(QtGui.QPixmap(":/refresh.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.refreshDevicesButton.setIcon(icon)
- self.refreshDevicesButton.setFlat(True)
- self.refreshDevicesButton.setObjectName("refreshDevicesButton")
+ self.__box_source_dl.set_visible(False)
+ # FIXME: this may be useful when we'll support windows
+ #if sys.platform == 'win32':
+ # self.driveBox.setGeometry(QtCore.QRect(10, 20, 145, 22))
+ # self.refreshDevicesButton = QtGui.QPushButton(self.targetGroupBox)
+ # self.refreshDevicesButton.setGeometry(QtCore.QRect(156, 16, 30, 26))
+ # self.refreshDevicesButton.setText("")
+ # icon = QtGui.QIcon()
+ # icon.addPixmap(QtGui.QPixmap(":/refresh.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ # self.refreshDevicesButton.setIcon(icon)
+ # self.refreshDevicesButton.setFlat(True)
+ # self.refreshDevicesButton.setObjectName("refreshDevicesButton")
self.update_start_button()
self.live = LiveUSBCreator(opts=opts)
if self.opts.clone:
self.live.source = RunningLiveSystemSource(
path=config['running_liveos_mountpoint'])
- if self.opts.partition and config['persistence']['enabled']:
- self.overlayTitle.setVisible(False)
- # FIXME: Get the persistence checkbox back.
- # self.persistenceTitle.setVisible(True)
- elif config['persistence']['enabled']:
- self.overlayTitle.setVisible(True)
- # self.persistenceTitle.setVisible(False)
- else:
- self.overlayTitle.setVisible(False)
- # self.persistenceTitle.setVisible(False)
if not self.opts.clone:
self.populate_releases()
self.populate_devices()
self.downloader = None
- self.progress_thread = ProgressThread()
- self.download_progress = DownloadProgress()
+ self.progress_thread = ProgressThread(parent=self)
+ self.download_progress = DownloadProgress(parent=self)
self.live_thread = LiveUSBThread(live=self.live,
progress=self.progress_thread,
parent=self)
- self.connect_slots()
+ self.live.connect_drive_monitor(self.populate_devices)
self.confirmed = False
self.delete_existing_liveos_confirmed = False
# Intercept all liveusb INFO log messages, and display them in the gui
- self.handler = LiveUSBLogHandler(lambda x: self.textEdit.append(x))
+ self.handler = LiveUSBLogHandler(lambda x: self.append_to_log(x))
self.live.log.addHandler(self.handler)
if not self.opts.verbose:
self.live.log.removeHandler(self.live.handler)
@@ -366,7 +356,7 @@ class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
if args:
for arg in self.args:
if arg.lower().endswith('.iso') and os.path.exists(arg):
- self.selectfile(arg)
+ self.select_source_iso(arg)
# Determine if we have admin rights
if not self.opts.unprivileged and not self.live.is_admin():
@@ -375,33 +365,99 @@ class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
'the Properties. Under the Compatibility tab, check the "Run '
'this program as an administrator" box.'))
- def set_persistence(self):
- # FIXME: get persistencecheckbox back
- # if self.persistencecheckBox.isChecked():
- # self.persistence = True
- # else:
- # self.persistence = False
- self.persistence = False
+ # Show the UI
+ self.show()
+
+ def _build_ui(self):
+ # Set windows properties
+ self.set_deletable(True)
+ self.connect('delete-event', Gtk.main_quit)
+ self.set_title(_("Tails USB Installer"))
+
+ # Import window content from UI file
+ builder = Gtk.Builder.new_from_file(
+ os.path.join(_get_datadir(), 'liveusb-creator.ui'))
+ self.__box_installer = builder.get_object('box_installer')
+ self.__image_header = builder.get_object('image_header')
+ self.__infobar = builder.get_object('infobar')
+ self.__label_infobar_title = builder.get_object('label_infobar_title')
+ self.__label_infobar_details = builder.get_object('label_infobar_details')
+ self.__box_source = builder.get_object('box_source')
+ self.__box_source_file = builder.get_object('box_source_file')
+ self.__filechooserbutton_source_file = builder.get_object('liststore_source')
+ self.__box_source_dl = builder.get_object('box_source_dl')
+ self.__liststore_source_dl = builder.get_object('liststore_source_dl')
+ self.__combobox_source_dl = builder.get_object('combobox_source_dl')
+ self.__box_target = builder.get_object('box_target')
+ self.__combobox_target = builder.get_object('combobox_target')
+ self.__liststore_target = builder.get_object('liststore_target')
+ self.__textview_log = builder.get_object('textview_log')
+ self.__progressbar = builder.get_object('progressbar_progress')
+ self.__button_start = builder.get_object('button_start')
+
+ self.add(self.__box_installer)
+ builder.connect_signals(self)
+
+ # Add a cell renderer to the comboboxes
+ cell = Gtk.CellRendererText()
+ self.__combobox_target.pack_start(cell, True)
+ self.__combobox_target.add_attribute(cell, 'text', 0)
+
+ cell = Gtk.CellRendererText()
+ self.__combobox_source_dl.pack_start(cell, True)
+ self.__combobox_source_dl.add_attribute(cell, 'text', 0)
+
+ # Add image header
+ self.__image_header.set_from_file(
+ os.path.join(_get_datadir(), config['branding']['header']))
+ rgba = Gdk.RGBA()
+ rgba.parse(config['branding']['color'])
+ self.__image_header.override_background_color(Gtk.StateFlags.NORMAL, rgba)
+
+ def on_source_file_set(self, filechooserbutton):
+ self.select_source_iso(filechooserbutton.get_filename())
+
+ def on_start_clicked(self, button):
+ self.begin()
+
+ def on_infobar_response(self, infobar, response):
+ self.__infobar.set_visible(False)
+ self.__label_infobar_title.set_text("")
+ self.__label_infobar_details.set_text("")
+
+ def append_to_log(self, text):
+ if not text.endswith('\n'):
+ text = text + '\n'
+ iter = self.__textview_log.get_buffer().get_end_iter()
+ self.__textview_log.get_buffer().insert(iter, text)
+ self.__textview_log.scroll_to_iter(iter, 0, False, 0, 0)
def update_start_button(self):
if self.source_available and self.target_available:
- self.startButton.setEnabled(True)
+ self.__button_start.set_sensitive(True)
else:
- self.startButton.setEnabled(False)
+ self.__button_start.set_sensitive(False)
def populate_devices(self, *args, **kw):
if self.in_process or self.target_selected:
return
def add_devices():
- self.driveBox.clear()
+ self.__liststore_target.clear()
if not len(self.live.drives):
- self.textEdit.setPlainText(_("Unable to find any USB drive"))
+ self.__infobar.set_message_type(Gtk.MessageType.INFO)
+ self.__label_infobar_title.set_text(
+ _("No device suitable to install Tails could be found"))
+ self.__label_infobar_details.set_text(
+ _("Please plug a USB flash drive or SD card of at least %0.1f GB.")
+ % ((config['min_system_partition_size'] +
+ config['min_persistence_partition_size']) / 1000.))
+ self.__infobar.set_visible(True)
self.target_available = False
self.update_start_button()
return
else:
- self.textEdit.setPlainText(_("USB drive found"))
+ self.__infobar.set_visible(False)
self.live.log.debug('drives: %s' % self.live.drives)
for device, info in self.live.drives.items():
# Skip the device that is the source of the copy
@@ -437,189 +493,88 @@ class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
'model': info['model'],
'details': details
}
- self.driveBox.addItem(pretty_name, device)
+ self.__liststore_target.append([pretty_name, device])
self.target_available = True
+ self.__combobox_target.set_active(0)
self.update_start_button()
try:
self.live.detect_supported_drives(callback=add_devices)
except LiveUSBError, e:
- self.textEdit.setPlainText(e.args[0])
+ self.__infobar.set_message_type(Gtk.MessageType.ERROR)
+ self.__label_infobar_title.set_text(
+ _("An error happened while installing Tails"))
+ self.__label_infobar_details.set_text(e.args[0])
+ self.__infobar.set_visible(True)
+ self.append_to_log(e.args[0])
self.target_available = False
self.update_start_button()
def populate_releases(self):
- for release in [release['name'] for release in releases]:
- self.downloadCombo.addItem(release)
+ for release in [release['name'] for release in releases]:
+ self.__liststore_source_dl.append([release, None])
def refresh_releases(self):
self.live.log.info(_('Refreshing releases...'))
fedora_releases = get_fedora_releases()
- self.downloadCombo.clear()
+ self.__liststore_source_dl.clear()
for release in [release['name'] for release in fedora_releases]:
- self.downloadCombo.addItem(release)
+ self.__liststore_source_dl.add(release)
self.live.log.info(_('Releases updated!'))
- def connect_slots(self):
- self.connect(self, QtCore.SIGNAL('triggered()'), self.terminate)
- self.connect(self.isoBttn, QtCore.SIGNAL("clicked()"), self.selectfile)
- self.connect(self.startButton, QtCore.SIGNAL("clicked()"), self.begin)
- self.connect(self.overlaySlider, QtCore.SIGNAL("valueChanged(int)"),
- self.overlay_value)
- # FIXME: get persistencecheckbox back
- # self.connect(self.persistencecheckBox, QtCore.SIGNAL("clicked()"), self.set_persistence)
- self.connect(self.live_thread, QtCore.SIGNAL("status(PyQt_PyObject)"),
- self.status)
- self.connect(self.live_thread, QtCore.SIGNAL("finished()"),
- lambda: self.enable_widgets(True))
- self.connect(self.live_thread, QtCore.SIGNAL("terminated()"),
- lambda: self.enable_widgets(True))
- self.connect(self.live_thread, QtCore.SIGNAL("progress(int)"),
- self.progress)
- self.connect(self.live_thread, QtCore.SIGNAL("maxprogress(int)"),
- self.maxprogress)
- self.connect(self.progress_thread, QtCore.SIGNAL("progress(int)"),
- self.progress)
- self.connect(self.progress_thread, QtCore.SIGNAL("maxprogress(int)"),
- self.maxprogress)
- self.connect(self.download_progress, QtCore.SIGNAL("maxprogress(int)"),
- self.maxprogress)
- self.connect(self.download_progress, QtCore.SIGNAL("progress(int)"),
- self.progress)
- self.connect(self.live_thread, QtCore.SIGNAL("done()"),
- self.show_end_dialog)
- if hasattr(self, 'refreshDevicesButton'):
- self.connect(self.refreshDevicesButton, QtCore.SIGNAL("clicked()"),
- self.populate_devices)
- if hasattr(self, 'refreshReleasesButton'):
- self.connect(self.refreshReleasesButton, QtCore.SIGNAL("clicked()"),
- self.refresh_releases)
-
- self.live.connect_drive_monitor(self.populate_devices)
-
- @QtCore.pyqtSignature("int")
- def on_driveBox_currentIndexChanged(self, index):
- """ Change the maximum overlay size when each drive is selected.
-
- This sets the maximum megabyte size of the persistent storage slider
- to the number of free megabytes on the currently selected
- "Target Device". If the device is not mounted, or if it has more than
- 2gigs of free space, set the maximum to 2047mb, which is apparently
- the largest file we can/should store on a vfat partition.
- """
- drive = unicode(self.driveBox.itemData(index).toString())
- logging.debug("drive=%s" % drive)
- self._refresh_overlay_slider(drive)
-
- def _refresh_overlay_slider(self, drive=None):
- """
- Reset the persistent storage slider based on the amount of free space
- on the device and the ISO size.
- """
- if not drive:
- drive = self.get_selected_drive()
- if not drive:
- return
-
- device = self.live.drives[drive]
- freespace = device['free']
- device_size = device['size'] / 1024**2
- current_overlay = self.overlaySlider.value()
-
- if device['fsversion'] == 'FAT32':
- self.live.log.debug(_('Partition is FAT32; Restricting overlay '
- 'size to 4G'))
- max_space = MAX_FAT32
- elif device['fsversion'] == 'FAT16':
- self.live.log.debug(_('Partition is FAT16; Restricting overlay '
- 'size to 2G'))
- max_space = MAX_FAT16
- else:
- max_space = MAX_EXT
-
- if freespace:
- if freespace > device_size:
- freespace = device_size
- if freespace > max_space:
- freespace = max_space
-
- if not device['mount']:
- self.live.log.warning(_('Device is not yet mounted, so we cannot '
- 'determine the amount of free space.'))
- if not freespace:
- freespace = device_size
- else:
- if not freespace:
- self.live.log.warning(_('No free space on device %(device)s') % {'device': drive})
- freespace = 0
-
- # Subtract the size of the ISO from our maximum overlay size
- if self.live.source and self.live.source.size:
- iso_size = self.live.source.size / 1024**2
- if freespace + iso_size > device['free']:
- freespace -= iso_size
-
- freespace -= 1 # Don't fill the device 100%
-
- if freespace < 0:
- freespace = 0
- if freespace < current_overlay:
- self.overlaySlider.setValue(freespace)
- self.live.overlay = self.overlaySlider.value()
-
- self.overlaySlider.setMaximum(freespace)
-
def progress(self, value):
- self.progressBar.setValue(value)
-
- def maxprogress(self, value):
- self.progressBar.setMaximum(value)
+ self.__progressbar.set_fraction(value)
def status(self, text):
if isinstance(text, Exception):
text = text.args[0]
elif isinstance(text, int):
text = str(text)
- self.textEdit.append(text)
+ self.append_to_log(text)
def enable_widgets(self, enabled=True):
if enabled:
self.update_start_button()
else:
- self.startButton.setEnabled(False)
- self.driveBox.setEnabled(enabled and not self.target_selected)
- self.overlaySlider.setEnabled(enabled)
- self.isoBttn.setEnabled(enabled)
- self.downloadCombo.setEnabled(enabled)
- if hasattr(self, 'refreshDevicesButton'):
- self.refreshDevicesButton.setEnabled(enabled)
- if hasattr(self, 'refreshReleasesButton'):
- self.refreshReleasesButton.setEnabled(enabled)
+ self.__button_start.set_sensitive(False)
+ self.__box_source.set_sensitive(enabled)
+ self.__combobox_source_dl.set_sensitive(enabled)
+ self.__combobox_target.set_sensitive(enabled and not self.target_selected)
+ # FIXME: this may be useful when we'll support windows
+ #if hasattr(self, 'refreshDevicesButton'):
+ # self.refreshDevicesButton.setEnabled(enabled)
+ #if hasattr(self, 'refreshReleasesButton'):
+ # self.refreshReleasesButton.setEnabled(enabled)
self.in_process = not enabled
- def overlay_value(self, value):
- self.overlayTitle.setTitle(_("Persistent Storage") + " (%d MB)" % value)
-
def get_selected_drive(self):
- drive = self.driveBox.itemData(self.driveBox.currentIndex()).toString()
+ drive = self.__liststore_target.get(
+ self.__combobox_target.get_active_iter(), 1)[0]
if drive:
return _to_unicode(drive)
- def show_end_dialog(self):
- reply = QtGui.QMessageBox.information(self,
- _("Installation complete!"),
- _("Installation was completed. Press OK to close this program."),
- QtGui.QMessageBox.Ok)
- if reply == QtGui.QMessageBox.Ok:
- self.close()
+ def on_installation_complete(self, data=None):
+ # FIXME: replace content by a specific page
+ dialog = Gtk.MessageDialog(parent=self,
+ flags=Gtk.DialogFlags.DESTROY_WITH_PARENT,
+ message_type=Gtk.MessageType.INFO,
+ buttons=Gtk.ButtonsType.CLOSE,
+ message_format=_("Installation complete!"))
+ dialog.format_secondary_text(_("Installation was completed. Press OK "
+ "to close this program."))
+ dialog.run()
+ self.close()
def show_confirmation_dialog(self, title, message):
- reply = QtGui.QMessageBox.question(self,
- title,
- message,
- QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
- QtGui.QMessageBox.No)
- if (reply == QtGui.QMessageBox.Yes):
+ dialog = Gtk.MessageDialog(parent=self,
+ flags=Gtk.DialogFlags.DESTROY_WITH_PARENT,
+ message_type=Gtk.MessageType.QUESTION,
+ buttons=Gtk.ButtonsType.YES_NO,
+ message_format=title)
+ dialog.format_secondary_text(message)
+ reply = dialog.run()
+ dialog.hide()
+ if (reply == Gtk.ResponseType.YES):
return True
else:
self.target_selected = None
@@ -632,7 +587,6 @@ class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
This method is called when the "Install Tails" button is clicked.
"""
self.enable_widgets(False)
- self.live.overlay = self.overlaySlider.value()
if not self.target_selected:
self.live.drive = self.get_selected_drive()
self.target_selected = True
@@ -647,7 +601,6 @@ class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
if not self.opts.partition:
try:
self.live.mount_device()
- self._refresh_overlay_slider() # To reflect the drives free space
except LiveUSBError, e:
self.status(e.args[0])
self.enable_widgets(True)
@@ -661,7 +614,8 @@ class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
if not self.confirmed:
if self.show_confirmation_dialog(
_("Please confirm your device selection"),
- _("You are going to install Tails on the %(size)s %(vendor)s %(model)s device (%(device)s). "
+ _("You are going to install Tails on the "
+ "%(size)s %(vendor)s %(model)s device (%(device)s). "
"All data on the selected device will be lost. "
"Continue?") %
{'vendor': self.live.drive['vendor'],
@@ -677,18 +631,16 @@ class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
# let's go on
self.confirmed = False
else:
- msg = (_("You are going to upgrade Tails on the %(parent_size)s %(vendor)s %(model)s device (%(device)s). "
+ msg = (_("You are going to upgrade Tails on the %(parent_size)s "
+ "%(vendor)s %(model)s device (%(device)s). "
"Any persistent volume on this device will remain unchanged. "
"Continue?") % {
'vendor': self.live.drive['vendor'],
'model': self.live.drive['model'],
'device': self.live.drive['device'],
- 'parent_size': _format_bytes_in_gb(self.live.drive['parent_size'])
+ 'parent_size': _format_bytes_in_gb(self.live.drive['parent_size'])
}
)
- if self.live.existing_overlay() and self.overlaySlider.value():
- msg = msg + _("Warning: Creating a new persistent overlay "
- "will delete your existing one.")
if self.show_confirmation_dialog(_("Please confirm your device selection"), msg):
# The user has confirmed that they wish to overwrite their
# existing Live OS. Here we delete it first, in order to
@@ -720,13 +672,8 @@ class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
self.downloader = ReleaseDownloader(
self.downloadCombo.currentText(),
progress=self.download_progress,
- proxies=self.live.get_proxies())
- self.connect(self.downloader,
- QtCore.SIGNAL("dlcomplete(PyQt_PyObject)"),
- self.download_complete)
- self.connect(self.downloader,
- QtCore.SIGNAL("status(PyQt_PyObject)"),
- self.status)
+ proxies=self.live.get_proxies(),
+ parent=self)
self.downloader.start()
else:
raise NotImplementedError
@@ -748,29 +695,27 @@ class LiveUSBDialog(QtGui.QDialog, LiveUSBInterface):
self.status(_("You can try again to resume your download"))
self.enable_widgets(True)
- def selectfile(self, isofile=None):
- if not isofile:
- isofile = QtGui.QFileDialog.getOpenFileName(self,
- _("Select Live ISO"), ".", "ISO (*.iso)" )
- if isofile:
- if not os.access(isofile, os.R_OK):
- self.status(_("The selected file is unreadable. "
- "Please fix its permissions or select another file."))
- return False
- try:
- self.live.source = LocalIsoSource(path=isofile)
- except Exception, e:
- self.status(_("Unable to use the selected file. "
- "You may have better luck if you move your ISO "
- "to the root of your drive (ie: C:\)"))
- self.live.log.exception(e.args[0])
- return False
-
- self.live.log.info(_("%(filename)s selected")
- % {'filename': os.path.basename(self.live.source.path)})
- self.source_available = True
- self.update_start_button()
- self._refresh_overlay_slider()
+ def on_source_file_set(self, filechooserbutton):
+ self.select_source_iso(filechooserbutton.get_filename())
+
+ def select_source_iso(self, isofile):
+ if not os.access(isofile, os.R_OK):
+ self.status(_("The selected file is unreadable. "
+ "Please fix its permissions or select another file."))
+ return False
+ try:
+ self.live.source = LocalIsoSource(path=isofile)
+ except Exception, e:
+ self.status(_("Unable to use the selected file. "
+ "You may have better luck if you move your ISO "
+ "to the root of your drive (ie: C:\)"))
+ self.live.log.exception(e.args[0])
+ return False
+
+ self.live.log.info(_("%(filename)s selected")
+ % {'filename': os.path.basename(self.live.source.path)})
+ self.source_available = True
+ self.update_start_button()
def terminate(self):
""" Terminate any processes that we have spawned """
diff --git a/liveusb/launcher.py b/liveusb/launcher.py
index 410b4e3..3fee910 100644
--- a/liveusb/launcher.py
+++ b/liveusb/launcher.py
@@ -1,62 +1,53 @@
# -*- coding: utf-8 -*-
#
-# Copyright © 2012, Tails developers <tails@boum.org>
+# Copyright © 2012-2015, Tails developers <tails@boum.org>
"""
A unified launcher for the most common LiveUSBCreator usecases
"""
-from liveusb import LiveUSBLauncherInterface, _
-from liveusb.utils import is_running_from_tails
-from PyQt4 import QtCore, QtGui
import os
-class LiveUSBLauncher(QtGui.QApplication):
- """ Main application class """
- def __init__(self, args):
- QtGui.QApplication.__init__(self, args)
- self.mywindow = LiveUSBLauncherDialog(args)
- self.mywindow.show()
- self.exec_()
+from gi.repository import Gtk
+
+from liveusb import _
+from liveusb.utils import _get_datadir, is_running_from_tails
-class LiveUSBLauncherDialog(QtGui.QDialog, LiveUSBLauncherInterface):
+class LiveUSBLauncherWindow(Gtk.ApplicationWindow):
""" Our main dialog class """
def __init__(self, args):
- QtGui.QDialog.__init__(self)
- self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint)
+ Gtk.ApplicationWindow.__init__(self)
+
self.args = args
- self.setupUi(self)
- self.connect_slots()
if os.getenv('DEBUG', 0):
self.args = self.args + ['--verbose']
- def connect_slots(self):
- if is_running_from_tails():
- self.connect(self.cloneInstallButton, QtCore.SIGNAL("clicked()"),
- self.run_clone_install)
- self.connect(self.cloneUpgradeButton, QtCore.SIGNAL("clicked()"),
- self.run_clone_upgrade)
- self.connect(self.upgradeFromIsoButton, QtCore.SIGNAL("clicked()"),
- self.run_upgrade_from_iso)
- else:
- self.connect(self.installFromIsoButton, QtCore.SIGNAL("clicked()"),
- self.run_install_from_iso)
- self.connect(self.upgradeFromIsoButton, QtCore.SIGNAL("clicked()"),
- self.run_upgrade_from_iso)
+ self.connect('delete-event', Gtk.main_quit)
+ builder = Gtk.Builder.new_from_file(
+ os.path.join(_get_datadir(), 'liveusb-creator-launcher.ui'))
+ builder.connect_signals(self)
+ self.add(builder.get_object('box_launcher'))
+ self.set_title(_("Tails USB Installer"))
+
+ if not is_running_from_tails():
+ builder.get_object('box_tails').set_visible(False)
+ builder.get_object('box_standalone').set_visible(True)
+
+ self.show()
def run_live_usb_creator(self, args):
args = ['liveusb-creator'] + args + self.args
os.execvp('liveusb-creator', args)
- def run_clone_install(self):
+ def on_clone_install(self, widget, data=None):
self.run_live_usb_creator([ '-u', '-n', '--clone', '-P', '-m', '-x' ])
- def run_clone_upgrade(self):
+ def on_clone_upgrade(self, widget, data=None):
self.run_live_usb_creator([ '-u', '-n', '-x', '--clone' ])
- def run_upgrade_from_iso(self):
+ def on_upgrade_iso(self, widget, data=None):
self.run_live_usb_creator([ '-u', '-n', '-x' ])
- def run_install_from_iso(self):
+ def on_install_iso(self, widget, data=None):
self.run_live_usb_creator([ '-u', '-n', '-P', '-m', '-x' ])
diff --git a/liveusb/launcher_ui.py b/liveusb/launcher_ui.py
deleted file mode 100644
index ce2ed61..0000000
--- a/liveusb/launcher_ui.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'data/liveusb-creator-launcher.ui'
-#
-# Created: Thu Jun 12 18:09:09 2014
-# by: PyQt4 UI code generator 4.9.3
-#
-# WARNING! All changes made in this file will be lost!
-
-
-import sys
-if sys.platform == "win32":
- from liveusb import utf8_gettext as _
-else:
- from liveusb import _
-from liveusb import branding
-
-def translate_and_brand(string):
- return _(string) % branding
-
-from PyQt4 import QtCore, QtGui
-
-try:
- _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
- _fromUtf8 = lambda s: s
-
-class Ui_Dialog(object):
- def setupUi(self, Dialog):
- Dialog.setObjectName(_fromUtf8("Dialog"))
- Dialog.resize(530, 363)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
- Dialog.setSizePolicy(sizePolicy)
- Dialog.setMinimumSize(QtCore.QSize(512, 300))
- Dialog.setMaximumSize(QtCore.QSize(16777215, 16777215))
- Dialog.setBaseSize(QtCore.QSize(512, 300))
- self.widget = QtGui.QWidget(Dialog)
- self.widget.setGeometry(QtCore.QRect(2, 9, 520, 349))
- self.widget.setObjectName(_fromUtf8("widget"))
- self.verticalLayout = QtGui.QVBoxLayout(self.widget)
- self.verticalLayout.setMargin(0)
- self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
- self.gridLayout = QtGui.QGridLayout()
- self.gridLayout.setContentsMargins(6, -1, 6, -1)
- self.gridLayout.setVerticalSpacing(6)
- self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
- self.cloneInstallButton = QtGui.QPushButton(self.widget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.cloneInstallButton.sizePolicy().hasHeightForWidth())
- self.cloneInstallButton.setSizePolicy(sizePolicy)
- self.cloneInstallButton.setMinimumSize(QtCore.QSize(200, 96))
- self.cloneInstallButton.setMaximumSize(QtCore.QSize(16777215, 16777215))
- self.cloneInstallButton.setBaseSize(QtCore.QSize(200, 96))
- font = QtGui.QFont()
- font.setPointSize(12)
- font.setBold(True)
- font.setWeight(75)
- self.cloneInstallButton.setFont(font)
- self.cloneInstallButton.setIconSize(QtCore.QSize(64, 64))
- self.cloneInstallButton.setObjectName(_fromUtf8("cloneInstallButton"))
- self.gridLayout.addWidget(self.cloneInstallButton, 0, 0, 1, 1)
- self.cloneInstallLabel = QtGui.QLabel(self.widget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.cloneInstallLabel.sizePolicy().hasHeightForWidth())
- self.cloneInstallLabel.setSizePolicy(sizePolicy)
- self.cloneInstallLabel.setMinimumSize(QtCore.QSize(300, 0))
- self.cloneInstallLabel.setMaximumSize(QtCore.QSize(16777215, 16777215))
- self.cloneInstallLabel.setBaseSize(QtCore.QSize(300, 96))
- self.cloneInstallLabel.setWordWrap(True)
- self.cloneInstallLabel.setMargin(6)
- self.cloneInstallLabel.setObjectName(_fromUtf8("cloneInstallLabel"))
- self.gridLayout.addWidget(self.cloneInstallLabel, 0, 1, 1, 1)
- self.cloneUpgradeButton = QtGui.QPushButton(self.widget)
- self.cloneUpgradeButton.setEnabled(True)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.cloneUpgradeButton.sizePolicy().hasHeightForWidth())
- self.cloneUpgradeButton.setSizePolicy(sizePolicy)
- self.cloneUpgradeButton.setMinimumSize(QtCore.QSize(200, 96))
- self.cloneUpgradeButton.setBaseSize(QtCore.QSize(0, 96))
- font = QtGui.QFont()
- font.setPointSize(12)
- font.setBold(True)
- font.setWeight(75)
- self.cloneUpgradeButton.setFont(font)
- self.cloneUpgradeButton.setIconSize(QtCore.QSize(128, 128))
- self.cloneUpgradeButton.setObjectName(_fromUtf8("cloneUpgradeButton"))
- self.gridLayout.addWidget(self.cloneUpgradeButton, 1, 0, 1, 1)
- self.cloneUpgradeLabel = QtGui.QLabel(self.widget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.cloneUpgradeLabel.sizePolicy().hasHeightForWidth())
- self.cloneUpgradeLabel.setSizePolicy(sizePolicy)
- self.cloneUpgradeLabel.setMinimumSize(QtCore.QSize(300, 0))
- self.cloneUpgradeLabel.setMaximumSize(QtCore.QSize(16777215, 16777215))
- self.cloneUpgradeLabel.setBaseSize(QtCore.QSize(300, 96))
- self.cloneUpgradeLabel.setWordWrap(True)
- self.cloneUpgradeLabel.setMargin(6)
- self.cloneUpgradeLabel.setObjectName(_fromUtf8("cloneUpgradeLabel"))
- self.gridLayout.addWidget(self.cloneUpgradeLabel, 1, 1, 1, 1)
- self.upgradeFromIsoButton = QtGui.QPushButton(self.widget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.upgradeFromIsoButton.sizePolicy().hasHeightForWidth())
- self.upgradeFromIsoButton.setSizePolicy(sizePolicy)
- self.upgradeFromIsoButton.setMinimumSize(QtCore.QSize(200, 96))
- self.upgradeFromIsoButton.setBaseSize(QtCore.QSize(0, 96))
- font = QtGui.QFont()
- font.setPointSize(12)
- font.setBold(True)
- font.setWeight(75)
- self.upgradeFromIsoButton.setFont(font)
- self.upgradeFromIsoButton.setIconSize(QtCore.QSize(128, 128))
- self.upgradeFromIsoButton.setObjectName(_fromUtf8("upgradeFromIsoButton"))
- self.gridLayout.addWidget(self.upgradeFromIsoButton, 2, 0, 1, 1)
- self.upgradeFromIsoLabel = QtGui.QLabel(self.widget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.upgradeFromIsoLabel.sizePolicy().hasHeightForWidth())
- self.upgradeFromIsoLabel.setSizePolicy(sizePolicy)
- self.upgradeFromIsoLabel.setMinimumSize(QtCore.QSize(300, 0))
- self.upgradeFromIsoLabel.setMaximumSize(QtCore.QSize(16777215, 16777215))
- self.upgradeFromIsoLabel.setBaseSize(QtCore.QSize(300, 96))
- self.upgradeFromIsoLabel.setWordWrap(True)
- self.upgradeFromIsoLabel.setMargin(6)
- self.upgradeFromIsoLabel.setObjectName(_fromUtf8("upgradeFromIsoLabel"))
- self.gridLayout.addWidget(self.upgradeFromIsoLabel, 2, 1, 1, 1)
- self.verticalLayout.addLayout(self.gridLayout)
- self.helpLabel = QtGui.QLabel(self.widget)
- self.helpLabel.setMargin(6)
- self.helpLabel.setObjectName(_fromUtf8("helpLabel"))
- self.verticalLayout.addWidget(self.helpLabel)
-
- self.retranslateUi(Dialog)
- QtCore.QMetaObject.connectSlotsByName(Dialog)
-
- def retranslateUi(self, Dialog):
- Dialog.setWindowTitle(translate_and_brand('%(distribution)s Installer'))
- self.cloneInstallButton.setText(translate_and_brand('Clone\n&&\nInstall'))
- self.cloneInstallLabel.setText(translate_and_brand('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n<html><head><meta name="qrichtext" content="1" /><style type="text/css">\np, li { white-space: pre-wrap; }\n</style></head><body style=" font-family:\'Sans Serif\'; font-size:11pt; font-weight:400; font-style:normal;">\n<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Copy the running Tails onto a USB stick or SD card. All data on the target drive will be lost.</span></p></body></html>'))
- self.cloneUpgradeButton.setText(translate_and_brand('Clone\n&&\nUpgrade'))
- self.cloneUpgradeLabel.setText(translate_and_brand('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n<html><head><meta name="qrichtext" content="1" /><style type="text/css">\np, li { white-space: pre-wrap; }\n</style></head><body style=" font-family:\'Sans Serif\'; font-size:11pt; font-weight:400; font-style:normal;">\n<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Copy the running Tails onto an already installed Tails device. Other partitions found on the stick are preserved.</span></p></body></html>'))
- self.upgradeFromIsoButton.setText(translate_and_brand('Upgrade from ISO'))
- self.upgradeFromIsoLabel.setText(translate_and_brand('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n<html><head><meta name="qrichtext" content="1" /><style type="text/css">\np, li { white-space: pre-wrap; }\n</style></head><body style=" font-family:\'Sans Serif\'; font-size:11pt; font-weight:400; font-style:normal;">\n<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Upgrade an already installed Tails device from a new ISO image.</span></p></body></html>'))
- self.helpLabel.setText(translate_and_brand('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n<html><head><meta name="qrichtext" content="1" /><style type="text/css">\np, li { white-space: pre-wrap; }\n</style></head><body style=" font-family:\'Sans Serif\'; font-size:11pt; font-weight:400; font-style:normal;">\n<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Need help? Read the </span><a href="file:///usr/share/doc/tails/website/doc/first_steps/installation.en.html"><span style=" text-decoration: underline; color:#0000ff;">documentation</span></a><span style=" font-size:11pt;">.</span></p></body></html>'))
-
-import resources_rc
diff --git a/liveusb/resources_rc.py b/liveusb/resources_rc.py
deleted file mode 100755
index a76ec0e..0000000
--- a/liveusb/resources_rc.py
+++ /dev/null
@@ -1,1590 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Resource object code
-#
-# Created: Thu Jun 12 18:09:09 2014
-# by: The Resource Compiler for PyQt (Qt v4.8.2)
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore
-
-qt_resource_data = "\
-\x00\x00\x3e\x3a\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x01\xae\x00\x00\x00\x48\x08\x06\x00\x00\x00\xae\x9f\x11\xb1\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
-\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
-\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd8\x05\x12\
-\x03\x2e\x34\x28\xbc\x67\x46\x00\x00\x20\x00\x49\x44\x41\x54\x78\
-\xda\xed\x9d\x77\x7c\x1c\xd5\xbd\xf6\xbf\x53\xb7\xaa\xdb\x92\x6d\
-\xb9\xc8\xbd\x17\x0c\xb8\x1b\x63\xba\xe9\x17\x4c\x31\x49\x20\x40\
-\x02\xc9\xa5\x85\xf4\x46\x08\x10\x2e\x29\x24\x10\xe0\x4d\xe8\xe5\
-\x26\x04\x08\x71\x08\xfd\x02\x09\xcd\xdd\xb8\xcb\x36\xb8\x4a\xb2\
-\x6c\xab\xf7\xed\x3b\xe5\xfd\x63\x76\x47\xbb\xd2\xaa\xb8\x62\xc3\
-\x3c\x9f\xcf\x4a\xbb\x53\xce\xcc\x9c\x9d\x3d\xcf\x3c\xbf\x76\x04\
-\xd3\x34\x4d\x1c\x38\x70\xe0\xc0\x81\x83\xe3\x04\xa2\xd3\x05\x0e\
-\x1c\x38\x70\xe0\xc0\x21\x2e\x07\x0e\x1c\x38\x70\xe0\xc0\x21\x2e\
-\x07\x0e\x1c\x38\x70\xe0\xc0\x21\x2e\x07\x0e\x1c\x38\x70\x70\x9c\
-\x41\x76\xba\xc0\x81\x03\x07\x5f\x56\x18\x86\x81\x61\x18\xe8\xba\
-\x6e\xbf\xff\x22\xc4\xab\x09\x82\x60\xbf\x00\x44\x51\x44\x14\x45\
-\x04\x41\x40\x14\xc5\xb4\x6d\x1c\xe2\x72\x70\x4c\xc0\x34\x4d\xfe\
-\xbd\x7c\x0b\x6b\x37\x97\xb1\x76\x4b\x39\xeb\xb7\x96\x13\x8d\x69\
-\x4c\x1d\x5f\xc2\xd4\x71\x25\x9c\x38\xa1\x84\xb3\xe7\x4c\x44\x51\
-\x9c\xaf\xdf\xc1\x97\x17\xf1\x78\x1c\x4d\xd3\x88\xc7\xe3\xc4\xe3\
-\xf1\x2f\x05\x71\x25\x5f\x92\x24\xd9\xff\x3b\x12\xdb\x71\x71\x7d\
-\x4e\x38\xfc\x17\x0b\x65\x7b\xeb\xb8\xf1\x8e\xa7\xf9\xf8\x93\x6d\
-\xdd\x6e\x37\x61\xd4\x40\x9e\xfa\x9f\x6f\x30\x79\xcc\x60\xa7\xd3\
-\x1c\x7c\xe9\x1e\xec\xe2\xf1\x38\xb1\x58\x8c\x70\x38\x4c\x3c\x1e\
-\x27\x14\x0a\x11\x8b\xc5\xd0\x75\xfd\x0b\x41\x5c\xa9\xea\x4a\x10\
-\x04\x24\x49\x42\x96\x65\x14\x45\xc9\xb8\x4c\x96\x65\x7b\x59\x92\
-\xd4\x1c\xe2\x72\x70\x54\xf0\xf8\x4b\x1f\xf0\x93\xfb\xff\x4e\x30\
-\x1c\xed\xb4\x4e\x55\x55\x2e\xbe\xe0\x54\xa6\x4d\x1e\x8e\x24\x0a\
-\xfc\xf5\xf5\x95\x6c\x5c\xb7\x89\x9f\xdc\x70\x1e\x3f\xbe\xe1\x02\
-\x24\xc9\x71\x77\x3a\xf8\x62\x91\x53\x57\xcb\x63\xb1\x18\xb1\x58\
-\x8c\xd6\xd6\x56\xc2\xe1\x30\x6d\x6d\x6d\x44\x22\x91\x34\xe5\x75\
-\xbc\xa9\xab\x4c\xc4\x95\x54\x54\x49\x02\x4b\x5d\xa6\x28\x0a\x2e\
-\x97\x0b\x97\xcb\x65\x93\x95\xaa\xaa\x69\x9f\x65\x59\xee\x56\x85\
-\x7d\x9e\xea\xcc\x21\xae\x2f\x08\xfe\xf2\xea\x32\xbe\xf9\xb3\xa7\
-\x32\xae\x1b\x3b\x66\x18\x7f\xb9\xff\xdb\x4c\x28\x29\xb0\x97\xed\
-\xae\x09\x30\xe1\x86\xbf\x60\xec\x29\xe5\x8e\x1b\xce\xe6\x67\xdf\
-\xbe\xc8\xe9\x44\x07\xc7\x3d\x74\x5d\xb7\xfd\x55\x99\xd4\x93\x69\
-\x9a\x68\x9a\x46\x20\x10\xa0\xa5\xa5\x85\xd6\xd6\x56\xaa\xf7\x37\
-\xb0\xa7\xbc\x86\xa6\x86\x36\x74\xdd\xe4\x78\x1d\x11\x05\x01\x44\
-\x49\x40\x51\x24\x14\x55\xb4\xfe\xbb\x64\x54\x55\x42\x75\xcb\xf8\
-\xfd\x1e\x3c\x1e\x37\xb2\x2c\xdb\x2f\x45\x51\x70\xbb\xdd\x36\x89\
-\xa5\x7e\x4e\xaa\xb0\x24\x41\xa5\x2a\xb8\xe4\xff\x54\x52\x74\x88\
-\xcb\xc1\x01\xa1\xb2\xaa\x91\x13\xff\xeb\x0e\x5a\x03\xe1\x4e\xeb\
-\x5c\x2e\x95\x95\xff\xba\x8f\xb1\x83\xf2\x00\x58\xba\x79\x3f\xdb\
-\xf6\x36\xf1\xee\xe6\x7a\xde\x58\xb3\x17\x33\xdc\x8a\xb8\x67\x3d\
-\xcb\x5e\xf8\xb9\x63\x36\x74\x70\x5c\x2b\x2c\x4d\xd3\xd0\x34\x8d\
-\x70\x38\x8c\xa6\x69\x19\x95\x53\x72\xbb\xd6\xd6\x56\xaa\xab\x6a\
-\xf9\x64\xf9\x76\x56\x7e\xb4\x83\x7d\x15\x4d\xb4\xb4\x44\xd0\xe2\
-\x3a\x71\x55\x44\x97\x93\x03\xb1\x09\xa4\x2a\x8b\xe4\x70\x29\x74\
-\xf8\xdc\xdd\x32\x33\x7d\x11\x19\x76\x49\x69\x5e\x00\x04\xc3\x44\
-\x38\x88\x91\x59\x92\x45\x14\x55\x42\x55\x44\xdc\x2e\x09\x97\x24\
-\xe1\x76\x49\xb8\x5d\x32\xfe\x6c\x37\x85\xc5\x59\x14\xf5\xf7\x53\
-\x34\x20\x9b\x9c\x5c\x3f\x6e\xb7\x1b\x45\x51\x6c\xc2\xf2\x7a\xbd\
-\xa8\xaa\x8a\xc7\xe3\xc1\xed\x76\xdb\x8a\x2d\x55\x65\x25\x49\x2a\
-\xa9\xdc\x92\xca\x4c\x14\x45\x9b\xec\x8e\x34\x1c\xef\xfc\x17\xe0\
-\x07\x7b\xc3\xcf\x9f\xca\x48\x5a\x00\x8b\x16\x9e\xcd\xd8\x41\x79\
-\x98\x26\x9c\x72\xfd\x03\x7c\xb2\xba\xd4\xba\x01\xfd\xf9\x88\x25\
-\x27\x20\x78\xb2\xd1\xbd\xf9\x5c\xff\xd3\x27\x59\xf1\xd2\x2f\x9c\
-\x80\x0d\x07\xc7\xad\xd2\x8a\xc5\x62\x04\x83\x41\xc2\xe1\x30\xa1\
-\x50\x88\x78\x3c\x9e\xd1\x64\xa8\xeb\x3a\xa1\x60\x98\x17\x9f\x59\
-\xca\xf2\x0f\x76\x10\x68\x8d\x62\x60\x12\xf5\x29\x84\xfb\xb8\x30\
-\x64\x11\xb3\xa7\xb1\x57\xa0\x6b\x32\x3a\x2c\x8a\xe2\x30\xb4\x11\
-\xd3\x10\xd0\x20\x04\x82\x61\x20\x56\x9a\xb8\xb7\xd5\xe0\x95\x25\
-\xb2\x65\x99\x41\xfd\xbc\x0c\x19\x9e\x47\xc9\x88\x3e\x14\xf5\xcb\
-\xc5\xeb\x71\xa3\xba\x54\x7c\x3e\x1f\x7e\xbf\xbf\x93\xa9\x30\xe9\
-\x03\x4b\x12\x54\x92\xf0\x52\xcd\x8c\xba\xae\xdb\xcb\x1c\xe2\x72\
-\xd0\x25\xd6\x6c\x2e\xe3\x83\x55\x9f\x76\xb9\xfe\xc4\x09\x25\x00\
-\xfc\x7b\x5d\x85\x4d\x5a\x00\x66\xa0\x11\x42\x2d\xe0\xcd\x01\x4f\
-\x36\x9b\xb7\xef\xe4\x9d\xa5\xa5\x9c\x3f\xff\x04\xa7\x53\x1d\x1c\
-\x77\x0f\x6f\xc9\x00\x8b\xb6\xb6\x36\x1a\x1a\x1a\x08\x87\xc3\xc4\
-\x62\xb1\x8c\xc4\x15\x09\xc7\x79\xfb\x95\x0d\xbc\xf3\x2f\xeb\xf7\
-\x60\x48\x02\x81\x7c\x17\x11\xbf\x92\x50\x14\x02\x22\x02\xc7\x65\
-\xa4\xb8\x99\xf2\xc6\x04\x93\x84\xe9\xd3\x14\xd1\x4c\x88\x99\x26\
-\xad\x98\x54\x1b\x71\x76\x54\x36\xa3\xec\x6c\x44\x7e\x6d\x3b\x25\
-\x03\x7c\x9c\x70\x52\x7f\x46\x0c\xed\x43\x51\x51\x0e\xfe\x2c\x2f\
-\x3e\x9f\x2f\x8d\x80\x52\x83\x37\x92\xca\xcb\xeb\xf5\xe2\x76\xbb\
-\x6d\xe2\xf2\x78\x3c\xb6\xc9\xf1\x48\x12\x98\x43\x5c\xc7\x39\xd6\
-\x6e\x2e\xef\x76\x7d\xbf\x3e\xd9\x00\xac\xde\x5c\x91\xe9\x17\x9f\
-\xb8\x21\x45\xcc\x44\x5b\x0e\x71\x39\x38\x5e\x89\x2b\x16\x8b\x59\
-\x81\x16\xd1\x08\x86\xa9\x23\x4a\x02\x02\x02\x24\x43\xc3\x11\x40\
-\x80\x96\xc6\x28\xd9\x59\xb9\x5c\x74\xc5\x4c\x1a\xea\x03\xac\xd8\
-\xbd\x97\x28\x71\x24\x49\x44\x96\x44\x14\x59\x46\x96\x45\x44\x41\
-\x4c\x23\xaf\x63\x8d\xc8\x3a\x71\xb2\x69\xf5\x85\x99\x24\x2d\xd3\
-\xb4\xc2\xfb\x8d\x64\xbe\x5a\xf2\xb3\x45\x66\x86\x64\x12\xf7\x08\
-\xc4\x3d\x12\xdb\x43\x71\xf4\xcf\xea\x09\x04\xa3\x8c\x08\x07\x29\
-\xec\x93\x85\xc7\xa3\x22\x08\x60\x60\x22\x98\x56\xdf\x89\xa2\x15\
-\xb4\xe1\x52\x5d\xb8\xdd\x6e\x02\x81\x00\xaa\xaa\xe2\x76\xbb\xf1\
-\xfb\xfd\x44\xa3\x51\x9b\xcc\x3c\x1e\x8f\x4d\x5e\x87\xdb\x7c\xe8\
-\x10\xd7\x71\x8e\xf5\x5b\xbb\x27\xae\x2e\xef\x17\x6f\x36\xf8\x72\
-\xad\xfb\x3d\xd4\x0a\xc0\xba\x1e\xda\x72\xe0\xe0\x58\x44\x32\x18\
-\x23\x16\x8b\x11\xd7\xe2\x64\x65\x5b\xa6\x2e\x49\x92\x2c\x9f\x91\
-\x28\x22\x0a\x02\x82\x60\x99\xbd\x86\x96\xc0\xc9\xd3\x27\x23\x08\
-\x22\xe1\x70\x8c\x4d\x3b\xf7\xf1\xd8\xcb\x4b\xd8\xf0\x69\x25\x1e\
-\xb7\x82\xd7\xe3\xc2\xa5\x2a\x48\xa2\xd0\xc1\xbf\x03\x9d\x9d\x52\
-\x9f\x2f\x61\x67\x5a\x66\x18\xa6\x45\x60\xa6\x45\x58\xba\x61\xa2\
-\xe9\x3a\x5a\x5c\x47\x8b\x6b\xe8\x9a\x81\xa6\xe9\x18\x86\x89\xae\
-\x1b\xc8\x22\xcc\x9c\xd4\x87\x69\x13\xfa\x90\xe3\xf7\x22\x20\x20\
-\x8a\x26\x31\x2d\x6e\x13\xa1\x1e\xd7\x88\xc7\xa3\x98\x58\xe4\x25\
-\x89\x12\x8a\xac\xe0\xf5\xfa\x6c\xa2\x0a\x87\xc3\x64\x67\x67\xdb\
-\xff\x75\x5d\xb7\x7d\x66\x8a\xa2\x38\xc4\xe5\x20\x45\x71\x6d\x49\
-\x25\x1b\x01\x7c\x39\x94\x94\x0c\xe2\xf2\x33\x27\xe3\x52\x64\x46\
-\x0d\xea\x03\xc0\x05\xa7\x8c\x03\xbe\x4e\x4b\x30\xc2\x5f\x3f\x2a\
-\xa3\x45\xf0\x59\x37\x7a\xa4\x0d\xb3\xb5\xc6\x22\xae\x2d\x0e\x71\
-\x39\x38\xb2\x03\xeb\x91\x3a\x8e\x69\x9a\xe8\xba\x6e\x3d\x93\xf9\
-\x7c\x78\x3c\x59\x08\xc8\x98\x46\xe7\x73\x10\x25\x40\xb2\x82\x2e\
-\xb2\xb2\x15\xe6\x4d\x1f\xc3\xf4\x29\xc3\x58\xb2\x76\x07\x6f\x7f\
-\xbc\x99\xfa\xe6\x20\xb1\xb8\xc1\x11\x75\x62\x1d\x89\x7e\x48\xd0\
-\x6a\xb2\xdb\xcd\xb4\xbe\x31\xd0\x34\x83\xb8\xa6\x11\xd7\x74\xe2\
-\x31\x0d\x2d\xae\x91\xe7\x93\x98\x3d\xa9\x80\x71\xc3\xfb\x32\xb0\
-\xb8\x04\x7f\x56\xae\x2d\xe7\x92\xe4\x67\x62\x62\x1a\x26\x86\x69\
-\xa2\xc5\x63\x04\x82\x2d\xb4\x34\xd7\x13\x0c\xb6\xd1\xd8\x54\x4f\
-\x53\x93\x88\xcf\xe7\x23\x3b\x3b\x87\x40\x20\x40\x4e\x4e\x0e\xd1\
-\x68\x94\xfc\xfc\x7c\x74\x5d\xc7\xe7\xf3\x61\x9a\x26\x8a\xa2\x1c\
-\x36\xe5\xe5\x10\xd7\x71\x8e\xda\x06\x4b\x2d\x09\xaa\x17\x61\xd0\
-\x78\x04\x4f\x36\x77\xdf\x32\x9b\xcb\x67\x97\xa4\x6d\x37\x69\x68\
-\x1f\x26\x0d\x3d\x05\x00\x25\x67\x3d\x0f\xbe\xbe\x15\x33\x12\xc0\
-\xa8\xdc\x6c\xdf\xe9\x2e\xd5\xb9\x1d\x1c\x1c\x3e\x05\x74\xb4\xf2\
-\xa1\x3a\x1e\x47\x00\x04\x04\xc2\x61\x2b\x37\x4b\x14\x45\x6b\x59\
-\x4a\x08\xb7\x40\x7b\x84\x9c\xae\x9b\x28\xb2\xc2\x99\xb3\xc6\x33\
-\x6b\xca\x70\x36\x6e\xab\x64\xd5\xc6\x72\x3e\x2d\xab\xa6\xb6\xa1\
-\x0d\x5d\x3f\x4e\xf2\xba\x04\xcb\x2f\x27\x22\x20\x88\xed\xd7\x29\
-\x8a\x02\x8a\x2c\xa1\x2a\x32\xa0\x62\x98\x26\x22\x26\xc5\x05\x32\
-\x93\x86\x65\x31\xb8\x7f\x1f\x0a\x0b\x07\xe2\xf3\x65\x21\x4b\xa2\
-\x6d\x62\x34\x4c\xcb\xac\x68\xa9\x36\x03\x43\x37\x10\x15\x95\xdc\
-\xdc\xbe\xe4\xe5\xf6\x45\xd3\x35\x9a\x9a\x6a\x69\x6a\xac\xa1\x2d\
-\xd0\x4a\x28\x1c\x22\x3b\xcb\x22\xad\xa4\x7f\x31\x35\xba\x53\x10\
-\x84\xc3\x16\x75\x78\x44\x46\xaa\xcd\x7b\x9a\x78\x6b\xed\x3e\xd6\
-\xee\x6a\xa0\xbc\x36\xc0\x94\xa1\xf9\xdc\x73\xd5\x09\x14\xe6\xb8\
-\x3f\xb7\xef\x74\x5f\x63\x88\xff\x7e\x74\x25\x35\xcd\x61\x7e\xf7\
-\xf5\x13\x99\x3b\xae\xdf\x17\x67\xa4\x10\x25\xc4\x92\xc9\xa0\x7a\
-\x01\x78\xe4\x95\x75\xc4\x23\x21\x5c\x8a\xc4\x39\xd3\x86\xe3\x77\
-\xcb\x7c\xba\xa7\x89\x2d\xe5\xb5\xb4\x06\xa3\x2c\x7e\x6b\x05\xe6\
-\xde\xbd\x18\x2d\x35\x69\x86\xf2\x13\xc6\x95\x38\xa3\xae\x83\x43\
-\x52\x3e\xc9\x90\xf4\x48\x24\x82\xa6\x69\x47\x95\x2c\xd3\xcf\xa5\
-\xdd\xc7\x93\x1c\x34\x45\xc3\x48\x24\x3b\x89\xf6\x40\x6f\x98\x26\
-\xa2\x60\xa2\x69\x3a\x9a\x2e\xa0\x2a\x0a\x33\x26\x0d\x63\xe2\xc8\
-\x01\xec\xdc\x53\xcb\xda\x2d\x95\x2c\x59\xbb\x93\xdd\x95\xf5\xc4\
-\xe2\xda\x31\xdd\xff\x82\x90\xf0\x43\xa5\x94\x7b\x92\x44\x21\xe1\
-\xbb\x93\x50\x64\x09\x59\x96\xc8\xf5\x2b\x8c\x1b\xec\x63\xd4\xa0\
-\x2c\xfa\x17\xf5\x27\x37\xaf\x2f\x3e\xaf\x17\x45\x96\xd2\xfb\xcc\
-\x04\xdd\x34\xac\xbe\x13\x84\x44\xa4\xa5\x81\x91\x30\x33\x9a\x98\
-\xe4\xe5\x16\x92\x9d\x95\x47\x4b\x4b\x23\x55\x55\xe5\x34\x35\x37\
-\xda\x49\xdc\x49\xb5\x07\xd8\xd1\x88\x49\xf2\x3a\xa6\x88\x4b\xd3\
-\x0d\x7e\xf3\xca\x66\x7e\xf3\xcf\xcd\xe8\x29\x12\x7d\xf3\x9e\x66\
-\x3c\xaa\xc4\x83\xd7\x4f\xfb\xdc\xbe\xd4\xc7\xdf\xdd\xce\xbf\x37\
-\x55\x01\xf0\x8b\x17\x37\xf2\xc1\xdd\x5f\x1c\xe2\x12\x0b\x06\x59\
-\xa4\x65\x1a\xe8\xe5\xeb\x59\xbd\xb9\x99\xd5\xff\xf7\x06\x00\xff\
-\x78\xf2\x67\x9c\x3f\x63\x38\xff\xfc\xa0\x94\x7b\x7e\xf7\x6c\xb7\
-\xed\x9c\x38\xde\x21\x2e\x07\x87\xa6\x7c\x92\x21\xe9\x91\x48\xc4\
-\x2e\xa1\x74\xb4\x10\x8f\xc7\x6d\x13\x17\x09\xd5\x95\x1a\xca\x4d\
-\xe2\xd5\x95\xfa\x12\x04\x01\xd3\x84\x78\xdc\x44\x55\x5c\x4c\x1c\
-\x39\x88\x31\x43\xfb\x71\xfe\xa9\xe3\xa9\xaa\x6b\x65\x4d\x69\x39\
-\x1f\xad\xd9\xc1\x67\xbb\x6b\x89\xc5\x35\x62\x89\x01\xfc\x18\x13\
-\x5d\xb6\x2f\xce\xf2\x55\x59\xc1\x57\xb2\x24\xe0\x52\x65\x46\x0c\
-\xcc\x66\xf6\xf8\x02\x86\xf4\xcb\x61\xc0\x80\xa1\xf8\xfd\x59\x78\
-\xbd\x1e\x24\x51\xb0\x03\x38\xac\x36\x2c\xdd\x2a\x8a\x02\xa6\x99\
-\x24\x42\x11\x41\x30\x12\xeb\x0c\x0c\x5d\x27\x1e\x8f\x23\x08\x02\
-\x79\xf9\x45\xb8\x3d\x3e\x2a\xf7\x6c\xa7\x2d\xd0\x6a\x7d\x17\x29\
-\x48\x2d\x35\x75\x38\x12\x96\x0f\x2b\x71\x5d\xf7\xc8\x72\x16\xaf\
-\xa8\x38\x26\x7f\x54\xe5\x35\x81\x8c\xef\xbf\x10\xf0\xe6\x58\x03\
-\x47\x4b\x2d\x04\x9b\x0f\xba\x99\x13\x27\x0c\x75\x46\x5f\x07\x87\
-\x44\x1c\x91\x48\x84\x50\x28\x44\x43\x43\x03\xc1\x60\xf0\xa8\x97\
-\x4f\x12\x04\x81\xec\xdc\xac\x04\x19\xa5\x17\x9b\x4d\x25\xa8\xb4\
-\xf7\x1d\xb7\x91\x45\x8c\x84\xf2\x10\x04\x85\xdc\xac\x6c\xf2\xb2\
-\xfd\x8c\x1b\xde\x9f\xaf\x5d\x34\x9d\xaa\xba\x66\x3e\x29\xad\x60\
-\x75\x69\x05\xdb\xca\x6b\xa9\x6d\x68\xa3\xa1\x39\x88\x76\x34\x4c\
-\x8a\x1d\xf3\xa1\x93\xcb\xec\x0e\xe8\xd0\x1f\x89\xeb\xcc\xcb\x76\
-\x31\x75\x54\x2e\xe7\xce\x1c\x4c\x41\x7e\x5f\xfa\xf6\xed\x8f\xcf\
-\xe7\xc7\xed\x4a\x44\x0e\x1a\x46\x0a\x39\x81\x28\x1a\x18\x46\x86\
-\xfe\x11\x44\x44\xd1\xb4\xd5\x94\x61\x98\xe8\x9a\x46\x3c\xae\xe1\
-\x76\x7b\x19\x3a\x6c\x3c\xfb\xf6\xee\x22\xd0\xd6\x4c\x7d\x7d\x3d\
-\xa6\x69\xda\x79\x5f\xa9\xca\xcb\xed\x3e\x34\xeb\xdb\x61\x23\xae\
-\xbf\x2f\x2b\x4f\x23\x2d\x59\x12\xb8\x78\xda\x60\x46\x0d\xc8\xa6\
-\x28\xd7\xcd\x15\x73\x9c\x41\xf1\x88\xfd\x58\xa5\xc4\xd7\x18\xef\
-\x5c\xa3\x70\x78\x71\x3e\x00\x4d\x2d\xc1\x6e\xdb\x38\xe5\xe4\xd1\
-\x9c\x31\x6b\xbc\xd3\x99\x0e\x0e\xc9\x5c\xa7\xeb\x3a\xe1\x70\x98\
-\xe6\xe6\x26\x6a\x6a\x6a\x88\x6b\x1a\x47\xb3\x86\x92\x24\x89\x14\
-\x0d\xe8\x6b\x8d\xe5\x1d\x2a\xa4\x27\x3f\xa7\x29\xaf\xd4\xe5\xb4\
-\xd7\xdf\x93\x44\x11\x44\xb1\x7d\x80\x36\x2d\x35\x62\x1a\x06\x45\
-\x05\x79\x9c\x7f\x6a\x2e\xe7\xcd\x9b\x48\x65\x55\x03\x3b\xf7\xd4\
-\xb2\x73\x4f\x3d\x15\x55\x8d\xd4\x36\x04\xa8\x6b\x6c\xa3\xa6\x31\
-\x40\x4b\x5b\xf8\xf0\x5e\xba\x99\x81\xbc\xcc\x6e\x48\x0c\x70\xbb\
-\x65\xc6\x0d\xcd\xe3\xe4\xb1\x7d\x39\x61\x74\x3f\x8a\x0a\x07\x90\
-\x9b\x5b\x80\xdf\xe7\x45\x55\x15\x5b\x29\x6b\xba\x41\x5d\x63\x1b\
-\x2d\x6d\x21\x5a\x02\x11\x44\x01\xfc\x1e\x15\xbf\x57\x25\xdb\xe7\
-\xb6\xf3\xdb\x4c\x53\xc8\x40\x68\x22\x18\x3a\xa1\x60\x00\x97\xc7\
-\x43\xff\x01\x25\xec\xa9\xd8\x46\x38\x1a\xa6\xa5\xa5\x05\x49\x92\
-\x70\xb9\x5c\x76\xae\x97\xaa\xaa\x68\x9a\x76\x48\x26\xc3\xc3\x46\
-\x5c\x3f\x7b\x7e\x5d\xbb\xe9\x4a\x10\x78\xf7\xce\x33\x99\x3e\xaa\
-\xaf\xf3\x6b\x3e\x0a\x30\xc3\x6d\x08\xde\x5c\xc4\xbc\xfe\xe8\xb5\
-\xbb\xc1\xb4\x9e\xfc\xe6\xce\x39\xc9\x2e\xf5\xb4\x61\xeb\xee\x2e\
-\xf7\xf7\x79\x5c\x3c\x76\xcf\x75\xc7\xed\xdc\x3c\x0e\x8e\x91\xfb\
-\x30\xa1\x52\xe2\xf1\x38\xf5\x0d\xf5\xd4\xd4\x56\x23\x4a\xd2\x51\
-\x0d\x20\x97\x25\x09\x33\xe9\xa3\xe9\xa0\xc4\xc4\x14\xb2\x12\x3b\
-\xa8\xac\xa4\x99\x2d\x95\xbc\x2c\xe5\x91\x34\x69\x49\x56\x94\x9e\
-\x61\xa2\x27\xea\x20\x6a\x9a\x4e\x71\x51\x5f\x8a\x8b\x0a\x98\x33\
-\x55\x23\x10\x0a\x13\x08\x45\x08\x86\xa3\x04\x82\x51\x1a\x9a\x83\
-\x54\x56\x37\xb1\xa7\xba\x99\x5d\x95\xf5\x54\x56\xb7\xd0\xd4\x12\
-\x4a\x73\xa3\x1c\x10\x61\xa5\x5e\x4f\x37\x55\xa4\x24\x51\xa0\x28\
-\xdf\xcb\xc8\x41\x39\x9c\x34\xae\x90\xc1\x45\x39\xf4\xef\x67\xf9\
-\xa2\xb2\xb2\xb2\xf1\xfb\xbc\xc8\x92\x84\xa6\xeb\x94\xed\xad\x67\
-\xe9\xba\x1d\xac\xd8\xb4\x9b\x86\xa6\x20\xd1\x58\x9c\x68\x5c\x47\
-\x14\x40\x55\x64\x54\x45\x62\x60\x51\x2e\xd3\x27\x0c\x66\xca\xe8\
-\x62\x9b\xc4\xda\x5f\xe9\xf3\x7a\x85\x42\x21\x7c\x3e\x1f\xc5\x03\
-\x47\xb0\x7b\x57\x29\xc1\xa0\x95\xe7\xd5\xdc\xdc\x8c\xc7\xe3\x21\
-\x1c\x0e\xdb\x65\xa6\x0e\x25\xbf\xeb\xb0\x10\xd7\xfe\xc6\x10\xfb\
-\x1b\xdb\x4b\x0e\x9d\x7d\xc2\x00\x87\xb4\x8e\x22\x8c\xc6\xbd\x48\
-\xf9\xc5\x20\xab\x9c\xbe\xf0\x32\x86\x65\x1b\xcc\x99\x52\xc2\xc5\
-\x73\x46\x01\xb0\xf2\xb3\x6a\x56\x2c\xdf\xd0\xe5\xfe\xf7\x7d\xff\
-\x72\x86\x0e\x74\xbe\x2f\x07\x87\x4e\x5c\x49\x68\x9a\x46\x51\x51\
-\x3f\xe6\xcc\x3e\x05\x97\xcb\x75\x34\xcf\x82\xb6\x50\x4b\x9a\xc2\
-\x12\x52\x94\x56\xc7\xc9\x13\xd3\x3f\x0b\x29\xe4\x95\x4a\x7d\x89\
-\x01\x1a\x01\x41\x06\x19\x09\x41\x50\x13\xc1\x28\x3a\x71\x4d\x43\
-\xd3\x74\x72\xb3\x3d\xe4\x64\x99\x18\x86\x8e\x61\xea\x98\x86\x96\
-\x52\xf4\x57\x43\xd7\x0d\x02\xa1\x08\xe5\xfb\x1b\xa9\xae\x6f\x25\
-\x10\x8a\x11\x8a\xc4\x09\x86\x63\x84\x23\x31\xc2\xd1\xe4\x7b\x8d\
-\x70\x24\x4e\x38\x1a\x47\xd3\xac\x3c\x2c\xcb\x97\x66\x26\x08\x38\
-\x21\x1a\x01\x45\x96\xc8\xc9\x72\x51\x90\xeb\x26\x2f\xcb\x45\xdf\
-\x5c\x0f\x23\x06\xe5\x93\xe3\x77\x21\x4a\x12\x7e\x5f\x36\x39\x39\
-\x05\xb8\x54\x37\x5e\x8f\x1b\x97\x4b\xa1\x2d\x18\x61\xf3\x8e\x7d\
-\xfc\xf9\xa5\x8f\x58\xb5\xa9\xcc\x8a\x18\xec\x86\x4c\xb7\x95\xd7\
-\xf0\xfe\xea\xed\x78\x5c\x0a\x67\xce\x18\xcd\x79\x73\xc6\xd2\x27\
-\xd7\x8b\x98\xf0\x57\x59\x7e\x31\xab\x8f\x4c\xdd\x20\xd0\xd6\x46\
-\x76\x4e\x2e\x45\x45\x83\xa9\xa9\xde\x43\x4b\x4b\x0b\x3e\x9f\x8f\
-\x96\x96\x16\x5b\x71\xa9\xaa\x6a\x57\xa0\xff\xdc\x88\x6b\xfd\xee\
-\xc6\xb4\xcf\x57\x9f\x3a\xdc\xf9\x15\x1f\x25\xb8\x55\x05\xa2\xad\
-\x18\x7b\xb7\x92\x3b\x72\x32\xaf\xff\xe2\x2c\xc4\x94\x1f\xe6\xa7\
-\x95\x4d\x5c\xf3\xfd\x3f\xa1\x1b\x9d\x9d\xe4\x39\x59\x1e\x7e\xff\
-\xe3\xab\x38\xe9\xc4\x09\x54\x35\x86\xe9\x9f\xef\x71\x3a\xd4\xc1\
-\x61\x43\x2c\xa6\x51\xdf\xd0\x7a\x58\xa2\xc8\x7a\x0d\x01\x5c\x6e\
-\x3d\xf5\x63\x0a\xfd\xa4\x93\x55\xe7\xe4\xe2\xce\x64\xd5\xf9\x3f\
-\x69\x93\x33\xaa\xaa\x88\xaa\x2a\x56\xae\x54\x4a\x75\x0a\x5d\x37\
-\xec\x94\x00\x2b\xd1\x57\x43\xd7\x35\xdc\x6e\x1f\xf9\xb9\xb9\x89\
-\xa8\x3b\x23\x25\xfa\xce\x48\x5f\x96\x08\x41\x8f\xc6\x35\x22\xd1\
-\x38\xd1\x58\x1c\x4c\x90\x24\x4b\x39\xca\x52\x32\xc8\x41\xb0\x6b\
-\xf8\x8a\x82\x88\x24\x29\x28\x8a\x0b\xd5\xe5\xc6\xa5\xba\x90\x15\
-\x05\xb7\xaa\xe2\x72\x29\x20\x08\x94\xef\xad\xe3\x6f\x6f\xae\xe2\
-\xf5\x0f\x37\xd1\xd0\xdc\x3b\x5f\x7f\x32\x42\x33\x18\x8e\xf1\xea\
-\x87\x9b\x59\xff\xd9\x5e\x16\xcc\x1a\xc3\xdc\xa9\x43\xf1\xa8\xb2\
-\x4d\x5a\x24\x82\x61\xac\x5a\x90\x41\x72\xf3\x0a\x69\x6e\xae\x23\
-\x1a\x89\xd0\xd2\xd2\x82\xc7\xe3\x21\x10\x08\xe0\xf7\xfb\x89\xc5\
-\x62\xa8\xaa\x45\xfe\x07\xa3\xba\x0e\xcb\x1d\xd5\x18\x48\xf7\xad\
-\x0c\x29\xf4\x39\xbf\xda\xa3\x84\xcb\xcf\x9d\xce\xfd\x4f\xbd\x85\
-\xd9\x52\x43\xd3\xc6\x8f\xb9\xeb\xe9\x7e\x9c\x33\x73\x34\xb5\x4d\
-\x41\x96\x6d\xd8\xc5\x63\x4f\xbf\x42\x34\x1a\xeb\xb4\xdf\x59\x73\
-\x26\xf2\xe7\xbb\xbe\x4e\x71\x51\x1e\xd1\xb8\xee\x74\xa4\x83\xc3\
-\x0e\x5d\xd7\x09\x86\xc2\x47\xbc\xe0\x6a\x47\x24\xab\x34\x24\xfd\
-\x57\x49\x7f\x16\xbd\x56\x5b\x42\x27\x36\xec\x6c\x46\x4c\xdf\x46\
-\x10\x04\x64\x49\x02\x29\x5d\x81\xa6\x56\xb2\x48\xe6\x43\x25\x49\
-\xcd\xce\x97\x4a\xbc\xd7\x93\xc4\x95\x24\x3d\xd3\xc0\x67\x27\x02\
-\x1b\x1d\xfc\x65\xa9\xa6\x3a\xab\x3c\x95\x2c\xcb\xc8\x8a\x8c\x22\
-\xcb\x89\x20\x08\x01\x29\x11\xc9\x67\x9a\x26\x3b\xf7\xd4\x70\xcf\
-\x9f\x5f\xe7\x93\xcd\x15\x3d\x86\xf6\x0b\x82\x40\x51\x51\x01\x93\
-\xc6\x0d\x67\xe2\xc8\x62\xfa\xe4\x7a\xd9\x5f\xd7\xca\x1b\x1f\x6d\
-\xa2\x6c\xf7\x1e\x9e\xff\xbf\x75\xec\xa9\x6e\xe2\x6b\xe7\x4e\x45\
-\x91\x53\xa2\x05\x0d\x03\x03\x88\xc5\xa2\x78\x3c\x1e\xf2\xf2\x0a\
-\xa9\xae\xae\x20\x1c\x0e\x13\x0e\x87\x89\x46\xa3\x44\xa3\x51\xe2\
-\xf1\x38\xba\xae\x1f\x74\x5e\xd7\x21\x11\x57\x73\x30\x46\x24\xae\
-\xd3\x1a\x4a\x0f\x7d\x6c\x6c\x8b\x51\xdd\x1c\xc6\x25\x8b\xe4\xf9\
-\x5d\x3d\xb2\xf9\x8e\xfd\xad\x6c\xac\x68\xa4\x5f\xae\x9b\xc9\x25\
-\x05\x64\x7b\x0f\xbc\x3c\xc8\xae\xea\x00\x1b\xcb\x1b\x59\x5f\xd6\
-\x40\x24\xa2\x33\x73\x6c\x21\xb3\xc7\xf4\xa1\x28\xd7\x7b\x50\xd7\
-\x16\x89\x6b\x6c\xd9\xd3\xc2\x86\xb2\x06\xaa\x9a\xc2\x8c\x1b\x94\
-\xc7\xa4\x92\x3c\x86\x17\x65\x75\x5b\xb3\x2c\xa6\x19\xbc\xb2\xaa\
-\x02\xaf\x22\x73\xee\x49\x03\x91\x44\x6b\xe3\x1d\xfb\x5b\x28\xdd\
-\xd3\x42\x69\x45\x23\x91\x98\xce\x7f\x2f\x18\xc3\xa0\x3e\x99\x09\
-\x7e\x5f\x63\x88\x8d\x65\x8d\x6c\x2a\x6f\xc6\xeb\x12\x99\x3c\x34\
-\x8f\x89\x43\x0a\xc8\xf7\xab\x9d\xb6\xfd\xde\x75\x0b\x90\x65\x91\
-\xc5\xef\xac\x21\x1a\x8d\xf3\xc2\x8b\x6f\xf2\xc2\x8b\x6f\xda\xeb\
-\x8b\xf2\xb3\x00\x28\x2c\xc8\xe6\xc4\x09\x25\x9c\x30\xae\x84\x13\
-\xc7\x97\x30\x71\xf4\x20\x7b\x1b\x97\x22\x39\xa3\xac\x83\xc3\x2f\
-\x7e\x04\x01\x59\x96\x90\xa4\x9e\x87\x99\xaa\xaa\x7d\xd4\xd6\x55\
-\x93\xea\xb9\xf1\x7a\x7c\x8c\x1c\x39\xf6\xa0\xcc\x85\xa9\x32\xaa\
-\xb3\x2f\xab\x33\x81\x75\x65\x2a\x6c\x0f\x2f\xef\x9a\xb4\xba\xbb\
-\x7e\x6b\x40\xef\xda\xa4\x6a\xbd\x35\xd3\xcf\x3c\xf1\xc7\x34\x49\
-\x24\x01\x5b\xff\x93\xfe\x24\x51\x10\x53\x82\x33\x4c\x4c\x84\x94\
-\xba\xa3\xe9\xed\x5a\x65\x9f\x4c\x36\xef\xdc\xcf\x1d\x7f\xfc\x27\
-\x9b\x77\xee\xef\xb1\xa2\x89\xcf\xe7\xe1\xd2\x73\x67\xf3\x9d\xab\
-\x4f\xa7\x7f\x9f\x6c\xdc\x2e\x05\x59\x14\x89\xeb\x3a\xd7\x5d\x3a\
-\x87\x73\x7e\xf4\x32\xb5\x3b\x3f\xe3\xdd\x55\x3b\x08\x86\x63\x5c\
-\x7b\xe1\x89\x78\x5d\x0a\x60\xd8\xd7\x6c\xe8\x06\xe1\x48\x04\x7f\
-\x56\x2e\x4a\x43\x15\xba\xa6\xd9\xb3\x4c\x87\xc3\x61\xf4\x44\x28\
-\x7d\x32\x4c\xfe\xa8\x11\xd7\x8f\xff\xb2\x96\x47\xde\xfa\x2c\x63\
-\xd4\xcc\xf9\xf7\xfe\xc7\x7e\x7f\xdd\xe9\x23\x78\xf8\x9b\xd3\x3b\
-\x6d\x53\x59\x1f\xe4\x7b\xcf\xae\xe1\xc3\xcd\xd5\x04\x23\xe9\xec\
-\x3f\xac\xc8\xcf\x4f\x2e\x9d\xc8\x55\xa7\x0c\xeb\xf1\x3c\x6a\x9a\
-\x43\xdc\xf8\xa7\x95\xbc\x97\xc8\xd1\x4a\xe2\x4f\xef\x58\x53\xd7\
-\x5f\x3a\x73\x30\x4f\xdd\x3c\xbb\xd7\xd7\x15\x8d\xeb\xdc\xf5\xf7\
-\x8d\x3c\xf2\xe6\x67\x19\x9d\xa8\xfd\xf2\x3c\xfc\xf1\xba\x69\x9c\
-\x7f\xf2\xc0\x8c\xfb\xff\xe2\xf9\x75\x3c\xfc\xb6\x75\xec\x47\x6e\
-\x98\xc6\x35\xf3\x47\xf0\xb3\xbf\xae\xe7\xa1\x37\xd3\x2b\xb8\x57\
-\x37\x87\x79\xe6\x96\x39\x69\xcb\x36\x94\x35\x71\xe3\x9f\x97\xb1\
-\x79\x4f\x4b\xc6\xb6\x4f\x1a\x51\xc0\x13\xdf\x9e\xc5\xa8\xe2\x6c\
-\x7b\x59\x5e\x8e\x8f\x5f\xde\x72\x09\xbf\xbc\xe5\x12\x67\xa4\x74\
-\x70\x6c\x11\x97\x98\x9c\x1e\xbe\xe7\x07\xa3\xed\xdb\xb7\xb2\x6c\
-\xf9\xc7\xb6\x75\x40\x96\x25\x06\x0d\x1c\xcc\xd8\xb1\x13\x0e\x98\
-\xb4\x4c\xd3\x2a\xd7\x64\x87\xbc\xa7\x2a\xaf\x8e\x7e\xaf\x0c\xa6\
-\xc2\x8e\x26\xc2\x83\x21\xad\x9e\x08\x2d\xfd\xb8\xdd\xb5\x29\x75\
-\xf1\xc0\x6f\x76\x20\x28\x33\x8d\xac\x04\xc1\xc4\x34\xad\xb9\x57\
-\xca\xf6\xd6\xf1\xbb\xa7\xdf\xee\x15\x69\xf5\x29\xc8\xe5\xc7\x37\
-\x5d\xca\x7f\x2f\x9c\x65\x99\x21\x53\x95\xac\x2c\x32\xb0\x30\x87\
-\xc1\xc3\x87\x52\x1f\x53\xd0\x6b\x76\xb1\xa2\x74\x0f\x59\x3e\x17\
-\x97\xce\x1f\x8f\x5b\x95\x52\x22\x37\x41\xd3\xe2\x78\x3c\x59\xb8\
-\x5c\x5e\x02\xb1\x16\x9b\xb4\x92\x95\x35\x32\x4d\xf4\x79\xc4\x89\
-\x6b\xf1\x8a\x8a\x5e\x85\x7a\xfe\x6b\xd5\x9e\x4e\xc4\xf5\xd7\x8f\
-\x76\xf3\xfd\x67\x3f\xa1\x2d\x9c\x59\xae\xee\xae\x09\xf0\xcd\x3f\
-\xad\xe0\xf5\x35\x7b\x79\xe4\x1b\xd3\x29\xc8\xce\xac\xda\xfe\xb3\
-\xb1\x8a\xeb\x1e\x59\x4a\x7d\x5b\xac\x9b\xf3\xdc\x43\x34\x6e\xd2\
-\x1b\x52\x5f\xbf\xbb\x91\xeb\xff\xdf\x32\xb6\xed\x6b\xed\x72\x9b\
-\xea\xa6\x30\x57\xfc\xfe\x23\xae\x98\x5b\xc2\x83\xd7\x4e\xeb\xa4\
-\x0e\xdf\x58\xb7\xd7\x7e\xff\xcc\xfb\xbb\x78\x6d\xf5\x5e\xde\xdd\
-\xb0\xbf\x53\x3b\xb9\xde\xf6\x6b\x32\x4c\x93\x5f\x2f\xde\xcc\x6f\
-\x5e\x29\x45\xd3\xbb\xee\xd4\x35\x3b\x1b\x98\xf9\xe3\xb7\xf8\x9f\
-\xaf\x9e\xc0\x8d\x67\x8f\x76\x46\x46\x07\xc7\x34\x44\xc1\xaa\xda\
-\x20\x49\x3d\xff\xf8\x0c\x13\xdc\x7a\x80\x79\x7d\x76\xa1\xb9\x60\
-\x5b\x5b\x11\xba\x31\xb0\x57\xfb\x76\x66\x06\x23\xc5\xa0\xd6\xfe\
-\x5f\x48\x67\xa8\x2e\x08\x8b\x0c\xeb\x8f\xbd\x68\xdb\xa4\xf9\x4f\
-\xb0\xc5\x96\x60\x93\x55\x2a\x69\x85\xc2\x31\x9e\xfd\xd7\x32\x56\
-\x97\x96\xf5\x48\x12\xaa\xaa\x70\xe5\x85\x73\xf8\xda\x79\x27\xda\
-\xa4\x15\x8e\x69\x6c\x2d\xab\xa3\xba\xb1\x0d\x24\x95\xf5\xe5\xad\
-\x6c\xd9\xd3\x04\xaa\x07\xa1\x70\x18\xb1\xf2\x16\x3e\x5a\xb7\x9b\
-\x81\x85\xd9\xcc\x9d\x3c\x04\x51\x00\x23\xf1\xb0\x60\xe8\x56\x82\
-\xb6\xd7\x97\x45\xa0\xad\xd9\xce\xf3\x4b\x56\xf3\x3f\x94\xb2\x60\
-\x07\x4d\x5c\x77\x5d\x39\x85\x3b\x5f\xdc\x40\x20\xac\x11\xd3\x0c\
-\x22\x29\x7e\x12\x9f\x4b\x46\x12\x05\xbc\x6e\x99\x9f\x5e\x3a\x31\
-\x6d\xbf\xa7\xfe\xbd\x9d\x5b\x9f\xfc\x24\xed\xc6\x98\x36\xb2\x0f\
-\xa3\x8b\xb3\xa9\x69\x0a\xb3\x7a\x47\x03\x4d\x41\x8b\x88\x5e\x5b\
-\x5d\x49\x6d\x73\x84\x7f\xdf\x75\x56\xa7\x9b\xaa\xa1\x35\xca\x35\
-\x0f\x2d\xb5\xb7\x05\xc8\xf2\xc8\x4c\x1b\xd9\x87\xf1\x83\xf2\xa8\
-\xa8\x0b\xf2\xc9\x8e\x3a\xf6\x37\x85\x79\x63\x4d\x65\x8f\x53\x12\
-\xd4\xb5\x46\xb9\xf8\xbe\xff\xa4\x91\x60\x8e\x57\xe1\xc4\x61\x7d\
-\x28\x2e\xf0\x52\x5a\xd1\xc8\xe6\xca\x66\x9b\x58\x5e\x5a\x52\x8e\
-\xa1\x19\x3c\x7b\xdb\xdc\xb4\x76\xb4\x14\x77\xd1\xda\x9d\x0d\xed\
-\xcf\x4d\xa2\xc0\xac\x31\x85\x8c\xe8\x9f\xc5\xd4\x61\xf9\x5c\x99\
-\x92\xd7\xf6\xf0\x1b\x9f\x72\xef\x3f\x36\xa5\xb5\x93\xdc\x2e\x10\
-\xd6\x58\xb7\xab\x81\xea\x96\x48\xc2\x84\xa9\xf3\xdd\x67\xd6\x50\
-\x90\xed\x62\xe1\xcc\x12\x67\x74\x74\x70\x0c\x9b\x0a\x41\x96\xc4\
-\x5e\xf9\xb8\x4c\xd3\xc0\x43\x98\xf3\x86\x56\x13\xc9\x82\xc0\x0e\
-\x0f\xfb\x74\xed\x20\xfc\x63\x66\x7b\xde\x58\x4a\xce\x56\xf2\x73\
-\x67\x5f\x97\x90\x61\xea\x92\x8e\x6a\x8b\xc3\xa2\xb6\x32\xed\x7f\
-\x28\x85\x88\x93\xe4\xd5\x4e\x5a\x9d\xfb\x7f\xcb\xce\x7d\xfc\xeb\
-\xfd\xf5\xc4\x7b\xe1\xc7\x9e\x38\x66\x08\xd7\x5d\x32\x87\x1c\x9f\
-\x95\x1c\xbc\x63\x6f\x23\xbf\x7d\xe2\x4d\x96\xad\xf9\x8c\x70\x24\
-\x06\xa2\x44\x8b\x52\x40\x34\x6b\x00\x08\x20\xb8\xbc\x88\x7d\x87\
-\xd0\xb6\x7f\x3b\x6f\x2f\xdf\xce\x09\xa3\xfb\xe3\x77\x2b\xf6\xc1\
-\x0d\xc3\xaa\xae\xe1\x72\x79\x30\x49\x54\xaa\xd7\x75\xbb\x2c\xd8\
-\xe7\x42\x5c\x57\x9d\x32\xcc\x36\xe5\xfd\xe5\xc3\x5d\x7c\xeb\xd1\
-\x95\xf6\xba\xf7\xee\x3a\x93\xc9\x25\xf9\x9d\xf6\xa9\xa8\x0b\xf2\
-\x93\xbf\xae\xb7\x3f\x8f\x29\xce\xe6\xc9\x9b\x67\x71\xc2\xd0\x02\
-\x7b\x59\x20\x14\xe7\x8e\x17\x36\xf0\xf8\x7b\xdb\x01\x58\xb9\xbd\
-\x8e\x27\xde\xdb\xce\x0d\x67\x8d\x4a\x6b\xeb\x8e\x17\xd6\xa5\x91\
-\xd6\x19\x93\xfa\xf3\xf8\x4d\x33\x29\xca\x69\x8f\x8c\x8b\x69\x86\
-\x6d\xba\xeb\xe9\xfe\xf8\xee\xd3\xab\xd3\x48\xeb\xda\xd3\x47\x70\
-\xff\xd7\x4f\xc4\x9d\x32\x23\xf0\xf6\x7d\xad\x7c\xf5\xc1\x25\x6c\
-\xa9\xb4\xaa\x53\xbc\xbc\x62\x0f\x17\xcf\xa8\xe4\xe2\xe9\x83\xba\
-\x6d\x7b\xe1\xcc\x21\xfc\x72\xd1\x14\x86\x16\xfa\x3b\xad\xdb\x5a\
-\xd9\xc4\x2f\x5f\x6a\x0f\x55\xef\x93\xa5\xf2\xd4\x4d\xb3\x39\x63\
-\xca\x80\x34\x3b\xf8\x43\x6f\x6c\xe5\x17\x2f\x6e\xb0\x89\xf3\x07\
-\xcf\xae\xe5\x8c\x49\x03\xc8\xf5\xa9\xce\x08\xe9\xe0\x18\x25\xae\
-\x84\xa9\xb0\x37\x8a\xcb\x30\xd9\xd9\xe2\xe2\xb2\x37\x26\x01\xe0\
-\x76\xb9\x18\x3d\x52\xef\xd5\xbe\x1d\x68\x8b\x8e\x16\xfe\x34\x93\
-\x61\x46\xfd\xd4\xbe\xc6\x30\x0c\xf6\xef\xdf\x8f\xa6\x69\x08\x02\
-\x48\x92\xcc\xe0\xc1\x83\x0f\xba\x44\x51\x4f\x64\x97\x5c\x7f\x68\
-\x04\x96\x59\x75\x85\x22\x71\xfe\xf0\xdc\xbb\x04\x43\xd1\x1e\xdb\
-\x90\x24\x91\xa9\xe3\x87\x32\x6e\x68\x21\x00\xfb\xea\x5a\xf9\xc1\
-\x6f\x5f\xe4\xff\xde\x5f\xd3\xe1\x60\xf5\x08\xfd\x0d\xc4\xfc\x62\
-\xeb\x78\xbe\x7c\x04\xd5\x4d\x45\x55\x13\xef\xae\xdc\xc1\xa5\xf3\
-\xc7\xa5\x99\x61\x0d\x43\x47\x51\x5c\x40\x7b\x20\x4a\xb2\x08\x73\
-\x6a\x2d\xc3\x03\x56\xf3\x47\xf3\x46\xfe\xce\x53\xab\x6d\x7f\x96\
-\xcf\x2d\xf3\xd2\x0f\x4e\x4d\x23\x2d\x00\xbf\x57\xe1\x81\xeb\x4f\
-\xe6\xf2\xd9\x43\xec\x65\xbf\x78\x61\x3d\x2d\xc1\xf6\xce\x2f\xab\
-\x0d\xf0\xdc\x07\xed\x09\xb5\xe3\x07\xe5\xf2\xcf\x1f\xcf\x4f\x23\
-\x2d\x00\x55\x16\xf9\xf5\x35\x27\x71\xd5\xdc\xee\x7d\x65\xef\x6f\
-\xaa\xe6\x9f\x2b\xf7\xa4\x91\xd6\x23\xdf\x9c\x9e\x46\x5a\x00\xa3\
-\x8a\xb3\x79\xff\xae\xb3\xe8\x97\xd7\x7e\x9c\xdb\x9f\x5e\xdd\x6d\
-\x42\xe1\x05\x27\x0d\xe4\xd9\x5b\xe7\x64\x24\x2d\x80\x5b\x9f\x5a\
-\x4d\x4c\x33\x6d\xd3\xca\x1b\x77\x9c\x91\x46\x5a\xc9\x1b\xf3\xb6\
-\x0b\xc6\xf1\xd0\x37\xda\x4d\xae\xb5\x2d\x11\x7e\xdd\x41\xa5\x39\
-\x70\x70\x2c\x12\x57\x6f\x5e\xa6\x69\xcd\x19\x25\x8a\x56\x85\x06\
-\xc3\xd0\xd1\x75\xa3\xd7\xfb\xb7\xbf\x44\x9b\x8b\x84\x0c\x24\x95\
-\x39\x28\xa3\x5d\x55\x45\xa3\x31\xfe\xf4\xa7\x87\xb9\xe7\x9e\x3b\
-\xb9\xfb\xee\x3b\xf9\xfd\xef\x7f\x7b\xd0\xaa\xe0\x40\x14\x5a\x47\
-\x9f\xdb\x81\x1f\xa3\xb3\xa9\x73\xdd\x96\x0a\xb6\xee\xda\xdf\xab\
-\x76\x54\x55\x61\xdc\xe8\x76\x0b\xce\x67\xbb\xf7\xf3\xc1\xb2\x0c\
-\xe3\x8b\x69\x40\x4b\x2d\x68\x89\x80\x3c\x51\xb2\x8b\x7b\x2f\xdf\
-\xb4\x87\x60\x38\x9e\xf6\x90\x60\x18\x26\xb2\x64\x4d\x67\x62\x98\
-\x9d\x89\xeb\x60\xfb\xf6\xa8\x11\x57\x4c\x33\x78\xbf\xb4\x3d\x80\
-\xe2\x2b\x73\x87\x31\xa2\x5f\x56\x97\xdb\xdf\x79\xc5\x64\xfb\x7d\
-\x5b\x58\x63\x5d\x59\x93\xfd\xb9\x63\xde\xd8\x3d\x57\x4d\xb1\xa3\
-\xf7\x32\xe1\xee\x45\x53\xd2\x72\x9b\x3a\xe2\xe3\x2d\x35\x69\xe6\
-\xc6\xbb\xae\x9c\xdc\xe5\xb6\x7e\xaf\xc2\xaf\xae\x3a\x21\x8d\x40\
-\x3e\xdd\xdb\x75\x7d\xc0\xff\x77\xc3\x8c\x2e\xcd\x94\xe1\x98\xce\
-\xea\xed\xed\xe6\xc4\xeb\xcf\x18\xc1\xc4\xc1\x79\x5d\xb6\x75\xf5\
-\xa9\xc3\x39\x61\x58\xbb\x92\x5d\xba\xad\xde\x19\x1d\x1d\x1c\xe3\
-\xc4\xd5\xee\xe7\xea\xee\x65\x18\x56\x32\xaf\x1d\x95\x96\x98\xfc\
-\xb0\x37\xfb\xa6\xbd\x44\x31\x31\x55\x3d\x9d\xcc\x85\xbd\x09\xb0\
-\x30\x4d\x83\xba\xba\x3a\xaa\xaa\xaa\xa8\xaa\xaa\xa2\xac\x6c\x37\
-\x0f\x3d\xf4\x00\x0f\x3c\xf0\x7b\x1e\x78\xe0\xf7\x3c\xfe\xf8\xa3\
-\x54\x57\x57\x1f\x56\xd2\x3a\x3c\xfb\x75\x7e\xbf\x64\xdd\x0e\xc2\
-\xd1\x78\xaf\xf6\x57\x64\x89\x61\x43\x8a\x6c\xd5\xba\x73\x5f\x53\
-\xc6\x34\x1a\x00\x74\x2d\x85\xb8\x44\x90\x2d\xab\x4f\x6b\x30\xca\
-\xce\xbd\x8d\x1d\x74\xac\x69\xab\x55\x23\x51\xcb\x31\x55\x6d\x1d\
-\xf5\xe0\x8c\x03\xc5\x96\xca\xa6\xb4\xc0\x83\xfd\x4d\x61\x7e\x9e\
-\x52\x26\x2a\x13\x7c\x6e\xd9\x56\x68\xa5\xe5\x8d\xcc\x9f\x60\x55\
-\x74\xdf\xbc\xa7\x29\x6d\xbb\x39\xe3\x0a\xbb\x6d\xa7\x7f\xbe\x87\
-\x61\xfd\xfc\xec\xac\x6a\xcb\xb8\x7e\x7d\x59\x3b\x79\x9c\x30\xb4\
-\x0f\x05\x59\xdd\x17\x80\x3c\x63\x72\xba\x22\x5a\xbf\xbb\x91\x09\
-\x19\x08\x67\x74\x71\x76\x97\x81\x25\x00\x9b\x2a\x9a\xd2\xd4\xda\
-\x59\x93\x8b\x7b\xbc\x39\xcf\x98\x38\xc0\x26\xee\x4f\x2b\x9b\x13\
-\xd3\x32\x38\xa5\x9a\x1c\x1c\x8b\xc4\x45\xaf\x2b\x81\x9f\xb7\x60\
-\x01\xb3\x66\xce\x48\x1b\xc8\xdc\x6e\xf7\x01\x9b\xe8\x4c\x52\x58\
-\x2b\x49\x54\x74\x1d\x5e\xd1\x53\x70\x86\xa2\x28\x4c\x98\x30\xc9\
-\x3e\x8f\xdd\xbb\x77\xf1\xd8\x63\x7f\xe6\xea\xab\xaf\x61\xc8\x90\
-\x92\x8c\xe7\x77\x38\x7c\x61\x07\x6f\x3a\xb4\x82\x32\x6a\x1b\xdb\
-\x28\xdd\x56\x89\xa6\xe9\xbd\x3e\xa6\x27\x51\xbb\x10\x13\x22\xd1\
-\x6e\xf2\xbc\x64\xc5\x7a\x59\x2c\x04\x9a\x45\x70\x91\x98\xc6\xe6\
-\x5d\x35\x4c\x18\x56\xd8\x5e\x13\x32\x71\x4a\x9a\xa6\xd1\x58\x5f\
-\x87\xa6\x69\xf4\xe9\xd3\xe7\x90\xef\xad\xa3\x46\x5c\x1b\xcb\xd3\
-\x55\xc9\x1b\x6b\x2a\x0f\x68\xff\xad\x95\xed\x91\x7e\xdb\xf6\xb6\
-\x87\x8b\x0f\xc8\xf3\xe0\x73\xf5\x9c\xf7\x35\xb2\x7f\x76\x97\xc4\
-\xb5\xa9\xa2\x29\x85\x6c\xb2\x7a\x6c\xab\x6f\xb6\x8b\x3c\x9f\x6a\
-\xfb\xd8\x4a\x2b\x32\x2b\xae\x11\xfd\xb3\xbb\x6d\xa7\xb4\x3c\x5d\
-\x39\x8e\x1a\xd8\xf3\xb1\x47\x0f\x6c\x6f\x33\x12\xd7\xd9\x5d\x13\
-\xe8\x56\xb9\x3a\x70\xf0\x39\x52\x17\x92\x28\x76\x6b\x0d\xb1\x7f\
-\x53\x7d\x0a\xe8\xdb\xa7\xe0\x90\x8f\x68\x66\x18\xc6\x33\x31\x55\
-\x26\x85\x02\x96\x4f\x6b\xf2\xe4\x29\x0c\x1c\x68\xa5\xbb\xf8\xfd\
-\x59\x9c\x71\xc6\x19\x88\xa2\x15\x24\x12\x8d\xce\xe5\xe5\x97\xff\
-\xce\x0b\x2f\x3c\xcf\xe5\x97\x5f\xc9\x88\x11\x23\x7b\x45\x5a\x8d\
-\x8d\x8d\xd4\xd7\xd7\xe1\xf7\xfb\xe9\xd7\xaf\xff\x21\x4f\xeb\xd1\
-\x15\xd1\x25\xfd\x5d\xd5\x75\x2d\xbd\xae\x8c\x71\x60\x36\x3a\x09\
-\x21\xa7\xc8\x56\x59\x18\x1a\x66\xd4\x2a\xe0\xad\xeb\x06\xb5\x4d\
-\x01\xe2\xba\xde\xc9\x94\x27\x49\x12\x1e\x8f\x87\xaa\xaa\x2a\x04\
-\x41\x38\x64\xf2\x3a\x6a\xc4\xe5\x55\x0f\xfe\x8b\xca\xf5\xa9\x2c\
-\x38\xb1\x5d\x8d\x0c\x2c\x68\x4f\x2a\xae\x6b\x8d\xa2\xe9\x46\x8f\
-\x4e\xdc\xaa\xc6\x50\x97\xeb\xfa\xe5\x7a\xa8\x4d\x44\xed\x35\xb4\
-\xf5\xec\xc8\x8c\x69\x06\xad\xe1\x76\x09\x9e\xea\xf3\x3a\x10\xf4\
-\xeb\x90\x1c\x5d\xdf\x1a\x65\x44\x0f\xd3\x84\xd5\xb5\x84\xd3\x3e\
-\x87\x22\x1a\x0e\x1c\x1c\xbb\x8a\x4b\x38\xac\x83\x74\x8f\xc4\x95\
-\x62\x27\xcc\x44\x5a\x99\x68\xc5\x30\x0c\xc2\xe1\x30\x7e\xbf\x1f\
-\x97\x4b\xe5\xda\x6b\xaf\xb7\x89\xc0\x52\x8c\xed\x91\x8d\x2e\x97\
-\x9b\x0b\x2f\xbc\x98\xd7\x5f\x7f\x95\xbf\xfe\xf5\x7f\xb9\xe1\x86\
-\x6f\x33\x60\xc0\x80\x6e\xcf\x69\xf9\xf2\xa5\xbc\xfd\xf6\x5b\xd4\
-\xd6\xd6\x92\x95\x95\xc5\xc5\x17\x5f\xc2\x9c\x39\x73\x8f\xa0\xea\
-\x82\x40\x28\x42\x28\x12\x3f\xc8\x2f\x0e\x72\xfc\x6e\x64\x59\x6a\
-\x57\x6c\x82\x80\xa0\x7a\x10\xf2\x06\x58\xc4\x95\xec\xef\x50\x33\
-\x68\xed\x63\x66\x34\xa6\x13\x8e\xc6\xf1\xb9\x95\xb4\x87\x07\x51\
-\x14\xc8\xce\xc9\x21\x37\x37\x8f\xaa\xaa\x2a\x36\x6d\xda\x44\x51\
-\x51\x11\x3e\xdf\xc1\x55\x59\x3a\x6a\xc4\x35\x75\x78\x3a\xc3\xfe\
-\xe5\x3b\x73\xb9\x64\xc6\xe0\x83\x6a\x6b\xc2\x90\x76\xb3\x5c\x5c\
-\x37\xd8\xbc\xa7\x85\x29\x43\xbb\xf6\x0d\x45\xe3\x3a\xdb\xf6\x77\
-\x9d\x9b\x35\x75\x58\x81\xad\xba\x36\x95\x37\xf5\x78\xfc\x2d\x95\
-\xe9\x26\xbe\x54\xbf\xd3\x81\xe0\x84\xe1\xe9\xfb\x6d\x2a\x6f\x62\
-\x46\x0f\xc5\x89\x37\x56\x34\x3b\x23\xa2\x83\xe3\x44\x6f\x25\xe7\
-\x6f\x3a\xda\xc4\x95\x34\x19\x0a\xdd\xa8\x2f\x81\x78\x3c\x4e\x45\
-\x45\x19\xaf\xbf\xfe\x1a\x53\xa6\x9c\xc0\x29\xa7\x9c\x8a\x20\x60\
-\x17\x05\x4e\xfa\xdb\x62\xb1\x74\x5f\x8f\xdb\xed\xe6\xbc\xf3\x2e\
-\xe0\xd5\x57\x5f\xe1\x4f\x7f\x7a\x98\x6f\x7e\xf3\x46\xfa\xf7\x1f\
-\x90\x51\x6d\x55\x55\xed\xe7\x6f\x7f\x7b\x9e\x6d\xdb\x3e\xb3\x97\
-\x35\x37\x37\x53\x52\x32\xd4\x56\x75\x47\xa2\xe7\xdb\x82\x11\xc2\
-\x9d\x7c\x54\x02\x28\x6e\x04\x5f\x0e\xaa\x3f\x87\x9b\x2f\x9d\xce\
-\xfc\x49\xc5\xb8\x14\xcb\x3f\x38\x7e\x44\xa1\xdd\x4f\x17\xce\x9b\
-\xc0\xe8\xe7\x7e\x8a\xa6\x1b\x34\x05\x63\xfc\xe5\xc3\x5d\xbc\x57\
-\x5a\x4b\x5c\x50\x40\xb0\xbe\x4f\x33\x1e\xc1\xa8\x2d\x4f\x9b\xb6\
-\x26\x12\xd3\x88\x44\xb5\xf6\xb0\x78\xbb\x45\xab\x38\x70\x7e\x7e\
-\x3e\xf9\xf9\xf9\xec\xd8\xb1\x83\xea\xea\x6a\x0a\x0a\x0e\x4e\x65\
-\x1f\x35\xe2\x1a\x5e\x94\x45\x8e\x57\xa1\x25\x51\x1e\xea\x8d\xb5\
-\x95\xbd\x22\xae\xb8\x6e\xa0\x74\x50\x53\x1d\xfd\x49\xf7\xbe\xbc\
-\x91\x97\x7f\x78\x6a\x97\x6d\xfc\xbf\xb7\xb7\x11\x8e\x75\x6d\xeb\
-\x3d\x61\x58\x1e\xcf\x7e\x60\xbd\xdf\x59\xdd\xc6\x3f\x56\x94\x77\
-\x9b\x23\xf5\xeb\xc5\x5b\xd2\xf7\x1f\x7a\x70\xc4\x55\x9c\xef\xa5\
-\x30\xc7\x6d\xab\xbd\x07\x5f\xdf\xca\xd5\xf3\x87\x75\x8a\x66\x4c\
-\x62\x67\x75\x2b\x8b\x97\x57\x38\x23\xa2\x83\xe3\x44\x71\xf5\x3e\
-\x01\xf9\x70\xc1\x30\x0d\x30\x93\x9e\x9e\x14\xe9\xd7\x81\x54\xa2\
-\xd1\x08\xcf\x3d\xf7\x0c\xef\xbd\xf7\x2e\x91\x48\x98\xdd\xbb\x77\
-\xb1\x7c\xf9\xd2\xb4\x73\xef\x0d\x49\xee\xd8\xb1\x83\xfb\xee\xbb\
-\x97\xa2\xa2\x22\x4c\xd3\x24\x1a\x8d\x22\x49\x92\x5d\x2f\xb1\xb6\
-\xb6\x96\x8a\x8a\xf2\x74\xcb\x4a\x7d\x1d\x9f\x7d\xf6\x69\x8f\xc4\
-\x75\xe0\xaa\xab\xfd\xaa\xa3\x71\x2d\x3d\x77\x4b\x56\x11\xb2\xfa\
-\x22\x16\x0d\x07\x59\xe1\xb4\x29\x03\xb8\xf3\xda\x53\x50\xe5\xcc\
-\xdf\x4d\x7e\xb6\x87\x99\x93\xdb\x73\x4d\x07\x0f\x2c\x62\xef\x63\
-\x2b\xad\x07\x7b\xd3\xc4\x8c\x06\x31\x6b\x76\x42\x3c\xd2\x49\x65\
-\x77\xd7\x77\x49\x33\x61\x79\x79\x39\xd5\xd5\xd5\x8c\x1b\x37\xee\
-\xd8\x26\x2e\x41\x80\xaf\xcd\x1b\xc6\x23\x89\x72\x48\x2f\x2d\x29\
-\xe7\xf2\x99\x25\x9c\x33\x35\x73\x40\x42\x43\x6b\x94\xef\x3d\xb3\
-\x9a\xd7\xd6\xec\xe5\xf6\xf3\xc7\x73\xc7\x15\x93\xec\x75\x53\x86\
-\xe6\x33\x7d\x54\x1f\x56\x6d\xb7\xa2\xea\xde\x5a\xb7\x8f\xfb\x5f\
-\xd9\xcc\xf7\x2e\x9e\xd0\xc9\xc1\xfa\x7f\xeb\xf6\xf1\xeb\xc5\xa5\
-\xdd\x9e\xdb\x65\xb3\x86\x70\xdf\x3f\x37\x53\xdd\x64\x99\xe1\x7e\
-\xf4\xec\x5a\x46\xf4\xcb\xc9\xa8\xe2\x1e\x7e\xeb\xb3\x34\xff\xdc\
-\xd5\xf3\x87\x1d\x52\x2e\xd5\xad\xe7\x8e\xe1\xe7\x2f\x58\x79\x5c\
-\x15\x75\x41\x6e\x7d\x72\x35\x0f\x7f\x63\x7a\xa7\xfa\x81\x55\xcd\
-\x21\xae\x7f\x64\x39\x71\xdd\x70\x46\x44\x07\xc7\x8b\xe4\x42\x14\
-\x85\xa3\x3a\xcf\x9b\xd8\xcb\x40\x69\xc3\x30\x19\x31\x62\x24\x4d\
-\x4d\x4d\x6c\xdc\xb8\x9e\xa1\x43\x87\x32\x69\xd2\x64\x52\x93\x8e\
-\x53\x43\xcd\xbb\xc2\xcc\x99\xed\xe5\xe4\xca\xcb\xcb\x58\xb6\x6c\
-\x09\xb3\x66\xcd\x61\xe8\xd0\xa1\x08\x82\xc0\xde\xbd\x95\xd4\xd5\
-\xd5\xd2\xda\xda\x6e\xf1\x91\x24\x99\xec\xec\xec\xc3\xfe\x90\xd0\
-\x25\xc9\xc9\x2a\x62\x9f\x21\x08\xf9\xc5\x56\xf8\x3a\x10\x8c\x58\
-\xf3\x6e\x75\x45\x5c\xe9\x04\x0d\x81\x88\x46\x24\xa6\x81\x16\xc5\
-\x6c\x6b\xc0\x68\xdc\x07\x91\xce\x31\x03\x6e\x55\xc6\xd3\x43\xcc\
-\x81\x28\x8a\x64\x67\x67\x13\x08\x04\xd0\xb4\x83\x73\x75\xc8\x47\
-\xf3\x3e\xbe\xf3\xca\x29\xbc\xb1\x76\x1f\xe5\xb5\x96\xd3\xf0\x2b\
-\x0f\x2c\xe1\x47\x97\x8e\xe7\xe6\x05\x63\xf1\xba\xac\x53\xa9\x6a\
-\x0c\xf3\x7e\x69\x15\x3f\xfb\xeb\x3a\xea\x12\xfe\xa6\xc5\x2b\x2b\
-\xd2\x88\x4b\x10\xe0\xa1\x6f\x4c\x63\xd6\x8f\xdf\xb6\x4d\x76\x77\
-\xbe\xb4\x91\x7f\x97\xee\xe7\xdc\x13\x07\x33\x7e\x70\x0e\xe5\x35\
-\x6d\x7c\xbc\xa5\x96\x7f\xac\xe8\x59\xa1\xe4\xf8\x5c\x3c\xf2\xcd\
-\x69\x2c\xfc\xed\x47\x00\x54\xb7\x44\x98\x7f\xc7\xdb\xdc\x7c\xde\
-\x58\x66\x8f\x2e\xa4\xb8\x8f\x97\xcd\x15\xcd\x2c\x5e\x51\xce\xdb\
-\xeb\xda\xf3\x22\x06\xe4\x79\xf8\xcd\xd7\x4e\x3a\xa4\x3e\xb9\xf5\
-\x82\x71\x2c\x5e\x55\xc9\xfa\xdd\x56\x64\xe3\xf3\x1f\x95\x51\x5a\
-\xde\xcc\xf5\x67\x8c\x60\xea\xb0\x02\x02\x61\x8d\x35\xbb\x1b\xf8\
-\xe3\xeb\x5b\xba\x2d\x6d\xe5\xc0\xc1\xb1\xab\xbc\x8e\xbd\x73\xf2\
-\x78\x3c\xcc\x9f\x7f\x3a\x53\xa7\x9e\xc4\xee\xdd\xbb\xf0\xfb\xfd\
-\x8c\x1d\x3b\x36\x2d\x9f\xea\x40\x72\xab\xea\xea\x6a\x59\xb6\x6c\
-\x09\x67\x9d\x75\x0e\x97\x5c\xb2\x90\xac\x2c\x2b\x60\x2a\x10\x08\
-\xb0\x6f\xdf\x3e\x96\x2d\x6b\x57\x73\x13\x26\x4c\x60\xfc\xf8\xe1\
-\x34\xa2\xf5\x00\x00\x1d\xae\x49\x44\x41\x54\x09\x47\xad\xf3\x85\
-\xac\x02\x84\xbc\xfe\x36\x69\x61\x68\x7c\xb2\x71\x17\xd7\xdf\xdb\
-\xc0\x49\xa3\x07\xa0\xca\x12\xb9\xd9\x5e\x16\x9d\x3d\x05\x57\x82\
-\xc8\xd6\x6d\xaf\xe6\xe3\xb5\x3b\x01\x68\x0d\x45\x78\x77\xc5\x76\
-\x76\x6d\xdb\x8b\x11\x0d\x63\x46\x43\xa0\x67\xf6\x9f\xb9\x54\x19\
-\x8f\x5b\xee\x76\xd6\x6b\xc3\x30\x88\x44\x22\xe4\xe6\xe6\x7e\xbe\
-\xf3\x71\xf5\x16\x5e\x97\xcc\xa3\xdf\x9a\xce\x05\xf7\x7e\x40\x5c\
-\xb7\xca\x44\xdd\xf5\xe2\x26\xee\x7e\x69\x13\x43\x0b\xfd\x84\x62\
-\xba\xad\x7a\x6c\x06\x57\x24\x7e\x7e\xf9\xc4\x4e\x6d\x4d\x18\x9c\
-\xc7\x2f\xaf\x9c\xc2\x1d\x7f\x6b\xaf\xc4\xb1\x64\x6b\x1d\x4b\xb6\
-\xd6\x75\x96\xbd\x59\x2a\x71\xcd\xe8\xb2\x36\x22\xc0\x82\xa9\x03\
-\xb9\x65\xc1\x68\xbb\x40\x6e\x4c\x33\xf9\xc3\xab\x5b\xf9\x03\x5b\
-\x33\x6e\xef\x73\xc9\x3c\x7e\xd3\xac\x83\xaa\x64\x9f\x0a\x49\x14\
-\x78\xfc\xdb\xd3\x59\x70\xf7\xbf\x6d\x62\xda\x54\xd1\xc4\x6d\x4f\
-\x7d\x92\x99\x64\x53\xcc\xad\x49\xac\xde\x51\x47\x41\x96\x87\xe1\
-\xfd\xfc\xce\x28\xe9\xe0\xd8\x93\x5d\x9f\x4b\xad\xbf\x9e\x8f\x29\
-\x08\x02\x79\x79\x79\x9c\x78\x62\xcf\x0f\x9f\x9a\xa6\x11\x0c\x06\
-\x71\xb9\x5c\xb8\xdd\xee\xb4\x41\xb8\xac\x6c\x37\x4f\x3f\xfd\x24\
-\x93\x26\x4d\x62\xe1\xc2\x2b\xd2\x06\x63\xbf\xdf\xcf\x8f\x7e\xf4\
-\x13\x96\x2e\x5d\xc2\xd6\xad\x5b\x19\x34\x68\x10\x67\x9d\x75\xce\
-\x41\x07\x25\x1c\xf8\x08\xef\x42\xe8\x3b\x0c\x24\x6b\x9c\x32\xc3\
-\x6d\x98\xd5\x3b\x08\x87\x5b\x78\x7d\x17\xbc\x25\x5a\xdf\x4f\x6e\
-\x8e\x8f\x91\x83\x0b\x99\x3d\x71\x20\xa6\x09\xcb\xd6\xef\xe4\xe7\
-\xbf\xf9\xdf\xa4\xe6\x42\xd3\x0d\x7a\x2a\x3f\xa4\xc8\x22\x83\x8a\
-\x72\x50\x24\xa9\x4b\x25\x65\x9a\x26\x2d\x2d\x2d\x48\x92\x44\x51\
-\x51\xd1\xe7\x3b\x03\xf2\x84\xc1\xb9\x29\xe4\x24\x51\x52\xd8\xf5\
-\x00\x3a\x77\x5c\x3f\x96\xff\xfa\x1c\x6e\xf8\xf3\x2a\x5b\x65\x98\
-\xa6\x55\x58\xb7\x23\xa6\x8d\xea\xc3\x63\xdf\x9a\xc1\xa8\x01\x39\
-\x19\xdb\xfa\xee\x85\xe3\x98\x52\x92\xcf\x0d\x7f\x5e\x4e\x55\x07\
-\xc2\x4b\x62\x74\x71\x36\x2f\xff\x60\x3e\x4f\xbe\xb7\x8d\x87\xde\
-\xb4\x1c\xa4\x53\xbb\xf0\x49\xfd\xfa\x9a\x93\x98\x3b\xbe\x88\x5b\
-\x9e\x58\x4d\x4d\x4b\xa4\xcb\x6b\x38\x65\x5c\x3f\x1e\xfd\xf6\x74\
-\x86\xf4\xed\x7c\x9d\xd3\x46\x16\x50\x59\x6f\x85\x87\x4e\x1b\xde\
-\x3b\xc7\xe3\xb8\x41\x79\xac\xbe\xff\x7c\x6e\x7a\x6c\x15\x6f\xaf\
-\xdb\xd7\xe5\x76\x37\x9e\x3d\x9a\x5b\xcf\x1b\xcd\xe4\xdb\x5f\x47\
-\xd3\x4d\x6b\x8a\xee\x3c\x77\xa7\x8a\x21\x0e\x1c\x1c\x33\x94\x25\
-\xf4\x4e\x71\x55\xd7\x54\x53\x5f\x5f\x9f\x66\xee\xf2\x7a\xbd\x0c\
-\x1f\x36\xfc\xe0\x0e\x7c\xc0\x8a\xb0\xeb\x9d\x22\x91\x30\x4b\x97\
-\x2e\x61\xe5\xca\x15\x0c\x1c\x38\x88\x8b\x2f\xbe\x84\xdc\xdc\x5c\
-\x6b\x8e\xab\x9d\x3b\x78\xe9\xa5\x17\x18\x35\x6a\x34\x97\x5e\x7a\
-\x79\x46\x05\xe1\xf1\x78\x39\xf3\xcc\xb3\x39\xf3\xcc\xb3\x8f\x58\
-\x5f\x77\x65\x26\x14\x5c\x3e\x04\x35\x41\xb4\xa6\x81\x59\xb3\x13\
-\x33\xd8\x94\xa0\x23\xd0\x12\x9e\x87\x78\x5c\x4b\x0b\x38\xb3\x12\
-\xc2\x0f\xcc\x8c\xe7\x52\x65\xc6\x0f\x2b\xec\xf6\x8b\x09\x87\xc3\
-\xd4\xd7\xd7\x33\x64\xc8\x10\x0a\x0b\x0b\x0f\x9e\x8f\x0f\x47\xa7\
-\x9d\x30\xac\x80\xbb\x17\x4d\xe1\xed\x75\xfb\xf8\xd6\xd9\xa3\xc8\
-\xf1\xaa\x3d\x0e\xd4\x1f\xfd\xea\x6c\x1e\x7d\x67\x3b\xff\xde\xb8\
-\x9f\x75\xbb\xea\x6d\xb5\x31\xb2\x7f\x36\x53\x86\xe5\x33\x6f\x7c\
-\x21\xd7\xcc\x1f\xd1\x63\x72\xed\x69\x93\xfa\xb1\xe6\xfe\xf3\x79\
-\x79\x59\x39\xeb\xcb\x1a\xd8\x50\xd6\x48\x5b\x58\xe3\xa4\x11\x05\
-\x4c\x1b\xd9\x97\xaf\x9c\x32\x8c\x6c\xaf\xc2\x1d\x97\x4f\x26\x14\
-\xd3\x08\xc7\x74\x7e\x70\xd1\xf8\x2e\xdb\x3b\xef\xa4\x41\xcc\x1c\
-\x53\xc4\x5f\x3e\xdc\xc5\xda\x5d\xf5\xac\xdd\xd5\xc8\xfe\xc6\x20\
-\x13\x06\xe7\x31\x75\x78\x3e\x73\xc7\x15\x71\xe9\x8c\x92\x2e\x7f\
-\x8c\xf7\x5c\x35\x95\x6c\xaf\x4a\x9e\x5f\xe5\x86\x03\xa8\xe0\x5e\
-\x94\xe3\xe1\x1f\x3f\x3c\x95\x7f\xae\xdc\xc3\x07\xa5\x55\xac\xdd\
-\x55\xcf\xa7\x7b\x5b\x18\x3b\x30\x87\xd9\xa3\x8b\x38\x67\x6a\x31\
-\xa7\x4f\xee\x0f\xc0\xa3\xdf\x9a\xc9\xa3\xef\x6c\xe3\xf2\xd9\x43\
-\x1d\xd2\x72\x70\x4c\x53\x57\x6f\xcd\x6d\xeb\xd6\xad\xe3\xc3\x8f\
-\x3e\x48\x2b\x01\x34\x78\xd0\x60\x6e\xbb\xf5\x3b\x07\x38\x80\x1f\
-\xfe\xab\xa8\xae\xae\xe6\xb9\xe7\x9e\xa5\xa6\xa6\x1a\x97\xcb\x45\
-\x7d\x7d\x1d\x03\x07\x0e\xc2\x30\x0c\x3e\xfd\x74\x2b\x23\x47\x8e\
-\xe2\xbf\xfe\xeb\x12\x3b\x20\xe3\x48\x93\xd1\x01\xc1\xdd\x9e\xe3\
-\x69\xc6\x23\x36\x69\x1d\x09\xe4\x65\x79\x18\x56\x5c\x40\x7a\x36\
-\x9d\x60\x3f\x13\x88\xa2\x48\x38\x1c\x26\x37\x37\x97\x11\x23\x46\
-\xd8\xd1\x9b\x9f\xab\xa9\xf0\x7b\x17\x8d\xe7\x7b\xdd\x10\x42\x26\
-\x13\xd9\x4d\x0b\x46\x73\xd3\x02\x6b\x70\xdf\xdb\x10\x22\xdb\xa3\
-\x1c\x94\xe9\x2d\xd7\xa7\xf2\xcd\x0e\x45\x78\x3b\xc2\xeb\x92\xf9\
-\xe3\xf5\xd3\x7b\xd5\x5e\xbe\x5f\xe5\xb6\xf3\xc7\xa6\xfd\x18\x7a\
-\xab\x68\x87\xf4\xf5\xf1\xc8\x37\xa7\x1f\x74\x3f\x5e\x32\x63\xb0\
-\x1d\x6d\xd9\xd5\x71\x17\xcd\x1d\xca\xa2\xb9\x43\x9d\x71\xd1\xc1\
-\x17\x06\xc1\x60\x90\xfd\x55\x35\xd4\x35\x58\x03\x6b\x96\xcf\x87\
-\xdf\x7f\xe0\x01\x0c\x82\x60\x76\x56\x5d\xd6\xdc\xf3\x98\x5d\xe4\
-\x71\x65\x22\xbf\xf4\x04\x65\x21\x31\xc7\x97\x45\x26\xa1\x50\xd8\
-\x56\x23\xa7\x9c\x32\x8f\xd9\xb3\xe7\xe2\xf5\x7a\x8f\x81\x5e\x34\
-\x3b\xfc\x07\x41\x49\x11\x11\x5a\xac\x4b\x66\x17\x05\x01\x9f\xa7\
-\x7d\xec\x6d\xed\x45\x61\xde\x8e\xfb\x9f\x3d\x63\x24\x6e\x55\x42\
-\xd7\xf5\x2e\xa5\x6d\x56\x96\x9f\xe2\xe2\x62\x54\xf5\xd0\x8a\x83\
-\xcb\xc7\xca\x8d\x9b\x9a\x54\x7c\xcc\x3d\x37\x0a\x5f\xae\xe3\x3a\
-\x70\x70\x78\x86\x51\x6b\x52\xc7\xde\x14\x52\xd5\x74\x1d\x53\x8b\
-\x51\xe8\x0e\x61\x0a\xa0\x8b\x12\xf1\xc4\xd4\x17\x07\xa3\x52\x32\
-\x5a\xff\xd2\x18\x29\x99\xe7\x65\xd2\x9d\x99\xd0\x34\x4d\x0a\x0b\
-\x8b\x58\xb4\xe8\x2b\x2c\x5b\xb6\x94\x7e\xfd\xfa\x71\xed\xb5\xdf\
-\xb0\x83\x2f\x3a\x6e\x2b\x1c\x2b\x3f\xda\x04\x3f\x99\x91\x40\x7b\
-\xed\x7b\xd5\x0b\x92\x6c\xd5\x1a\xec\x80\xbe\x7d\x72\x19\x39\x30\
-\xdf\xfe\xde\x36\x7e\x7a\x60\x69\x37\x63\x4a\xfa\x32\x6b\x72\x49\
-\xca\x73\x82\xd9\xa9\x6f\x0c\xdd\x40\x55\xd5\x83\x98\xaa\xe6\x18\
-\x26\x2e\x07\x0e\x1c\x7c\x91\x20\x80\x49\xaf\xe7\x5c\x8a\x6b\x1a\
-\xf9\x72\x90\x6f\x4f\x2c\x23\xea\x83\xff\xab\x18\x48\x8b\x1e\x3f\
-\x68\xe2\xea\x6e\xbd\xa5\xa0\xba\x7b\x30\x4c\x27\x33\x8f\xc7\xc3\
-\xb9\xe7\x9e\xcf\x29\xa7\xcc\xc3\xe3\xf1\x1e\x74\x24\xdc\xe1\xbc\
-\x8e\xde\x6a\x2f\x22\x81\xf6\xeb\x91\x14\xc4\xfc\x81\x18\x0d\x7b\
-\xac\x1a\x83\xc9\xeb\xf3\xba\xf9\xd6\x57\xce\x22\x3b\xe1\xe2\x31\
-\x0c\x93\x8d\x9b\x77\xf5\xfa\x58\x05\x39\x5e\xce\x9d\x3d\x06\x9f\
-\x5b\xe9\xf4\x7d\x09\x82\x80\x69\xa4\xab\x60\x51\x14\x33\xce\x42\
-\xed\x10\x97\x03\x07\x0e\x8e\x89\x87\xfe\xde\x12\x97\xae\xe9\xb4\
-\x44\x05\x3e\xda\x9f\x8b\xe6\x82\xbd\x4d\x2a\xee\x02\xfd\x90\x89\
-\xab\x27\x5d\xd5\x3e\xe7\xa4\xb5\x45\x92\xd0\x32\x99\x0b\xb3\xb2\
-\xb2\x7b\x75\xfc\xa3\xad\xba\x52\xaf\xb9\x23\xdf\x99\xf1\x30\x04\
-\x9a\xc0\x9f\x6f\x85\xc6\x17\x0c\x46\x92\x15\x68\xae\x46\xd4\x22\
-\x8c\x1b\x33\x94\x6f\x5c\x76\x0a\x57\x9e\x73\xa2\xbd\xcf\xbb\xab\
-\x77\xb1\xbf\xaa\xb6\x57\xc7\xf6\xb8\x14\xce\x9e\x39\x8a\xa9\x63\
-\x8b\x13\xd7\x6d\xa6\x75\xae\x28\x0a\x68\x5a\x0c\xd3\x34\x11\x13\
-\x55\x54\x24\x49\xb2\xc9\xeb\x60\xab\xaa\x38\xc4\xe5\xc0\x81\x83\
-\x23\x36\xa0\xea\xba\x81\x28\xf6\x4c\x3e\x26\xd0\xaa\xb9\x79\x7b\
-\x5f\xfb\xdc\x79\xc3\x0b\x84\x83\x20\x2e\xa3\x5d\x71\x98\xb4\xfb\
-\xb6\x52\x7c\x5c\xdd\x91\x58\x2a\xe7\xb4\xab\xb3\x03\x23\xa3\x43\
-\x25\xaf\x43\x53\x5b\x1d\xf6\xd5\xe2\x18\x75\xbb\x11\x15\x17\xb8\
-\x7c\x4c\x1d\xd5\x8f\x07\xae\xbb\x80\x89\x43\x72\x31\x31\x51\x25\
-\x29\xa1\x7c\xac\xeb\xdf\xbc\xbb\x86\x9f\xfd\xf6\xaf\xe8\xbd\x28\
-\x74\xe0\x71\x29\x9c\x3b\x67\x2c\x17\x9e\x3a\x11\x59\x04\x43\xd7\
-\x6c\x33\xa1\x69\x5a\x45\xb7\x44\x49\x22\x1a\x0d\x01\x82\x3d\x53\
-\x40\x2a\x71\x39\x8a\xcb\x81\x03\x07\xc7\x96\xdc\x32\xcd\x5e\x2b\
-\xae\x89\xe3\x27\xe0\x72\xb9\xd3\x06\xed\xfc\xbc\xdc\x43\xf0\x71\
-\x09\x9d\x19\x29\x85\xc4\x10\xba\xa2\xb0\xf6\x19\x84\x53\x15\xd8\
-\xc1\x90\xcf\xc1\x0c\xca\x07\x4a\x5a\x76\x6d\x46\xd3\xb4\xd5\x96\
-\x69\x82\x2c\xb7\x97\xda\x32\x43\x6d\x18\x75\xe5\xc8\x7d\x87\x70\
-\xd2\x88\x51\x9c\x34\xa2\x73\x9a\x8e\x6e\x98\xac\xd9\x5a\xc9\xfd\
-\x4f\xbd\xcd\xae\xf2\x9e\xe7\x1b\xeb\x93\xeb\x63\xc1\xec\x31\x2c\
-\x98\x33\x9e\x3d\x4d\x71\xdc\xb2\x49\xa1\x57\x68\xff\xea\xb1\x4c\
-\x82\xb2\x24\xd1\x1a\x09\x25\x0a\xed\x5a\xc4\x25\xcb\x32\xb2\x2c\
-\xf7\x7a\xca\x1b\x87\xb8\x1c\x38\x70\x70\x14\x21\x24\x54\x57\xcf\
-\x73\x42\x8d\x1d\x33\x9a\xb1\x63\x3a\xa7\x8f\xf4\x66\xdf\xcc\x84\
-\x91\x20\x1e\x3a\x98\x0a\x53\x98\x28\x95\x94\xba\x26\x28\xd3\xbe\
-\x8e\x03\x25\xa2\x54\x12\xea\x7e\xf2\xca\x43\xf4\x67\x99\x9d\xcf\
-\xb9\x6f\x5e\x16\x39\x59\x1e\x6b\x6a\x13\xd3\xc0\x6c\xa9\x41\x8b\
-\x85\xd8\xb8\xd1\xcb\xe6\xf2\x61\x8c\x1f\x92\x6f\x4f\xd8\x59\xdd\
-\x14\xe2\x8d\x8f\x4b\x79\xec\xaf\xef\xb0\x6d\xd7\xde\x6e\xe7\xf0\
-\x12\x05\x81\x71\xc3\x8b\xb8\xe8\xd4\x89\x9c\x34\x76\x20\x82\x08\
-\xd9\x1e\x1d\xc1\x34\xda\x29\x2b\x71\x42\x49\x65\x15\x0c\xb6\x01\
-\x02\x8a\xa2\xe0\xf1\x78\x10\x04\xeb\xbd\x43\x5c\x0e\x1c\x38\x38\
-\xf6\x44\x97\x69\x12\x8f\xc7\x0f\xba\x1e\xdd\xc1\x22\x6d\x30\xec\
-\x60\x2a\xcc\xac\x86\x3a\xd2\x5b\xf7\xfe\xae\x83\xed\x8b\xae\x88\
-\xca\x4c\xff\x93\x22\x58\xcd\xf4\x99\x82\xcd\x44\x40\x83\x88\x9d\
-\xdf\x6a\x26\xf6\x4b\xdd\x5d\x10\x60\xc2\xc8\x62\xe6\x9e\x38\x8a\
-\xfd\xb5\xcd\x44\xa2\x71\xab\x1f\x42\xad\xac\xfe\x78\x29\x17\x6e\
-\xde\xc8\xc8\x61\xc5\x14\xf6\x2d\x60\xc7\xae\x4a\xaa\x6a\x1a\x08\
-\x84\x22\x04\x43\x99\x8b\x2e\x28\xb2\x84\xc7\xa5\x90\x9f\xe3\xe3\
-\x82\x79\xe3\x38\xed\xe4\x91\xb8\x55\x19\xd3\xb4\x92\x94\x8b\xfc\
-\x12\xba\x0e\x9a\xa6\xa7\x9d\xaf\xa2\x28\xc4\xe3\x11\x22\x91\x10\
-\x92\x28\xa1\xaa\x2a\x1e\x8f\x07\x97\xcb\x65\x47\x17\x3a\xa6\x42\
-\x07\x0e\x1c\x1c\x3b\x5a\x4b\x10\x68\x6c\x6c\x60\xdd\xba\x75\x47\
-\xb7\xc8\xae\x28\x32\x76\xc2\x28\x10\x04\xdb\x64\x25\xa4\x9a\x08\
-\x13\x23\x7b\xaa\xff\x2a\x39\xfb\x71\xca\xea\x04\x59\x75\x34\x1b\
-\x1e\xb8\xaf\xab\xdd\xe7\x63\x60\x24\xa3\x2c\x75\x1d\xc3\x30\x31\
-\x31\xad\xff\xa6\x81\x61\x9a\x98\x09\xb3\xaa\x91\x30\xb1\xb6\x13\
-\x96\xb5\x0c\x33\x5d\x61\x25\x67\x19\x16\x13\xbe\x22\x49\x96\x51\
-\x64\x19\x59\xb6\x94\xce\x7f\x5f\x39\x1f\x8f\x4b\x61\xed\xd6\x0a\
-\x82\xa1\x68\x4a\x1b\x26\xd5\xd5\x75\x54\x57\xd7\x81\x09\xb9\x7e\
-\x17\x39\x7e\x17\x90\x63\xaf\x57\x55\x19\xb7\xaa\xe0\x71\xc9\x0c\
-\x19\x90\xcf\xd4\x31\x83\x18\x5d\x52\x88\xc7\x25\x63\x18\x06\xba\
-\xae\xa7\xf9\xc1\x92\xf3\xa0\x25\x0f\x21\x08\x02\x5e\xaf\x97\xc6\
-\xa6\x6a\xe2\xf1\x38\xaa\xec\xc2\xeb\xf5\xda\xe4\x95\xac\xa0\x7f\
-\xd4\x15\xd7\x8c\x19\x33\x00\xb8\xff\xfe\xfb\x99\x33\x67\xce\x21\
-\x6f\x77\xa8\xe8\xee\x38\x99\xd6\xbd\xfd\xf6\xdb\xbc\xf2\xca\x2b\
-\xec\xdc\xb9\x93\x48\x24\x62\x17\xd9\xbc\xee\xba\xeb\x98\x3c\x79\
-\x72\xa7\x7d\x53\xa1\xaa\x2a\x83\x06\x0d\xe2\xdc\x73\xcf\x65\xd1\
-\xa2\x45\xbd\xea\xfc\x65\xcb\x96\xb1\x78\xf1\x62\xb6\x6c\xd9\x42\
-\x20\x10\xc0\xef\xf7\x33\x7e\xfc\x78\x16\x2d\x5a\xc4\xc9\x27\x9f\
-\xec\x8c\x74\x0e\xbe\x10\x64\x95\x8c\x14\xcb\xc9\xc9\x21\x1c\x0e\
-\x13\x0c\x06\x32\x9a\x10\x8f\x18\x71\xd9\x53\xa8\xa4\xab\x17\x21\
-\x11\x2c\x60\x93\x55\x87\x64\xe4\x54\x13\x63\x2a\x59\x75\x56\x5f\
-\x99\xc9\xcb\x22\x28\x03\xc3\x30\xd3\xc9\xc7\x30\x13\xef\x35\x74\
-\xdd\xc0\x34\x75\x3b\xb7\xcd\x34\x8d\x14\x52\xb3\x88\xcb\x34\x93\
-\xfb\x58\xdb\x44\x63\x71\x22\xd1\x38\xd1\xa8\x55\x9f\x54\x12\x05\
-\x44\x31\x31\x5d\x4c\x4a\xe5\xfd\xe4\xb5\x49\xa2\x8c\x24\xab\xa8\
-\xaa\x0b\x45\x71\x71\xdd\x7f\xcd\xe2\xe2\xd3\xa6\x58\x95\xdd\x3b\
-\xa8\x38\xa3\x83\xa2\xb3\x3f\x1b\x06\x2e\xc5\x52\x59\x1e\xb7\x82\
-\x4b\x91\x12\xbe\xca\x74\x42\x4d\x7f\xa5\xb7\xed\x72\xbb\x31\x31\
-\x68\x6c\xa8\x01\xd3\x4a\x29\x48\xaa\x2d\x97\xcb\x85\xa2\x28\xc7\
-\xb6\xe2\xba\xe2\x8a\x2b\x00\x28\x2e\x2e\x3e\x66\x7e\x60\x7f\xfb\
-\xdb\xdf\x78\xe8\xa1\x87\x50\x14\x85\x53\x4f\x3d\x15\x9f\xcf\xc7\
-\x86\x0d\x1b\x58\xb5\x6a\x15\x6b\xd6\xac\xe1\x99\x67\x9e\x61\xd4\
-\xa8\xf4\x4a\x1c\x73\xe7\xce\xb5\x67\x3a\xad\xae\xae\x66\xc9\x92\
-\x25\x3c\xfc\xf0\xc3\x04\x02\x01\x6e\xbc\xf1\xc6\x6e\x8f\xf7\xf8\
-\xe3\x8f\xf3\xf4\xd3\x4f\x03\x30\x7d\xfa\x74\x06\x0e\x1c\x48\x59\
-\x59\x19\xcb\x97\x2f\x67\xf9\xf2\xe5\x7c\xff\xfb\xdf\x67\xe1\xc2\
-\x85\x47\xbd\x1f\xde\x7b\xef\x3d\xee\xb8\xe3\x8e\x23\xfe\x50\xe1\
-\xe0\xcb\x81\xa4\x4f\xc3\xed\x76\x93\x9f\x9f\x8f\xaa\xaa\x47\xdd\
-\x4c\x68\xa9\x10\xc0\x4c\x04\x63\x98\x66\xe2\x63\x22\xa2\x30\x49\
-\x3c\x29\x44\xd6\xb5\x62\x4a\x57\x5f\x49\xc2\x4d\x55\x6b\xba\x6e\
-\xa0\xe9\x3a\x86\x9e\x32\xa0\x93\x7c\xaf\x63\x1a\x3a\xba\xa1\x63\
-\x18\x56\x68\x7f\x5b\x30\x42\x45\x65\x03\xfb\x6b\x9a\x09\x06\xa3\
-\x84\x22\x31\x82\xa1\x28\xa1\x70\x8c\x70\x24\x4e\x30\x14\x25\x1c\
-\x89\x13\x8a\xc4\x08\x87\xe3\xc4\x35\x4b\x9d\x19\xba\x69\x57\x4f\
-\x4a\x4e\xb9\x22\x08\xa0\xa8\x12\x79\x59\x6e\x0a\xf2\xbd\xe4\xe5\
-\x78\xe8\x9b\xef\x65\xd4\xd0\x3e\xe4\x64\xb9\x11\x45\x11\x8f\x37\
-\x8b\xac\xac\x3c\x0a\x72\x3c\x78\x3c\x6e\x54\x45\xee\x44\x5a\x16\
-\xc1\x1a\xf6\xb2\x64\x40\x8d\xae\x1b\xf6\xfb\x74\x62\x22\xe5\xd5\
-\x99\xbc\x24\x51\xc4\xef\xf7\x53\x57\x5b\x49\x24\x1c\x42\x96\x54\
-\x72\x72\x72\xf0\x7a\xbd\xf8\xfd\x7e\x14\x45\x41\x55\x55\x3b\xb2\
-\xf0\x98\x24\xae\xdb\x6f\xbf\xfd\x98\xfb\x81\xbd\xf8\xe2\x8b\x00\
-\xdc\x76\xdb\x6d\x36\x61\xc4\x62\x31\xae\xbe\xfa\x6a\x2a\x2b\x2b\
-\xf9\xe0\x83\x0f\x3a\x11\xd7\x45\x17\x5d\x94\x36\xb8\x3f\xf5\xd4\
-\x53\x3c\xf1\xc4\x13\xbc\xf6\xda\x6b\xdd\x12\xd7\x86\x0d\x1b\x6c\
-\xd2\xfa\xed\x6f\x7f\xcb\x29\xa7\x9c\x62\xaf\x7b\xf5\xd5\x57\xb9\
-\xef\xbe\xfb\xf8\xe3\x1f\xff\xc8\xbc\x79\xf3\xe8\xdb\xb7\xf3\xec\
-\xc7\x86\x61\x1c\xb1\x19\x64\xdf\x7e\xfb\xed\xc3\xda\xde\x91\x3c\
-\x57\x07\xc7\x3e\x64\x59\xc6\xed\x76\xdb\x64\xe5\xf3\xf9\x8e\x2a\
-\x71\x25\x7d\x2e\x49\x51\x67\x76\x54\x5c\x29\x3e\xae\x54\xc5\xd5\
-\xd9\x6c\xd8\x59\x75\x99\x66\x7b\xd9\x27\xdd\x30\x6d\x22\x02\xd3\
-\x22\x37\x74\x82\xe1\x30\xc1\x50\x84\x40\x30\x42\x20\x18\xa5\xa1\
-\x31\xc0\x9e\xfd\x0d\xec\xd9\xdb\xc0\xce\xb2\x3a\xf6\xec\x6f\xa2\
-\xb1\x29\x88\xde\xeb\x48\x49\xf3\xa0\xd4\xa9\x24\x0a\xf4\xeb\xeb\
-\x67\xd4\xf0\x02\xa6\x4d\x1a\xc0\xe0\xe2\x3c\xfa\x15\xf5\xc5\xef\
-\xcb\xc1\xeb\xf3\xe3\xf5\xb8\x91\x25\xd1\x26\xf6\x64\xe8\x7a\x47\
-\x45\x66\x9b\xfe\xda\x73\x0b\x6c\x85\x68\x29\x43\xa3\xc3\xb6\x26\
-\xa2\x24\xe1\xf3\xfb\x89\x44\x02\x54\x55\x55\x20\x0a\x12\x39\x39\
-\x39\x78\x3c\x1e\x72\x72\x72\xf0\xf9\x7c\xf8\x7c\x3e\x5b\x71\x1d\
-\xf4\xbd\x76\xa4\x6f\xa6\x54\x33\xdd\x73\xcf\x3d\x47\x69\x69\x29\
-\x5f\xfd\xea\x57\xb9\xf9\xe6\x9b\xed\x6d\xee\xb9\xe7\x1e\xde\x7c\
-\xf3\x4d\xce\x3c\xf3\x4c\xee\xb9\xe7\x1e\x00\x56\xad\x5a\xc5\x13\
-\x4f\x3c\xc1\xb6\x6d\xdb\xf0\x78\x3c\x9c\x7e\xfa\xe9\xdc\x7c\xf3\
-\xcd\x87\x65\x3a\x80\x86\x06\xab\x2a\x7d\xea\x8f\x4a\x55\x55\x1e\
-\x7f\xfc\x71\xbc\xde\xde\x65\xc6\x8f\x18\x31\x02\xb0\xe6\xdb\xe9\
-\x0e\x8b\x17\x2f\xb6\x15\x5b\x2a\x69\x25\xc9\xb0\xb5\xb5\x95\x71\
-\xe3\xc6\x91\x9f\x9f\x9f\xd6\x5f\x77\xde\x79\x27\x2f\xbd\xf4\x12\
-\x9f\x7d\xf6\x19\x2b\x57\xae\xb4\xf7\xe9\x4d\xbf\x2c\x59\xb2\x84\
-\x67\x9f\x7d\x96\x1d\x3b\x76\x20\x8a\x22\x13\x27\x4e\xe4\xb6\xdb\
-\x6e\xb3\xcf\xb9\xa3\x09\xf4\xfb\xdf\xff\x3e\x40\xda\x71\x76\xee\
-\xdc\xc9\x63\x8f\x3d\xc6\xba\x75\xeb\x88\xc7\xe3\x0c\x1e\x3c\x98\
-\xcb\x2e\xbb\x8c\x8b\x2e\xba\xa8\x53\x1b\x5d\x9d\xab\x83\x2f\x1f\
-\x71\xa9\xaa\x8a\xcf\xe7\x43\x96\xe5\xa3\x37\x75\x47\xe2\xa1\x29\
-\x1c\x0e\xd3\xd4\xd4\x94\x32\xd4\x9b\xed\xe1\xe2\x09\xe9\x24\xa4\
-\xbc\x37\x53\x55\x5a\xda\x3e\xed\x3e\xaf\xf4\x01\xdc\xb4\x89\x4a\
-\x12\x4d\x24\x11\x2a\xf7\x37\xb1\xb3\xac\x9a\x1d\x65\x35\x54\x54\
-\xd6\x53\x53\xdf\x4a\x6d\x7d\x2b\x35\x75\xad\x34\xb7\x86\x3a\x04\
-\x62\x08\xe9\x9c\xd4\xd1\x6a\xda\x1e\xfa\x98\xb2\x4d\x6f\x23\x43\
-\xda\x1b\xd4\x0d\x93\x7d\x35\x6d\xec\xab\x69\x63\xd5\xfa\x7d\x4c\
-\x18\xd5\x97\x69\x53\x06\x30\x75\x42\x31\x7d\xfa\x14\xa1\x69\x79\
-\x78\x3d\x6e\x14\x25\x7d\xde\xac\xce\x6a\x2a\xd9\x1f\x46\xa7\x70\
-\xfb\x24\xd9\xa5\x12\x5d\xd2\xaf\xa5\x6b\x31\xf6\x54\x6c\x07\x44\
-\x7c\x3e\x3f\x7e\xbf\x9f\xdc\xdc\x5c\xdb\x5c\x78\xa8\x81\x19\x47\
-\x85\xb8\x52\x71\xfa\xe9\xa7\x53\x5a\x5a\xca\xf2\xe5\xcb\x6d\xe2\
-\x32\x0c\x83\x65\xcb\x96\x01\x70\xe6\x99\x67\x02\x50\x5a\x5a\xca\
-\x77\xbf\xfb\x5d\x00\xce\x38\xe3\x0c\x5a\x5b\x5b\x79\xe5\x95\x57\
-\xa8\xaf\xaf\xe7\x77\xbf\xfb\xdd\x21\x9f\xc7\x90\x21\x43\xd8\xbd\
-\x7b\x37\x0f\x3f\xfc\x30\x9f\x7e\xfa\x29\xb3\x67\xcf\x66\xca\x94\
-\x29\x07\x54\x66\x7f\xe7\x4e\x6b\x92\xb5\x8e\xca\xac\x23\x4a\x4b\
-\x4b\x6d\x13\x61\x26\x7c\xed\x6b\x5f\xcb\xb8\xfc\xb9\xe7\x9e\x63\
-\xc0\x80\x01\x5c\x78\xe1\x85\x69\x6d\xf5\xd4\x2f\x9b\x37\x6f\xe6\
-\x87\x3f\xfc\x21\xa2\x28\xb2\x60\xc1\x02\x2a\x2a\x2a\xf8\xe4\x93\
-\x4f\xb8\xfd\xf6\xdb\x59\xbc\x78\xb1\x5d\xdc\xf2\x8a\x2b\xae\xe0\
-\xa5\x97\x5e\xea\x64\x06\x05\x28\x2f\x2f\xe7\x86\x1b\x6e\x20\x14\
-\x0a\x31\x6d\xda\x34\x0a\x0b\x0b\x79\xef\xbd\xf7\xb8\xef\xbe\xfb\
-\x68\x6b\x6b\xe3\xab\x5f\xfd\x6a\x8f\xe7\xea\xe0\xcb\x07\x41\x10\
-\x6c\x13\x90\xa2\x28\x47\x55\x6d\xc5\x62\x31\xc2\xe1\x70\x3a\x45\
-\x98\xe9\x6a\xcc\x36\x19\xa6\x90\x59\x67\xd5\xd5\xee\xcb\x6a\x5f\
-\x0e\x92\x64\xf9\x95\x4c\xd3\xa4\xaa\xb6\x89\xd5\xeb\x76\xb3\x72\
-\xdd\x4e\xb6\xef\xaa\xa6\xa6\xae\x95\xfa\xc6\x36\xe2\x9a\x91\x76\
-\x50\x6b\xa6\x2b\x21\x9d\xa0\x4c\x30\x13\xc1\x20\xe9\xcb\x4d\x5b\
-\x25\x66\x1c\xd0\x05\x30\x4d\xa1\x7d\x97\x0e\x04\x97\x54\x93\xf6\
-\x31\x13\xa6\xc4\x78\xcc\x60\xc3\xd6\x5a\xf6\xec\x6f\xa5\x72\x7f\
-\x1b\xe7\x9d\xa6\x11\x8d\x86\xc9\xcb\x2b\xc4\xe3\xf6\xe0\x52\xe5\
-\x14\x02\xea\xa8\xac\x3a\x9a\x06\xcd\x0e\xbe\xb9\x74\xd2\xf2\xfb\
-\xfd\xe8\x46\x9c\x7d\xfb\x76\x11\x89\x84\xf0\xb8\x7c\xe4\xe4\xe4\
-\x90\x97\x97\x87\xdf\xef\xc7\xe7\xf3\xe1\x76\xbb\xed\x3c\xae\x43\
-\x7a\x48\x3a\xd4\xca\xf9\xed\xcc\xdc\xf3\x76\xa7\x9d\x76\x3a\x0f\
-\x3e\xf8\x20\xbb\x77\xef\xa6\xaa\xaa\x9a\x7e\xfd\xfa\x51\x5a\xba\
-\x99\xe6\xe6\x66\xfc\x7e\x3f\x33\x66\xcc\xc4\x34\xe1\xd9\x67\x9f\
-\x45\xd7\x75\xae\xb9\xe6\x1a\xbe\xf5\xad\x6f\x27\x54\xc1\xf7\x58\
-\xb2\x64\x09\x65\x65\xe5\x94\x94\x94\x1c\xd4\xf9\x24\xd7\xdd\x7c\
-\xf3\x2d\xfc\xe8\x47\x3f\x24\x1e\x8f\xf3\xce\x3b\xef\xf0\xce\x3b\
-\xef\xd8\x2a\xea\xaa\xab\xbe\xc2\x82\x05\x0b\x3a\xed\xfb\xaf\x7f\
-\xbd\xca\xea\xd5\xd6\xe4\x8e\x4d\x4d\x8d\xbc\xff\xfe\xfb\x64\x67\
-\x67\x73\xcb\x2d\xb7\x76\x7b\xfd\x49\x75\xd7\xa7\x4f\xdf\x03\x9a\
-\x72\x61\xc8\x90\x21\xfc\xfa\xd7\xbf\xb1\xcf\x1b\x7a\xd7\x2f\x0d\
-\x0d\x8d\x5c\x72\xc9\x25\x94\x94\x0c\x65\xe1\xc2\x85\xb4\xb6\xb6\
-\x72\xf6\xd9\x67\x51\x57\x57\xc7\xd6\xad\x5b\x99\x3c\x79\x0a\x00\
-\xdf\xf9\xce\xed\x36\x71\x5d\x78\xa1\x65\x06\x4d\x1e\xe7\xc9\x27\
-\x9f\x22\x14\x0a\x31\x6f\xde\x3c\xfb\x1c\xa6\x4c\x39\x81\x5f\xfd\
-\xea\x1e\x9e\x79\xe6\x19\x16\x2e\xbc\x2c\x6d\x4a\x82\x4c\xe7\xea\
-\xe0\x4b\x4b\x5f\xc8\xb2\x82\x24\xc9\xb8\x5c\x87\x69\x6a\x8e\x1e\
-\xa0\x69\x1a\x9a\xa6\x91\x12\x78\x47\x32\x87\x2b\xb5\xe8\x6e\x9a\
-\xd2\x12\x04\x30\x0c\xcc\x84\x69\x3b\x75\xd6\x63\xeb\x8d\x89\x28\
-\x98\xc4\x75\x9d\x60\x20\x42\x6d\x7d\x1b\x6b\x36\x94\xf1\xe1\xb2\
-\x4f\xf9\x6c\x57\x15\xb1\x98\x46\x3c\xae\x61\x24\xea\xf0\xa9\x92\
-\x84\x22\x4b\x5d\x12\x67\x2a\x71\xa5\x2d\x14\xcc\x4e\xc5\x2e\x10\
-\x7a\xb1\xaf\xd0\xb5\x72\x13\x44\x21\x51\x5e\x49\x40\x10\x45\x24\
-\x51\x44\x40\x64\xe3\xa7\xf5\x04\x42\x3a\xf3\x66\x14\x33\xa8\x7f\
-\x1b\x85\x85\x83\xf0\x7a\xbd\xb8\x5d\x2a\xa2\x28\xd8\x84\x65\x45\
-\x3a\x9a\x9d\xcc\x80\x69\x81\x1c\x89\x40\x0d\x10\x90\x15\x05\xd5\
-\xe5\x22\x12\x0e\x50\x5e\xfe\x19\xe1\x70\x18\x97\xea\xa5\xa0\xa0\
-\x0f\x79\x79\x79\x64\x67\xe7\x90\x9b\x6b\x91\x97\xcb\xe5\x46\x51\
-\xd4\x43\x1e\x27\x64\x93\x43\x2d\xe6\x68\xd2\x9b\x36\x4c\x4c\xfa\
-\xf4\xed\xc3\xa4\x49\x93\xd8\xb4\x69\x13\xcb\x97\x2f\xe3\xbf\x2e\
-\xb9\x84\xa5\x4b\x97\x00\x30\x6f\xde\x3c\x64\x45\xc6\xc4\xb4\x55\
-\xca\xf6\xed\xdb\x79\xe0\x81\x3f\xa4\x11\xc0\xa6\xd2\x4d\x0c\x29\
-\x19\x72\x50\xe7\x93\x5c\x37\x63\xe6\x0c\x9e\x7f\xfe\x79\x16\xff\
-\xf3\x9f\xac\x5c\xb1\x82\x8a\x8a\x0a\x5b\x45\xdd\x7d\xf7\x5d\x34\
-\x37\x37\x71\xe5\xa2\x45\x69\xfb\x26\xcf\x33\x15\xfd\xfa\xf7\xa7\
-\x74\x73\x29\x63\xc6\x8e\xe9\xf2\x09\x22\xf9\x43\x30\x4c\x83\x03\
-\xe9\xeb\xb9\x73\xe7\x76\xda\xbe\x37\xfd\x32\xf7\x94\xb9\xe4\x17\
-\xe4\xb3\x6a\xe5\x4a\x1e\x78\xf0\x81\x34\x26\x69\x0b\x04\x32\x9e\
-\x43\xc7\x3e\x5b\xbb\x76\x4d\xa7\x73\x98\x3d\x67\x36\x60\x4d\x3f\
-\xb1\x73\xe7\x0e\xc6\x8d\x1f\xdf\xed\xb9\x3a\xf8\xd2\xf3\x57\x06\
-\x33\xdc\x91\x3b\x56\x62\x78\xed\x28\xb3\xd2\x4c\x85\xb6\xd2\xb2\
-\x4c\x3d\x08\xa2\x68\xab\x05\x41\x14\x12\x4a\xc5\x00\x0c\x82\xa1\
-\x30\x65\x95\xf5\x6c\xdc\x5c\xc9\x8a\x35\x3b\x29\xdb\x53\x4f\x3c\
-\xa6\x01\x02\xaa\x2c\xa3\xda\xbf\x77\xb3\x67\xeb\x5d\x26\x93\xe0\
-\xa1\x90\x54\xc7\x65\x76\x5f\x5b\x2b\x44\x31\x59\x5e\x49\x40\x12\
-\x45\x24\x59\x44\x96\xac\x64\xdf\xb6\x80\xc1\xc7\xab\x6a\x18\x37\
-\x22\xc2\x98\x11\x51\x8a\x0a\xfb\x91\x9d\x9d\x87\xdb\xed\x46\x12\
-\x85\x2e\x22\x06\xcd\x8c\x0a\x4b\x92\x65\x54\x49\x46\x37\x34\x9a\
-\x1b\x6b\xd9\xb7\x7f\x37\x5a\x5c\xc3\xef\xcb\x22\x37\x27\x97\xdc\
-\x3c\xeb\x95\x93\x9b\x83\xc7\xeb\xc1\xed\xf1\xa0\xa8\x0a\x82\x28\
-\x1c\xf2\x78\x21\x1f\x8e\xe1\xc6\x3c\x80\xed\x4e\x3f\xe3\x0c\x36\
-\x6d\xda\xc4\xb2\xe5\xcb\xb9\xf8\x92\x4b\x58\xb2\xc4\x22\x84\x33\
-\xce\x3a\xcb\x6e\x27\xe9\x37\x5a\xb1\x62\x05\x2b\x56\xac\xe8\xa4\
-\x60\x32\x1d\x4f\x14\xc5\xf6\x50\xcd\x94\xe5\xa9\x99\xf7\xb2\xa2\
-\xd8\xeb\x8a\x07\x0d\xe2\xd6\xdb\x6e\xe3\xd6\xdb\x6e\xa3\xa1\xa1\
-\x81\xa5\x4b\x97\xf2\xf8\xa3\x8f\xd2\xdc\xdc\xcc\x4b\x2f\xbd\xc4\
-\x15\x1d\x88\xeb\xb7\xbf\xfb\x1d\xb3\x13\xc1\x19\x86\x61\x50\x5e\
-\x5e\xce\x7d\xf7\xde\xcb\xc3\x0f\x3d\x44\x59\x59\x19\x3f\xf9\xe9\
-\x4f\x33\x5e\x73\x61\x61\x21\x7b\xf7\xee\xa5\xb6\xb6\xf6\x80\xbe\
-\xaa\xec\x9c\x9c\x4e\xdb\xf7\xa6\x5f\xfe\xf1\xf2\xcb\x3c\xf0\x87\
-\x3f\x74\xa1\x38\xbb\xbe\x5d\x52\x97\xb7\xb4\xb4\x00\xe0\xcf\xce\
-\xb6\x97\xfb\xfc\xed\xb3\x3d\xb7\xb6\xb5\xa5\x6d\x9f\xe9\x5c\x1d\
-\x38\x38\x5a\x48\xa5\xab\xd4\xfb\x50\x94\x44\xdb\x97\xd2\xd5\x4b\
-\x4a\xe4\x3c\x81\x8e\x61\x68\xb4\xb5\x85\xd8\xb2\x6d\x3f\xeb\x4b\
-\x2b\xd9\x59\x56\x4b\x7d\x63\x00\x5d\xd7\xc9\xc9\xf2\x20\x20\x1c\
-\x83\x57\x9e\xce\xe0\x42\x82\xc1\xac\xe0\xca\x84\x49\x32\xe5\xe1\
-\x41\xd3\x75\x1a\x9b\xc2\x2c\xfd\x24\xcc\xde\xaa\x56\x4e\x9e\x1c\
-\x66\xf0\xc0\x20\xf9\xf9\xfd\xf0\xb8\x3d\x88\x09\xf2\xb2\x54\x57\
-\xaa\x05\x2b\x99\xea\x20\x21\x88\x56\x9f\x6a\xba\x4e\x4b\x73\x1d\
-\x0d\x0d\x35\xb4\xb5\xb5\x20\x20\x90\x93\x93\x4f\x56\x56\x16\x39\
-\xb9\xb9\x09\xb5\x95\x8d\xcf\xef\xc7\xeb\xf3\xa1\xa8\x2a\xa2\x24\
-\x1d\x96\xb1\x42\xe6\x68\xda\x0a\x4d\x93\xf9\xf3\xe7\xf3\xe0\x03\
-\x0f\xb0\xe6\x93\x4f\xd8\xbd\x6b\x17\xe5\xe5\xe5\xe4\xe6\xe5\x71\
-\xe2\xd4\xa9\x76\x3b\x59\x59\x59\xb4\xb4\xb4\x70\xcf\xaf\x7e\xc5\
-\x69\xa7\x9d\x96\xb9\xad\x0e\xc8\xcb\xcb\xa3\xa1\xa1\x81\x86\xfa\
-\xfa\xb4\xf5\x55\xfb\xf7\xb7\x93\x48\xdf\xbe\xc4\x63\x31\xca\xca\
-\xca\xa8\xaf\xaf\x67\xd6\xac\x59\x00\x14\xe4\xe7\x73\xd1\x85\x17\
-\x22\x4b\x12\xff\x73\xef\xbd\xd4\x77\x68\xa3\xe3\x75\x8a\x82\xc0\
-\xb0\xa1\x43\xb9\x72\xd1\x22\x7e\x71\xc7\x1d\xbc\xf7\xee\xbb\xfc\
-\xe4\x27\x3f\xc9\x78\xd9\x53\xa6\x4c\x61\xef\xde\xbd\xac\x58\xbe\
-\x9c\xcb\x2e\xbb\xac\xd3\xfa\x9f\xfd\xf4\xa7\x0c\x1d\x3a\x94\x4b\
-\x17\x2e\x24\x2f\x2f\xaf\xdb\x7e\xed\x4d\xbf\xfc\xe5\x7f\xff\x17\
-\x80\x4b\x2f\xbd\x94\x9b\x6e\xbe\x19\x49\x92\x98\x97\x0c\x0a\xe9\
-\xea\xbb\xea\xb0\x3c\x27\x27\x87\xa6\xa6\x26\x5a\x5b\x5a\xec\xe5\
-\x6d\xad\xad\xed\x44\x95\x9d\x9d\xde\x4e\x6f\xef\x01\x07\x0e\x8e\
-\xc8\xf8\x9d\x1e\x51\x60\x22\x60\x62\xe0\xf5\x78\x70\xbb\xdd\x24\
-\x1c\x4b\x1d\x86\x7b\xab\x12\x85\x89\x41\x5c\x0b\xd3\x16\x08\xb2\
-\x72\xcd\x6e\xde\xfb\x70\x2b\x8d\xcd\x21\x74\xdd\x4c\xa8\x30\x90\
-\xd3\xa2\xdf\xba\xa0\x2f\xab\xb9\x74\x71\x95\xfa\x9b\x48\x86\xe8\
-\xd3\x93\xf9\x30\x83\xdd\x30\xa3\x59\x30\x25\x21\x59\x48\x5f\x64\
-\xe5\x62\x99\x68\x29\xf9\x64\x86\x6e\xa2\x69\x3a\xd1\x58\x1c\x2d\
-\xae\xa3\xc5\x34\xaa\x76\xd7\xb2\x6b\x63\x15\xa7\x9e\x3a\x84\x71\
-\x13\x03\xf4\xeb\x3f\x10\x8f\x37\x2b\x51\xb5\x29\x61\x85\x49\x76\
-\x6b\xe2\xf0\xba\xa1\x13\x0a\xb6\xd1\xdc\xd2\x40\x30\xd8\x4a\x2c\
-\x1a\x41\xd3\x74\x3c\x6e\x2f\x59\x59\xd9\x78\x3d\x1e\x72\x72\x73\
-\xf1\xfb\xfd\xe4\xe5\xe5\xe1\xf3\x7a\xf1\xfa\x7c\xa8\x8a\x82\x2c\
-\x49\xed\x65\xb7\x0e\x95\xb8\x8c\x43\x6c\xc4\x00\x7a\xd3\x46\x72\
-\xbb\xbc\xfc\x7c\x26\x4f\x9e\xcc\x86\x0d\x1b\x78\xe2\x89\x27\x00\
-\x98\x3f\x7f\x3e\x82\x28\xda\xed\x8c\x1f\x3f\x9e\xe5\xcb\x97\xb3\
-\x76\xed\x5a\x4e\x9d\x3f\x1f\xb0\x72\x8e\x1a\xea\xeb\x39\x75\xfe\
-\x7c\xfa\xf5\xeb\xd7\xa9\xfd\x93\x4e\x3a\x89\x77\xde\x79\x87\x37\
-\xde\x7c\x93\x05\xe7\x9d\x67\x9b\xee\x92\x7e\x9c\xe2\xe2\x62\x86\
-\x94\x94\xf0\xde\xbb\xef\x72\xf7\x5d\x77\x21\x49\x12\x4f\x3e\xfd\
-\x74\x5a\xa4\x5d\x6d\xad\x55\xca\x7f\xd0\xe0\xc1\x9d\xae\x29\xd3\
-\x75\x96\x95\x95\x59\x6a\xc4\xe7\xeb\xb2\x0f\x2e\x5d\xb8\x90\xb7\
-\xde\x7a\x8b\x55\xab\x56\xf1\xde\x7b\xef\x71\xfa\x19\x67\xd8\xeb\
-\x5e\x7b\xf5\x55\x3e\xfc\xf0\x43\x96\x2e\x5d\xca\x99\x67\x9f\x4d\
-\x4e\x6e\x6e\xb7\xc7\xeb\x4d\xbf\x34\x35\x59\x33\xc8\x4e\x9a\x3c\
-\x19\x45\x55\x59\xb6\x74\xa9\xbd\x7f\x5c\xd7\x33\x9e\x67\x20\x14\
-\x4a\x5b\x3e\x75\xea\x54\xfe\xf3\x9f\xff\xb0\x74\xe9\x52\x16\x9c\
-\x7b\x2e\x00\x1f\x7f\xfc\xb1\x4d\x6a\xc3\x86\x0f\x4f\xdb\xbe\xb7\
-\xf7\x80\x03\x07\x47\x4c\x71\x99\x26\x82\x24\x61\x98\x10\x0c\x04\
-\x31\x4d\x2b\x2c\xbc\x13\x7f\x08\x02\xba\x66\x62\x45\xb6\x0b\x84\
-\x82\x11\xb6\xed\xaa\xe1\xf9\xc5\xab\xd9\xf4\xe9\x5e\x54\x45\xc1\
-\xed\x56\x71\xbb\x64\xcb\x37\x64\xe7\x85\xa5\x70\x86\xd0\x5b\x73\
-\x93\x99\xd9\x7e\xda\x1b\x15\x65\x76\x43\x5c\x9d\xcc\x8c\xe9\x39\
-\x66\x76\x12\xb4\x6e\x4d\xde\x68\x18\x06\x86\x66\x60\xc4\x75\x8c\
-\xa8\x06\x71\x1d\x43\x33\x30\x0d\x9d\xb2\x6a\xa8\xdc\x59\xcf\xec\
-\xf9\x0d\x4c\x9b\xd5\x44\x76\x96\xd7\x52\x56\x12\x88\x56\xc4\x3c\
-\x86\x69\xa0\xeb\x1a\xf1\x58\x34\x25\x94\x5f\x00\x53\xc0\xe3\xf1\
-\xe3\xf5\x7a\x71\xb9\x5c\xf8\xfc\x7e\x72\xb2\xb3\x71\xb9\xdd\x64\
-\x67\x65\xe1\xf5\xf9\xec\x28\xc2\xa4\xb5\xeb\x70\xf9\x3c\x0f\x39\
-\x38\xe3\x77\xbf\xf9\x0d\x0f\xb9\xdc\x9d\x96\xbf\xf8\xf7\xbf\x77\
-\x7e\x22\x49\x1c\x6b\xfe\x69\xa7\xb3\x61\xc3\x06\x3e\xfe\xe8\x23\
-\x00\x4e\x3f\xfd\x8c\xb4\x9b\x6b\xd1\x57\xbe\xc2\x8a\x15\x2b\xf8\
-\xd7\x2b\xaf\xd0\xdc\xdc\x8c\x24\x49\x7c\xf0\xfe\xfb\x14\x16\x16\
-\x72\xc1\x85\x17\x65\x24\xec\xaf\x5f\x77\x1d\xcb\x96\x2f\x67\xeb\
-\x96\x2d\x5c\x7f\xed\xb5\x4c\x9a\x3c\x99\xf2\xf2\x72\x36\xac\x5f\
-\x8f\x24\x49\x7c\xf7\x7b\xdf\xc7\x34\xe1\xd4\xf9\xa7\xb1\xf8\x1f\
-\x8b\xd9\xb2\x65\x33\xdf\xbe\xf1\x46\x66\xcd\x9e\x4d\x6e\x6e\x2e\
-\x7b\xf7\xee\xe5\x93\xd5\xab\xad\xb6\xbe\x7e\x6d\xa7\x63\xbc\xfe\
-\xea\x6b\xac\xf9\xe4\x13\xfb\xe6\xd8\xbf\x7f\x3f\x2b\x13\xe6\xba\
-\x85\x97\x5d\xde\xe5\x43\xc4\xf0\x11\x23\xb9\xe5\xd6\xdb\xf8\xe3\
-\x83\x0f\xf0\xcb\x3b\xef\xe4\xb5\xd7\x5e\x63\xf0\xe0\xc1\xec\xa9\
-\xa8\xb0\xcb\xe1\xdc\xfe\xdd\xef\x32\x70\xe0\xa0\xf4\x36\x32\x88\
-\x98\xde\xf4\xcb\xc8\x91\x23\xf9\xec\xb3\xcf\x78\xfc\xb1\xc7\x58\
-\xb5\x6a\x15\xab\x57\xad\x62\xf2\xe4\xc9\x6c\xdc\xb8\x91\xff\x7d\
-\xf6\x39\x64\x59\x66\xe6\x4c\x4b\x69\xe6\xe6\xe6\xd2\xdc\xdc\xcc\
-\xe3\x8f\x3e\xca\xba\x35\x6b\xf9\xf6\x4d\x37\x91\x95\x95\xc5\x35\
-\x5f\xbf\x96\x65\xcb\x96\xf1\xf1\x47\x1f\xf1\xc3\x1f\xfc\x80\x9c\
-\x9c\x1c\xde\xff\xcf\x7f\x00\xb8\xe1\xc6\x1b\x91\x65\xa5\xc7\x73\
-\x75\xe0\xe0\x68\x41\x10\x44\x10\x44\x14\x59\x41\x96\x65\x5a\x5b\
-\x83\x34\x37\xb7\x62\x64\x28\xd0\x6b\x9a\x50\x5f\x13\x60\xed\xf2\
-\x4a\xc2\x81\x38\x4d\x8d\x41\x36\x6d\xdf\x4f\x83\x16\x07\x51\xc4\
-\x88\x9b\x68\xd1\x38\x61\x49\x42\x14\x7a\x47\x35\x42\x37\xf6\xf7\
-\xee\x38\xa7\x63\x7d\xc2\x4c\xfc\xd5\xe3\x5c\x97\x66\xc7\x7d\x2c\
-\xb5\x85\x61\xfd\x28\x0d\xbd\xfd\x73\x32\xef\x0a\xc3\x4c\x09\x75\
-\x87\x98\x0e\x1f\xbf\xb7\x9b\xbd\x65\x4d\x8c\x1a\x57\x40\xc9\xb0\
-\x5c\x0a\xfa\x66\xe3\xf6\x28\x89\x48\x4b\x03\x41\x90\x50\x14\x0f\
-\xaa\x00\xa2\x28\x21\xcb\x0a\x6e\xb7\xdb\xae\x3b\xe8\xf6\xb8\xf1\
-\xfb\xfc\x78\xbc\x5e\xbc\x1e\x0f\x2e\xb7\x1b\x8f\xc7\x63\xe7\x6b\
-\x1d\xee\xf1\x41\x3e\x54\x06\x4c\x06\x07\x74\xbe\x41\x3a\x4f\xdd\
-\x9c\x5c\x36\xef\xd4\x53\xf9\xe3\x83\x0f\x60\x18\x06\x7d\x0b\x0b\
-\x99\x30\x71\x62\xda\xf6\x93\x26\x4d\xe6\xbe\xdf\xfc\x96\x67\x9e\
-\x7a\x92\xa5\x4b\x96\xa0\x28\x0a\xb3\x66\xcf\xe6\x96\x5b\x6f\xc3\
-\xe3\xf1\x64\x64\xed\x01\x03\x8a\x79\xec\xf1\x27\x78\xfa\xa9\x27\
-\x59\xb7\x76\x2d\xaf\xbd\xfa\x2a\x59\xd9\xd9\x9c\x32\x6f\x1e\x5f\
-\xfb\xda\xd5\x8c\x1a\x3d\xda\xca\xea\x96\x24\xfe\xf0\xe0\x83\xbc\
-\xf8\xc2\x0b\x7c\xf4\xd1\x87\x2c\x5b\xba\x94\x78\x3c\x4e\x56\x76\
-\x36\xd3\x67\xcc\x60\xe1\xc2\xcb\x38\x79\xda\xb4\x4e\xc7\x58\xb6\
-\x6c\x69\xda\x67\x8f\xc7\xc3\xf8\x09\x13\xb8\xf0\xc2\x8b\x38\xfb\
-\x9c\x73\xba\x7d\x92\xb8\xe4\xd2\x4b\x19\x35\x6a\x14\x2f\xbd\xf8\
-\x22\xa5\xa5\x9b\xd8\xb8\x61\x03\x3e\x9f\x8f\xd9\xb3\x67\x73\xe5\
-\x55\x57\x31\x69\xd2\xe4\x6e\xfb\xeb\x40\xfa\xe5\x07\x3f\xfa\x11\
-\xf7\xdd\x7b\x2f\xe5\xe5\xe5\x6c\xdf\xb6\x8d\x5f\xde\x75\x37\x00\
-\xbf\xf8\xc5\x1d\x94\x95\xed\xa6\xae\xb6\xce\x6e\xf7\xa6\x9b\x6f\
-\xe1\x91\x47\x1e\xa6\xb6\xb6\x96\x35\x6b\x3e\xb1\xc3\x5c\x87\x94\
-\x94\xf0\xc8\x9f\xfe\xcc\xe3\x8f\x3d\xca\x86\xf5\xeb\xd1\x34\x8d\
-\xa1\xc3\x86\xb1\x68\xd1\x55\x9c\x76\xfa\xe9\xbd\x3a\x57\x07\x0e\
-\x8e\x26\x64\x59\x46\x51\x55\xfc\xfe\x2c\xa2\xd1\x18\xa6\x01\xf1\
-\x2e\x66\x50\xce\xca\xf6\x10\x8d\x84\x79\xe7\xd5\x52\xdb\xd4\xa6\
-\x78\x64\xe2\x6e\x4b\xa9\xc4\xe3\xa0\xa1\x65\x4e\x9f\x32\x33\x90\
-\x89\x69\x66\x20\xa4\x5e\xec\x9b\xe1\x37\x93\x71\xff\x34\x12\x33\
-\x33\x33\xa1\x99\x1e\x59\x9f\x46\x64\x69\x09\x58\x1d\xf6\x31\x4d\
-\x04\x13\x8a\x07\xfa\x19\x33\xbe\x80\xa1\x23\xfa\xd2\xa7\x28\x0b\
-\xbf\xdf\x4a\x14\x4e\x2d\x28\x90\x69\x12\x48\x8f\xd7\x8b\xdb\xed\
-\x46\x55\x55\x5c\xaa\x8a\x27\x51\x8f\x50\x55\x14\xe4\x94\x24\xe3\
-\xc3\x3d\x3e\x08\xe1\x58\xcc\x19\x71\x1c\x38\x70\x70\x5c\x43\xd3\
-\x34\xa2\xd1\x28\xa1\x60\x90\x70\x24\x42\x38\x14\x22\x16\x8f\x67\
-\x24\x07\xdd\x30\x08\x05\x43\x3c\xff\xf8\x87\xac\xf8\x70\x17\xc1\
-\xd6\xa8\x55\xbe\x49\x11\x89\xbb\x44\x4c\x51\x68\x77\x47\x99\x5d\
-\x18\xfb\xcc\xce\xa6\xbd\x9e\xd4\x99\xd0\x6d\x64\x94\x99\xa1\xed\
-\xde\xee\xdb\x91\x10\xdb\xdf\xa4\x11\xa1\x69\xe2\x72\x49\xb8\x54\
-\x19\xaf\x4f\xa6\x7f\x71\x16\x83\x87\xe7\x31\x64\x78\x3e\x85\xfd\
-\x72\xad\x92\x50\x2e\xd5\x2e\xcd\x94\x9c\x33\xcb\x4e\x15\x48\x84\
-\xd6\x27\x09\x4c\x51\x55\x5b\x51\xa9\x89\x90\x78\x59\x92\xd2\x08\
-\xeb\x88\xa9\xec\x50\xd4\x21\x2e\x07\x0e\x1c\x1c\xdf\x48\xce\xfb\
-\x15\x8f\xc7\x89\x84\xc3\x68\x9a\x96\xd1\xef\x6a\x9a\x26\xba\xa6\
-\xd1\xda\xda\x4a\x4d\x75\x2d\x6b\x56\xec\xe0\x93\x25\xbb\xd8\xbf\
-\xa7\x89\xd6\x96\x08\x5a\xdc\xc0\x10\x3a\xc7\x51\xf4\x6a\x30\xed\
-\xd5\x89\x1e\xd9\x7e\x90\x24\x01\x55\x95\x51\x54\x11\x97\x2a\xa3\
-\xb8\x44\x5c\x2e\x19\x97\x5b\xc1\x9f\xe5\xa2\xb0\xd8\x4f\xdf\x7e\
-\x7e\x0a\x07\x64\x91\x9d\xe3\xc7\xed\xb6\x2a\x68\x28\x8a\x8a\x3b\
-\x61\xde\x53\x5d\xaa\x95\x9c\xec\x76\x77\xaa\x70\x21\x24\xaa\xd1\
-\x23\x58\xa1\xf6\x8a\xaa\x22\xcb\xb2\x15\xa1\x29\x49\x87\x5c\x11\
-\xa3\xd7\x7d\x1d\x8c\x44\x1d\xe2\x72\xe0\xc0\xc1\x17\x02\xd6\x74\
-\x1b\x56\x05\x76\x5d\xd3\x3b\x5b\xd4\x12\xf5\x0c\x83\x81\x00\x2d\
-\xad\x2d\xb4\xb6\xb6\x52\x5b\xd5\x48\x65\x79\x2d\xcd\x4d\x01\x2b\
-\x70\xe3\x38\x4d\xee\x10\x10\x10\x25\x01\x45\x11\x51\x14\x09\x59\
-\x15\x51\x54\x19\xd5\x25\xa1\xba\x64\x7c\x7e\x37\x1e\x4f\x7b\xe5\
-\x0a\x49\x92\x51\x14\xcb\x57\xa5\xba\x5c\xb8\x12\x41\x14\xee\x44\
-\x05\x77\x59\x96\x11\x52\x15\x57\x42\x75\x89\xa2\x80\x20\x88\x69\
-\xb3\x01\x1c\xed\x1a\xa5\xb2\xe3\x9b\x70\xe0\xc0\xc1\x17\x05\xc9\
-\x41\xd4\x9a\xc8\x30\xb3\x32\x8b\xc7\xe3\xf6\x44\x8c\xaa\xa2\xe2\
-\x76\xb9\x29\xec\x9f\x4f\x3c\x16\x47\xd3\xe2\x76\x35\x8c\xe3\x15\
-\x1d\x09\xc5\x4a\x48\x96\x10\x44\x01\x49\xb4\x54\x91\xac\xc8\x89\
-\xc0\x0a\x97\xad\x94\x92\x7e\x2a\x49\x92\x90\x64\x39\xcd\x9f\xd5\
-\xd5\x71\x52\xfb\xd5\x21\x2e\x07\x0e\x1c\x38\x38\x42\x83\xba\x92\
-\x60\xb4\x6c\x51\xb4\x26\x36\xf4\x7a\x09\x87\xc3\xc4\x62\x51\x2b\
-\x7c\xdc\x34\x8e\xef\x6b\x24\x39\x53\xb2\x88\x20\x90\x28\xff\x24\
-\x22\x2b\x0a\x8a\x22\x23\x8a\x12\xa2\x20\x20\x4a\x92\x35\xf1\xa4\
-\xa2\xd8\xe6\xbe\xd4\x00\x8c\x9e\xf0\x79\x72\x87\x43\x5c\x0e\x1c\
-\x38\xf8\xd2\x41\x51\x14\x7b\xa0\x56\xe2\x31\x54\x55\xb5\xe7\x9e\
-\xfa\x42\xe4\x76\xa4\x56\x08\x21\x61\xe2\x4b\x90\x55\xaa\x3f\x2a\
-\x35\x42\x30\xb9\xfd\xe7\x4d\x4a\xbd\x22\xae\xde\xcf\x0d\xe3\xc0\
-\x81\x03\x07\x5f\x20\xf5\x25\x8a\x48\x89\xc8\x39\x59\xd6\xd1\xd3\
-\xe6\x97\x3a\xfe\x95\xa5\x90\x42\x60\x62\x42\x81\x25\xff\xdb\xdb\
-\xa4\xcc\xa0\x6c\x1e\x47\x15\x70\x84\x58\x3c\xee\x48\x2e\x07\x0e\
-\x1c\x38\x70\x70\xdc\x40\x0e\x47\x63\x4e\x2f\x38\x70\xe0\xc0\x81\
-\x83\xe3\x06\xff\x1f\x0f\x62\xcf\x5f\x2e\xaf\x03\x19\x00\x00\x00\
-\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x1e\x5e\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x01\xae\x00\x00\x00\x48\x08\x06\x00\x00\x00\xae\x9f\x11\xb1\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
-\x00\x00\x09\x70\x48\x59\x73\x00\x00\x08\x81\x00\x00\x08\x81\x01\
-\x20\xed\x67\x0c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xde\x04\x1b\
-\x10\x22\x0a\xcd\x39\xad\xef\x00\x00\x1d\xde\x49\x44\x41\x54\x78\
-\xda\xed\x9d\x77\x78\x55\x55\xd6\x87\xdf\x73\xce\xed\xe9\x09\x81\
-\x40\x28\x26\x48\x0d\xa1\x48\x53\x40\x14\x18\x05\x44\x05\x06\x14\
-\x15\xc5\x0f\x0b\x83\xa8\x20\xcc\x28\xea\x58\x46\x64\x10\x2b\x23\
-\x88\x20\xea\xa0\x14\x1b\x2a\x45\x94\x01\x11\xe9\x2a\x20\x5d\x48\
-\x28\x49\x68\x49\x48\x02\xe9\xed\xde\x7b\xce\xfe\xfe\xb8\x49\x20\
-\x92\x72\x03\x01\x12\xd8\xef\xf3\xc0\xf3\x40\xf6\x69\xfb\x9c\xac\
-\xdf\x5e\x7b\xaf\xb5\xb6\x72\x77\xa7\x17\x04\x12\x89\x44\x22\x91\
-\xd4\x12\x54\xd9\x05\x12\x89\x44\x22\x91\xc2\x25\x91\x48\x24\x12\
-\x89\x14\x2e\x89\x44\x22\x91\x48\xa4\x70\x49\x24\x12\x89\x44\x0a\
-\x97\x44\x22\x91\x48\x24\x52\xb8\x24\x12\x89\x44\x22\x91\xc2\x25\
-\x91\x48\x24\x92\xab\x58\xb8\x74\xdd\xc0\xd0\x05\x03\xee\xbb\x81\
-\xfc\xdc\x42\xd9\xb3\x12\x89\x44\x22\xb9\x28\x98\x2e\xe4\x60\x21\
-\x04\xba\x6e\x10\x18\xe2\xcb\x0d\xb7\x44\xf3\xc8\xc4\x3b\x00\x88\
-\x8f\x49\x62\xdf\xf6\x04\xd9\xbb\xb5\x00\x21\x04\x81\x75\xfc\xa8\
-\xdf\x28\x04\xbb\x8f\x95\xf0\x6b\xea\x90\x92\x98\x41\x76\x46\x1e\
-\xc7\x0e\xa7\x90\x95\x91\x8b\xaa\x2a\x5e\x9c\x07\xa0\xf2\x5c\x76\
-\x45\x51\x64\xa7\x4b\x24\x92\xcb\x27\x5c\x56\x9b\x99\x21\x8f\xf4\
-\xe2\xf6\xe1\xdd\xd0\xcc\x1a\xc2\x10\x28\xaa\x82\x90\xc6\xa9\x36\
-\x28\x16\x2e\xb7\x4e\xc7\x1e\x2d\xb9\x7b\x74\x1f\x9a\xb5\x69\x78\
-\x4e\x93\x3d\x5b\x0f\xb3\xe2\x8b\x5f\xd9\xb6\x76\x3f\x4a\x05\xe2\
-\xa5\x6a\x2a\x91\xad\x1b\xe0\xeb\x6b\x2f\x5f\xb0\x54\x05\xdd\x6d\
-\x10\x1f\x93\x48\x76\x66\x9e\xec\x7f\x89\x44\x72\xe9\x84\x4b\x77\
-\x1b\xe4\xe5\x16\x30\x7e\xea\x3d\xf4\xe8\xdb\x16\xbb\x8f\x95\xd8\
-\xdd\x47\xf9\x70\xca\x32\x86\x3e\x7a\x33\xd7\xf7\x69\x23\x7b\xb5\
-\x16\xe0\x74\xba\xe9\xd2\x2b\x8a\xc7\x5f\x19\x82\x7f\xa0\xa3\xcc\
-\x36\xd1\x9d\x9b\x12\xd9\xa2\x01\x6f\x64\x7f\xc6\xee\x5f\x0e\x62\
-\xb1\x99\xcf\xd5\x3f\x43\x60\x75\x98\xb8\x7f\x6c\x5f\x5a\xb6\x6d\
-\x52\xa1\x70\xe5\xe5\x16\xf2\xf6\xd3\x9f\xb1\x67\xcb\x61\xe9\x79\
-\x49\x24\x92\x8b\x2f\x5c\x6e\x97\x4e\x70\x3d\x7f\x7a\xf4\x6d\xcb\
-\x83\x13\x6e\x03\xe0\xc8\x81\x24\x9a\x34\xaf\xcf\xe6\x95\xbb\x89\
-\x8f\x39\x81\xa1\xd7\xdc\xb2\x87\x86\x6e\xe0\x76\xeb\x28\x5c\x5e\
-\x83\x29\x00\x8b\xc5\xc4\xe5\xbc\x0d\x97\x4b\x27\xac\x51\x1d\x06\
-\x8e\xe8\x51\xae\x68\x15\xe3\xe3\x6f\xe7\xee\x51\xbd\xd9\xb1\x29\
-\x16\x21\x44\xb9\x82\xa3\xa9\x6a\x85\x5e\x19\x14\x3f\xb2\x14\x2c\
-\x89\x44\x72\x91\x85\x4b\x08\x81\x10\xf0\xc4\xa4\x21\xdc\xd8\xbf\
-\x1d\x26\xb3\x89\xb4\xe4\x0c\xfe\xfd\xc4\xa7\x64\x67\xe6\xf1\xd1\
-\x8f\xcf\x61\xb2\x98\x10\xc2\xd3\xb6\x5a\x8d\xfc\x59\x86\xb2\x22\
-\xa3\xe9\x0d\x7e\x81\x0e\x42\xea\x06\x60\x18\xc6\x65\x33\x9e\x8a\
-\x02\x86\x10\x24\x1e\x49\x43\x18\x97\x51\xe4\x85\xa0\x61\x44\x28\
-\x91\xad\xc3\xbd\x6a\x1e\xd6\x28\x98\xc8\x96\x0d\x48\x38\x90\x8c\
-\xb5\x0c\xaf\x0b\xc0\x30\xbc\x7b\x9f\x12\x89\x44\x72\xd1\x85\xab\
-\x20\xdf\xc9\xf4\xc5\x13\xb8\xa6\x79\x18\xf1\x31\x89\x7c\xf0\xef\
-\x25\xc4\xee\x3a\x8a\xd9\x62\x22\x30\xc4\x0f\xa0\x64\xf1\xde\xa8\
-\x26\x63\xac\xeb\x06\x0a\x70\xfb\xf0\xee\xdc\xf1\x40\x0f\x9c\x85\
-\x6e\x46\xf5\x9d\x8a\xdd\xc7\x7a\xbe\x76\x9a\xa8\x4e\x91\xdc\xfb\
-\xf8\x2d\x1e\xaf\xeb\x32\xd9\x4f\x45\x51\xd0\x0d\x83\x49\x63\xe6\
-\x92\x9d\x9e\xc7\xe5\x9a\x2d\x33\x99\x35\xfc\x02\xec\x5e\x0f\x04\
-\x34\x93\x46\x68\x58\x20\x87\xf7\x9d\x00\xcc\xf2\xb7\x46\x22\x91\
-\xd4\x70\x8f\xcb\x10\x04\x86\xf8\xb0\x75\xdd\x7e\x5e\x7c\xe8\x43\
-\xba\xf4\x6a\xe5\x09\xc2\x50\x94\x92\x11\xb4\xaa\x69\x08\x21\x8a\
-\xbc\x99\x0b\x10\x2c\xb7\x8e\x8f\xbf\x9d\x9e\xb7\xb5\x67\xe8\xa3\
-\xbd\x09\x08\xf6\x41\x08\x41\x56\x7a\xde\x05\x8f\xd6\x7d\x03\x1c\
-\x34\x68\x52\xa7\x46\x74\xba\xc5\x6a\xba\xac\xd7\x77\xbb\x74\xb2\
-\x33\xf3\x31\x74\xef\xde\x97\xdb\xad\x73\x32\x31\x1d\xcd\xa4\xc9\
-\xdf\x18\x89\x44\x52\xf3\x85\xab\xd8\x53\xc8\x4e\xcf\xc5\x62\x35\
-\x31\x62\x42\x7f\xd2\x92\x32\x78\x63\xc2\xc2\x92\xe9\xae\x62\x8f\
-\xeb\x42\x67\x82\x7a\x0f\xea\xcc\x98\x97\x07\x17\x9d\x4b\x94\x5c\
-\xbb\x3a\x5c\xa4\xcb\x3a\x35\x77\x16\x86\x10\xde\x44\x8d\x5f\x74\
-\x8e\xc7\xa7\x90\x70\x20\x99\x56\x1d\x9a\x20\x04\x15\x7a\x7f\x69\
-\x49\x19\x9c\x88\x4f\xc5\x6c\x31\xc9\xdf\x18\x89\x44\x72\xd9\xf1\
-\x2a\x01\xf9\x6c\x41\x32\x99\x34\xae\xef\xd3\x86\xd7\x17\x8c\xc1\
-\xe1\x67\x3d\x23\x5c\x82\x73\x46\xf0\x7a\x25\x23\x7a\x21\x04\x56\
-\xbb\x85\x3b\x1f\xe8\xc1\x8c\x25\x13\x18\xf3\xf2\xe0\xd2\x82\x55\
-\xd2\x50\xbe\xa8\xea\xc4\x6c\x36\x91\x9a\x94\xc1\xb2\x79\xeb\x39\
-\x9d\x9a\x55\xa1\x68\xe9\x6e\x9d\xf9\xd3\xfe\x87\x10\xc2\xab\x7c\
-\x2e\x89\x44\x22\xa9\x11\xc2\x55\xac\x1c\x9a\xa6\xb2\x60\xfa\x4a\
-\x74\xb7\x4e\xb3\xe8\x46\xbc\xf5\xc5\x93\x9e\x93\x68\x2a\x02\xce\
-\x99\x2a\x6c\xdb\xa5\x29\x75\x1b\x04\x95\xbb\xf6\xa5\x28\x0a\xfd\
-\xee\xee\xca\xf0\xb1\x7d\x09\x6d\x10\x78\xae\x60\x9d\x25\x70\x92\
-\x6a\x44\xf1\x0c\x36\xb6\xad\x8b\x61\xfe\xb4\x15\xa4\x24\xa6\x97\
-\xed\x69\x25\x67\x32\xfd\x85\x45\xc4\xec\x3e\x2a\xbd\x2d\x89\x44\
-\x52\x63\xa8\x92\x35\x52\x35\x95\xdd\xbf\x1e\x62\x58\x97\x97\x98\
-\xb3\x72\x22\xc1\xa1\xfe\x45\x1e\x97\x0a\x08\xc4\x9f\x1c\xac\xa0\
-\x50\x3f\x5e\x9a\xfd\x10\xcf\x0c\x9f\x49\x7c\x4c\x52\x99\x23\xf6\
-\xa5\x9f\x6e\x60\xef\xd6\x38\xa6\x7c\x3a\x5a\xbe\x8d\x4b\xa9\x5d\
-\x8a\x02\x2a\x6c\x5a\xb5\x87\x23\x87\x4e\xd2\xbc\x6d\x63\xc2\xc2\
-\x83\x09\xae\xeb\x4f\x5a\x72\x06\xa7\x52\xb2\xd9\xf3\xdb\x21\x12\
-\x8f\xa6\x61\x32\xc9\x92\x96\x12\x89\xa4\x96\x0a\x97\xa2\x2a\xb8\
-\x9c\x6e\xcc\x16\x33\xe3\x06\x4d\x63\xe4\xc4\xdb\xe9\x7d\x67\x47\
-\x34\xcd\x33\x55\x28\xce\x09\xce\xf0\x08\xd5\x1b\x0b\x1f\xe7\xeb\
-\x0f\x7f\xe6\xb3\xf7\x56\x95\x39\x72\xcf\x38\x9d\x53\xb1\xbf\x27\
-\x1d\xae\x8b\x27\x5e\xc0\xf1\xb8\x54\x8e\xc7\xa5\xa2\x2a\x60\xb2\
-\x98\x70\xb9\x74\x8f\x97\x2b\x04\x9a\x26\x45\x4b\x22\x91\xd4\x2c\
-\xbc\x5e\xe3\x52\x55\x15\xdd\xad\xf3\xcf\xf7\x1e\x24\xa4\xae\x3f\
-\x05\xf9\x4e\x3e\x9e\xfa\x9d\xc7\x00\x6a\x0a\x02\xd0\xcf\x99\x12\
-\x3c\xf3\xef\x76\xdd\x9a\xa1\xbb\xf5\xb2\x0d\x68\x65\x79\x55\x17\
-\x2a\x5c\x0a\xc8\x42\x0d\x15\x09\x98\xe7\x8f\x00\x5c\x4e\x37\x08\
-\x81\x82\xac\x2b\x28\x91\x48\x6a\xb9\xc7\x55\x9c\x88\x1c\x52\x2f\
-\x90\xf7\xbf\xff\x07\x93\x9f\xf8\x84\x7d\xbf\x27\x00\xa0\x29\x2a\
-\x45\x19\xc8\x67\xf9\x59\xb0\x65\xed\x7e\xe2\xf6\x9d\x20\xb2\x75\
-\xf8\x39\x51\x7d\xa5\x13\x8a\x2b\x56\x26\x71\xa1\xf6\x53\xc0\xd1\
-\xb8\x14\x7e\x5e\xb6\x1d\x57\xa1\xcb\x2b\x15\x0b\x0e\xf5\xa3\x43\
-\xf7\xe6\x95\x86\x80\x9f\x3a\x99\xc9\x8e\xcd\x07\xbc\xaa\x1a\xa2\
-\xe0\x89\x2a\xcc\xcb\x2e\xa8\xf4\x16\x2a\x5b\xd7\xbb\xaa\x45\x45\
-\x80\xa8\xe0\x9b\x91\x82\x2b\x91\x48\xe1\x2a\x41\xd7\x0d\x52\x13\
-\xd3\x89\x68\x51\x9f\x17\x67\x8e\x64\xd5\xd7\x5b\x8a\x3c\x2e\x8f\
-\xe3\xf6\xe7\x20\x8c\xc2\x7c\x27\xcf\x3d\x38\x9b\xc1\x23\x7b\xd2\
-\xbd\x5f\xbb\x12\x53\xf3\xc0\xb8\x7e\xcc\x78\xf9\x6b\x02\x83\x7d\
-\xbd\xf3\x08\x2e\x70\xae\x50\x51\x60\xff\xf6\x04\xf6\x6d\x8b\x2b\
-\x12\x84\xca\x0d\x5b\x8b\xb6\x8d\x88\xea\x1c\x89\xbd\x12\xe1\x3a\
-\x76\xf8\x24\x73\x26\x2f\xc5\xe9\x74\x7b\x6d\x75\x2d\x56\xcb\x39\
-\xc2\x55\x3c\x30\x00\x4f\xe0\x84\x66\xd2\x50\xd5\x22\x5f\xf4\xac\
-\xc6\x9e\xf1\x81\x81\xee\x36\x4a\xaa\x80\x9c\x6f\xb4\x5f\xf1\x35\
-\x95\x4a\x9c\x5d\x8f\x47\x76\x99\x4b\x65\x15\xdf\xab\xe2\x59\x6b\
-\xd5\x54\x4f\xff\xa0\x9c\x19\xf7\x08\x43\x60\x08\x81\xa1\x1b\x25\
-\xdf\xa2\xa2\x28\xd2\xdb\x96\x48\xae\x4e\xe1\x12\xa0\x82\xd5\x6a\
-\x62\xca\xd8\x4f\x99\x30\xf5\x5e\x7a\x0e\x68\xcf\xad\x43\xbb\x20\
-\x8a\xd6\x41\xc4\x59\xe1\xf0\x25\x7e\x94\x21\x10\x0a\x7c\xfd\xe1\
-\xcf\xc4\xec\x3c\x8a\xd9\xec\xb9\x9c\xc3\xdf\xc6\xb3\xd3\xee\x67\
-\xd6\xa4\xc5\x9e\x44\xe6\xca\xaf\x7e\xc1\x98\xcd\x1a\x50\x85\x04\
-\x5a\x45\xf1\xce\x58\x2b\x2a\x56\xbb\xb9\xd2\x3a\x7d\x95\x19\x63\
-\xbb\x8f\x0d\x87\x8f\x95\xa0\x50\x3f\xae\x6d\xd3\x90\xa8\x8e\x91\
-\xd4\x6f\x1c\x4c\x70\xdd\x00\xec\x0e\xab\x67\xba\x13\x41\x56\x46\
-\x3e\xc9\xc7\x4e\xb1\x75\xdd\x7e\x0e\xed\x39\xc6\xb1\xb8\x14\xf2\
-\x73\x9d\xb8\xdd\x7a\x95\x04\x4c\xd7\x0d\x42\xeb\x07\x12\xd6\x38\
-\x04\xdd\xa5\x97\xab\x5e\x0a\x0a\xc7\xe3\x8a\xb7\x37\xb9\xf4\xeb\
-\x5d\xc5\x7d\x64\x77\x58\x08\x0c\xf5\xa3\x71\x64\x3d\xa2\x3a\x47\
-\xd2\xb6\x4b\x53\xea\x84\x05\x62\xb6\x6a\x20\xc0\x59\xe8\xe6\xd4\
-\xc9\x4c\x92\x8e\x9d\x62\xdf\xef\xf1\xec\xd9\x12\x47\xc6\xa9\x6c\
-\xf2\x72\x0a\x70\x15\xba\x8b\xa6\x8b\xa5\x82\x49\x24\x57\x97\xc7\
-\x55\x34\x13\x68\xb5\x59\x98\xf1\xd2\x22\xb6\x6d\x88\x61\xc2\xd4\
-\x7b\x3c\x23\xda\xe2\x04\xe4\x3f\x1d\xd2\xb5\x77\x6b\x52\x93\x33\
-\x49\x88\x4d\x62\xff\x8e\x04\x4c\x66\x8f\x70\xb8\x5d\x3a\xdd\x6e\
-\x89\x66\xd6\xa4\xc5\x45\x41\x00\x35\xaf\x63\x94\x8b\xd8\xda\x30\
-\x04\xba\x5b\xc7\x2f\xc0\x41\x40\x88\x2f\x8d\x9a\xd6\xa3\xcb\x4d\
-\xad\x68\xd9\xa1\x31\xf5\x1a\x86\x54\x78\x6c\x60\x88\x2f\x81\x21\
-\xbe\xb4\x6c\xef\xa9\xc4\x1e\xbb\xfb\x28\x3f\x2f\xf9\x9d\xdd\x5b\
-\x0e\x91\x72\x22\xc3\xe3\xa5\x79\x21\x60\x2e\xa7\x9b\x9b\xef\xb8\
-\x8e\x61\xa3\xfb\x54\xda\x76\xe9\xbc\x0d\x7c\xf0\xea\x12\xfc\x2a\
-\x29\xc8\x5b\xdd\xe8\x6e\x1d\xdf\x00\x07\x8d\xaf\xad\x47\x8f\x7e\
-\xed\xb8\xe1\x2f\x51\xf8\x05\xfa\x94\xd9\xd6\xe6\xb0\x10\x1e\x11\
-\x4a\x78\x44\x28\x9d\x7a\xb6\xc4\xd0\x05\x87\xf7\x1d\x67\xeb\xda\
-\x18\x76\x17\x45\x47\x66\xa7\xe7\x96\x59\xe1\x5e\x22\x91\x5c\xa9\
-\xc2\x55\x64\x9f\x2d\x56\x13\x05\xf9\x4e\x36\xae\xd8\xc5\x89\xb8\
-\x14\xde\xfe\x6a\x2c\x9a\xaa\x22\x10\x67\x12\x90\x8b\x46\xb6\x36\
-\x87\x95\xd7\x17\x8c\xe1\x3f\xcf\x7d\xc9\xcf\xdf\x6d\xc7\x66\xb7\
-\x94\x9c\xca\xd7\xdf\x4e\x74\x97\xa6\xec\xfe\xed\x90\x37\xc3\xee\
-\x2b\xa3\xb7\x05\x14\x16\xba\xb0\xda\xcc\x34\x6f\xdf\x84\x2e\xbd\
-\xa3\x8a\xbc\xab\x88\xf3\x3e\x65\x8b\xb6\x8d\x69\xd1\xb6\x31\xdb\
-\xd6\xc7\xb0\x68\xce\x1a\x0e\xed\x3d\x8e\x8a\x5a\xb1\xf7\x25\x3c\
-\xd3\x91\xde\x94\x7c\x72\xbb\xf4\xcb\x32\xb0\x28\xc8\x77\x52\xb7\
-\x41\x10\x03\xee\xeb\xc6\xad\x43\xbb\xe0\xf0\xb5\x55\xe9\x78\x55\
-\x53\x68\x16\xdd\x88\x66\xd1\x8d\xe8\x79\x7b\x7b\xb6\xae\xdd\xcf\
-\x9a\x25\x5b\x39\x16\x97\x8a\xc5\x6a\x92\xde\x97\x44\x72\xa5\x0b\
-\x97\x10\x80\xaa\xe2\x2c\x70\xf3\xaf\x0f\x1e\x66\xd9\xfc\x8d\xfc\
-\xbe\x3e\x86\xa4\xa3\x69\x25\x46\x02\xc1\x59\xeb\x0a\xa5\xf5\xe6\
-\xa9\xd7\x86\x11\x7e\x4d\x28\x5f\xcc\xfa\x11\x93\xf9\xcc\x25\xbb\
-\xf6\x89\x62\xe7\xe6\x03\x57\x85\x6e\x09\x21\x30\x9b\x35\x1a\x5f\
-\xdb\x90\xae\x7f\x89\xa2\x67\xff\x76\xd4\x0d\x0f\xae\xb6\xf3\x77\
-\xea\xd9\x92\xa0\x50\x3f\x3e\x79\xf3\x7b\x62\x77\x1d\xad\xdc\x41\
-\x14\xde\xdf\xb7\x61\x88\x4b\xba\x4e\xa4\xbb\x75\xc2\x1a\x06\x73\
-\xff\xb8\x7e\xdc\xd8\xbf\xdd\x05\x9f\xaf\x61\x44\x28\x0d\x23\x42\
-\x69\xdb\x25\x92\x65\x0b\x36\xb1\xe5\xe7\x7d\xe8\x6e\x43\xae\x7d\
-\x49\x24\xb5\x14\xaf\x16\x2d\x94\x12\xf5\x10\x68\x26\x8d\x7f\xce\
-\x78\x90\x61\x8f\xfd\x05\x97\xab\x68\x4d\xab\x68\xed\xa3\xa2\x48\
-\xb8\x76\xdd\x9a\x79\x46\xef\x67\xd1\xb2\x5d\x13\x8f\x90\x5d\x05\
-\x89\x5a\x86\x21\x10\x42\x30\xf2\xe9\x01\x0c\x7d\xa4\x57\xb5\x8a\
-\x56\x31\x4d\x5b\x85\x73\xd7\xa8\xde\xd4\x6b\x18\x5c\x63\x6a\x33\
-\x56\x5d\xb4\x0c\x7c\x03\x1c\xdc\x3d\xba\x4f\xb5\x88\x56\xa9\xfe\
-\x89\x6a\xc8\xc0\x11\x37\x5e\x59\x5e\xbc\x44\x22\x85\xab\x7c\xe9\
-\x52\x15\x4f\x02\xf2\xae\x5f\x0e\x02\x30\x6c\x74\x1f\x5e\x78\xef\
-\x41\x00\x34\x4d\xf1\x44\xbb\x19\xa5\xeb\x0c\x6e\x5d\xbb\x8f\xed\
-\x1b\x63\xcb\x3d\x6b\xbd\xf0\x60\x4f\x60\x47\xe5\xe3\xfe\x52\xff\
-\xca\xcb\x29\x28\x37\x27\xac\xc6\x76\xb4\xaa\x92\x97\x53\xc8\xbe\
-\xed\xf1\x95\xd6\x70\xbc\x10\xda\x5e\x7f\x2d\x9d\x6f\x6a\x85\xd9\
-\x6a\xaa\x75\xb6\x59\x08\xd0\x4c\x2a\x1d\x6f\x6c\x49\xb7\x5b\xdb\
-\x56\xfb\xf9\x5d\x4e\x37\x4b\xe6\xae\xc3\x55\xe8\x3a\xaf\x60\x1a\
-\x89\x44\x52\x8b\x84\x4b\x08\x4f\xd6\x8c\xd9\x6c\xe2\xcb\xd9\x3f\
-\xf1\xce\xb3\x5f\xe0\x76\xeb\xb4\xbb\xa1\x99\x27\x1f\x4b\x2d\x0e\
-\x87\x2f\x6d\x90\x0b\x0b\x5c\x4c\x7e\xfc\x13\x96\xcd\xdf\x88\x5a\
-\x46\xf4\xa0\xd9\xa2\x79\x15\xd7\x50\x6c\x80\x85\x10\xd4\x0b\x0f\
-\xe6\x93\x75\x2f\x32\xf4\xd1\x5e\x68\x9a\x8a\x8f\x9f\x0d\x1f\x7f\
-\xfb\x05\x6f\xa9\x72\xb1\x51\x8a\xaa\x52\x7c\x37\x7f\x13\xf1\x31\
-\x89\x17\xf5\x5a\x83\x1f\xba\x09\xab\xdd\x52\xe3\xfb\xa4\xac\x17\
-\xed\x1f\xe4\x43\xfb\x6e\xcd\xb0\x3b\x2c\xd5\x7e\xfa\xc5\x73\xd7\
-\xb3\x79\xd5\x1e\x54\x4d\x6e\xcf\x22\x91\xd4\x66\xaa\x5c\x39\xd5\
-\x62\x35\xf1\xeb\xea\xbd\xc4\xc7\x26\xf2\xfa\xfc\x31\x38\x7c\x6d\
-\x68\xaa\x67\xd1\xa4\xac\x11\xbe\xd9\x62\x62\xe1\xf4\x95\x84\x86\
-\x05\x62\xb5\x96\x8e\xe8\x3a\x79\xe2\xb4\x57\x89\xbb\xa2\xc4\xf8\
-\x2b\x8c\x7c\x66\x00\xc1\xa1\x7e\x0c\x7b\xec\x2f\xdc\x3e\xbc\x3b\
-\x93\xc6\xcc\xe5\xf5\x05\x63\x78\x72\xd0\x3b\xa4\x9c\x48\xaf\xd1\
-\x8b\xee\x9a\xa6\x92\x93\x95\xcf\xda\xef\x76\x70\x4d\xb3\xfa\x98\
-\x2c\xe5\x1b\x50\xc3\x10\x64\x67\xe4\xe1\x2c\x74\x11\x18\xe2\x5b\
-\xa5\x22\xb7\x7e\x81\x0e\x6e\xb8\xa5\x0d\xab\xbf\xd9\x5a\xbb\xbe\
-\x46\x05\x1a\x34\xa9\x43\x74\x97\xa6\x95\x36\x75\xbb\x74\x7e\x5a\
-\xbc\x8d\xed\x9b\x63\x31\xdc\x02\x55\x53\x68\xd2\x2c\x8c\x5e\x77\
-\x5c\x47\xfd\x32\xf6\x5d\xdb\xb6\x3e\x86\x2f\x67\xad\x46\x33\xa9\
-\x72\x6d\x4b\x22\xb9\x5a\x84\x4b\xc5\x93\xaf\xd4\xeb\x8e\xeb\xf8\
-\xe1\xf3\xcd\x24\x25\xa4\x31\x76\xd0\x34\x3e\x5a\xfd\x1c\x6a\x71\
-\x02\x72\x05\x53\x60\x29\x49\xe9\x25\xed\x8a\xd9\xb0\x62\x97\xa7\
-\xc4\xd0\x59\x9e\x55\x99\x46\xe5\x2c\x6d\xb3\xd9\x2d\x64\xa5\xe7\
-\x32\xf3\xe5\x6f\xb8\x7f\x5c\x3f\xa6\xce\x7f\x0c\x45\x51\x98\xb6\
-\x68\x1c\x1f\x4e\x59\xca\x9a\xa5\xbf\xd7\xe8\x0d\x0f\x55\x55\xe1\
-\xd7\x9f\xf6\x72\xcb\x90\xce\x34\x69\x16\x56\xea\x67\x69\xc9\x19\
-\xec\xd8\x74\x90\x1d\x9b\x0f\x10\xb3\xe3\x08\x05\xf9\x85\x1e\x4f\
-\x55\x40\xc3\xa6\x75\xb9\xf3\xfe\xee\x74\xef\xe7\xdd\xba\xcf\xd0\
-\x47\x7b\xb1\x66\xf1\x36\xcf\x6e\xd2\xb5\xc4\x52\x2b\x28\x25\xe1\
-\xfe\x95\xf1\xdf\x37\x96\xf3\xc3\xe7\xbf\x60\xb1\x9d\xf9\x84\x77\
-\x6e\x3e\xc8\x0f\x9f\x6f\xa6\xf3\xcd\xad\x19\xfc\x7f\x3d\x69\x5c\
-\xd4\xbf\x29\x27\xd2\x99\x33\x65\xa9\x27\x55\x40\xaa\x96\x44\x72\
-\xf5\x08\x97\x28\x4a\xe4\x7a\xf4\xf9\x81\x04\xd7\x0b\xe0\xeb\x39\
-\x6b\xc8\xca\xc8\xf5\x18\x1c\xd5\x23\x28\xa1\x0d\x82\x00\x08\x08\
-\xf6\xc1\xd0\x8d\x52\x42\x75\xb6\xc1\x38\x76\xe8\x24\x6b\x96\xfd\
-\xce\x17\xef\xaf\xf6\x78\x12\x45\x11\x89\x95\x25\xd0\x0a\x21\xc8\
-\x48\xcb\xc1\xee\x63\x63\xdb\xfa\x58\x7e\x5b\xf3\x07\x2f\xcc\x1c\
-\x49\xe7\x9b\x5b\x61\x32\x6b\x8c\xf9\xd7\x10\x02\x82\x7d\x59\x3a\
-\x6f\x43\x8d\x35\x50\xaa\xa6\x92\x9a\x94\xc1\xba\xe5\x3b\x18\x31\
-\xbe\x3f\x00\x27\x12\x52\x59\xf9\xd5\x6f\x6c\x5b\x1f\xc3\xa9\x93\
-\x59\x08\x71\xee\x00\x20\x7e\xff\x09\x66\xbc\xf4\x35\x09\x07\x93\
-\x19\xfe\x64\xdf\x4a\xaf\x13\x14\xec\x47\x58\xa3\x10\x4e\x24\xa4\
-\xd6\x9a\x8f\x51\xd5\x94\x72\xf3\xb4\x4a\x7b\xa3\x06\xcb\xe6\x6d\
-\xc0\xc7\xcf\x7e\xce\x54\xb3\xab\x50\x67\xc3\xf7\x3b\xd9\xbb\xf5\
-\x30\x37\xdf\x71\x1d\xbd\x07\x76\xe4\xa3\xd7\xbe\x23\x23\x2d\xe7\
-\x9c\x81\x93\x44\x22\xb9\xc2\x85\xab\x64\x2e\x07\x18\xf2\xf0\xcd\
-\x5c\xdf\xbb\x35\xcf\x3d\x38\x1b\x80\x26\xd7\xd6\x67\xee\xcf\x2f\
-\xe0\x1b\x60\x47\x08\xc1\x98\x97\x87\x50\x90\xef\x64\xcb\x9a\x7d\
-\x65\x1a\x8b\xe2\x52\x51\x67\x4f\x7f\x29\x95\xd5\x1d\x2a\x12\xbf\
-\xcf\xdf\x5b\xc5\xb4\x6f\x9f\xc2\x2f\xc0\x4e\x41\xbe\x93\x2f\x67\
-\xad\xa6\xf3\xcd\xad\x3c\x15\x38\x84\xe0\xbe\x27\x6f\xa5\xd5\x75\
-\xd7\x30\xe9\xb1\xff\x62\xb5\x59\x6a\x64\xa7\xdb\x1d\x16\x16\xce\
-\x58\x45\xdf\xbb\xba\xf2\xed\xc7\x6b\xd9\xb0\x62\x17\xba\xdb\x28\
-\x31\xc2\x65\x8a\x6e\x91\xe7\xb5\x6c\xde\x46\xba\xf6\xf2\xe4\x7f\
-\x55\xf6\xaa\xae\x6d\xd3\x88\x13\x09\x69\xb5\xe2\x43\x14\x42\xa0\
-\x99\x4c\x5e\x95\x01\x53\x14\x05\x67\xa1\x1b\xdf\x80\x32\x82\x03\
-\x15\xd0\xcc\x1a\x59\xe9\x79\x2c\x9b\xb7\x91\x65\xf3\x36\x56\xfe\
-\x7d\x49\x24\x92\x5a\x85\x5a\x95\x96\x05\x45\xb5\x07\x01\xc2\x23\
-\xea\x32\x7b\xc5\x33\x00\xd4\x0d\x0f\x42\x51\x61\xf2\x98\xb9\x3c\
-\x36\xe0\x4d\x12\x8f\xa4\xf2\xf4\x5b\xc3\x19\xf5\xcf\x81\x64\x67\
-\xe4\x79\xe7\xcd\x55\xae\x5b\x00\x1c\x39\x94\xcc\x1f\xdb\xe2\x19\
-\x31\xbe\x3f\xce\x3f\x45\x87\x29\x45\x65\x9a\xae\xeb\xd1\x82\xd1\
-\x2f\x0e\xae\xc1\x46\x1a\x82\x43\xfd\x19\xd1\xf3\x55\x56\x7e\xbd\
-\xa5\x94\x68\x95\xd7\xbe\xb8\xc2\x88\x10\x82\xb5\xcb\x77\x78\x75\
-\x9d\x86\x91\x75\x6b\xcd\x87\xa8\x28\x0a\x6e\x97\x4e\x4a\x52\xba\
-\x57\x6d\x9f\x98\x3c\xd4\x33\x58\x29\x4a\x33\x90\x48\x24\x52\xb8\
-\xce\x19\x0d\x2b\x28\xb8\x5c\x6e\x8e\xc7\xa5\xf0\xd6\x3f\x16\x02\
-\xe0\xf0\xb1\x91\x78\xf4\x14\x1f\xbf\xb1\x9c\xbf\xb6\x7b\x9e\x3d\
-\x5b\xe3\x48\x4f\xcd\xe6\x99\xfb\x66\xf2\xc7\xb6\x78\x6e\x19\xd2\
-\x85\x7f\x7d\xf8\x30\x36\xbb\xa5\xdc\x5d\x90\xcf\xcc\xff\x78\x27\
-\x5d\x36\x87\x95\x0f\x5f\x5b\x4a\x9f\xc1\x9d\xe8\x75\x67\x47\x5c\
-\x2e\x77\x99\xf7\x5b\xb7\x68\xda\xb2\xa6\x62\x18\x06\x41\x75\x7c\
-\xb1\xda\xcc\xe7\x88\x96\x28\x2a\x14\x5b\x1c\x36\xaf\x99\x54\x4c\
-\x9a\x86\x7f\x90\x83\x26\xd7\x86\x79\x5d\x93\xd0\x62\xd5\xa8\x4d\
-\x8e\x86\x61\x18\x14\xe4\x15\x7a\xd5\xf6\xce\xfb\x7b\xf0\xf8\xa4\
-\xbb\xe8\x70\x63\x73\xfc\x02\x1c\x18\x86\x81\xa1\x1b\x32\x3d\x4b\
-\x22\xb9\x0a\xf0\x7a\xaa\xd0\x59\xe0\x62\xf0\xc8\x9b\x18\xfe\xc4\
-\xad\x58\xed\x16\x0a\xf2\x0a\x99\x3a\x7e\x3e\x7b\xb7\xc6\xa1\xaa\
-\x2a\x41\x75\xfc\x4a\x34\xc6\x30\x04\x2f\x3d\xf2\x21\x0f\x8c\xeb\
-\xc7\xa0\x91\x3d\x69\xb9\xb4\x09\xcf\x0c\x9f\xc9\xe9\x94\xac\xb2\
-\xa7\xc1\x84\x67\xeb\x12\x6f\x8d\x6c\xf2\xd1\x53\xbc\xf9\xf7\x85\
-\x3c\xfd\xf6\x70\xfe\xd8\x16\x5f\xe6\x88\xbc\x36\x18\xb0\xb3\xc3\
-\xfc\x4b\xa6\x43\x35\x15\xbb\xc3\x8a\xdd\x61\xc1\x3f\xd8\x87\xd6\
-\x1d\x23\x68\xd5\x21\x82\xb0\x86\x41\xd8\x7d\x6c\xd8\x7d\x2c\x9e\
-\xa2\xbb\xde\x08\x97\xc5\x8c\xaa\x29\x95\x0f\x1a\x6a\x10\x89\x47\
-\x4e\x11\xb7\x3f\x91\xc8\x56\x0d\x2a\x6d\xdb\xa3\x6f\x34\xdd\x6f\
-\x8d\xe6\xe8\xa1\x64\xd6\x2d\xdf\xc1\xaf\x3f\xed\x25\x23\x2d\x07\
-\x97\xcb\xed\xd9\xe3\x4d\x56\x86\x97\x48\xae\x5e\xe1\x32\x0c\x41\
-\xaf\x81\x1d\xd1\x34\x95\xf4\xb4\x2c\xa6\x3d\xf7\x25\xdb\x37\xc4\
-\x22\x10\x68\x7f\xce\x89\x51\x3c\x86\xd8\x64\xd6\x98\xf7\x9f\x15\
-\xc4\xc7\x26\x32\x7e\xea\x3d\x4c\xfb\x7a\x1c\xaf\x3e\x36\x97\x03\
-\x7b\x8e\x55\x7d\x57\xdd\x3f\xd9\x5d\x55\x53\xd9\xf2\xf3\x3e\xde\
-\x99\xf8\x39\x13\x5e\xbf\xf7\x4f\x7b\x7b\xd5\x2e\xdc\x2e\x1d\x8b\
-\xcd\x4c\x40\x90\x0f\x41\x75\xfc\x08\x8f\x08\x25\xaa\x53\x24\x9d\
-\x6f\x6e\x85\xaf\xbf\xfd\x82\xce\xed\xf0\xb3\x63\xb6\x9a\x29\xcc\
-\x77\xd6\x9a\xfe\x38\x79\xfc\x34\xbb\x7e\x39\xe8\x95\x70\x79\x06\
-\x29\xd0\xa4\x59\x18\x23\xc6\xf7\x67\xf0\x43\x37\xf1\xdd\xfc\x8d\
-\xfc\xf1\x7b\x3c\xa9\x89\xe9\x64\xa7\xe7\xe1\x72\xe9\x68\x26\x19\
-\x94\x21\x91\x5c\x55\xc2\xe5\x89\x82\x4b\x27\xb4\x7e\x20\xf1\xb1\
-\x49\x8c\x1d\xf4\x0e\x76\x1f\x2b\x8a\xaa\x94\xbb\x73\x71\xb1\x88\
-\x98\x2d\x26\xd6\xff\xb0\x93\x93\x27\xd2\x99\x38\x6d\x38\x53\x3e\
-\x1d\xcd\x9c\x29\x4b\x59\xfd\xed\xd6\x73\x85\x46\x18\x94\xb7\xed\
-\x48\x59\x6b\x60\xaa\xa6\xb2\x69\xd5\x1e\x9c\x85\x6e\x9e\xfd\xcf\
-\x03\xb5\xae\xe3\x0d\xc3\x20\x2f\xbb\x90\x96\xed\x9b\x10\xd5\x29\
-\x82\x96\xed\x9b\x10\xd9\xaa\x01\x61\x8d\x42\xaa\xed\x1a\x66\xb3\
-\x7a\xde\x7b\x75\x5d\x0e\x14\x45\x21\x3f\xb7\x90\x0d\x2b\x76\x11\
-\xd5\x39\x92\xe6\xd1\x8d\xaa\x74\xbc\x5f\x80\x83\xfb\x9e\xb8\x95\
-\xac\x8c\x5c\x76\x6e\x3e\x48\xec\xae\xa3\xfc\xfa\xd3\x1f\x9c\x4a\
-\xce\xc4\x6a\x97\x55\xe1\x25\x92\x2b\x85\x4a\x87\xa2\x36\xbb\x85\
-\x29\x4f\xce\x23\x3d\x2d\x9b\x88\x16\xf5\x79\xf3\xf3\x27\x4a\x22\
-\xf8\xbc\x32\x9e\x16\x13\xf1\x31\x89\x8c\xee\xf7\x06\xa7\x53\xb2\
-\x18\xf5\xfc\x40\x1e\x1c\x7f\x5b\xe9\xfc\x2d\x2a\xd9\xdc\xb1\x9c\
-\x1f\x9b\x4c\x1a\xb9\x59\xf9\xb5\xae\xd3\x5d\x2e\x1d\xb3\xd9\xc4\
-\xc0\xff\xeb\xc9\xe3\xaf\xfc\x95\x07\x27\xdc\x46\xb7\x5b\xa3\xab\
-\x55\xb4\x8a\xdd\x91\xda\xe6\x89\xaa\x9a\xc2\xd1\x43\x27\x59\x38\
-\x63\xd5\x79\x87\xf2\xfb\x07\xfa\xd0\xf3\xb6\xf6\x3c\xf4\xf4\x00\
-\x46\xfd\x73\x20\x51\x9d\x22\x6a\x95\xd7\x29\x91\x48\x2e\x50\xb8\
-\x00\x9c\x85\x2e\xfe\xd6\xef\x0d\x7e\xfc\x66\x0b\x2d\xdb\x37\xe1\
-\x9d\x45\x63\xa9\x13\x16\x88\xee\xd6\xbd\xde\x62\x5e\x00\xa3\x07\
-\xbc\xc9\xda\xe5\x3b\x18\x30\xbc\x1b\xaf\x7e\x3c\x0a\xb3\x45\xf3\
-\xaa\x18\x6c\x45\x2d\x0e\xec\x39\xc6\xae\x5f\x3d\xf5\x13\x6b\x7c\
-\x74\x99\xe2\x99\x1a\x0c\x0a\xf1\x65\xc4\xf8\xdb\x18\xf5\xfc\x9d\
-\x44\xb6\x0a\x97\x53\x59\x7f\xfa\x5e\x34\x93\xca\xce\xcd\x07\x98\
-\xf9\xf2\x37\xec\xfa\xe5\xe0\x79\xbf\x57\xcd\xa4\xd1\xb5\x57\x6b\
-\x1e\x7f\x65\x08\xfd\x86\x5d\x8f\xcb\xe9\xae\x55\xeb\x7d\x12\x89\
-\xe4\x02\x84\xab\x78\xfb\xf3\xe9\x2f\x2c\x62\xfe\xbb\xff\x23\xfc\
-\x9a\x50\xa6\x2f\x19\x4f\xab\xeb\xae\x29\xa9\x96\xe1\x8d\x71\x51\
-\x80\xff\x3c\xf7\x25\x8b\xe6\xac\x21\xaa\x53\x04\xb3\x57\x4c\x24\
-\xac\x51\xb0\x67\x1b\x7a\x71\xbe\xd2\x05\x2f\x3f\xf2\x51\xc9\xf4\
-\x63\x4d\x16\x2f\xdd\x65\xe0\xf0\xb3\xf1\xf0\xc4\x3b\xe8\x37\xac\
-\x6b\x95\x8f\x4f\x4b\xce\x64\xdf\xf6\x04\xf6\x6e\x8d\xbb\xe2\x3f\
-\x4c\x9b\xdd\xc2\xbe\xed\x09\x7c\xf0\xef\xa5\x7c\xf1\xfe\x6a\x8e\
-\x1e\x3e\x79\xde\xe7\x6a\xd0\xa4\x0e\x23\x9e\xea\x4f\xff\x61\xd7\
-\xd7\xbe\xfa\x8d\x12\x89\xe4\x1c\xaa\x94\x80\xec\xf0\xb5\xb1\x6c\
-\xde\x46\xfe\xd8\x16\xcf\x94\x4f\xfe\xc6\xab\x1f\x8f\x62\xfa\x0b\
-\x8b\x58\xff\xc3\x8e\x73\x83\x34\xca\xf1\xbc\xac\x36\x33\x5f\xcd\
-\xfe\x89\x9d\x9b\x0f\x30\x79\xee\xdf\x98\xbe\x64\x02\xef\x3e\xff\
-\x15\x4a\x05\xe2\x54\x99\x16\x59\xed\x16\x66\x4f\x5e\xc2\xa1\x3f\
-\x8e\xd7\xe8\xfc\xad\xdc\x9c\x7c\x9e\x7c\x75\x28\xdd\x6e\x69\xe3\
-\xf5\x31\xc7\xe3\x53\x58\xf9\xd5\x6f\x9c\x4a\xc9\x22\x3b\x23\x8f\
-\xec\x8c\x5c\xc2\x1a\x06\xd3\xa6\x73\xe4\x15\xff\x71\x5a\x6d\x66\
-\x52\x4e\xa4\xf3\xfd\x67\x9b\xd8\xbe\x31\x96\xe6\xd1\x8d\x18\xfe\
-\x54\x3f\x1c\x5e\x46\x55\x96\xfa\x76\xfd\x6c\xdc\x35\xaa\x37\xb1\
-\xbb\x8f\x12\xb7\x3f\xb1\x4a\xb5\x1f\x25\x12\x49\x2d\xf4\xb8\x4a\
-\x1d\xa0\x2a\x1c\xde\x77\x82\x31\x77\xbc\xc5\xa9\x94\x2c\xc6\x4e\
-\xbe\x8b\xf1\xaf\xdd\x4b\x56\x7a\xae\xd7\x9e\x97\xaa\xa9\xc4\xee\
-\x3a\xca\xb8\xc1\xff\x21\x3b\x33\x8f\x71\x53\xee\xae\xb8\x1c\x8f\
-\x28\xf6\xd7\xca\x47\xd3\x54\x7e\xfc\x66\x2b\x4f\xdf\xf7\x1e\x85\
-\x05\x2e\x2e\xcb\xb6\xbd\xe5\x8a\x36\x64\x67\xe4\x71\xe7\x03\x37\
-\xd2\xa5\x57\x6b\xaf\xca\x38\x24\x1d\x4b\x63\xd6\xab\x8b\x79\xf9\
-\xd1\x8f\xf8\xf1\x9b\xad\x6c\x5b\xb7\x9f\xd8\x5d\x47\x48\x4c\x48\
-\x23\xe3\x74\xee\x55\xf3\x81\x6a\x26\x15\x67\xa1\x9b\x84\x03\xc9\
-\xac\x59\xb6\x9d\xb1\x03\xdf\xe1\x8b\x59\x3f\x92\x96\x9c\x59\xe5\
-\x73\x05\xd6\xf1\xe3\xae\xbf\xf5\x2e\xd9\xf8\x54\x22\x91\x5c\x25\
-\xc2\x55\x2c\x5e\xe9\xa9\xd9\x8c\x1d\xf4\x0e\xf1\xb1\x49\x74\xef\
-\x1b\xcd\x07\xff\x9b\x88\xcd\x61\xf1\x3a\x7f\x4a\xd5\x54\x12\x8f\
-\xa4\x32\x6e\xf0\xb4\x52\x1e\x59\x59\xd8\xec\x66\xcc\x5e\x14\xce\
-\x35\x99\x35\x8e\x1c\x48\xe6\xef\x77\x4f\x27\xf9\xd8\xe9\x1a\xd3\
-\xc9\xba\x2e\xf0\x0f\xf6\xa1\x7d\xf7\x66\xd8\x2a\xdb\xae\x43\xc0\
-\xa6\x95\x7b\xf8\xd7\xa3\x1f\xb3\x6a\xd1\x6f\x64\xa6\xe7\x62\x14\
-\x85\xfb\x2b\x8a\x82\xa2\x2a\xa8\x57\x59\x72\x92\xa2\x28\xa8\xaa\
-\x82\xa1\x1b\x64\x9c\xca\x61\xf1\x7f\xd7\x33\x71\xf8\x4c\xde\xfd\
-\xe7\x57\x6c\xfe\x71\x0f\x99\xa7\x73\xbc\x3e\x57\x8b\xe8\xc6\x04\
-\x85\xfa\xa3\xcb\x29\x43\x89\xe4\xea\x12\xae\x62\xdc\x2e\x9d\x89\
-\xc3\x67\xb2\x69\xe5\x6e\x1a\x5f\x5b\x8f\x0f\x56\x3c\x43\x48\x3d\
-\xff\x0a\xbd\xae\xe2\xaa\x10\x26\xb3\xc6\xa3\xcf\x0f\xe4\xe3\x9f\
-\x9e\xaf\xf4\x3a\x41\xa1\xfe\x4c\x5f\x3a\xc1\xb3\x2f\x98\x17\xc1\
-\x20\xa9\x49\x19\x7c\xfa\xce\x0f\x35\xa6\x93\xdd\x2e\x9d\x06\x8d\
-\xeb\x10\xd6\x30\xa4\xd2\x28\xbf\xdf\x37\xc6\x32\x6f\xda\x0a\x4e\
-\x9d\xcc\xc4\x62\x31\xa3\xa9\x2a\x32\x87\xb6\xb4\x67\x0d\x90\x9d\
-\x99\xcf\xa6\x95\xbb\x99\xf5\xca\x62\xfe\xfd\xc4\xa7\xfc\xb2\x7a\
-\xaf\x57\xc7\x5b\xed\x16\xda\x74\x8c\xc0\x59\xe8\x92\x9d\x29\x91\
-\x5c\x8d\xc2\x55\xcc\x5b\x4f\x7f\xc6\xfb\xaf\x7c\x8b\xcd\x61\x65\
-\xe6\xb2\xbf\xd3\xf3\xb6\x0e\xb8\xcb\xd8\xa1\xd8\xed\xd2\x11\x06\
-\x3c\xf5\xda\x30\x3e\x59\xfb\x22\x7d\xef\xea\xea\x55\xb8\xb6\x10\
-\x82\x86\x11\xa1\xcc\x59\xf9\x2c\x81\x21\xbe\x5e\x45\x86\xd5\xa4\
-\x30\x70\x21\x3c\x41\x19\x56\x5b\xc5\xb9\x44\x05\x79\x4e\x0e\xee\
-\x39\xc6\xe9\x94\x4c\xcf\x66\x87\xb5\x49\xb1\x2e\xf1\xbd\x2a\x4a\
-\x71\xb1\x5d\x17\xf1\xb1\x49\xcc\x78\xf1\x6b\xbe\xff\x6c\xb3\x57\
-\x9e\x7e\x60\x88\x1f\x42\x97\x73\x85\x12\xc9\x55\x2b\x5c\x8a\xa2\
-\x60\xb1\x9a\x59\xfd\xed\x56\xde\x98\xb0\x10\x97\xd3\xcd\x13\x93\
-\x86\x70\xfb\xf0\x1e\xe8\xba\x27\x5c\xbe\xb0\xc0\x49\x48\xbd\x00\
-\xee\x1e\xdd\x87\x45\xdb\x27\xd3\xbd\x6f\x5b\xcf\xee\xc7\x55\xb8\
-\x06\x40\x60\x88\x2f\x73\x56\x3e\x4b\x87\xee\xcd\x71\xbb\xf4\xda\
-\x63\xd3\x15\xcf\x3e\x53\x95\x09\x97\xdb\xe5\x26\x2b\x23\x17\xb7\
-\x5b\x2f\x77\x19\xcc\xed\x36\x08\x08\xf6\xa9\x51\xcf\xa7\xeb\x06\
-\x6e\xa7\xbb\x72\x6f\xc9\xa4\xa1\x78\xf1\xc5\xb9\x5d\x3a\x8d\x9b\
-\xd5\xa3\x53\xcf\x96\x38\xfc\x6c\x95\x7a\xd9\xaa\xaa\x90\x97\x53\
-\xc0\xf2\x05\x9b\xca\x2c\x01\xf6\xe7\x77\x61\xf3\xb1\x61\xc8\xa2\
-\x86\x12\xc9\xd5\xed\x71\x81\x27\xd1\xf8\xf7\x0d\x31\x3c\xfb\xc0\
-\x2c\x00\x46\xfe\xe3\x36\x5e\x9e\xf5\x30\x2e\xa7\x9b\x17\xdf\x7f\
-\x88\x19\x4b\x26\x30\x6c\x74\x9f\x0b\xf6\x88\x84\x10\x3c\x3f\x7d\
-\x04\x23\x26\xf4\xab\x35\xe2\xa5\xa0\x60\x32\x69\x95\x56\xb1\x30\
-\x5b\x3c\xdb\x7a\x68\x9a\x86\x61\x18\x45\x53\xa3\x45\xd3\xab\x86\
-\x40\x77\xeb\xdc\xd0\x27\x8a\xc7\x5f\x19\x5a\x73\x9e\x4d\x55\x28\
-\x28\x70\x91\x9b\x5d\x79\x22\xb8\xd5\x66\xc6\xc7\xd7\x56\xf2\x3c\
-\x65\x8a\xa0\xdb\xc0\x2f\xc0\xc1\xed\xf7\xf5\xe0\xe9\xb7\x87\x33\
-\xe6\xa5\xbf\x12\x1e\x11\x8a\x40\x14\x15\xd1\x15\xe5\x8a\x97\x21\
-\x8c\x32\x3d\xfd\x52\xdf\x8f\x21\xc8\xcb\xce\xab\x55\x15\x45\x24\
-\x12\x49\x69\xaa\x3d\x26\xd8\x13\xd1\xe7\x21\xba\x6b\x53\x16\xef\
-\x9e\x5a\xed\xde\x8b\x10\x82\x81\x23\x7a\xd2\xb8\x69\x18\x53\xc6\
-\xce\xab\xf1\x46\xc8\x10\x82\xdc\xec\xfc\x52\xd5\x42\xca\x34\xec\
-\x76\x0b\xdd\xfb\xb6\x25\x66\xe7\x11\x62\x76\x1d\x2d\xc9\x39\xd2\
-\x54\x0d\x9b\xc3\x42\xaf\x81\x1d\xb9\x7f\x6c\xdf\x1a\xf7\x7c\xf9\
-\xd9\x05\xe4\x64\x7a\x57\xc1\xe4\xfa\x3e\x51\x1c\xde\x77\x82\xfc\
-\xdc\x42\xf2\xf3\x0a\x3d\x5b\xba\x94\x0c\x4a\x3c\x01\x36\xdd\xfa\
-\x46\xd3\xa3\x6f\x34\x00\x9d\x6f\x6e\x45\x74\x97\xa6\x7c\x3d\xe7\
-\x27\x36\xae\xdc\x43\x7e\x9e\x93\x82\xdc\xc2\x52\x65\xc0\x14\x45\
-\x41\xd5\x54\xda\x75\x6d\x46\x8b\xb6\x8d\x2b\x7e\x17\xba\x41\xda\
-\xc9\x2c\xb9\xa9\xa4\x44\x22\x85\xeb\x0c\x17\x5a\x18\xd6\x5b\xf1\
-\x02\xe8\xd0\xbd\x39\xd3\x16\x8d\x65\xea\x53\xf3\x49\x3e\x7e\xba\
-\xea\xc5\x7b\x2f\x95\x57\xa2\x40\xc6\xa9\x1c\xf2\xbd\x28\x3b\x14\
-\x1e\x11\xca\xf8\xd7\xef\x61\xeb\xcf\xfb\x38\x16\x97\x82\x61\x08\
-\x82\xeb\xf8\xd3\xa6\x73\x24\x4d\xa3\xc2\x6b\xa2\x3b\x89\x21\x04\
-\x05\x05\xde\x05\x3b\xdc\x70\x4b\x34\xa1\x61\x41\x14\x16\xba\x58\
-\x38\x63\x25\x87\xf7\x9d\x28\xe5\x4d\x5f\x1b\xd5\x88\xdb\xee\xe9\
-\x86\x66\x3e\x33\x95\x6c\x73\x58\xb8\xff\xa9\xfe\xf4\xbb\xe7\x06\
-\xf6\x6c\x39\xcc\xf6\x8d\x07\x70\x39\xdd\x14\xe4\x3b\x51\x14\x05\
-\xbb\xc3\x4a\xf3\xb6\x8d\xe8\x3d\xa8\x63\xa5\x51\x9b\xf9\xb9\x85\
-\x1c\xde\x77\x1c\xb3\x59\xe6\x71\x49\x24\x52\xb8\x8a\xf0\xf1\xb3\
-\x5d\xd2\x07\x08\x8f\x08\x65\xc6\xd2\x09\x3c\x7d\xef\x7b\x1c\x3b\
-\x9c\x52\x23\x3b\x59\xd3\x54\xd2\x92\x33\xc9\xf4\x32\xff\xca\x2f\
-\xc0\x41\xef\x41\x9d\x6a\xc7\x17\x24\x3c\xcf\x77\x3a\xc5\xfb\xbc\
-\xaa\x6b\xa3\x3d\xbb\x37\x5f\xd3\xa2\x7e\x89\x70\x19\xba\x41\x60\
-\x1d\x3f\xfe\xfa\xf0\x4d\x34\x8c\x0c\x2d\xf3\xb8\x3a\x61\x81\xf4\
-\xba\xb3\x23\xbd\xee\xec\x88\x61\x18\x64\x67\xe4\xa1\x69\x2a\xbe\
-\x01\x0e\xaf\xaf\xbd\x7f\x67\x02\x29\x27\xd2\x65\x02\xb2\x44\x52\
-\x8b\xa9\x76\x17\xc5\xe1\x67\xbf\xa4\x0f\x50\x9c\xdf\xf4\xfa\x82\
-\x31\xf4\x1b\x76\x3d\xce\x42\x77\x8d\xeb\x64\xcd\xa4\x71\x3a\x25\
-\x8b\x43\x7b\x8e\x55\x3a\x5d\x58\x1b\xb1\xda\x2c\x6c\xfc\x61\x57\
-\x95\x8f\x8b\x68\x5e\xbf\xc8\xd3\xf2\x6c\x10\x3a\x70\xc4\x8d\x5c\
-\xd7\xa3\x85\x77\x1f\xae\xaa\x12\x10\xec\x5b\x25\xd1\xca\xce\xcc\
-\x63\xf9\x82\x4d\x72\x7d\x4b\x22\x91\xc2\x75\x79\x3d\xae\x92\x07\
-\xd1\x54\x46\xfe\x63\x00\x4f\x4c\x1a\x52\x33\xbd\x2e\xb3\xca\xd2\
-\x79\x1b\x39\x79\xbc\x7a\x12\xa3\x0b\xf2\x6a\x4e\xb5\x73\x93\x59\
-\x23\xe1\x40\x32\xbb\x7e\x39\x54\xa5\xe3\x9a\x46\x35\x3c\xe3\x65\
-\x06\x3a\xe8\xdc\xab\xf5\x45\xbd\xcf\xa5\x9f\x6c\x20\x76\xd7\x51\
-\x34\x93\x26\x7f\xf3\x25\x12\x29\x5c\x67\xb8\x14\x6b\x5c\xe5\x79\
-\x5e\x42\x08\xfa\x0c\xea\xc4\x8b\xb3\x46\x52\x50\xc3\xb6\xb1\xb0\
-\x58\xcc\xa4\x26\xa6\x33\x6f\xda\xff\x2e\x78\x2b\x96\xbd\xdb\xe2\
-\xf8\x68\xea\x77\xe4\x64\xe6\xd5\x88\x67\x13\x42\xe0\x1f\xe4\xe0\
-\x83\xc9\x4b\xc8\xcf\x2b\xf4\xfa\xb8\xfa\x8d\x43\x8a\x36\x01\x85\
-\xac\xd3\x39\x7c\x34\x75\x19\xbb\x7e\x3d\x74\x51\xee\xf1\x8b\x59\
-\xab\x59\xbe\x60\x93\xac\xc4\x2f\x91\x48\xe1\x3a\x97\x0d\x2b\x76\
-\x91\x97\x53\x50\x62\xd0\x2e\xb5\x78\x01\xb4\xe9\x14\xc9\x73\xef\
-\x8e\xb8\x34\xd7\xac\x82\x71\xf7\x0b\x74\xb0\x7d\x63\x2c\x1f\xbf\
-\xb1\x1c\xdd\x5d\xf5\x50\x7e\xc3\x10\x7c\xb7\x60\x23\xb3\x27\x2d\
-\x66\xf3\xaa\xdd\x1c\x8f\x3b\xbf\xfd\xaa\x2e\x46\x9d\x3e\x55\x53\
-\x39\x79\xe2\x34\x9f\xbe\xed\x7d\xc5\x12\xbb\xc3\x4a\xdd\x06\x41\
-\x18\xba\x81\xd3\xe9\x66\xfb\xc6\x58\x3e\x7c\x6d\x29\x73\xdf\xfc\
-\x9e\x84\x03\x49\xd5\x72\x5f\xa9\x49\x19\xcc\x9e\xbc\x98\xe5\x0b\
-\x37\xe1\x76\xbb\x65\x34\xa1\x44\x72\x05\x50\xed\x2b\xd4\xd9\x19\
-\x79\x3c\x36\xe0\x4d\xa6\xce\x7f\x8c\xfa\x8d\xeb\x14\x8d\xa8\x2f\
-\xdd\x9a\x42\x6e\x76\x3e\x6b\xbf\xdb\xc1\x8c\x17\x17\x11\x10\xec\
-\x7b\xfe\x82\xa4\x2a\x5e\x45\x9e\xa9\x26\xb5\xcc\x1d\x9a\xcb\x43\
-\xd3\x54\x36\xae\xd8\xc5\xe9\x94\x4c\x1e\x7f\x65\x28\xa1\xf5\x03\
-\xbd\x3a\xee\x8f\x6d\x71\xcc\x7f\x77\x25\x89\xf1\xa9\xe4\xe5\x15\
-\x62\x32\x69\x1c\x8f\x4f\xa5\x65\x87\x26\xe5\x1e\x63\x36\x6b\x15\
-\x6a\x97\xe2\xc5\x5a\x8f\xd9\x62\xc2\x64\xd2\xbc\xaa\x41\x69\x32\
-\x6b\xac\xfb\x7e\x27\xaa\xa6\x32\xea\xf9\x81\x5e\xa9\x7e\x64\xab\
-\x70\x12\x13\xd2\x30\x5b\x3d\xd7\x49\x39\x9e\xce\x8f\xdf\x6c\x61\
-\xf3\x8f\x7b\x88\xea\x18\xc1\xc0\x07\x6f\x24\xa2\x65\x83\x2a\xbf\
-\x3f\xb7\xdb\xe0\x7f\x5f\xfe\xc2\xea\x6f\xb7\x92\x7c\xfc\x34\x86\
-\x6e\xc8\x29\x42\x89\xe4\x0a\x41\xb9\xbb\xd3\x0b\x17\xc5\x2d\x12\
-\x42\x30\xf6\xd5\xbb\xe8\xd1\xbf\xdd\x25\x79\x10\xb7\xdb\xcd\x57\
-\xb3\xd7\xb0\xe4\x93\xf5\xa5\xbc\xaf\xf3\x25\xa8\x8e\x1f\xbd\x07\
-\x75\xc2\x64\xd6\xca\xf5\x1c\x35\x93\x46\x52\x42\x2a\xeb\x7f\xd8\
-\x59\xa5\x0d\x0a\x8b\xcf\x67\xb6\x98\xb8\xe5\xaf\x5d\xe8\xd2\xbb\
-\x15\x0d\x23\x42\xf1\x0b\xf2\x2d\xf1\xe0\xf2\xf3\x0a\x49\x4f\xc9\
-\x22\xe1\x60\x32\xeb\xbe\xdf\xc9\x9e\xdf\x0e\xe3\x2a\x74\xa1\xa8\
-\xc5\xbb\x1a\x2b\xb4\x68\xd7\x98\x4e\x3d\x5b\xe2\x72\x9d\x1b\xf0\
-\xa1\xa9\x2a\xc7\xe2\x4e\xf2\xdb\x4f\xfb\xca\xfc\xb9\xcb\xe9\xa6\
-\x6d\xd7\xa6\x74\xba\xb9\x75\xb9\xbb\x03\x17\xdf\xcb\xfe\x1d\x09\
-\x6c\x5b\x17\x83\xa5\x92\xca\x1f\x9e\x67\xf3\xfc\x15\xda\x30\x88\
-\xbb\x1f\xed\x4d\x44\xcb\xfa\x84\x35\xaa\x83\xc5\x7a\x66\x10\xe0\
-\x76\xe9\x64\x65\xe4\x92\x18\x9f\xc6\xb7\x73\xd7\xb1\xf3\x97\x83\
-\xa5\x44\xb6\x38\xe9\x1a\xc0\x62\x33\x13\xd9\xaa\x01\x1d\x6f\x6c\
-\xc1\x35\xcd\x1b\x10\xde\xb8\x0e\x3e\x01\x36\x1c\xbe\xb6\x52\xfd\
-\x59\x90\xef\xe4\xd4\xc9\x4c\x4e\x1e\x3b\x4d\xcc\xce\x23\x6c\x5e\
-\xb5\x97\x53\x29\x99\x18\xba\xe1\x95\x40\x4b\x24\x12\x29\x5c\x9e\
-\xaa\x0f\x86\xa0\xe7\xed\x1d\x78\x72\xd2\xd0\x8b\xea\x79\xbd\xf9\
-\x8f\x85\xfc\xb1\x2d\x9e\xec\x8c\x3c\x4c\xe6\xea\x1e\x55\x57\x50\
-\x30\x18\xe5\x82\x4a\xf4\x79\x8c\xb3\x82\xcd\x6e\x26\xa4\x5e\x00\
-\x36\x87\x15\x4d\x53\x11\x86\xc0\x59\xe8\x22\x3b\x2b\x8f\xac\xf4\
-\x5c\x74\x97\xee\xf1\x90\xca\xec\x3f\x51\xf1\xad\x7b\xd5\xe7\xd5\
-\xff\x8c\x42\x08\x54\x55\xc5\x2f\xd0\x87\xa0\x50\x3f\xcc\x66\x0d\
-\x45\x55\x10\x86\xa7\xba\x45\x7e\x9e\x8b\x53\xc9\x19\x95\x56\x3f\
-\xf1\x74\x91\x00\x01\x16\x9b\x85\xa0\x60\x5f\xac\x0e\x33\x66\xab\
-\xa7\x00\xb1\xc0\x13\x4a\xef\x72\xba\xc9\xc9\xca\x27\x2b\x3d\xd7\
-\x53\x7e\x4a\xf1\x54\x2c\x91\x15\x8a\x25\x12\x29\x5c\x55\xf7\x84\
-\x5c\x6e\xda\x74\x8e\x64\xc2\xeb\xf7\x5e\xd0\xd4\xdd\xd9\x06\x51\
-\x51\x14\xd2\xd3\xb2\xf9\x75\xf5\x5e\x3e\x79\xfb\x87\x4b\x3e\x1d\
-\x29\x91\x48\x24\x92\x2b\x58\xb8\x8a\x71\x16\x38\x79\x77\xc9\x04\
-\x1a\x37\xad\x77\xc1\xe7\x9a\xfb\xd6\xf7\xac\xf8\xe2\x17\xcf\x03\
-\x48\xc1\x92\x48\x24\x12\x29\x5c\x17\x93\xfb\xc7\xf5\xe3\x8e\xfb\
-\xbb\x57\xd9\x4b\x2a\x2c\x74\xf1\xe5\xfb\xab\x59\xb9\xe8\x37\x0a\
-\xf3\x9d\x72\xa1\x5d\x22\x91\x48\xae\x52\x2e\x79\xdd\x9b\xb9\x6f\
-\x2d\xe7\x78\x5c\x0a\x8f\x4c\xbc\x1d\x93\xc5\x54\xae\x78\x15\x0b\
-\xdb\xe9\xd4\x2c\xd6\x2c\xf9\x9d\xe5\x0b\x36\x92\x93\x5d\x80\xa6\
-\xa9\x52\xb4\x24\x12\x89\x44\x7a\x5c\x97\x9e\xa0\x50\x3f\x66\x7d\
-\xff\xb4\xe7\x26\xfe\x24\x5e\xc5\xa2\xf5\xf9\xcc\x1f\x59\x3c\x77\
-\x5d\x99\x6d\x24\x12\x89\x44\x22\x85\xeb\x92\x62\x18\x06\xfe\x81\
-\x3e\x8c\x9f\x7a\x0f\x6d\x3a\x47\x96\xfc\x7f\x41\xbe\x93\xc5\xff\
-\x5d\xcb\xea\xc5\xdb\xc8\x48\xcb\xb9\x08\x51\x82\x12\x89\x44\x22\
-\x91\xc2\x75\x9e\x08\x21\xc8\xc9\xca\xe7\xe1\x89\x77\x70\xd3\xed\
-\x1d\x58\xf7\xdd\x0e\x16\xcd\x59\x83\xcb\xe5\xc6\x24\xa7\x03\x25\
-\x12\x89\x44\x52\xd3\x84\xeb\x6c\x01\x2b\xb9\x21\x39\x25\x28\x91\
-\x48\x24\x92\x0a\xa8\x11\x9b\x12\x49\xb1\x92\x48\x24\x12\x89\xb7\
-\xc8\x8a\xa3\x12\x89\x44\x22\x91\xc2\x25\x91\x48\x24\x12\x89\x14\
-\x2e\x89\x44\x22\x91\x48\x80\xff\x07\x1c\xc9\xcb\x99\x3f\x26\xb3\
-\xeb\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x03\x90\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
-\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
-\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
-\x67\x9b\xee\x3c\x1a\x00\x00\x03\x22\x49\x44\x41\x54\x38\x8d\x6d\
-\x52\x4d\x6c\x54\x65\x14\x3d\xf7\x7b\xef\x95\xf9\xad\x33\x6d\x07\
-\x5b\xa8\xb6\x0a\x86\x12\xa6\xa1\xa2\x33\x8d\x7f\xd1\x98\x46\x37\
-\xc4\x60\x58\xa8\xbc\x44\x8c\x90\x81\xf0\xb3\x61\x07\x1b\x0c\x4d\
-\x0c\x11\x74\x61\xa2\xe0\x03\xa3\x31\x4c\x25\x98\x34\x01\x37\xfc\
-\x04\x21\x92\xd4\xc2\xab\x71\xd1\xd0\x92\xd4\xd2\xc6\x01\x46\x3b\
-\xb4\x1d\xe8\xcc\xb4\xf3\xde\xfb\xbe\xeb\xa2\xf3\x92\x59\x70\x92\
-\x9b\xdc\xc5\x3d\x27\x27\xe7\x5c\x62\x66\xf8\x48\x65\xb2\xcf\x34\
-\xe8\xda\x11\x10\xde\xf4\xa4\x6a\xd5\x84\x98\x27\xc2\xb8\xe3\xca\
-\x13\x00\x2e\xd8\x96\xe9\xd6\xdd\x1e\x04\x70\x82\x7c\x81\x74\x26\
-\xbb\x45\xd3\xc4\x40\x4f\xd7\x2a\x7d\x5d\x67\xb3\xd1\xd6\x14\x01\
-\x98\x51\x28\x56\x30\x32\x76\xbf\x7c\x67\xfa\xa1\x27\x15\xef\xb6\
-\x2d\xf3\x6c\x7a\x57\x36\xc3\x8c\xef\x00\xc4\x88\x99\x91\xca\x64\
-\xd7\x1b\xba\x18\xd9\xda\xd7\x1d\x8a\xc7\x82\xd0\x89\xd0\x1c\x0d\
-\x20\x1c\xd0\x11\x0d\x19\x08\x1a\x02\x33\xc5\x45\x1c\xcf\x0e\x57\
-\x0a\xc5\x8a\x1d\x0d\x35\xf4\x3e\x2e\x57\x0d\x66\x34\x11\x33\xe3\
-\xd5\x3d\x67\x4f\xf5\xac\x6b\xfb\x34\x18\x30\xc4\xad\xd1\x1c\xaa\
-\xae\x07\x43\xd7\xe4\x9a\xd5\xb1\xc5\xbe\xf4\xf3\xe1\xde\xf5\xad\
-\xa4\x09\x82\x10\x84\x5f\xae\x4d\xa8\xb7\x5e\x6c\x17\x07\xbe\xbe\
-\xea\x38\xae\x6c\xd1\x01\x80\x99\x3f\xbc\x33\x5d\x10\xae\xa7\x58\
-\x31\x2f\x32\xe3\x33\xc7\x95\x67\xc6\xa7\x67\x93\x13\xf7\xe6\x8f\
-\x5e\xef\x68\xee\xda\xb7\x75\x53\x28\x11\x0b\xe1\xe3\x77\xbb\x44\
-\x2d\x06\x02\xa0\x04\x00\x48\xa9\xc2\x55\xc7\xf3\x92\x2f\x3c\xfb\
-\x83\x94\xea\x11\x80\x41\xdb\x32\xf3\xb6\x65\x5e\xf9\xe3\xdb\x8f\
-\x5e\x1a\x9d\x2c\xec\xdd\x7d\xec\x12\xee\x3f\x2c\x61\x7a\xa6\x0c\
-\xa9\x18\x00\x03\x00\x0b\x2c\xaf\xaa\xe9\xa9\x48\x7f\x63\x24\xf0\
-\x55\x67\xfb\xca\x6e\x00\x53\x75\x69\xeb\xba\x26\x76\x6e\x7b\x27\
-\xe9\x76\x3e\x1d\x45\xa2\x71\x05\x34\x41\xbe\x03\xd6\x6b\x77\xf1\
-\x5f\x3f\xdf\xbc\x80\x27\xe3\xb4\x27\xd5\x6b\x17\x87\x27\xab\x57\
-\xed\xa9\x25\xdf\xbc\xe3\xaa\x00\x00\xf6\x5b\xa8\x02\x30\x6a\x04\
-\xae\x9b\xdf\x00\xec\x04\xe0\x3e\x41\x58\xb7\x2d\xf3\x9e\x2f\xe0\
-\x9d\x3f\xfa\xbe\x06\x10\x98\x19\x17\xed\x7f\xd4\xa9\xf3\x7f\xe5\
-\xa4\x54\x3d\xb6\x65\x16\xeb\x59\x87\xb3\x63\xab\x4a\xe5\xa5\x8e\
-\xdf\x47\xc6\x6f\x00\x88\xe9\x00\x40\x04\x10\x11\xee\xfe\x57\x86\
-\x21\x18\x27\x07\xff\x24\x00\x5f\xd4\x93\x53\x99\x6c\x98\x88\xee\
-\xf6\x6e\x5c\x7b\x26\x3f\x33\x97\x02\xa0\x01\xa8\x0a\x00\x10\x44\
-\x04\x00\x1d\x89\x10\x56\xb7\x84\xf1\xe5\xfe\xb7\xa9\xad\x25\x72\
-\xec\x95\x3d\x3f\xdf\x4a\x65\xb2\xe9\x9a\xc6\xf6\x15\x86\xae\xe7\
-\xf2\xb3\x07\xf2\x85\xe2\xeb\x9a\x46\xae\x6d\x99\xae\x58\x76\x40\
-\x78\x5c\x71\x71\x61\x68\x8a\x3d\x8f\xd1\xbe\x32\x8a\xc3\x3b\xde\
-\x08\x7d\xd0\x97\x7c\xb9\xb5\x39\x72\x2d\xbd\x6b\xc0\x35\x74\xf1\
-\x8d\x54\x32\x3e\xf7\x68\x01\x4d\x8d\x41\xd2\x84\x18\x04\x00\xff\
-\x91\xa8\xff\xc7\xa1\xa5\x89\xdc\xdc\xe4\xa5\xe1\xc9\xce\xcc\x96\
-\x4d\xe1\x44\x2c\x88\xee\xb5\x09\x7a\xae\x3d\x1e\x2a\x96\x5d\xfc\
-\x3b\x5b\x82\xe3\x78\x14\x09\x1a\x38\x77\x79\xb4\xe2\x49\x75\x04\
-\x00\x96\x1f\x49\x31\x4d\xe4\xe6\x4e\xdf\x3c\xb9\x2d\xf9\xa0\xb0\
-\xf0\x49\xff\xf7\x37\xe6\x8f\x0f\xdc\x2c\x0d\xdf\xce\x23\x3f\x5b\
-\x46\xd5\x95\x10\x44\x28\xcc\x97\xe4\xb9\xcb\xa3\x8b\x52\xa9\x8c\
-\x6d\x99\x63\x00\xe0\xb7\xf0\x13\x80\xed\xb6\x65\x72\x2d\x30\x03\
-\xc0\x7b\x0d\x86\xb6\x57\x31\x6f\x90\x52\xc5\x0d\x5d\x9b\x21\xc2\
-\x50\xd5\x91\x87\x6c\xcb\xfc\xdb\x0f\xf7\x7f\x2e\x55\x76\x6a\x13\
-\x65\xcc\xc6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-"
-
-qt_resource_name = "\
-\x00\x12\
-\x04\xa1\xb2\xa7\
-\x00\x6c\
-\x00\x69\x00\x76\x00\x65\x00\x75\x00\x73\x00\x62\x00\x2d\x00\x68\x00\x65\x00\x61\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\
-\x00\x67\
-\x00\x18\
-\x05\xe1\xa9\xe7\
-\x00\x74\
-\x00\x61\x00\x69\x00\x6c\x00\x73\x00\x2d\x00\x6c\x00\x69\x00\x76\x00\x65\x00\x75\x00\x73\x00\x62\x00\x2d\x00\x68\x00\x65\x00\x61\
-\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0b\
-\x0c\x6a\x2c\x47\
-\x00\x72\
-\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\
-"
-
-qt_resource_struct = "\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x3e\
-\x00\x00\x00\x60\x00\x00\x00\x00\x00\x01\x00\x00\x5c\xa0\
-"
-
-def qInitResources():
- QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-def qCleanupResources():
- QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-qInitResources()
diff --git a/liveusb/tails_launcher_ui.py b/liveusb/tails_launcher_ui.py
deleted file mode 100644
index e72c25a..0000000
--- a/liveusb/tails_launcher_ui.py
+++ /dev/null
@@ -1,140 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'data/tails-installer-launcher.ui'
-#
-# Created: Sat Jul 4 14:56:46 2015
-# by: PyQt4 UI code generator 4.11.2
-#
-# WARNING! All changes made in this file will be lost!
-
-
-import sys
-if sys.platform == "win32":
- from liveusb import utf8_gettext as _
-else:
- from liveusb import _
-from liveusb import branding
-
-def translate_and_brand(string):
- return _(string) % branding
-
-from PyQt4 import QtCore, QtGui
-
-try:
- _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
- def _fromUtf8(s):
- return s
-
-try:
- _encoding = QtGui.QApplication.UnicodeUTF8
- def _translate(context, text, disambig):
- return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
- def _translate(context, text, disambig):
- return QtGui.QApplication.translate(context, text, disambig)
-
-class Ui_Dialog(object):
- def setupUi(self, Dialog):
- Dialog.setObjectName(_fromUtf8("Dialog"))
- Dialog.setEnabled(True)
- Dialog.resize(530, 349)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
- Dialog.setSizePolicy(sizePolicy)
- Dialog.setMinimumSize(QtCore.QSize(512, 300))
- Dialog.setMaximumSize(QtCore.QSize(16777215, 16777215))
- Dialog.setBaseSize(QtCore.QSize(512, 300))
- self.layoutWidget = QtGui.QWidget(Dialog)
- self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 511, 331))
- self.layoutWidget.setObjectName(_fromUtf8("layoutWidget"))
- self.gridLayout_2 = QtGui.QGridLayout(self.layoutWidget)
- self.gridLayout_2.setMargin(0)
- self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
- self.helpLabel_2 = QtGui.QLabel(self.layoutWidget)
- self.helpLabel_2.setMargin(6)
- self.helpLabel_2.setObjectName(_fromUtf8("helpLabel_2"))
- self.gridLayout_2.addWidget(self.helpLabel_2, 0, 0, 1, 1)
- self.gridLayout = QtGui.QGridLayout()
- self.gridLayout.setContentsMargins(6, -1, 6, -1)
- self.gridLayout.setVerticalSpacing(6)
- self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
- self.upgradeFromIsoButton = QtGui.QPushButton(self.layoutWidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.upgradeFromIsoButton.sizePolicy().hasHeightForWidth())
- self.upgradeFromIsoButton.setSizePolicy(sizePolicy)
- self.upgradeFromIsoButton.setMinimumSize(QtCore.QSize(200, 96))
- self.upgradeFromIsoButton.setBaseSize(QtCore.QSize(0, 96))
- font = QtGui.QFont()
- font.setPointSize(12)
- font.setBold(True)
- font.setWeight(75)
- self.upgradeFromIsoButton.setFont(font)
- self.upgradeFromIsoButton.setIconSize(QtCore.QSize(128, 128))
- self.upgradeFromIsoButton.setObjectName(_fromUtf8("upgradeFromIsoButton"))
- self.gridLayout.addWidget(self.upgradeFromIsoButton, 2, 0, 1, 1)
- self.upgradeFromIsoLabel = QtGui.QLabel(self.layoutWidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.upgradeFromIsoLabel.sizePolicy().hasHeightForWidth())
- self.upgradeFromIsoLabel.setSizePolicy(sizePolicy)
- self.upgradeFromIsoLabel.setMinimumSize(QtCore.QSize(300, 0))
- self.upgradeFromIsoLabel.setMaximumSize(QtCore.QSize(16777215, 16777215))
- self.upgradeFromIsoLabel.setBaseSize(QtCore.QSize(300, 96))
- self.upgradeFromIsoLabel.setWordWrap(True)
- self.upgradeFromIsoLabel.setMargin(6)
- self.upgradeFromIsoLabel.setObjectName(_fromUtf8("upgradeFromIsoLabel"))
- self.gridLayout.addWidget(self.upgradeFromIsoLabel, 2, 1, 1, 1)
- self.installFromIsoLabel = QtGui.QLabel(self.layoutWidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.installFromIsoLabel.sizePolicy().hasHeightForWidth())
- self.installFromIsoLabel.setSizePolicy(sizePolicy)
- self.installFromIsoLabel.setMinimumSize(QtCore.QSize(300, 0))
- self.installFromIsoLabel.setMaximumSize(QtCore.QSize(16777215, 16777215))
- self.installFromIsoLabel.setBaseSize(QtCore.QSize(300, 96))
- self.installFromIsoLabel.setWordWrap(True)
- self.installFromIsoLabel.setMargin(6)
- self.installFromIsoLabel.setObjectName(_fromUtf8("installFromIsoLabel"))
- self.gridLayout.addWidget(self.installFromIsoLabel, 0, 1, 1, 1)
- self.installFromIsoButton = QtGui.QPushButton(self.layoutWidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.installFromIsoButton.sizePolicy().hasHeightForWidth())
- self.installFromIsoButton.setSizePolicy(sizePolicy)
- self.installFromIsoButton.setMinimumSize(QtCore.QSize(200, 96))
- self.installFromIsoButton.setBaseSize(QtCore.QSize(0, 96))
- font = QtGui.QFont()
- font.setPointSize(12)
- font.setBold(True)
- font.setWeight(75)
- self.installFromIsoButton.setFont(font)
- self.installFromIsoButton.setIconSize(QtCore.QSize(128, 128))
- self.installFromIsoButton.setObjectName(_fromUtf8("installFromIsoButton"))
- self.gridLayout.addWidget(self.installFromIsoButton, 0, 0, 1, 1)
- self.gridLayout_2.addLayout(self.gridLayout, 1, 0, 1, 1)
- self.helpLabel = QtGui.QLabel(self.layoutWidget)
- self.helpLabel.setMargin(6)
- self.helpLabel.setObjectName(_fromUtf8("helpLabel"))
- self.gridLayout_2.addWidget(self.helpLabel, 2, 0, 1, 1)
-
- self.retranslateUi(Dialog)
- QtCore.QMetaObject.connectSlotsByName(Dialog)
-
- def retranslateUi(self, Dialog):
- Dialog.setWindowTitle(translate_and_brand('%(distribution)s Installer'))
- self.helpLabel_2.setText(translate_and_brand('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n<html><head><meta name="qrichtext" content="1" /><style type="text/css">\np, li { white-space: pre-wrap; }\n</style></head><body style=" font-family:\'Cantarell\'; font-size:11pt; font-weight:400; font-style:normal;">\n<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">To run Tails Installer you need an ISO image which can be downloaded </p>\n<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">from the Tails website: <a href="https://tails.boum.org/download/"><span style="text-decoration: underline; color:#0000ff;">https://tails.boum.org/download/</span></a></p></body></html>'))
- self.upgradeFromIsoButton.setText(translate_and_brand('Upgrade'))
- self.upgradeFromIsoLabel.setText(translate_and_brand('<ul>\n<li>Upgrade a Tails device to the version of an ISO image.</li>\n<li>The encrypted persistent storage of the Tails device that you upgrade is preserved.</li>\n</ul>'))
- self.installFromIsoLabel.setText(translate_and_brand('\n<ul>\n<li>Install Tails on a new removable device.</li>\n<li>The removable device that you install on is formatted and all data is lost.</li>\n</ul>'))
- self.installFromIsoButton.setText(translate_and_brand('Install'))
- self.helpLabel.setText(translate_and_brand('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n<html><head><meta name="qrichtext" content="1" /><style type="text/css">\np, li { white-space: pre-wrap; }\n</style></head><body style=" font-family:\'Cantarell\'; font-size:11pt; font-weight:400; font-style:normal;">\n<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Need help? Read the <a href="file:///usr/share/doc/tails/website/doc/first_steps/installation.en.html"><span style=" text-decoration: underline; color:#0000ff;">documentation</span></a>.</p></body></html>'))
-
-import resources_rc
diff --git a/liveusb/utils.py b/liveusb/utils.py
index 86ac7f6..6174fcd 100644
--- a/liveusb/utils.py
+++ b/liveusb/utils.py
@@ -100,6 +100,16 @@ def underlying_physical_device(path):
def _format_bytes_in_gb(value):
return '%0.1f GB' % (value / 10.0**9)
+def _get_datadir():
+ script_path = os.path.abspath(sys.argv[0])
+ if not script_path.startswith('/usr/'):
+ if os.path.exists('data/liveusb-creator.ui'):
+ return('data')
+ elif script_path.startswith('/usr/local/'):
+ return('/usr/local/share/liveusb-creator')
+ else:
+ return('/usr/share/liveusb-creator')
+
def get_open_write_fd(block):
(fd_index, fd_list) = block.call_open_for_restore_sync(
arg_options=GLib.Variant('a{sv}', None)
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 9c5ef91..b1d2f6e 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,8 +1,18 @@
[encoding: UTF-8]
liveusb/__init__.py
-liveusb/gui.py
liveusb/creator.py
-liveusb/dialog.py
+liveusb/gui.py
liveusb/launcher.py
-liveusb/launcher_ui.py
-liveusb/tails_launcher_ui.py
+liveusb/source.py
+liveusb/urlgrabber/byterange.py
+liveusb/urlgrabber/grabber.py
+liveusb/urlgrabber/keepalive.py
+liveusb/urlgrabber/mirror.py
+liveusb/urlgrabber/progress.py
+liveusb/utils.py
+
+data/liveusb-creator.ui.h
+data/liveusb-creator-launcher.ui.h
+
+liveusb-creator
+liveusb-creator-launcher
diff --git a/pyuic4_custom b/pyuic4_custom
deleted file mode 100755
index e2ef19b..0000000
--- a/pyuic4_custom
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-# monkey-patching trick found on http://www.themacaque.com/?p=816
-
-### import and wrap compiler.UICompiler and
-from PyQt4.uic.Compiler import compiler, qtproxies, indenter
-
-# pylint: disable=C0103
-class _UICompiler(compiler.UICompiler):
- """Speciallized compiler for qt .ui files."""
-
- def createToplevelWidget(self, classname, widgetname):
- o = indenter.getIndenter()
- o.level = 0
- o.write("""
-import sys
-if sys.platform == "win32":
- from liveusb import utf8_gettext as _
-else:
- from liveusb import _
-from liveusb import branding
-
-def translate_and_brand(string):
- return _(string) % branding
-""")
- return super(_UICompiler, self).createToplevelWidget(classname, widgetname)
-
-compiler.UICompiler = _UICompiler
-
-### wrap qtproxies.i18n_string
-class _i18n_string(qtproxies.i18n_string):
- """Provide a translated text."""
-
- def __str__(self):
- return "translate_and_brand('%s')" % self.string.encode('string-escape')
-
-qtproxies.i18n_string = _i18n_string
-
-# there's no main function, so just import the module
-import PyQt4.uic.pyuic
diff --git a/setup.py b/setup.py
index 3554212..c009d06 100644..100755
--- a/setup.py
+++ b/setup.py
@@ -1,17 +1,20 @@
-from distutils.core import setup
-import sys, os
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
-VERSION = '3.11.8'
+from distutils.core import setup, Command
+import os
+import subprocess
+import sys
+VERSION = '3.11.8'
LOCALE_DIR= '/usr/share/locale'
-locales = []
-if os.path.exists('po/locale'):
- for lang in os.listdir('po/locale'):
- locales.append(os.path.join(lang, 'LC_MESSAGES'))
-
if sys.platform == 'win32':
-
+ # FIXME: this is not tested since sooo long...
+ locales = []
+ if os.path.exists('po/locale'):
+ for lang in os.listdir('po/locale'):
+ locales.append(os.path.join(lang, 'LC_MESSAGES'))
# win32com.shell fix from http://www.py2exe.org/index.cgi/win32com.shell
# ModuleFinder can't handle runtime changes to __path__, but win32com uses them
try:
@@ -54,7 +57,7 @@ if sys.platform == 'win32':
windows = [
{
"script" : "liveusb-creator",
- "icon_resources" : [(0, "data/fedora.ico")],
+ # "icon_resources" : [(0, "data/fedora.ico")],
}
],
options={
@@ -82,6 +85,24 @@ if sys.platform == 'win32':
for locale in locales]
)
else:
+ from DistUtilsExtra.command import *
+
+ class build_gtkbuilderi18n(Command):
+ description = "generate the headers required to use gettext whit gtkbuilder"
+ def initialize_options(self):
+ pass
+ def finalize_options(self):
+ pass
+ def run(self):
+ subprocess.call (["intltool-extract",
+ "--type=gettext/glade",
+ "data/liveusb-creator.ui"])
+ subprocess.call (["intltool-extract",
+ "--type=gettext/glade",
+ "data/liveusb-creator-launcher.ui"])
+
+ build_extra.build_extra.sub_commands.insert(0, ("build_gtkbuilderi18n", None))
+
setup(
name = 'liveusb-creator',
version = VERSION,
@@ -96,9 +117,17 @@ else:
maintainer_email = 'lmacken@redhat.com',
data_files = [("/usr/share/applications",
[ "data/liveusb-creator-launcher.desktop" ]),
- ('/usr/share/pixmaps',["data/usb-creator-gtk.svg"]),
- ] + [(os.path.join(LOCALE_DIR, locale),
- [os.path.join('po', 'locale', locale, 'liveusb-creator.mo')])
- for locale in locales]
+ ("/usr/share/pixmaps",["data/usb-creator-gtk.svg"]),
+ ("/usr/share/liveusb-creator", ["data/liveusb-creator.ui",
+ "data/liveusb-creator-launcher.ui",
+ "data/tails-liveusb-header.png"])],
+ cmdclass = {
+ "build" : build_extra.build_extra,
+ "build_gtkbuilderi18n" : build_gtkbuilderi18n,
+ "build_i18n" : build_i18n.build_i18n,
+ "build_help" : build_help.build_help,
+ "build_icons" : build_icons.build_icons,
+ "clean": clean_i18n.clean_i18n,
+ }
)