commit 89a1244623411083963b0740602234c9dd9ea6c7 Author: Dietmar Maurer Date: Tue Aug 23 07:33:40 2011 +0200 imported from svn 'pve-installer/pve2' diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6d86e05 --- /dev/null +++ b/Makefile @@ -0,0 +1,74 @@ +# achtung: also set release in proxinstall! +RELEASE=2.0 + +DEB=pve-installer_2.0-2_all.deb + +INSTALLER_SOURCES= \ + unconfigured.sh \ + xorg.conf.fbdev \ + fake-start-stop-daemon \ + policy-disable-rc.d \ + interfaces \ + proxlogo.xpm \ + checktime \ + proxinstall + +HTML_SOURCES=$(wildcard html/*.htm) $(wildcard html/*.png) + +${DEB}: ${INSTALLER_SOURCES} ${HTML_SOURCES} Makefile html/Makefile + rm -rf debian + mkdir debian + make DESTDIR=`pwd`/debian install + mkdir debian/DEBIAN + install -m 0644 control debian/DEBIAN + install -m 0644 conffiles debian/DEBIAN + dpkg-deb --build debian ${DEB} + rm -rf debian + lintian -X man ${DEB} + +.phony: install +install: ${INSTALLER_SOURCES} ${HTML_SOURCES} + make DESTDIR=`pwd`/debian -C html install + install -D -m 644 interfaces ${DESTDIR}/etc/network/interfaces + mkdir -p ${DESTDIR}/var/lib/dhcp3/ + ln -s /tmp/dhclient.eth0.leases ${DESTDIR}/var/lib/dhcp3 + ln -s /tmp/resolv.conf.dhclient-new ${DESTDIR}/etc/resolv.conf + ln -s /tmp/resolv.conf.dhclient-new ${DESTDIR}/etc/resolv.conf.dhclient-new + install -D -m 755 fake-start-stop-daemon ${DESTDIR}/var/lib/pve-installer/fake-start-stop-daemon + install -D -m 755 policy-disable-rc.d ${DESTDIR}/var/lib/pve-installer/policy-disable-rc.d + install -D -m 644 proxlogo.xpm ${DESTDIR}/var/lib/pve-installer/proxlogo.xpm + install -D -m 755 unconfigured.sh ${DESTDIR}/sbin/unconfigured.sh + install -D -m 755 proxinstall ${DESTDIR}/usr/bin/proxinstall + install -D -m 755 checktime ${DESTDIR}/usr/bin/checktime + install -D -m 644 xinitrc ${DESTDIR}/.xinitrc + install -D -m 644 Xdefaults ${DESTDIR}/.Xdefaults + install -D -m 644 xorg.conf.fbdev ${DESTDIR}/etc/X11/xorg.conf + install -D -m 644 copyright ${DESTDIR}/usr/share/doc/pve-installer/copyright + install -D -m 644 changelog.Debian ${DESTDIR}/usr/share/doc/pve-installer/changelog.Debian + gzip --best ${DESTDIR}/usr/share/doc/pve-installer/changelog.Debian + +.phony: upload +upload: ${DEB} + umount /pve/${RELEASE}; mount -o rw /pve/${RELEASE} + mkdir -p /pve/${RELEASE}/extra + rm -rf /pve/${RELEASE}/extra/pve-installer_*.deb + rm -f /pve/${RELEASE}/extra/Packages* + cp ${DEB} /pve/${RELEASE}/extra + cd /pve/${RELEASE}/extra; dpkg-scanpackages . /dev/null > Packages; gzip -9c Packages > Packages.gz + umount /pve/${RELEASE}; mount -o ro /pve/${RELEASE} + +packages: /pve/${RELEASE}/install/pve.files + rm -rf packages packages.tmp; mkdir packages.tmp + for i in `cat $<`; do install -m 644 $$i packages.tmp/; done + mv packages.tmp packages + +test.img: + dd if=/dev/zero of=test.img bs=1024 count=800000 + +check: packages test.img + ./proxinstall -t test.img + +.phony: clean +clean: + make -C html clean + rm -rf *~ ${DEB} target debian packages packages.tmp test.img pve-final.pkglist diff --git a/Xdefaults b/Xdefaults new file mode 100644 index 0000000..a46c917 --- /dev/null +++ b/Xdefaults @@ -0,0 +1,5 @@ +Xft.antialias: 1 +Xft.dpi: 96.000000 +Xft.hinting: 1 +Xft.hintstyle: hintfull +Xft.rgba: 1 diff --git a/changelog.Debian b/changelog.Debian new file mode 100644 index 0000000..62c12aa --- /dev/null +++ b/changelog.Debian @@ -0,0 +1,107 @@ +pve-installer (2.0-2) unstable; urgency=low + + * support new kernel parameter 'ext4' switch (use ext4 instead of ext3) + + * use 'ext3' by default + + -- Proxmox Support Team Thu, 04 Aug 2011 12:58:27 +0200 + +pve-installer (2.0-1) unstable; urgency=low + + * use ext4 fs + + * align LVM on 128k boundary + + * use 'parted' to create partitions + + * support > 2TB disks (use GPT partition tables) + + * mount with barrier=0 during install (speedup) + + * write keyboard settings to /etc/pve-installer.cfg + + * adjust for pve2 + + * avoid to run update-grub or update-initramfs during install + + * use --no-triggers for faster unpack + + * also mount sysfs to /target/sys + + * do not write /etc/default/grub - not really needed + + * we now use openbox instead of metacity + + * wait one second after partitioning (give kernel time to reread part + table) + + * use update-initramfs -c (instead of -u) + + * do not write /etc/apache2/ports.conf (not really needed) + + * enable apache port redirect (a2ensite pve-redirect.conf) + + -- Proxmox Support Team Mon, 15 Feb 2010 14:09:46 +0100 + +pve-installer (1.0-9) unstable; urgency=low + + * fix netmask bug + + * use 'udevadm info' to detect disks + + -- Proxmox Support Team Fri, 22 Jan 2010 13:13:11 +0100 + +pve-installer (1.0-8) unstable; urgency=low + + * use UUID= for /boot in fstab + + -- Proxmox Support Team Fri, 22 Jan 2010 13:11:58 +0100 + +pve-installer (1.0-7) unstable; urgency=low + + * unconfigured.sh: use -q flag for modprobe + + * proxinstall: use 'removable' flag on older kernels (instead + of 'capability') to detect cdroms. + + -- Proxmox Support Team Fri, 04 Dec 2009 18:03:59 +0100 + +pve-installer (1.0-6) unstable; urgency=low + + * pass --no-floppy to grub-install (some users reported delays) + + -- Proxmox Support Team Fri, 19 Jun 2009 10:48:37 +0200 + +pve-installer (1.0-5) unstable; urgency=low + + * fixes for debian lenny + + * support dynamically allocated virtio blk devices + + -- Proxmox Support Team Fri, 08 May 2009 16:53:42 +0200 + +pve-installer (1.0-4) unstable; urgency=low + + * proxinstall: better postfix configuration + + -- Proxmox Support Team Mon, 12 Jan 2009 12:21:13 +0100 + +pve-installer (1.0-3) unstable; urgency=low + + * ause grub instead of lilo + + -- Proxmox Support Team Wed, 20 Aug 2008 14:39:57 +0200 + +pve-installer (1.0-2) stable; urgency=low + + * proxinstall (extract_data): added maxroot and swapsize boot parameters, + set bridge parameters (stp = on, fd = 0) + + -- Proxmox Support Team Tue, 8 Jul 2008 06:54:03 +0200 + +pve-installer (1.0-1) stable; urgency=low + + * initial release + + -- Proxmox Support Team Mon, 19 Nov 2007 15:48:05 +0100 + diff --git a/checktime b/checktime new file mode 100755 index 0000000..fc609c6 --- /dev/null +++ b/checktime @@ -0,0 +1,22 @@ +#!/usr/bin/perl -w + +use strict; +use File::stat; + +sub testtime { + + my $st = stat ("/usr/bin/checktime") || stat ("./checktime"); + + my $ctime = time(); + + if ($ctime < $st->atime) { + warn "detected wrong system time\n"; + my $tstr = localtime $st->atime; + # correct system time to avoid errors, i.e gpg fails + system ("date -s '$tstr'"); + } +} + +testtime(); + +exit (0); diff --git a/conffiles b/conffiles new file mode 100644 index 0000000..4a58d35 --- /dev/null +++ b/conffiles @@ -0,0 +1,2 @@ +/etc/X11/xorg.conf +/etc/network/interfaces diff --git a/control b/control new file mode 100644 index 0000000..cd5204f --- /dev/null +++ b/control @@ -0,0 +1,9 @@ +Package: pve-installer +Version: 2.0-2 +Section: utils +Priority: optional +Architecture: amd64 +Depends: +Maintainer: Proxmox Support Team +Description: The Proxmox Installer + This package contains Proxmox graphical installer diff --git a/copyright b/copyright new file mode 100644 index 0000000..a77ee61 --- /dev/null +++ b/copyright @@ -0,0 +1,212 @@ +Please note: this document may contain more than one Proxmox end user +license agreement and one or more third party end user license +agreements. By indicating your acceptance, you are agreeing to the +terms and conditions of all these agreements. + +Proxmox Software License Agreement + +Please read this agreement carefully. By installing or otherwise using +the software (including its components), you agree to the terms of +this agreement. If you do not agree with these terms, do not download, +install or use the software. The software may not be sold, +transferred, of further distributed without prior written +authorization from Proxmox. + +Rights and Licenses + +This Proxmox Software License Agreement ("Agreement") is a legal +agreement between you (an entity or a person) and Proxmox Server +Solutions GmbH ("Proxmox") with respect to the software product +identified in the title of this Agreement, media (if any) and +accompanying documentation (collectively the "Software"). + +The Software is a collective work of Proxmox. You must acquire a +license for each installation of the Software and for each additional +copy (or partial copy) of the Software stored or loaded in memory or +virtual memory beyond the initial copy necessary for execution of the +Software installed on the hardware. + +The Software is a modular operating system. Most of the components are +open source packages, developed independently, and accompanied by +separate license terms. Your license rights with respect to individual +components accompanied by separate license terms are defined by those +terms; nothing in this Agreement shall restrict, limit, or otherwise +affect any rights or obligations you may have, or conditions to which +you may be subject, under such license terms. + +While the license terms for a component may authorize you to +distribute the component, you may not use any Proxmox marks in +distributing the component, whether or not the component contains +Proxmox marks. + +Other license terms and restrictions + +The Software is protected by the copyright laws and treaties of +Austria and other countries and is subject to the terms of this +Agreement. The Software is licensed to you, not sold. + +The Software may be bundled with other software programs ("Bundled +Programs"). Your license rights with respect to Bundled Programs +accompanied by separate license terms are defined by those terms; +nothing in this Agreement shall restrict, limit, or otherwise affect +any rights or obligations you may have, or conditions to which you may +be subject, under such license terms. + +Proxmox reserves all rights not expressly granted to you. You may not: +(1) reverse engineer, decompile, or disassemble the Software except +and only to the extent it is expressly permitted by applicable law or +the license terms accompanying a component of the Software; or (2) +transfer the Software or your license rights under this Agreement, in +whole or in part. + +Maintenance and support + +Your rights with respect to updates, patches, or other materials +received under a subscription to a Proxmox maintenance program for the +Software are defined by the relevant maintenance program terms. + +Proxmox has no obligation under this Agreement to provide maintenance +or support for the Software. Depending on how you acquired the +Software, you may have also acquired a maintenance subscription for +the Software. For more information on Proxmox´s current maintenance +and support offerings, see http://www.proxmox.com. + +Ownership rights + +No title to or ownership of the Software is transferred to +you. Proxmox and/or its licensors owns and retains all title and +ownership of all intellectual property rights in the Software, +including any adaptations or copies. You acquire only a license to use +the Software. + +Warranty + +The Software is being delivered to you "as is" and Proxmox makes no +warranty as to its use or performance. Proxmox and its suppliers do +not and cannot warrant the performance or results you may obtain by +using the software. Except for any warranty, condition, representation +or term to the extent to which the same cannot or may not be excluded +or limited by law applicable to you in your jurisdiction, Proxmox and +its suppliers make no warranties conditions, representations, or terms +(express or implied whether by statute, common law, custom, usage or +otherwise) as to any matter including without limitation +non-infringement of third party rights, merchantability, integration, +satisfactory quality, or fitness for any particular purpose. + +The software is not designed, manufactured or intended for use or +distribution with on- line control equipment in hazardous environments +requiring fail-safe performance, such as in the operation of nuclear +facilities, aircraft navigation, communication, or control systems, or +other uses in which failure of the software could lead directly to +death, personal injury, or severe physical or environmental damage. + +The software is only compatible with certain computers and operating +systems. The software is not warranted for non-compatible +systems. Call Proxmox or your dealer for information about +compatibility. + +Non-Proxmox Products. The Software may include or be bundled with +hardware or other software programs licensed or sold by a licensor +other than Proxmox. Proxmox does not warrant non-Proxmox products. Any +such products are provided on an "as is" basis. Any warranty service +for Proxmox products is provided by the product licensor in accordance +with the applicable licensor warranty. + +Expect as otherwise restricted by law, Proxmox disclaims and excludes +any and all implied warranties including any warranties of +merchantability, title, non-infringement, or fitness for a particular +purpose. Proxmox makes no warranty, representation or promise not +expressly set forth in this limited warranty. Proxmox does not warrant +that the software will satisfy your requirements or that the operation +of the software will be uninterrupted. Some jurisdictions do not allow +certain disclaimers and limitations of warranties, so portions of the +above limitations may not apply to you. This limited warranty gives +you specific rights and you may also have other rights which vary from +state to state. + +Limitation of liability + +In no event will Proxmox or its suppliers be liable for any loss of +data, loss of income, loss of opportunity or profits, cost of recovery +or any other special, incidental, consequential or indirect damages +arising out of or in connection with this agreement, or the use of the +software, reference materials or accompanying documentation, however +caused and on any theory of liability. This limitation will apply even +if Proxmox, its suppliers or authorized distributors have been advised +of the possibility of such damage. In no event shall the liability of +Proxmox exceed the amount paid for the licensed software at issue. You +acknowledge that the license fee reflects this allocation of risk. +Some jurisdictions do not allow the limitation or exclusion of +liability for incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +General terms + +Term. This Agreement becomes effective on the date you legally acquire +the Software and will automatically terminate if you breach any of its +terms. Upon termination of this Agreement, you must destroy the +original and all copies of the Software or return them to Proxmox and +delete the Software from your systems. + +Benchmark Testing. This benchmark testing restriction applies to you +if you are a software vendor or if you are performing testing on the +Software at the direction of or on behalf of a software vendor. You +may not, without Proxmox's prior written consent not to be +unreasonably withheld, publish or disclose to any third party the +results of any benchmark test of the Software. If you are a vendor of +products that are functionally similar to or compete with the Software +("Similar Products"), or are acting on behalf of such a vendor, and +you publish or disclose benchmark information on the Software in +violation of this restriction, then notwithstanding anything to the +contrary in the Similar Product's end user license agreement, and in +addition to any other remedies Proxmox may have, Proxmox shall have +the right to perform benchmark testing on Similar Products and to +disclose and publish that benchmark information and you hereby +represent that you have authority to grant such right to Proxmox. + +Transfer. This Agreement may not be transferred or assigned without +the prior written approval of Proxmox. + +Law and Jurisdiction. This Agreement is governed by the laws of +Austria, Europe. Any action at law relating to this Agreement may only +be brought before the courts of competent jurisdiction of Austria. + +Entire Agreement. This Agreement and the Upgrade/Additive Agreement +(if applicable) sets forth the entire understanding and agreement +between you and Proxmox and may be amended only in a writing signed by +both parties. No licensor, distributor, dealer, retailer, reseller, +sales person, or employee is authorized to modify this agreement or to +make any representation or promise that is different from, or in +addition to, the terms of this agreement. + +Waiver. No waiver of any right under this Agreement will be effective +unless in writing, signed by a duly authorized representative of the +party to be bound. No waiver of any past or present right arising from +any breach or failure to perform will be deemed to be a waiver of any +future right arising under this Agreement. + +Severability. If any provision in this Agreement is invalid or +unenforceable, that provision will be construed, limited, modified or, +if necessary, severed, to the extent necessary, to eliminate its +invalidity or unenforceability, and the other provisions of this +Agreement will remain unaffected. + +Export Compliance. Any person or entity exporting or re-exporting +Proxmox products directly or indirectly and via any means, including +electronic transfer, is wholly responsible for doing so in accordance +with the Austrian Export Administration Regulations and the laws of +host countries. Proxmox assumes no responsibility or liability for +your failure to obtain any necessary export approvals. Approvals are +dependent upon an item's technical characteristics, the destination, +end-use and end-user, as well as other activities of the end user. +Specifically, no Proxmox product may be exported to embargoed or +otherwise restricted countries or end users. Please consult the Bureau +of Industry and Security web page and other sources before exporting +Proxmox products and familiarize yourself with the laws of destination +countries before re-exporting Proxmox products. This provision shall +survive the expiration or earlier termination of this Agreement. + +Other. The application of the United Nations Convention of Contracts +for the International Sale of Goods is expressly excluded. + +(c) 2011 Proxmox Server Solutions GmbH, All Rights Reserved. diff --git a/fake-start-stop-daemon b/fake-start-stop-daemon new file mode 100755 index 0000000..9bed70e --- /dev/null +++ b/fake-start-stop-daemon @@ -0,0 +1,5 @@ +#!/bin/sh + +#do nothing + +echo "fake start-stop-daemon called" diff --git a/html/Makefile b/html/Makefile new file mode 100644 index 0000000..824c7ab --- /dev/null +++ b/html/Makefile @@ -0,0 +1,27 @@ + +all: + +.phony: install +install: + install -D -m 644 page1.htm ${DESTDIR}/var/lib/pve-installer/html/page1.htm + install -D -m 644 country.htm ${DESTDIR}/var/lib/pve-installer/html/country.htm + install -D -m 644 passwd.htm ${DESTDIR}/var/lib/pve-installer/html/passwd.htm + install -D -m 644 license.htm ${DESTDIR}/var/lib/pve-installer/html/license.htm + install -D -m 644 extract1-license.htm ${DESTDIR}/var/lib/pve-installer/html/extract1-license.htm + install -D -m 644 extract2-rulesystem.htm ${DESTDIR}/var/lib/pve-installer/html/extract2-rulesystem.htm + install -D -m 644 extract3-spam.htm ${DESTDIR}/var/lib/pve-installer/html/extract3-spam.htm + install -D -m 644 extract4-virus.htm ${DESTDIR}/var/lib/pve-installer/html/extract4-virus.htm + install -D -m 644 fail.htm ${DESTDIR}/var/lib/pve-installer/html/fail.htm + install -D -m 644 ipconf.htm ${DESTDIR}/var/lib/pve-installer/html/ipconf.htm + install -D -m 644 nohds.htm ${DESTDIR}/var/lib/pve-installer/html/nohds.htm + install -D -m 644 success.htm ${DESTDIR}/var/lib/pve-installer/html/success.htm + install -D -m 644 plus.png ${DESTDIR}/var/lib/pve-installer/html/plus.png + install -D -m 644 installer_logo_installation.png ${DESTDIR}/var/lib/pve-installer/html/installer_logo_installation.png + install -D -m 644 installer_logo_rulesystem.png ${DESTDIR}/var/lib/pve-installer/html/installer_logo_rulesystem.png + install -D -m 644 installer_logo_spamfilter.png ${DESTDIR}/var/lib/pve-installer/html/installer_logo_spamfilter.png + install -D -m 644 installer_logo_license.png ${DESTDIR}/var/lib/pve-installer/html/installer_logo_license.png + + +.phony: clean +clean: + rm -rf *~ diff --git a/html/country.htm b/html/country.htm new file mode 100644 index 0000000..8ab52c0 --- /dev/null +++ b/html/country.htm @@ -0,0 +1,63 @@ + + + +
+
+ + + + + + + + + + +
+ + + + +
+
 
+ Location and Time Zone selection +

+ + +
The Proxmox Installer + automatically makes location based optimizations, like + choosing the nearest mirror to download files. Also make sure + to select the right time zone and keyboard layout. +

+ Press the Next button to continue installation. +
+
+


+ + + + + + + + + + + + + +
Country: + The selected country is used to choose nearby mirror + servers. This will speedup downloads and make updates more + reliable. +

+
Time Zone: + Automatically adjust daylight saving time. +

+
Keyboard + Layout: Choose your keyboard layout. +

+
+

+
+ \ No newline at end of file diff --git a/html/extract1-license.htm b/html/extract1-license.htm new file mode 100755 index 0000000..9b1cf5f --- /dev/null +++ b/html/extract1-license.htm @@ -0,0 +1,61 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Virtualization Platform

+ + +
+ Open Source Virtualization Platform

+ - Enterprise ready
+ - Central Management
+ - Clustering
+ - Online Backup solution
+ - Live Migration
+ - 32 and 64 bit guests

+ + Visit www.proxmox.com + for additional information and the Wiki about Proxmox VE. +

+
+
+


+ + + + + + + + + +
+ Container Virtualization
+ Only 1-3% performance loss using OS virtualization as compared to using a standalone server.

+
+ Full Virtualization (KVM)
+ Run unmodified virtual servers - Linux or Windows.
+
+

+
+
+ \ No newline at end of file diff --git a/html/extract2-rulesystem.htm b/html/extract2-rulesystem.htm new file mode 100755 index 0000000..cacc4bb --- /dev/null +++ b/html/extract2-rulesystem.htm @@ -0,0 +1,62 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Virtualize your IT Infrastructure +

+ + +
+ Proxmox VE is ready for enterprise deployments.

The role based permission management combined with the integration of multiple external authenication sources is the base for a secure and stable environment.

+ Visit www.proxmox.com for more information about commercial support subscriptions.

+
+


+ + + + + + + + + + + + + + + + +
+ Commitment to Free Software
+ The source code is released under the GNU Affero General Public License. +
+ RESTful web API
+ Ressource Oriented Architecture (ROA) and declarative API definition using JSON Schema enables easy integration for third party management tools. +
+ Virtual Appliances
+ Pre-installed applications - up and running within a few seconds.
+
+

+
+
+ \ No newline at end of file diff --git a/html/extract3-spam.htm b/html/extract3-spam.htm new file mode 100755 index 0000000..5fb60e8 --- /dev/null +++ b/html/extract3-spam.htm @@ -0,0 +1,68 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Web Based Administration +

+ + +
+ Proxmox VE closes the gap between high performance Linux virtualization and the missing parts - easy deployment and management.

+ Proxmox VE is the number one choice for Linux based virtualization platforms.
+
+


+ + + + + + + + + + + + + + + + + + + +
+ JavaScript based GUI
+ Fast search-driven interface, capable of handling several hundreds VMs.
+
+ Web Based Console
+ SSL secured browser-integrated console view to all Virtual Servers and hosts.
+
+ Online Backup
+ Backup (and restore) your running Virtual Servers with LVM2 snapshots.
+
+ Live Migration
+ Move your running servers from one physical host to another without downtime. +
+

+
+
+ diff --git a/html/extract4-virus.htm b/html/extract4-virus.htm new file mode 100755 index 0000000..eb31e48 --- /dev/null +++ b/html/extract4-virus.htm @@ -0,0 +1,52 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Proxmox VE Cluster +

+ + +
+ With Proxmox VE you can join multiple physical server to one VE Cluster.

+ This flexible multi-master cluster eliminates a single point of failure.
+
+


+ + + + + + + + + + +
+ Central management
+ Create and manage new Virtual Servers by simply selecting the node where it should run.

+
+ Proxmox Cluster file system (pmcfs)
+ Database-driven file system for storing configuration files, replicated in realtime on all nodes using corosync.

+
+

+
+ \ No newline at end of file diff --git a/html/fail.htm b/html/fail.htm new file mode 100644 index 0000000..90f4181 --- /dev/null +++ b/html/fail.htm @@ -0,0 +1,39 @@ + + + +
+
+ + + + + + + +
+ + + + +
+
 

+

+ Installation failed! +


+ + The Proxmox VE could not be installed. +


+ + + + + + +
 Press ALT + F2 to see details

+


+
+

+
 
+
+ + \ No newline at end of file diff --git a/html/installer_logo_installation.png b/html/installer_logo_installation.png new file mode 100755 index 0000000..c9d8738 Binary files /dev/null and b/html/installer_logo_installation.png differ diff --git a/html/installer_logo_license.png b/html/installer_logo_license.png new file mode 100644 index 0000000..821cbf8 Binary files /dev/null and b/html/installer_logo_license.png differ diff --git a/html/installer_logo_rulesystem.png b/html/installer_logo_rulesystem.png new file mode 100755 index 0000000..24bf32c Binary files /dev/null and b/html/installer_logo_rulesystem.png differ diff --git a/html/installer_logo_spamfilter.png b/html/installer_logo_spamfilter.png new file mode 100755 index 0000000..27908fd Binary files /dev/null and b/html/installer_logo_spamfilter.png differ diff --git a/html/ipconf.htm b/html/ipconf.htm new file mode 100644 index 0000000..961dcd3 --- /dev/null +++ b/html/ipconf.htm @@ -0,0 +1,70 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Network Configuration +

+ + +
Please verify + the displayed network configuration. You will need a valid network + configuration to access the configuration interface after installation. +

+ Afterwards press the Next button to continue installation. The + installer will then partition your hard disk and start copying packages. +
+
+


+ + + + + + + + + + + + + + + + + +
IP address: + Set the IP address for the Proxmox Virtual Environment. +

+
Netmask: + Set the netmask of your network. +

+
Gateway: + IP address of your gateway or firewall. +

+
DNS Server: + IP address of your DNS server. +

+
+

+
+
+ \ No newline at end of file diff --git a/html/license.htm b/html/license.htm new file mode 100755 index 0000000..e997090 --- /dev/null +++ b/html/license.htm @@ -0,0 +1,312 @@ + + + +
+
+ + + + + + + +
+

+ Proxmox License Agreement +


+ +
 
+ +
+ \ No newline at end of file diff --git a/html/nohds.htm b/html/nohds.htm new file mode 100644 index 0000000..365aab8 --- /dev/null +++ b/html/nohds.htm @@ -0,0 +1,39 @@ + + + +
+
+ + + + + + + +
+ + + + +
+
 

+

+ No Hard Disk found! +


+ + The installer could not find a supported hard disk. Please visit www.proxmox.com for more information. +


+ + + + + + +
 Press ALT + F2 to see details

+


+
+

+
 
+
+ + diff --git a/html/page1.htm b/html/page1.htm new file mode 100644 index 0000000..804899e --- /dev/null +++ b/html/page1.htm @@ -0,0 +1,65 @@ + + + +
+
+ + + + + + + + + + + +
+ + + + +
+
 
+ Proxmox Virtualization Environment (PVE) +

+ + +
The Proxmox Installer + automatically partitions your hard disk. It installs all required + packages and finally makes the system bootable from hard disk. + All existing partitions and data will be lost. +

+ Press the Next button to continue installation. +
+
+


+ + + + + + + + + + + + + +
Please verify the installation target
+ The displayed hard disk is used for installation. +
Warning: All existing partitions and data will be lost. +


+
Automatic hardware detection
+ The installer automatically configures your hardware. +


+
Graphical user interface
+ Final configuration will be done on the graphical user + interface via a web browser. +


+
+

+
+
+ \ No newline at end of file diff --git a/html/passwd.htm b/html/passwd.htm new file mode 100644 index 0000000..427ae8e --- /dev/null +++ b/html/passwd.htm @@ -0,0 +1,57 @@ + + + +
+
+ + + + + + + + + + +
+ + + + +
+
 
+ Administration Password and E-Mail Address +

+ + +
Proxmox Virtual Environment is a + full featured GNU/Linux system based on Debian. Therefore you + should use a strong password with at least 5 characters. +

+ All administrative emails are sent to the specified address. +

+ Press the Next button to continue installation. +
+
+


+ + + + + + + + + +
Password: + Please use strong passwords. Your password should be 8 or + more characters in length. Also combine letters, numbers, + and symbols. +

+
E-Mail: + Administrator email address. +

+
+

+
+ \ No newline at end of file diff --git a/html/plus.png b/html/plus.png new file mode 100755 index 0000000..cb5c0bd Binary files /dev/null and b/html/plus.png differ diff --git a/html/success.htm b/html/success.htm new file mode 100644 index 0000000..3c93bad --- /dev/null +++ b/html/success.htm @@ -0,0 +1,39 @@ + + + +
+
+ + + + + + + +
+ + + + +
+
 

+

+ Installation successful! +


+ + The Proxmox Virtual Environment is now installed and ready to use. +


+ + + + + + +
 Next steps

Reboot and point your web browser to the selected IP address. +


+
+

+
 
+
+ + \ No newline at end of file diff --git a/interfaces b/interfaces new file mode 100644 index 0000000..ddae99c --- /dev/null +++ b/interfaces @@ -0,0 +1,6 @@ +auto lo +iface lo inet loopback + +auto eth0 +iface eth0 inet dhcp + diff --git a/policy-disable-rc.d b/policy-disable-rc.d new file mode 100755 index 0000000..273e4c6 --- /dev/null +++ b/policy-disable-rc.d @@ -0,0 +1,7 @@ +#!/bin/sh + +# see /usr/share/doc/sysv-rc/README.policy-rc.d.gz + +# disable service activation + +exit 101 \ No newline at end of file diff --git a/proxinstall b/proxinstall new file mode 100755 index 0000000..fddd796 --- /dev/null +++ b/proxinstall @@ -0,0 +1,1729 @@ +#!/usr/bin/perl -w + +use strict; +use Getopt::Long; +use IPC::Open3; +use IO::File; +use IO::Dir; +use IO::Select; +use Cwd 'abs_path'; +use Gtk2 '-init'; +use Gtk2::Html2; +use Gtk2::Gdk::Keysyms; +use Encode; + +my $release = '2.0'; + +my $kapi = `uname -r`; +chomp $kapi; + +my $opt_testmode; + +if (!GetOptions ('testmode=s' => \$opt_testmode)) { + die "usage error\n"; + exit (-1); +} + +my $logfd = IO::File->new (">/tmp/install.log"); + +my $proxmox_dir = $opt_testmode ? "." : "/var/lib/pve-installer"; + +$ENV{DEBIAN_FRONTEND} = 'noninteractive'; +$ENV{LC_ALL} = 'C'; + +my ($window, $cmdbox, $inbox, $document, $htmlview); +my ($next, $next_fctn, $target_hd, $master_hd); +my ($progress, $progress_status); +my ($ipaddress, $ip_1, $ip_2, $ip_3, $ip_4); +my ($netmask, $mask_1, $mask_2, $mask_3, $mask_4); +my ($gateway, $gw_1, $gw_2, $gw_3, $gw_4); +my ($dnsserver, $dns_1, $dns_2, $dns_3, $dns_4); +my $hostname = 'proxmox'; +my $domain = 'domain.tld'; +my $cmdline = `cat /proc/cmdline` || ''; +my $ipconf; +my $country; +my $timezone = 'Europe/Vienna'; +my $password; +my $mailto; +my $keymap = 'en-us'; +my $cmap; + +my $filesys = ($cmdline =~ m/\sext4(\s.*)$/) ? 'ext4' : 'ext3'; + +my $postfix_main_cf = <<_EOD; +# See /usr/share/postfix/main.cf.dist for a commented, more complete version + +myhostname=__FQDN__ + +smtpd_banner = \$myhostname ESMTP \$mail_name (Debian/GNU) +biff = no + +# appending .domain is the MUA's job. +append_dot_mydomain = no + +# Uncomment the next line to generate "delayed mail" warnings +#delay_warning_time = 4h + +alias_maps = hash:/etc/aliases +alias_database = hash:/etc/aliases +mydestination = \$myhostname, localhost.\$mydomain, localhost +relayhost = +mynetworks = 127.0.0.0/8 +inet_interfaces = loopback-only +recipient_delimiter = + + +_EOD + +sub syscmd { + my ($cmd) = @_; + + return run_command ($cmd, undef, undef, 1); +} + +sub run_command { + my ($cmd, $func, $input, $noout) = @_; + + my $cmdtxt; + if ($input && ($cmd !~ m/chpasswd/)) { + $cmdtxt = "# $cmd <flush(); + print $logfd $cmdtxt; + + my $reader = IO::File->new(); + my $writer = IO::File->new(); + my $error = IO::File->new(); + + my $orig_pid = $$; + + my $pid; + eval { + $pid = open3 ($writer, $reader, $error, $cmd) || die $!; + }; + + my $err = $@; + + # catch exec errors + if ($orig_pid != $$) { + POSIX::_exit (1); + kill ('KILL', $$); + } + + die $err if $err; + + print $writer $input if defined $input; + close $writer; + + my $select = new IO::Select; + $select->add ($reader); + $select->add ($error); + + my ($ostream, $logout) = ('', '', ''); + + while ($select->count) { + my @handles = $select->can_read (0.2); + + Gtk2->main_iteration while Gtk2->events_pending; + + next if !scalar (@handles); # timeout + + foreach my $h (@handles) { + my $buf = ''; + my $count = sysread ($h, $buf, 4096); + if (!defined ($count)) { + my $err = $!; + kill (9, $pid); + waitpid ($pid, 0); + die "command '$cmd' failed: $err"; + } + $select->remove ($h) if !$count; + if ($h eq $reader) { + $ostream .= $buf if !($noout || $func); + $logout .= $buf; + while ($logout =~ s/^([^\010\r\n]*)(\r|\n|(\010)+|\r\n)//s) { + my $line = $1; + &$func($line) if $func; + } + + } elsif ($h eq $error) { + $ostream .= $buf if !($noout || $func); + } + print $buf; + STDOUT->flush(); + print $logfd $buf; + } + } + + &$func($logout) if $func; + + my $rv = waitpid ($pid, 0); + + return $? if $noout; # behave like standard system(); + + my $ec = ($? >> 8); + + if ($ec) { + die "command '$cmd' failed with exit code $ec"; + } + + return $ostream; +} + +sub detect_country { + + print "trying to detect country...\n"; + open (TMP, "traceroute -N 1 -q 1 -n www.debian.org|"); + + my $country; + + my $previous_alarm = alarm (10); + eval { + local $SIG{ALRM} = sub { die "timed out!\n" }; + my $line; + while (defined ($line = )) { + print $logfd "DC TRACEROUTE: $line"; + if ($line =~ m/\s*\d+\s+(\d+\.\d+\.\d+\.\d+)\s/) { + my $geoip = `geoiplookup $1`; + print $logfd "DC GEOIP: $geoip"; + if ($geoip =~ m/GeoIP Country Edition:\s*([A-Z]+),/) { + $country = lc ($1); + last; + } + } + } + }; + + my $err = $@; + + alarm ($previous_alarm); + + close (TMP); + + if ($err) { + print "unable to detect country - $err\n"; + } elsif ($country) { + print "detected country: " . uc($country) . "\n"; + } else { + print "unable to detect country\n"; + } + + return $country; +} + +sub get_memtotal { + + open (MEMINFO, "/proc/meminfo"); + + my $res = 512; # default to 512 if something goes wrong + while (my $line = ) { + if ($line =~ m/^MemTotal:\s+(\d+)\s*kB/i) { + $res = int ($1 / 1024); + } + } + + close (MEMINFO); + + return $res; +} + +my $total_memory = get_memtotal(); + +sub link_points_to { + my ($src, $dest) = @_; + + my ($dev1,$ino1) = stat ($src); + my ($dev2,$ino2) = stat ($dest); + + return 0 if !($dev1 && $dev2 && $ino1 && $ino2); + + return $ino1 == $ino2 && $dev1 == $dev2; +} + +sub find_stable_path { + my ($stabledir, $bdev) = @_; + + my $dh = IO::Dir->new ($stabledir); + if ($dh) { + while (defined(my $tmp = $dh->read)) { + my $path = "$stabledir/$tmp"; + if (link_points_to ($path, $bdev)) { + return wantarray ? ($path, $tmp) : $path; + } + } + + $dh->close; + } + + return wantarray ? () : undef; +} + +sub find_dev_by_uuid { + my $bdev = shift; + + my ($full_path, $name) = find_stable_path ("/dev/disk/by-uuid", $bdev); + + return $name; +} + +sub hd_list { + + my $res = (); + + if ($opt_testmode) { + push @$res, [-1, $opt_testmode, int((-s $opt_testmode)/512), "TESTDISK"]; + } + + my $count = 0; + + foreach my $bd () { + next if $bd =~ m|^/sys/block/ram\d+$|; + next if $bd =~ m|^/sys/block/loop\d+$|; + next if $bd =~ m|^/sys/block/md\d+$|; + next if $bd =~ m|^/sys/block/dm-.*$|; + next if $bd =~ m|^/sys/block/fd\d+$|; + next if $bd =~ m|^/sys/block/sr\d+$|; + + my $dev = `cat '$bd/dev'`; + chomp $dev; + + next if !$dev; + + my $info = `udevadm info --path $bd --query all`; + next if !$info; + + next if $info !~ m/^E: DEVTYPE=disk$/m; + + next if $info =~ m/^E: ID_CDROM/m; + + my ($name) = $info =~ m/^N: (\S+)$/m; + + if ($name) { + my $real_name = "/dev/$name"; + + my $size = `cat '$bd/size'`; + chomp $size; + $size = undef if !($size && $size =~ m/^\d+$/); + + my $model = `cat '$bd/device/model'`; + $model =~ s/^\s+//; + $model =~ s/\s+$//; + if (length ($model) > 30) { + $model = substr ($model, 0, 30); + } + push @$res, [$count++, $real_name, $size, $model] if $size; + } else { + print STDERR "ERROR: unable to map device $dev ($bd)\n"; + } + } + + return $res; +} + +sub read_cmap { + my $countryfn = $opt_testmode ? "/usr/share/pve-manager/country.dat" : + "/proxmox/country.dat"; + open (TMP, "<$countryfn") || die "unable to open '$countryfn' - $!\n"; + my $line; + my $country = {}; + my $countryhash = {}; + my $kmap = {}; + my $kmaphash = {}; + while (defined ($line = )) { + if ($line =~ m|^map:([^\s:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]*):$|) { + $kmap->{$1} = { + name => $2, + kvm => $3, + console => $4, + x11 => $5, + x11var => $6, + }; + $kmaphash->{$2} = $1; + } elsif ($line =~ m|^([a-z]{2}):([^:]+):([^:]*):([^:]*):$|) { + $country->{$1} = { + name => $2, + kmap => $3, + mirror => $4, + }; + $countryhash->{lc($2)} = $1; + } else { + warn "unable to parse 'country.dat' line: $line"; + } + } + close (TMP); + + my $zones = {}; + my $cczones = {}; + my $zonefn = "/usr/share/zoneinfo/zone.tab"; + open (TMP, "<$zonefn") || die "unable to open '$zonefn' - $!\n"; + while (defined ($line = )) { + next if $line =~ m/^\#/; + next if $line =~ m/^\s*$/; + if ($line =~ m|^([A-Z][A-Z])\s+\S+\s+(([^/]+)/\S+)\s|) { + my $cc = lc($1); + $cczones->{$cc}->{$2} = 1; + $country->{$cc}->{zone} = $2 if !defined ($country->{$cc}->{zone}); + $zones->{$2} = 1; + + } + } + close (TMP); + + return { + zones => $zones, + cczones => $cczones, + country => $country, + countryhash => $countryhash, + kmap => $kmap, + kmaphash => $kmaphash, + } +} + +# search for Harddisks +my $hds = hd_list (); + +sub hd_size { + my ($dev) = @_; + + foreach my $hd (@$hds) { + my ($disk, $devname, $size, $model) = @$hd; + return int($size/2) if $devname eq $dev; + } + + die "no such device '$dev'"; +} + +# find the master boot disk - return the first found scsi/ide disk +sub find_master { + my ($target_hd) = @_; + + foreach my $hd (sort { ${$a}[1] cmp ${$b}[1] } @$hds) { + my ($disk, $devname) = @$hd; + next if $disk < 0; + + if ($target_hd =~ m|^/dev/sd|) { + return $devname if $devname =~ m|^/dev/sd|; + } elsif ($target_hd =~ m|^/dev/hd|) { + return $devname if $devname =~ m|^/dev/hd|; + } elsif ($target_hd =~ m|^/dev/i2o/|) { + return $devname if $devname =~ m|^/dev/i2o/|; + } elsif ($target_hd =~ m|^/dev/ataraid/|) { + return $devname if $devname =~ m|^/dev/ataraid/|; + } elsif ($target_hd =~ m|^/dev/ida/|) { + return $devname if $devname =~ m|^/dev/ida/|; + } elsif ($target_hd =~ m|^/dev/cciss/|) { + return $devname if $devname =~ m|^/dev/cciss/|; + } elsif ($target_hd =~ m|^/dev/rd/|) { + return $devname if $devname =~ m|^/dev/rd/|; + } + } + + return $target_hd; +} + +sub get_partition_dev { + my ($target_hd, $partnum) = @_; + + if ($target_hd =~ m|^/dev/[hxsev]d[a-z]$|) { + return "${target_hd}$partnum"; + } elsif ($target_hd =~ m|^/dev/[^/]+/c\d+d\d+$|) { + return "${target_hd}p$partnum"; + } elsif ($target_hd =~ m|^/dev/[^/]+/d\d+$|) { + return "${target_hd}p$partnum"; + } elsif ($target_hd =~ m|^/dev/[^/]+/hd[a-z]$|) { + return "${target_hd}$partnum"; + } else { + die "unable to get device for partition $partnum on device $target_hd\n"; + } + +} + +sub get_boot_part { + my ($target_hd, $gpt) = @_; + + return get_partition_dev ($target_hd, $gpt ? 2 : 1); +} + +sub get_lvm_part { + my ($target_hd, $gpt) = @_; + + return get_partition_dev ($target_hd, $gpt ? 3 : 2); +} + +sub write_config { + my ($text, $filename) = @_; + + my $fd = IO::File->new (">$filename") || + die "unable to open file '$filename' - $!"; + print $fd $text; + $fd->close(); +} + +sub update_progress { + my ($frac, $start, $end, $text) = @_; + + my $part = $end - $start; + my $res = $start + $frac*$part; + + $progress->set_fraction ($res); + $progress->set_text (sprintf ("%d%%", int ($res*100))); + $progress_status->set_text ($text) if defined ($text); + + Gtk2->main_iteration while Gtk2->events_pending; +} + +sub create_filesystem { + my ($dev, $name, $type, $start, $end, $fs, $fe, $opts) = @_; + + $opts = '' if !$opts; + + my $range = $end - $start; + my $rs = $start + $range*$fs; + my $re = $start + $range*$fe; + my $max = 0; + + update_progress (0, $rs, $re, "creating $name filesystem"); + + run_command ("mkfs.$type $opts -F $dev", sub { + my $line = shift; + + if ($line =~ m/Writing inode tables:\s+(\d+)\/(\d+)/) { + $max = $2; + } elsif ($max && $line =~ m/(\d+)\/$max/) { + update_progress (($1/$max)*0.9, $rs, $re); + } elsif ($line =~ m/Creating journal.*done/) { + update_progress (0.95, $rs, $re); + } elsif ($line =~ m/Writing superblocks and filesystem.*done/) { + update_progress (1, $rs, $re); + } + }); +} + +sub debconfig_set { + my ($targetdir, $dcdata) = @_; + + my $cfgfile = "/tmp/debconf.txt"; + write_config ($dcdata, "$targetdir/$cfgfile"); + syscmd ("chroot $targetdir debconf-set-selections $cfgfile"); + unlink "$targetdir/$cfgfile"; +} + +sub diversion_add { + my ($targetdir, $cmd, $new_cmd) = @_; + + syscmd ("chroot $targetdir dpkg-divert --package proxmox " . + "--add --rename $cmd") == 0 || + die "unable to exec dpkg-divert\n"; + + syscmd ("ln -sf ${new_cmd} $targetdir/$cmd") == 0 || + die "unable to link diversion to ${new_cmd}\n"; +} + +sub diversion_remove { + my ($targetdir, $cmd) = @_; + + syscmd ("mv $targetdir/${cmd}.distrib $targetdir/${cmd};") == 0 || + die "unable to remove $cmd diversion\n"; + + syscmd ("chroot $targetdir dpkg-divert --remove $cmd") == 0 || + die "unable to remove $cmd diversion\n"; +} + +sub extract_data { + my ($tgzfile, $targetdir) = @_; + + die "target '$targetdir' does not exist\n" if ! -d $targetdir; + + my $rootdev; + my $bootdev; + my $datadev; + my $swapfile; + + my $ptype = 'msdos'; + + eval { + + my $maxper = 0.25; + + update_progress (0, 0, $maxper, "create partitions"); + + if ( -b $target_hd) { + syscmd ("dd if=/dev/zero of=${target_hd} bs=512 count=256"); + my $hdsize = hd_size ($target_hd); # size in blocks (1024 bytes) + + if ($hdsize >= 2*1024*1024*1024) { # MBR can only handle 2 TB + $ptype = 'gpt'; + } + + my $bootsize_mb = 512; + my $bootsize = $bootsize_mb * 1024; + my $hdsize_mb = $hdsize/1024; + + my $pcmd = "parted --align optimal ${target_hd}"; + $pcmd .= " unit MiB"; + $pcmd .= " mklabel $ptype"; + + my $pnum = 1; + + if ($ptype eq 'gpt') { + $pcmd .= " mkpart primary 1 2"; + $pcmd .= " set $pnum bios_grub on"; + $pnum++; + }; + + $pcmd .= " mkpart primary ext2 $pnum ${bootsize_mb}"; + $pcmd .= " set $pnum boot on"; + $pnum++; + + + $pcmd .= " mkpart primary ext2 ${bootsize_mb} ${hdsize_mb}"; + $pcmd .= " set $pnum lvm on"; + + syscmd($pcmd) == 0 || + die "unable to partition harddisk '${target_hd}'\n"; + + sleep(1); # give kernel time to reread part table + + my $lvmdev = get_lvm_part($target_hd, $ptype eq 'gpt'); + + $rootdev = '/dev/pve/root'; + $datadev = '/dev/pve/data'; + $swapfile = '/dev/pve/swap'; + + # we use --metadatasize 250k, which reseults in "pe_start = 512" + # so pe_start is aligned on a 128k boundary (advantage for SSDs) + syscmd ("/sbin/pvcreate --metadatasize 250k -y -ff $lvmdev") == 0 || + die "unable to initialize physical volume $lvmdev"; + syscmd ("/sbin/vgcreate pve $lvmdev") == 0 || + die "unable to create volume group"; + + my $hdgb = int($hdsize/(1024*1024)); + die "hardisk too small (${hdgb}GB)" if $hdgb < 4; + + my $swapsize; + if ($cmdline =~ m/swapsize=(\d+)[\s\n]/i) { + $swapsize=$1*1024*1024; + } else { + my $ss = int ($total_memory / 1024); + $ss = 4 if $ss < 4; + $ss = ($hdgb/8) if $ss > ($hdgb/8); + $swapsize = $ss*1024*1024; + } + + my $space = (($hdgb > 32) ? 4 : ($hdgb/8))*1024*1024; + + my $maxroot; + if ($cmdline =~ m/maxroot=(\d+)[\s\n]/i) { + $maxroot = $1; + } else { + $maxroot = 96; + } + + my $rootsize = (($hdgb > ($maxroot*4)) ? $maxroot : $hdgb/4)*1024*1024; + my $rest = int($hdsize) - $bootsize - $swapsize - $space - $rootsize; # in KB + syscmd ("/sbin/lvcreate -L${swapsize}K -nswap pve") == 0 || + die "unable to create swap volume"; + + syscmd ("/sbin/lvcreate -L${rootsize}K -nroot pve") == 0 || + die "unable to create root volume"; + + syscmd ("/sbin/lvcreate -L${rest}K -ndata pve") == 0 || + die "unable to create data volume"; + + syscmd ("/sbin/vgchange -a y pve") == 0 || + die "unable to activate volume group"; + + } else { + $rootdev = $target_hd; + syscmd ("umount $rootdev"); + } + + update_progress (0.03, 0, $maxper, "create swap space"); + if ($swapfile) { + syscmd ("mkswap $swapfile") == 0 || + die "unable to create swap space\n"; + } + + update_progress (0.05, 0, $maxper, "creating filesystems"); + + if ( -b $target_hd) { + $bootdev = get_boot_part ($target_hd, $ptype eq 'gpt'); + create_filesystem ($bootdev, 'boot', $filesys, 0.05, $maxper, 0, 0.1); + create_filesystem ($rootdev, 'root', $filesys, 0.05, $maxper, 0.1, 0.5); + create_filesystem ($datadev, 'data', $filesys, 0.05, $maxper, 0.5, 1, '-m 0'); + } else { + create_filesystem ($rootdev, 'root', $filesys, 0.05, $maxper, 0, 1); + } + + update_progress (1, 0.05, $maxper, "mounting target $rootdev"); + + if ( -b $target_hd) { + + # trigger udev to create /dev/disk/by-uuid + syscmd ("udevadm trigger --subsystem-match block"); + syscmd ("udevadm settle --timeout 10"); + + syscmd ("mount -n $rootdev -o noatime,barrier=0 $targetdir") == 0 || + die "unable to mount $rootdev\n"; + + mkdir "$targetdir/boot"; + syscmd ("mount -n $bootdev -o noatime,barrier=0 $targetdir/boot") == 0 || + die "unable to mount $bootdev\n"; + + mkdir "$targetdir/var"; + mkdir "$targetdir/var/lib"; + mkdir "$targetdir/var/lib/vz"; + syscmd ("mount -n $datadev $targetdir/var/lib/vz") == 0 || + die "unable to mount $datadev\n"; + + } else { + syscmd ("mount $rootdev $targetdir -o loop,noatime,barrier=0") == 0 || + die "unable to mount $rootdev\n"; + } + + display_html ("extract2-rulesystem.htm"); + update_progress (1, 0.05, $maxper, "extracting base system"); + + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size) = stat ($tgzfile); + $ino || die "unable to open file '$tgzfile' - $!\n"; + + my $files; + if ($opt_testmode) { + $files = `cat /pve/$release/install/pve-base.cnt`; + } else { + $files = `cat /proxmox/pve-base.cnt`; + } + + my $per = 0; + my $count = 0; + + run_command ("tar xvf $tgzfile -C $targetdir", sub { + my $line = shift; + $count++; + my $nper = int (($count *100)/$files); + if ($nper != $per) { + $per = $nper; + my $frac = $per > 100 ? 100 : $per/100; + update_progress ($frac, $maxper, 0.5); + } + }); + + syscmd ("mount -n -t tmpfs tmpfs $targetdir/tmp") == 0 || + die "unable to mount tmpfs on $targetdir/tmp\n"; + syscmd ("mount -n -t proc proc $targetdir/proc") == 0 || + die "unable to mount proc on $targetdir/proc\n"; + syscmd ("mount -n -t sysfs sysfs $targetdir/sys") == 0 || + die "unable to mount sysfs on $targetdir/sys\n"; + + display_html ("extract3-spam.htm"); + update_progress (1, $maxper, 0.5, "configuring base system"); + + # configure hosts + + my $hosts = + "127.0.0.1 localhost.localdomain localhost\n" . + "$ipaddress $hostname.$domain $hostname pvelocalhost\n\n" . + "# The following lines are desirable for IPv6 capable hosts\n\n" . + "::1 ip6-localhost ip6-loopback\n" . + "fe00::0 ip6-localnet\n" . + "ff00::0 ip6-mcastprefix\n" . + "ff02::1 ip6-allnodes\n" . + "ff02::2 ip6-allrouters\n" . + "ff02::3 ip6-allhosts\n"; + + write_config ($hosts, "$targetdir/etc/hosts"); + + write_config ("$hostname\n", "$targetdir/etc/hostname"); + + syscmd ("/bin/hostname $hostname") if !$opt_testmode; + + # configure interfaces + + my $ifaces = + "auto lo\niface lo inet loopback\n\n" . + "auto vmbr0\niface vmbr0 inet static\n" . + "\taddress $ipaddress\n" . + "\tnetmask $netmask\n" . + "\tgateway $gateway\n" . + "\tbridge_ports eth0\n" . + "\tbridge_stp off\n" . + "\tbridge_fd 0\n"; + + write_config ($ifaces, "$targetdir/etc/network/interfaces"); + + # configure dns + + my $resolfconf = "search $domain\nnameserver $dnsserver\n"; + write_config ($resolfconf, "$targetdir/etc/resolv.conf"); + + # try to use UUID=XXX for boot device + my $boot_uuid = $bootdev; + if (my $uuid = find_dev_by_uuid ($bootdev)) { + $boot_uuid = "UUID=$uuid"; + } + + # configure fstab + + my $fstab = + "# \n" . + "$rootdev / $filesys errors=remount-ro 0 1\n"; + + $fstab .= "$datadev /var/lib/vz $filesys defaults 0 1\n" if $datadev; + + $fstab .= "${boot_uuid} /boot $filesys defaults 0 1\n" if $boot_uuid; + + $fstab .= "$swapfile none swap sw 0 0\n" if $swapfile; + + $fstab .= "proc /proc proc defaults 0 0\n"; + + write_config ($fstab, "$targetdir/etc/fstab"); + write_config ("", "$targetdir/etc/mtab"); + + syscmd ("cp ${proxmox_dir}/policy-disable-rc.d " . + "$targetdir/usr/sbin/policy-rc.d") == 0 || + die "unable to copy policy-rc.d\n"; + syscmd ("cp ${proxmox_dir}/fake-start-stop-daemon " . + "$targetdir/sbin/") == 0 || + die "unable to copy start-stop-daemon\n"; + + diversion_add ($targetdir, "/sbin/start-stop-daemon", "/sbin/fake-start-stop-daemon"); + diversion_add ($targetdir, "/usr/sbin/update-grub", "/bin/true"); + diversion_add ($targetdir, "/usr/sbin/update-initramfs", "/bin/true"); + + syscmd ("touch $targetdir/proxmox_install_mode"); + + debconfig_set ($targetdir, <<_EOD); +locales locales/default_environment_locale select en_US.UTF-8 +locales locales/locales_to_be_generated select en_US.UTF-8 UTF-8 +samba-common samba-common/dhcp boolean false +samba-common samba-common/workgroup string WORKGROUP +postfix postfix/main_mailer_type select Local only +console-data console-data/keymap/policy select Don\'t touch keymap +_EOD + + write_config ("$mailto\n", "$targetdir/root/.forward"); + + my $pkgdir = $opt_testmode ? "packages" : "/proxmox/packages"; + my $pkg_count = 0; + while (<$pkgdir/*.deb>) { $pkg_count++ }; + + $count = 0; + while (<$pkgdir/*.deb>) { + chomp; + my $path = $_; + my ($deb) = $path =~ m/$pkgdir\/(.*\.deb)/; + update_progress ($count/$pkg_count, 0.5, 0.75, "extracting $deb"); + print "extracting: $deb\n"; + syscmd ("cp $path $targetdir/tmp/$deb") == 0 || + die "installation of package $deb failed\n"; + syscmd ("chroot $targetdir dpkg --force-depends --no-triggers --unpack /tmp/$deb") == 0 || + die "installation of package $deb failed\n"; + update_progress ((++$count)/$pkg_count, 0.5, 0.75); + } + + display_html ("extract4-virus.htm"); + + my $cmd = "chroot $targetdir dpkg --force-confold --configure -a"; + $count = 0; + run_command ($cmd, sub { + my $line = shift; + if ($line =~ m/Setting up\s+(\S+)/) { + update_progress ((++$count)/$pkg_count, 0.75, 0.95, + "configuring $1"); + } + }); + + debconfig_set ($targetdir, <<_EOD); +postfix postfix/main_mailer_type select No configuration +_EOD + + unlink "$targetdir/etc/mailname"; + $postfix_main_cf =~ s/__FQDN__/${hostname}.${domain}/; + write_config ($postfix_main_cf, "$targetdir/etc/postfix/main.cf"); + + # make sure we have all postfix directories + syscmd ("chroot $targetdir /usr/sbin/postfix check"); + # cleanup mail queue + syscmd ("chroot $targetdir /usr/sbin/postsuper -d ALL"); + + unlink "$targetdir/proxmox_install_mode"; + + # disable bacula-fd + syscmd ("touch '$targetdir/etc/bacula/do_not_run'"); + + # set timezone + unlink ("$targetdir/etc/localtime"); + symlink ("/usr/share/zoneinfo/$timezone", "$targetdir/etc/localtime"); + write_config ("$timezone\n", "$targetdir/etc/timezone"); + + # set console keymap + if (my $kmapfile = $cmap->{kmap}->{$keymap}->{console}) { + syscmd ("chroot $targetdir /usr/sbin/install-keymap '/usr/share/keymaps/i386/$kmapfile'"); + } + + my $vnckmap = $cmap->{kmap}->{$keymap}->{kvm} || 'en-us'; + write_config ("keyboard: $vnckmap\n", + "$targetdir/etc/pve-installer.cfg"); + + # enable apache port redirect + syscmd ("chroot $targetdir a2ensite pve-redirect.conf"); + + # set apt mirror + if (my $mirror = $cmap->{country}->{$country}->{mirror}) { + my $fn = "$targetdir/etc/apt/sources.list"; + syscmd ("sed -i 's/ftp\\.debian\\.org/$mirror/' '$fn'"); + } + + # save installer settings + my $ucc = uc ($country); + debconfig_set ($targetdir, <<_EOD); +pve-manager pve-manager/country string $ucc +_EOD + + update_progress (0.8, 0.95, 1, "make system bootable"); + + diversion_remove ($targetdir, "/usr/sbin/update-grub"); + diversion_remove ($targetdir, "/usr/sbin/update-initramfs"); + + if (!$opt_testmode && -b $target_hd) { + + unlink ("$targetdir/etc/mtab"); + symlink ("/proc/mounts", "$targetdir/etc/mtab"); + syscmd ("mount -n --bind /dev $targetdir/dev"); + + syscmd ("chroot $targetdir /usr/sbin/update-initramfs -c -k $kapi") == 0 || + die "unable to install initramfs\n"; + + syscmd ("chroot $targetdir /usr/sbin/grub-install --no-floppy '(hd0)'") == 0 || + die "unable to install the boot loader\n"; + + syscmd ("chroot $targetdir /usr/sbin/update-grub") == 0 || + die "unable to install the boot loader\n"; + + syscmd ("umount $targetdir/dev"); + } + + + # cleanup + + # hack: remove dead.letter from sshd installation + syscmd ("rm -rf $targetdir/dead.letter"); + + unlink ("$targetdir/etc/mtab"); + syscmd ("touch $targetdir/etc/mtab"); + + unlink "$targetdir/usr/sbin/policy-rc.d"; + + diversion_remove ($targetdir, "/sbin/start-stop-daemon"); + + # set root password + my $octets = encode("utf-8", $password); + run_command ("chroot $targetdir /usr/sbin/chpasswd", undef, + "root:$octets\n"); + }; + + my $err = $@; + + update_progress (1, 0, 1, ""); + + print $err if $err; + + if ($opt_testmode) { + syscmd ("chroot $targetdir /usr/bin/dpkg-query -W --showformat='\${package}\n'> pve-final.pkglist"); + } + + syscmd ("umount $targetdir/boot"); + syscmd ("umount $targetdir/var/lib/vz"); + syscmd ("umount $targetdir/tmp"); + syscmd ("umount $targetdir/proc"); + syscmd ("umount $targetdir/sys"); + syscmd ("umount -d $targetdir"); + + die $err if $err; +} + +sub display_html { + my ($filename) = @_; + + $htmlview->set_document(undef); + $document->clear; + $htmlview->set_document($document); + + $document->open_stream ("text/html"); + + my $fn = "${proxmox_dir}/html/$filename"; + open (HTML, $fn) || + die "unable to open file '$fn' - $!\n"; + while () { $document->write_stream ($_); } + close (HTML); + + $document->close_stream; +} + +sub set_next { + my ($text, $fctn) = @_; + + $next_fctn = $fctn; + $text = "_Next" if !$text; + $next->set_label ($text); + + $next->grab_focus (); +} + +sub url_requested { + my ($doc, $url, $stream) = @_; + + $stream->set_cancel_func (sub {}); # hack: avoid warning + + my $path = "${proxmox_dir}/html/$url"; + + if (-f $path) { + open (HTMLTMP, $path) || + die "unable to open file '$path' - $! "; + my $buf; + while (my $i = read (HTMLTMP, $buf, 4096)) { + $stream->write ($buf); + Gtk2->main_iteration while Gtk2->events_pending; + } + close (HTMLTMP); + } + + #$stream->close(); # hack: dont close - avoid crash +} + +sub create_main_window { + + $window = Gtk2::Window->new (); + $window->set_default_size (1024, 768); + $window->set_decorated (0) if !$opt_testmode; + + my $vbox = Gtk2::VBox->new (0, 0); + + my $image = Gtk2::Image->new_from_file ("${proxmox_dir}/proxlogo.xpm"); + $vbox->pack_start ($image, 0, 0, 0); + + my $hbox = Gtk2::HBox->new (0, 0); + $vbox->pack_start ($hbox, 1, 1, 0); + + my $f1 = Gtk2::Frame->new (); + $f1->set_shadow_type ('in'); + $hbox->pack_start ($f1, 1, 1, 0); + + my $sep1 = Gtk2::HSeparator->new; + $vbox->pack_start ($sep1, 0, 0, 0); + + $cmdbox = Gtk2::HBox->new (); + $vbox->pack_start ($cmdbox, 0, 0, 10); + + $next = Gtk2::Button->new ('_Next'); + $next->signal_connect (clicked => sub { &$next_fctn (); }); + $cmdbox->pack_end ($next, 0, 0, 10); + my $abort = Gtk2::Button->new ('_Abort'); + $abort->can_focus (0); + $cmdbox->pack_start ($abort, 0, 0, 10); + $abort->signal_connect (clicked => sub { exit (-1); }); + + my $vbox2 = Gtk2::VBox->new (0, 0); + $f1->add ($vbox2); + + $htmlview = new Gtk2::Html2::View; + # hack: create a separate style - else Gtk2::Html2 modifies + # main window style + my $rcs1 = Gtk2::RcStyle->new; + $htmlview->modify_style ($rcs1); + + $document = new Gtk2::Html2::Document; + $document->signal_connect (request_url => \&url_requested); + + $document->clear; + $htmlview->set_document ($document); + + my $hbox2 = Gtk2::HBox->new (0, 0); + $hbox2->pack_start ($htmlview, 1, 1, 0); + + $vbox2->pack_start ($hbox2, 1, 1, 0); + + my $vbox3 = Gtk2::VBox->new (0, 0); + $vbox2->pack_start ($vbox3, 0, 0, 0); + + my $sep2 = Gtk2::HSeparator->new; + $vbox3->pack_start ($sep2, 0, 0, 0); + + $inbox = Gtk2::HBox->new (0, 0); + $vbox3->pack_start ($inbox, 0, 0, 0); + + $window->add ($vbox); + + $window->show_all; + $window->realize (); +} + +sub cleanup_view { + my $list = $inbox->get_children; + foreach my $c ($list) { + next if !defined ($c); + $inbox->remove ($c); + } +} + +sub check_num { + my ($entry, $event) = @_; + + my $val = $event->keyval; + + if ($val == ord '.') { + $entry->parent->child_focus ('right'); + return 1; + } + + if ($val == $Gtk2::Gdk::Keysyms{ISO_Left_Tab} || + $val == $Gtk2::Gdk::Keysyms{Shift_L} || + $val == $Gtk2::Gdk::Keysyms{Tab} || + $val == $Gtk2::Gdk::Keysyms{BackSpace} || + $val == $Gtk2::Gdk::Keysyms{Delete} || + ($val >= ord '0' && $val <= ord '9') || + ($val >= $Gtk2::Gdk::Keysyms{KP_0} && + $val <= $Gtk2::Gdk::Keysyms{KP_9})) { + return undef; + } + + return 1; +} + +sub check_range { + my ($entry, $event) = @_; + + my $text = $entry->get_text; + if (!defined($text) || ($text !~ m/^(\d+)$/) || ($1 > 255)) { + $entry->set_text ($entry->{default}); + } + + return undef; +} + + +sub creat_text_input { + my ($default, $text) = @_; + + my $hbox = Gtk2::HBox->new (0, 0); + + my $label = Gtk2::Label->new ($text); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox->pack_start ($label, 0, 0, 10); + my $e1 = Gtk2::Entry->new (); + $e1->set_width_chars (30); + $hbox->pack_start ($e1, 0, 0, 0); + $e1->set_text ($default); + + return ($hbox, $e1); +} + +sub creat_ip_input { + my ($init, $default, $text) = @_; + + my (@ips) = split /\./, $init; + my (@defs) = split /\./, $default; + + my $hbox = Gtk2::HBox->new (0, 0); + + my $label = Gtk2::Label->new ($text); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox->pack_start ($label, 0, 0, 10); + + my $e1 = Gtk2::Entry->new_with_max_length (3); + $e1->{default} = $defs[0]; + $hbox->pack_start ($e1, 0, 0, 0); + $e1->set_width_chars (3); + $e1->set_text ($ips[0]); + $e1->signal_connect (key_press_event => \&check_num); + $e1->signal_connect (focus_out_event => \&check_range); + + my $l1 = Gtk2::Label->new ("."); + $hbox->pack_start ($l1, 0, 0, 2); + + my $e2 = Gtk2::Entry->new_with_max_length (3); + $e2->{default} = $defs[1]; + $hbox->pack_start ($e2, 0, 0, 0); + $e2->set_width_chars (3); + $e2->set_text ($ips[1]); + $e2->signal_connect (key_press_event => \&check_num); + $e2->signal_connect (focus_out_event => \&check_range); + + my $l2 = Gtk2::Label->new ("."); + $hbox->pack_start ($l2, 0, 0, 2); + + my $e3 = Gtk2::Entry->new_with_max_length (3); + $e3->{default} = $defs[2]; + $hbox->pack_start ($e3, 0, 0, 0); + $e3->set_width_chars (3); + $e3->set_text ($ips[2]); + $e3->signal_connect (key_press_event => \&check_num); + $e3->signal_connect (focus_out_event => \&check_range); + + my $l3 = Gtk2::Label->new ("."); + $hbox->pack_start ($l3, 0, 0, 2); + + my $e4 = Gtk2::Entry->new_with_max_length (3); + $e4->{default} = $defs[3]; + $hbox->pack_start ($e4, 0, 0, 0); + $e4->set_width_chars (3); + $e4->set_text ($ips[3]); + $e4->signal_connect (key_press_event => \&check_num); + $e4->signal_connect (focus_out_event => \&check_range); + + return ($hbox, $e1, $e2, $e3, $e4); +} + +sub get_ip_config { + + my $ifconfig = `ifconfig eth0`; + + my ($addr) = $ifconfig =~ m/inet addr:(\S*)/m; + my ($mask) = $ifconfig =~ m/Mask:(\S*)/m; + + my $route = `route -n`; + my ($gateway) = $route =~ m/^0\.0\.0\.0\s+(\d+\.\d+\.\d+\.\d+)\s+/m; + + my $resolvconf = `cat /etc/resolv.conf`; + my ($dnsserver) = $resolvconf =~ m/^nameserver\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/m; + + return { + addr => $addr, + mask => $mask, + gateway => $gateway, + dnsserver => $dnsserver, + } +} + +sub display_message { + my ($msg) = @_; + + my $dialog = Gtk2::MessageDialog->new ($window, 'modal', + 'info', 'ok', $msg); + $dialog->run(); + $dialog->destroy(); +} + +sub display_error { + my ($msg) = @_; + + my $dialog = Gtk2::MessageDialog->new ($window, 'modal', + 'error', 'ok', $msg); + $dialog->run(); + $dialog->destroy(); +} + +sub create_ipconf_view { + + cleanup_view (); + display_html ("ipconf.htm"); + + my $vbox = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox, 1, 0, 0); + my $hbox = Gtk2::HBox->new (0, 0); + $vbox->pack_start ($hbox, 0, 0, 30); + my $vbox2 = Gtk2::VBox->new (0, 0); + $hbox->add ($vbox2); + + my $addr = $ipconf->{addr} || '192.168.100.2'; + my $mask = $ipconf->{mask} || '255.255.255.0'; + + my ($hostbox, $hostentry) = + creat_text_input ('proxmox.domain.tld', 'Hostname (FQDN):'); + $vbox2->pack_start ($hostbox, 0, 0, 2); + + my $ipbox; + ($ipbox, $ip_1, $ip_2, $ip_3, $ip_4) = + creat_ip_input ($addr, '0.0.0.0', 'IP Address:'); + $vbox2->pack_start ($ipbox, 0, 0, 2); + + my $maskbox; + ($maskbox, $mask_1, $mask_2, $mask_3, $mask_4) = + creat_ip_input ($mask, '255.255.255.0', 'Netmask:'); + $vbox2->pack_start ($maskbox, 0, 0, 2); + + $gateway = $ipconf->{gateway} || '192.168.100.1'; + + my $gwbox; + ($gwbox, $gw_1, $gw_2, $gw_3, $gw_4) = + creat_ip_input ($gateway, '0.0.0.0', 'Gateway:'); + + $vbox2->pack_start ($gwbox, 0, 0, 15); + + $dnsserver = $ipconf->{dnsserver} || $gateway; + + my $dnsbox; + ($dnsbox, $dns_1, $dns_2, $dns_3, $dns_4) = + creat_ip_input ($dnsserver, '0.0.0.0', 'DNS Server:'); + + $vbox2->pack_start ($dnsbox, 0, 0, 0); + + $inbox->show_all; + set_next (undef, sub { + my $text = $hostentry->get_text(); + + $text =~ s/^\s+//; + $text =~ s/\s+$//; + + if ($text && $text =~ m/^[\w\-]+(\.[\w\-]+)+$/ && $text !~ m/.domain.tld$/ && + $text =~ m/^([^\.]+)\.(\S+)$/) { + $hostname = $1; + $domain = $2; + create_extract_view (); + return; + } + display_message ("Hostname does not look like a fully qualified domain name."); + $hostentry->grab_focus(); + }); + + $hostentry->grab_focus(); +} + +sub get_device_desc { + my ($devname, $size, $model) = @_; + + if ($size && ($size > 0) && $model) { + $size = int($size/2048); # size in MB + + if ($size >= 1024) { + $size = int($size/1024); # size in GB + return "$devname (${size}GB, $model)"; + } else { + return "$devname (${size}MB, $model)"; + } + + } else { + return $devname; + } +} + +sub update_layout { + my ($cb, $kmap) = @_; + + my $ind; + my $def; + my $i = 0; + my $kmaphash = $cmap->{kmaphash}; + foreach my $layout (sort keys %$kmaphash) { + $def = $i if $kmaphash->{$layout} eq 'en-us'; + $ind = $i if $kmap && $kmaphash->{$layout} eq $kmap; + $i++; + } + + $cb->set_active ($ind || $def || 0); +} + +my $lastzonecb; +sub update_zonelist { + my ($box, $cc) = @_; + + my $cczones = $cmap->{cczones}; + my $zones = $cmap->{zones}; + + my $sel; + if ($lastzonecb) { + $sel = $lastzonecb->get_active_text(); + $box->remove ($lastzonecb); + } else { + $sel = $timezone; # used once to select default + } + + my $cb = $lastzonecb = Gtk2::ComboBox->new_text (); + $cb->set_size_request (200, -1); + + $cb->signal_connect ('changed' => sub { + $timezone = $cb->get_active_text(); + }); + + my @za; + if ($cc && defined ($cczones->{$cc})) { + @za = keys %{$cczones->{$cc}}; + } else { + @za = keys %$zones; + } + my $ind; + my $i = 0; + foreach my $zone (sort @za) { + $ind = $i if $sel && $zone eq $sel; + $cb->append_text ($zone); + $i++; + } + + $cb->set_active ($ind || 0); + + $cb->show; + $box->pack_start ($cb, 0, 0, 0); +} + +sub create_password_view { + + cleanup_view (); + + my $vbox2 = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox2, 1, 0, 0); + my $vbox = Gtk2::VBox->new (0, 0); + $vbox2->pack_start ($vbox, 0, 0, 30); + + my $hbox1 = Gtk2::HBox->new (0, 0); + my $label = Gtk2::Label->new ("Password"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox1->pack_start ($label, 0, 0, 10); + my $pwe1 = Gtk2::Entry->new (); + $pwe1->set_visibility (0); + $pwe1->set_size_request (200, -1); + $hbox1->pack_start ($pwe1, 0, 0, 0); + + my $hbox2 = Gtk2::HBox->new (0, 0); + $label = Gtk2::Label->new ("Confirm"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox2->pack_start ($label, 0, 0, 10); + my $pwe2 = Gtk2::Entry->new (); + $pwe2->set_visibility (0); + $pwe2->set_size_request (200, -1); + $hbox2->pack_start ($pwe2, 0, 0, 0); + + my $hbox3 = Gtk2::HBox->new (0, 0); + $label = Gtk2::Label->new ("E-Mail"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox3->pack_start ($label, 0, 0, 10); + my $eme = Gtk2::Entry->new (); + $eme->set_size_request (200, -1); + $hbox3->pack_start ($eme, 0, 0, 0); + + + $vbox->pack_start ($hbox1, 0, 0, 5); + $vbox->pack_start ($hbox2, 0, 0, 5); + $vbox->pack_start ($hbox3, 0, 0, 15); + + $inbox->show_all; + + display_html ("passwd.htm"); + + set_next (undef, sub { + + my $t1 = $pwe1->get_text; + my $t2 = $pwe2->get_text; + + if (length ($t1) < 5) { + display_message ("Password is too short."); + $pwe1->grab_focus(); + return; + } + + if ($t1 ne $t2) { + display_message ("Password does not match."); + $pwe1->grab_focus(); + return; + } + + my $t3 = $eme->get_text; + if ($t3 !~ m/^\S+\@\S+\.\S+$/) { + display_message ("E-Mail does not look like a vaild address" . + " (user\@domain.tld)"); + $eme->grab_focus(); + return; + + } + + $password = $t1; + $mailto = $t3; + + create_ipconf_view(); + }); + + $pwe1->grab_focus(); + +} + +sub create_country_view { + + cleanup_view (); + + my $countryhash = $cmap->{countryhash}; + my $ctr = $cmap->{country}; + + my $vbox2 = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox2, 1, 0, 0); + my $vbox = Gtk2::VBox->new (0, 0); + $vbox2->pack_start ($vbox, 0, 0, 30); + + my $w = Gtk2::Entry->new (); + $w->set_size_request (200, -1); + + my $c = Gtk2::EntryCompletion->new (); + $c->set_text_column (0); + $c->set_minimum_key_length(0); + $c->set_popup_set_width (1); + + my $hbox2 = Gtk2::HBox->new (0, 0); + my $label = Gtk2::Label->new ("Time zone"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox2->pack_start ($label, 0, 0, 10); + update_zonelist ($hbox2); + + my $hbox3 = Gtk2::HBox->new (0, 0); + $label = Gtk2::Label->new ("Keyboard Layout"); + $label->set_size_request (150, -1); + $label->set_alignment (1, 0.5); + $hbox3->pack_start ($label, 0, 0, 10); + + my $kmapcb = Gtk2::ComboBox->new_text (); + $kmapcb->set_size_request (200, -1); + foreach my $layout (sort keys %{$cmap->{kmaphash}}) { + $kmapcb->append_text ($layout); + } + + update_layout ($kmapcb); + $hbox3->pack_start ($kmapcb, 0, 0, 0); + + $kmapcb->signal_connect ('changed' => sub { + my $sel = $kmapcb->get_active_text(); + if (my $kmap = $cmap->{kmaphash}->{$sel}) { + my $xkmap = $cmap->{kmap}->{$kmap}->{x11}; + my $xvar = $cmap->{kmap}->{$kmap}->{x11var}; + syscmd ("setxkbmap $xkmap $xvar") if !$opt_testmode; + $keymap = $kmap; + } + }); + + $w->signal_connect ('changed' => sub { + my ($entry, $event) = @_; + my $text = $entry->get_text; + + if (my $cc = $countryhash->{lc($text)}) { + update_zonelist ($hbox2, $cc); + my $kmap = $ctr->{$cc}->{kmap} || 'en-us'; + update_layout ($kmapcb, $kmap); + } + }); + + $w->signal_connect (key_press_event => sub { + my ($entry, $event) = @_; + my $text = $entry->get_text; + + my $val = $event->keyval; + if ($val == $Gtk2::Gdk::Keysyms{Tab}) { + my $cc = $countryhash->{lc($text)}; + return undef if $cc; + my $found = 0; + my $compl; + foreach my $cc (keys %$ctr) { + my $ct = $ctr->{$cc}->{name}; + if ($ct =~ m/^\Q$text\E.*$/i) { + $found++; + $compl = $ct; + } + last if $found > 1; + } + if ($found == 1) { + $entry->set_text ($compl); + return undef; + } else { + Gtk2::Gdk->beep(); + } + + $w->insert_text('', -1); # popup selection + return 1; + } + + return undef; + }); + + my $ls = Gtk2::ListStore->new('Glib::String'); + foreach my $cc (sort {$ctr->{$a}->{name} cmp $ctr->{$b}->{name} } keys %$ctr) { + my $iter = $ls->append(); + $ls->set ($iter, 0, $ctr->{$cc}->{name}); + } + $c->set_model ($ls); + + $w->set_completion ($c); + + my $hbox = Gtk2::HBox->new (0, 0); + + $label = Gtk2::Label->new ("Country"); + $label->set_alignment (1, 0.5); + $label->set_size_request (150, -1); + $hbox->pack_start ($label, 0, 0, 10); + $hbox->pack_start ($w, 0, 0, 0); + + $vbox->pack_start ($hbox, 0, 0, 5); + $vbox->pack_start ($hbox2, 0, 0, 5); + $vbox->pack_start ($hbox3, 0, 0, 5); + + if ($country) { + $w->set_text ($ctr->{$country}->{name}); + } + + $inbox->show_all; + + display_html ("country.htm"); + set_next (undef, sub { + + my $text = $w->get_text; + + if (my $cc = $countryhash->{lc($text)}) { + $country = $cc; + create_password_view(); + return; + } else { + display_message ("Please select a country first."); + $w->grab_focus(); + } + }); + + $w->grab_focus(); +} + +sub create_hdsel_view { + + cleanup_view (); + + my $vbox = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox, 1, 0, 0); + my $hbox = Gtk2::HBox->new (0, 0); + $vbox->pack_start ($hbox, 0, 0, 30); + + my ($disk, $devname, $size, $model) = @{@$hds[0]}; + $target_hd = $devname; + $master_hd = find_master ($target_hd); + my $label; + + if (scalar (@$hds) == 1) { + my $devdesc = get_device_desc ($devname, $size, $model); + $label = Gtk2::Label->new ("Target Harddisk: $devdesc"); + $hbox->pack_start ($label, 0, 0, 0); + } else { + $label = Gtk2::Label->new ("Target Harddisks: "); + $hbox->pack_start ($label, 0, 0, 0); + + my $combo = Gtk2::ComboBox->new_text (); + + foreach my $hd (@$hds) { + ($disk, $devname, $size, $model) = @$hd; + $combo->append_text (get_device_desc ($devname, $size, $model)); + } + + $combo->set_active (0); + $combo->signal_connect (changed => sub { + $a = shift->get_active; + my ($disk, $devname) = @{@$hds[$a]}; + $target_hd = $devname; + $master_hd = find_master ($target_hd); + }); + + $hbox->pack_start ($combo, 0, 0, 0); + } + + $inbox->show_all; + + display_html ("page1.htm"); + set_next (undef, \&create_country_view); +} + +sub create_extract_view { + + $ipaddress = $ip_1->get_text . "." . $ip_2->get_text . "." . + $ip_3->get_text . "." . $ip_4->get_text; + + $netmask = $mask_1->get_text . "." . $mask_2->get_text . "." . + $mask_3->get_text . "." . $mask_4->get_text; + + $gateway = $gw_1->get_text . "." . $gw_2->get_text . "." . + $gw_3->get_text . "." . $gw_4->get_text; + + $dnsserver = $dns_1->get_text . "." . $dns_2->get_text . "." . + $dns_3->get_text . "." . $dns_4->get_text; + + # print "TEST $ipaddress $netmask $gateway $dnsserver\n"; + cleanup_view (); + + display_html ("extract1-license.htm"); + $next->set_sensitive (0); + + my $vbox = Gtk2::VBox->new (0, 0); + $inbox->pack_start ($vbox, 1, 0, 0); + my $hbox = Gtk2::HBox->new (0, 0); + $vbox->pack_start ($hbox, 0, 0, 30); + + my $vbox2 = Gtk2::VBox->new (0, 0); + $hbox->pack_start ($vbox2, 0, 0, 0); + + $progress_status = Gtk2::Label->new (); + $vbox2->pack_start ($progress_status, 1, 1, 0); + + $progress = Gtk2::ProgressBar->new; + $progress->set_size_request (400, -1); + + $vbox2->pack_start ($progress, 0, 0, 0); + + $inbox->show_all; + + my $tdir = $opt_testmode ? "target" : "/target"; + mkdir $tdir; + my $base = $opt_testmode ? "/pve/$release/install/pve-base.tar" : "/proxmox/pve-base.tar"; + + eval { extract_data ($base, $tdir); }; + my $err = $@; + + $next->set_sensitive (1); + + set_next ("_Reboot", sub { exit (0); } ); + + display_html ($err ? "fail.htm" : "success.htm"); + + display_error ($err) if $err; +} + +sub mupdate_progress { + my $per = shift; + print "GOT1: $per\n"; + +} + +sub create_intro_view { + + cleanup_view (); + + display_html ("license.htm"); + + set_next ("I a_gree", \&create_hdsel_view); +} + +$ipconf = get_ip_config (); + +$country = detect_country () if $ipconf->{addr}; + +# read country, kmap and timezone infos +$cmap = read_cmap (); + +create_main_window (); + +if (!defined ($hds) || (scalar (@$hds) <= 0)) { + print "no hardisks found\n"; + display_html ("nohds.htm"); + set_next ("Reboot", sub { exit (0); } ); +} else { + + foreach my $hd (@$hds) { + my ($disk, $devname) = @$hd; + next if $devname =~ m|^/dev/md\d+$|; + print "found Disk$disk N:$devname\n"; + } + + create_intro_view (); +} + +Gtk2->main; + +exit 0; diff --git a/proxlogo.xpm b/proxlogo.xpm new file mode 100755 index 0000000..6af30bc --- /dev/null +++ b/proxlogo.xpm @@ -0,0 +1,680 @@ +/* XPM */ +static char * proxlogo_xpm[] = { +"1024 75 602 2", +" c None", +". c #E9E9E9", +"+ c #E8E8E8", +"@ c #E7E7E7", +"# c #E6E6E6", +"$ c #E5E5E5", +"% c #E4E4E4", +"& c #E3E3E3", +"* c #E2E2E2", +"= c #E1E1E1", +"- c #E0E0E0", +"; c #DFDFDF", +"> c #DEDEDE", +", c #DDDDDD", +"' c #DCDCDC", +") c #DBDBDB", +"! c #DADADA", +"~ c #D9D9D9", +"{ c #D7D7D7", +"] c #D8D8D8", +"^ c #D6D6D6", +"/ c #D5D5D5", +"( c #D4D4D4", +"_ c #D2D2D2", +": c #D3D3D3", +"< c #D0D0D0", +"[ c #D1D1D1", +"} c #CFCFCF", +"| c #CECECE", +"1 c #CDCDCD", +"2 c #CCCCCC", +"3 c #CBCBCB", +"4 c #CACACA", +"5 c #C8C8C8", +"6 c #C7C7C7", +"7 c #C5C5C5", +"8 c #C6C6C6", +"9 c #C4C4C4", +"0 c #C3C3C3", +"a c #C2C2C2", +"b c #C1C1C1", +"c c #BFBFBF", +"d c #BEBEBE", +"e c #BDBDBD", +"f c #BCBCBC", +"g c #BBBBBB", +"h c #BABABA", +"i c #B9B9B9", +"j c #B8B8B8", +"k c #B7B7B7", +"l c #B6B6B6", +"m c #B5B5B5", +"n c #B4B4B4", +"o c #B2B2B2", +"p c #B3B3B3", +"q c #B1B1B1", +"r c #AFAFAF", +"s c #B0B0B0", +"t c #AEAEAE", +"u c #ADADAD", +"v c #ACACAC", +"w c #AAAAAA", +"x c #ABABAB", +"y c #A9A9A9", +"z c #A8A8A8", +"A c #A7A7A7", +"B c #A6A6A6", +"C c #A5A5A5", +"D c #A4A4A4", +"E c #A3A3A3", +"F c #A2A2A2", +"G c #A1A1A1", +"H c #A0A0A0", +"I c #9F9F9F", +"J c #9E9E9E", +"K c #9D9D9D", +"L c #9C9C9C", +"M c #9B9B9B", +"N c #9A9A9A", +"O c #999999", +"P c #989898", +"Q c #979797", +"R c #969696", +"S c #949494", +"T c #959595", +"U c #939393", +"V c #929292", +"W c #919191", +"X c #909090", +"Y c #8F8F8F", +"Z c #8E8E8E", +"` c #8C8C8C", +" . c #8B8B8B", +".. c #8A8A8A", +"+. c #898989", +"@. c #878787", +"#. c #888888", +"$. c #868686", +"%. c #858585", +"&. c #848484", +"*. c #838383", +"=. c #828282", +"-. c #818181", +";. c #808080", +">. c #7E7E7E", +",. c #7D7D7D", +"'. c #7B7B7B", +"). c #7A7A7A", +"!. c #797979", +"~. c #787878", +"{. c #767676", +"]. c #757575", +"^. c #737373", +"/. c #727272", +"(. c #717171", +"_. c #707070", +":. c #6F6F6F", +"<. c #6D6D6D", +"[. c #6C6C6C", +"}. c #6B6B6B", +"|. c #6A6A6A", +"1. c #696969", +"2. c #686868", +"3. c #676767", +"4. c #666666", +"5. c #656565", +"6. c #646464", +"7. c #626262", +"8. c #616161", +"9. c #606060", +"0. c #5F5F5F", +"a. c #5E5E5E", +"b. c #5D5D5D", +"c. c #5B5B5B", +"d. c #5A5A5A", +"e. c #595959", +"f. c #585858", +"g. c #575757", +"h. c #555555", +"i. c #545454", +"j. c #535353", +"k. c #525252", +"l. c #515151", +"m. c #4F4F4F", +"n. c #4E4E4E", +"o. c #4C4C4C", +"p. c #4B4B4B", +"q. c #484848", +"r. c #474747", +"s. c #464646", +"t. c #444444", +"u. c #424242", +"v. c #414141", +"w. c #404040", +"x. c #3F3F3F", +"y. c #3E3E3E", +"z. c #3D3D3D", +"A. c #3C3C3C", +"B. c #3B3B3B", +"C. c #3A3A3A", +"D. c #383838", +"E. c #393939", +"F. c #373737", +"G. c #363636", +"H. c #353535", +"I. c #333333", +"J. c #323232", +"K. c #2F2F2F", +"L. c #2E2E2E", +"M. c #2D2D2D", +"N. c #2B2B2B", +"O. c #292929", +"P. c #2A2A2A", +"Q. c #282828", +"R. c #262626", +"S. c #252525", +"T. c #242424", +"U. c #222222", +"V. c #212121", +"W. c #202020", +"X. c #1E1E1E", +"Y. c #1D1D1D", +"Z. c #1C1C1C", +"`. c #1B1B1B", +" + c #1A1A1A", +".+ c #181818", +"++ c #161616", +"@+ c #151515", +"#+ c #141414", +"$+ c #121212", +"%+ c #101010", +"&+ c #0F0F0F", +"*+ c #0E0E0E", +"=+ c #0B0B0B", +"-+ c #0A0A0A", +";+ c #080808", +">+ c #090909", +",+ c #060606", +"'+ c #050505", +")+ c #030303", +"!+ c #000000", +"~+ c #0D0D0D", +"{+ c #171717", +"]+ c #191919", +"^+ c #1F1F1F", +"/+ c #232323", +"(+ c #272727", +"_+ c #2C2C2C", +":+ c #303030", +"<+ c #313131", +"[+ c #343434", +"}+ c #4E4E4F", +"|+ c #6C6C6B", +"1+ c #6C6C6D", +"2+ c #6D6D6E", +"3+ c #6E6E6E", +"4+ c #636363", +"5+ c #5A5A5B", +"6+ c #EAEAEA", +"7+ c #EBEBEB", +"8+ c #C9C9C9", +"9+ c #C0C0C0", +"0+ c #8D8D8D", +"a+ c #7F7F7F", +"b+ c #7C7C7C", +"c+ c #777777", +"d+ c #747474", +"e+ c #5C5C5C", +"f+ c #565656", +"g+ c #505050", +"h+ c #4D4D4D", +"i+ c #4A4A4A", +"j+ c #494949", +"k+ c #454545", +"l+ c #434343", +"m+ c #131313", +"n+ c #111111", +"o+ c #0C0C0C", +"p+ c #070707", +"q+ c #040404", +"r+ c #020202", +"s+ c #010101", +"t+ c #6B6B6C", +"u+ c #525253", +"v+ c #ECECEC", +"w+ c #EDEDED", +"x+ c #EFEFEF", +"y+ c #EEEEEE", +"z+ c #464647", +"A+ c #6F6F70", +"B+ c #F1F1F1", +"C+ c #F0F0F0", +"D+ c #434344", +"E+ c #535354", +"F+ c #545455", +"G+ c #F4F4F4", +"H+ c #F3F3F3", +"I+ c #F2F2F2", +"J+ c #444445", +"K+ c #616162", +"L+ c #505051", +"M+ c #F7F7F7", +"N+ c #F6F6F6", +"O+ c #F5F5F5", +"P+ c #383837", +"Q+ c #565657", +"R+ c #F9F9F9", +"S+ c #F8F8F8", +"T+ c #FAFAFA", +"U+ c #474746", +"V+ c #FBFBFB", +"W+ c #FCFCFC", +"X+ c #707071", +"Y+ c #FDFDFD", +"Z+ c #FEFEFE", +"`+ c #717170", +" @ c #6D6D6C", +".@ c #676766", +"+@ c #4A4A4B", +"@@ c #CECDCC", +"#@ c #CEB59D", +"$@ c #CDA276", +"%@ c #CD9F71", +"&@ c #CDAC8C", +"*@ c #CCC8C4", +"=@ c #C6B39F", +"-@ c #C79E74", +";@ c #C8996B", +">@ c #C6A37F", +",@ c #C4BCB4", +"'@ c #A2A1A0", +")@ c #AB947E", +"!@ c #B3885D", +"~@ c #B48658", +"{@ c #AE8D6B", +"]@ c #A19C96", +"^@ c #A1907E", +"/@ c #AD845B", +"(@ c #AF7F51", +"_@ c #AB8661", +":@ c #9C938A", +"<@ c #4F4F50", +"[@ c #717172", +"}@ c #CEB194", +"|@ c #CC741D", +"1@ c #CC6600", +"2@ c #CC6C0C", +"3@ c #CA9F73", +"4@ c #C6B3A0", +"5@ c #CA7B2B", +"6@ c #CB6804", +"7@ c #C78F57", +"8@ c #C2BFBC", +"9@ c #AD937C", +"0@ c #C46F1A", +"a@ c #C96807", +"b@ c #B48454", +"c@ c #A09F9F", +"d@ c #A19283", +"e@ c #BF7226", +"f@ c #CB6602", +"g@ c #B6783C", +"h@ c #98938E", +"i@ c #4D4D4E", +"j@ c #CDC8C3", +"k@ c #CC6F13", +"l@ c #CA9157", +"m@ c #C6AD94", +"n@ c #CB6A09", +"o@ c #C59F79", +"p@ c #A4A19F", +"q@ c #C66D14", +"r@ c #BA7B3C", +"s@ c #9D9C9C", +"t@ c #A18E7A", +"u@ c #C8690B", +"v@ c #AC8052", +"w@ c #CCB6A0", +"x@ c #CB6B0B", +"y@ c #CA9560", +"z@ c #C5B3A1", +"A@ c #C78B4F", +"B@ c #A79685", +"C@ c #C86A0D", +"D@ c #B87C40", +"E@ c #9F9082", +"F@ c #C76A0C", +"G@ c #B87734", +"H@ c #949393", +"I@ c #CCB197", +"J@ c #C99E74", +"K@ c #C4B7AA", +"L@ c #CB7015", +"M@ c #C78541", +"N@ c #C0BFBE", +"O@ c #A9937D", +"P@ c #CA6806", +"Q@ c #B38250", +"R@ c #9E958C", +"S@ c #C46D15", +"T@ c #BC732A", +"U@ c #959290", +"V@ c #6E6E6D", +"W@ c #CBA682", +"X@ c #CB6702", +"Y@ c #CB6600", +"Z@ c #C9A47F", +"`@ c #C3BAB2", +" # c #CA731B", +".# c #C97E31", +"+# c #C0BDBB", +"@# c #AC8E70", +"## c #CA6703", +"$# c #AF855B", +"%# c #9C9690", +"&# c #C36F1B", +"*# c #C07020", +"=# c #97938F", +"-# c #727273", +";# c #C99F75", +"># c #C6AA8E", +",# c #C2BDB8", +"'# c #C97929", +")# c #C87826", +"!# c #BFB9B3", +"~# c #AE8965", +"{# c #CB6601", +"]# c #AB8866", +"^# c #999694", +"/# c #BE7327", +"(# c #C36D17", +"_# c #988F87", +":# c #636364", +"<# c #656566", +"[# c #3F3F40", +"}# c #C9935D", +"|# c #CB6907", +"1# c #C4AE98", +"2# c #C3C0BE", +"3# c #CA721A", +"4# c #C0B7AF", +"5# c #B18255", +"6# c #A58A70", +"7# c #989796", +"8# c #BB752F", +"9# c #C56B10", +"0# c #988D82", +"a# c #656564", +"b# c #3C3C3B", +"c# c #666667", +"d# c #C98D51", +"e# c #CB6D0F", +"f# c #C98239", +"g# c #CA6E13", +"h# c #C0B1A3", +"i# c #B57F49", +"j# c #C86909", +"k# c #9D8B79", +"l# c #484847", +"m# c #737372", +"n# c #747473", +"o# c #4B4B4A", +"p# c #C1C0BF", +"q# c #C9823B", +"r# c #BEAC9A", +"s# c #9A9999", +"t# c #BA7838", +"u# c #C96705", +"v# c #9E8872", +"w# c #6F6F6E", +"x# c #CB6906", +"y# c #C0A58B", +"z# c #9A9998", +"A# c #BD752E", +"B# c #A48566", +"C# c #737374", +"D# c #C97521", +"E# c #BFA081", +"F# c #9A9692", +"G# c #A8835F", +"H# c #50504F", +"I# c #BEB3A9", +"J# c #C9721A", +"K# c #C0966C", +"L# c #9A938D", +"M# c #C26E1A", +"N# c #AD7D4D", +"O# c #6E6E6F", +"P# c #69696A", +"Q# c #C19A74", +"R# c #C77727", +"S# c #B8B7B7", +"T# c #A68565", +"U# c #C26C16", +"V# c #92908E", +"W# c #BDA894", +"X# c #CA6A0A", +"Y# c #C2864A", +"Z# c #9C8D7E", +"`# c #C7690C", +" $ c #B67533", +".$ c #8F8E8E", +"+$ c #585857", +"@$ c #BAAC9E", +"#$ c #CA6C0F", +"$$ c #BF8F5F", +"%$ c #C56A10", +"&$ c #AF7842", +"*$ c #3E3E3F", +"=$ c #B9AFA5", +"-$ c #C87119", +";$ c #BD9469", +">$ c #96908A", +",$ c #C16D19", +"'$ c #AB7B4B", +")$ c #4B4B4C", +"!$ c #B7B1AB", +"~$ c #C87420", +"{$ c #B8997A", +"]$ c #95918D", +"^$ c #BF6F1F", +"/$ c #A37E5A", +"($ c #B4B1AE", +"_$ c #C57A2E", +":$ c #C87018", +"<$ c #C0854A", +"[$ c #B69A80", +"}$ c #91908F", +"|$ c #BA722C", +"1$ c #C56A0F", +"2$ c #AE7741", +"3$ c #9D7D5F", +"4$ c #70706F", +"5$ c #B1B0AF", +"6$ c #C47D36", +"7$ c #C96D11", +"8$ c #B3A496", +"9$ c #AFAEAE", +"0$ c #C08448", +"a$ c #B09E8C", +"b$ c #908F8F", +"c$ c #B67534", +"d$ c #C86808", +"e$ c #978573", +"f$ c #AD7741", +"g$ c #96806A", +"h$ c #B3A18F", +"i$ c #ACABAA", +"j$ c #C37B34", +"k$ c #C86C11", +"l$ c #AE9F92", +"m$ c #AF7943", +"n$ c #99836D", +"o$ c #8B8A8A", +"p$ c #B37332", +"q$ c #C76808", +"r$ c #93816F", +"s$ c #BE8852", +"t$ c #B4997F", +"u$ c #AAA7A4", +"v$ c #C2782B", +"w$ c #C66F17", +"x$ c #ABA29A", +"y$ c #A97A4C", +"z$ c #9D7E5F", +"A$ c #898887", +"B$ c #B77029", +"C$ c #C4690E", +"D$ c #8C8176", +"E$ c #626261", +"F$ c #B98F65", +"G$ c #B39475", +"H$ c #A9A39D", +"I$ c #C5711D", +"J$ c #C37321", +"K$ c #A8A29C", +"L$ c #A17C57", +"M$ c #898581", +"N$ c #BD6D1D", +"O$ c #C06A14", +"P$ c #887F77", +"Q$ c #B6916D", +"R$ c #B68C62", +"S$ c #AA9F94", +"T$ c #C1762A", +"U$ c #9E8062", +"V$ c #CA6603", +"W$ c #A87848", +"X$ c #89827B", +"Y$ c #BF6B17", +"Z$ c #BB6B1B", +"`$ c #837F7B", +" % c #AAA5A0", +".% c #C86B0F", +"+% c #B68A5E", +"@% c #A89A8C", +"#% c #B18A63", +"$% c #8B8886", +"%% c #C36A11", +"&% c #A97643", +"*% c #8A7F74", +"=% c #BF6A15", +"-% c #A27345", +";% c #AC9D8E", +">% c #C07830", +",% c #C4721F", +"'% c #AF9478", +")% c #A59C93", +"!% c #BB7C3E", +"~% c #CA6705", +"{% c #C66C12", +"]% c #B08963", +"^% c #908377", +"/% c #B5702C", +"(% c #CA6602", +"_% c #C06B16", +":% c #9A7B5C", +"<% c #867F78", +"[% c #AB7136", +"}% c #C4680C", +"|% c #9E744A", +"1% c #7E7D7D", +"2% c #A89F97", +"3% c #AF947A", +"4% c #B09375", +"5% c #A99C8E", +"6% c #A29D97", +"7% c #AA9078", +"8% c #AC8E6E", +"9% c #A69482", +"0% c #9E9D9D", +"a% c #8A837C", +"b% c #977E64", +"c% c #9B7C5E", +"d% c #8F8070", +"e% c #827E7A", +"f% c #907860", +"g% c #957757", +"h% c #8D7A67", +"i% c #7F7E7D", +"j% c #4E4E4D", +"k% c #424243", +". + + + @ @ + . . . . + + @ # # @ @ @ @ @ # # # $ # % $ $ $ % % % & & % % * & & * * * = = = - = - - ; ; > , , , , > ' ) ) ' ) ) ! ! ! ! ~ ~ { { ] ^ ^ / / ^ ^ / ( ( ( _ : _ _ _ _ < [ < < } | 1 | | | 2 2 2 2 3 3 4 4 4 5 5 5 6 6 6 7 8 7 7 9 7 0 a 0 a a a a b b c c c d d d d e f f f g g h i h i j k j k k l l l m m n n o o o p o q q r s t r u t t v u v v w x w w w w y z z A z A B B C C D D E D E F F G H I H I H J K J L K M L M M M N N O P P P Q Q R R R S T S U U S V V V W X Y Y Y X Z Z Z ` ` ` . . .....+.+.@.@.@.#.@.$.$.%.%.&.&.*.*.*.=.-.-.-.;.;.;.;.>.>.,.,.,.'.).!.!.~.{.{.].^.^././.(._.:.<.[.[.}.|.1.2.3.3.4.5.5.6.7.8.8.9.0.a.a.b.c.d.e.e.f.f.g.h.h.i.j.k.k.l.m.n.o.o.o.p.p.q.r.r.r.s.t.t.u.v.v.w.w.x.y.z.A.B.C.D.E.F.G.G.H.I.I.I.J.K.K.L.M.M.M.N.O.P.O.Q.R.S.R.T.U.U.U.V.W.W.X.Y.Z.Z.`. + +.+++++++@+#+$+%+%+%+&+*+*+=+-+-+-+;+>+;+,+'+'+)+)+)+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.z.z.y.s.}+k.b.1.}.}.}.}.}.}.|+|+|+8.8.8.1+[.[.[.|.9.h.h.0.|.<.<.2+<.<.<.<.3+3+3+3+3+3+3+3+3+:.:.3+:.:.:.:.<.4+f.g.8.<.:._._._._._.(.(.(.(.(.(.(.(.(.(././.(.(.:.5.5+f.j.m.n.n.n.n.m.m.m.m.m.m.m.", +"6+. 7+7+6+6+. 6+6+6+6+6+6+. . . . . . . . . . . @ + @ + @ + @ @ # $ $ $ $ $ $ $ % % & % % * & * = = = = - ; > > > ; , , , > , ' ' ) ' ) ) ! ~ ~ ! { { ^ ^ { { ^ / ^ ^ : ( : : : : [ _ _ [ < } | } } } 1 1 | 1 2 2 3 3 3 8+8+8+5 5 5 8 6 8 8 7 8 9 0 9 0 0 0 0 a a 9+9+9+c d c c d e e e f f g h g h i j i j j k k k l l m m p p p p p o o s q r s t u r u t u u x v x y x w w y y z A z A A B B C C D E D E E F G H G H I I J I K J L K L N L M M N O O O P R Q Q Q T R T S S S U U U V W X X Z X Y Y Y 0+0+0+` ..` . .....#.#.#.@.#.@.@.$.$.%.%.&.*.&.*.=.=.=.-.-.a+;.a+a+>.>.>.b+'.).!.!.c+c+{.d+d+^.^./.(._.3+<.<.[.}.|.1.2.2.3.4.5.5.4+7.7.8.9.0.0.a.e+c.d.d.e.e.f.f+f+h.i.j.j.k.g+m.h+h+h+o.i+j+q.q.q.r.k+l+l+u.u.v.v.w.z.y.z.A.B.E.C.D.F.F.G.[+[+[+I.:+:+K.L.L.L._+P.N.P.O.(+R.S.S./+/+/+U.V.^+^+X.Y.Y.Z.`.]+]+{+{+{+++@+m+n+n+n+%+~+&+o+=+=+=+>+;+>+p+,+,+q+q+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.z.z.y.s.m.j.b.2.}.t+}.}.}.[.[.[.[.8.8.8.1+<.<.[.|.0.h.h.a.|.[.[.[.[.[.[.<.<.<.<.<.3+<.<.<.<.3+3+3+3+3+3+3+[.7.f.g.7.<.:._._._._._.(.(.(.(.(.(.(.(.(.(././.(.(.:.5.c.f.u+n.n.n.n.n.m.m.m.m.m.m.m.", +"v+7+w+w+v+v+7+v+v+v+v+v+v+7+7+7+v+v+v+7+v+v+7+7+6+7+. 6+. . + . + @ @ @ @ # @ @ # # $ $ $ & % & & & * & = = - - ; - > > > ; ; > > , , ' ' ) ! ! ) ~ ~ ] ] ] ] { ^ { { / / / ( ( : _ : : _ _ < < < < } | | } | 1 1 2 2 3 4 4 3 8+4 8+5 5 8 8 8 6 7 7 7 7 9 0 0 0 0 b b b 9+c 9+c c d d d e e f g g g h i h i i j j k k k l l n n n n p p p q o s q r t r t r t t v u v w x x x w w y z z B z A A B B C D D D D E F G G G H J I H J J K K K M L L M M O N O O Q Q P Q R R R T T S U S U U W W W Y X Y X Y Z Z 0+0+ .` .` ...+.#.+.#.#.#.@.@.$.$.%.%.=.&.&.=.*.=.=.-.;.;.a+;.>.a+,.,.b+'.).!.~.~.{.].].d+^.^./._.:.3+3+[.[.}.1.1.1.2.3.4.5.4+4+7.7.8.9.0.a.b.c.c.c.d.e.f.g.f+f+h.i.j.k.l.g+n.o.n.h+p.i+j+j+q.q.k+t.t.l+l+w.u.w.y.x.y.z.A.C.C.D.D.F.F.H.H.[+I.<+:+:+K.K.L.M.N.N.N.P.(+R.R.R.T.T./+U.V.W.W.^+X.Y.Z.`. + +.+.+{+++@+#+$+%+$+n+*+&+~+o+-+o+>+>+>+;+p+,+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.z.z.y.s.m.j.b.3.}.t+}.}.}.[.[.[.[.8.8.8.[.[.<.[.|.0.h.i.c.4+5.4.5.4.5.5.4.4.3.4.3.4.4.3.4.3.4.3.3.3.2.3.3.4.0.f.f.7.[.:._._._._._.(.(.(.(.(.(.(.(.(.(.(.(.(.(.:.5.c.f.u+m.n.n.n.n.m.m.m.m.m.m.m.", +"x+y+x+x+y+y+y+x+x+x+x+x+x+y+y+y+x+x+x+y+y+y+w+w+v+w+7+v+v+7+6+7+7+6+. 6+6++ . + + @ @ @ @ # # # $ $ & % * * * * = * - - ; - ; ; ; > > > , , ) ) ) ! ! ! ~ ! ~ ~ { ] ^ ^ ^ ^ ^ / / : ( _ : _ _ [ [ [ < } | | | } | | 1 2 3 4 4 4 4 4 8+8+6 6 8 8 8 8 8 7 7 9 9 a 0 a a a b 9+c 9+d d d d d e e g f h i h h h j i k k l l l l m n n n p p o o o q q s r r t t t t u u v x x x w w w y y z A A A A B B C C D E E E F F F G H I J I I I K K K L L M M M N N O O P R Q Q R R R T S S V U U U V X X X X Y Y Y 0+0+0+0+` ` .. .....+.+.+.#.@.@.@.$.$.$.%.&.*.*.*.*.*.=.-.;.;.;.a+a+a+>.,.,.,.b+'.!.c+c+c+].].d+^././.(.:.:.3+<.}.}.|.1.1.2.3.5.5.6.6.7.8.8.0.0.a.a.e+d.c.d.e.f.f.f+h.h.i.j.k.l.g+m.h+h+h+o.j+i+j+q.r.s.k+l+t.l+v.v.v.x.y.y.z.B.C.E.E.D.F.G.H.H.[+I.J.<+K.K.K.M.M._+N.P.P.Q.(+R.S.S.T./+U.V.W.^+^+Y.Z.Z.`. +]+.+{+{+++@+#+m+n+n+%+&+*+*+o+=+=+-+>+;+;+p+'+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.z.z.y.z+m.u+e+1.}.t+t+}.}.[.[.[.[.8.8.8.[.[.[.[.1.9.h.j.f+f.e.f.e.f.e.e.f.d.e.d.d.e.d.e.d.d.d.c.e.c.d.c.c.d.e.g.f.7.[.:.A+_._._._.(.(.(.(.(.(.(.(.(.(.(.(.(.(.:.5.d.g.j.m.n.n.n.n.m.m.m.m.m.m.m.", +"B+B+B+B+B+B+B+B+B+B+B+C+C+C+C+C+x+x+x+x+y+y+y+w+w+w+w+w+v+v+v+7+7+6+6+. . . . . + + @ @ # # $ $ $ $ % % & & * * = = = = - - ; ; > , , , , ' ' ) ) ! ! ~ ~ ! ] ] { { ^ ^ ^ / ^ / ( : : _ _ _ [ [ [ < } } | | | | | | 2 3 3 4 4 8+4 4 8+5 6 6 8 6 7 8 8 7 9 0 9 a 0 b a a 9+9+c 9+d d d d d e e g f h i h h h j i k k k l l l m n n p p p o o q s q r r r t t t t v u v x x x w w y y y z A A A A B B C C D E E E F F F H H I J I I I K K K M L M M M O O O P P R Q Q R R R T S S V U U U V X X Y X Z Y Y 0+Z 0+0+` ` . . ...+.+.+.#.@.@.@.$.$.$.%.&.*.*.*.*.*.=.-.-.;.;.a+a+a+>.>.,.,.b+'.!.c+~.c+].].d+^././.(.:.:.3+[.}.}.|.1.1.2.3.5.5.6.6.7.8.8.9.0.a.a.c.d.c.e.f.f.f.f+h.h.j.j.k.l.g+n.h+h+o.o.j+i+j+q.r.s.k+l+t.l+v.v.v.y.y.y.z.A.C.C.E.D.F.G.H.[+I.I.<+<+:+K.L.M.M.N.N.P.O.Q.R.R.S.S.T./+U.V.W.^+X.X.Y.Z.`. +]+.+.+++++@+#+m+n+n+n+*+*+*+o+=+=+>+>+;+;+,+,+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.F.D+q.j.a.8.8.8.8.8.8.8.8.8.8.8.8.<.[.[.[.|.9.h.E+i.i.i.i.i.j.j.j.i.i.i.h.i.i.i.h.h.F+h.h.h.f+f+f+f+f+g.g.f.7.<.:._._._.(._.(.(.(.(.(./.(.(./.(././.(.(.:.6.d.g.j.n.n.n.n.n.m.m.m.m.m.m.m.", +"G+G+G+G+G+G+G+G+H+H+H+H+H+I+I+I+I+B+B+B+B+B+C+C+C+x+x+y+y+w+w+w+w+w+v+v+7+7+6+6+. . . . + @ @ # # $ $ $ $ % % & & * * = = = - - ; ; > > , , , ' ' ) ) ! ! ~ ~ ~ ] ] { { ^ ^ / / / ( ( : : _ _ [ [ [ < < } } | 1 1 1 1 2 2 3 4 4 8+8+4 8+5 5 6 8 8 7 7 7 7 9 0 0 a a b b b 9+9+c c d d e e e f f g g h i i i i j j k l l m m l m n p p o o o q q s s r r r t u u u v v v x w y y y y z A z B B B B C D D E E F F E G G H H H I J I J K K L L M N N N N O O P Q Q R R Q R T S S U U V V V W W X X Y Z Z Z Z 0+0+` . ...........#.#.@.@.$.$.$.%.%.&.&.&.*.=.*.=.-.-.;.;.a+>.>.a+>.,.b+b+'.).!.~.c+{.].d+d+^./.(._._.3+3+<.[.[.|.|.2.2.3.4.6.4+4+7.8.9.0.a.b.b.e+c.d.e.f.g.g.f+h.i.j.k.l.l.g+m.h+o.o.p.i+i+j+r.s.r.s.t.l+u.v.w.w.x.y.z.A.B.B.E.E.D.F.H.G.[+I.J.J.:+K.:+L.M._+_+P.O.O.O.(+R.T.S./+U.V.V.W.X.X.Y.Z.`.`.]+.+]+{+++@+@+m+m+$+%+%+&+*+*+~+o+-+-+>+p+p+,+'+'+q+)+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.P.F.J+j+j.a.8.7.7.8.7.7.7.7.7.7.K+7.<.1+[.[.}.4+c.d.e.g.i.j.l.m.}+m.m.g+g+g+g+g+g+L+g+j.i.h.f.e+c.b.e+e+b.e+0.4.3+:._.(.(.(.(.(.(.(./.(./././././././././.:.5.c.g.k.n.n.n.n.n.m.m.m.m.m.m.m.", +"M+N+M+M+M+N+N+M+N+N+N+N+N+O+O+O+O+G+G+G+G+H+H+I+B+I+B+B+B+C+x+x+x+y+w+y+y+v+w+v+v+7+6+6+6+. . . + + # # $ $ $ % % % & * = * * * = = - ; ; > > , > ' ' ) ! ) ! ! ~ ! ~ { ] { { ^ ^ / / / ( ( : _ _ _ _ < < < < } | | | | 1 2 2 4 3 4 4 4 8+8+6 5 8 8 8 8 8 7 7 9 9 0 a a a b b b 9+c c d d d d e f f h h h h h i i j j k k l l l m m n n p q o o o q s s t r t t t t u x v x x w w w y y z z A A A B B C C D E E E F F F G I H I I I J J K K L L M M M N N O P P Q Q Q Q R R T S S U U U V V W W X Y Y Y Y Z Z 0+` ` . . . ...+.+.#.#.@.@.@.@.$.%.%.&.&.*.*.*.=.=.-.-.;.a+a+a+a+>.>.,.b+'.).!.~.~.{.].].d+^././.:.:.:.3+<.[.}.1.1.1.2.3.4.6.6.4+7.8.8.9.a.a.b.e+c.c.d.f.f.g.f+h.h.j.k.k.l.g+n.n.h+o.p.i+i+j+r.r.s.k+t.t.u.v.v.w.x.y.y.A.B.C.E.E.D.F.G.H.[+I.I.<+:+:+K.L.M.M._+P.P.O.Q.(+R.S.T./+U.U.V.W.^+X.Y.Z.Z.`. +]+.+{+++++@+$+$+n+n+%+&+*+~+o+=+=+-+>+;+p+,+'+'+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.P+k+j+j.a.7.7.7.7.7.7.7.7.7.7.7.7.<.<.<.<.[.1.2.4.4.a.h.j.h+q.s.s.r.q.r.q.q.q.q.q.i+n.i.Q+a.3.|.1.1.|.1.}.|.[.:._.(.(.(.(.(.(.(.(././././.(././././././.:.4.c.g.u+m.n.n.n.n.m.m.m.m.m.m.m.", +"R+S+T+T+R+S+S+R+R+R+R+S+S+M+M+N+M+N+N+N+N+O+O+G+I+H+I+I+I+I+C+B+C+y+y+x+x+w+y+w+w+v+7+7+7+6+6+6+. . @ @ # # # $ $ $ % & * * & & * * = - - ; , > ; , , ) ) ' ) ) ! ) ! ] ~ ] ] { { ^ ^ ^ / / _ : : : : [ [ < [ < } } } } 1 1 1 3 2 3 4 3 4 8+5 8+6 6 6 6 6 8 8 9 7 0 0 0 a a a a b 9+9+c c c c e e e g g g g g h h i i j j k l l l l m m n o p o p q q q r s r r t r t v u v v x x x y w z y z z z A A B B C D D E E E E F H H H I H I I J K K K L L N M M N O P P P Q P Q Q R T S S S S U V V W W X X X Y Y Y Z 0+0+` ` ` ` ......+.+.#.#.#.#.@.$.$.&.%.&.*.&.*.*.=.=.-.;.;.a+;.a+a+>.,.b+'.!.!.!.c+{.{.].d+^.^._.3+_.3+<.[.[.|.|.|.1.2.3.5.5.6.4+7.7.8.0.0.b.e+e+e+c.e.e.f.g.f+f+i.j.j.k.g+m.m.n.h+p.i+p.i+q.r.s.k+l+k+l+u.u.w.w.x.x.z.B.B.E.C.E.D.G.G.H.[+I.J.<+:+:+K.L.M.M.N.N.O.Q.Q.(+S.S.T./+/+U.V.W.^+X.Y.Y.Z.`.]+]+.+{+{+++m+$+$+$+%+%+*+~+o+o+=+=+-+>+;+p+'+,+'+)+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.U+}+j.a.2.}.[.[.[.[.1+[.1+[.<.[.[.<.<.<.<.<.[.<.[.|.9.h.k.o.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.8.<.:.:.:.:.:.:.:._._._.(.(.(.(.(.(.(.(./././././././.^./././._.5.d.g.j.m.n.n.n.n.m.m.m.m.m.m.m.", +"V+V+W+W+V+V+T+V+V+V+V+T+T+S+S+M+S+M+M+M+M+N+N+O+H+G+I+H+H+H+B+I+B+x+x+x+x+y+x+y+w+w+v+v+6+. 7+6+6+. + + @ # # # % # & % & & * * & * * = - - > > > > , ' ' ' ' ! ~ ! ~ ~ ] ~ { ] { ^ { ^ ^ / : : : : : _ [ [ [ } < } } } 2 2 2 2 2 2 4 3 4 8+8+8+5 8 8 8 8 6 8 7 9 0 0 0 b b b b b c c 9+c c c e d e f g g g g g i h i j j l m m m m n n n p p o p s s s s s t t t t t u u v v w w w w w z y z z z A A B B C C E E E E E F G I I I I I I I K K K L L M M M N O P O P Q P Q Q R R S S S S U V U W W X X X Y Y Y Z 0+0+` ` ` ` +.+.+...+.#.#.#.#.@.@.%.&.%.&.=.&.=.=.=.=.-.;.;.a+;.a+a+>.>.b+).!.!.!.c+c+{.d+d+^.^.(.:.:.3+[.}.[.}.1.1.2.3.4.5.5.6.4+7.7.8.9.0.e+e+e+e+c.e.e.f.g.f+f+h.j.j.l.m.n.m.n.h+p.i+p.i+j+r.s.t.t.t.l+u.u.w.w.x.x.y.B.B.D.C.D.D.H.H.[+I.I.J.<+K.K.L.L.M.M.N.N.Q.(+(+(+S.S.T./+/+U.V.W.^+Y.Y.Y.`.`.]+]+{+{+{+++m+$+$+$+%+%+~+o+=+=+=+=+-+>+;+,+q+'+q+)+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.j.a.1.}.[.[.[.[.<.<.<.[.<.<.<.<.<.<.<.<.3+3+3+}.9.f+k.p.t.l+l+t.k+k+k+k+k+k+k+r.h+E+g.7.<._._._._.(._.X+_._.(.(./.(.(.(./.(././././././././.^.^.^.^.:.5.d.f.j.n.n.n.n.n.m.m.m.m.m.m.m.", +"W+W+Y+Z+W+W+V+W+V+V+T+T+T+S+S+M+S+M+M+M+N+N+O+O+H+G+I+H+H+H+B+B+B+x+x+x+x+y+y+y+w+w+v+v+7+6+7+6+6+. + + # # # # $ # % & & & & & & * = = - - > > ; , , ' ' ' ' ) ! ) ! ~ ] ~ ] { { ^ { ^ ^ / : : : : : [ [ [ [ < < } } } 1 1 1 2 3 3 4 3 4 8+8+8+6 6 6 6 6 6 8 7 7 0 0 0 a a a a 9+9+9+c c c c e d e g g g g g g h i i j j k m m m l m m n o p o p q q q r s r r t r t v v v v x x x w w z y z z z A A C B C D D E E E E G H H H I H I I J K K K L L N N N N O P P P Q P Q Q R T S S S S U V V W W X X X Y Y Y 0+0+0+ .` ` ` ......+.+.#.#.#.#.$.$.$.&.%.&.*.&.*.*.=.=.-.a+;.a+;.a+a+,.,.b+'.!.!.!.{.{.{.].d+^.^._.:._.3+<.[.}.|.|.|.1.2.3.6.5.6.4+7.7.9.0.a.b.e+e+e+d.e.e.f.g.f+f+i.k.k.k.g+m.n.n.h+p.i+p.i+q.s.s.k+t.k+u.v.u.w.w.y.x.z.B.B.D.C.E.F.G.G.H.[+I.J.:+:+:+K.L.M._+P.N.O.Q.Q.(+S.S.T./+/+U.W.W.^+X.Y.Y.Z. +]+]+.+{+{+@+$+$+$+$+%+%+*+~+o+o+=+=+>+>+;+p+'+,+'+r+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.i.b.2.[.[.1+[.[.<.<.<.[.<.<.<.<.<.<.<.3+3+3+<.}.8.f+k.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.7.<._._._._.(.(.(.(.`+(.(.(.(.(.(.(./././././././././././././.:.4.c.g.k.m.n.n.n.n.m.m.m.m.m.m.m.", +"T+R+T+T+R+R+R+T+T+T+R+R+R+M+M+N+M+N+N+N+O+O+G+G+I+H+B+I+I+I+C+C+C+y+y+y+y+w+w+w+v+v+7+7+7+6+6+. . + @ @ $ # # $ % $ & * * * & & * = - - ; ; > > > ' ' ) ) ' ) ) ! ! ! ] ~ ] { ^ { ^ ^ ^ / ( _ _ : : : < < < < < } } } | 1 2 1 3 2 4 4 3 8+8+5 8+8 8 6 6 6 8 8 9 9 0 a 0 a a a b b c 9+d c c d e e e h g h h g h h j i j k k l l l m m n n q p o o q s q t s r r t t t x u v x x x x y w z z z z z A A B C C E D E F E F F I H H I H J I K K L L L L M M M N P P Q P Q P Q R R S S S S S V V W W W Y X X Y Y Y Z ` 0+..` ` ` ..+...#.+.#.#.#.@.@.%.$.&.&.&.=.&.=.*.-.-.-.>.;.a+;.a+>.>.b+b+'.!.!.~.].].{.].d+^./.:.:._.3+[.[.|.1.|.|.1.3.4.4+5.6.4+7.8.0.a.0.b.e+e+c.e.e.e.f.f+f+h.j.j.j.k.m.n.h+n.h+p.i+i+j+r.r.s.k+t.t.v.u.u.w.w.x.y.A.B.B.E.E.D.G.G.G.H.[+J.<+K.:+:+K.L._+N.N.N.O.Q.(+R.S.S.T./+U.V.^+W.^+X.Y.Z.`.]+]+]+.+{+++#+m+$+$+$+&+&+*+~+o+=+-+-+;+>+;+p+'+'+q+s+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.U+m.j.b.|.[.[.1+<.<.<.<.<.<.<.<.<.3+3+3+3+3+3+3+3+}.9.h.k.p.t.l+l+t.k+k+k+k+k+k+k+r.n.i.g.8.<._._._._.(.(.(.(.5.5.5.4.4.5.5.5.4.4.4.4.4.4.4.4.4.4.4.3.4.6.e.n.i+w.G.n.n.n.n.m.m.m.m.m.m.m.", +"S+M+R+R+S+M+M+S+S+S+M+M+M+N+N+N+N+N+N+O+O+G+G+H+I+H+I+I+I+B+C+C+C+y+y+x+y+w+w+w+v+v+7+7+7+6+6+. . + @ @ # # # $ % $ & & * * & & * = = - - ; > > > , ' ' ) ' ) ) ! ! ! ] ~ ] { ^ ^ ^ ^ ^ / ( : _ : : : [ < [ < < } } } | 1 2 1 3 2 4 4 3 8+8+5 8+6 8 6 6 6 8 8 7 9 0 a a a a a b b c 9+d c c d e e e h g g g g h h j i j k k l l l m m n n q p o o q s q t s r r t t t x u v x w w x y w z z z z z A A B C C E D E F E F F I H H J H J I K K L L L L M M M N P P Q P Q P Q R R S S S S S V V W W X Y X X Y Y Y Z ` 0+..` ` ` ..+...#.+.#.#.#.@.@.%.$.&.&.&.*.&.*.*.=.-.-.>.;.a+;.a+>.>.,.b+'.!.!.~.].].{.].d+^./.:.:._.3+[.[.|.|.|.|.1.3.4.4+5.6.4+7.8.0.a.0.b.e+e+c.e.e.e.f.f+f+h.j.j.j.k.m.n.h+n.h+p.i+i+j+r.r.s.k+t.t.v.u.u.w.w.x.y.A.B.B.E.E.D.G.G.G.H.[+J.<+K.:+:+K.L._+N.N.N.O.Q.(+R.S.S.T./+U.V.^+W.^+X.Y.Z.`.]+]+]+.+{+++#+m+$+$+$+&+&+*+~+o+=+-+-+;+>+;+p+'+'+q+s+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.j.a.1.[. @<.<.<.<.<.<.<.<.<.<.3+3+3+3+3+3+3+3+}.8.f+k.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.7.3+_._._.(.(.(.(.(.5.5.5.4.4.4.4.5.4.4.4.4.4..@4.4.4.4.4.3.4.6.e.n.i+w.G.n.n.n.n.m.m.m.m.m.m.m.", +"N+O+N+N+O+O+O+N+O+O+O+O+O+H+H+H+H+H+H+H+H+H+I+I+C+B+C+C+C+x+y+x+x+w+w+w+w+7+v+7+7+7+7+6+6++ . + + @ # @ $ $ % % & % * * * & * = = - - ; ; ; > , > ' ) ) ! ) ) ) ~ ! ~ { ] { ^ { { / / / ( ( _ [ : : _ < < < < } | } | | 2 2 2 3 3 3 4 4 8+5 5 5 8 7 6 6 8 8 7 9 9 a b 0 a b b b 9+c c c c d d f e f g h g g h h i i j k l k l m l m n n p q o o o s s s r r r r u t u v v v w x x w w y z A z z A A B B D D E E E G E F G H I H I H J J J L K M L L N M N N Q Q P P Q Q Q T T T U U U S W W V X W Z Y Y Z Y Z Z .0+ .` ` ...#...+.#.#.#.#.$.$.$.%.&.*.&.*.*.*.=.=.;.-.a+;.a+a+a+,.>.b+'.).~.!.~.{.{.].d+^.^./._.:.:.<.}.[.}.1.|.1.2.3.4.4+6.4+7.7.8.9.a.a.e+c.e+c.d.f.f.g.h.f+h.i.k.k.l.m.n.n.h+o.i+i+i+j+r.s.k+t.t.t.u.u.v.x.x.x.y.z.C.C.E.E.D.F.G.H.[+[+J.<+K.K.K.L.L._+_+N.P.Q.(+(+S.S.T./+/+U.V.W.W.X.Y.Z.Z.`. +]+.+{+{+++@+m+n+n+n+&+*+*+~+=+=+>+-+;+>+p+,+'+'+q+r+)+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.i.a.1.[.[.<.<.<.<.<.<.<.<.<.<.<.3+3+3+3+3+3+3+}.8.f+k.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.f.7.<._._._.(.(.X+(.(.5.5.5.4.4.4.4.5.4.4.4.4.4.4.4.4.4.4.4.3.4.6.e.n.+@x.H.n.n.n.n.m.m.m.m.m.m.m.", +"G+H+G+G+H+H+H+G+H+H+H+H+H+9+!._._._._._._._._._.:.:.:.:.:.:.3+(.$.f 6+7+7+6+7+6+6+. & Y [.}.}.}.}.}.|.}.|.1.1.1.1.1.1.1.1.^.V } - ; ; ; > > ' ' ' ) ! 9+%.<.5.5.6.6.6.4+6.6.6.4+4+7.6.{.C [ _ _ _ _ [ } } } @@#@$@%@&@*@3 3 3 4 3 3 8+4 5 6 6 6 7 8 6 =@-@;@>@,@0 b a a b 9+B 5.e.f.f.e.<.` g f f f h i g h h i i j k l n $.2.i.i.i.i.a.O o p q q s r s t L <.g.g+g+g+m.g+m.m.m.m.m.n.n.n.b.;.C A B B C C E D D '@)@!@~@{@]@J H I I K J K L L L L M N N N ^@/@(@_@:@R Q R R S S V S S U V X W X X Y X X 0+Z Z 0+` ` .` . .+.+.+.+.@.#.#.@.@.%.$.%.*.&.&.*.=.*.=.-.-.;.a+;.a+a+>.>.,.b+'.!.~.~.c+].{.].^.^./.(.:.:.:.[.[.}.|.2.|.2.3.4.5.6.6.4+8.8.9.0.0.a.e+d.c.d.e.e.f.f+f+h.i.j.j.k.g+n.h+n.h+o.j+j+j+q.q.s.k+l+l+l+v.u.v.x.y.y.z.A.C.E.E.D.F.F.H.H.I.I.<+:+:+K.K.M.M.N.N.N.P.Q.(+R.R.T.T.U./+V.W.W.^+X.Z.Y.`. + +.+.+++{+@+#+$+%+$+n+*+&+~+o+-+o+-+>+>+;+p+'+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.r.<@j.a.1.[.1+<.<.<.<.<.<.<.<.<.<.<.3+3+3+3+3+3+3+[.8.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.8.3+_.(.(.(.(.[@(.(.4.4.4./././././././.^.^.^.^.^.^.^.^.^.^.^.(.4.c.i+w.G.n.n.n.n.m.m.m.m.m.m.m.", +"B+C+B+B+C+C+C+B+B+B+C+C+y r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+I.f 6+. . . + @ A.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+p+2.~ > > , , ) ) ) 4 n.s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+Q.E [ [ [ < | | }@|@1@1@1@1@2@3@4 3 4 4 4 5 8+6 8 8 6 8 4@5@1@1@1@1@6@7@8@b a 9+K p+!+!+!+!+!+!+!+`.-.g g i h h h i j j k l b+]+!+!+!+!+!+!+!+;+U o s q r t B t.r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+`.).B C D D D D 9@0@1@1@1@1@a@b@c@J J L K K M M L M M O d@e@1@1@1@1@f@g@h@R T T U U S U U W W W Y Y Y X Y Z Z 0+0+ . . .` ...#.#.+.#.#.#.@.@.$.$.%.&.=.&.&.=.*.=.-.-.;.a+a+;.>.>.>.,.b+'.).~.c+c+{.d+].d+/./.(._.3+3+3+}.}.|.1.1.1.2.3.5.5.4+4+7.7.9.0.0.a.b.c.c.d.e.e.f.g.h.f+i.j.j.k.l.g+h+o.h+o.p.i+q.q.q.r.k+t.t.u.u.w.v.w.y.x.y.A.B.E.C.D.D.G.G.[+[+[+I.:+K.K.L.L.L.M.P.P.P.O.(+R.S.R./+/+/+U.V.^+^+X.Y.Y.Z.`.]+]+{+{+{+++@+#+n+n+n+%+~+&+o+=+=+=+>+;+>+p+,+,+q+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+@+++++{+{+.+.+.+]+]+]+ +`.`.`.Z.Z.Z.Y.Y.X.X.^+^+^+W.W.V.V.V.U.U.U./+T.T.T.S.S.R.R.(+(+(+Q.Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.C.B.B.B.B.A.A.A.A.A.z.z.Q.O.N.s.m.j.a.1.[.<.<.<.<.<.<.<.<.<.<.<.3+<.3+3+3+3+3+3+}.8.f+u+p.t.l+l+t.k+k+k+k+k+k+k+r.i@i.g.8.3+_._.(.(.[@(.(.(.4.4.4./././././././.^.^./.^.^.^.^.^.^.^.^.X+4.d.i+w.G.n.n.n.n.m.m.m.m.m.m.m.", +"y+w+y+y+w+w+w+y+y+y+y+y+u.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+>+x @ @ @ # d !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+B.{ ' ' ) ! ~ 5 V.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+'+V < } } 1 j@k@1@1@1@1@1@1@1@l@4 8+8+8+6 5 8 7 7 8 m@n@1@1@1@1@1@1@1@o@9+b c l.!+!+!+!+!+!+!+!+!+!+|.h i i i i j k k l 5.!+!+!+!+!+!+!+!+!+!+m.q r s t E V.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+r+}.D E E E p@q@1@1@1@1@1@1@1@r@s@K L L L N M M N N t@u@1@1@1@1@1@1@1@v@T S S U U U V V X X X Z Y Y Y Z 0+0+` ` .. ... ...+.#.@.#.@.@.@.$.$.%.%.&.*.*.*.*.-.=.-.;.;.a+a+a+a+,.,.,.b+'.).!.~.{.{.].d+d+^./.(._.:.3+<.<.[.|.1.2.2.2.3.4.6.6.7.7.8.8.0.a.a.b.e+d.d.e.f.f.g.f+h.h.j.k.k.l.g+m.h+o.o.p.i+j+q.r.r.s.t.l+l+u.v.w.w.x.z.y.z.B.C.D.E.F.F.G.H.I.I.I.J.:+:+L.M.M.M._+P.P.O.Q.R.S.S.S.U.U.U.V.W.^+X.Y.Z.Z.`. +]+.+++++++@+#+m+%+%+%+&+*+*+=+-+-+-+;+;+;+,+'+'+)+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+*+*+*+&+&+%+%+%+%+n+n+n+$+$+$+$+m+m+m+m+#+#+#+#+@+@+@+++++++++{+{+{+.+.+.+.+]+]+]+ + + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.s.m.j.a.1.[.<.<.<.<.<.<.<.<.<.<.<.3+<.3+3+3+3+3+3+}.7.f+j.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.4+3+_._.(.(.(.(.(.(.4.4.4./././././././.^.^././.^.^.^.^.^.^.^.X+4.c.p.w.H.n.n.n.n.m.m.m.m.m.m.m.", +"6+7+7+7+7+6+6+6+6+6+6+6+O.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+&+_ $ % % u !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+5.! ~ ~ ~ ~ A.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+o+i 1 1 1 2 w@x@1@1@1@1@1@1@1@y@6 6 8 8 7 7 7 7 z@x@1@1@1@1@1@1@1@A@9+c c d u.!+!+!+!+!+!+!+!+!+!+r+U j j k k l m m 0+s+!+!+!+!+!+!+!+!+!+!+y.r t t u B.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+,+..E F F G B@C@1@1@1@1@1@1@1@D@L M M N M N O O E@F@1@1@1@1@1@1@1@G@H@U V V U V W W X Y Y Z Y Z Z 0+` ` . ... ...+.+.#.#.@.@.$.@.$.%.%.&.&.*.*.*.*.=.-.-.;.;.a+>.a+a+>.,.,.b+'.).!.~.c+c+].d+d+^./.(.(.:.3+3+<.[.}.}.1.2.2.3.4.5.6.4+7.8.9.9.0.a.b.e+c.d.d.e.g.g.f+h.i.i.j.l.l.g+m.n.h+o.p.i+j+j+q.r.r.k+t.l+l+u.v.v.x.y.z.z.A.B.C.D.D.F.G.H.H.[+J.J.<+:+K.K.M._+_+N.P.O.O.(+R.S.T.T./+U.V.W.^+X.X.Y.Z.`. +]+.+.+{+@+@+#+m+$+n+n+&+*+~+~+o+=+=+>+;+p+p+,+'+'+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+*+*+*+&+&+%+%+%+%+n+n+n+$+$+$+$+m+m+m+m+#+#+#+#+@+@+@+++++++++{+{+{+.+.+.+.+]+]+]+ + + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.r.g+j.b.1.1+1+<.<.<.<.<.<.<.3+<.<.3+3+3+3+3+3+3+3+}.8.f+k.p.t.l+l+t.k+k+k+k+k+k+k+s.h+i.g.7.3+_.(._.(.(.(.(.(.4.4.4./././././././.^.^.^./.^.^.^.^.^.^.^.(.3.c.p.x.G.n.n.n.n.m.m.m.m.m.m.m.", +"6+. 6+6+. . . 6+6+6+. . O.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+1.% & & u !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+,+5 ! ~ ] B !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+d.| | 2 2 2 I@6@1@1@1@1@1@1@1@J@5 6 8 6 7 7 K@L@1@1@1@1@1@1@1@M@N@c c c d l+!+!+!+!+!+!+!+!+!+!+!+T.k j j k l l l S.!+!+!+!+!+!+!+!+!+!+!+y.s t t Y !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+A.E E E F G O@P@1@1@1@1@1@1@1@Q@M M M M M N R@S@1@1@1@1@1@1@1@T@U@T U U U U V W V W X Y Y Y Z Z 0+0+` ` . . .......+.+.#.@.@.@.@.$.$.%.%.*.*.*.*.*.=.-.;.-.a+a+a+a+>.,.,.,.b+'.).!.~.c+].].].^.^./.(.:.:.:.<.[.[.|.1.1.2.3.3.4.5.6.4+8.8.8.9.0.a.b.c.c.d.e.f.f.g.h.h.h.i.k.k.l.g+m.n.h+p.i+i+i+q.r.q.s.t.t.l+u.v.u.x.y.y.z.z.A.B.E.D.D.G.G.G.H.I.I.J.:+:+K.L.M.M._+P.P.P.Q.(+S.S.S.T.U.U.V.^+^+^+X.Z.Z.`.]+]+]+.+@+++@+#+m+n+n+%+*+*+~+~+=+=+-+;+;+;+p+'+'+q+r+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+~+*+*+*+*+*+&+&+%+%+%+%+n+n+n+$+$+$+$+m+m+m+m+#+#+#+#+@+@+@+++++++++{+{+{+.+.+.+.+]+]+]+ + + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.N.r.m.j.b.|.<.<.<.<.<.3+<.<.3+V@3+3+3+3+3+3+:.:.3+3+[.9.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.n.i.g.8.3+(.(.(././././.(.4.4.4./././././././.^.^./.^.^.^.^.^.^.^.^.(.4.c.p.w.G.n.n.n.n.m.m.m.m.m.m.m.", +"@ # @ @ # # # @ @ @ @ @ Q.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+W.* = = v !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!++.] { ^ 9.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+.+1 2 3 4 3 3 W@X@1@1@1@1@1@1@Y@Z@8 7 7 9 `@ #1@1@1@1@1@1@1@.#+#9+d d c e u.!+!+!+!+!+!+!+!+!+!+!+!+&.l k k k l $.!+!+!+!+!+!+!+!+!+!+!+!+z.r t r e.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+>+G F F G G I @###1@1@1@1@1@1@1@$#L M N N %#@1@1@1@1@1@1@*#=#S S S S U U W V W X Y Y X Z Y 0+Z 0+ .` ` ` .. .+.+.+.#.@.@.#.@.$.$.%.%.&.&.&.&.=.=.=.;.-.;.;.;.a+a+,.>.b+b+'.!.!.~.c+{.].].d+/./.(._._.:.3+[.}.}.1.1.2.3.5.5.5.6.4+7.8.8.0.0.a.b.e+e+c.f.f.f.g.f+f+h.j.j.k.l.g+m.n.h+p.i+p.i+j+r.s.s.k+k+l+u.v.v.w.y.x.y.A.A.B.C.E.F.F.G.G.H.[+J.J.<+<+K.L.M._+_+N.N.O.O.(+R.S.T.T./+U.V.W.W.^+X.Y.Y.`. + +]+.+{+++@+#+m+$+$+%+&+&+*+o+o+=+-+>+>+p+p+,+,+'+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.Q.O.N.s.m.i.0.|.<.<.<.<.<.3+<.<.V@V@3+3+3+3+3+3+:.:.3+:.[.8.f+j.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.7.3+(.(.(././././.(.4.4.4./././././././.^.^.-#^./.^.^.^.^.^.^.(.5.c.p.w.H.n.n.n.n.m.m.m.m.m.m.m.", +"& & & & & & & & & & % % Q.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+s+) ; ; w !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+3.^ / ( v.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+7 4 4 8+8+8+8+;#1@1@1@1@1@1@1@6@>#0 0 ,#'#1@1@1@1@1@1@1@)#!#d d e e e f u.!+!+!+!+!+!+s+!+!+!+!+!+J.l m m m n J.!+!+!+!+!+r+!+!+!+!+!+!+z.t u u w.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+W H H I I I J ~#Y@1@1@1@1@1@1@{#]#O O ^#/#1@1@1@1@1@1@1@(#_#U U U V V W W X X Y Y Y Z Z 0+0+` ` ... .....+.+.#.#.@.@.@.$.$.%.%.&.&.*.*.*.=.=.-.-.;.a+a+a+a+>.>.,.,.b+).).!.~.c+{.].d+^.^./.(._.:.3+3+<.[.}.|.1.1.3.4.5.6.6.4+7.8.9.0.0.a.b.e+c.d.d.e.f.g.f+h.i.i.j.k.l.g+m.n.h+o.p.i+i+j+q.r.s.k+t.t.l+u.v.w.x.y.y.z.A.B.C.E.D.F.G.G.H.[+I.J.<+:+:+K.M.M._+N.P.P.O.(+(+S.S.T./+U.V.W.^+^+X.Y.Z.Z.`.]+]+.+{+++++#+m+$+n+n+%+&+*+~+o+=+=+-+>+;+p+,+'+'+q+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.Q.O.N.D.k+i+i.9.4+4+4+:#4+4+4+6.4+6.:#4+4+4+6.6.6.6.6.6.7.g.o.r.B.K.M.M.M.L.L.L.L.L.L.L.:+B.q.o.g.4+5.4.<#4.4.4.3.4.4.4.4./././././././.^.^.^.^.^.^.^.^.^.^.^._.4.c.p.[#G.[+[+[+[+[+[+[+H.H.H.H.", +"= = = = = - - - - - - = (+!+!+!+!+!+m.- - - - - ; - ; ; ; ; 0 Q.!+!+!+!+!+!+< , , z !+!+!+!+!+!+B ! ~ ~ ~ ] ] ] { ] { _ *.!+!+!+!+!+!+g.( ( : <+!+!+!+!+!+'+K < } } } | | | 1 1 1 l _+!+!+!+!+!+!+e 8+8+5 5 6 6 8 }#1@1@1@1@1@1@1@|#1#2#.#1@1@1@1@1@1@1@3#4#e d e f f g g v.!+!+!+!+!+]+E p+!+!+!+!+!+S m n p V !+!+!+!+!+;+H @+!+!+!+!+!+z.u v v A.!+!+!+!+!+s+{.z A A A B A C B D D S P.!+!+!+!+!+!+0+I I I J J K J 5#1@1@1@1@1@1@1@##6#7#8#1@1@1@1@1@1@1@9#0#U U U U W W X X Y Y Y Y Z 0+0+` ` . . . . .+.+.#.#.@.@.@.@.$.%.%.&.%.*.*.*.*.*.-.-.;.-.a+>.a+a+a+,.>.,.b+).!.~.c+c+{.{.].^./.(.(._._.:.<.[.[.}.|.1.1.2.4.5.6.4+4+7.7.8.0.a.b.b.e+e+c.e.f.f.g.f+h.h.j.k.k.k.g+m.n.n.h+p.i+j+j+q.q.r.k+t.t.l+u.v.w.x.y.y.z.A.B.C.E.E.F.G.H.H.[+I.I.<+:+K.K.L._+_+N.P.P.O.Q.R.S.S.S./+U.V.W.^+^+^+Y.Z.`.`.]+]+]+{+++@+@+m+$+n+n+n+&+*+~+o+=+=+=+>+;+p+,+'+'+'+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.Q.O.N.D.s.j+i.9.:#:#6.6.:#6.6.6.6.6.6.6.6.6.6.6.6.5.a#a#7.f+p.r.A.:+M.M.M.L.L.L.L.L.L.L.:+b#q.o.f+4+4.4.4.4.4.c#3..@3.3.3././././.^.-#/.^.^.^.^.^.d+^.d+d+d+^.(.4.c.i+w.G.[+[+[+[+[+[+[+H.H.H.H.", +"- ; - - ; > > ; ; ; ; ; (+!+!+!+!+!+n.> , , > > , > ' , , , ' ^.!+!+!+!+!+!+| ) ) B !+!+!+!+!+!+C ~ { ] { ^ ^ ^ / ^ / / / $+!+!+!+!+!+f+: _ [ <+!+!+!+!+!+J.} } 1 | | 1 | 1 1 2 2 4 ].!+!+!+!+!+!+e 5 6 8 6 8 8 8 8 d#1@1@1@1@1@1@1@e#f#1@1@1@1@1@1@1@g#h#d e e f g h g i v.!+!+!+!+!+W.k n.!+!+!+!+!+v.n p p v.!+!+!+!+!+o.r X.!+!+!+!+!+A.v x x A.!+!+!+!+!+X.A A A B A B B C C D E E [.!+!+!+!+!+!+0+I I I J K L K L i#1@1@1@1@1@1@1@a@8#1@1@1@1@1@1@1@j#k#V U U V V W W X X Z Y Y Y 0+` 0+ .` .. . .....+.+.@.#.$.@.@.@.%.&.%.&.&.*.*.*.=.=.-.-.a+;.a+a+a+>.>.,.,.b+).).~.~.c+{.].].d+^.(.(._.3+:.3+<.[.[.|.2.2.2.4.5.6.4+7.7.8.8.9.0.b.b.e+c.c.d.e.f.f.h.i.h.i.j.k.k.l.m.n.h+h+o.p.i+q.r.r.r.s.t.l+t.u.v.w.x.y.z.y.A.B.C.D.E.D.F.G.[+[+J.I.J.<+K.K.L.M._+N.P.O.P.Q.(+S.S.S.T.U.V.V.W.X.^+X.Y.Z.`. +]+]+.+{+++@+#+$+$+n+n+%+*+~+o+o+=+-+-+p+p+,+,+q+'+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.Q.O._+D.t.j+h.9.4+4+6.6.6.6.4+6.6.6.6.6.a#6.6.6.6.6.6.5.7.f+p.q.B.K.M.M.M.L.L.L.L.L.L.L.:+A.l#o.g.4+4.4.4.4.c#c#3.4.3.3.3.^./.^./.m#^./.^.^.n#^.^.^.^.d+d+d+^.(.4.c.o#w.G.[+[+[+[+[+[+[+H.H.H.H.", +"' ' ' ' ' ' ' ' ' ' ' ) R.!+!+!+!+!+h+) ! ! ! ! ! ! ~ ~ ~ ~ ~ /.!+!+!+!+!+!+3 ] { D !+!+!+!+!+!+F / / / / ( ( ( : : : _ _ .+!+!+!+!+!+h.< } } :+!+!+!+!+!+A.1 2 2 2 3 3 4 4 8+8+8+8+{.!+!+!+!+!+!+i 7 7 7 7 9 9 0 0 p#q#1@1@1@1@1@1@1@1@1@1@1@1@1@1@x@r#g g h h i i i i j w.!+!+!+!+!+^+m M s+!+!+!+!+q+I q K q+!+!+!+!+r+O u X.!+!+!+!+!+A.w y y B.!+!+!+!+!+(+B B C C D D E E F F F F (.!+!+!+!+!+!+ .J K K L L M N N s#t#1@1@1@1@1@1@1@1@1@1@1@1@1@1@u#v#V V W W X X Y Y Z Z Z Z 0+` ` . .........+.#.#.@.@.$.$.$.$.%.&.&.*.*.=.=.=.=.-.;.;.a+a+>.>.>.>.,.b+b+'.).!.~.c+c+].d+d+^./.(.(._.:.3+<.[.}.}.|.1.2.3.4.5.6.4+4+7.8.9.0.a.b.b.e+c.d.d.f.g.g.f+h.i.i.j.l.l.g+m.n.h+o.o.i+j+j+q.r.s.s.t.l+l+u.v.w.w.x.z.z.A.B.C.E.D.D.G.H.H.[+I.J.J.<+K.K.L.M._+_+N.O.O.Q.(+R.S.T.T.U.V.V.W.^+X.X.Z.`.`. +]+.+.+{+@+@+#+m+$+n+%+&+*+~+~+o+=+-+>+;+p+p+,+'+q+q+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.s.m.i.0.|.<.<.3+3+<.3+3+3+3+3+3+3+:.:.w#w#:.:.:.:.<.7.f+j.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.f.4+3+(.(.(./././././.3.3.3.^.^.^.^.^.^.^.n#n#n#d+d+d+d+d+d+d+d+(.4.c.p.w.H.!+!+!+!+!+!+!+!+!+!+!+", +") ! ) ) ! ! ! ) ) ) ) ) R.!+!+!+!+!+o.! ! ! ! ~ ] ~ ] ~ ~ ] { /.!+!+!+!+!+!+4 { { D !+!+!+!+!+!+F ( : ( : _ _ _ _ : _ [ [ .+!+!+!+!+!+h.} } | :+!+!+!+!+!+A.2 2 4 3 3 4 3 4 4 8+8+5 ].!+!+!+!+!+!+h 8 9 9 9 9 0 0 0 0 8@.#1@1@1@1@1@1@1@1@1@1@1@1@x#y#f g g g g h i j i j w.!+!+!+!+!+W.l m A.!+!+!+!+!+j.o g+!+!+!+!+!+B.r u X.!+!+!+!+!+A.x w w B.!+!+!+!+!+(+B B B D C D D D D E E F (.!+!+!+!+!+!+` J J K K M M M L M z#A#1@1@1@1@1@1@1@1@1@1@1@1@{#B#S V V V V X W Y X Y Y Z Z Z 0+` .` . .......#.+.@.#.@.#.$.$.$.%.&.*.&.*.&.*.=.=.-.-.a+a+a+;.a+>.>.,.b+'.).!.~.~.{.{.].d+^.^./.(.:._.3+[.<.[.}.|.|.1.3.5.5.6.4+7.8.8.8.0.0.a.b.c.e+c.d.e.f.g.f+f+i.j.j.j.l.g+m.n.n.h+o.p.i+j+q.r.s.s.k+k+u.v.u.v.w.y.y.z.B.B.E.C.E.F.F.F.H.[+I.I.<+<+<+:+M.L.M._+P.P.O.Q.(+R.R.T.T./+/+V.^+W.^+Y.Y.Y.Z.`. +]+.+{+{+++@+m+$+n+n+%+&+&+*+=+=+=+-+;+>+p+'+'+'+)+)+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.0.|.<.<.3+3+<.3+3+3+3+3+3+3+:.:.:.:.:.:.:.:.<.7.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.h+F+f.7.:.(.(.[@/././././.3.3.4.^./.^.^.^.^.^.d+^.^.d+d+C#^.d+d+d+d+(.3.c.o#w.G.!+!+!+!+!+!+!+!+!+!+!+", +"{ ^ { { ^ ^ ^ { { { { { S.!+!+!+!+!+p.{ { { { { ^ ^ / ^ ^ ^ / _.!+!+!+!+!+!+6 ( ( G !+!+!+!+!+!+H _ [ _ < < < } } < | | a q+!+!+!+!+!+f+1 1 3 K.!+!+!+!+!+B.4 4 8+8+8+6 5 5 6 6 6 8 ].!+!+!+!+!+!+j 0 a a 0 a a a b b 9+!#D#1@1@1@1@1@1@1@1@1@1@f@E#g g h h i i j k l k l w.!+!+!+!+!+^+n p .!+!+!+!+!+=+K =+!+!+!+!+!+ .u v X.!+!+!+!+!+B.y z z C.!+!+!+!+!+(+D C D E D D E E F F G G _.!+!+!+!+!+!+..K L L L M N M N N P F#*#1@1@1@1@1@1@1@1@1@1@Y@G#U V W X W X Y X X Y Y Z 0+0+` ` . . .....+.+.+.@.#.#.@.$.$.%.%.%.&.*.*.*.*.=.=.-.-.;.;.;.;.>.>.>.b+b+'.).!.!.~.{.{.d+d+^.^./.(._._.<.<.<.}.}.|.|.1.2.3.6.6.6.7.8.8.9.0.0.a.b.e+e+d.d.e.e.f.f+f+h.i.k.k.k.l.m.n.n.h+o.p.p.i+j+q.r.k+t.k+t.l+v.w.w.x.x.z.A.B.C.C.D.D.F.G.G.H.[+[+<+<+:+:+K.L.M.M.N.N.O.Q.(+R.R.R.T.U./+U.V.^+^+^+Y.Z.Z.`. + +]+.+{+++@+#+m+$+$+%+&+&+*+~+o+=+-+-+>+p+p+'+'+q+q+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.H#j.0.|.<.<.3+3+3+3+3+3+3+:.3+3+:.:.:.3+:.:.:.:.<.8.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.n.i.g.7.3+_._.(.(.X+(.(.(.4.4.4.(.(.[@/.^././././.^./.^.-#/.^./.^./.(.4.c.p.w.G.!+!+!+!+!+!+!+!+!+!+!+", +"/ ( / / ( ( ( / / / / / S.!+!+!+!+!+p./ ( ( ( ( : ( : ( ( ( : <.!+!+!+!+!+!+7 _ _ I !+!+!+!+!+!+0.b+b+b+'.'.'.'.'.'.).].:+!+!+!+!+!+!+5.3 3 8+K.!+!+!+!+!+B.5 5 6 6 6 8 8 8 7 7 7 9 ^.!+!+!+!+!+!+l a 9+9+b 9+9+9+c c c e I#J#1@1@1@1@1@1@1@1@1@K#j i i j j k k k l m l n x.!+!+!+!+!+^+p o o O.!+!+!+!+!+X.!+!+!+!+!+N.v x w X.!+!+!+!+!+C.z A z C.!+!+!+!+!+R.E D D F E F F G H H H H :.!+!+!+!+!+!++.L L M M O O O O P Q Q L#M#1@1@1@1@1@1@1@1@1@N#V V W X Y X X Z Y Z Z 0+0+ .` ` ` ..+...#.+.@.#.#.@.@.@.$.%.%.*.&.&.&.=.=.=.=.-.-.;.;.;.a+a+>.,.,.b+).).!.~.c+c+{.d+d+/.^./.(._.:.3+3+[.[.}.1.|.1.2.3.4.5.4+7.7.8.9.0.a.b.b.e+e+c.d.f.e.f.g.f+h.i.j.j.l.g+g+m.n.h+o.p.p.i+j+q.q.s.k+t.l+l+u.u.w.y.x.y.z.B.C.E.E.E.G.F.G.[+[+[+I.J.:+:+L.L.L.M.N.N.N.O.(+R.S.S.S.T./+U.V.W.W.X.Y.Y.Y.`. + +]+.+{+{+++@+m+$+$+n+%+*+&+*+o+o+=+>+;+>+;+,+,+q+)+r+)+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.U+H#i.0.}.3+3+3+3+3+:.3+O#3+:.:.:.:.:.:.:._._._._.<.7.g.j.p.t.l+l+t.k+k+k+k+k+k+k+r.h+i.g.9.3.|.1.|.|.1.|.1.}.a.0.0.|.}.P#|.}.|.[.|.}.}.}.[.}.[.[.}.[.}.}.4+d.p.w.H.!+!+!+!+!+!+!+!+!+!+!+", +": _ : : _ _ _ _ _ _ _ _ S.!+!+!+!+!+i+_ [ [ [ [ < [ < [ [ [ 1 J.!+!+!+!+!+!+8 } } J !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+..8+8+6 L.!+!+!+!+!+C.8 7 7 7 7 9 9 9 0 0 0 a /.!+!+!+!+!+!+n 9+c c c d d e e e e f g Q#1@1@1@1@1@1@1@1@R#S#k k k k l l m m n n n p x.!+!+!+!+!+^+q s s ~.!+!+!+!+!+!+!+!+!+!+!+{.x w y Y.!+!+!+!+!+C.A B B C.!+!+!+!+!+R.F F F G G H H H I I I J 3+!+!+!+!+!+!+#.M N N O Q P P P Q R R R T#1@1@1@1@1@1@1@1@U#V#W X X Y Z Y Z 0+0+0+` ` ` .. . ...+.#.+.@.#.$.@.@.$.$.%.%.&.&.=.*.*.=.-.-.-.;.;.;.a+a+a+>.>.b+'.'.).!.~.c+{.{.].d+^./.(.(._.:.3+<.<.[.}.|.1.2.2.3.4.5.6.4+7.8.8.0.0.a.b.e+e+c.d.e.e.g.g.f+h.i.j.j.k.l.g+n.n.h+o.p.p.i+j+q.q.s.s.k+t.l+u.u.v.w.x.z.z.A.B.C.E.D.D.F.H.H.[+I.I.J.<+<+K.L.M.M._+N.P.P.O.(+R.S.T.T./+/+U.V.W.^+X.Y.Z.Z.`. +]+.+{+{+++@+#+m+$+n+%+&+&+~+~+o+=+-+>+;+p+p+,+'+'+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+h.a.|.3+3+3+3+3+:.3+:.w#:.:.:.:.:.:.:._._._._.<.4+f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.h+i.f+f.e+c.e+c.e+b.c.e+e+l.l.g+b.e+b.b.b.b.b.a.b.b.a.b.a.b.a.a.b.0.b.e+e.p.w.G.!+!+!+!+!+!+!+!+!+!+!+", +"< < < < < < < < < < < } T.!+!+!+!+!+*+O.O.O.O.O.O.O.O.O.O.O.@+!+!+!+!+!+!+~+2 2 2 M !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+n+c 8 7 7 L.!+!+!+!+!+E.9 0 0 a a a b b b b b 9+_.!+!+!+!+!+!+q e e e e f f g g g h h W#X#1@1@1@1@1@1@1@1@1@Y#m m m m n n p p o o o q y.!+!+!+!+!+X.t t u x .+!+!+!+!+!+!+!+!+!+`.z y z z Y.!+!+!+!+!+C.C D D E.!+!+!+!+!+S.G H H I I J J J J K K L 3+!+!+!+!+!+!+@.O P P Q R R R R T T S Z#`#1@1@1@1@1@1@1@1@1@ $.$Z Z Z 0+0+` ` . .........+.+.#.#.@.@.$.$.$.%.%.&.&.*.*.=.=.=.=.-.;.;.a+a+>.>.>.>.,.,.b+b+).!.~.c+c+{.].d+d+^./.(._.:.3+3+<.[.}.}.|.1.2.3.4.5.6.4+4+7.8.9.9.0.b.b.e+c.d.d.e.f.g.g.h.i.i.j.k.l.l.g+n.n.o.o.p.i+j+j+q.r.s.s.t.l+l+u.v.w.w.x.y.z.A.B.C.E.D.D.F.G.H.[+I.J.J.<+:+K.K.M._+_+N.P.O.O.Q.R.S.T.T./+U.V.V.W.^+X.Y.Z.`.`. +]+.+.+++@+@+#+m+$+n+%+&+*+~+~+o+=+-+-+;+p+p+,+'+q+q+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.a.}.3+3+3+3+3+3+3+3+3+:.:.:.:.:.:.:.:.:.:._.<.7.f+j.o.t.l+l+t.k+k+k+k+k+k+k+r.h+i.h.h.f+f+f+f+g.g.f+f+f+o.i+p.g.g.g.g.g.g.+$f.f.f.f.f.f.f.e.f.e.e.e.e.e.i+w.G.!+!+!+!+!+!+!+!+!+!+!+", +"1 1 1 1 1 1 1 1 1 1 1 1 T.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+u.8+8+8+O !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+).9 9 0 0 M.!+!+!+!+!+D.b b b 9+9+9+c c c d d d :.!+!+!+!+!+!+s g g h h h i i i i i @$#$1@1@1@1@1@1@1@1@1@1@1@$$p p o o q q q q q s s z.!+!+!+!+!+X.u u v v 3.!+!+!+!+!+!+!+!+!+5.A A B B Y.!+!+!+!+!+E.E F F E.!+!+!+!+!+S.I J J J J K K L L M M N [.!+!+!+!+!+!+%.Q R R R R T T S S U 0#%$1@1@1@1@1@1@1@1@1@1@1@&$0+0+` ` . .........+.+.#.#.@.@.$.$.$.%.%.&.&.*.*.*.=.=.=.-.-.;.;.a+>.>.>.>.,.,.b+b+'.).!.~.c+c+].d+d+^./.(.(._.:.3+3+<.[.}.|.1.2.2.3.4.5.6.4+4+7.9.9.0.a.b.b.e+c.d.d.e.g.g.f+h.i.i.j.k.l.l.g+n.h+o.o.p.i+j+j+q.r.s.k+t.l+l+u.v.w.w.x.y.z.A.B.C.E.D.D.F.G.H.[+I.J.J.<+:+K.K.L._+_+N.P.O.O.Q.(+R.T.T./+U.V.V.W.^+X.Y.Z.`.`. +]+.+.+{+@+@+#+m+$+n+%+%+&+~+~+o+=+-+-+>+;+p+,+'+q+q+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.*$z+m.i.0.}.3+3+3+3+<.3+3+:.3+3+3+3+_.:._.:.:.:.:.:.[.7.g.j.p.t.l+l+t.k+k+k+k+k+k+k+r.p.m.l.l.l.k.l.k.j.j.j.k.j.l+l+t.j.i.j.i.i.j.i.i.i.i.i.i.i.h.h.h.h.h.h.h.f+t.A.H.!+!+!+!+!+!+!+!+!+!+!+", +"3 4 3 3 4 4 4 3 3 3 3 3 /+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L 8+8+5 P !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+8.0 0 0 0 a M.!+!+!+!+!+D.9+9+c c c d c c c d d e :.!+!+!+!+!+!+s g h h h h i i i j =$-$1@1@1@1@1@1@1@1@1@1@1@1@Y@;$p p o o q q s r s t z.!+!+!+!+!+X.u v v w D ~+!+!+!+!+!+!+!+&+F z A A C Y.!+!+!+!+!+E.D F E D.!+!+!+!+!+S.I I I K J K K L L L L M [.!+!+!+!+!+!+$.P Q Q R T S T S S >$,$1@1@1@1@1@1@1@1@1@1@1@1@1@'$0+` .` ` . . .....+.#.#.#.#.$.$.$.%.%.&.&.&.*.&.*.*.-.=.;.-.;.;.a+>.a+>.>.,.b+'.).!.!.~.{.{.{.d+^.^./.(._._.3+3+[.<.[.}.|.|.2.3.5.5.5.4+4+7.7.8.9.0.a.e+e+c.d.e.f.f.f.g.f+f+h.k.j.k.l.g+m.n.n.h+p.i+i+j+q.q.r.s.k+k+t.l+u.v.w.y.y.y.z.A.C.E.C.E.F.G.H.[+I.[+J.J.<+:+K.L.L.M.N.N.P.P.O.Q.S.R.S.T.U.U.V.W.W.^+X.Z.Y.Z.`.]+]+]+.+++++@+#+m+$+$+n+%+&+*+~+o+o+-+-+>+>+p+,+'+q+q+)+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+h.9.|.3+3+3+3+3+:.:.:.:.:.:.:.:.:._._._._.:.:.[.7.g.j.)$t.l+l+t.k+k+k+k+k+k+k+s.r.j+j+j+i+i+i+i+p.p.i+p.p.H.G.[+o.o.o.o.o.h+o.n.h+h+n.h+n.h+n.m.n.m.n.m.m.F.G.[+!+!+!+!+!+!+!+!+!+!+!+", +"5 5 8+5 6 6 6 5 5 5 5 5 /+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+e+7 8 8 8 Q !+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+O.` b b b 9+9+c _+!+!+!+!+!+D.d d e e e f f f f g g h 3+!+!+!+!+!+!+t j k k k k k k k !$~$1@1@1@1@1@1@1@1@1@1@1@1@1@1@f@{$s s r r r t t t u A.!+!+!+!+!+X.x x w y w i.!+!+!+!+!+!+!+h.B B C C E Z.!+!+!+!+!+D.G H G D.!+!+!+!+!+S.K K K M L L L M M N N O }.!+!+!+!+!+!+&.R T T S U U S U ]$^$1@1@1@1@1@1@1@1@1@1@1@1@1@1@Y@/$ ... ...+.+.+.#.#.#.@.@.@.$.%.&.%.*.&.*.&.*.=.=.=.-.;.;.a+;.a+a+,.,.,.b+'.).!.!.~.c+{.{.d+d+^.(.(._._.:.3+<.[.[.|.|.|.1.2.3.4.5.4+4+7.8.8.9.0.0.a.b.c.c.c.e.f.g.f+h.f+h.i.j.j.l.l.g+m.n.h+o.p.p.j+q.q.q.r.s.k+t.l+u.u.v.w.x.x.z.A.A.C.C.D.F.F.F.G.[+I.I.J.<+:+:+K.M.L.M._+N.P.P.(+(+R.R.T.T./+/+V.W.^+X.X.Y.Y.`.`. + +.+++{+++#+#+m+$+$+n+%+&+*+~+o+o+=+-+;+>+;+,+,+'+)+r+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.0.}.3+3+:.:.3+:.:.:.:.:.:.:.:.:.A+A+_._.:.:.<.7.f+u+o.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"7 8 8 7 7 7 7 7 7 7 7 7 U.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+q+7.a 0 0 0 0 T !+!+!+!+!+!+[.0+` 0+` ` ` d+!+!+!+!+!+!+t.c d c c d e e f _+!+!+!+!+!+_+g g g h h h i i i j j j 7.!+!+!+!+!+!+x m m m n n n n ($_$1@1@1@1@1@1@1@:$<$1@1@1@1@1@1@1@P@[$u u v v x v x w A.!+!+!+!+!+Y.z z A A A O '+!+!+!+!+!+'+R E E E F F Z.!+!+!+!+!+D.I I J F.!+!+!+!+!+ +M M M N N O O P P Q Q Q e+!+!+!+!+!+!+-.U U U V V V W }$|$1@1@1@1@1@1@1@1$2$1@1@1@1@1@1@1@{#3$+.#.#.@.@.@.@.$.$.%.%.&.*.*.*.*.=.=.-.-.;.;.a+a+a+a+>.>.,.,.,.'.'.).!.~.c+{.{.].d+^.^.(.(._.:.3+<.<.[.}.|.1.1.2.3.3.4.5.6.4+7.8.9.0.a.a.b.e+e+c.d.e.e.e.g.f+h.i.j.j.k.l.g+g+m.n.h+o.p.i+j+q.q.r.s.k+k+k+l+u.v.v.w.x.y.z.A.A.B.E.E.D.F.G.G.H.[+I.J.<+<+:+K.L.M.M._+N.P.O.Q.Q.(+S.S.T./+U.V.W.W.^+X.Y.Z.Z.`. +]+.+{+{+++@+#+m+$+n+n+%+&+*+~+o+=+=+-+>+;+;+,+,+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.m.i.0.}.3+3+:.:.3+:.:.:.:.:.:.:.4$:.:.:._._.A+_.<.7.g.j.o.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"9 0 9 9 0 0 0 9 9 9 9 9 U.!+!+!+!+!+>+]+]+]+ + +]+]+]+]+]+]+]+Z.L.d.C 9+9+9+9+9+9+V !+!+!+!+!+!+U 9+c c d d d d i.!+!+!+!+!+!+*.e f f g f f g M.!+!+!+!+!+r+3.K I I H I J J I J J +.m+!+!+!+!+!+!+y p p p p p p 5$6$1@1@1@1@1@1@1@7$8$9$0$1@1@1@1@1@1@1@X#a$v x x w y w y B.!+!+!+!+!+Y.A B B B B C u.!+!+!+!+!+l+E F F G G H Z.!+!+!+!+!+F.J K K F.!+!+!+!+!+!+g+=.&.&.*.*.*.=.*.=.=.d+@+!+!+!+!+!+!+;.V V V W W X b$c$1@1@1@1@1@1@1@d$e$` f$1@1@1@1@1@1@1@u#g$@.#.$.@.$.$.%.%.*.&.*.*.=.=.=.-.-.;.;.a+a+a+>.a+>.>.,.b+b+).!.~.c+{.c+].d+^.d+/.(._._.:.3+<.<.[.}.}.|.1.2.2.4.4.5.4+7.4+8.9.0.0.a.e+e+e+c.d.e.e.f.g.g.f+i.j.j.k.l.g+m.n.n.o.o.p.p.i+j+q.r.s.k+k+t.l+u.u.v.w.w.x.z.z.A.C.C.D.F.F.F.G.H.[+[+J.J.<+:+L.L.L.M._+_+N.O.O.Q.(+S.S./+/+/+U.V.W.W.X.X.Y.Z. + + +]+.+{+{+@+@+#+$+$+n+%+&+&+~+~+o+o+-+>+>+;+p+,+'+q+q+)+)+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +Q.Q.O.P.P.P.P.P.N.N.N.N.N._+_+_+M.M.M.M.M.L.L.L.L.L.L.L.K.K.K.K.:+:+:+:+:+<+<+<+<+<+<+<+J.I.I.I.I.I.I.I.[+[+[+[+[+H.H.H.H.G.G.G.G.G.G.G.F.F.F.F.F.D.D.D.E.E.E.E.E.E.E.C.C.C.C.(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.<@i.9.}.3+3+:.3+3+:.:.:.:.:.:.:._.4$4$4$_._.A+_.3+4+g.j.p.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"b 9+b b 9+9+9+b b b b b U.!+!+!+!+!+h.b b b b b 9+b 9+b 9+9+d 9+9+c c c c d c c c V !+!+!+!+!+!+F d f e g g g f l V.!+!+!+!+!+%+w h h h h h i B.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+s+r o q q o o o 0$1@1@1@1@1@1@1@X#h$u t i$j$1@1@1@1@1@1@1@k$l$w w y z y z C.!+!+!+!+!+P.B B C D C D .s+!+!+!+s+ .F G G H H J /+!+!+!+!+!+F.K M L A.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+$.V W W X Y Z m$1@1@1@1@1@1@1@u#n$ ...o$p$1@1@1@1@1@1@1@q$r$@.%.$.%.%.&.&.=.*.*.*.-.-.-.;.;.a+a+a+>.a+>.>.b+b+).'.).~.{.{.{.].].d+^././.(._.:.3+3+<.}.[.}.|.1.2.3.4.4.4+6.6.7.8.8.9.0.b.a.b.c.c.c.d.e.f.f.f+h.h.i.k.l.l.g+g+m.n.h+h+p.p.i+i+j+q.r.s.k+l+l+l+u.v.v.w.x.y.y.z.A.B.E.E.F.G.G.G.H.I.J.I.J.<+K.L.M._+M.N.N.P.O.O.Q.(+R.T.T.U.U.U.V.^+^+^+X.Z.`. +]+]+]+.+++++++@+m+$+n+n+&+&+*+*+~+o+=+=+-+;+;+p+,+'+q+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.0.}.3+3+:.3+3+:.:._.:.:.:.:._.4$4$4$_._._._.3+4+g.j.o.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"d e d d e e e d d d d d V.!+!+!+!+!+d+d d d d d e d e d d d f e e f f e e f f f f Y !+!+!+!+!+-+l g i h i i i i i P '+!+!+!+!+!+D.j j j k k l e.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+Z.q s r r r r s$1@1@1@1@1@1@1@P@t$v x x w u$v$1@1@1@1@1@1@1@w$x$A B B A B C.!+!+!+!+!+s.D E E F E E G <+!+!+!+<+H I I I I J K x.!+!+!+!+!+G.M N M g.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+*+X X Y Y Y Z y$1@1@1@1@1@1@1@{#z$ ...+.+.A$B$1@1@1@1@1@1@1@C$D$*.&.*.*.*.*.-.=.-.-.a+a+a+>.a+>.>.>.b+,.b+'.!.!.c+~.c+{.d+d+d+^././.(._.:.:.3+<.}.[.}.1.1.2.3.4.5.6.4+4+8.8.8.9.0.a.a.b.c.c.c.e.e.f.f.g.f+h.i.k.k.l.g+m.n.h+h+h+o.p.i+j+j+q.r.r.s.k+t.l+v.w.v.w.x.y.y.z.A.B.C.E.E.D.G.H.[+[+I.I.<+:+:+:+K.M._+_+P.P.O.O.Q.R.R.S.S.T.U.U.V.V.^+^+Y.Y.Z.Z. +]+.+.+.+{+++#+#+m+$+%+%+%+&+~+*+~+=+=+-+>+;+;+p+,+'+'+q+s+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+j.0.[.:.:.:.:.3+:.:.:.:.:.4$:._._._.:._.`+_._.V@E$g.j.o.t.l+l+t.k+k+k+k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+!+!+!+!+!+!+!+!+!+!+!+", +"g h g g h h h g g g g g V.!+!+!+!+;+u g g g g g i h i h h h i h h i i h h i h h i 0+!+!+!+!+!+r.j j k j l l l l l l 6.!+!+!+!+!+!+<.m m m m p R s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+d.t t u u u F$1@1@1@1@1@1@1@f@G$w w y y z z H$I$1@1@1@1@1@1@1@J$K$D D D E E.!+!+!+!+!+a+F F G H H H J ).!+!+!+).J J K K L L N d+!+!+!+!+!+H.O P P %.)+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+x.Y Z Z Z 0+/$Y@1@1@1@1@1@1@Y@L$#.#.#.$.@.@.M$N$1@1@1@1@1@1@1@O$P$*.=.=.-.-.a+;.a+a+>.>.>.,.,.b+b+'.!.!.~.~.{.{.d+].d+^.(.(.(._.:.:.3+<.[.[.}.|.2.1.2.4.4.5.6.6.4+7.9.8.0.0.a.a.b.e+c.c.e.e.f.f+f+h.h.i.j.k.l.g+g+n.h+o.o.p.p.i+i+j+q.s.r.s.k+t.l+u.v.v.x.y.y.y.z.A.B.C.E.E.D.F.G.G.[+J.J.J.<+:+K.L.L.M.M.N.P.O.O.O.R.R.S.T.T./+U.U.W.W.X.^+X.Y.`.`. +]+.+{+++@+++@+#+$+$+n+%+*+~+*+~+=+=+=+-+>+;+;+,+'+'+q+)+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+ + + +`.`.`.Z.Z.Z.Z.Z.Z.Y.Y.Y.Y.Y.Y.Y.X.X.X.X.X.X.X.X.X.^+^+^+^+^+^+^+W.W.W.W.W.W.W.W.V.V.V.V.V.U.U.U.U.U.U.U.U.U.U.U./+/+/+/+/+T.T.T.T.T.T.T.T.T.T.S.S.S.S.S.R.R.R.R.R.R.R.R.R.(+(+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.9.|+3+3+3+3+3+3+w#3+3+w#3+w#:.:.:.:._.4$_.4$ @7.g.j.o.t.l+l+t.L.L.L.L.L.L.L.L.L.L.L.K.K.K.K.K.:+:+:+:+:+:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+[+[+[+[+[+[+[+H.H.H.H.", +"i i i i i i i i i i i i W.!+!+!+!+9.j j j j j j j j j k k k k k k k k k l l l l l .!+!+!+!+=+G l m m m m m n n n n p :+!+!+!+!+!+p+P o o o o o r.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+++E x x x w Q$f@1@1@1@1@1@1@Y@R$z z A A A A A B S$w$1@1@1@1@1@1@1@T$p@E E F E.!+!+!+!+F.H I I I I I J J K q.=+r.L M M M M M N N O J.!+!+!+!+H.Q Q Q R s.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+o+-.0+` ` .U$V$1@1@1@1@1@1@1@W$@.@.@.@.$.$.%.%.X$Y$1@1@1@1@1@1@1@Z$`$;.;.a+a+a+a+>.>.,.,.b+'.).!.~.~.c+{.].].d+^././.(._.:.:.3+<.[.[.}.|.1.1.2.3.4.5.6.6.4+7.8.8.9.0.a.a.b.e+c.c.d.e.f.f.g.f+h.h.i.j.k.k.l.g+m.n.h+h+o.p.i+i+j+r.r.s.k+t.t.l+u.v.v.w.x.y.y.z.A.B.C.E.E.D.F.G.G.[+I.I.J.<+:+:+K.L.M.M._+N.P.P.O.Q.(+S.S.T./+U.U.V.W.^+^+X.Y.Z.Z.`. +]+.+{+++++@+#+m+$+n+n+%+&+*+*+o+=+=+-+>+;+;+p+,+'+'+q+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+i.e+6.5.3.4.3.3.4.2.4.2.4.3.3.3.2.3.3.2.3.2.3.3.a.f+j.o.t.l+l+t.L.L.L.L.L.L.L.L.L.L.L.K.K.K.K.K.:+:+:+:+:+:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+[+[+[+[+[+[+[+H.H.H.H.", +"l k l l k k k l l l l l W.!+!+!+k+n m m m m m m m m m m m m n n n n n n n n p p p #.!+!+!+-+$.p p o o o o p o o q q q B /+!+!+!+!+!+S.v r r r r y <+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+n+` w y y y %.%1@1@1@1@1@1@Y@+%B B C C C D D D E E @%q@1@1@1@1@1@1@1@#%H H I D.!+!+!+Q.Q J K K K L L M M M M M N N N O O P P P Q Q Z U.!+!+!+[+T S S S W J.!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+-+<. . . ...$%%%1@1@1@1@1@1@1@&%$.$.%.%.&.&.&.*.*.*.*%=%1@1@1@1@1@1@1@-%a+>.>.>.,.,.b+'.'.).!.~.c+{.].].d+^././.(._.:.:.3+<.[.[.}.|.1.1.2.3.4.4.5.6.4+7.8.8.9.0.a.a.b.e+c.c.d.e.f.f.g.f+h.h.i.j.k.k.l.g+m.m.n.h+o.p.i+i+j+q.r.r.s.k+t.t.l+u.v.v.w.x.y.y.z.A.B.C.E.E.F.G.G.H.[+I.I.J.<+:+:+K.L.M.M._+N.P.P.O.Q.(+R.S.T./+U.U.V.W.^+^+X.Y.Z.Z.`. +]+]+.+++++@+#+m+$+n+n+%+&+*+*+~+o+=+=+>+;+;+p+,+'+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.r.g+j.h.f+e.+$f.f.f.e.f.e.e.e.e.f.d.f.d.e.e.d.f.d.e.g.h.j.o.t.l+l+t.L.L.L.L.L.L.L.L.L.L.L.K.K.K.K.K.:+:+:+:+:+:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+[+[+[+[+[+[+[+H.H.H.H.", +"n p n n p p p n n n n n ^+!+.+_.n p p p p p p p p n p n n n p p o o o o o o o o o @.!+r+C.P q s s s s s s r r r r r r r w h.~+!+!+!+;+,.u u u v u y 8.n+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+'+v.P z z z z A B ;%>%{#1@1@1@,%'%D D D D D E E F F G F G )%!%~%1@1@1@{%]%I J I K F.!+*+i.P L L L L L N M M O O O O O P P P P P Q Q T T R W h+o+!+I.S U U V V W g.n+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+)+<+). .....+.+.+.^%/%(%1@1@1@_%:%%.&.%.*.&.*.*.*.*.=.=.-.<%[%u#1@1@1@}%|%1%>.,.,.b+).).).!.c+c+{.{.{.d+^.d+/.(._._.:.3+<.<.[.}.|.|.|.2.3.3.4.5.6.4+7.7.8.9.9.0.0.a.b.e+e+c.e.e.f.f.g.f+f+h.i.j.j.k.l.g+m.n.n.h+o.p.i+j+j+q.r.s.k+k+t.l+u.u.v.w.x.x.y.z.A.A.B.C.E.D.F.F.G.H.[+[+I.J.<+<+:+K.L.M._+_+N.N.O.Q.Q.(+R.S./+/+U.U.W.W.W.X.X.Y.Y.Z. + +]+]+{+{+++@+#+m+$+n+%+&+&+&+*+o+o+o+=+>+>+;+p+,+,+'+q+)+)+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.*$r.m.k.k.j.k.j.j.j.j.j.i.j.j.i.j.j.j.j.j.j.F+i.h.i.i.h.i.j.o.t.l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+I.I.[+n.n.n.n.m.m.m.m.m.m.m.", +"q s q q s s s q q q q q $.U s s q q q q q q q q s q s q q q s q s r r s s r q q q F %.E r t s r r r u t u u u u v u v v v u z .~.$.C u v v x w x w w A ..{.(._._._.(._.(._._._._.:.(.a+I A B C B A B D D B C 2%3%4%5%D F F E G F F G G H H H G H I H 6%7%8%9%0%J J L K L >.>.N L M M M M N N P O N P P P P P Q Q Q R Q R T S S T S S W ].].U W V X X W X Y c+6.a.0.0.a.a.a.a.a.a.b.b.e+e+1.*.....+.+.+.#.#.#.@.$.a%b%c%d%&.&.&.*.&.=.*.*.-.=.-.-.-.a+;.;.e%f%g%h%i%b+b+b+'.).!.c+c+c+{.d+d+d+^.^.(.(.(.:.:.3+3+[.[.|.}.|.1.3.3.3.4.5.6.4+4+7.8.9.9.a.a.a.e+a.b.e+d.c.d.g.g.f+g.f+i.h.i.j.l.g+g+g+h+h+o.h+o.p.j+q.r.q.k+k+t.l+u.l+u.v.w.w.y.y.z.A.B.B.C.E.D.F.G.G.H.[+I.J.I.<+:+K.:+L.M._+N.P.N.O.O.R.R.R.S.T./+U.V.W.V.^+^+^+Y.Y.Z.Z. +.+.+{+.+++@+m+m+m+$+%+&+&+*+*+*+~+=+=+=+>+p+,+p+,+q+q+q+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.y.t.p.o.h+h+h+n.h+h+j%h+m.h+n.h+n.n.n.m.n.n.m.m.m.n.<@g+m.m.j+t.l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+<+<+<+<+<+<+<+J.J.J.J.J.J.J.J.J.I.I.I.I.I.I.I.[+n.n.n.n.m.m.m.m.m.m.m.", +"r t r r t t t r r r r r r t t t r r r r r r r r t t u t t t u t t u u t t u t t t t t u u v u u u u x v x x x x w x w w w w w w w w w w w w y z y z z A A z z A B A A B A A A B B C B C C C D E D D E F F E E E E F F F H H G I H H I I J J J I J K J J K K K L L M N M N N M N N O O O O P P R Q Q R R Q R R T T T S S S U V V U U V V W X W Y X Z Z Y Z Y Z Z ` 0+0+ .` . . . . .....#.+.+.#.#.@.@.@.@.$.$.$.&.&.&.&.*.=.=.*.=.=.-.-.-.a+;.a+a+a+>.a+>.>.b+b+b+'.!.!.!.~.~.c+].].].d+/.(./._._.3+:.3+<.<.[.[.|.|.2.1.2.3.5.6.6.6.4+7.8.8.9.0.a.a.e+e+c.d.c.d.e.f.f.g.h.h.i.i.j.k.k.l.g+m.h+h+h+p.p.i+i+j+q.r.s.k+k+l+l+u.v.w.v.w.x.y.y.A.A.B.C.E.E.D.F.G.H.[+[+I.J.<+:+:+K.L.M.M._+N.P.O.Q.Q.(+R.T.T.T./+U.V.W.^+X.^+Y.Y.Z.`.`. +]+.+++++@+@+#+m+n+n+n+%+*+~+~+o+o+=+=+>+>+;+p+'+q+'+q+r+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.z.x.w.u.u.v.D+k%l+l+l+t.l+t.t.t.t.l+k+t.k+k+k+s.k+s.k+r.r.s.k+l+l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+<+<+<+<+<+<+<+J.J.J.J.J.J.J.J.J.I.I.I.I.I.I.I.[+n.n.n.n.m.m.m.m.m.m.m.", +"u v u u v v v u u u u u u x x x v v v v v v v v x v x v x x w x x w w x x w w w w w w w w y w w w w y w z z z z z y A A A z z A A A A A A A B B A C C C C B C C D C D E D D E E E F E E E E G G F G G H H H H H I I I I J J I K J J L K L M M L N N M M M M N N N P P O Q Q P Q Q R Q Q Q R R T T T U U S U U U U U V V V W X X X X Y Y Y Z Y 0+Z 0+` 0+ .` ` ... . .......+.+.#.#.#.@.$.@.@.@.$.$.%.%.&.&.&.*.=.=.*.=.=.;.;.-.a+;.>.a+a+>.a+>.>.,.b+b+'.).~.c+~.~.{.{.].].d+^.(./.(._.:.3+:.<.<.}.[.}.1.1.1.2.4.4.6.5.6.6.7.8.8.8.9.0.a.a.b.e+c.c.e.e.f.g.g.f+h.h.i.i.k.k.l.l.g+m.n.h+h+o.i+i+i+q.q.r.r.s.k+t.l+u.u.w.w.x.y.z.y.z.A.B.C.D.E.D.F.G.G.H.[+I.J.<+<+:+:+K.L.M.M._+N.P.P.O.Q.R.S.S.S.T.U.V.U.W.^+X.Y.Z.`.Z. + +]+.+.+{+++++#+#+$+$+n+n+&+&+*+*+o+=+-+-+>+;+;+,+,+'+'+)+r+r+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.z.z.z.y.y.y.x.x.x.x.x.w.w.w.w.w.w.w.v.v.v.v.u.u.u.u.u.l+l+l+l+l+l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.:+:+:+<+<+<+<+<+<+<+J.J.J.J.J.J.J.J.J.I.I.I.I.I.I.I.[+n.n.n.n.m.m.m.m.m.m.m.", +"x w x x w w w x x x x x x w w w x x w w w w w w y w y w w w y y y z z y y z y y y z z z z A z z z z A z A A A B B A B B C B B B B B C C C C D E D E E E E D D D F E E F F F F F G H G G H H I I H H H I J I I J J J J K L L L M L L M L M N N M O O N O O O P P P Q Q P R R Q R R T T T T S S U S S V V U V V V W W W X X X Y Y Y Y Y Z Z ` 0+` ` . .` . . ...+...+.#.#.#.#.#.#.@.@.@.%.$.%.%.%.&.&.&.&.*.*.*.-.-.-.-.;.a+a+;.a+a+>.>.>.,.,.b+'.).~.!.~.c+{.].{.].^.^.^./.(._.:._.:.3+[.[.[.|.|.1.1.1.3.3.4.5.6.6.7.7.7.8.0.a.0.a.a.b.e+e+c.d.e.e.g.g.f+h.h.i.j.j.k.l.m.m.h+n.n.h+o.p.p.i+q.q.q.s.s.k+k+t.l+u.v.w.w.y.y.z.A.B.B.C.C.E.D.G.F.G.H.[+[+I.J.<+:+K.K.L.L.M._+N.N.P.O.Q.(+R.R.T./+/+/+U.W.^+W.^+X.Z.Z.`. + +]+]+.+++{+++@+#+$+$+n+%+&+&+~+~+o+o+-+>+;+;+;+p+,+'+'+q+)+r+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.z.z.z.y.y.y.x.x.x.x.x.w.w.w.w.w.w.w.v.v.v.v.u.u.u.u.u.l+l+l+l+l+l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"z A z z A A A z z z z z z A A A z z z z z z A A B A B A A A B A A B C B B C B B B B B C C D C C C C E D E D D E E D E E E D D E E E E E F F G G F H H H H G H H I H H I H H I I I J I J J J K L K K L M M L L L L L M M N O N O N O P O Q Q Q P Q Q P Q Q Q R R R S S T U U S S S U U U U V V W W W X Y X X X X Y Y Y Z Z Z ` ` ` ` ` ` ` . .....+.+.+.#.#.#.#.@.#.#.$.@.$.$.$.%.%.&.&.*.&.&.*.*.=.=.=.-.-.;.;.a+a+;.a+a+,.,.>.b+b+'.'.).!.).!.~.{.].{.].d+^./.^./.:._._.3+3+<.[.<.[.}.1.1.2.4.3.4.5.4.6.6.7.7.8.8.0.0.0.a.e+c.e+c.c.d.e.e.f.g.f+f+i.i.j.k.k.l.g+g+m.n.o.o.i+p.p.i+j+q.q.r.k+k+k+l+l+u.u.v.w.x.y.z.z.B.B.C.E.D.D.F.F.G.H.I.[+I.J.<+<+:+K.L.M._+_+N.N.P.O.Q.Q.(+R.S.T./+/+V.W.W.W.^+Y.Z.Y.Z.`.]+]+.+{+{+++++@+m+#+m+$+n+&+&+*+*+~+o+=+=+-+>+;+p+,+'+,+'+q+r+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+B.B.A.A.A.A.A.z.z.z.z.z.z.z.y.y.y.x.x.x.x.x.w.w.w.w.w.w.w.v.v.v.v.u.u.u.u.u.l+l+l+l+l+l+l+t.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"C D C C D D D C C C C C C D D D C C C C C C C C D C D C C C D C C D E D D E D D D D D E E F E E E E G F G G G G G F G H H G G G G G G G H H I I H J J J J I J J K J J K J K K K K L K L L L M N M M N O O N N N N O O O P Q P Q P Q R Q T T T R T T T T T T S S S V V U W W V V V W W W W X X Y Y Y Z 0+Z Z Z Z 0+0+0+` ` ` .... .........+.+.#.#.@.@.@.$.@.$.$.%.$.$.&.%.&.&.&.*.*.*.=.-.=.=.-.-.;.;.;.;.a+a+>.>.,.>.,.b+).).'.!.!.c+c+c+].{.].d+d+/./.(.(._.:.:.3+<.<.[.[.}.}.1.1.2.3.4.5.4.6.6.7.4+7.9.9.9.9.a.a.e+b.e+c.e.e.e.f.g.g.g.f+h.i.i.j.l.l.g+m.m.n.h+h+o.o.i+i+q.j+q.r.s.s.k+t.u.l+u.w.w.w.w.x.y.z.B.C.B.E.D.F.F.G.G.H.H.[+I.<+J.<+:+K.K.L.M._+N.P.P.O.Q.(+(+R.S.T.T./+U.V.V.^+X.X.X.Y.`. +`. +]+{+{+++@+@+m+m+m+n+n+%+%+&+~+~+o+o+=+-+>+>+;+p+,+'+q+)+q+)+r+!+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.O.O.O.O.O.O.P.P.P.P.P.P.P.P.P.N.N.N.N.N.N.N._+_+_+_+_+_+_+_+M.M.M.M.M.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"E F E E F F F E E E E E E G G G F F F F F F F F G F G F F F G F F G G F F H G G G G G G G H G G H H I H I I I J J I J J J I J J J J J J J J L L K L L L L K L L M L M N M M M N N O N N N O P P O O O Q Q P P Q Q Q Q R T T R T T T S T S S U S U V U U V V V V W X X W X X X X X Z Y Y Z Z Z 0+0+0+` ` 0+` ` ` . . .......#.#.+.+.+.#.#.@.@.$.@.%.%.$.&.%.%.%.*.&.&.=.*.*.=.=.=.-.-.-.;.;.;.;.a+a+a+>.>.,.,.b+'.).'.).!.c+{.c+].{.d+d+d+/././.(.(.:.:.3+3+<.[.[.}.|.|.1.1.2.3.4.4.5.6.7.7.4+8.8.0.9.0.b.b.b.b.c.c.e.d.e.f.f+f+f+h.i.i.i.j.k.l.g+g+n.n.h+p.o.p.i+i+j+j+r.r.k+s.k+t.l+l+u.v.x.w.x.z.z.z.A.A.B.C.D.F.D.G.H.[+[+I.I.J.J.<+:+L.K.L.M._+_+N.P.O.Q.(+(+R.S.T.T./+U.V.V.W.^+X.X.Z.`.`.`.`.]+.+.+.+{+@+#+m+$+m+n+n+%+&+&+*+~+~+=+=+>+-+>+;+,+p+,+'+)+r+s+!+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.O.O.O.O.O.O.P.P.P.P.P.P.P.P.P.N.N.N.N.N.N.N._+_+_+_+_+_+_+_+M.M.M.M.M.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"G H G G H H H G G G G G G I I I H H H H H H H H I H I H H H J I I J J I I J I I I I I I I J I I J J K J K K K L L K L L L K L L L L L M M M N N M N N N N M N N O N O P O O O P P Q P Q Q Q R R Q Q Q T T R R T T T T S U U S V U U V U V V W V W X W W X X X X Y Z Z Y Z Z Z Z Z ` 0+0+` ` ` .. . ..... .......+.+.+.#.#.#.$.$.@.@.@.$.$.%.%.&.%.*.*.&.=.*.*.*.=.=.=.-.-.-.;.;.;.a+a+a+>.a+>.>.,.b+b+'.'.).!.!.{.c+{.].{.^.d+d+(.^._./.(.3+:.:.3+3+[.[.[.}.1.1.1.2.4.3.4.5.5.6.7.4+8.8.9.9.9.b.a.b.b.c.d.c.c.d.g.f.g.g.h.h.i.i.i.j.k.l.l.m.n.n.h+h+p.o.p.j+i+j+q.r.r.s.t.t.l+l+l+u.v.v.w.x.z.z.z.B.B.C.E.E.D.F.H.H.H.[+I.J.J.<+<+:+:+K.L._+M._+N.P.P.O.Q.(+S.T.S.T./+U.U.V.W.^+^+X.Y.Z.Z. +]+]+]+]+{+++++++@+m+$+n+%+n+&+&+*+~+~+o+=+=+>+>+p+;+p+,+q+'+q+)+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+(+(+(+(+(+Q.Q.Q.Q.Q.Q.Q.Q.O.O.O.O.O.O.O.P.P.P.P.P.P.P.P.P.N.N.N.N.N.N.N._+_+_+_+_+_+_+_+M.M.M.M.M.L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"J K J J K K K J J J J J J K K K J J J K K K K K L K L K K K L K K M M L L M L L L L L M M N M M M M N M N N N N N M O O O N N N O O O O O O Q Q P Q Q R R Q Q Q R Q Q R Q R R R R S T T T T U U S S U V V U U U U U V V W X W X W X Y X Y Z Z Y Z Z Y Y Z Z Z 0+0+` .` . . . . ... . .......#.+.+.@.@.#.@.@.@.@.@.@.$.$.$.&.&.%.&.&.*.*.=.*.=.*.-.-.=.;.-.-.;.a+a+a+>.a+a+a+>.>.,.,.,.'.'.).).!.~.~.c+c+{.].].^.^.^././._._._.3+:.<.3+<.}.[.}.|.|.2.1.2.3.5.5.5.6.4+4+7.8.8.8.0.0.a.a.e+e+e+d.c.e.e.f.g.f.g.f+i.h.j.j.k.k.l.g+g+m.n.h+h+o.p.p.i+i+q.q.r.s.s.k+t.t.t.l+v.v.w.w.x.y.y.z.A.B.E.E.E.D.D.F.G.G.H.[+J.J.J.:+K.K.L.M.M.M.M._+N.O.P.O.Q.(+R.S.S.T.U.V.U.V.W.^+^+X.Y.Z.Z.`. +]+]+{+++++++++#+m+m+$+n+%+&+*+~+*+o+o+=+-+-+>+;+;+,+,+q+'+q+)+s+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"M M M M M M M M M M M M M M M M M M M M M M M N N N N N N N N N N N N N O O O O O O O O O P P P P P P P P Q Q Q Q Q Q Q Q Q Q Q Q Q R R R R R R T T T T T S S S S S U U U U U U U U U V V V V V W W W W X X X X Y Y Y Y Y Y Y Y Z Z Z Z 0+0+0+` ` ` ` . . . . . . .......+.+.+.#.#.#.@.@.@.@.@.@.@.$.$.$.%.%.%.&.&.&.*.*.*.*.*.*.=.=.-.-.-.;.;.;.a+a+a+a+a+a+>.>.,.,.,.b+'.'.).!.~.~.~.c+{.{.].].d+d+^./././.(._.:.:.:.3+<.[.[.[.}.|.1.1.1.2.3.4.5.6.6.6.4+7.8.8.8.9.0.a.a.b.b.e+c.c.d.e.e.f.f.g.f+h.h.i.i.j.k.k.l.g+m.m.n.h+h+o.p.i+i+j+j+q.r.r.s.k+t.t.l+u.u.v.v.w.x.y.y.z.A.B.C.C.E.E.D.F.G.G.H.[+I.I.J.<+<+:+:+K.L.M.M._+N.P.P.O.Q.(+R.S.S.T.T./+U.U.V.W.^+^+X.Y.Z.Z.`. +]+]+.+{+++++@+#+m+$+n+n+%+%+&+*+*+~+o+=+=+-+>+;+;+p+,+'+'+q+)+r+r+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"P Q P P Q Q Q P P P P P P Q Q Q P P P P P P P P Q P Q P P P Q P P Q Q P P Q P Q Q Q Q Q Q R Q Q R R T R T T T T S T S S S T S S S S S S S S U U S U V V V U U U W V V W V W W W W Y X X X X Y Y X X Y Z Z Y Z Z Z Z 0+0+` ` ` .` ` .` . ... ...........+.+.+.+.@.@.#.@.@.#.@.@.$.@.$.$.$.%.&.%.&.*.*.&.&.&.*.*.*.=.=.=.-.;.;.;.;.;.;.;.a+a+>.a+,.,.>.b+b+b+'.).).!.!.~.~.c+{.{.{.].d+/.^.^./.(.(._._.:.:.3+<.[.[.[.}.|.1.1.1.2.3.4.4.5.5.6.4+4+7.8.8.9.9.a.a.a.b.e+e+e+c.d.e.f.e.f.g.h.h.f+i.i.k.j.k.g+l.g+m.n.n.o.o.o.p.i+j+j+q.q.r.r.s.k+k+t.l+v.u.v.w.w.x.x.y.z.A.C.C.E.C.E.D.F.F.G.H.I.[+I.<+J.<+<+:+K.L.M._+_+P.P.O.Q.Q.Q.(+R.R.S./+/+/+U.V.W.W.^+X.Z.Z.Y.Z.`. + +]+.+{+{+++@+#+m+n+n+n+%+&+*+~+~+o+o+-+>+>+;+>+p+p+,+'+'+q+)+)+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"R T R R T T T R R R R R R T T T R R R R R R R R T R T R R R T T T S S T T S T T T T T T T S T T S S U S U U U U V U V V V U V V V V V V V V W X W X X X X W W W Y X X Y X Y Y Y Y 0+Z Z Z Z 0+0+0+0+0+` ` 0+` ` ` ` . .......+.....+...+.#.#.+.#.#.#.#.#.@.@.@.@.%.%.$.%.%.$.%.%.&.%.&.&.&.*.=.*.=.-.-.=.=.=.-.-.-.;.;.;.a+>.>.>.>.>.>.>.b+b+'.b+!.).'.!.~.~.c+{.c+{.d+d+d+d+^.^./.(.(._._.:.3+3+3+<.[.[.[.}.|.1.1.1.3.3.5.4.5.6.6.7.4+7.8.8.9.9.0.a.a.b.b.c.c.c.d.e.e.e.f.g.g.h.h.h.i.j.k.k.g+l.m.m.m.h+h+h+o.p.p.j+j+j+j+r.s.s.s.k+t.t.l+l+u.v.w.x.x.x.z.z.A.B.B.C.E.F.D.F.F.G.H.H.[+I.J.<+J.<+K.K.K.L.M._+_+P.O.P.Q.(+R.R.S.S.T.T./+U.W.V.V.W.^+X.X.Y.Z. + + +]+.+.+{+++@+@+#+m+m+$+n+&+&+&+*+~+o+=+=+-+-+;+p+,+,+,+q+q+q+)+)+r+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"S U S S U U U S S S S S S U U U S S S U U U U U V U V U U U V U U V W V V W V V V V V V V W V V V V W W X X X X X W X X X X X X X X X Y Y Y Z Z Y 0+0+0+0+Z Z Z 0+Z 0+` 0+0+0+0+0+ .` ` ` ` .... . ...+.+.........+.+.+.#.#.+.@.#.#.@.@.$.%.$.$.%.%.$.$.%.%.%.%.%.&.*.&.*.*.*.*.*.-.=.=.=.-.-.;.-.-.;.a+;.;.a+a+a+a+>.>.>.,.'.'.'.'.'.).).~.~.c+~.{.].{.d+].].d+/.^./.(.(.(._.:.:.:.3+<.[.[.[.}.}.|.1.1.2.3.3.3.5.6.6.6.6.7.8.7.9.8.0.9.0.b.a.b.b.e+d.c.d.d.f.g.f.g.f+f+h.h.i.i.k.k.l.g+m.m.m.h+h+o.o.o.i+i+i+j+q.q.s.s.s.k+t.l+l+l+u.v.v.w.w.x.y.z.B.A.A.C.C.E.D.D.F.G.[+H.[+[+I.J.J.<+:+K.L.K.L._+_+_+N.P.O.O.(+R.(+S.T./+/+U.U.V.V.W.^+Y.X.X.Y.Z.`.`. +]+{+{+{+++@+@+#+m+$+$+n+%+%+&+*+o+o+o+=+-+>+;+;+p+p+'+q+)+)+)+s+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"V W V V W W W V V V V V V W W W V V V W W W W W X W X W W W X W W X Y X X Y X X X X X X X Z Y Y Y Y Z Y Z Z Z Z 0+Z 0+0+0+Z Z Z Z Z Z 0+0+0+` ` 0+ . . . .` ` ... . ... . .......+.........#.#.+.+.#.@.@.#.#.@.@.@.@.@.$.%.$.%.$.$.%.%.&.&.&.&.*.*.&.*.*.*.*.*.*.-.-.=.-.-.-.-.-.a+;.;.;.a+a+>.a+a+,.b+,.,.b+b+b+b+'.).).!.c+c+c+c+c+{.].d+d+^.d+/.(./._.(.(._.3+:.3+<.<.<.[.}.}.}.|.1.2.2.2.2.3.4.5.5.6.4+4+4+8.9.8.9.9.a.b.a.e+b.c.e+c.e.d.e.e.f.f+g.g.f+i.i.i.i.k.k.l.l.l.g+n.n.h+h+p.p.p.j+i+q.j+q.s.r.s.s.t.t.l+l+u.v.w.w.w.x.y.z.z.z.A.B.C.E.D.D.D.G.G.G.H.[+I.I.J.J.:+:+:+K.L.M.M.M.N.N.P.Q.O.Q.Q.(+R.S.T./+/+V.V.W.W.^+^+^+X.Y.Z.`.`. +]+]+]+.+{+++#+#+#+m+$+n+n+%+%+&+*+*+~+o+=+-+>+>+;+;+,+'+'+'+'+)+r+s+s+s+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+L.L.L.k+k+k+k+s.s.s.s.s.r.r.r.r.q.q.q.q.q.q.q.j+j+j+j+j+i+i+i+p.p.p.p.p.p.p.o.o.o.o.o.h+h+h+h+n.n.n.n.n.m.m.m.m.m.m.m.", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % % % % % % % & & & & & & & & & & & & * * * * * * * * * * = * = = = = = = = = = = = - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ) #.H - - - - - - - - - D L - - - - - 9 #.6 - - - - - - - - - 8 X #.#.#.#.X 0 - - - - - - - [ #.#.#.#.#.#.#.#.y - - - - - - - - - - J #.} - - - - - - - - - - - d #.e - - - - - - - - - - - - - u #.| - - - - - - - - - - - - - K #.#.#.#.#.#.#.' - - - - - - - - W #.#.#.#.#.` g - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.!+g.! - - - M !+I - - - - - - - - - .+-+@+@+@+@+-+#+; - - - - - - d n+n+n+,+!+&+n+n+0.- - - - - - - - - h )+!+f.- - - - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+^+^+^+^+^+^+] - - - - - - - - ++)+.+.+.+{+)+!+t - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.r+!+I.4 - - M !+I - - - - - - - - ] !+3+- - - - U 3+) - - - - - - - - - - i+!+6 - - - - - - - - - - - - B.Z.h.s+o - - - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+> - - - - - - - - - - - - - - ++U.- - - - %.!+V - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.{+,.r+.+o - M !+I - - - - - - - - ' r+H.[.[.[.[.^.A - - - - - - - - - - - i+!+6 - - - - - - - - - - - P !+U 3 -+<+; - - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+/.^.^.B - - - - - - - - - - - ++^+[ [ [ [ _.!+U - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.m+- G *+p+Y L !+I - - - - - - - - - 5..+n+n+n+n+-+q+[ - - - - - - - - - - i+!+6 - - - - - - - - - - ] Z.J.; - (.!+ .- - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+:+<+<+*.- - - - - - - - - - - ++!+!+!+!+!+!+=+f - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.m+- - e /+!+y.!+I - - - - - - - - - 0 ( - - - - %.!+g - - - - - - - - - - i+!+6 - - - - - - - - - - ^.!+'+-+-+p+!+#+_ - - - - - - - - +.!++.- - - - - - - - - - - - - a.!+p - - - - - - - - - - - - - [+!+> - - - - - - - - - - - - - - ++`.o L %+o+U ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.m+- - - _ v.!+!+I - - - - - - - - O !+}.#.#.#.#.l.!+0 - - - - - - - - - - i+!+6 - - - - - - - - - 8 >+y.#.#.#.#.8.!+7.- - - - - - - - +.!+j.#.#.#.#.#.^ - - - - - - - a.!+<.#.#.#.#.Y - - - - - - - - [+!+@.#.#.#.#.#.^ - - - - - - - - ++U.- - g ]+o+O - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z c c c c c c c c c d d d d d d d d d d d d e e e e e e e e e e e f f f f f f f f f f f f g g g g g g g g h h h h ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : !+y.- - - - - - - - - q.m+- - - - > 1.!+I - - - - - - - - 1 Q.)+!+!+!+!+,+w., - - - - - - - - - - i+!+6 - - - - - - - - - h+p+0 - - - - , Q.q+h - - - - - - - +.!+!+!+!+!+!+!+6 - - - - - - - a.!+!+!+!+!+!+$+- - - - - - - - [+!+!+!+!+!+!+!+6 - - - - - - - - ++U.- - - 8 T.!+3+> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z z z z z z z z z A A A A A B B B B B B B C C C C C D D D D D D D E E E E E F F F F F F F G G G G G H H H H H H H ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z z z z z z z z z A A A A A B B B B B B B C C C C C D D D D D D D E E E E E F F F F F F F G G G G G H H H H H H H ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z z z z z z z z z z z A A A A A B B B B B B B C C C C C D D D D D D D E E E E E F F F F F F F G G G G G H H H H H H H ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ", +"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "}; diff --git a/unconfigured.sh b/unconfigured.sh new file mode 100755 index 0000000..34cb9ee --- /dev/null +++ b/unconfigured.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +trap "err_reboot" ERR + +parse_cmdline() { + root= + proxdebug=0 + for par in $(cat /proc/cmdline); do + case $par in + root=*) + root=${par#root=} + ;; + proxdebug) + proxdebug=1 + ;; + esac + done; +} + +debugsh() { + getty 38400 tty1 -i -n -l /bin/bash +} + +real_reboot() { + + trap - ERR + + /etc/init.d/networking stop + + # stop udev (release file handles) + /etc/init.d/udev stop + + echo -n "Deactivating swap..." + swap=$(grep /dev /proc/swaps); + if [ -n "$swap" ]; then + set $swap + swapoff $1 + fi + echo "done." + + umount -l -n /etc/network/run + + umount -l -n /dev/shm + umount -l -n /dev/.static/dev + umount -l -n /dev + + umount -l -n /target >/dev/null 2>&1 + umount -l -n /tmp + umount -l -n /var/tmp + umount -l -n /var/log + umount -l -n /var/run + umount -l -n /var/lib/xkb + + umount -l -n /proc + umount -l -n /sys + + exit 0 +} + +err_reboot() { + + echo "\nInstallation aborted - unable to continue (type exit or CTRL-D to reboot)" + debugsh + real_reboot +} + +echo "Starting Proxmox installation" + +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin + +mount -n -t proc proc /proc +mount -n -t tmpfs tmpfs /tmp +mount -n -t tmpfs tmpfs /var/tmp +mount -n -t tmpfs tmpfs /var/log +mount -n -t tmpfs tmpfs /var/run +mount -n -t tmpfs tmpfs /var/lib/xkb +mount -n -t sysfs sysfs /sys + +parse_cmdline + +# always load most common input drivers +modprobe -q psmouse || /bin/true +modprobe -q sermouse || /bin/true +modprobe -q usbhid || /bin/true + +# load device mapper - used by lilo +modprobe -q dm_mod || /bin/true + +echo "Installing additional hardware drivers" +export RUNLEVEL=S +export PREVLEVEL=N +/etc/init.d/udev start + +# used by if up down scripts +mount -t tmpfs none /dev/shm +mkdir /dev/shm/network +mount -t tmpfs tmpfs /etc/network/run + +# set the hostname +hostname proxmox + +#check system time +/usr/bin/checktime + +# try to get ip config with dhcp +echo -n "Detecting network settings... " +/etc/init.d/networking start >/dev/tty2 2>&1 +echo "done" + +xinit -- -dpi 96 >/dev/tty2 2>&1 + +if [ $proxdebug -ne 0 ]; then + echo "Debugging mode (type exit or CTRL-D to reboot)" + debugsh +fi + +echo "Installation done, rebooting... " +#mdadm -S /dev/md0 >/dev/tty2 2>&1 +real_reboot + +# never reached +exit 0 diff --git a/xinitrc b/xinitrc new file mode 100644 index 0000000..9d39c01 --- /dev/null +++ b/xinitrc @@ -0,0 +1,4 @@ +/usr/bin/xrdb -load /.Xdefaults +/usr/bin/X11/xsetroot -solid grey +openbox & +/usr/bin/proxinstall diff --git a/xorg.conf.fbdev b/xorg.conf.fbdev new file mode 100644 index 0000000..8de7826 --- /dev/null +++ b/xorg.conf.fbdev @@ -0,0 +1,213 @@ +Section "ServerLayout" + Identifier "Default Layout" + Screen "Screen0" + InputDevice "Keyboard0" + InputDevice "USB Mouse" "CorePointer" +EndSection + +Section "ServerFlags" + Option "AllowMouseOpenFail" "true" +EndSection + +Section "Module" + Load "bitmap" + Load "dbe" + Load "ddc" + Load "dri" + Load "freetype" + Load "glx" + Load "int10" + Load "record" + Load "type1" + Load "vbe" + Load "extmod" + SubSection "extmod" + Option "omit xfree86-dga" + EndSubSection +EndSection + +Section "InputDevice" + Identifier "Keyboard0" + Driver "kbd" + Option "CoreKeyboard" + Option "XkbRules" "xorg" + Option "XkbModel" "pc105" + Option "XkbLayout" "us" +EndSection + +Section "InputDevice" + Identifier "Serial Mouse" + Driver "mouse" + Option "Protocol" "Microsoft" + Option "Device" "/dev/ttyS0" + Option "Emulate3Buttons" "true" + Option "Emulate3Timeout" "70" + Option "SendCoreEvents" "true" +EndSection + +Section "InputDevice" + Identifier "PS/2 Mouse" + Driver "mouse" + Option "Protocol" "auto" + Option "ZAxisMapping" "4 5" + Option "Device" "/dev/psaux" + Option "Emulate3Buttons" "true" + Option "Emulate3Timeout" "70" + Option "SendCoreEvents" "true" +EndSection + +Section "InputDevice" + Identifier "USB Mouse" + Driver "mouse" + Option "Device" "/dev/input/mice" + Option "SendCoreEvents" "true" + Option "Protocol" "auto" + Option "ZAxisMapping" "4 5" + Option "Buttons" "5" +EndSection + +Section "Device" + Identifier "Card0" + Driver "fbdev" +EndSection + +Section "Screen" + Identifier "Screen0" + Device "Card0" + Monitor "Monitor0" + + DefaultDepth 16 + SubSection "Display" + Depth 16 + Modes "1280x1024" "1152x864" "1024x768" "800x600" "640x480" + EndSubSection +EndSection + +Section "DRI" + Mode 0666 +EndSection + +Section "Monitor" + Identifier "Monitor0" + Option "DPMS" "true" + HorizSync 28.0 - 96.0 # Warning: This may fry old Monitors + VertRefresh 50.0 - 75.0 # Very conservative. May flicker. + # Default modes from + # "VESA and Industry Standards and Guide for Computer Display Monitor + # Timing", version 1.0, revision 0.8, adopted September 17, 1998. + # $XFree86: xc/programs/Xserver/hw/xfree86/etc/vesamodes,v 1.4 1999/11/18 16:52:17 tsi Exp $ + # 640x350 @ 85Hz (VESA) hsync: 37.9kHz + ModeLine "640x350" 31.5 640 672 736 832 350 382 385 445 +hsync -vsync + # 640x400 @ 85Hz (VESA) hsync: 37.9kHz + ModeLine "640x400" 31.5 640 672 736 832 400 401 404 445 -hsync +vsync + # 720x400 @ 85Hz (VESA) hsync: 37.9kHz + ModeLine "720x400" 35.5 720 756 828 936 400 401 404 446 -hsync +vsync + # 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz + ModeLine "640x480" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync + # 640x480 @ 72Hz (VESA) hsync: 37.9kHz + ModeLine "640x480" 31.5 640 664 704 832 480 489 491 520 -hsync -vsync + # 640x480 @ 75Hz (VESA) hsync: 37.5kHz + ModeLine "640x480" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync + # 640x480 @ 85Hz (VESA) hsync: 43.3kHz + ModeLine "640x480" 36.0 640 696 752 832 480 481 484 509 -hsync -vsync + # 800x600 @ 56Hz (VESA) hsync: 35.2kHz + ModeLine "800x600" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync + # 800x600 @ 60Hz (VESA) hsync: 37.9kHz + ModeLine "800x600" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync + # 800x600 @ 72Hz (VESA) hsync: 48.1kHz + ModeLine "800x600" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync + # 800x600 @ 75Hz (VESA) hsync: 46.9kHz + ModeLine "800x600" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync + # 800x600 @ 85Hz (VESA) hsync: 53.7kHz + ModeLine "800x600" 56.3 800 832 896 1048 600 601 604 631 +hsync +vsync + # 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz + ModeLine "1024x768" 44.9 1024 1032 1208 1264 768 768 776 817 +hsync +vsync Interlace + # 1024x768 @ 60Hz (VESA) hsync: 48.4kHz + ModeLine "1024x768" 65.0 1024 1048 1184 1344 768 771 777 806 -hsync -vsync + # 1024x768 @ 70Hz (VESA) hsync: 56.5kHz + ModeLine "1024x768" 75.0 1024 1048 1184 1328 768 771 777 806 -hsync -vsync + # 1024x768 @ 75Hz (VESA) hsync: 60.0kHz + ModeLine "1024x768" 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync + # 1024x768 @ 85Hz (VESA) hsync: 68.7kHz + ModeLine "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync +vsync + # 1152x864 @ 75Hz (VESA) hsync: 67.5kHz + ModeLine "1152x864" 108.0 1152 1216 1344 1600 864 865 868 900 +hsync +vsync + # 1280x960 @ 60Hz (VESA) hsync: 60.0kHz + ModeLine "1280x960" 108.0 1280 1376 1488 1800 960 961 964 1000 +hsync +vsync + # 1280x960 @ 85Hz (VESA) hsync: 85.9kHz + ModeLine "1280x960" 148.5 1280 1344 1504 1728 960 961 964 1011 +hsync +vsync + # 1280x1024 @ 60Hz (VESA) hsync: 64.0kHz + ModeLine "1280x1024" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync + # 1280x1024 @ 75Hz (VESA) hsync: 80.0kHz + ModeLine "1280x1024" 135.0 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync + # 1280x1024 @ 85Hz (VESA) hsync: 91.1kHz + ModeLine "1280x1024" 157.5 1280 1344 1504 1728 1024 1025 1028 1072 +hsync +vsync + # 1600x1200 @ 60Hz (VESA) hsync: 75.0kHz + ModeLine "1600x1200" 162.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1600x1200 @ 65Hz (VESA) hsync: 81.3kHz + ModeLine "1600x1200" 175.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1600x1200 @ 70Hz (VESA) hsync: 87.5kHz + ModeLine "1600x1200" 189.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1600x1200 @ 75Hz (VESA) hsync: 93.8kHz + ModeLine "1600x1200" 202.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1600x1200 @ 85Hz (VESA) hsync: 106.3kHz + ModeLine "1600x1200" 229.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync + # 1792x1344 @ 60Hz (VESA) hsync: 83.6kHz + ModeLine "1792x1344" 204.8 1792 1920 2120 2448 1344 1345 1348 1394 -hsync +vsync + # 1792x1344 @ 75Hz (VESA) hsync: 106.3kHz + ModeLine "1792x1344" 261.0 1792 1888 2104 2456 1344 1345 1348 1417 -hsync +vsync + # 1856x1392 @ 60Hz (VESA) hsync: 86.3kHz + ModeLine "1856x1392" 218.3 1856 1952 2176 2528 1392 1393 1396 1439 -hsync +vsync + # 1856x1392 @ 75Hz (VESA) hsync: 112.5kHz + ModeLine "1856x1392" 288.0 1856 1984 2208 2560 1392 1393 1396 1500 -hsync +vsync + # 1920x1440 @ 60Hz (VESA) hsync: 90.0kHz + ModeLine "1920x1440" 234.0 1920 2048 2256 2600 1440 1441 1444 1500 -hsync +vsync + # 1920x1440 @ 75Hz (VESA) hsync: 112.5kHz + ModeLine "1920x1440" 297.0 1920 2064 2288 2640 1440 1441 1444 1500 -hsync +vsync + # Additional modelines + ModeLine "1800x1440" 230 1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync + ModeLine "1800x1440" 250 1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync + # Extended modelines with GTF timings + # 640x480 @ 100.00 Hz (GTF) hsync: 50.90 kHz; pclk: 43.16 MHz + ModeLine "640x480" 43.16 640 680 744 848 480 481 484 509 -HSync +Vsync + # 768x576 @ 60.00 Hz (GTF) hsync: 35.82 kHz; pclk: 34.96 MHz + ModeLine "768x576" 34.96 768 792 872 976 576 577 580 597 -HSync +Vsync + # 768x576 @ 72.00 Hz (GTF) hsync: 43.27 kHz; pclk: 42.93 MHz + ModeLine "768x576" 42.93 768 800 880 992 576 577 580 601 -HSync +Vsync + # 768x576 @ 75.00 Hz (GTF) hsync: 45.15 kHz; pclk: 45.51 MHz + ModeLine "768x576" 45.51 768 808 888 1008 576 577 580 602 -HSync +Vsync + # 768x576 @ 85.00 Hz (GTF) hsync: 51.42 kHz; pclk: 51.84 MHz + ModeLine "768x576" 51.84 768 808 888 1008 576 577 580 605 -HSync +Vsync + # 768x576 @ 100.00 Hz (GTF) hsync: 61.10 kHz; pclk: 62.57 MHz + ModeLine "768x576" 62.57 768 816 896 1024 576 577 580 611 -HSync +Vsync + # 800x600 @ 100.00 Hz (GTF) hsync: 63.60 kHz; pclk: 68.18 MHz + ModeLine "800x600" 68.18 800 848 936 1072 600 601 604 636 -HSync +Vsync + # 1024x768 @ 100.00 Hz (GTF) hsync: 81.40 kHz; pclk: 113.31 MHz + ModeLine "1024x768" 113.31 1024 1096 1208 1392 768 769 772 814 -HSync +Vsync + # 1152x864 @ 60.00 Hz (GTF) hsync: 53.70 kHz; pclk: 81.62 MHz + ModeLine "1152x864" 81.62 1152 1216 1336 1520 864 865 868 895 -HSync +Vsync + # 1152x864 @ 85.00 Hz (GTF) hsync: 77.10 kHz; pclk: 119.65 MHz + ModeLine "1152x864" 119.65 1152 1224 1352 1552 864 865 868 907 -HSync +Vsync + # 1152x864 @ 100.00 Hz (GTF) hsync: 91.50 kHz; pclk: 143.47 MHz + ModeLine "1152x864" 143.47 1152 1232 1360 1568 864 865 868 915 -HSync +Vsync + # 1280x960 @ 72.00 Hz (GTF) hsync: 72.07 kHz; pclk: 124.54 MHz + ModeLine "1280x960" 124.54 1280 1368 1504 1728 960 961 964 1001 -HSync +Vsync + # 1280x960 @ 75.00 Hz (GTF) hsync: 75.15 kHz; pclk: 129.86 MHz + ModeLine "1280x960" 129.86 1280 1368 1504 1728 960 961 964 1002 -HSync +Vsync + # 1280x960 @ 100.00 Hz (GTF) hsync: 101.70 kHz; pclk: 178.99 MHz + ModeLine "1280x960" 178.99 1280 1376 1520 1760 960 961 964 1017 -HSync +Vsync + # 1280x1024 @ 100.00 Hz (GTF) hsync: 108.50 kHz; pclk: 190.96 MHz + ModeLine "1280x1024" 190.96 1280 1376 1520 1760 1024 1025 1028 1085 -HSync +Vsync + # 1400x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 122.61 MHz + ModeLine "1400x1050" 122.61 1400 1488 1640 1880 1050 1051 1054 1087 -HSync +Vsync + # 1400x1050 @ 72.00 Hz (GTF) hsync: 78.77 kHz; pclk: 149.34 MHz + ModeLine "1400x1050" 149.34 1400 1496 1648 1896 1050 1051 1054 1094 -HSync +Vsync + # 1400x1050 @ 75.00 Hz (GTF) hsync: 82.20 kHz; pclk: 155.85 MHz + ModeLine "1400x1050" 155.85 1400 1496 1648 1896 1050 1051 1054 1096 -HSync +Vsync + # 1400x1050 @ 85.00 Hz (GTF) hsync: 93.76 kHz; pclk: 179.26 MHz + ModeLine "1400x1050" 179.26 1400 1504 1656 1912 1050 1051 1054 1103 -HSync +Vsync + # 1400x1050 @ 100.00 Hz (GTF) hsync: 111.20 kHz; pclk: 214.39 MHz + ModeLine "1400x1050" 214.39 1400 1512 1664 1928 1050 1051 1054 1112 -HSync +Vsync + # 1600x1200 @ 100.00 Hz (GTF) hsync: 127.10 kHz; pclk: 280.64 MHz + ModeLine "1600x1200" 280.64 1600 1728 1904 2208 1200 1201 1204 1271 -HSync +Vsync +EndSection