summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author Eric Hameleers <alien@slackware.com>2015-11-28 01:52:06 +0100
committer Eric Hameleers <alien@slackware.com>2015-11-28 01:52:06 +0100
commit4d5cdc379e338c1c28f4d7d09226d4167a3f9e1e (patch)
tree95eba4e47f473c238361f19750cbd7d392a333e1
downloadliveslak-4d5cdc379e338c1c28f4d7d09226d4167a3f9e1e.tar.gz
liveslak-4d5cdc379e338c1c28f4d7d09226d4167a3f9e1e.tar.xz
Slackware Live Edition: initial commit.Beta2
This is Beta 2. Read http://alien.slackbook.org/blog/slackware-live-edition-beta-2 for all the details.
-rw-r--r--blueSW-128px.pngbin0 -> 29903 bytes
-rw-r--r--blueSW-64px.pngbin0 -> 8803 bytes
-rw-r--r--iso2usb.sh312
-rw-r--r--languages12
-rwxr-xr-xliveinit442
-rwxr-xr-xmake_slackware_live.sh1189
-rwxr-xr-xmakemod48
-rw-r--r--menu.tpl70
-rw-r--r--pkglists/alien.conf8
-rw-r--r--pkglists/alien.lst63
-rw-r--r--pkglists/kde4add.lst116
-rw-r--r--pkglists/kde4base.lst282
-rw-r--r--pkglists/kde4plasma5.lst27
-rw-r--r--pkglists/min.lst117
-rw-r--r--pkglists/plasma5.conf8
-rw-r--r--pkglists/plasma5.lst385
-rw-r--r--pkglists/slackextra.lst5
-rw-r--r--pkglists/xapbase.lst32
-rw-r--r--pkglists/xbase.lst386
-rw-r--r--pkglists/xfcebase.lst27
-rw-r--r--syslinux/efiboot.imgbin0 -> 1474560 bytes
-rw-r--r--syslinux/f2.txt27
-rw-r--r--syslinux/iso.sort3
-rw-r--r--syslinux/isolinux.binbin0 -> 24576 bytes
-rw-r--r--syslinux/isolinux.cfg1
-rw-r--r--syslinux/lang.cfg51
-rw-r--r--syslinux/memtestbin0 -> 150024 bytes
-rw-r--r--syslinux/message.txt12
-rw-r--r--syslinux/swlogov.pngbin0 -> 10289 bytes
-rw-r--r--syslinux/syslinux.cfg15
-rw-r--r--xdm/Xresources56
-rwxr-xr-xxdm/Xsetup43
-rwxr-xr-xxdm/Xstartup8
-rw-r--r--xdm/bluepiSW.xpm387
-rwxr-xr-xxdm/buttons15
-rw-r--r--xdm/slackware_traditional.svg109
-rw-r--r--xdm/slackware_traditional_black.svg109
-rw-r--r--xdm/xdm-config28
38 files changed, 4393 insertions, 0 deletions
diff --git a/blueSW-128px.png b/blueSW-128px.png
new file mode 100644
index 0000000..7eea5a2
--- /dev/null
+++ b/blueSW-128px.png
Binary files differ
diff --git a/blueSW-64px.png b/blueSW-64px.png
new file mode 100644
index 0000000..c7f42db
--- /dev/null
+++ b/blueSW-64px.png
Binary files differ
diff --git a/iso2usb.sh b/iso2usb.sh
new file mode 100644
index 0000000..79cf944
--- /dev/null
+++ b/iso2usb.sh
@@ -0,0 +1,312 @@
+#!/bin/bash
+# $Id: iso2usb.sh,v 1.5 2015/11/22 22:53:01 root Exp root $
+#
+# Copyright 2015 Eric Hameleers, Eindhoven, NL
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Be careful:
+set -e
+
+# Set to '1' if the script should not ask any questions:
+UNATTENDED=0
+
+# By default do not show file operations in detail:
+VERBOSE=0
+
+# Seconds to add to the initrd as wait-for-root value:
+WAIT=5
+
+# Define ahead of time, so that cleanup knows about them:
+IMGDIR=""
+EFIMNT=""
+ISOMNT=""
+USBMNT=""
+
+# Clean up in case of failure:
+cleanup() {
+ # Clean up by unmounting our loopmounts, deleting tempfiles:
+ echo "--- Cleaning up the staging area..."
+ # During cleanup, do not abort due to non-zero exit code:
+ set +e
+ sync
+ [ -n "${EFIMNT}" ] && ( umount -f ${EFIMNT} ; rmdir $EFIMNT )
+ [ -n "${ISOMNT}" ] && ( umount -f ${ISOMNT} ; rmdir $ISOMNT )
+ [ -n "${USBMNT}" ] && ( umount -f ${USBMNT} ; rmdir $USBMNT )
+ [ -n "${IMGDIR}" ] && ( rm -rf $IMGDIR )
+ set -e
+}
+trap 'echo "*** $0 FAILED at line $LINENO ***"; cleanup; exit 1' ERR INT TERM
+
+showhelp() {
+cat <<EOT
+#
+# Purpose: to transfer the content of Slackware's Live ISO image
+# to a standard USB thumb drive (which will be formatted and wiped!)
+# and thus create a Slackware Live USB media.
+#
+# Your USB thumb drive may contain data!
+# This data will be *erased* !
+#
+# $(basename $0) accepts the following parameters:
+# -h|--help This help
+# -i|--infile <filename> Full path to the ISO image file
+# -o|--outdev <filename> The device name of your USB drive
+# -u|--unattended Do not ask any questions
+# -v|--verbose Show verbose messages
+# -w|--wait<number> Pause boot <number> seconds to ititialize USB
+
+#
+# Example:
+#
+# $(basename $0) -i ~/download/slackware64-live-14.2.iso -o /dev/sdX
+#
+EOT
+}
+
+# Parse the commandline parameters:
+if [ -z "$1" ]; then
+ showhelp
+ exit 1
+fi
+while [ ! -z "$1" ]; do
+ case $1 in
+ -h|--help)
+ showhelp
+ exit
+ ;;
+ -i|--infile)
+ SLISO="$(cd $(dirname $2); pwd)/$(basename $2)"
+ shift 2
+ ;;
+ -o|--outdev)
+ TARGET="$2"
+ shift 2
+ ;;
+ -u|--unattended)
+ UNATTENDED=1
+ shift
+ ;;
+ -v|--verbose)
+ VERBOSE=1
+ RVERBOSE=" -v --progress "
+ shift
+ ;;
+ -w|--wait)
+ WAIT="$2"
+ shift 2
+ ;;
+ *)
+ echo "*** Unknown parameter '$1'!"
+ exit 1
+ ;;
+ esac
+done
+
+# Before we start:
+[ -x /bin/id ] && CMD_ID="/bin/id" || CMD_ID="/usr/bin/id"
+if [ "$($CMD_ID -u)" != "0" ]; then
+ echo "*** You need to be root to run $(basename $0)."
+ exit 1
+fi
+
+# More sanity checks:
+if [ -z "$TARGET" -o -z "$SLISO" ]; then
+ echo "*** You must specify both the Live ISO filename and the USB devicename!"
+ exit 1
+fi
+
+if [ ! -f $SLISO ]; then
+ echo "*** This is not a useable file: '$SLISO' !"
+ exit 1
+fi
+
+if [ ! -b $TARGET ]; then
+ echo "*** Not a block device: '$TARGET' !"
+ exit 1
+elif [ "$(echo ${TARGET%[0-9]})" != "$TARGET" ]; then
+ echo "*** You need to point to the USB device, not a partition ($TARGET)!"
+ exit 1
+fi
+
+# Are all the required not-so-common add-on tools present?
+PROG_MISSING=""
+for PROGN in cpio extlinux fdisk mkdosfs sgdisk ; do
+ if ! which $PROGN 1>/dev/null 2>/dev/null ; then
+ PROG_MISSING="${PROG_MISSING}-- $PROGN\n"
+ fi
+done
+if [ ! -z "$PROG_MISSING" ] ; then
+ echo "-- Required program(s) not found in PATH!"
+ echo -e ${PROG_MISSING}
+ echo "-- Exiting."
+ exit 1
+fi
+
+# Confirm wipe:
+cat <<EOT
+#
+# We are going to format this device (erase all data) - '$TARGET':
+# Vendor : $(cat /sys/block/$(basename $TARGET)/device/vendor)
+# Model : $(cat /sys/block/$(basename $TARGET)/device/model)
+# Size : $(( $(cat /sys/block/$(basename $TARGET)/size) / 2048)) MB
+#
+# FDISK OUTPUT:
+EOT
+/sbin/fdisk -l $TARGET | while read LINE ; do echo "# $LINE" ; done
+
+if [ $UNATTENDED -eq 0 ]; then
+ cat <<EOT
+
+*** ***
+*** If this is the wrong drive, then press CONTROL-C now! ***
+*** ***
+
+EOT
+ read -p "Or press ENTER to continue: " JUNK
+ # OK... the user was sure about the drive...
+fi
+
+# Get the LABEL used for the ISO:
+LIVELABEL=$(blkid -s LABEL -o value ${SLISO})
+
+# Use sgdisk to wipe and then setup the USB device:
+# - 1 MB BIOS boot partition
+# - 200 MB EFI system partition
+# - Let Slackware have the rest
+# - Make the Linux partition "legacy BIOS bootable"
+# The first sgdisk command is allowed to have non-zero exit code:
+sgdisk -Z $TARGET || true
+sgdisk -og $TARGET || true
+sgdisk \
+ -n 1:2048:4095 -c 1:"BIOS Boot Partition" -t 1:ef02 \
+ -n 2:4096:413695 -c 2:"EFI System Partition" -t 2:ef00 \
+ -n 3:413696:0 -c 3:"Slackware Linux" -t 3:8300 \
+ $TARGET
+sgdisk -A 3:set:2 $TARGET
+# Show what we did to the USB stick:
+sgdisk -p -A 3:show $TARGET
+
+# Create filesystems:
+# Not enough clusters for a 32 bit FAT:
+mkdosfs -s 2 -n "DOS" ${TARGET}1
+mkdosfs -F32 -s 2 -n "EFI" ${TARGET}2
+# KDE tends to automount.. so try an umount:
+if mount |grep -qw ${TARGET}3 ; then umount ${TARGET}3 || true ; fi
+mkfs.ext4 -F -F -L "${LIVELABEL}" -m 0 ${TARGET}3
+tune2fs -c 0 -i 0 ${TARGET}3
+
+# Create temporary mount points for the ISO file:
+mkdir -p /mnt
+EFIMNT=$(mktemp -d -p /mnt -t alienefi.XXXXXX)
+if [ ! -d $EFIMNT ]; then
+ echo "*** Failed to create a temporary mount point for the ISO!"
+ exit 1
+else
+ chmod 711 $EFIMNT
+fi
+ISOMNT=$(mktemp -d -p /mnt -t alieniso.XXXXXX)
+if [ ! -d $ISOMNT ]; then
+ echo "*** Failed to create a temporary mount point for the ISO!"
+ exit 1
+else
+ chmod 711 $ISOMNT
+fi
+
+# Find out if the ISO contains an EFI bootloader and use it:
+EFIOFFSET=$(fdisk -lu ${SLISO} |grep EFI |tr -s ' ' | cut -d' ' -f 2)
+if [ -n "$EFIOFFSET" ]; then
+ # Mount the EFI partition so we can retrieve the EFI bootloader:
+ mount -o loop,offset=$((512*$EFIOFFSET)) ${SLISO} ${EFIMNT}
+ if [ ! -f ${EFIMNT}/EFI/BOOT/bootx64.efi ]; then
+ echo "-- Note: UEFI boot file 'bootx64.efi' not found on ISO."
+ echo "-- UEFI boot will not be supported"
+ fi
+fi
+
+# Create a temporary mount point for the USB device:
+mkdir -p /mnt
+USBMNT=$(mktemp -d -p /mnt -t alienusb.XXXXXX)
+if [ ! -d $USBMNT ]; then
+ echo "*** Failed to create a temporary mount point for the USB device!"
+ exit 1
+else
+ chmod 711 $USBMNT
+fi
+
+# Mount the EFI partition and copy the EFI boot image to it:
+mount -t vfat -o shortname=mixed ${TARGET}2 ${USBMNT}
+mkdir -p ${USBMNT}/EFI/BOOT
+cp ${EFIMNT}/EFI/BOOT/bootx64.efi ${USBMNT}/EFI/BOOT
+umount ${USBMNT}
+umount ${EFIMNT}
+
+# Mount the Linux partition:
+mount -t auto ${TARGET}3 ${USBMNT}
+
+# Loop-mount the ISO (or 1st partition if this is a hybrid ISO):
+mount -o loop ${SLISO} ${ISOMNT}
+
+# Copy the ISO content into the USB Linux partition:
+echo "--- Copying files from ISO to USB... takes some time."
+rsync -a ${RVERBOSE} ${ISOMNT}/* ${USBMNT}/
+
+# Create a temporary extraction directory for the initrd:
+mkdir -p /mnt
+IMGDIR=$(mktemp -d -p /mnt -t alienimg.XXXXXX)
+if [ ! -d $IMGDIR ]; then
+ echo "*** Failed to create a temporary extraction directory for the initrd!"
+ exit 1
+else
+ chmod 711 $IMGDIR
+fi
+
+# USB boot medium needs a few seconds boot delay or else the overlay will fail:
+echo "--- Extracting Slackware initrd and adding rootdelay for USB..."
+cd ${IMGDIR}
+gunzip -cd ${USBMNT}/boot/initrd.img |cpio -i -d -H newc --no-absolute-filenames
+echo ${WAIT} > wait-for-root
+echo "--- Compressing the initrd image again:"
+chmod 0755 ${IMGDIR}
+find . |cpio -o -H newc |gzip > ${USBMNT}/boot/initrd.img
+cd - 2>/dev/null
+
+# Create persistence directory:
+mkdir -p ${USBMNT}/persistence
+
+# Use extlinux to make the USB device bootable:
+echo "--- Making the USB drive '$TARGET' bootable using extlinux..."
+mv ${USBMNT}/boot/syslinux ${USBMNT}/boot/extlinux
+mv ${USBMNT}/boot/extlinux/isolinux.cfg ${USBMNT}/boot/extlinux/extlinux.conf
+rm ${USBMNT}/boot/extlinux/isolinux.*
+extlinux --install ${USBMNT}/boot/extlinux
+
+# Unmount/remove stuff:
+cleanup
+
+# Install a GPT compatible MBR record:
+if [ -f /usr/share/syslinux/gptmbr.bin ]; then
+ cat /usr/share/syslinux/gptmbr.bin > ${TARGET}
+else
+ echo "*** Failed to make USB device bootable - 'gptmbr.bin' not found!"
+ exit 1
+fi
+
+# THE END
+
diff --git a/languages b/languages
new file mode 100644
index 0000000..3b5f20a
--- /dev/null
+++ b/languages
@@ -0,0 +1,12 @@
+#code,name,kbd,tz,locale
+be,belgisch,be-latin1,Europe/Brussels,nl_BE.utf8
+br,brazil,br-latin1-us,America/Sao_Paulo,pt_BR.utf8
+gb,british,uk,Etc/GMT,en_GB.utf8
+de,deutsch,de-latin1,Europe/Berlin,de_DE.utf8
+es,espanol,es,Europe/Madrid,es_ES.utf8
+fr,francais,fr,Europe/Paris,fr_FR.utf8
+it,italiano,it,Europe/Rome,it_IT.utf8
+ja,japanese,jp106,Asia/Tokyo,ja_JP.utf8
+nl,nederlands,nl,Europe/Amsterdam,nl_NL.utf8
+ru,russian,ru_win,Europe/Moscow,ru_RU.utf8
+us,us american,us,US/Pacific,en_US.utf8
diff --git a/liveinit b/liveinit
new file mode 100755
index 0000000..624f3ba
--- /dev/null
+++ b/liveinit
@@ -0,0 +1,442 @@
+#!/bin/ash
+#
+# Copyright 2004 Slackware Linux, Inc., Concord, CA, USA
+# Copyright 2007, 2008, 2009, 2010, 2012 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2015 Eric Hameleers, Eindhoven, NL
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+##################################################################################
+# Changelog
+# 10-Dec-2012 <mozes@slackware.com>
+# * Added support for the official Kernel parameters to select root filesystem
+# type ('rootfstype') and pause before attempting to mount the root filesystem
+# ('rootdelay'). The original parameters may continue to be used.
+# 23-Oct-2015 <alien@slackware.com>
+# * Modified for booting as a Live filesystem.
+##################################################################################
+
+# The ISO creation script will create a filesystem with this label.
+# Nevertheless, the user may have copied the ISO content to a different device.
+MEDIALABEL="@MEDIALABEL@"
+
+# By default, let the media determine if we can write persistent changes:
+VIRGIN=0
+
+INITRD=$(cat /initrd-name)
+WAIT=$(cat /wait-for-root)
+KEYMAP=$(cat /keymap)
+INIT=/sbin/init
+
+PATH="/sbin:/bin:/usr/sbin:/usr/bin"
+
+# Mount /proc and /sys:
+mount -n proc /proc -t proc
+mount -n sysfs /sys -t sysfs
+mount -n tmpfs /run -t tmpfs -o mode=0755
+
+if grep devtmpfs /proc/filesystems 1>/dev/null 2>/dev/null ; then
+ DEVTMPFS=1
+ mount -n devtmpfs /dev -t devtmpfs
+fi
+
+# Parse command line
+for ARG in $(cat /proc/cmdline); do
+ case $ARG in
+ 0|1|2|3|4|5|6|S|s|single)
+ RUNLEVEL=$ARG
+ ;;
+ hostname=*)
+ LIVE_HOSTNAME=$(echo $ARG | cut -f2 -d=)
+ ;;
+ init=*)
+ INIT=$(echo $ARG | cut -f2 -d=)
+ ;;
+ kbd=*)
+ KEYMAP=$(echo $ARG | cut -f2 -d=)
+ ;;
+ livepw=*)
+ LIVEPW=$(echo $ARG | cut -f2 -d=)
+ ;;
+ load=*)
+ LOAD=$(echo $ARG | cut -f2 -d=)
+ ;;
+ noload=*)
+ NOLOAD=$(echo $ARG | cut -f2 -d=)
+ ;;
+ locale=*)
+ LOCALE=$(echo $ARG | cut -f2 -d=)
+ ;;
+ nop)
+ VIRGIN=1
+ ;;
+ rescue)
+ RESCUE=1
+ ;;
+ swap)
+ USE_SWAP=1
+ ;;
+ rootpw=*)
+ ROOTPW=$(echo $ARG | cut -f2 -d=)
+ ;;
+ tz=*)
+ TZ=$(echo $ARG | cut -f2 -d=)
+ ;;
+ waitforroot=*|rootdelay=*)
+ WAIT=$(echo $ARG | cut -f2 -d=)
+ ;;
+ esac
+done
+
+# If udevd is available, use it to generate block devices
+# else use mdev to read sysfs and generate the needed devices
+if [ -x /sbin/udevd -a -x /sbin/udevadm ]; then
+ /sbin/udevd --daemon --resolve-names=never
+ /sbin/udevadm trigger --subsystem-match=block --action=add
+ /sbin/udevadm settle --timeout=10
+else
+ [ "$DEVTMPFS" != "1" ] && mdev -s
+fi
+
+# Load kernel modules (ideally this was already done by udev):
+if [ ! -d /lib/modules/$(uname -r) ]; then
+ echo "No kernel modules found for Linux $(uname -r)."
+elif [ -x ./load_kernel_modules ]; then # use load_kernel_modules script:
+ echo "${INITRD}: Loading kernel modules from initrd image:"
+ . ./load_kernel_modules 1>/dev/null 2>/dev/null
+else # load modules (if any) in order:
+ if ls /lib/modules/$(uname -r)/*.*o 1> /dev/null 2> /dev/null ; then
+ echo "${INITRD}: Loading kernel modules from initrd image:"
+ for module in /lib/modules/$(uname -r)/*.*o ; do
+ /sbin/modprobe $module 1>/dev/null 2>/dev/null
+ done
+ unset module
+ fi
+fi
+
+# Sometimes the devices need extra time to be available.
+# A root filesystem on USB is a good example of that.
+sleep $WAIT
+# Fire at least one blkid:
+blkid 1>/dev/null 2>/dev/null
+
+# Load a custom keyboard mapping:
+if [ -n "$KEYMAP" ]; then
+ echo "${INITRD}: Loading '$KEYMAP' keyboard mapping:"
+ tar xzOf /etc/keymaps.tar.gz ${KEYMAP}.bmap | loadkmap
+fi
+
+if [ "$RESCUE" = "" ]; then
+ # Initialize RAID:
+ if [ -x /sbin/mdadm ]; then
+ # If /etc/mdadm.conf is present, udev should DTRT on its own;
+ # If not, we'll make one and go from there:
+ if [ ! -r /etc/mdadm.conf ]; then
+ /sbin/mdadm -E -s >/etc/mdadm.conf
+ /sbin/mdadm -S -s
+ /sbin/mdadm -A -s
+ # This seems to make the kernel see partitions more reliably:
+ fdisk -l /dev/md* 1> /dev/null 2> /dev/null
+ fi
+ fi
+
+ # Scan for btrfs multi-device filesystems:
+ if [ -x /sbin/btrfs ]; then
+ /sbin/btrfs device scan
+ fi
+
+ # --------------------------------------------------------------------- #
+ # SLACKWARE LIVE - START #
+ # --------------------------------------------------------------------- #
+
+ # We need a mounted filesystem here to be able to do a switch_root later,
+ # so we create one in RAM:
+ mount -t tmpfs -o defaults none /mnt
+
+ # Find the Slackware Live media.
+ # We iterate a maximum of 10 times to give USB devices a chance to be seen
+ # by the kernel. Set the WAIT variable to increase the iterations.
+ mkdir /mnt/media
+ for ITER in $(seq 1 ${WAIT:-10}); do
+ # Filter out the block devices, only look at partitions at first:
+ LIVEMEDIA=$(blkid |grep LABEL="\"$MEDIALABEL\"" |cut -d: -f1 |grep "[0-9]$")
+ if [ ! -z "$LIVEMEDIA" ]; then
+ # That was easy... we found the media straight away.
+ # Determine filesystem type ('iso9660' means we found a CDROM/DVD)
+ LIVEFS=$(blkid $LIVEMEDIA |rev |cut -d'"' -f2 |rev)
+ mount -t auto -o ro $LIVEMEDIA /mnt/media
+ else
+ LIVEMEDIA=$(blkid |grep LABEL="\"$MEDIALABEL\"" |cut -d: -f1 |grep -v "[0-9]$")
+ if [ ! -z "$LIVEMEDIA" ]; then
+ # We found a block device with the correct label (non-UEFI media).
+ # Determine filesystem type ('iso9660' means we found a CDROM/DVD)
+ LIVEFS=$(blkid $LIVEMEDIA |rev |cut -d'"' -f2 |rev)
+ mount -t auto -o ro $LIVEMEDIA /mnt/media
+ else
+ # Bummer... label not found; the ISO was extracted to a different device.
+ # Separate partitions from block devices, look at partitions first:
+ for SLDEVICE in $(blkid |cut -d: -f1 |grep "[0-9]$") $(blkid |cut -d: -f1 |grep -v "[0-9]$") ; do
+ mount -t auto -o ro $SLDEVICE /mnt/media
+ if [ -d /mnt/media/liveslak ]; then
+ # Found our media!
+ LIVEMEDIA=$SLDEVICE
+ LIVEFS=$(blkid $LIVEMEDIA |rev |cut -d'"' -f2 |rev)
+ break
+ else
+ umount $SLDEVICE
+ unset SLDEVICE
+ fi
+ done
+ fi
+ fi
+ if [ -n "$LIVEMEDIA" ]; then
+ # Gotcha!
+ break
+ fi
+ sleep 1
+ done
+
+ if [ ! -z "$LIVEMEDIA" ]; then
+ echo "${INITRD}: Live media found at ${LIVEMEDIA}."
+ else
+ echo "${INITRD}: No live media found... trouble ahead."
+ echo "${INITRD}: Try adding \"rootdelay=20\" to the boot command."
+ fi
+
+ # Start assembling our live system components below /mnt/live :
+ mkdir /mnt/live
+
+ # Mount our squashed modules (.sxz extension).
+ mkdir /mnt/live/modules
+ # Modules were created in specific order and will be mounted in that order.
+ # In the lowerdirs parameter for the overlay, the module with the highest
+ # number (i.e. created last) will be leftmost in a colon-separated list:
+ RODIRS=""
+ # First, the base Slackware system components:
+ for MODLOC in $(ls -1 /mnt/media/liveslak/system/*.sxz) ; do
+ MODBASE="$(basename ${MODLOC} .sxz)"
+ mkdir /mnt/live/modules/${MODBASE}
+ mount -t squashfs -o loop ${MODLOC} /mnt/live/modules/${MODBASE}
+ RODIRS=":/mnt/live/modules/${MODBASE}${RODIRS}"
+ done
+
+ # Next, the add-on (3rd party etc) components, if any:
+ # Remember, module name must adhere to convention: "NNNN-modname-*.sxz"
+ # where 'N' is a digit and 'modname' must not contain a dash '-'.
+ if ls /mnt/media/liveslak/addons/*.sxz 1>/dev/null 2>/dev/null ; then
+ for MODLOC in /mnt/media/liveslak/addons/*.sxz ; do
+ MODBASE="$(basename $MODLOC .sxz)"
+ # Skip loading one or more addons by using boot parameter 'noload':
+ # noload=mod1[,mod2[,mod3]]
+ if [ -n "$NOLOAD" -a -n '$(echo ",${NOLOAD}," |grep -i ",$(echo $MODBASE |cut -d- -f2),")' ]; then
+ echo "$MODBASE" >> /mnt/live/modules/skipped
+ else
+ mkdir /mnt/live/modules/${MODBASE}
+ mount -t squashfs -o loop ${MODLOC} /mnt/live/modules/${MODBASE}
+ RODIRS=":/mnt/live/modules/${MODBASE}${RODIRS}"
+ fi
+ done
+ fi
+
+ # And finally any explicitly requested optionals (like nvidia drivers):
+ # Remember, module name must adhere to convention: "NNNN-modname-*.sxz"
+ # where 'N' is a digit and 'modname' must not contain a dash '-'.
+ if ls /mnt/media/liveslak/optional/*.sxz 1>/dev/null 2>/dev/null ; then
+ for MODLOC in /mnt/media/liveslak/optional/*.sxz ; do
+ MODBASE="$(basename $MODLOC .sxz)"
+ if [ -n "$LOAD" -a -n '$(echo ",${LOAD}," |grep -i ",$(echo $MODBASE |cut -d- -f2),")' ]; then
+ mkdir /mnt/live/modules/${MODBASE}
+ mount -t squashfs -o loop ${MODLOC} /mnt/live/modules/${MODBASE}
+ RODIRS=":/mnt/live/modules/${MODBASE}${RODIRS}"
+ fi
+ done
+ fi
+
+ # Get rid of the starting colon:
+ RODIRS=$(echo $RODIRS |cut -c2-)
+
+ # Setup persistency in case our media is writable, *and* the user
+ # has created a directory "persistence" in the root of the media.
+ # otherwise we let the block changes accumulate in RAM only.
+
+ # Create the mount point for the writable upper directory of the overlay:
+ # Assume the default to be a readonly media - we write to RAM:
+ UPPERDIR=/mnt/live/changes
+ OVLWORK=/mnt/live/.ovlwork
+ if [ "$VIRGIN" = "0" ]; then
+ if [ "LIVEFS" != "iso9660" -a -d /mnt/media/persistence ]; then
+ # Looks OK, but we need to remount the media in order to write to it:
+ mount -o remount,rw /mnt/media
+ # Try a write... just to be dead sure:
+ if touch /mnt/media/persistence/.rwtest 2>/dev/null && rm /mnt/media/persistence/.rwtest 2>/dev/null ; then
+ # Writable media and we are allowed to write to it.
+ echo "${INITRD}: Writing persistent changes to media directory '/persistence'."
+ UPPERDIR=/mnt/media/persistence
+ OVLWORK=/mnt/media/.ovlwork
+ fi
+ fi
+ fi
+ # Create the writable upper directory, plus the workdir which is required
+ # for overlay to function (the two must be in the same POSIX filesystem):
+ mkdir -p ${UPPERDIR}
+ mkdir -p ${OVLWORK}
+
+ # Create the overlay of readonly and writable directories:
+ mkdir -p /mnt/overlay
+ mount -t overlay -o workdir=${OVLWORK},upperdir=${UPPERDIR},lowerdir=${RODIRS} overlay /mnt/overlay
+
+ # Make the underpinning RAM fs accessible in the live system (for fun):
+ mkdir -p /mnt/overlay/mnt/live
+ mount --bind /mnt/live /mnt/overlay/mnt/live
+
+ # Same for the Linux filesystem on the USB stick:
+ mkdir -p /mnt/overlay/mnt/livemedia
+ mount --bind /mnt/media /mnt/overlay/mnt/livemedia
+
+ if [ ! -z "$USE_SWAP" ]; then
+ # Use any available swap device:
+ for SWAPD in $(blkid |grep TYPE="\"swap\"" |cut -d: -f1) ; do
+ echo "${INITRD}: Enabling swapping to '$SWAPD'"
+ echo "$SWAPD swap swap defaults 0 0" >> /mnt/overlay/etc/fstab
+ done
+ fi
+
+ if [ ! -z "$KEYMAP" ]; then
+ # Configure custom keyboard mapping in console and X:
+ echo "${INITRD}: Switching live desktop to '$KEYMAP' keyboard"
+ cat <<EOT > /mnt/overlay/etc/rc.d/rc.keymap
+#!/bin/sh
+# Load the keyboard map. More maps are in /usr/share/kbd/keymaps.
+if [ -x /usr/bin/loadkeys ]; then
+ /usr/bin/loadkeys ${KEYMAP}
+fi
+EOT
+ chmod 755 /mnt/overlay/etc/rc.d/rc.keymap
+ # Set a usable keyboard mapping in X.Org, derived from the console map:
+ mkdir -p /mnt/overlay/etc/X11/xorg.conf.d
+ cat <<EOT > /mnt/overlay/etc/X11/xorg.conf.d/30-keyboard.conf
+Section "InputClass"
+ Identifier "keyboard-all"
+ Driver "evdev"
+ Option "XkbLayout" "$(echo $KEYMAP |cut -c1-2)"
+ MatchIsKeyboard "on"
+EndSection
+EOT
+ fi
+
+ if [ ! -z "$LOCALE" ]; then
+ # Configure custom locale:
+ echo "${INITRD}: Switching to '$LOCALE' locale"
+ sed -i -e "s/^ *export LANG=.*/export LANG=${LOCALE}/" /mnt/overlay/etc/profile.d/lang.sh
+ fi
+
+ if [ ! -z "$TZ" -a -f /mnt/overlay/usr/share/zoneinfo/${TZ} ]; then
+ # Configure custom timezone:
+ echo "${INITRD}: Configuring timezone '$TZ'"
+ cp /mnt/overlay/usr/share/zoneinfo/${TZ} /mnt/overlay/etc/localtime
+ cp /mnt/overlay/usr/share/zoneinfo/${TZ} /mnt/overlay/etc/localtime
+ rm /mnt/overlay/etc/localtime-copied-from
+ ln -s /usr/share/zoneinfo/${TZ} /mnt/overlay/etc/localtime-copied-from
+ # Configure the hardware clock to be interpreted as localtime and not UTC:
+ cat <<EOT > /mnt/overlay/etc/hardwareclock
+# /etc/hardwareclock
+#
+# Tells how the hardware clock time is stored.
+# You should run timeconfig to edit this file.
+localtime
+EOT
+ fi
+
+ if [ ! -z "$LIVEPW" ]; then
+ # User entered a custom live password on the boot commandline:
+ echo "${INITRD}: Changing password for user 'live'."
+ chroot /mnt/overlay /usr/sbin/chpasswd <<EOPW
+live:${LIVEPW}
+EOPW
+ fi
+
+ if [ ! -z "$ROOTPW" ]; then
+ # User entered a custom root password on the boot commandline:
+ echo "${INITRD}: Changing password for user 'root'."
+ chroot /mnt/overlay /usr/sbin/chpasswd <<EOPW
+root:${ROOTPW}
+EOPW
+ fi
+
+ if [ ! -z "$LIVE_HOSTNAME" ]; then
+ # User entered a custom hostname on the boot commandline:
+ echo "${INITRD}: Changing hostname to '$LIVE_HOSTNAME'."
+ echo "${LIVE_HOSTNAME}.example.net" > /mnt/overlay/etc/HOSTNAME
+ if [ -f /mnt/overlay/etc/NetworkManager/NetworkManager.conf ]; then
+ sed -i -e "s/^hostname=.*/hostname=${LIVE_HOSTNAME}/" \
+ /mnt/overlay/etc/NetworkManager/NetworkManager.conf
+ fi
+ sed -i -e "s/^\(127.0.0.1\t*\)@DARKSTAR@.*/\1${LIVE_HOSTNAME}.example.net ${LIVE_HOSTNAME}/" /mnt/overlay/etc/hosts
+ fi
+
+ # Copy contents of rootcopy directory (may be empty) to overlay:
+ cp -af /mnt/media/liveslak/rootcopy/* /mnt/overlay/ 2>/dev/null
+
+ # --------------------------------------------------------------------- #
+ # SLACKWARE LIVE - !END! #
+ # --------------------------------------------------------------------- #
+
+ # Minimal changes to the original Slackware init follow:
+
+ # Switch to real root partition:
+ /sbin/udevadm settle --timeout=10
+ echo 0x0100 > /proc/sys/kernel/real-root-dev
+
+ if [ ! -r /mnt/overlay/${INIT} ]; then
+ echo "ERROR: No ${INIT} found on rootdev (or not mounted). Trouble ahead."
+ echo " You can try to fix it. Type 'exit' when things are done."
+ echo
+ /bin/sh
+ fi
+else
+ echo
+ echo "RESCUE mode"
+ echo
+ echo " You can try to fix or rescue your system now. If you want"
+ echo " to boot into your fixed system, mount your root filesystem"
+ echo " read-only under /mnt:"
+ echo
+ echo " # mount -o ro -t filesystem root_device /mnt"
+ echo
+ echo " Type 'exit' when things are done."
+ echo
+ /bin/sh
+fi
+
+# Need to make sure OPTIONS+="db_persist" exists for all dm devices
+# That should be handled in /sbin/mkinitrd now
+/sbin/udevadm info --cleanup-db
+/sbin/udevadm control --exit
+
+unset ERR
+umount /proc
+umount /sys
+umount /run
+# We disable the filesystem checking code in /etc/rc.d/rc.S,
+# so we need to keep the fs writable here.
+#mount -o ro,remount /mnt/overlay 2>/dev/null
+echo "${INITRD}: Slackware Live system is ready."
+
+echo "${INITRD}: exiting"
+exec switch_root /mnt/overlay $INIT $RUNLEVEL
diff --git a/make_slackware_live.sh b/make_slackware_live.sh
new file mode 100755
index 0000000..08f17ad
--- /dev/null
+++ b/make_slackware_live.sh
@@ -0,0 +1,1189 @@
+#!/bin/bash
+
+# $Id: make_slackware_live.sh,v 1.8 2015/11/27 21:42:37 root Exp root $
+# Copyright 2014, 2015 Eric Hameleers, Eindhoven, NL
+# All rights reserved.
+#
+# Permission to use, copy, modify, and distribute this software for
+# any purpose with or without fee is hereby granted, provided that
+# the above copyright notice and this permission notice appear in all
+# copies.
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+# -----------------------------------------------------------------------------
+#
+# This script creates a live image for a Slackware OS.
+# Features:
+# - boots using isolinux/extlinux
+# - requires kernel >= 4.0 which supports multiple lower layers in overlay
+# - uses squashfs to create compressed modules out of directory trees
+# - uses overlayfs to bind multiple squashfs modules together
+# - you can add your own modules into ./addons/ subdirectory
+#
+# -----------------------------------------------------------------------------
+
+# Directory where our live tools are stored:
+LIVE_TOOLDIR=${LIVE_TOOLDIR:-"$(cd $(dirname $0); pwd)"}
+
+# Load the optional configuration file:
+CONFFILE=${LIVE_TOOLDIR}/$(basename $0 .sh).conf
+if [ -f ${CONFFILE} ]; then
+ echo "-- Loading configuration file."
+ . ${CONFFILE}
+fi
+
+# Set to "YES" to send error output to the console:
+DEBUG=${DEBUG:=NO}
+
+# Set to "YES" in order to delete everything we have,
+# and rebuild any pre-existing .sxz modules from scratch:
+FORCE=${FORCE:-"NO"}
+
+# Set to 32 to be more compatible with the specs. Slackware uses 4 by default:
+BOOTLOADSIZE=${BOOTLOADSIZE:-4}
+
+# The root and live user passwords of the image:
+ROOTPW=${ROOTPW:-"root"}
+LIVEPW=${LIVEPW:-"live"}
+
+# Custom name for the host:
+LIVE_HOSTNAME=${LIVE_HOSTNAME:-"darkstar"}
+
+# What type of Live image?
+# Choices are: SLACKWARE, XFCE, KDE4, PLASMA5.
+LIVEDE=${LIVEDE:-"SLACKWARE"}
+
+# What runlevel to use if adding a DE like: XFCE, KDE4, PLASMA5.
+RUNLEVEL=${RUNLEVEL:-4}
+
+# Use the graphical syslinux menu (YES or NO)?
+SYSMENU=${SYSMENU:-"YES"}
+
+# This variable can be set to a comma-separated list of package series.
+# The squashfs module(s) for these package series will then be re-generated.
+# Example commandline parameter: "-r l,kde,kdei"
+REFRESH=""
+
+#
+# ---------------------------------------------------------------------------
+#
+
+# Timestamp:
+THEDATE=$(date +%Y%m%d)
+
+# Who built the live image:
+BUILDER=${BUILDER:-"Alien BOB"}
+
+# The ISO main directory:
+LIVEMAIN=${LIVEMAIN:-"liveslak"}
+
+# The filesystem label we will be giving our ISO:
+MEDIALABEL=${MEDIALABEL:-"LIVESLAK"}
+
+# Slackware version to use (note: this won't work for Slackware <= 14.1):
+SL_VERSION=${SL_VERSION:-"current"}
+
+# Slackware architecture to install:
+SL_ARCH=${SL_ARCH:-"x86_64"}
+
+# Directory suffix, arch dependent:
+if [ "$SL_ARCH" = "x86_64" ]; then
+ DIRSUFFIX="64"
+else
+ DIRSUFFIX=""
+fi
+
+# Root directory of a Slackware local mirror tree;
+# You can define custom repository location (must be in local filesystem)
+# for any module in the file ./pkglists/<module>.conf:
+SL_REPO=${SL_REPO:-"/mnt/auto/sox/ftp/pub/Linux/Slackware"}
+
+# Package root directory:
+SL_PKGROOT=${SL_REPO}/slackware${DIRSUFFIX}-${SL_VERSION}/slackware${DIRSUFFIX}
+# Patches root directory:
+SL_PATCHROOT=${SL_REPO}/slackware${DIRSUFFIX}-${SL_VERSION}/patches/packages
+
+# List of Slackware package series - each will become a squashfs module:
+SEQ_SLACKWARE="tagfile:a,ap,d,e,f,k,kde,kdei,l,n,t,tcl,x,xap,xfce,y slackextra"
+
+# Stripped-down Slackware with XFCE as the Desktop Environment:
+# - each series will become a squashfs module:
+SEQ_XFCEBASE="min,xbase,xapbase,xfcebase"
+
+# Stripped-down Slackware with KDE4 as the Desktop Environment:
+# - each series will become a squashfs module:
+SEQ_KDE4BASE="min,xbase,xapbase,kde4base"
+
+# List of Slackware package series with Plasma5 instead of KDE 4 (full install):
+# - each will become a squashfs module:
+SEQ_PLASMA5="tagfile:a,ap,d,e,f,k,l,n,t,tcl,x,xap,xfce,y slackextra,kde4plasma5,plasma5 local:slackpkg+"
+
+# List of kernel modules required for a live medium to boot properly:
+KMODS=${KMODS:-"squashfs:overlay:loop:xhci-pci:ehci-pci:uhci_hcd:usb-storage:hid:usbhid:hid_generic:jbd:mbcache:ext3:ext4:isofs:fat:nls_cp437:nls_iso8859-1:msdos:vfat"}
+
+# What compression to use for the squashfs modules?
+# Default is xz, alternatives are gzip, lzma, lzo:
+SXZ_COMP=${SXZ_COMP:-"xz"}
+
+# Mount point where we will assemble a Slackware filesystem:
+LIVE_ROOTDIR=${LIVE_ROOTDIR:-"/mnt/slackwarelive"}
+
+# Toplevel directory of our staging area:
+LIVE_STAGING=${LIVE_STAGING:-"/tmp/slackwarelive_staging"}
+
+# Work directory where we will create all the temporary stuff:
+LIVE_WORK=${LIVE_WORK:-"${LIVE_STAGING}/temp"}
+
+# Directory to be used by overlayfs for data manipulation:
+LIVE_OVLDIR=${LIVE_OVLDIR:-"${LIVE_WORK}/.ovlwork"}
+
+# Directory where we will move the kernel and create the initrd;
+# note that a ./boot directory will be created in here by installpkg:
+LIVE_BOOT=${LIVE_BOOT:-"${LIVE_STAGING}/${LIVEMAIN}/bootinst"}
+
+# Directories where the squashfs modules will be created:
+LIVE_MOD_SYS=${LIVE_MOD_SYS:-"${LIVE_STAGING}/${LIVEMAIN}/system"}
+LIVE_MOD_ADD=${LIVE_MOD_ADD:-"${LIVE_STAGING}/${LIVEMAIN}/addons"}
+LIVE_MOD_OPT=${LIVE_MOD_OPT:-"${LIVE_STAGING}/${LIVEMAIN}/optional"}
+
+# Directory where the live ISO image will be written:
+OUTPUT=${OUTPUT:-"/tmp"}
+
+# ---------------------------------------------------------------------------
+# Define some functions.
+# ---------------------------------------------------------------------------
+
+# Clean up in case of failure:
+cleanup() {
+ # Clean up by unmounting our loopmounts, deleting tempfiles:
+ echo "--- Cleaning up the staging area..."
+ sync
+ umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true
+ # Need to umount the squashfs modules too:
+ umount ${LIVE_WORK}/*_$$ 2>${DBGOUT} || true
+
+ rmdir ${LIVE_ROOTDIR} 2>${DBGOUT}
+ rmdir ${LIVE_WORK}/*_$$ 2>${DBGOUT}
+ rm ${LIVE_MOD_OPT}/* 2>${DBGOUT} || true
+ rm ${LIVE_MOD_ADD}/* 2>${DBGOUT} || true
+}
+trap 'echo "*** $0 FAILED at line $LINENO ***"; cleanup; exit 1' ERR INT TERM
+
+
+#
+# Find packages and install them into the temporary root:
+#
+function install_pkgs() {
+ if [ -z "$1" ]; then
+ echo "-- function install_pkgs: Missing module name."
+ exit 1
+ fi
+ if [ ! -d "$2" ]; then
+ echo "-- function install_pkgs: Target directory '$2' does not exist!"
+ exit 1
+ elif [ ! -f "$2/SLACKWARELIVE" ]; then
+ echo "-- function install_pkgs: Target '$2' does not contain 'SLACKWARELIVE' file."
+ echo "-- Did you choose the right installation directory?"
+ exit 1
+ fi
+
+ if [ "$3" = "local" -a -d ${LIVE_TOOLDIR}/local${DIRSUFFIX}/$1 ]; then
+ echo "-- Installing local packages from subdir 'local${DIRSUFFIX}/$1'."
+ installpkg --terse --root "$2" "local${DIRSUFFIX}/$1/*.t?z"
+ else
+ # Load package list and (optional) custom repo info:
+ if [ "$3" = "tagfile" ]; then
+ PKGCONF="__tagfile__"
+ PKGFILE=${SL_PKGROOT}/${1}/tagfile
+ else
+ PKGCONF=${LIVE_TOOLDIR}/pkglists/$(echo $1 |tr [A-Z] [a-z]).conf
+ PKGFILE=${LIVE_TOOLDIR}/pkglists/$(echo $1 |tr [A-Z] [a-z]).lst
+ fi
+
+ if [ -f ${PKGCONF} ]; then
+ echo "-- Loading repo info for '$1'."
+ . ${PKGCONF}
+ fi
+
+ if [ -f ${PKGFILE} ]; then
+ echo "-- Loading package list '$PKGFILE'."
+ else
+ echo "-- Mandatory package list file is missing! Exiting..."
+ exit 1
+ fi
+
+ if [ ! -d ${SL_REPO} ]; then
+ echo "-- Slackware repository root '${SL_REPO}' does not exist! Exiting."
+ exit 1
+ fi
+
+ for PKG in $(cat ${PKGFILE} |grep -v -E '^ *#|^$' |cut -d: -f1); do
+ # Look in ./patches ; then ./slackware$DIRSUFFIX ; then ./extra
+ # Need to escape any '+' in package names such a 'gtk+2':
+ if [ ! -z "${SL_PATCHROOT}" ]; then
+ FULLPKG=$(find ${SL_PATCHROOT} -name "${PKG}-*.t?z" 2>/dev/null | grep -E "${PKG//+/\\+}-[^-]+-[^-]+-[^-]+.t?z")
+ else
+ FULLPKG=""
+ fi
+ if [ "x${FULLPKG}" = "x" ]; then
+ FULLPKG=$(find ${SL_PKGROOT} -name "${PKG}-*.t?z" 2>/dev/null |grep -E "${PKG//+/\\+}-[^-]+-[^-]+-[^-]+.t?z" |head -1)
+ else
+ echo "-- $PKG found in patches"
+ fi
+ if [ "x${FULLPKG}" = "x" ]; then
+ # One last attempt: look in ./extra
+ FULLPKG=$(find $(dirname ${SL_PKGROOT})/extra -name "${PKG}-*.t?z" 2>/dev/null |grep -E "${PKG//+/\\+}-[^-]+-[^-]+-[^-]+.t?z" |head -1)
+ fi
+
+ if [ "x${FULLPKG}" = "x" ]; then
+ echo "-- Package $PKG was not found in $(dirname ${SL_REPO}) !"
+ else
+ # Determine if we need to install or upgrade a package:
+ for INSTPKG in $(ls -1 "$2"/var/log/packages/${PKG}-* 2>/dev/null |rev |cut -d/ -f1 |cut -d- -f4- |rev) ; do
+ if [ "$INSTPKG" = "$PKG" ]; then
+ break
+ fi
+ done
+ if [ "$INSTPKG" = "$PKG" ]; then
+ ROOT="$2" upgradepkg --reinstall "${FULLPKG}"
+ else
+ installpkg --terse --root "$2" "${FULLPKG}"
+ fi
+ fi
+ done
+ fi
+
+ if [ "$TRIM" = "doc" -o "$TRIM" = "mandoc" -o "$LIVEDE" = "XFCE" ]; then
+ # Remove undesired (too big for a live OS) document subdirectories:
+ (cd "${2}/usr/doc" && find . -type d -mindepth 2 -maxdepth 2 -exec rm -rf {} \;)
+ fi
+ if [ "$TRIM" = "mandoc" ]; then
+ # Also remove man pages:
+ rm -rf "$2"/usr/man
+ fi
+
+ # End install_pkgs
+}
+
+
+#
+# Create the graphical multi-language syslinux boot menu:
+#
+function gen_bootmenu() {
+
+ MENUROOTDIR="$1/menu"
+
+ # Generate vesamenu structure - many files because of the selection tree.
+ mkdir -p ${MENUROOTDIR}
+
+ # Initialize an empty keyboard selection and language menu:
+ rm -f ${MENUROOTDIR}/kbd.cfg
+ rm -f ${MENUROOTDIR}/lang*.cfg
+
+ # Generate main (US) vesamenu.cfg:
+ cat ${LIVE_TOOLDIR}/menu.tpl | sed \
+ -e "s/@KBD@/us/g" \
+ -e "s/@LANG@/us/g" \
+ -e "s/@DIRSUFFIX@/$DIRSUFFIX/g" \
+ -e "s/@KVER@/$KVER/g" \
+ -e "s/@LIVEMAIN@/$LIVEMAIN/g" \
+ -e "s/@MEDIALABEL@/$MEDIALABEL/g" \
+ -e "s/@LIVEDE@/$(echo $LIVEDE |sed 's/BASE//')/g" \
+ -e "s/@SL_VERSION@/$SL_VERSION/g" \
+ > ${MENUROOTDIR}/vesamenu.cfg
+
+ for KBD in $(cat ${LIVE_TOOLDIR}/languages |grep -Ev "(^ *#|^$)" |cut -d, -f3)
+ do
+ LANCOD=$(cat ${LIVE_TOOLDIR}/languages |grep ",$KBD," |cut -d, -f1)
+ LANDSC=$(cat ${LIVE_TOOLDIR}/languages |grep ",$KBD," |cut -d, -f2)
+ # First, create keytab files if they are missing:
+ if [ ! -f ${MENUROOTDIR}/${KBD}.ktl ]; then
+ keytab-lilo $(find /usr/share/kbd/keymaps/i386 -name "us.map.gz") $(find /usr/share/kbd/keymaps/i386 -name "${KBD}.map.gz") > ${MENUROOTDIR}/${KBD}.ktl
+ fi
+ # Add this keyboard to the keyboard selection menu:
+ cat <<EOL >> ${MENUROOTDIR}/kbd.cfg
+label ${LANCOD}
+ menu label ${LANDSC}
+ kbdmap menu/${KBD}.ktl
+ kernel vesamenu.c32
+ append menu/menu_${LANCOD}.cfg
+
+EOL
+
+ # Generate custom vesamenu.cfg for selected keyboard:
+ cat ${LIVE_TOOLDIR}/menu.tpl | sed \
+ -e "s/@KBD@/$KBD/g" \
+ -e "s/@LANG@/$LANCOD/g" \
+ -e "s/@DIRSUFFIX@/$DIRSUFFIX/g" \
+ -e "s/@KVER@/$KVER/g" \
+ -e "s/@LIVEMAIN@/$LIVEMAIN/g" \
+ -e "s/@MEDIALABEL@/$MEDIALABEL/g" \
+ -e "s/@LIVEDE@/$(echo $LIVEDE |sed 's/BASE//')/g" \
+ -e "s/@SL_VERSION@/$SL_VERSION/g" \
+ > ${MENUROOTDIR}/menu_${LANCOD}.cfg
+
+ # Generate custom language selection submenu for selected keyboard:
+ for SUBKBD in $(cat ${LIVE_TOOLDIR}/languages |grep -Ev "(^ *#|^$)" |cut -d, -f3) ; do
+ cat <<EOL >> ${MENUROOTDIR}/lang_${LANCOD}.cfg
+label $(cat ${LIVE_TOOLDIR}/languages |grep ",$SUBKBD," |cut -d, -f1)
+ menu label $(cat ${LIVE_TOOLDIR}/languages |grep ",$SUBKBD," |cut -d, -f2)
+ kernel /boot/generic
+ append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 kbd=$KBD tz=$(cat ${LIVE_TOOLDIR}/languages |grep ",$SUBKBD," |cut -d, -f4) locale=$(cat ${LIVE_TOOLDIR}/languages |grep ",$SUBKBD," |cut -d, -f5)
+
+EOL
+ done
+
+ done
+
+}
+
+
+# ---------------------------------------------------------------------------
+# Action!
+# ---------------------------------------------------------------------------
+
+while getopts "d:efhm:r:s:t:v" Option
+do
+ case $Option in
+ h ) cat <<-"EOH"
+ -----------------------------------------------------------------
+ $Id: make_slackware_live.sh,v 1.8 2015/11/27 21:42:37 root Exp root $
+ -----------------------------------------------------------------
+ EOH
+ echo "Usage:"
+ echo " $0 [OPTION] ..."
+ echo "or:"
+ echo " SL_REPO=/your/repository/dir $0 [OPTION] ..."
+ echo ""
+ echo "The SL_REPO is the directory that contains the directory"
+ echo " slackware-<RELEASE> or slackware64-<RELEASE>"
+ echo "Current value of SL_REPO : $SL_REPO"
+ echo ""
+ echo "The script's parameters are:"
+ echo " -h This help."
+ echo " -d desktoptype SLACKWARE (full Slack), KDE4 (basic KDE4),"
+ echo " XFCE (basic XFCE) or PLASMA5 (full Plasma5)"
+ echo " -e Use ISO boot-load-size of 32 for computers"
+ echo " where the ISO won't boot otherwise."
+ echo " -f Forced re-generation of all squashfs modules,"
+ echo " custom configurations and new initrd.img."
+ echo " -m pkglst[,pkglst] Add modules defined by pkglists/<pkglst>,..."
+ echo " -r series[,series] Refresh only one or a few package series."
+ echo " -s slackrepo_dir Directory containing Slackware repository."
+ echo " -t <doc|mandoc> Trim the ISO for size (remove man and/or doc)"
+ echo " -v Show debug/error output."
+ echo " -H <hostname> Hostname of the Live OS (default: $LIVE_HOSTNAME)"
+ exit
+ ;;
+ d ) LIVEDE="$(echo ${OPTARG} |tr a-z A-Z)"
+ ;;
+ e ) BOOTLOADSIZE=32
+ ;;
+ f ) FORCE="YES"
+ ;;
+ m ) SEQ_ADDMOD="${OPTARG}"
+ ;;
+ r ) REFRESH="${OPTARG}"
+ ;;
+ s ) SL_REPO="${OPTARG}"
+ ;;
+ t ) TRIM="${OPTARG}"
+ ;;
+ v ) DEBUG="YES"
+ ;;
+ H ) LIVE_HOSTNAME="${OPTARG}"
+ ;;
+ * ) echo "You passed an illegal switch to the program!"
+ echo "Run '$0 -h' for more help."
+ exit
+ ;; # DEFAULT
+ esac
+done
+
+# End of option parsing.
+shift $(($OPTIND - 1))
+
+# $1 now references the first non option item supplied on the command line
+# if one exists.
+# ---------------------------------------------------------------------------
+
+# -----------------------------------------------------------------------------
+# Some sanity checks first.
+# -----------------------------------------------------------------------------
+
+if [ -n "$REFRESH" -a "$FORCE" = "YES" ]; then
+ echo "Please use only _one_ of the switches '-f' or '-r'!"
+ echo "Run '$0 -h' for more help."
+ exit 1
+fi
+
+# Do we have a local Slackware repository?
+if [ ! -d ${SL_REPO} ]; then
+ echo "-- Slackware repository root '${SL_REPO}' does not exist! Exiting."
+ exit 1
+fi
+
+# Are all the required add-on tools present?
+PROG_MISSING=""
+for PROGN in mksquashfs unsquashfs syslinux mkisofs installpkg upgradepkg keytab-lilo ; do
+ if ! which $PROGN 1>/dev/null 2>/dev/null ; then
+ PROG_MISSING="${PROG_MISSING}-- $PROGN\n"
+ fi
+done
+if [ ! -z "$PROG_MISSING" ] ; then
+ echo "-- Required program(s) not found in PATH!"
+ echo -e ${PROG_MISSING}
+ echo "-- Exiting."
+ exit 1
+fi
+
+[ "$DEBUG" = "NO" ] && DBGOUT="/dev/null" || DBGOUT="/dev/stderr"
+
+# Cleanup if we are FORCEd to rebuild from scratch:
+if [ "$FORCE" = "YES" ]; then
+ echo "-- Removing old files and directories!"
+ umount ${LIVE_ROOTDIR}/{proc,sys,dev} 2>${DBGOUT} || true
+ umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true
+ rm -rf ${LIVE_STAGING}/${LIVEMAIN} ${LIVE_WORK} ${LIVE_ROOTDIR}
+fi
+
+# Create output directory for image file:
+mkdir -p ${OUTPUT}
+if [ $? -ne 0 ]; then
+ echo "-- Creation of output directory '${OUTPUT}' failed! Exiting."
+ exit 1
+fi
+
+# Create temporary directories for building the live filesystem:
+for LTEMP in $LIVE_OVLDIR $LIVE_BOOT $LIVE_MOD_SYS $LIVE_MOD_ADD $LIVE_MOD_OPT ; do
+ umount ${LTEMP} 2>${DBGOUT} || true
+ mkdir -p ${LTEMP}
+ if [ $? -ne 0 ]; then
+ echo "-- Creation of temporary directory '${LTEMP}' failed! Exiting."
+ exit 1
+ fi
+done
+
+# Create the mount point for our Slackware filesystem:
+if [ ! -d ${LIVE_ROOTDIR} ]; then
+ mkdir -p ${LIVE_ROOTDIR}
+ if [ $? -ne 0 ]; then
+ echo "-- Creation of moint point '${LIVE_ROOTDIR}' failed! Exiting."
+ exit 1
+ fi
+ chmod 775 ${LIVE_ROOTDIR}
+else
+ echo "-- Found an existing live root directory at '${LIVE_ROOTDIR}'".
+ echo "-- Check the content and deal with it, then remove that directory."
+ echo "-- Exiting now."
+ exit 1
+fi
+
+# ----------------------------------------------------------------------------
+# Install package series:
+# ----------------------------------------------------------------------------
+
+unset INSTDIR
+RODIRS="${LIVE_BOOT}"
+# Create the verification file for the install_pkgs function:
+echo "${THEDATE} (${BUILDER})" > ${LIVE_BOOT}/SLACKWARELIVE
+
+# Determine which module sequence we have to build:
+case "$LIVEDE" in
+ SLACKWARE) MSEQ="${SEQ_SLACKWARE}" ;;
+ XFCE) MSEQ="${SEQ_XFCEBASE}" ;;
+ KDE4) MSEQ="${SEQ_KDE4BASE}" ;;
+ PLASMA5) MSEQ="${SEQ_PLASMA5}" ;;
+ *) echo "** Unsupported configuration '$LIVEDE'"; exit 1 ;;
+esac
+
+# Do we need to create/include additional module(s) defined by a pkglist:
+if [ -n "$SEQ_ADDMOD" -a -f ${LIVE_TOOLDIR}/pkglists/${SEQ_ADDMOD}.lst ]; then
+ MSEQ="${MSEQ} pkglist:${SEQ_ADDMOD}"
+fi
+
+echo "-- Creating '${LIVEDE}' image."
+
+# Module sequence can be composed of multiple sub-sequences:
+for MSUBSEQ in ${MSEQ} ; do
+
+ SL_SERIES="$(echo ${MSUBSEQ} |cut -d: -f2 |tr , ' ')"
+ # MTYPE can be "tagfile", "local" or "pkglist"
+ # If MTYPE was not specified, by default it is "pkglist":
+ MTYPE="$(echo ${MSUBSEQ} |cut -d: -f1 |tr , ' ')"
+ if [ "${MTYPE}" = "${SL_SERIES}" ]; then MTYPE="pkglist" ; fi
+
+ # We prefix our own modules based on the source of the package list:
+ case "$MTYPE" in
+ tagfile) MNUM="0010" ;;
+ pkglist) MNUM="0020" ;;
+ local) MNUM="0030" ;;
+ *) echo "** Unknown package source '$MTYPE'"; exit 1 ;;
+ esac
+
+for SPS in ${SL_SERIES} ; do
+
+ INSTDIR=${LIVE_WORK}/${SPS}_$$
+ mkdir -p ${INSTDIR}
+
+ if [ "$FORCE" = "YES" -o $(echo ${REFRESH} |grep -wq ${SPS} ; echo $?) -eq 0 -o ! -f ${LIVE_MOD_SYS}/${MNUM}-slackware_${SPS}-${SL_VERSION}-${SL_ARCH}.sxz ]; then
+
+ # Following conditions trigger creation of the squashed module:
+ # - commandline switch '-f' was used, or;
+ # - the module was mentioned in the '-r' commandline switch, or;
+ # - the module does not yet exist.
+
+ # Create the verification file for the install_pkgs function:
+ echo "${THEDATE} (${BUILDER})" > ${INSTDIR}/SLACKWARELIVE
+
+ echo "-- Installing the '${SPS}' series."
+ umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true
+ mount -t overlay -o lowerdir=${RODIRS},upperdir=${INSTDIR},workdir=${LIVE_OVLDIR} overlay ${LIVE_ROOTDIR}
+
+ # Install the package series:
+ install_pkgs ${SPS} ${LIVE_ROOTDIR} ${MTYPE}
+ umount ${LIVE_ROOTDIR} || true
+
+ if [ "$SPS" = "a" -o "$SPS" = "min" ]; then
+
+ # We need to take care of a few things first:
+ KVER=$(echo ${INSTDIR}/var/log/packages/kernel-generic-[0-9]* |rev |cut -d- -f3 |rev)
+ if [ -z "$KVER" ]; then
+ echo "-- Could not find installed kernel in '${INSTDIR}'! Exiting."
+ exit 1
+ else
+ # Move the content of the /boot directory out of the minimal system,
+ # this will be joined again using overlay:
+ rm -rf ${LIVE_BOOT}/boot
+ mv ${INSTDIR}/boot ${LIVE_BOOT}/
+ # Squash the boot files into a module as a safeguard:
+ mksquashfs ${LIVE_BOOT} ${LIVE_MOD_SYS}/0000-slackware_boot-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SXZ_COMP} -b 1M
+ fi
+
+ fi
+
+ # Squash the installed package series into a module:
+ mksquashfs ${INSTDIR} ${LIVE_MOD_SYS}/${MNUM}-slackware_${SPS}-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SXZ_COMP} -b 1M
+ rm -rf ${INSTDIR}/*
+
+ # End result: we have our .sxz file and the INSTDIR is empty again,
+ # Next step is to loop-mount the squashfs file onto INSTDIR.
+
+ elif [ "$SPS" = "a" -o "$SPS" = "min" ]; then
+
+ # We need to do a bit more if we skipped creation of 'a' or 'min' module:
+ # Extract the content of the /boot directory out of the boot module,
+ # else we don't have a /boot ready when we create the ISO.
+ # We can not just loop-mount it because we need to write into /boot later:
+ rm -rf ${LIVE_BOOT}/boot
+ unsquashfs -dest ${LIVE_BOOT}/boottemp ${LIVE_MOD_SYS}/0000-slackware_boot-${SL_VERSION}-${SL_ARCH}.sxz
+ mv ${LIVE_BOOT}/boottemp/* ${LIVE_BOOT}/
+ rmdir ${LIVE_BOOT}/boottemp
+
+ fi
+
+ # Add the package series tree to the readonly lowerdirs for the overlay:
+ RODIRS="${INSTDIR}:${RODIRS}"
+
+ # Mount the modules for use in the final assembly of the ISO:
+ mount -t squashfs -o loop ${LIVE_MOD_SYS}/${MNUM}-slackware_${SPS}-${SL_VERSION}-${SL_ARCH}.sxz ${INSTDIR}
+
+done
+done
+
+# ----------------------------------------------------------------------------
+# Modules for all package series are created and loop-mounted.
+# Next: system configuration.
+# ----------------------------------------------------------------------------
+
+# Configuration mudule will always be created from scratch:
+INSTDIR=${LIVE_WORK}/zzzconf_$$
+mkdir -p ${INSTDIR}
+
+echo "-- Configuring the base system."
+umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true
+mount -t overlay -o lowerdir=${RODIRS},upperdir=${INSTDIR},workdir=${LIVE_OVLDIR} overlay ${LIVE_ROOTDIR}
+
+# Configure hostname and network:
+echo "${LIVE_HOSTNAME}.example.net" > ${LIVE_ROOTDIR}/etc/HOSTNAME
+if [ -f ${LIVE_ROOTDIR}etc/NetworkManager/NetworkManager.conf ]; then
+ sed -i -e "s/^hostname=.*/hostname=${LIVE_HOSTNAME}/" \
+ ${LIVE_ROOTDIR}etc/NetworkManager/NetworkManager.conf
+fi
+sed -e "s/^\(127.0.0.1\t*\)darkstar.*/\1${LIVE_HOSTNAME}.example.net ${LIVE_HOSTNAME}/" \
+ -i ${LIVE_ROOTDIR}/etc/hosts
+
+# Make sure we can access DNS straight away:
+cat <<EOT >> ${LIVE_ROOTDIR}/etc/resolv.conf
+nameserver 8.8.4.4
+nameserver 8.8.8.8
+
+EOT
+
+# Configure en_US.UTF-8 as the default locale (can be overridden on boot):
+if grep -q "^ *export LANG=" ${LIVE_ROOTDIR}/etc/profile.d/lang.sh ; then
+ sed -e "s/^ *export LANG=.*/export LANG=en_US.UTF-8/" -i ${LIVE_ROOTDIR}/etc/profile.d/lang.sh
+else
+ echo "export LANG=en_US.UTF-8" >> ${LIVE_ROOTDIR}/etc/profile.d/lang.sh
+fi
+
+# Set timezone to UTC:
+cp -a ${LIVE_ROOTDIR}/usr/share/zoneinfo/UTC ${LIVE_ROOTDIR}/etc/localtime
+rm ${LIVE_ROOTDIR}/etc/localtime-copied-from
+ln -s /usr/share/zoneinfo/UTC ${LIVE_ROOTDIR}/etc/localtime-copied-from
+
+# Configure the hardware clock to be interpreted as UTC as well:
+cat <<EOT > ${LIVE_ROOTDIR}/etc/hardwareclock
+# /etc/hardwareclock
+#
+# Tells how the hardware clock time is stored.
+# You should run timeconfig to edit this file.
+
+UTC
+EOT
+
+# Configure a nice default console font that can handle Unicode:
+cat <<EOT >${LIVE_ROOTDIR}/etc/rc.d/rc.font
+#!/bin/sh
+#
+# This selects your default screen font from among the ones in
+# /usr/share/kbd/consolefonts.
+#
+#setfont -v
+
+# Use Terminus font to work better with the Unicode-enabled console
+# (configured in /etc/lilo.conf)
+setfont -v ter-120b
+EOT
+chmod +x ${LIVE_ROOTDIR}/etc/rc.d/rc.font
+
+# Remove ssh server keys - new unique keys will be generated
+# at first boot of the live system:
+rm -f ${LIVE_ROOTDIR}/etc/ssh/*key*
+
+# Sanitize /etc/fstab :
+cat <<EOT > ${LIVE_ROOTDIR}/etc/fstab
+proc /proc proc defaults 0 0
+sysfs /sys sysfs defaults 0 0
+devpts /dev/pts devpts gid=5,mode=620 0 0
+tmpfs /dev/shm tmpfs defaults,nodev,nosuid,mode=1777 0 0
+none / tmpfs defaults 1 1
+
+EOT
+
+# Reduce the number of local consoles, two should be enough:
+sed -i -e '/^c3\|^c4\|^c5\|^c6/s/^/# /' ${LIVE_ROOTDIR}/etc/inittab
+
+# Prevent loop devices (xzm modules) from appearing in filemanagers:
+mkdir -p ${LIVE_ROOTDIR}/etc/udev/rules.d
+cat <<EOL > ${LIVE_ROOTDIR}/etc/udev/rules.d/11-local.rules
+# Prevent loop devices (mounted xzm modules) from appearing in
+# filemanager panels - http://www.seguridadwireless.net
+
+# Hidden loops for udisks:
+KERNEL=="loop*", ENV{UDISKS_PRESENTATION_HIDE}="1"
+
+# Hidden loops for udisks2:
+KERNEL=="loop*", ENV{UDISKS_IGNORE}="1"
+EOL
+
+# Set a root password.
+echo "root:${ROOTPW}" | chpasswd --root ${LIVE_ROOTDIR}
+
+# Create a nonprivileged user account "live":
+chroot ${LIVE_ROOTDIR} /usr/sbin/useradd -c "Slackware Live User" -g users -G wheel,audio,cdrom,floppy,plugdev,video,power,netdev,lp,scanner,kmem -u 1000 -d /home/live -m -s /bin/bash live
+echo "live:${LIVEPW}" | chpasswd --root ${LIVE_ROOTDIR}
+
+# Configure suauth:
+cat <<EOT >${LIVE_ROOTDIR}/etc/suauth
+root:live:OWNPASS
+root:ALL EXCEPT GROUP wheel:DENY
+EOT
+chmod 600 ${LIVE_ROOTDIR}/etc/suauth
+
+# Configure sudoers:
+chmod 640 ${LIVE_ROOTDIR}/etc/sudoers
+sed -i ${LIVE_ROOTDIR}/etc/sudoers -e 's/# *\(%wheel\sALL=(ALL)\sALL\)/\1/'
+chmod 440 ${LIVE_ROOTDIR}/etc/sudoers
+
+# Enable a Slackware mirror for slackpkg:
+cat <<EOT >> ${LIVE_ROOTDIR}/etc/slackpkg/mirrors
+#http://mirrors.slackware.com/slackware/slackware${DIRSUFFIX}-${SL_VERSION}/
+http://ftp.osuosl.org/.2/slackware/slackware${DIRSUFFIX}-${SL_VERSION}/
+EOT
+
+## Blacklist the l10n packages;
+#cat << EOT >> ${LIVE_ROOTDIR}/etc/slackpkg/blacklist
+#
+## Blacklist the l10n packages;
+#calligra-l10n-
+#kde-l10n-
+#
+#EOT
+
+# If we added slackpkg+ for easier system management, let's configure it too.
+# Update the cache for slackpkg:
+echo "-- Creating slackpkg cache, takes a few seconds..."
+chroot "${LIVE_ROOTDIR}" <<EOSL 2>${DBGOUT}
+
+if [ -f var/log/packages/slackpkg+-* ] ; then
+ cat <<EOPL > etc/slackpkg/slackpkgplus.conf
+SLACKPKGPLUS=on
+VERBOSE=1
+ALLOW32BIT=off
+USEBL=1
+WGETOPTS="--timeout=20 --tries=2"
+GREYLIST=on
+PKGS_PRIORITY=( restricted alienbob ktown_testing )
+REPOPLUS=( slackpkgplus restricted alienbob ktown_testing )
+MIRRORPLUS['slackpkgplus']=http://slakfinder.org/slackpkg+/
+MIRRORPLUS['restricted']=http://taper.alienbase.nl/mirrors/people/alien/restricted_sbrepos/current/x86_64/
+MIRRORPLUS['alienbob']=http://taper.alienbase.nl/mirrors/people/alien/sbrepos/current/x86_64/
+MIRRORPLUS['ktown_testing']=http://taper.alienbase.nl/mirrors/alien-kde/current/testing/x86_64/
+
+EOPL
+fi
+
+/usr/sbin/slackpkg -batch=on update gpg
+/usr/sbin/slackpkg -batch=on update
+
+EOSL
+
+echo "-- Configuring the X base system."
+# Give the 'live' user a face:
+cp ${LIVE_TOOLDIR}/blueSW-64px.png ${LIVE_ROOTDIR}/home/live/.face.icon
+chown --reference=${LIVE_ROOTDIR}/home/live ${LIVE_ROOTDIR}/home/live/.face.icon
+( cd ${LIVE_ROOTDIR}/home/live/ ; ln .face.icon .face )
+mkdir -p ${LIVE_ROOTDIR}/usr/share/apps/kdm/pics/users
+cp ${LIVE_TOOLDIR}/blueSW-64px.png ${LIVE_ROOTDIR}/usr/share/apps/kdm/pics/users/blues.icon
+
+# Give XDM a nicer look:
+mkdir -p ${LIVE_ROOTDIR}/etc/X11/xdm/liveslak-xdm
+cp -a ${LIVE_TOOLDIR}/xdm/* ${LIVE_ROOTDIR}/etc/X11/xdm/liveslak-xdm/
+# Point xdm to the custom /etc/X11/xdm/liveslak-xdm/xdm-config:
+sed -i ${LIVE_ROOTDIR}/etc/rc.d/rc.4 -e 's,bin/xdm -nodaemon,& -config /etc/X11/xdm/liveslak-xdm/xdm-config,'
+
+if [ -f ${LIVE_ROOTDIR}/etc/rc.d/rc.networkmanager ]; then
+ # Enable NetworkManager if present:
+ chmod +x ${LIVE_ROOTDIR}/etc/rc.d/rc.networkmanager
+ # And disable Slackware's own way of configuring eth0:
+ cat <<EOT > ${LIVE_ROOTDIR}/etc/rc.d/rc.inet1.conf
+IFNAME[0]="eth0"
+IPADDR[0]=""
+NETMASK[0]=""
+USE_DHCP[0]=""
+DHCP_HOSTNAME[0]=""
+
+GATEWAY=""
+DEBUG_ETH_UP="no"
+EOT
+
+ # Ensure that NetworkManager uses its internal DHCP client - seems to give
+ # better compliancy:
+ sed -e "s/^dhcp=dhcpcd/#&/" -e "s/^#\(dhcp=internal\)/\1/" \
+ -i ${LIVE_ROOTDIR}/etc/NetworkManager/NetworkManager.conf
+
+else
+ # Use Slackware's own network configurion routing for eth0 in the base image:
+ cat <<EOT > ${LIVE_ROOTDIR}/etc/rc.d/rc.inet1.conf
+IFNAME[0]="eth0"
+IPADDR[0]=""
+NETMASK[0]=""
+USE_DHCP[0]="yes"
+DHCP_HOSTNAME[0]="${LIVE_HOSTNAME}"
+
+GATEWAY=""
+DEBUG_ETH_UP="no"
+EOT
+fi
+
+echo "-- Configuring XFCE."
+# Prepare some XFCE defaults for the 'live' user and any new users.
+# (don't show icons on the desktop for irrelevant stuff):
+mkdir -p ${LIVE_ROOTDIR}/etc/skel/
+tar -xf ${LIVE_TOOLDIR}/skel/skel.txz -C ${LIVE_ROOTDIR}/etc/skel/
+
+echo "-- Configuring KDE4."
+# Adjust some usability issues with the default desktop layout:
+if [ -f ${LIVE_ROOTDIR}/usr/share/apps/plasma/layout-templates/org.kde.plasma-desktop.defaultPanel/contents/layout.js ]; then
+ sed -i \
+ -e '/showActivityManager/a konsole = panel.addWidget("quicklaunch")' \
+ -e '/showActivityManager/a dolphin = panel.addWidget("quicklaunch")' \
+ -e '/showActivityManager/a firefox = panel.addWidget("quicklaunch")' \
+ -e '$a firefox.writeConfig("iconUrls","file:///usr/share/applications/mozilla-firefox.desktop")' \
+ -e '$a dolphin.writeConfig("iconUrls","file:////usr/share/applications/kde4/dolphin.desktop")' \
+ -e '$a konsole.writeConfig("iconUrls","file:///usr/share/applications/kde4/konsole.desktop")' \
+ -e '/tasks.writeConfig/d' \
+ ${LIVE_ROOTDIR}/usr/share/apps/plasma/layout-templates/org.kde.plasma-desktop.defaultPanel/contents/layout.js
+fi
+
+# Prepare some KDE4 defaults for the 'live' user and any new users.
+
+# Preselect the user 'live' in KDM:
+mkdir -p ${LIVE_ROOTDIR}/var/lib/kdm
+cat <<EOT > ${LIVE_ROOTDIR}/var/lib/kdm/kdmsts
+[PrevUser]
+:0=live
+EOT
+chmod 600 ${LIVE_ROOTDIR}/var/lib/kdm/kdmsts
+
+# Be gentle to low-performance USB media and limit disk I/O:
+mkdir -p ${LIVE_ROOTDIR}/etc/skel/.kde/share/config
+cat <<EOT > ${LIVE_ROOTDIR}/etc/skel/.kde/share/config/nepomukserverrc
+[Basic Settings]
+Configured repositories=main
+Start Nepomuk=false
+
+[Service-nepomukstrigiservice]
+autostart=false
+
+[main Settings]
+Storage Dir[\$e]=\$HOME/.kde/share/apps/nepomuk/repository/main/
+Used Soprano Backend=virtuosobackend
+rebuilt index for type indexing=true
+EOT
+
+mkdir -p ${LIVE_ROOTDIR}/etc/skel/.config
+cat <<EOT > ${LIVE_ROOTDIR}/etc/skel/.config/kwalletrc
+[Auto Allow]
+kdewallet=Network Management,KDE Daemon,KDE Control Module
+
+[Wallet]
+Close When Idle=false
+Enabled=true
+First Use=true
+Use One Wallet=true
+EOT
+
+if [ "$LIVEDE" = "PLASMA5" ]; then
+
+ echo "-- Configuring PLASMA5."
+ # Remove the buggy mediacenter session:
+ rm ${LIVE_ROOTDIR}/usr/share/xsessions/plasma-mediacenter.desktop || true
+ # Set sane SDDM defaults on first boot (root-owned file):
+ mkdir -p ${LIVE_ROOTDIR}/var/lib/sddm
+ chroot ${LIVE_ROOTDIR} chown sddm:sddm var/lib/sddm
+ cat <<EOT > ${LIVE_ROOTDIR}/var/lib/sddm/state.conf
+[Last]
+# Name of the last logged-in user. This username will be preselected/shown when the login screen shows up
+User=live
+
+# Name of the session file of the last session selected. This session will be preselected when the login screen shows up.
+Session=/usr/share/xsessions/plasma.desktop
+
+EOT
+
+ # Thanks to Fedora Live: https://git.fedorahosted.org/cgit/spin-kickstarts.git
+ # Set akonadi backend:
+ mkdir -p ${LIVE_ROOTDIR}/etc/skel/.config/akonadi
+ cat <<AKONADI_EOF >${LIVE_ROOTDIR}/etc/skel/.config/akonadi/akonadiserverrc
+[%General]
+Driver=QSQLITE3
+AKONADI_EOF
+
+ # Disable baloo:
+ cat <<BALOO_EOF >${LIVE_ROOTDIR}/etc/skel/.config/baloofilerc
+[Basic Settings]
+Indexing-Enabled=false
+BALOO_EOF
+
+ # Disable kres-migrator:
+ cat <<KRES_EOF >${LIVE_ROOTDIR}/etc/skel/.kde/share/config/kres-migratorrc
+[Migration]
+Enabled=false
+KRES_EOF
+
+ # Disable kwallet migrator:
+ cat <<KWALLET_EOL >${LIVE_ROOTDIR}/etc/skel/.config/kwalletrc
+[Migration]
+alreadyMigrated=true
+KWALLET_EOL
+
+fi # End LIVEDE = PLASMA5
+
+# Make sure that user 'live' owns her own files:
+find ${LIVE_ROOTDIR}/etc/skel/ -exec cp -a "{}" ${LIVE_ROOTDIR}/home/live/ \;
+chroot ${LIVE_ROOTDIR} chown -R live:users home/live
+
+echo "-- Tweaking system startup."
+
+# Configure the default DE when running startx:
+if [ "$LIVEDE" = "SLACKWARE" ]; then
+ ln -sf xinitrc.kde ${LIVE_ROOTDIR}/etc/X11/xinit/xinitrc
+elif [ "$LIVEDE" = "KDE4" ]; then
+ ln -sf xinitrc.kde ${LIVE_ROOTDIR}/etc/X11/xinit/xinitrc
+elif [ "$LIVEDE" = "PLASMA5" ]; then
+ ln -sf xinitrc.plasma ${LIVE_ROOTDIR}/etc/X11/xinit/xinitrc
+else
+ ln -sf xinitrc.xfce ${LIVE_ROOTDIR}/etc/X11/xinit/xinitrc
+fi
+
+# Configure the default runlevel:
+sed -i ${LIVE_ROOTDIR}/etc/inittab -e "s/\(id:\)3\(:initdefault:\)/\1${RUNLEVEL}\2/"
+
+# Disable unneeded services:
+[ -f ${LIVE_ROOTDIR}/etc/rc.d/rc.acpid ] && chmod -x ${LIVE_ROOTDIR}/etc/rc.d/rc.acpid
+[ -f ${LIVE_ROOTDIR}/etc/rc.d/rc.pcmcia ] && chmod -x ${LIVE_ROOTDIR}/etc/rc.d/rc.pcmcia
+[ -f ${LIVE_ROOTDIR}/etc/rc.d/rc.yp ] && chmod -x ${LIVE_ROOTDIR}/etc/rc.d/rc.yp
+
+# Skip all filesystem checks at boot:
+touch ${LIVE_ROOTDIR}/etc/fastboot
+
+# Disable the root filesystem check altogether:
+sed -i -e '/^if \[ ! \$READWRITE = yes/,/^fi # Done checking root filesystem/s/^/#/' ${LIVE_ROOTDIR}/etc/rc.d/rc.S
+
+# We will not write to the hardware clock:
+sed -i -e '/systohc/s/^/# /' ${LIVE_ROOTDIR}/etc/rc.d/rc.6
+
+# Run some package setup scripts (usually run by the slackware installer),
+# as well as some of the delaying commands in rc.M and rc.modules:
+chroot ${LIVE_ROOTDIR} <<EOCR
+# Rebuild SSL certificate database:
+/usr/sbin/update-ca-certificates --fresh 1>/dev/null 2>${DBGOUT}
+
+# Run bits from rc.M so we won't need to run them again in the live system:
+/sbin/depmod $KVER
+/sbin/ldconfig
+EOCR
+
+chroot "${LIVE_ROOTDIR}" <<EOCR
+# Update the desktop database:
+if [ -x usr/bin/update-desktop-database ]; then
+ /usr/bin/update-desktop-database usr/share/applications > /dev/null 2>${DBGOUT}
+fi
+
+# Update hicolor theme cache:
+if [ -d usr/share/icons/hicolor ]; then
+ if [ -x /usr/bin/gtk-update-icon-cache ]; then
+ /usr/bin/gtk-update-icon-cache -f -t usr/share/icons/hicolor 1>/dev/null 2>${DBGOUT}
+ fi
+fi
+
+# Update the mime database:
+if [ -x usr/bin/update-mime-database ]; then
+ /usr/bin/update-mime-database usr/share/mime >/dev/null 2>${DBGOUT}
+fi
+
+# Font configuration:
+if [ -x usr/bin/fc-cache ]; then
+ for fontdir in 100dpi 75dpi OTF Speedo TTF Type1 cyrillic ; do
+ if [ -d usr/share/fonts/$fontdir ]; then
+ mkfontscale /usr/share/fonts/$fontdir 1>/dev/null 2>${DBGOUT}
+ mkfontdir /usr/share/fonts/$fontdir 1>/dev/null 2>${DBGOUT}
+ fi
+ done
+ if [ -d usr/share/fonts/misc ]; then
+ mkfontscale /usr/share/fonts/misc 1>/dev/null 2>${DBGOUT}
+ mkfontdir -e /usr/share/fonts/encodings -e /usr/share/fonts/encodings/large /usr/share/fonts/misc 1>/dev/null 2>${DBGOUT}
+ fi
+ /usr/bin/fc-cache -f 1>/dev/null 2>${DBGOUT}
+fi
+
+if [ -x usr/bin/update-gtk-immodules ]; then
+ /usr/bin/update-gtk-immodules
+fi
+if [ -x usr/bin/update-gdk-pixbuf-loaders ]; then
+ /usr/bin/update-gdk-pixbuf-loaders
+fi
+if [ -x /usr/bin/update-pango-querymodules ]; then
+ /usr/bin/update-pango-querymodules
+fi
+
+if [ -x /usr/bin/glib-compile-schemas ]; then
+ /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas >/dev/null 2>${DBGOUT}
+fi
+
+# Delete unwanted cache files:
+find usr/share/icons -name icon-theme.cache -exec rm "{}" \;
+EOCR
+
+# Disable above commands in rc.M and rc.modules:
+sed -e "s% /usr/bin/update.*verbose%#&%" -i ${LIVE_ROOTDIR}/etc/rc.d/rc.M
+sed -e '/^ *\/usr\/bin\/glib-c/ s, /usr/bin/glib-c,#&,' -i ${LIVE_ROOTDIR}/etc/rc.d/rc.M
+sed -e "s% /sbin/depmod -%#&%" -i ${LIVE_ROOTDIR}/etc/rc.d/rc.modules
+
+# If we detect a NVIDIA driver, then run the nvidia install routine:
+cat <<EOT >> ${LIVE_ROOTDIR}/etc/rc.d/rc.local
+
+if [ -x /usr/sbin/nvidia-switch ]; then
+ if [ -f /usr/lib${DIRSUFFIX}/xorg/modules/extensions/libglx.so.*-nvidia -a -f /usr/lib${DIRSUFFIX}/xorg/modules/drivers/nvidia_drv.so ]; then
+ # The nvidia kernel module needs to ne announced to the kernel.
+ # This costs a few seconds in additional boot-up time unfortunately:
+ /sbin/depmod -a
+ echo "-- Installing binary Nvidia drivers: /usr/sbin/nvidia-switch --install"
+ /usr/sbin/nvidia-switch --install
+ fi
+fi
+EOT
+
+# Clean out the unneeded stuff:
+rm -f ${LIVE_ROOTDIR}/tmp/[A-Za-z]*
+rm -f ${LIVE_ROOTDIR}/var/mail/*
+rm -f ${LIVE_ROOTDIR}/root/.bash*
+
+# Create a locate cache:
+echo "-- Creating locate cache, takes a few seconds..."
+chroot ${LIVE_ROOTDIR} /etc/cron.daily/slocate 2>${DBGOUT}
+
+# -----------------------------------------------------------------------------
+# Done with configuring the live system!
+# -----------------------------------------------------------------------------
+
+# Squash the configuration into its own module:
+umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true
+mksquashfs ${INSTDIR} ${LIVE_MOD_SYS}/0099-slackware_zzzconf-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SXZ_COMP} -b 1M
+rm -rf ${INSTDIR}/*
+
+# End result: we have our .sxz file and the INSTDIR is empty again,
+# Next step is to loop-mount the squashfs file onto INSTDIR.
+
+# Add the system configuration tree to the readonly lowerdirs for the overlay:
+RODIRS="${INSTDIR}:${RODIRS}"
+
+# Mount the module for use in the final assembly of the ISO:
+mount -t squashfs -o loop ${LIVE_MOD_SYS}/0099-slackware_zzzconf-${SL_VERSION}-${SL_ARCH}.sxz ${INSTDIR}
+
+unset INSTDIR
+
+# -----------------------------------------------------------------------------
+# Prepare the system for live booting.
+# -----------------------------------------------------------------------------
+
+echo "-- Preparing the system for live booting."
+umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true
+mount -t overlay -o lowerdir=${RODIRS%:*},upperdir=${LIVE_BOOT},workdir=${LIVE_OVLDIR} overlay ${LIVE_ROOTDIR}
+
+mount --bind /proc ${LIVE_ROOTDIR}/proc
+mount --bind /sys ${LIVE_ROOTDIR}/sys
+mount --bind /dev ${LIVE_ROOTDIR}/dev
+
+# Determine the installed kernel version:
+KVER=$(ls ${LIVE_ROOTDIR}/var/log/packages/kernel*modules* |head -1 |rev | cut -d- -f3 |rev)
+
+# Create an initrd for the generic kernel, using a modified init script:
+echo "-- Creating initrd for kernel-generic $KVER ..."
+chroot ${LIVE_ROOTDIR} /sbin/mkinitrd -c -l us -o /boot/initrd_${KVER}.gz -k ${KVER} -m ${KMODS} 1>${DBGOUT} 2>${DBGOUT}
+cat $LIVE_TOOLDIR/liveinit | sed \
+ -e "s/@MEDIALABEL@/$MEDIALABEL/g" \
+ -e "s/@DARKSTAR@/$LIVE_HOSTNAME/g" \
+ > ${LIVE_ROOTDIR}/boot/initrd-tree/init
+chroot ${LIVE_ROOTDIR} /sbin/mkinitrd 1>/dev/null 2>${DBGOUT}
+rm -rf ${LIVE_ROOTDIR}/boot/initrd-tree
+
+# ... and cleanup these mounts again:
+umount ${LIVE_ROOTDIR}/{proc,sys,dev} || true
+umount ${LIVE_ROOTDIR} || true
+# Paranoia:
+[ ! -z "${LIVE_BOOT}" ] && rm -rf ${LIVE_BOOT}/{etc,tmp,usr,var} 1>${DBGOUT} 2>${DBGOUT}
+# Squash the boot directory into its own module:
+mksquashfs ${LIVE_BOOT} ${LIVE_MOD_SYS}/0000-slackware_boot-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SXZ_COMP} -b 1M
+
+# Copy kernel files and tweak the syslinux configuration:
+# Note to self: syslinux does not 'see' files unless they are DOS 8.3 names?
+rm -rf ${LIVE_STAGING}/boot
+mkdir -p ${LIVE_STAGING}/boot
+cp -a ${LIVE_BOOT}/boot/vmlinuz-generic-$KVER ${LIVE_STAGING}/boot/generic
+cp -a ${LIVE_BOOT}/boot/initrd_${KVER}.gz ${LIVE_STAGING}/boot/initrd.img
+cp -a ${LIVE_TOOLDIR}/syslinux ${LIVE_STAGING}/boot/
+rm -rf ${LIVE_STAGING}/boot/RCS
+if [ "$SYSMENU" = "NO" ]; then
+ echo "include syslinux.cfg" > ${LIVE_STAGING}/boot/syslinux/isolinux.cfg
+else
+ # NOTE: Convert a PNG image to VESA bitmap before using it with vesamenu:
+ # $ convert -depth 16 -colors 65536 in.png out.png
+ cp -a /usr/share/syslinux/vesamenu.c32 ${LIVE_STAGING}/boot/syslinux/
+ echo "include menu/vesamenu.cfg" > ${LIVE_STAGING}/boot/syslinux/isolinux.cfg
+ # Generate the multi-language menu:
+ gen_bootmenu ${LIVE_STAGING}/boot/syslinux
+fi
+for SLFILE in message.txt f2.txt syslinux.cfg lang.cfg ; do
+ if [ -f ${LIVE_STAGING}/boot/syslinux/${SLFILE} ]; then
+ sed -i ${LIVE_STAGING}/boot/syslinux/${SLFILE} \
+ -e "s/@DIRSUFFIX@/$DIRSUFFIX/g" \
+ -e "s/@KVER@/$KVER/g" \
+ -e "s/@LIVEMAIN@/$LIVEMAIN/g" \
+ -e "s/@MEDIALABEL@/$MEDIALABEL/g" \
+ -e "s/@LIVEDE@/$(echo $LIVEDE |sed 's/BASE//')/g" \
+ -e "s/@SL_VERSION@/$SL_VERSION/g"
+ fi
+done
+mv ${LIVE_STAGING}/boot/syslinux/memtest ${LIVE_STAGING}/boot/
+
+# -----------------------------------------------------------------------------
+# Assemble the ISO
+# -----------------------------------------------------------------------------
+
+echo "-- Assemble the ISO image."
+
+# Tag the type of live environment to the ISO filename:
+if [ "$LIVEDE" = "SLACKWARE" ]; then
+ ISOTAG=""
+else
+ ISOTAG="-$(echo $LIVEDE |tr A-Z a-z)"
+fi
+
+# Copy our stockpile of add-on modules into place:
+if [ -f ${LIVE_TOOLDIR}/addons/*.sxz ]; then
+ cp ${LIVE_TOOLDIR}/addons/*.sxz ${LIVE_MOD_ADD}/
+fi
+
+# If we have optionals, copy those too:
+if [ -f ${LIVE_TOOLDIR}/optional/*.sxz ]; then
+ cp ${LIVE_TOOLDIR}/optional/*.sxz ${LIVE_MOD_OPT}/
+fi
+
+if [ "$LIVEDE" != "XFCE" -a -f ${LIVE_TOOLDIR}/graphics/*.sxz ]; then
+ # KDE/PLASMA will profit; add custom (proprietary) graphics drivers:
+ echo "-- Adding binary GPU drivers."
+ cp ${LIVE_TOOLDIR}/graphics/*.sxz ${LIVE_MOD_OPT}/
+fi
+
+# Directory for rootcopy files (everything placed here will be copied
+# verbatim into the overlay root):
+mkdir -p ${LIVE_STAGING}/rootcopy
+
+# Create an ISO file from the directories found below ${LIVE_STAGING}:
+cd ${LIVE_STAGING}
+mkisofs -o ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso \
+ -R -J \
+ -hide-rr-moved \
+ -v -d -N \
+ -no-emul-boot -boot-load-size ${BOOTLOADSIZE} -boot-info-table \
+ -sort boot/syslinux/iso.sort \
+ -b boot/syslinux/isolinux.bin \
+ -c boot/syslinux/isolinux.boot \
+ -eltorito-alt-boot -no-emul-boot -eltorito-platform 0xEF \
+ -eltorito-boot boot/syslinux/efiboot.img \
+ -preparer "Built for Slackware${DIRSUFFIX}-Live by ${BUILDER}" \
+ -publisher "The Slackware Linux Project - http://www.slackware.com/" \
+ -A "Slackware Live ${SL_VERSION} for ${ARCH}" \
+ -V "${MEDIALABEL}" \
+ -x ./$(basename ${LIVE_WORK}) \
+ -x ./${LIVEMAIN}/bootinst \
+ -x boot/syslinux/testing \
+ -x rootcopy \
+ .
+
+# This copy is no longer needed:
+rm -rf ./boot
+cd -
+isohybrid -u ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso
+md5sum ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso \
+ > ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso.md5
+echo "-- Live ISO image created:"
+ls -l ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso*
+
+# Clean out the mounts etc:
+cleanup
+
diff --git a/makemod b/makemod
new file mode 100755
index 0000000..4cc9c26
--- /dev/null
+++ b/makemod
@@ -0,0 +1,48 @@
+#!/bin/sh
+# Create squashfs module from a directory or a Slackware package.
+# Module can then be added to liveslak/addons directory.
+
+if [ "x$1" = "x" ]; then
+ echo "-- Usage:"
+ echo " $(basename $0) <packagename|directory> modulename.sxz"
+ exit 1
+fi
+
+# .sxz extension uses xz compression:
+COMPR="xz"
+
+if [ -d "$1" ]; then
+ echo "Creating .sxz from directory."
+ PKGDIR="$1"
+else
+ MODEXT=$(echo "$2" |rev |cut -d'.' -f1 |rev)
+ case $MODEXT in
+ sxz) COMPR="xz" ;;
+ sgz) COMPR="gzip" ;;
+ xzm) COMPR="xz" ;;
+ *) echo "-- Unsupported module extension '$MODEXT'" ; exit 1 ;;
+ esac
+ echo "Creating .${MODEXT} from package."
+ TMPDIR=$(mktemp -t -d makesxz.XXXXXX)
+ PKGDIR="$TMPDIR"
+ if [ ! -d $PKGDIR ]; then
+ echo "-- Failed to create temporary directory for extraction!"
+ exit 1
+ fi
+ # Extract the package:
+ /sbin/installpkg -root $PKGDIR "$1"
+ if [ $? -ne 0 ]; then
+ echo "-- Error installing package!"
+ exit 1
+ fi
+fi
+
+mksquashfs "${PKGDIR}" "$2" -comp ${COMPR} -b 256K $3 $4 $5 $6 $7 $8 $9
+if [ $? -ne 0 ]; then
+ echo "-- Error creating squashfs compressed module"
+ exit 1
+fi
+
+# If we extracted a package, clean up now:
+[ ! -z "$TMPDIR" ] && rm -rf $TMPDIR
+
diff --git a/menu.tpl b/menu.tpl
new file mode 100644
index 0000000..2a1ce0d
--- /dev/null
+++ b/menu.tpl
@@ -0,0 +1,70 @@
+prompt 0
+timeout 300
+ui vesamenu.c32
+default live
+f2 f2.txt
+menu background swlogov.png
+menu title Slackware@DIRSUFFIX@-@SL_VERSION@ Live
+
+menu hshift 1
+menu vshift 9
+menu width 45
+menu margin 1
+menu rows 10
+menu helpmsgrow 14
+menu helpmsgendrow 18
+menu cmdlinerow 18
+menu tabmsgrow 19
+menu timeoutrow 20
+
+menu color screen 37;40 #00000000 #00000000 none
+menu color border 34;40 #00000000 #00000000 none
+menu color title 1;36;44 #ffb9556b #30002d1f none
+menu color unsel 37;44 #ff354172 #007591ff none
+menu color hotkey 1;37;44 #ffad37b7 #00000000 none
+menu color sel 7;37;40 #ffffffff #00000000 none
+menu color hotsel 1;7;37;40 #ffe649f3 #00000000 none
+menu color scrollbar 30;44 #00000000 #00000000 none
+menu color tabmsg 31;40 #ffA32222 #00000000 none
+menu color cmdmark 1;36;40 #ffff0000 #00000000 none
+menu color cmdline 37;40 #ffffffff #ff000000 none
+menu color pwdborder 30;47 #ffff0000 #00000000 std
+menu color pwdheader 31;47 #ffff0000 #00000000 std
+menu color pwdentry 30;47 #ffff0000 #00000000 std
+menu color timeout_msg 37;40 #ff809aef #00000000 none
+menu color timeout 1;37;40 #ffb72f9f #00000000 none
+menu color help 37;40 #ff354172 #00000000 none
+
+label live
+ menu label Start @LIVEDE@ Live
+ menu default
+ kernel /boot/generic
+ append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 kbd=@KBD@
+ text help
+ Slackware@DIRSUFFIX@-@SL_VERSION@, kernel @KVER@.
+ Add 'load=nvidia' to the commandline
+ if you have a recent NVIDIA card.
+ endtext
+
+menu begin kbd
+ menu title Non-US Keyboard selection
+ label Previous
+ menu label Previous Menu
+ menu exit
+ menu separator
+ menu include menu/kbd.cfg
+menu end
+
+menu begin language
+ menu title Non-US Language selection
+ label Previous
+ menu label Previous Menu
+ menu exit
+ menu separator
+ menu include menu/lang_@LANG@.cfg
+menu end
+
+label memtest
+menu label Memory test with memtest86+
+ kernel /boot/memtest
+
diff --git a/pkglists/alien.conf b/pkglists/alien.conf
new file mode 100644
index 0000000..df43eb3
--- /dev/null
+++ b/pkglists/alien.conf
@@ -0,0 +1,8 @@
+SL_REPO="/mnt/auto/sox/sbrepos/${SL_VERSION}/${SL_ARCH}"
+
+# Package root directory:
+SL_PKGROOT=${SL_REPO}
+
+# Patches root directory:
+SL_PATCHROOT=""
+
diff --git a/pkglists/alien.lst b/pkglists/alien.lst
new file mode 100644
index 0000000..89c534a
--- /dev/null
+++ b/pkglists/alien.lst
@@ -0,0 +1,63 @@
+# Showcases for using with Slackware Live:
+calibre
+chromium
+chromium-pepperflash-plugin
+chromium-widevine-plugin
+dropbox-client
+ffmpeg
+gecko-mediaplayer
+gmtk
+gnome-mplayer
+gst-plugins-ffmpeg0
+icedtea-web
+libdvdcss
+libreoffice
+libreoffice-dict-af
+libreoffice-dict-ar
+libreoffice-dict-be
+libreoffice-dict-bg
+libreoffice-dict-bn
+libreoffice-dict-br
+libreoffice-dict-bs
+libreoffice-dict-ca
+libreoffice-dict-cs
+libreoffice-dict-da
+libreoffice-dict-de
+libreoffice-dict-el
+libreoffice-dict-en
+libreoffice-dict-es
+libreoffice-dict-et
+libreoffice-dict-fr
+libreoffice-dict-gl
+libreoffice-dict-he
+libreoffice-dict-hi
+libreoffice-dict-hr
+libreoffice-dict-hu
+libreoffice-dict-is
+libreoffice-dict-it
+libreoffice-dict-lt
+libreoffice-dict-lv
+libreoffice-dict-nl
+libreoffice-dict-pl
+libreoffice-dict-pt-BR
+libreoffice-dict-pt-PT
+libreoffice-dict-ro
+libreoffice-dict-ru
+libreoffice-dict-si
+libreoffice-dict-sk
+libreoffice-dict-sl
+libreoffice-dict-sr
+libreoffice-dict-sv
+libreoffice-dict-sw
+libreoffice-dict-te
+libreoffice-dict-th
+libreoffice-dict-uk
+libreoffice-dict-vi
+libreoffice-dict-zu
+libreoffice-kde-integration
+libtorrent-rasterbar
+openjdk
+p7zip
+qbittorrent
+veracrypt
+vlc
diff --git a/pkglists/kde4add.lst b/pkglists/kde4add.lst
new file mode 100644
index 0000000..64d68e3
--- /dev/null
+++ b/pkglists/kde4add.lst
@@ -0,0 +1,116 @@
+# kdesdk:
+cervisia
+dolphin-plugins
+kapptemplate
+kcachegrind
+kde-dev-scripts
+kde-dev-utils
+kdesdk-kioslaves
+kdesdk-strigi-analyzers
+kdesdk-thumbnailers
+okteta
+poxml
+umbrello
+
+# kdebindings:
+smokegen
+smokeqt
+qtruby
+perlqt
+smokekde
+korundum
+perlkde
+pykde4
+kross-interpreters
+
+# kdeutils:
+kremotecontrol
+
+# kdemultimedia:
+juk
+
+# kdenetwork:
+krdc
+
+# kdegames:
+klickety
+kpat
+klines
+ksnakeduel
+kollision
+kshisen
+kblocks
+lskat
+bovo
+kajongg
+granatier
+kiriki
+kigo
+bomber
+kolf
+kbounce
+konquest
+kapman
+killbots
+kubrick
+kgoldrunner
+knetwalk
+kbreakout
+ksirk
+kfourinline
+kblackbox
+palapeli
+katomic
+ktuberling
+kjumpingcube
+kspaceduel
+
+# kdetoys:
+amor
+kteatime
+ktux
+
+# kdepim:
+kdepim
+kdepim-runtime
+
+# kdeedu:
+artikulate
+blinken
+cantor
+kalzium
+kanagram
+kgeography
+khangman
+kig
+kiten
+klettres
+kstars
+kqtquickcharts
+ktouch
+kturtle
+kwordquiz
+marble
+parley
+pairs
+rocs
+step
+
+# kdewebdev:
+kdewebdev
+
+# extragear:
+kaudiocreator
+oxygen-gtk2
+kdevplatform
+kdevelop-pg-qt
+kdevelop
+kdev-python
+kdevelop-php
+kdevelop-php-docs
+#wicd-kde
+amarok
+calligra
+partitionmanager
+k3b
+
diff --git a/pkglists/kde4base.lst b/pkglists/kde4base.lst
new file mode 100644
index 0000000..873e6c8
--- /dev/null
+++ b/pkglists/kde4base.lst
@@ -0,0 +1,282 @@
+# deps:
+LibRaw
+PyQt
+akonadi
+attica
+boost
+clucene
+eigen3
+grantlee
+gsl
+libbluedevil
+libcanberra
+libdbusmenu-qt
+libodfgen
+librevenge
+libtasn1
+libvisio
+libwpd
+libwpg
+phonon
+phonon-gstreamer
+qca
+qca-cyrus-sasl
+qca-gnupg
+qca-ossl
+qimageblitz
+qjson
+qt
+qt-gstreamer
+shared-desktop-ontologies
+sip
+soprano
+strigi
+virtuoso-ose
+xapian-core
+
+# kdebase:
+kfilemetadata
+baloo
+baloo-widgets
+nepomuk-core
+nepomuk-widgets
+kde-baseapps
+kactivities
+konsole
+kate
+kde-wallpapers
+kde-workspace
+kde-runtime
+kde-base-artwork
+
+# kdelibs:
+kdelibs
+
+# kdepimlibs.
+kdepimlibs
+
+# kdesdk:
+#cervisia
+#dolphin-plugins
+#kapptemplate
+#kcachegrind
+#kde-dev-scripts
+#kde-dev-utils
+#kdesdk-kioslaves
+#kdesdk-strigi-analyzers
+#kdesdk-thumbnailers
+libkomparediff2
+kompare
+lokalize
+#okteta
+#poxml
+#umbrello
+
+# kdegraphics:
+libkipi
+libkexiv2
+libkdcraw
+libksane
+kdegraphics-mobipocket
+okular
+kdegraphics-strigi-analyzer
+kdegraphics-thumbnailers
+gwenview
+kamera
+kcolorchooser
+kgamma
+kolourpaint
+kruler
+ksaneplugin
+ksnapshot
+svgpart
+
+# kdebindings:
+#smokegen
+#smokeqt
+#qtruby
+#perlqt
+#smokekde
+#korundum
+#perlkde
+#pykde4
+#kross-interpreters
+
+# kdeaccessibility:
+kaccessible
+kmouth
+kmousetool
+kmag
+
+# kdeutils:
+ark
+filelight
+kcalc
+kcharselect
+kdf
+kfloppy
+kgpg
+print-manager
+#kremotecontrol
+ktimer
+kwalletmanager
+superkaramba
+sweeper
+
+# kdemultimedia:
+libkcddb
+libkcompactdisc
+audiocd-kio
+dragon
+mplayerthumbs
+#juk
+kmix
+
+# kdenetwork:
+kdenetwork-filesharing
+kdenetwork-strigi-analyzers
+zeroconf-ioslave
+kget
+kopete
+kppp
+#krdc
+krfb
+
+# oxygen-icons:
+oxygen-icons
+
+# kdeadmin:
+kcron
+ksystemlog
+kuser
+
+# kdeartwork:
+kdeartwork
+
+# kdegames:
+libkdegames
+libkmahjongg
+#klickety
+ksudoku
+ksquares
+#kpat
+#klines
+#ksnakeduel
+#kollision
+#kshisen
+#kblocks
+#lskat
+kreversi
+#bovo
+#kajongg
+#granatier
+kmines
+#kiriki
+#kigo
+#bomber
+#kolf
+kdiamond
+#kbounce
+#konquest
+#kapman
+knavalbattle
+#killbots
+#kubrick
+#kgoldrunner
+#knetwalk
+#kbreakout
+#ksirk
+#kfourinline
+picmi
+#kblackbox
+#palapeli
+#katomic
+#ktuberling
+#kjumpingcube
+kmahjongg
+#kspaceduel
+
+# kdetoys:
+#amor
+#kteatime
+#ktux
+
+# kdepim:
+#kdepim
+#kdepim-runtime
+
+# kdeedu:
+libkdeedu
+analitza
+#artikulate
+#blinken
+#cantor
+kalgebra
+#kalzium
+#kanagram
+kbruch
+#kgeography
+#khangman
+#kig
+#kiten
+#klettres
+kmplot
+#kstars
+#kqtquickcharts
+#ktouch
+#kturtle
+#kwordquiz
+#marble
+#parley
+#pairs
+#rocs
+#step
+
+# kdewebdev:
+#kdewebdev
+
+# kdeplasma-addons:
+kdeplasma-addons
+
+# polkit-kde:
+polkit-kde-agent-1
+polkit-kde-kcmodules-1
+
+# extragear:
+bluedevil
+#kaudiocreator
+kplayer
+kwebkitpart
+#oxygen-gtk2
+#kdevplatform
+#kdevelop-pg-qt
+#kdevelop
+#kdev-python
+#kdevelop-php
+#kdevelop-php-docs
+#wicd-kde
+libmm-qt
+libnm-qt
+plasma-nm
+skanlite
+kio-mtp
+libktorrent
+ktorrent
+#amarok
+#calligra
+libkscreen
+kscreen
+kdeconnect-kde
+#partitionmanager
+#k3b
+
+# Supported languages in the ISO:
+kde-l10n-de
+kde-l10n-en_GB
+kde-l10n-es
+kde-l10n-fr
+kde-l10n-ja
+kde-l10n-it
+kde-l10n-nl
+kde-l10n-pt_BR
+kde-l10n-ru
diff --git a/pkglists/kde4plasma5.lst b/pkglists/kde4plasma5.lst
new file mode 100644
index 0000000..55fb35c
--- /dev/null
+++ b/pkglists/kde4plasma5.lst
@@ -0,0 +1,27 @@
+# Slackware deps:
+#PyQt
+#polkit-qt-1
+#qjson
+#sip
+
+# Slackware's KDE4:
+amarok
+bluedevil
+calligra
+k3b
+kaudiocreator
+kdev-python
+kdevelop
+kdevelop-pg-qt
+kdevelop-php
+kdevelop-php-docs
+kdevplatform
+kio-mtp
+kplayer
+ktorrent
+kwebkitpart
+libktorrent
+oxygen-gtk2
+partitionmanager
+skanlite
+
diff --git a/pkglists/min.lst b/pkglists/min.lst
new file mode 100644
index 0000000..dc778a7
--- /dev/null
+++ b/pkglists/min.lst
@@ -0,0 +1,117 @@
+aaa_base
+aaa_elflibs
+aaa_terminfo
+acl
+attr
+bash
+bin
+binutils
+bison
+#bsd-games
+bzip2
+ca-certificates
+coreutils
+cpio
+cryptsetup
+cxxlibs
+cyrus-sasl
+dcron
+dev86
+devs
+dhcpcd
+dialog
+diffutils
+dmidecode
+e2fsprogs
+elvis
+etc
+eudev
+file
+findutils
+flex
+floppy
+gawk
+gc
+gcc
+ghostscript
+#ghostscript-fonts-std
+glibc
+#glibc-solibs
+glibc-zoneinfo
+gnupg
+gnupg2
+gnutls
+gpgme
+gptfdisk
+grep
+groff
+guile
+gzip
+infozip
+iproute2
+iptables
+iputils
+kbd
+kernel-generic
+kernel-firmware
+kernel-headers
+kernel-modules
+kmod
+less
+libassuan
+libgcrypt
+libgpg-error
+libgudev
+libksba
+libmpc
+libtermcap
+lilo
+links
+logrotate
+lvm2
+make
+man
+man-pages
+mc
+mdadm
+mkinitrd
+mpfr
+mtr
+nano
+ncurses
+net-tools
+network-scripts
+openldap-client
+openssh
+openssl
+parted
+pciutils
+perl
+pkgtools
+polkit
+procps-ng
+pth
+python
+quota
+rsync
+screen
+sed
+shadow
+sharutils
+slackpkg
+slocate
+strace
+sudo
+sysklogd
+syslinux
+sysvinit
+sysvinit-scripts
+tar
+terminus-font
+usbutils
+utempter
+util-linux
+wget
+which
+whois
+xz
diff --git a/pkglists/plasma5.conf b/pkglists/plasma5.conf
new file mode 100644
index 0000000..05904a9
--- /dev/null
+++ b/pkglists/plasma5.conf
@@ -0,0 +1,8 @@
+SL_REPO="/mnt/auto/sox/data/slackware/ktown/${SL_VERSION}/testing/${SL_ARCH}"
+
+# Package root directory:
+SL_PKGROOT=${SL_REPO}
+
+# Patches root directory:
+SL_PATCHROOT=""
+
diff --git a/pkglists/plasma5.lst b/pkglists/plasma5.lst
new file mode 100644
index 0000000..ed61fe0
--- /dev/null
+++ b/pkglists/plasma5.lst
@@ -0,0 +1,385 @@
+# deps:
+OpenAL
+PyQt5
+cfitsio
+grantlee
+grantlee-qt4
+json-glib
+libappindicator
+libdbusmenu-gtk
+libdbusmenu-qt5
+libindicator
+libproxy
+lmdb
+phonon
+phonon-gstreamer
+phonon-vlc
+polkit-qt5-1
+qca-qt5
+qt-gstreamer
+qt5
+sni-qt
+wayland
+
+# telepathy-deps:
+farstream
+libaccounts-glib
+libaccounts-qt5
+libnice
+libotr
+libsignon-glib
+signon
+signon-plugin-oauth2
+signon-ui
+telepathy-accounts-signon
+telepathy-farstream
+telepathy-gabble
+telepathy-glib
+telepathy-haze
+telepathy-logger
+telepathy-logger-qt5
+telepathy-mission-control
+telepathy-qt5
+
+# kde4 based:
+akonadi4
+kdelibs
+nepomuk-core
+kdepimlibs4
+kfilemetadata
+baloo
+baloo-widgets
+nepomuk-widgets
+kactivities
+katepart4
+konsolepart4
+smokegen
+smokeqt
+qtruby
+perlqt
+smokekde
+korundum
+perlkde
+pykde4
+kross-interpreters
+libkdegames4
+libkmahjongg4
+oktetapart4
+
+# frameworks:
+attica-framework
+baloo5
+breeze-icons
+extra-cmake-modules
+frameworkintegration
+kactivities-framework
+kapidox
+karchive
+kauth
+kbookmarks
+kcmutils
+kcodecs
+kcompletion
+kconfig
+kconfigwidgets
+kcoreaddons
+kcrash
+kdbusaddons
+kdeclarative
+kded
+kdelibs4support
+kdesignerplugin
+kdesu
+kdewebkit
+kdnssd
+kdoctools
+kemoticons
+kfilemetadata5
+kglobalaccel
+kguiaddons
+khtml
+ki18n
+kiconthemes
+kidletime
+kimageformats
+kinit
+kio
+kitemmodels
+kitemviews
+kjobwidgets
+kjs
+kjsembed
+kmediaplayer
+knewstuff
+knotifications
+knotifyconfig
+kpackage
+kparts
+kpeople
+kplotting
+kpty
+kross
+krunner
+kservice
+ktexteditor
+ktextwidgets
+kunitconversion
+kwallet
+kwidgetsaddons
+kwindowsystem
+kxmlgui
+kxmlrpcclient
+modemmanager-qt
+networkmanager-qt
+oxygen-icons5
+plasma-framework
+solid
+sonnet
+threadweaver
+
+# plasma:
+breeze
+kde-cli-tools
+kde-gtk-config
+kdecoration
+kdeplasma-addons
+kgamma5
+khelpcenter
+khotkeys
+kinfocenter
+kmenuedit
+kscreen2
+ksshaskpass
+ksysguard
+kwayland
+kwayland-integration
+kwin
+kwrited
+libkscreen2
+libksysguard
+milou
+muon
+oxygen
+oxygen-fonts
+plasma-desktop
+plasma-mediacenter
+plasma-sdk
+plasma-workspace
+plasma-workspace-wallpapers
+plasma5-nm
+polkit-kde-framework
+powerdevil
+sddm-kcm
+systemsettings
+
+# plasma-extra:
+kdeconnect-framework
+polkit-kde-kcmodules-framework
+sddm-qt5
+xembed-sni-proxy
+
+# applications:
+amor
+analitza
+ark
+artikulate
+audiocd-kio
+blinken
+bomber
+bovo
+cantor
+cervisia
+dolphin
+dolphin-plugins
+dragon
+filelight
+granatier
+gwenview
+juk
+kaccessible
+kajongg
+kalgebra
+kalzium
+kamera
+kanagram
+kapman
+kapptemplate
+kate
+katomic
+kblackbox
+kblocks
+kbounce
+kbreakout
+kbruch
+kcachegrind
+kcalc
+kcharselect
+kcolorchooser
+kcron
+kde-base-artwork
+kde-baseapps
+kde-dev-scripts
+kde-dev-utils
+kde-runtime
+kde-wallpapers
+kde-workspace
+kdeartwork
+kdebugsettings
+kdeedu-data
+kdegraphics-mobipocket
+kdegraphics-strigi-analyzer
+kdegraphics-thumbnailers
+kdenetwork-filesharing
+kdenetwork-strigi-analyzers
+kdesdk-kioslaves
+kdesdk-strigi-analyzers
+kdesdk-thumbnailers
+kdewebdev
+kdf
+kdiamond
+kfloppy
+kfourinline
+kgeography
+kget
+kgoldrunner
+kgpg
+khangman
+kig
+kigo
+killbots
+kio-extras
+kiriki
+kiten
+kjumpingcube
+klettres
+klickety
+klines
+kmag
+kmahjongg
+kmines
+kmix
+kmousetool
+kmouth
+kmplot
+knavalbattle
+knetwalk
+kolf
+kollision
+kolourpaint
+kompare
+konquest
+konsole
+kopete
+kpat
+kppp
+kqtquickcharts
+krdc
+kremotecontrol
+kreversi
+krfb
+kruler
+ksaneplugin
+kshisen
+ksirk
+ksnakeduel
+ksnapshot
+kspaceduel
+ksquares
+kstars
+ksudoku
+ksystemlog
+kteatime
+ktimer
+ktouch
+ktuberling
+kturtle
+ktux
+kubrick
+kuser
+kwalletmanager
+kwordquiz
+libkcddb
+libkcompactdisc
+libkdcraw
+libkdeedu
+libkdegames
+libkeduvocdocument
+libkexiv2
+libkgeomap
+libkipi
+libkmahjongg
+libkomparediff2
+libksane
+lokalize
+lskat
+marble
+mplayerthumbs
+okteta
+okular
+#oxygen-icons
+palapeli
+parley
+picmi
+poxml
+print-manager
+rocs
+step
+superkaramba
+svgpart
+sweeper
+umbrello
+zeroconf-ioslave
+
+# kdepim:
+
+akonadi
+akonadi-calendar
+akonadi-search
+gpgmepp
+kalarmcal
+kblog
+kcalcore
+kcalutils
+kcontacts
+kdepim
+kdepim-runtime
+kdepimlibs
+kholidays
+kidentitymanagement
+kimap
+kldap
+kmailtransport
+kmbox
+kmime
+kontactinterface
+kpimtextedit
+ktnef
+syndication
+
+# telepathy:
+kaccounts-integration
+kaccounts-providers
+ktp-accounts-kcm
+ktp-approver
+ktp-auth-handler
+ktp-common-internals
+ktp-contact-list
+ktp-contact-runner
+ktp-desktop-applets
+ktp-filetransfer-handler
+ktp-kded-module
+ktp-send-file
+ktp-text-ui
+signon-kwallet-extension
+
+# Supported languages in the ISO:
+kde-l10n-de
+kde-l10n-en_GB
+kde-l10n-es
+kde-l10n-fr
+kde-l10n-ja
+kde-l10n-it
+kde-l10n-nl
+kde-l10n-pt_BR
+kde-l10n-ru
+
diff --git a/pkglists/slackextra.lst b/pkglists/slackextra.lst
new file mode 100644
index 0000000..1f3682d
--- /dev/null
+++ b/pkglists/slackextra.lst
@@ -0,0 +1,5 @@
+# extra:
+bittorrent
+fltk
+recordmydesktop
+tigervnc
diff --git a/pkglists/xapbase.lst b/pkglists/xapbase.lst
new file mode 100644
index 0000000..9c76166
--- /dev/null
+++ b/pkglists/xapbase.lst
@@ -0,0 +1,32 @@
+MPlayer
+audacious
+audacious-plugins
+blueman
+geeqie
+gftp
+gimp
+gkrellm
+gnuchess
+gucharmap
+gv
+imagemagick
+mozilla-firefox
+mozilla-thunderbird
+network-manager-applet
+pidgin
+rdesktop
+rxvt
+sane
+seamonkey-solibs
+vim-gvim
+x11-ssh-askpass
+x3270
+xaos
+xchat
+#xfractint
+xgames
+xlockmore
+xmms
+xpaint
+xpdf
+xsane
diff --git a/pkglists/xbase.lst b/pkglists/xbase.lst
new file mode 100644
index 0000000..46b9d1a
--- /dev/null
+++ b/pkglists/xbase.lst
@@ -0,0 +1,386 @@
+ConsoleKit
+ConsoleKit2
+GConf
+ModemManager
+NetworkManager
+a52dec
+aalib
+adwaita-icon-theme
+alsa-lib
+alsa-oss
+alsa-utils
+appres
+at-spi2-atk
+at-spi2-core
+atk
+audiofile
+babl
+bdftopcf
+bigreqsproto
+cairo
+cgmanager
+compositeproto
+damageproto
+db48
+dbus
+dbus-glib
+dbus-python
+dejavu-fonts-ttf
+desktop-file-utils
+djvulibre
+dmxproto
+dri2proto
+dri3proto
+elfutils
+enchant
+encodings
+esound
+evieext
+exiv2
+fftw
+fixesproto
+flac
+font-adobe-100dpi
+font-alias
+font-bh-100dpi
+font-bh-75dpi
+font-bh-lucidatypewriter-100dpi
+font-bh-lucidatypewriter-75dpi
+font-bh-ttf
+font-bitstream-100dpi
+font-bitstream-75dpi
+font-bitstream-type1
+font-cursor-misc
+font-misc-misc
+font-util
+fontcacheproto
+fontconfig
+fontsproto
+fonttosfnt
+freeglut
+freetype
+fribidi
+fslsfonts
+fstobdf
+gamin
+gccmakedep
+gd
+gdk-pixbuf2
+gegl
+giflib
+glew
+glib-networking
+glib
+glib2
+glibc-i18n
+glproto
+glu
+gmime
+gnome-themes-standard
+gsettings-desktop-schemas
+gst-plugins-base
+gst-plugins-base0
+gst-plugins-good
+gst-plugins-good0
+gstreamer
+gstreamer0
+gtk+
+gtk+2
+gtk+3
+gtkspell
+gvfs
+harfbuzz
+hicolor-icon-theme
+hunspell
+iceauth
+ico
+icon-naming-utils
+icu4c
+ilmbase
+imake
+inputproto
+intltool
+ipw2100-fw
+ipw2200-fw
+iw
+jasper
+kbproto
+keybinder
+lcms
+lcms2
+libFS
+libICE
+libSM
+libX11
+libXScrnSaver
+libXau
+libXaw
+libXaw3d
+libXcomposite
+libXcursor
+libXdamage
+libXdmcp
+libXevie
+libXext
+libXfixes
+libXfont
+libXfontcache
+libXft
+libXi
+libXinerama
+libXmu
+libXp
+libXpm
+libXpresent
+libXrandr
+libXrender
+libXres
+libXt
+libXtst
+libXv
+libXvMC
+libXxf86dga
+libXxf86misc
+libXxf86vm
+libao
+libarchive
+libart_lgpl
+libatasmart
+libcaca
+libcddb
+libcdio
+libcdio-paranoia
+libcroco
+libdmx
+libdrm
+libdvdnav
+libdvdread
+liberation-fonts-ttf
+libepoxy
+libevdev
+libexif
+libfakekey
+libffi
+libfontenc
+libglade
+libgnome-keyring
+libgphoto2
+libgsf
+libical
+libidl
+libieee1284
+libimobiledevice
+libiodbc
+libjpeg-turbo
+libmad
+libmbim
+libmng
+libmtp
+libndp
+libnih
+libnl
+libnl3
+libnotify
+libogg
+libpcap
+libpciaccess
+libplist
+libpng
+libproxy
+libpthread-stubs
+librsvg
+libqmi
+libsamplerate
+libsecret
+libsndfile
+libsoup
+libssh
+libssh2
+libtheora
+libtiff
+libusbmuxd
+libva
+libva-intel-driver
+libvdpau
+libvisual
+libvorbis
+libvpx
+libwmf
+libwnck
+libx86
+libxcb
+libxkbfile
+libxklavier
+libxshmfence
+libxml2
+libxslt
+listres
+llvm
+lm_sensors
+luit
+lzo
+makedepend
+mesa
+mkcomposecache
+mkfontdir
+mkfontscale
+motif
+mozilla-nss
+mpg123
+mtdev
+neon
+nettle
+newt
+openexr
+openjpeg
+orc
+p11-kit
+pango
+pixman
+pm-utils
+poppler
+poppler-data
+presentproto
+printproto
+pycairo
+pygobject
+pygtk
+radeontool
+randrproto
+recordproto
+rendercheck
+renderproto
+resourceproto
+rgb
+samba
+sazanami-fonts-ttf
+scrnsaverproto
+sdl
+sg3_utils
+sessreg
+setxkbmap
+shared-mime-info
+showfont
+sinhala_lklug-font-ttf
+smproxy
+sqlite
+startup-notification
+svgalib
+t1lib
+tibmachuni-font-ttf
+ttf-indic-fonts
+udisks
+udisks2
+upower
+usb_modeswitch
+util-macros
+v4l-utils
+vbetool
+videoproto
+viewres
+vorbis-tools
+vte
+wavpack
+wireless-tools
+wpa_supplicant
+wqy-zenhei-font-ttf
+x11-skel
+x11perf
+xauth
+xbacklight
+xbitmaps
+xcb-proto
+xcb-util
+xcb-util-keysyms
+xclipboard
+xclock
+xcmiscproto
+xcmsdb
+xcompmgr
+xcursor-themes
+xcursorgen
+xdbedizzy
+xdm
+xdg-utils
+xdpyinfo
+xdriinfo
+xev
+xextproto
+xf86-input-acecad
+xf86-input-aiptek
+xf86-input-evdev
+xf86-input-joystick
+xf86-input-keyboard
+xf86-input-mouse
+xf86-input-penmount
+xf86-input-synaptics
+xf86-input-vmmouse
+xf86-input-void
+xf86-video-apm
+xf86-video-ark
+xf86-video-ast
+xf86-video-ati
+xf86-video-dummy
+xf86-video-glint
+xf86-video-i128
+xf86-video-i740
+xf86-video-intel
+xf86-video-mach64
+xf86-video-mga
+xf86-video-modesetting
+xf86-video-nouveau
+xf86-video-nv
+xf86-video-openchrome
+xf86-video-r128
+xf86-video-v4l
+xf86-video-vesa
+xf86-video-vmware
+xf86bigfontproto
+xf86dga
+xf86dgaproto
+xf86driproto
+xf86miscproto
+xf86vidmodeproto
+xfd
+xfontsel
+xfs
+xfsinfo
+xgamma
+xgc
+xhost
+xineramaproto
+xinit
+xinput
+xkbcomp
+xkbevd
+xkbprint
+xkbutils
+xkeyboard-config
+xkill
+xlsatoms
+xlsclients
+xlsfonts
+xmessage
+xmodmap
+xorg-cf-files
+xorg-server
+xorg-server-xvfb
+xpr
+xprop
+xproto
+xrandr
+xrdb
+xrefresh
+xscreensaver
+xset
+xsetroot
+xsm
+xstdcmap
+xtrans
+xv
+xvidtune
+xvinfo
+xwd
+xwininfo
+xwud
+zd1211-firmware
diff --git a/pkglists/xfcebase.lst b/pkglists/xfcebase.lst
new file mode 100644
index 0000000..be2ddbb
--- /dev/null
+++ b/pkglists/xfcebase.lst
@@ -0,0 +1,27 @@
+Thunar
+exo
+garcon
+gtk-xfce-engine
+libxfce4ui
+libxfce4util
+orage
+thunar-volman
+tumbler
+xfce4-appfinder
+xfce4-clipman-plugin
+xfce4-dev-tools
+xfce4-mixer
+xfce4-notifyd
+xfce4-panel
+xfce4-power-manager
+xfce4-screenshooter
+xfce4-session
+xfce4-settings
+xfce4-systemload-plugin
+xfce4-taskmanager
+xfce4-terminal
+xfce4-volumed
+xfce4-weather-plugin
+xfconf
+xfdesktop
+xfwm4
diff --git a/syslinux/efiboot.img b/syslinux/efiboot.img
new file mode 100644
index 0000000..23ce1bc
--- /dev/null
+++ b/syslinux/efiboot.img
Binary files differ
diff --git a/syslinux/f2.txt b/syslinux/f2.txt
new file mode 100644
index 0000000..bf4ee9a
--- /dev/null
+++ b/syslinux/f2.txt
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+ -+ Customization Help +-
+
+To boot with default values just press ENTER.
+Customizations of the Live environment:
+boot: live lang=nl_NL kbd=nl tz=Europe/Amsterdam
+ "Specify language, keyboard and/or timezone"
+boot: live nop "No persistence, i.e. boot the virgin installation"
+boot: live nomodeset "Boot with kernel mode setting for graphics
+ -- needed with some machines."
+boot: live load=nvidia "Load and configure binary Nvidia drivers"
+boot: live rootdelay=10
+ "Add 10 second delay to allow proper USB initialization"
+boot: live swap "Activate swap partitions if found on the computer"
+
+To check your system memory with memtest86+, use 'memtest':
+boot: memtest
+
diff --git a/syslinux/iso.sort b/syslinux/iso.sort
new file mode 100644
index 0000000..ade31e7
--- /dev/null
+++ b/syslinux/iso.sort
@@ -0,0 +1,3 @@
+isolinux 100
+isolinux/isolinux.bin 200
+kernels 50
diff --git a/syslinux/isolinux.bin b/syslinux/isolinux.bin
new file mode 100644
index 0000000..b179b3c
--- /dev/null
+++ b/syslinux/isolinux.bin
Binary files differ
diff --git a/syslinux/isolinux.cfg b/syslinux/isolinux.cfg
new file mode 100644
index 0000000..1f06172
--- /dev/null
+++ b/syslinux/isolinux.cfg
@@ -0,0 +1 @@
+include syslinux.cfg
diff --git a/syslinux/lang.cfg b/syslinux/lang.cfg
new file mode 100644
index 0000000..c171eca
--- /dev/null
+++ b/syslinux/lang.cfg
@@ -0,0 +1,51 @@
+label be
+menu label belgisch
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=nl_BE.utf8 kbd=be-latin1 tz=Europe/Brussels
+
+label br
+menu label brazil
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=pt_BR.utf8 kbd=br-latin1-us tz=America/Sao_Paulo
+
+label gb
+menu label british
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=en_GB.utf8 kbd=uk tz=Etc/GMT
+
+label de
+menu label deutsch
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=de_DE.utf8 kbd=de-latin1 tz=Europe/Berlin
+
+label es
+menu label espanol
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=es_ES.utf8 kbd=es tz=Europe/Madrid
+
+label fr
+menu label francais
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=fr_FR.utf8 kbd=fr tz=Europe/Paris
+
+label it
+menu label italiano
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=it_IT.utf8 kbd=it tz=Europe/Rome
+
+label ja
+menu label japanese
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=ja_JP.utf8 kbd=jp106 tz=Asia/Tokyo
+
+label nl
+menu label nederlands
+menu default
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=nl_NL.utf8 kbd=nl tz=Europe/Amsterdam
+
+label ru
+menu label russian
+kernel /boot/generic
+append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=ru_RU.utf8 kbd=ru tz=Europe/Moscow
+
diff --git a/syslinux/memtest b/syslinux/memtest
new file mode 100644
index 0000000..affaaab
--- /dev/null
+++ b/syslinux/memtest
Binary files differ
diff --git a/syslinux/message.txt b/syslinux/message.txt
new file mode 100644
index 0000000..c9df271
--- /dev/null
+++ b/syslinux/message.txt
@@ -0,0 +1,12 @@
+
+Welcome to 09Slackware@DIRSUFFIX@-Live07 version @SL_VERSION@ (Linux kernel @KVER@)!
+
+If you need to pass extra parameters to the kernel, enter them at the prompt
+below after the name of the kernel to boot (default: live).
+
+To test your memory with memtest86+, enter memtest on the boot line below.
+
+This prompt is just for entering extra parameters. If you don't need to enter
+any parameters, hit ENTER to boot with default values or press [F2]
+for a listing of customization choices. Default kernel will boot in 30 seconds.
+
diff --git a/syslinux/swlogov.png b/syslinux/swlogov.png
new file mode 100644
index 0000000..16bd64c
--- /dev/null
+++ b/syslinux/swlogov.png
Binary files differ
diff --git a/syslinux/syslinux.cfg b/syslinux/syslinux.cfg
new file mode 100644
index 0000000..3f4bd5c
--- /dev/null
+++ b/syslinux/syslinux.cfg
@@ -0,0 +1,15 @@
+default live
+prompt 1
+timeout 300
+display message.txt
+F1 message.txt
+F2 f2.txt
+label live
+ kernel /boot/generic
+ append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 kbd=us tz=localtime locale=us_EN.utf8
+
+include lang.cfg
+
+label memtest
+ kernel /boot/memtest
+
diff --git a/xdm/Xresources b/xdm/Xresources
new file mode 100644
index 0000000..7666d5c
--- /dev/null
+++ b/xdm/Xresources
@@ -0,0 +1,56 @@
+#if ( HEIGHT == 1080 )
+# define LOGIN_POS_Y 740
+#elif ( HEIGHT == 1024 )
+# define LOGIN_POS_Y 635
+#elif ( HEIGHT == 900 )
+# define LOGIN_POS_Y 615
+#elif ( HEIGHT == 800 )
+# define LOGIN_POS_Y 550
+#elif ( HEIGHT == 768 )
+# define LOGIN_POS_Y 520
+#elif ( HEIGHT == 600 )
+# define LOGIN_POS_Y 400
+#elif ( HEIGHT == 480 )
+# define LOGIN_POS_Y 315
+#endif
+
+! The description of these resources is found in the xdm man page
+xlogin.Login.greeting:
+!xlogin.Login.greeting: CLIENTHOST
+xlogin.Login.namePrompt: Username:\040
+xlogin.Login.passwdPrompt: Password:\040
+xlogin.Login.fail: incorrect
+xlogin.Login.greetFace: Terminus-14:style=Bold
+xlogin.Login.promptFace: Terminus-12:style=Bold
+xlogin.Login.face: Terminus-10
+xlogin.Login.failFace: Terminus-14:style=Bold
+xlogin.Login.frameWidth: 0
+xlogin.Login.greetColor: #5569B9
+xlogin.Login.promptColor: #5569B9
+xlogin.Login.failColor: red
+xlogin.Login.width: 400
+xlogin.Login.height: 170
+xlogin.Login.y: LOGIN_POS_Y
+xlogin.Login.borderWidth: 0
+xlogin.Login.foreground: #ffe4e4
+xlogin.Login.background: black
+xlogin.Login.logoFileName: /etc/X11/xdm/liveslak-xdm/bluepiSW.xpm
+
+.XClock.geometry: 350x28+0-0
+.XClock.Clock.analog: false
+.XClock.Clock.strftime: (%A)\040%F\040%T
+.XClock.Clock.update: 1
+.XClock.Clock.render: false
+.XClock.Clock.font: -misc-fixed-*-*-*-*-15-*-*-*-*-*-*-*
+.XClock.Clock.background: black
+.XClock.Clock.foreground: #9d9d9d
+
+.Xmessage.form.message.scrollVertical: never
+.Xmessage.form.message.scrollHorizontal: never
+.Xmessage.form.message.background: black
+.Xmessage.geometry: -0-0
+.Xmessage.form.background: black
+.Xmessage.form.Command.font: -misc-fixed-*-*-*-*-15-*-*-*-*-*-*-*
+.Xmessage.form.Command.foreground: #9d9d9d
+.Xmessage.form.Command.background: black
+.Xmessage.form.Command.shapeStyle: Rectangle
diff --git a/xdm/Xsetup b/xdm/Xsetup
new file mode 100755
index 0000000..69a6d6d
--- /dev/null
+++ b/xdm/Xsetup
@@ -0,0 +1,43 @@
+#!/bin/sh
+# Borrowed from Arch Linux and adapted for Slackware.
+# See https://aur.archlinux.org/packages/xdm-arch-theme/
+
+# the root window should have this color
+xsetroot -solid "#000000" -cursor_name left_ptr
+
+SVG_FILE=/etc/X11/xdm/liveslak-xdm/slackware_traditional.svg
+
+# identify resolution
+declare -a RESOLUTION
+RESOLUTION=( $(xrandr -q | head -n1 | sed -e 's/.*current \([1-9][0-9]\+\) x \([1-9][0-9]\+\).*/\1 \2/') )
+
+CACHE_DIR=/var/cache/xdm-liveslak-theme
+IMAGEFILE=${CACHE_DIR}/slackware_logo_${RESOLUTION[0]}x${RESOLUTION[1]}.png
+
+# create cache dir if necessary
+if [[ ! -d ${CACHE_DIR} ]]; then
+ mkdir -p ${CACHE_DIR}
+fi
+
+# check whether image file already exists
+if [[ ! -f ${IMAGEFILE} ]]; then
+ rsvg-convert -a --background-color="#000000" -f png -w $((${RESOLUTION[0]}/3*2)) -o ${IMAGEFILE} ${SVG_FILE}
+fi
+
+# try different methods to set the background
+if which display >> /dev/null 2>&1; then
+ # imagemagick detected
+ display -background "#000000" -backdrop -window root ${IMAGEFILE};
+elif which feh >> /dev/null 2>&1; then
+ # feh detected
+ # feh gives error if $HOME isn't set, so...
+ HOME=/root feh --bg-center ${IMAGEFILE};
+elif which xv >> /dev/null 2>&1; then
+ # xv detected
+ # xv spits out an error when using -quit, but it still does the job, so...
+ xv -root -quit -rmode 5 ${IMAGEFILE} >> /dev/null 2>&1
+fi
+
+/etc/X11/xdm/liveslak-xdm/buttons &
+
+xclock &
diff --git a/xdm/Xstartup b/xdm/Xstartup
new file mode 100755
index 0000000..3ab2f54
--- /dev/null
+++ b/xdm/Xstartup
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# Get rid of all clients started by Xsetup
+xwininfo -root -children | grep ' 0x' | cut -d' ' -f6 | xargs -n1 xkill -id
+
+# Register a login (derived from GiveConsole as follows:)
+exec /usr/bin/sessreg -a -w /var/log/wtmp -u /var/run/utmp -x /etc/X11/xdm/Xservers -l $DISPLAY -h "" $USER
+
diff --git a/xdm/bluepiSW.xpm b/xdm/bluepiSW.xpm
new file mode 100644
index 0000000..c7052f1
--- /dev/null
+++ b/xdm/bluepiSW.xpm
@@ -0,0 +1,387 @@
+/* XPM */
+static char *bluepiSW[] = {
+/* columns rows colors chars-per-pixel */
+"128 125 256 2 ",
+" c #020406",
+". c #02020C",
+"X c #02090A",
+"o c #040113",
+"O c #04021B",
+"+ c #040518",
+"@ c #020323",
+"# c #02052B",
+"$ c #010929",
+"% c #020632",
+"& c #010932",
+"* c #01073B",
+"= c #01093C",
+"- c #231F2C",
+"; c #231F31",
+": c #24212D",
+"> c #252232",
+", c #292535",
+"< c #26253B",
+"1 c #29263C",
+"2 c #2A293D",
+"3 c #29293C",
+"4 c #322E3E",
+"5 c #000A44",
+"6 c #000B4B",
+"7 c #000745",
+"8 c #01114D",
+"9 c #011144",
+"0 c #000D53",
+"q c #010E5B",
+"w c #001154",
+"e c #00125C",
+"r c #292740",
+"t c #272941",
+"y c #2A2B43",
+"u c #2C2E4B",
+"i c #272741",
+"p c #322E45",
+"a c #2E314E",
+"s c #2E3046",
+"d c #333244",
+"f c #31314E",
+"g c #393A4D",
+"h c #2E3253",
+"j c #2E355B",
+"k c #313352",
+"l c #3D3C56",
+"z c #31355B",
+"x c #32395D",
+"c c #3D3D5A",
+"v c #353853",
+"b c #2C2F51",
+"n c #050E64",
+"m c #011363",
+"M c #01156B",
+"N c #01196C",
+"B c #091268",
+"V c #001673",
+"C c #011A74",
+"Z c #011C7C",
+"A c #091D7E",
+"S c #05217D",
+"D c #09237D",
+"F c #333B63",
+"G c #353E6B",
+"H c #373C62",
+"J c #403E5A",
+"K c #3D4259",
+"L c #36406C",
+"P c #3B436C",
+"I c #3A4374",
+"U c #3B4679",
+"Y c #3D497C",
+"T c #384474",
+"R c #434355",
+"E c #48485C",
+"W c #474B59",
+"Q c #454963",
+"! c #474866",
+"~ c #4E5469",
+"^ c #54566B",
+"/ c #424C7D",
+"( c #494E76",
+") c #4B5178",
+"_ c #535474",
+"` c #585A78",
+"' c #504B63",
+"] c #615F79",
+"[ c #5B6579",
+"{ c #65697D",
+"} c #011D82",
+"| c #042283",
+" . c #0A2583",
+".. c #0C2985",
+"X. c #0B2689",
+"o. c #0D2A8B",
+"O. c #062188",
+"+. c #122D8B",
+"@. c #112B87",
+"#. c #15328D",
+"$. c #19358E",
+"%. c #143393",
+"&. c #1A3692",
+"*. c #1D3994",
+"=. c #1C3B9A",
+"-. c #122E91",
+";. c #233D95",
+":. c #233E99",
+">. c #3E4B83",
+",. c #3E4D88",
+"<. c #3F508A",
+"1. c #254197",
+"2. c #25429B",
+"3. c #2A449B",
+"4. c #2D499E",
+"5. c #284395",
+"6. c #334C9D",
+"7. c #30459C",
+"8. c #3A539F",
+"9. c #2C4AA2",
+"0. c #2647A0",
+"q. c #324DA3",
+"w. c #3A4FA1",
+"e. c #3651A3",
+"r. c #3B53A3",
+"t. c #3C56A9",
+"y. c #3F59A9",
+"u. c #3853A7",
+"i. c #414E84",
+"p. c #414E8A",
+"a. c #455286",
+"s. c #43528C",
+"d. c #4C5A8B",
+"f. c #4A578A",
+"g. c #565D87",
+"h. c #455592",
+"j. c #485792",
+"k. c #465996",
+"l. c #4A5A95",
+"z. c #465A9B",
+"x. c #4A5C9A",
+"c. c #445799",
+"v. c #535D91",
+"b. c #5B6483",
+"n. c #5A638B",
+"m. c #576699",
+"M. c #626C83",
+"N. c #636B8B",
+"B. c #65668A",
+"V. c #6B748A",
+"C. c #676D94",
+"Z. c #6B7393",
+"A. c #697797",
+"S. c #737A9D",
+"D. c #75799A",
+"F. c #767C8F",
+"G. c #435AA6",
+"H. c #445DAA",
+"J. c #485FAB",
+"K. c #475AA4",
+"L. c #4761AC",
+"P. c #4C63AD",
+"I. c #4C60A5",
+"U. c #5364A3",
+"Y. c #5166AD",
+"T. c #5369AE",
+"R. c #5B6CAC",
+"E. c #5A6CA4",
+"W. c #4D65B1",
+"Q. c #4F68B2",
+"!. c #5067B1",
+"~. c #546BB4",
+"^. c #586EB5",
+"/. c #566EB8",
+"(. c #586FB8",
+"). c #5770B6",
+"_. c #5A71B6",
+"`. c #5770B8",
+"'. c #5C73B9",
+"]. c #6677A7",
+"[. c #767BA5",
+"{. c #6176BA",
+"}. c #647ABC",
+"|. c #697DBE",
+" X c #6577B5",
+".X c #6C79B1",
+"XX c #677CC0",
+"oX c #6A7EC1",
+"OX c #788399",
+"+X c #7C82A3",
+"@X c #7B84AB",
+"#X c #7A88A7",
+"$X c #7282BD",
+"%X c #7A88B7",
+"&X c #6B80BF",
+"*X c #6D81C2",
+"=X c #7285C5",
+"-X c #7589C6",
+";X c #7A8AC6",
+":X c #7587C8",
+">X c #7689C9",
+",X c #7B8CCB",
+"<X c #7884C0",
+"1X c #7E91CD",
+"2X c #7F8ED0",
+"3X c #8289AE",
+"4X c #828AA6",
+"5X c #838BB1",
+"6X c #898EB4",
+"7X c #8692B5",
+"8X c #8B94B5",
+"9X c #8B94BB",
+"0X c #8B99B8",
+"qX c #939DBD",
+"wX c #9096B9",
+"eX c #8890AA",
+"rX c #91A0BE",
+"tX c #818799",
+"yX c #818DC7",
+"uX c #8393CE",
+"iX c #8A96CB",
+"pX c #8999C7",
+"aX c #939CC5",
+"sX c #929ECB",
+"dX c #949AC2",
+"fX c #8594D2",
+"gX c #8897D3",
+"hX c #8699D3",
+"jX c #8B9CD5",
+"kX c #8D9CD8",
+"lX c #929ED5",
+"zX c #919FD9",
+"xX c #808FD0",
+"cX c #95A2C4",
+"vX c #94A2CB",
+"bX c #9AA4CC",
+"nX c #9DAACC",
+"mX c #99A1C5",
+"MX c #8FA0D7",
+"NX c #8EA0D8",
+"BX c #94A3D5",
+"VX c #9AA6D3",
+"CX c #9CAAD3",
+"ZX c #94A3DA",
+"AX c #99A6DB",
+"SX c #9CAADC",
+"DX c #97A8DC",
+"FX c #8FA3CD",
+"GX c #A1AEDC",
+"HX c #A0ADD5",
+"JX c #A3B1DC",
+"KX c #A4B0D5",
+"LX c #9DADE0",
+"PX c #A0AEE1",
+"IX c #A3B1E0",
+"UX c None",
+/* pixels */
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB B B B A B Z V V V M B B B UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB B O.X.#.&.;.7.7.w.w.w.w.w.w.7.3.:.;.+.X. .A V B B UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB C D $.:.6.K.J.Y.Y.Y.R.R.R.^.^.^.^.R.^.T.R.Y.Y.K.K.G.7.*.+.} A V B UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB C @.3.w.J.Y.R.R.R.R.R.^.R.T.^.!.!.^.!.R.(.!.^.~.R.^.R.R.~.!.!.J.G.:.;.} } V n UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXn C $.7.G.Y.T.R.^.R.R.~.!.R.!.T.^.!.!.R.!.!.!.!.!.!.T.~.~.T.R.~.~.~.^.^.^.^.!.H.q.&.} } V n UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXN A ;.w.Y.Y.!.R.T.^.T.^.!.~.!.!.!.!.!.!.!.!.!.!.!.!.!.!.~.~.R.!.~.!.~./.!.^.(.^.^.^.^.!.G.:.-.} V n UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXN @.3.J.Y.^.R.^.R.^.T.!.R.!.!.!.!.!.!.Y.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.~.!.!.^.!.~.^.^.^.^.^.^.~.J.q.-.} V n UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB .7.J.R.^.R.R.!.R.Y.!.!.!.T.!.!.Y.Y.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.~.!.~.!.!.!.!./.^.^.!.^.^.^.^.^.^.W.q.-.} C m UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB S :.J.^.^.!.R.!.!.!.!.R.^.!.!.!.!.!.!.!.Y.W.!.!.W.!.!.!.!.!.!.!.W.!.!.!.!.R.!./.Q.~.~.^.!.^.^.^.^.^.^.~.^././.P.7.X.} C 0 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXV &.G.!.^.^.T.^.T.T.T.!.Y.!.!.Y.Y.!.W.P.!.W.W.!.!.!.W.!.!.W.!.!.!.!.!.!.!.!.!.!.!.!.Q.!.~.~.^.!.^.~.^.^.^.~.^.^.^.^.^.J.;.| C m UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXn .6.Y.R.R.T.R.Y.!.!.T.Y.Y.!.Y.Y.!.W.P.W.W.W.Y.W.W.W.W.W.W.!.W.!.!.W.!.W.!.W.!.!.!.Q.!.~.~.~.~.!.^.~.^.~.^././.^.^.~.^./.^.!.u.+.Z V 0 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXN &.K.^.!.T.!.T.T.T.Y.!.!.!.Y.!.!.Y.!.P.P.W.W.W.J.W.J.W.W.!.J.W.!.!.!.!.W.W.!.!.!.!.Q.Q.!.!.!.~.~.^.~.^.~././.~.^.^.^.^.(.~.~.^.(.P.:.A V B UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXD 3.R.^.T.T.T.R.!.!.Y.Y.!.!.J.!.!.P.!.W.P.W.W.W.W.W.W.!.W.W.J.!.W.W.J.J.!.!.W.!.!.!.!.~.!.!.!.~.~.~.~.~.~.~./.~././.~.~.^.~.^.~./.(.^.~.q. .V M 5 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX.G._.R.Y.Y.R.Y.Y.Y.Q.Y.Y.Q.!.P.!.Q.P.Y.W.L.W.W.W.W.W.W.W.W.L.W.W.W.W.W.W.W.!.W.W.W.W.W.W.!./.!.~.~.~.~././.~./.~./.~.~.~././.!.~.(.~.~.(.(.J.@.C N 6 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXn -.J.'.R.T.Y.Y.Y.Y.Y.Y.P.Y.Q.P.Q.P.P.!.W.W.W.L.P.P.J.J.W.W.W.J.W.W.W.W.W.W.W.!.!.W.!.W.!.W.!.!.W./.~.~.~.~.~.~./.~.!.!.~.~.~.Q.!./.~.~.~.(.R.(.(.W.*.C N 0 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXM &.R._.T.T.T.Y.T.Y.T.!.Q.W.Q.P.P.Q.W.W.W.P.P.W.P.P.L.W.W.W.J.W.J.W.L.W.W.W.W.W.!.W.W.!.!.W.Q.W./.W.W.Q.!.~.~.~.~.~.~.~./.!.~.~.Q.~.!.~.~.~.~./.~.(.(.!.1.Z N 0 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB :.^._.T.T.T.T.!.Y.Y.!.Y.Y.P.Y.P.Y.P.W.W.W.P.P.L.W.P.W.W.J.J.W.W.W.W.W.W.W.W.W.W.Q.!.W.!.W.W.!.W.W.!.!.Q.Q.Q.~.Q.~.Q.!.!.!.!.~.!.!.~.~.~.~./.~.~.(.(.(.`.^.3.C M 8 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXM :.'._.T.Y.Y.Y.Y.Y.P.Y.Y.W.P.P.P.P.P.P.P.P.W.P.W.W.P.P.W.W.W.L.W.W.W.W.W.W.W.W.W.Q.Q.!.W.W.W.W.W.W.W.W.!.Q.!.Q.!.~.!.!.^.!.!.!.!.~.Q.~.~.~.~.~.~.~.~.~./._.'._.4.C N 8 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXM ;. X^.Y.Y.W.Y.!.Y.Y.P.W.W.P.W.P.P.Q.W.W.W.P.W.P.P.W.P.P.P.J.W.W.W.Q.Q.Q.~./././././.(././._.^.~.~./.W./.W.Q.Q.~.Q.^.^.'.^.(././.!.~.!.~.!.!.~.~.~.~./.(./.`.`.`.^.4.C N 5 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXM &.^.^.Y.Y.Y.Y.Y.P.Y.W.P.W.P.P.P.W.P.P.Q.W.W.W.P.P.P.W.W.W.P.W.~.~./.'.XXXXXXoXoXoXoXoXoXoXoX*XoXoXXX{.(././.^.~.~._.'.oXoXoXoXoXXXXX(.!.~.~.~.~.~.~.(.(.~.~.^.`.`.`.^.3.N M 5 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXn #.T.R.Y.Y.Y.Y.W.W.Y.P.P.P.W.P.P.P.P.P.Y.P.Q.W.W.W.W.W.L.W.!._.'.'.oX:X2XgXzXZXLXLXLXLXZXLXLXLXLXDXzXgXxX2XoXoX}.'.'.oX>XjXAXzXZXZXfX2XoXXX/.!.~.~.~.~.~.~././.(.^.'.`._.!.*.M m = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX.J.^.Y.!.Y.Y.P.W.P.P.P.P.J.J.P.P.W.P.Q.P.P.Q.P.W.W.P.Q.~.`.{.*X,XjXLXAXAXlXiXyX$X&X|.=X$X$X|.%X$XuXiXCXDXPXSXBXfX>X*XhXLXSXzXiXlXAXGXGXgX*X`.~.~./.~.~.~./.~.~.^./.`.`._._.W.#.N e & UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXA G._.Y.Y.Y.Y.J.Y.P.P.P.P.W.P.P.W.P.P.P.P.Q.P.P.P.P.Y.~._.}.=XgXAXSXlX%X XU.K.c.k.c.c.x.x.z.z.K.z.x.K.K.U.E.&X;XVXSXLXLXIX5XE.I.I.K.U.R.iXJX1XXX~.~.~.~.~././././.^.(.`.^.`._.'.L...m e @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXC 3.R.Y.Y.Y.P.Y.P.!.P.Y.W.P.J.W.W.J.P.P.P.P.P.P.P.P.Q._.{.=XhXLXAX%X Xl.k.h.z.h.l.l.k.k.h.z.x.z.h.x.k.x.l.l.z.k.x.x.E.$XjXsXE.x.x.x.x.x.x.E.SXjX*X_./.~.~.~.~.~././.^./././.`.`.'.(.t.C m 6 + UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXB &.Y.Y.Y.Y.Y.Y.J.P.P.P.P.P.P.P.J.P.P.P.P.P.P.P.P.Q.~._.}.fXDXBX<Xm.z.s.k.h.k.h.c.h.h.k.h.z.h.z.h.x.j.c.c.l.k.l.z.l.l.j.x.l.U.l.x.x.l.l.x.x.x.iXZX*X'.Q.Q.~.~.~.~.~.~.~././.^.`.^.(.^.^.4.M e = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUX..K.Y.Y.P.Y.Y.Y.J.Y.P.L.P.J.J.P.P.P.P.P.P.P.Y.P.Y.~.`.*XkXSX%Xm.h.h.<.h.<.j.s.h.<.h.h.h.h.<.h.p.c.p.l.s.k.h.h.h.s.j.s.l.f.l.s.l.h.x.j.j.l.j.x.yXSX<X'.~.Q.~.~.~.~.~.~.).~./.~.(././.^._.Q.#.m e $ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXC 6.!.Y.Y.Y.Y.J.!.J.J.P.P.L.W.W.P.P.J.P.P.P.P.P.Y.!.}.:XDXBXE.h.<.h.<.h.s.h.a.h.<.p.h.,.s.s.s.,.h.p.c.p.h.s.k.<.h.h.s.h.s.k.s.s.f.h.s.d.s.j.l.p..XSX-X'./.Q.~.Q.~.~.~.~.~./.~./.^.^.^.~.`._.y.S m 8 O UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXm &.P.Y.Y.Y.P.J.Y.J.Y.J.P.W.P.P.P.W.J.J.W.P.P.P.P.^.'.,XLXiXl.p.p.s.<.h.>.<.<.h.<.<.,.,.h.f.l.j.E.m.E.j.x.s.h.<.<.<.s.j.a.h.s.k.p.h.s.h.s.s.j.j.j..XSX-X'./.~.Q.~.~.~.~.~.~.~.~././.~./.(._.~.^.4.M m = . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXS G.T.Y.Y.Y.Y.P.P.P.P.P.L.P.P.L.L.W.W.W.J.P.P.P.T.'.1XLX5Xj.i.i.p.>.<.>.<.>.<.>.<.j.E.@XyXiXlXVXPXGXGXzXkXFX9X@Xm.d.<.>.h.>.s.p.s.i.s.p.s.p.p.s.i. XGX;X'.Q./.~.Q.!.~./.~.Q./.~.~.~.^.^./.`.~._.Q.@.e w @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXN :.P.Y.Y.P.Y.J.P.P.J.Y.P.P.P.P.L.W.W.P.J.L.W.P.!.'.-XDXyXs.>.p.>.>.<.>.<.>.<.>.m.@XBXDXSXzXgXgXfX2XoXgXgXxXkXAXSXSXFX+Xm.a.s.Y s.<.s.>.a.p.a.s.p.s.].GX;X{./.!./.Q./.!.Q././././.Q./.~././.~.`.`.^.u.C m 5 o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXw X.K.Y.Y.Y.P.Y.P.P.P.P.J.P.J.P.I.L.P.J.P.L.W.L.!.^.&XZXiXf.>.>.i.>.>.>.>.>.>.s.%XDXSXjX,XoXoX{.{.{.(./.XXXXXXXX*X>X2XkXSXvX$Xf.s.a.s.a.s.p.a.a.a.s.p.m.SXuX}./.!.!.Q.!.!./.!.~.Q.~.~./.~./././.^.^.^.~.$.e w @ . UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXM 3.Y.U.Y.Y.I.P.P.J.Y.J.J.Y.P.P.P.P.W.L.L.L.W.P.T.'.fXCXm.Y <.Y >.>.Y >.Y >.d.sXDXxX=X}.'.^.~.!.!.~.!.W.W.!./.!./.`.}.*X>XkXIXpXa.a.Y a.>.p.i.i.i.>.>.l.CXuX{./.W./.Q.!.!.!./.~.Q./.Q.~.~.Q././.~.~.^._.y.C e 5 o UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXq @.G.Y.Y.Y.Y.P.Y.I.P.P.J.P.J.J.P.J.P.J.W.L.P.P.Y.).=XDX].Y >.Y Y Y U Y Y Y v.BXzX:X{./.!.W.W.P.!.P.!.!.W.W.W.W.W.W.~.Q./.`.XXfXJXpXa.p./ i./ i.Y / a.Y l.BXiX X~.~.Q.Q.W././.Q.Q./.Q./.Q.~.~.~./.^././._.Q.&.m 0 # . UXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXV 1.P.Y.P.P.Y.I.J.Y.P.P.J.J.J.W.J.P.P.P.J.P.P.P.Y.'.fXVXd.U Y U U Y U Y U a.FXBX*X'.~.W.W.W.W.W.P.W.W.W.W.J.J.W.W.W.W.W.W.!._.}.1XIX%Xa./ / Y / / / Y i.g.bXgX}.~.!.~.!.Q.Q./.!.Q.~.~.Q.Q.~.~.~.~././.^.(.(.G.V 0 5 . UXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXX.z.Y.Y.Y.Y.P.P.Y.P.J.P.P.P.P.L.P.P.P.P.J.J.L.P.Q.*XCX%XU U U U T U T I U $XDX=X'.Q.Q.W.W.W.L.W.W.P.W.W.W.W.W.W.W.W.W.W.W.W.Q.^.}.hXHXm.U U U U U U U U a.sXjX}.(.!.~.~.!./.!./.~.~.~././.~.~.~.~././.^.(.(.~.$.e w @ . UXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXM &.P.Y.P.Y.I.P.P.P.L.I.L.P.J.L.L.L.L.L.L.L.J.L.W.).-XSXm.U P U T I T T T a.vXjX}.~.W.W.W.L.W.W.L.J.J.W.J.J.W.J.W.W.W.P.!.W.W.W.~.'.:XSX#X/ / I U U I U U / yXzXoX/.~.~.!.Q.Q./.Q.Q.~.Q.~./.Q./.~.^./././.(./.(.e.N w = o UXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXZ 8.Y.Y.P.P.Y.P.P.P.P.P.P.J.J.L.P.P.J.P.J.W.P.W.P.).,XCXv.L U L T I G L G m.DX;X_.W.L.W.L.W.L.L.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.Q.~.XXNXCXd.G U I I U I U / iXzXXX/.!.~.~.W./.W./.Q./././././././././.^.^./.^.(.W...e 6 O o UXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXe +.K.P.P.P.P.U.L.P.P.L.P.P.P.J.J.J.L.L.P.P.L.P.L.P.).,XvX/ T L P L G G G G E.AX$X^.W.P.P.L.W.W.L.W.L.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.~.'.>XLXpX/ T T I P U L d.GXiX}./.!.!.Q.Q.Q./.W././././././.Q././.Q./././././.^.3.m w # o UXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXC 5.U.P.P.Y.P.P.P.P.P.P.L.L.L.J.P.J.P.L.L.L.L.P.L.!._.1XaX) F T G L G G G G ].AXoXT.P.L.L.W.L.W.W.L.W.H.W.H.L.W.J.W.W.W.W.W.W.W.W.W.W.~.XX,XSX%X>.T I T P d.pXSX,X'./.Q.Q.Q./.Q.W./.Q././.Q.!./././././././././././.G.C q = o o UXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUX} r.Y.P.P.P.I.P.P.P.L.I.L.J.L.J.J.L.J.J.L.L.J.L.L.!._.1XaXP P F L F T G G G C.AX=X^.Q.P.W.L.W.P.P.W.W.L.H.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W./.XXfXLXvX+XC.A.%XCXSXuX}.`.Q.Q.Q.Q.!./.!.W.Q.Q.Q./././.Q./././././.~././.~.Q.+.e 6 @ o UXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXm #.K.Y.P.Y.U.P.P.P.L.P.L.L.L.P.J.I.L.L.J.J.J.J.P.P.P._.1XvX/ F L F L F F F F f.CX;X_.Q.W.L.P.L.W.L.P.W.W.W.W.W.W.W.W.W.W.Q.W.L.W.W.W.W.W.~.`.oX,XBXLXLXSXDXkX;X}.^.^.Q.Q.Q.W.Q.Q.Q./././.Q.Q./.Q./.Q.!./.Q./././././.~.3.m w # o UXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXV 1.P.Y.P.P.I.P.P.P.I.L.W.L.P.P.J.L.L.L.L.P.L.L.P.L.W._.1XVX( F x F x F F F F G 5XkX|._.Y.Y.P.W.L.L.W.W.H.W.W.W.Q.W.J.W.P.Q.W.W.W.W.W.W.W.W.!.(.{.oX:X,X>X=XoX'./.~.W.Q.Q./.W./.Q./.Q.W./././.Q./.Q./././././././././.).y.N w = O o UXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXZ 6.Y.P.P.Y.Y.P.P.P.P.I.P.P.L.L.J.W.J.L.P.L.P.L.P.L.P.~.*XSXm.j G x x j j F x F g.vXjX&X'.^.Y.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.P.W.W.Q.Q.W.~./.(.'.`.(././.~.~.!.Q.Q.Q./.W.W.Q.Q.W./.Q././.Q././././.Q./././.~./.^.P...w 5 O . UXUXUXUXUXUXUXUXUX",
+"UXUXUXUXq X.z.Y.Y.P.P.P.P.P.L.L.P.J.P.P.P.J.W.J.L.P.P.P.P.L.L.L.!.*XDX+XF x x j j j x x h x n.sXZX1X*X'./.~.Q.!.Q.Q.W.W.W.W.Q.W.W.W.W.W.W.W.W.W.W.W.W.W.!.W.!.~.!.!.~.Q.Q.!.Q.Q.W.Q.W./.Q././.W.Q./.W.Q.Q.Q./.Q.!./././././.~.~.~.~.*.e 6 @ o UXUXUXUXUXUXUXUXUX",
+"UXUXUXUXM %.I.Y.Y.P.P.L.I.P.I.P.P.L.J.P.L.J.J.J.L.L.J.P.L.W.L.P.Q.'.hXcX! h x j h h h z j v z ( @XCXZXhX>X*XXXXX'./././.~.^./.~.Q.Q.Q.Q.W.Q.Q.W.Q.Q.Q.Q.Q.Q.!.!.!.!.Q.Q.!.Q.Q.Q./.Q.Q.W./.W.W././.Q.Q././.Q./.Q./././././.!.~./._.^.q.m 0 & o o UXUXUXUXUXUXUXUX",
+"UXUXUXUXV :.Y.Y.P.P.P.P.P.J.J.J.P.J.J.W.J.J.J.L.L.L.L.L.W.L.L.P.Y._.:XDXS.x z h h j h h j z j h x ) [.dXCXAXBXjXuX,X;X=X=X*XoXXX}.{.'.'._._.^.^.!.!.Q.Q.W.W.!.!.!.!.!.Q.~.Q.Q.Q.Q.Q.Q.~.Q.Q./././.~.Q.~.Q./.Q././.~./././.^.~./.)._.y.C 0 * O o UXUXUXUXUXUXUXUX",
+"UXUXUXUXA 6.Y.I.W.I.I.P.P.P.P.P.I.J.J.P.L.P.L.J.L.J.J.L.L.P.W.L.P.Y.}.hXVX) h a b b a h u h h h b h h P ) C.[.9XVXVXSXSXDXZXzXkXhX1X1X>X-X:X*X}.}.'.`._.~.Q.Q.!.!.!.!.!.Q.~.Q.~.Q.~.~.!./.Q.Q.Q.Q.~.~././.Q.~.~.~./.~././.`.`.^.~.^.L.S 0 5 O o UXUXUXUXUXUXUXUX",
+"UXUXUX0 X.8.Y.I.I.P.P.P.I.W.J.J.P.L.P.P.P.L.J.L.W.L.J.W.L.L.L.L.P.P._.*XZX0X! b h h b u h u h u h a h a u h j H c ( _ n.B.@X3X6X9XaXBXLXGXSXDXMXhX,X=X}.'._.^.!.!.Q.!.!.Q.!.Q.Q.Q.~.~.Q.Q.~.Q./.Q./.~.Q.Q./.~./././.~._./.).~.`.^.^.Q.#.0 6 O o UXUXUXUXUXUXUXUX",
+"UXUXUXq .G.U.P.Y.J.P.P.P.J.J.P.J.L.L.L.J.J.J.P.L.L.J.L.L.P.P.W.P.P.Y._.=XDXeXP a h u h u h u h u k s a u k u u h u h u k a h h x P P ` ` C.[.wXvXSXDXBXfX-X}.'.^.~.!.!.Q.Q.!.Q.~.Q.~.Q.Q./.Q.Q.Q./.~.~./.Q.~././././.~././.`.`.~.^.^.*.q 0 @ o o UXUXUXUXUXUXUX",
+"UXUXUXM +.I.!.P.Y.I.P.P.L.J.J.P.L.L.J.P.J.L.P.J.J.W.J.L.L.W.L.W.P.L.P.~.'.>XDX0X) h a y b t b t h y u u u u y u y a y a y a y a y u a y a s h f ! _ [.9XVXDXMX>X|.'._.~.!.!.!.!.Q.~.Q.~.~.~./././././.Q.~.~.~.~.~.~.~././.~.).~././.`.3.m 0 # o o UXUXUXUXUXUXUX",
+"UXUXUXM $.I.Y.P.P.P.P.I.P.I.P.L.L.J.P.P.P.J.L.L.L.L.L.L.L.L.L.L.P.L.P.P.T.'.>XZXCXOXK s t u t y t y 2 t t y y 2 y t y y s y s r y y y s y a t a y u y v ! S.cXLXMX;X|.'.^.~.~.~.Q./.~.Q.Q./.Q././././././.Q./.~././././.^.`.`.~.~.^.`.e.m 0 # O . UXUXUXUXUXUXUX",
+"UXUXUXV ;.U.Y.Y.Y.P.P.Y.P.P.J.P.P.I.P.J.J.J.P.L.W.J.L.L.L.L.L.W.L.P.P.P.P.!.'.*XfXDXbXV.P y y t t 2 t t t t < t 2 y 2 u 1 y r y 2 2 r r y 2 y 2 y r y y y y c B.bXSXfX*X'._.!.^./././././.~././././././.~./././.`.~./././.~.)./._._.^.u.N 0 % o o UXUXUXUXUXUXUX",
+"UXUXUXC 5.Y.P.Y.P.P.I.J.P.P.!.L.P.L.L.L.L.P.J.P.L.H.W.W.J.L.L.L.P.L.P.P.P.P.Y.^.'.-XhXSXbX#X` c t t < t i t y < t 2 y y t < y i y y 2 r 3 r 2 r < y 1 p 2 y i r c +XHXkX>X}.(.~.Q./.Q././././././././.Q././././.`././.`._./.`.^.~._.^.y.C 0 = O o UXUXUXUXUXUXUX",
+"UXUXUXZ 7.U.Y.Y.P.I.P.Y.L.P.J.I.P.P.J.L.J.J.L.W.L.L.P.L.L.L.W.L.P.L.P.L.Q.L.Q.Q.Q.`.'.-XfXAXSXcX#XM.~ v s t < < < < < 3 1 1 1 i < 3 < < 3 , < < r < < 3 2 2 2 2 1 y g.HXzX:X}.^.~.~.~.~.~.).~.`./././.Q./././././.~./.^.~.`./.~.~.^.^.L.Z 6 * o o UXUXUXUXUXUXUX",
+"UXUXUX} 6.Y.P.P.I.P.P.P.P.P.P.J.L.L.P.L.P.P.W.J.L.P.J.W.L.L.L.W.L.P.L.W.L.P.L.L.Q.P.Q.).'.*X;XgXAXDXGXcX7XOXb.^ K K a 3 2 , < < < > < , < < < < < < < < < 2 1 < r 1 r _ nXZX-X{.^.~.~.~.~.~.~.`./.Q./././.Q./././.~.~._.`.~./.^././._.W.A 0 7 O o . UXUXUXUXUXUX",
+"UXUXUXZ 6.U.Y.P.P.P.P.P.P.P.L.I.P.L.P.L.W.J.J.P.P.P.P.P.L.W.L.L.P.L.P.P.P.Q.P.P.P.P.P.P.W.~.`.'.oXoX;XgXzXAXSXSXCXFXrX0X4XA.[ ` Q K K 4 3 < , > 3 > < < , < < , 1 1 , 1 ` HXgX=X'.^./.~.~.~.~.~./.Q./.Q.~.~./././.~././.`.~.`.^.^._.^.L.S 6 7 O o o UXUXUXUXUXUX",
+"UXUXUXZ 6.Y.Y.P.P.Y.P.I.P.P.L.L.L.J.J.P.J.J.P.L.J.L.W.L.L.L.L.W.L.P.P.P.P.P.P.P.W.P.P.P.P.W.Q.W.!.^.`.}.|.oX=X>X1XfXjXMXAXDXSXGXHXnXrX0X#XM.' d , > > > - > > , , ; ; , r D.GXyX}._.^.~.~.~.~./.Q././././.~./././.~.~.~././.~./.).~.^.W.A 6 * O o o UXUXUXUXUXUX",
+"UXUXUXA 6.Y.Y.P.P.Y.P.Y.P.L.L.L.L.J.J.P.J.L.L.P.L.L.P.P.L.W.L.L.L.W.P.P.P.W.P.P.L.P.L.L.P.P.L.W.W.!.!.!.~.~.^._.'.'.}.XX*X*X:X:X1XfXhXBXAXSXGXqX{ J , , > > > ; > > , , , v aXZX*X'.^.^./.~.~.~./.~.~././././././.~./.^.).~.~.~.~.~.).P.S 6 5 O + . UXUXUXUXUXUX",
+"UXUX6 } 6.Y.Y.Y.Y.P.Y.P.Q.P.L.P.P.L.L.L.J.W.W.L.W.W.J.W.W.J.L.W.L.W.Q.~.~.).).~.Q.Q.Q.P.P.W.W.W.W.P.W.W.W.W.Q.Q.~.~.!.!.^./.(.`.'.'.}.}.oX:XuXzXJXnXM.4 > , > : > > > > , > N.JX1X{.^.^.~.~.~.~.Q./.~.Q./.Q./.Q./.~.~./.~.^.).).~.).).P.A 6 = O o . UXUXUXUXUXUX",
+"UXUX6 Z 6.Y.Y.Y.P.P.P.Y.P.P.P.P.J.P.L.W.L.J.W.L.L.P.J.P.L.W.J.W.Q.`.'.*X*X*X-X&X'.).Q.Y.P.P.W.L.W.W.W.W.W.W.W.W.P.P.W.W.W.Q.Q.Q.~.!.~.~._._.{.oXuXlXJXtXd ; ; > > ; > ; ; ; c nXjX|.^.~.~.`.Q././././././.~.Q./.~.~.~./.^.).~.~.^.).^.L.S 6 = O o o UXUXUXUXUXUX",
+"UXUX9 A 7.U.Y.P.Y.I.P.P.P.P.P.L.L.L.J.L.L.W.J.L.P.W.W.L.W.L.W.~.'.=XhXDXSXSXSXDXhX=X'.T.Q.W.P.W.P.W.L.P.W.W.P.W.Q.Q.Q.W.W.W.Q.W.W.W.Q.P.!.!.!.^.{.$XfXJXF.1 , ; ; : > > > > 2 7XBX*X_.~.~.~./././.Q.Q./././.~././.~./.^.~.~.^.^.~.~.^.H.Z 6 * o o . UXUXUXUXUXUX",
+"UXUXUX} 5.Y.Y.Y.Y.P.P.P.P.P.L.P.P.P.P.L.P.L.P.P.P.P.P.P.P.Y.Q.'.;XZXaXN._ _ ` A.VXMX*X_.Q.W.P.P.W.W.W.W.W.W.W.W.W.W.W.W.L.W.W.W.Q.Q.P.W.!.W.!.!.~._.*XhXHX' > > ; ; ; > > > > S.LX=X'.).~.~././.~.~.~./.~.~./.~.Q.~.~.~./.^.~.^.~.^.~.y.C 6 * O o o UXUXUXUXUXUX",
+"UXUXUXC 5.P.Y.P.P.Y.P.P.P.P.P.P.P.L.P.P.P.P.L.P.P.P.P.P.P.L.).&XZX6Xl < > > > < ! aXMX*X).Q.P.Q.W.y.W.W.W.W.W.W.W.W.W.W.W.W.W.W.P.W.P.W.W.!.W.!.Q.!.'.-XSXOX< , ; - ; > , > > N.LX-X{.).~./.~.~.~.~./.~.~.~.~././.~.~.`.~.~.~.^.^.~.).u.N 6 * o o . UXUXUXUXUXUX",
+"UXUXUXC $.I.Y.Y.Y.P.P.P.P.I.P.P.P.L.L.L.L.P.P.L.L.P.P.P.P.P._.=XDX` ; > > > : - ; ( VXuX'.~.P.L.W.y.W.W.H.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.!._.}.zXqXd > > < > : > > : ` JX;X{.).~.~.~.~./.~.~./.~.~.~.~.~.~./.^.~.~.~./.).).).6.B 6 % o o . UXUXUXUXUXUX",
+"UXUXUXC #.I.Y.Y.Y.P.P.P.P.L.L.P.P.L.L.P.P.L.P.P.L.L.P.P.P.P.).-XVXE ; > : ; - - : > S.DX&X^.Y.P.W.Q.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.!.W.W.!.Q.P.!.}.iXnXg , > ; ; > > > > ` JX,X'.T.Q.~.~./.Q./.~.~././././.~./.~.~.^.~.^.~.T.~.).3.B 7 % o o . UXUXUXUXUXUX",
+"UXUXUXV X.L.Y.P.P.P.P.U.P.I.L.P.P.L.L.P.P.L.P.L.Q.L.Q.L.Q.P._.-XCXR ; ; : > ; ; - ; Q CX;X{.Y.P.W.W.W.L.W.W.W.W.W.W.W.W.J.W.W.W.W.W.W.W.W.W.W.W.W.Q.!.{.fXnXJ : > ; > > ; > > [ JX;X{.^.!.!.Q.Q.Q./.Q.~.~./.~.~./.~.~.~.~.~.~.~.).).Q.*.e 5 @ O o . UXUXUXUXUXUX",
+"UXUXUXm | r.Y.P.P.Y.P.P.P.P.P.P.P.L.P.L.P.L.P.P.P.L.P.P.L.Y.).-XnXR - ; - - ; - ; ; r 9XjX}.^.P.W.W.W.W.H.W.W.H.H.W.W.W.W.W.W.W.W.W.W.P.W.W.Q.!.!.Q.^.}.jXdXd , > - ; ; > ; < Z.GX=X'.^.!.^.~.~.~.Q.~./.~.~.~.~.~.~.~./.~.).~._.).T.Y.#.w 5 @ O o . UXUXUXUXUXUX",
+"UXUXUXm | 6.Y.Y.P.P.P.P.Y.L.L.Y.P.J.L.P.P.L.P.P.Q.L.P.L.L.Q.`.-XCXR ; ; : > : ; - > > M.SX:X_.Y.W.W.W.L.W.W.W.W.W.W.W.W.Q.W.W.W.Q.W.W.Q.W.W.W.!.P.Q.^.*XAX4X1 , > > > : : > < +XDX|.'.!.^.~.~.Q.~.Q.Q.~.~.~./.~.~.~.~.~.~.^.~.~.~.).L.D 6 5 O o o UXUXUXUXUXUXUX",
+"UXUXUXw } 5.P.P.Y.P.P.P.L.Y.L.L.P.L.P.L.P.L.L.L.L.P.P.P.L.Q.).-XCXE > > > > > : : > - k pXsX}.^.W.W.L.W.W.W.H.W.H.W.W.W.W.L.W.W.W.W.Q.W.P.Q.Q.P.P.^.{.xXGX] ; , ; > ; > ; - d rXBX|.'.T.~.~.Q./.Q./.~./.~.~.~./.^.~.~.~.`.~.~.~.).).t.C 6 * O O o UXUXUXUXUXUXUX",
+"UXUXUX5 Z %.J.Y.P.P.P.Y.P.P.L.P.I.L.L.P.P.P.P.P.P.P.P.P.P.Q.).-XCXE : : : : > : : : : : ^ nXuX}./.Q.P.P.Y.W.L.W.W.Q.P.P.W.W.W.W.Q.Q.Q.Y.W.Y.!.!.~.'.=XDXwXd , ; ; > > > > : Q CXuX}._.Q.Q./.).Q.~.Q.~.`./.Q.`.~.`.).~.`.^.^.^.^.).^.q.B 6 % O o . UXUXUXUXUXUXUX",
+"UXUXUXUXC X.K.Y.U.P.P.P.L.Y.P.P.P.W.P.Y.^.^.'.'._.Q.Y.L.P.P._.-XHX' > : : : : : : - : : , F.SXuXXX`.^.T.!.Y.W.W.P.W.W.P.W.Q.W.W.Q.P.Q.P.W.!.^._.}.-XZXbXE , , > : : - > ; , D.GX-X'.).~.~.~.~.)./.`././.~.~./././.~.~./.(._._.^.).!.;.q 7 # o o o UXUXUXUXUXUXUX",
+"UXUXUXUXM | w.P.P.P.P.P.P.P.P.L.P.P.P.!.}.>XuX1X$X'.Q.P.Y.Y.).-XSX^ > : - - ; ; : : : : : 3 C.VXNX-X|.'.^.!.W.W.P.W.W.W.W.W.W.W.Q.Q.T.)._._.{.|.1XDXmX' , , > : > - : : : K nXlX&X_.~.~.~.~.~.Q.~./.^./.~./././.`.~.`.^.(._.^.^.^.P.@.6 7 @ o o . UXUXUXUXUXUXUX",
+"UXUXUXUXw } 1.Y.P.P.T.Y.Y.P.P.P.P.L.P.^.-XZXaXvXMX}.T.P.L.Q.).&XSX^ : , : : : - : : - - - - , ^ pXSXjX-X&X}.'.^.^.^.^.~.~.~.~._.).).'.'.}.*XxXlXJX4XR , , > > - : > > > 2 +XGX;X{._.!.~.~.^./.~.^.~.~.~./.^.^./.~.~.).).^.'.`.`._.H.A 6 5 O o o o UXUXUXUXUXUXUX",
+"UXUXUXUX= } #.J.P.P.P.P.Y.P.L.P.P.L.P.R.>XVXQ n.BX&X~.P.L.P.).$XCX^ > : : : : : : : - - - : : : d B.qXCXBXhX,X=XoXoX|.|.|.}.|.|.&X&X-X1XlXAXHXwX] p , , ; : > - : : , > [ JXiX|._.~.~.~.~./.~./.~.~././.~.~./.~._.`.`.`.`.'._._.).4.m 6 % o o o UXUXUXUXUXUXUXUX",
+"UXUXUXUXUXC | r.Y.Y.P.P.P.P.P.P.P.P.Y._.>XVXK b.MX&X~.P.P.P.~.&XSX{ > : : - : : : : : : - - - : - > p ^ +XaXHXSXAXSXZXlXMXlXlXlXDXDXJXKXqX+X_ d > , > , > ; > : , : : ~ HXBX<X{.^.~.Q.~.~.~./.Q.~.~.Q.~.`.~./.~.~.).`.`.'.`._._.Y.#.0 6 # o O o UXUXUXUXUXUXUXUX",
+"UXUXUXUXUXm | 2.P.P.P.Y.P.P.P.U.P.P.P._.-XVXK b.BX&X~.P.P.P.).&XSX{ > > : : : : - - - - - - - - : - - : : d E ` B.D.eXwXwXwXwXeXD.Z.` E g , : , > : : : : : : > : , ~ nXBX<X{.).~.~.~.~.~.`.~.~.~./.~./.~.).~./.`.).).^.^._.^._.H.S 6 7 O o o . UXUXUXUXUXUXUXUX",
+"UXUXUXUXUX9 } +.I.Y.P.P.P.P.P.P.P.L.P.^.>XbXc b.BX&X~.Q.L.P.).&XSXV.> : : : : : - - - - - - - : - - - : - : : : ; ; , 2 2 2 4 , , , , : : : : : : : > : : ; > ; , [ nXZX-X}.).~.Q.Q.~.~.~.~.~././.~././.`.~.`.`.~.`.).).^._.^.^.0.m 7 % O o o . UXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXC | e.Y.P.P.P.P.P.P.P.P.P.).-XnXJ b.ZX|.!.P.L.P.~.'.BXOX, : : : : : - - - - - - - - - - - - - - : : : : : : - - : : : : : , : : : : : : : : > > > g OXHXlX=X{.(.~.!.~./.Q./.~.~.~.~./.~.~.~.~./.~.~.~.).^.^._._.).P.o.w 5 # o o o UXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXe | *.I.P.U.U.P.P.P.P.P.Y.).>XnXK M.ZX|.T.P.P.P.Y.&XNX+X, : > : - : : : : - - - - - : : - - : - : : : - - - - - : : : : : : : : : : : : > > > d { rXJXfX=X{.^.~.~./.~.~.~.~.~.~.~.~.~.Q././.~.^././.~.~.~.)._.).).u.C 6 5 O o o o UXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUX= } X.t.Y.Y.Y.P.P.P.P.P.Y._.>XbXK n.BX&XR.P.P.L.Q.}.jX0Xd : > : > : > : > [ { R 3 : : : : : : : - : - - - - - - - ; : > : ; : : : : : - , d [ 0XJXBX;X|.{.^.~.!.~.~.~.Q.Q./.Q.~././.`.Q.`.~././.^.~.).^.).^.)._.~.&.e 6 # O o o o UXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXm | 1.Y.P.P.P.P.U.P.P.Y.).>XbXK n.BX}.!.W.P.P.Q.'.,XCX' - > > : : - ; y 0XJXnX0XM.W 4 , > : - - : : : - - - ; ; ; > , > > > : : , d ~ OXcXJXBXuX&X{.`.~.~.~././.!.~.Q./.~.~./.~.~.`.`.~.~./.~.^./._.~.).).)._.y.S 6 5 O o o o UXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUX9 S X.L.P.Y.P.P.P.P.Y.Q.).1XbXK N.ZX}.~.P.L.P.Q.).=XZXeXd > > - ; : < [ CXpX,XBXSXCXrXOXM.~ K d 2 : : > : ; ; ; , > , 4 d R ^ { 4XcXJXSXkX,X*X}._./.Q.Q.Q.~.~.~.Q.Q.~.~.~./.Q.`.Q.~.`./.~.~.~.~.`.~.)._./._.~.=.m 5 * o o o o UXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUX$ C Z 5.Y.Y.Y.Y.P.P.Y.Y.).,XbXK n.ZXoX).Y.P.P.P.Q.'.,XSX8X` R R R W V.CXjX&X_.}.=X,XjXAXSXKXnXrX7XtXtXOXM.M.M.Z.tXOX4X0XqXnXJXJXAXkX1X-X|.{._.^.~.!.Q./././.!.~./.Q././.Q./.).).)./.Q./.`.`.^.`.`.`._.^._.'.H.| w 5 @ o o o o UXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUX8 Z ..G.Y.P.Y.P.P.P.P._.,XvXK N.BX}.^.P.P.P.P.P.^.{.,XBXCXnXCXCXCXDXiX&X_.~.T._.'.{.}.=X;XuXjXBXCXZXAXDXSXSXLXzXDXCXZXjXuX,X-X=X}.'.'.`.^.!.Q.~./.!.Q.~.Q.~.Q././.Q.~./.Q.`.~.).`.Q./.`./.`.`./.`.`.`._.!.=.m 6 = O o o o UXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUX@ V S 5.P.Y.P.Y.P.Y.Y._.1XbXK N.ZX}.T.P.P.P.P.Q.W.^.'.|.-X,X,X;X;X=X{.).Y.P.Y.Y.Y.~.^._._.'.'.{.XXoX*X=X=X=XoXoXXX*X|.}.}.{.'.^._.).Q.~.!.Q.Q.~.!./.~.~.~.!./.Q.Q.Q.~.Q./.Q./.`.`.`.~././.^.(.^./.`.`.`.t.| 6 5 @ o o o X UXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUX8 Z | r.Y.P.Y.P.P.T._.1XrXl N.BX{.~.Y.P.P.P.P.P.Q.Y.~._.'._._._._.).Y.P.P.P.P.Y.Q.P.Y.Q.!.~.).~.^.)._.'.`.^.^.^._.^.~.).^.~.~.~.Q.Q.~.Q.~.Q.!.~.!.~.~.Q.~.~.Q.Q.Q./.~.~.).~.Q.Q.`.).`./.)././.^.^.`.Q.%.m 5 * O o o o UXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUX+ N S #.L.Y.P.P.P.T._.1XcXc V.BX&X~.P.P.P.Y.P.Y.P.Y.Y.Y.!.Y.~.P.Q.P.Y.Q.W.Y.Q.P.Q.Q.Q.Q.Y.Y.Y.Y.Q.Y.Q.!.W.~.!.Q.!.Y.Y.!.!.Y.~.Q.~.~.~.~.Q.Q.~.!.~.!.Q.Q.Q.Q././.Q./.~.~.~.Q.`.Q./.Q.)./.).`.~.`./.~.9.C 6 5 @ O o . . UXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUX5 C S 4.U.P.Y.Y.E._.1XcXl C.BX&X).Q.Q.Q.~.Q.Q.Q.~.~.~.T.Y.!.!.Y.~.T.T.Q.Q.Q.^.Y.!.!.!.^.~.~.~.~.~.~.!.~.(.^.).T.).~.~.~.~.^.).).~.).~.~.^.`.~.^./.^.).)._._./._.).).`.'.`.`.'.`.`.`.`./.~.~./.`.H.X.w 5 % o o o . UXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUX+ w C .8.Y.P.Y.Q._.1XcXl Z.MX&X'.'.&X'.'.'.'.&X{.{.}.'.{.'.{.}.'.}.'.'.}.{.{.{.}.{.{.{.'.{.{.{.{.}.{.}.{.{.}.}.}.{.}.}.}.}.'.}.}.{.}.XX}.}.XXXX}.XXXX}.}.}.XXXXXXXX}.XX*XXX*XXX*XXX'.`._.`.`.Q.=.m 6 5 O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUX$ N Z #.I.P.P.Y._.1XcXl A.LXhXhXhXhXhXhXhXFX1XNX1XhXhXjXhXfXhXfXhXNXhXhXhXhXhXhXhXhXjXhXjXhXhXjXNXkXgXgXkXhXNXMXjXjXhXjXjXNXhXkXkXNXhXkXjXhXkXMXjXNXNXkXNXjXNXkXMXjXMXBXNXkXMXjXuX*X'.`.`.^.0.Z 6 6 $ o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUX= C Z 5.U.Y.Y._.1XaXl _ #X+X@X@X@X@X@X@X@X+X@X#X@X[.@X@X@X@X@X@X#X@X@X@X@X+X@X@X@X@X@X@X@X@X@X@X@X@X[.5X@X#X@X@X@X@X@X3X@X@X@X3X3X%X@X5X%X@X3X3X5X@X3X3X3X%X3X3X5X5X3X3X5X5XcXSX-X'._.`.t.| 0 5 % O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXo e C S 8.Y.Y.'.1XaXK a v k a a h a a a a a h b k f f f a a f f f k h a f f f k h u f f k f h a b b b b h f a f k f f f f f a f f f f f f f f f f f f g f f f g f f f g f f Z.GX:X{._.W.-.m 5 * O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUX+ m C ..r.Y._.,XCXqX7X7X7X8X7X7X7X0X7X0X0X0X%X7X7X7X7X7X7X7X7X8X8X7X7X7X8X6X8X7X7X6X8X7X8X9X7XwXwX6XdX8X8X8X8X0X8X8X8X0X0X8X0X8X0X8X8X8X8X8X8X0X0X8X8X0X8X8X8X8X0XwX8X8XwXnXSX:X{.W.=.M 7 5 @ o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUX & N C +.G._.&X;XuXuXiXfXiXfX1XfXfXfX1XpX1X1XhXhXhXhXfXfXfXgXjXfXfXgXjXgXjXgXgXgXgXgXgXgXgXgXgXkXgXgXkXkXkXjXzXkXkXkXzXkXkXkXkXkXkXkXkXkXzXzXzXzXzXzXzXzXzXzXzXZXZXZXVXAXZXfXoX^.2.V 6 5 # o o o . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXX = N C $.L._.'.'.{.{.'.{.'.'.{.'.'.).&X&X'.'.'.'.}.{.{.'.{.{.{.{.{.{.{.{.{.{.}.{.XXXXXXXXXXXXXXXXXX{.|.{.|.XX{.|.}.XX}.}.XXoXXXoXXXXXXXoXXXoXoXoXoXoXoX=XoXoXoXoX*X*X*X*XoX'.9.} 6 5 % O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ 8 N N $.L.Y.T.T.Y.Y.T.T.!.!.!.!.T.T.T.).).Q.T.Q.Y.Q.!.!.!.~.!.~.!.!.!.^.~.^.^.!.!.!.!.!.!.!.~.!./.~.~.!.!./.(./.^.~.^.~.~.^./././.~././.(.(./.(.'.(.(.`.{.'.`.'.'.'.'.`.q.| 0 7 * O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo 8 N C $.I.Y.P.Y.P.Y.P.Y.!.Y.P.P.P.Q.P.P.Q.P.Y.Y.Y.P.Y.P.P.Q.P.W.!.!.Y.P.W.!.!.!.!.!.W.W.W.!.W.!.!.!.!.!.!.!.!.!.Q.~.!.!.W.!.!.~.!.~.~.~./.~.~.~.~.~./././.~./.^./.~.9.| 0 7 * O o o o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX + w M C &.L.Y.Y.P.Y.P.P.P.Y.W.Q.P.T.P.Q.P.P.T.Q.P.P.W.P.W.W.W.W.!.W.!.W.!.W.W.W.W.W.W.W.W.W.W.!.W.!.!.!.Q.!.!.Q.Q.Q.~.!.!.!.Q.!.Q.~.~./.~.Q.~.~.~.~.~.Q./.~././.~.q.} 0 5 = O o o o . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX + w N C #.G.P.Y.P.Y.Y.P.P.P.P.Q.P.Q.P.P.P.Q.W.P.W.W.Q.P.P.W.W.W.P.P.W.W.W.P.W.W.W.W.W.W.W.W.W.W.Q.W.W.W.W.!.W.Q.Q.W.Q.Q.Q.Q.!.Q.~.!.Q.Q.~.Q.~.~.~.~.~./.~./.W.0.| 0 6 7 @ o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX + 0 m C o.r.Y.P.P.P.P.P.Y.P.P.P.P.Q.P.P.P.P.P.P.P.L.W.P.!.W.W.W.!.W.!.W.W.W.W.W.W.W.W.W.W.W.W.W.W.Q.W.W.W.W.Q.Q.W.Q.~.Q.!./.Q.!.Q.Q.~.~.~.Q.~.~.~.~.~./.L.=.Z w 5 * @ o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. + 6 m N D 6.Y.P.P.Q.Y.Y.T.P.P.P.Q.P.Q.P.W.P.P.W.W.P.!.P.P.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.Q.Q.Q.Q.~.Q.Q.~.~.W.!.Q.~.~.Q.Q.Q.~.~.~.Q.~.~.H.%.V 6 5 * O o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX + 9 e N S 5.L.Y.Y.P.Y.P.Y.P.Q.P.P.P.P.W.P.P.P.Y.Q.Q.P.P.W.W.W.W.P.Q.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.Q.Q.Q.Q.~.Q.~.Q.W.Q.Q.Q./.W.~.Q./.!.~.~.~.Q.u.o.M 6 5 = O o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX o = e m C $.t.Y.Q.P.Y.P.P.P.P.P.P.P.Y.Y.P.Q.W.P.P.P.W.W.P.W.W.W.P.W.P.W.L.W.W.W.W.W.W.W.W.W.W.W.W.Q.!.Q.Q.!.Q.Q.Q.~.!.!.W./.!.!.!.Q.!.~.~.W.0.} q 5 5 % o o o o o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . $ e m N D 4.L.Y.P.Y.P.P.P.P.T.Q.P.P.P.Q.P.W.P.P.W.L.W.!.Q.P.P.W.W.W.W.W.!.W.W.W.W.W.W.W.W.W.W.!.Q.Q.Q.Q.~.!.~.~././.W.!.!.~.!./.~.!.t.%.C 0 7 5 # o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X + 9 e e S $.e.P.P.Q.Y.Q.P.P.P.Q.P.P.W.L.W.Q.P.W.W.W.P.P.W.Q.W.W.W.W.W.W.W.W.W.W.W.Q.W.W.Q.!.Q.Q.Q.Q.~.W.!.!.!.Q.Q./.W.~.!.~.!.H.0.| m 6 6 * O o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . o & e e N S 5.L.Y.P.Y.P.Y.P.P.P.P.P.P.Y.Q.P.P.W.P.!.W.W.P.Q.W.W.W.W.W.W.W.P.W.P.P.Q.W.W.!.!.Q.Q.P.!.Y.Q.Y.Q.!.!.~.Q.~.!.W.9.o.M 0 5 6 % o o o . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. . $ 9 e e N D 5.L.P.Q.Y.Y.P.Y.P.P.P.Y.P.Q.W.W.P.P.P.Q.Q.P.P.W.W.W.W.W.W.!.P.W.Y.W.W.W.W.!.Q.Q.Q.Q.Q.Q.~.~.!.!.!.~.W.q.-.} q 5 5 = @ o o o o . . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . o & 8 e N N ..5.y.P.Y.Y.Q.Q.P.P.P.Y.Y.P.P.Y.!.P.Y.Q.Q.W.P.W.W.W.W.W.W.W.W.P.W.W.W.W.!.Y.Q.Y.~.Q.!.!.~.^.!.W.q.-.Z n 6 6 5 # O o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X + + = w e e N D *.e.L.P.P.Q.P.W.Y.P.W.P.P.Q.W.P.P.P.P.W.W.W.W.W.W.P.W.W.!.!.P.!.!.!.Q.Q.Q.!.!.!.Q.P.H.3.o.V q 6 7 7 # O o o . o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. . . O = 8 e e m C +.3.y.L.P.W.P.P.P.P.P.P.P.P.P.P.Y.!.W.W.P.W.W.W.P.Y.Y.Q.Q.P.!.!.!.!.!.Q.W.H.9.=. .B 0 5 5 5 % O o o o o . . X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX . X o + & 6 0 e e N S #.3.e.L.L.P.Y.Y.P.!.!.P.!.!.P.W.Y.W.W.W.W.W.P.Y.P.W.W.Y.!.P.L.t.9.&.| V m 0 7 6 7 # + o o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . . . o $ = w w 0 e m C X.&.3.e.t.J.P.P.W.W.Y.W.!.!.!.!.W.!.Q.Y.P.P.J.H.e.9.;.o.| M q 6 5 5 5 * @ O o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . . . o O & = 8 w 0 0 m m N A X.#.*.2.0.6.q.e.e.q.u.w.q.4.4.=.%.o. .C M e 0 6 5 6 7 5 # O O o . o . . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . . . . o @ # = 5 6 0 6 6 0 0 e m m M N M V V M V M M m e 0 0 6 6 6 5 5 5 % @ O o o . o o o . . . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX . . . . . o o @ # % = 6 5 6 6 8 6 6 6 6 6 6 6 5 6 6 6 5 5 7 * # # @ o . o o o o . . . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX . . . . . o . o O O @ # # % % & % # % # # $ # $ O o o o . . o o o o . . . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . o . . o . . . o . . o o o . o o . o o . o o o o . . . . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. X . . . . o . . . . o o o . . . . . o . . . . . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . X . . . . . . . . . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
+"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX"
+};
diff --git a/xdm/buttons b/xdm/buttons
new file mode 100755
index 0000000..c50acf7
--- /dev/null
+++ b/xdm/buttons
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+if which xmessage >> /dev/null 2>&1; then
+ xmessage -buttons reboot,halt "$@" "";
+
+ case "$?" in
+ 101)
+ /sbin/reboot
+ ;;
+ 102)
+ /sbin/poweroff
+ ;;
+ esac
+fi
+
diff --git a/xdm/slackware_traditional.svg b/xdm/slackware_traditional.svg
new file mode 100644
index 0000000..52bfb55
--- /dev/null
+++ b/xdm/slackware_traditional.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
+ width="468pt" height="99pt" viewBox="0 0 468 99"
+ preserveAspectRatio="xMidYMid meet">
+<metadata>
+Created by potrace 1.7, written by Peter Selinger 2001-2005
+</metadata>
+<g transform="translate(0,99) scale(0.040696,-0.040696)"
+fill="#5569B9" stroke="none">
+<path d="M1636 2374 c-36 -35 -32 -105 7 -126 13 -7 80 -13 160 -16 l137 -5 0
+-523 0 -524 -150 0 c-172 0 -214 -10 -222 -55 -8 -41 5 -78 33 -93 18 -9 125
+-11 452 -10 411 3 429 4 443 22 24 34 18 91 -12 115 -25 19 -40 21 -200 21
+l-174 0 0 589 c0 523 -2 591 -16 605 -23 24 -435 24 -458 0z"/>
+<path d="M5082 2374 c-17 -12 -22 -25 -22 -59 0 -56 20 -71 113 -80 l67 -7 0
+-523 0 -522 -72 -6 c-58 -5 -77 -11 -90 -28 -26 -31 -23 -75 7 -104 23 -24 30
+-25 145 -25 67 0 130 5 140 10 30 16 40 74 40 240 l0 156 44 36 43 37 147
+-161 146 -160 -33 -22 c-37 -25 -48 -77 -23 -111 13 -19 28 -20 203 -23 180
+-3 190 -2 216 18 21 16 27 30 27 58 0 20 -4 42 -8 49 -12 19 -60 33 -115 33
+l-52 1 -190 206 c-104 114 -190 210 -190 213 0 9 141 130 200 171 59 42 91 55
+164 69 79 15 101 32 101 80 0 66 -14 70 -232 70 -175 0 -189 -1 -208 -20 -27
+-27 -25 -66 6 -97 31 -31 42 -17 -126 -157 l-115 -96 -5 375 c-4 319 -7 377
+-20 385 -8 5 -76 10 -150 10 -107 0 -140 -3 -158 -16z"/>
+<path d="M775 2009 c-170 -25 -272 -104 -295 -229 -18 -97 8 -187 72 -246 73
+-69 157 -93 368 -104 186 -9 241 -24 265 -71 38 -72 5 -146 -82 -186 -48 -22
+-71 -26 -143 -26 -157 1 -265 51 -328 153 -41 66 -74 86 -115 71 -43 -17 -49
+-41 -45 -191 3 -119 6 -141 22 -159 25 -27 74 -27 128 0 40 20 42 20 122 4 44
+-10 133 -20 196 -22 215 -10 351 50 415 182 38 77 38 184 0 261 -53 107 -155
+147 -418 164 -219 14 -258 26 -282 84 -30 72 19 142 123 172 47 14 68 15 134
+6 98 -14 146 -39 228 -117 80 -77 100 -88 134 -75 39 14 46 40 46 167 0 139
+-10 163 -66 163 -19 0 -49 -7 -66 -16 -20 -11 -44 -14 -67 -11 -20 4 -79 13
+-131 21 -105 17 -127 18 -215 5z"/>
+<path d="M3070 2010 c-143 -13 -252 -54 -287 -106 -19 -30 -11 -84 18 -110 29
+-26 71 -21 179 22 82 32 106 37 180 38 75 0 91 -3 131 -26 52 -31 84 -82 93
+-151 5 -43 4 -48 -12 -43 -98 29 -287 34 -395 11 -230 -48 -342 -191 -307
+-389 16 -91 63 -161 136 -205 147 -88 392 -61 545 60 20 16 39 29 42 29 3 0 8
+-18 12 -40 11 -66 39 -80 161 -80 121 0 148 8 162 49 25 70 -17 109 -120 110
+l-47 1 -3 293 c-3 275 -4 295 -26 347 -42 106 -132 171 -262 190 -71 10 -88
+10 -200 0z m170 -499 c36 -5 84 -14 108 -20 l42 -12 0 -62 c0 -99 -44 -151
+-174 -209 -52 -23 -87 -31 -154 -34 -79 -5 -91 -3 -132 19 -109 59 -122 180
+-28 250 58 42 123 61 263 75 6 1 39 -2 75 -7z"/>
+<path d="M4355 2013 c-209 -20 -390 -174 -439 -374 -69 -280 83 -545 356 -623
+63 -18 179 -20 279 -6 140 20 317 120 350 198 24 56 24 73 -1 100 -35 37 -78
+29 -167 -31 -103 -71 -130 -84 -209 -103 -148 -34 -300 24 -376 143 -74 117
+-71 277 7 383 46 62 129 117 198 131 169 33 277 -11 373 -151 54 -80 85 -98
+138 -80 51 16 60 53 54 217 -7 163 -16 183 -83 183 -44 0 -76 -19 -87 -50 -3
+-10 -25 -5 -86 18 -78 31 -189 53 -242 50 -14 -1 -43 -3 -65 -5z"/>
+<path d="M8120 2010 c-81 -7 -188 -33 -231 -56 -79 -40 -92 -141 -22 -173 29
+-13 51 -9 168 37 77 30 102 35 175 36 72 0 92 -4 128 -24 51 -29 87 -87 94
+-153 5 -41 3 -47 -11 -43 -114 34 -341 32 -455 -4 -193 -61 -279 -194 -246
+-380 15 -86 62 -155 134 -198 149 -89 393 -63 547 59 20 16 39 29 42 29 2 0 7
+-18 11 -39 10 -67 39 -81 163 -81 99 0 138 9 155 34 10 15 10 78 0 94 -11 17
+-67 32 -119 32 l-43 0 0 260 c0 263 -6 327 -40 405 -38 86 -131 148 -247 165
+-74 10 -90 10 -203 0z m170 -499 c36 -5 84 -14 108 -20 l42 -12 0 -55 c0 -73
+-19 -114 -71 -156 -73 -57 -157 -89 -257 -95 -79 -4 -91 -3 -132 19 -108 59
+-122 182 -28 251 58 42 123 61 263 75 6 1 39 -2 75 -7z"/>
+<path d="M9722 2010 c-112 -17 -194 -62 -304 -169 l-58 -55 0 90 c0 57 -4 94
+-12 102 -8 8 -60 12 -168 12 -185 0 -200 -6 -200 -75 0 -63 21 -75 132 -75
+l88 0 0 -329 0 -329 -114 -4 c-134 -4 -156 -15 -156 -79 0 -29 6 -42 26 -58
+26 -20 37 -21 404 -21 356 0 379 1 401 19 18 14 24 29 24 60 0 73 -8 76 -230
+79 l-195 3 0 206 0 206 52 56 c160 170 284 218 412 158 75 -35 115 -35 150 -1
+57 57 27 152 -59 188 -43 18 -130 25 -193 16z"/>
+<path d="M10565 2014 c-11 -2 -45 -9 -75 -15 -123 -25 -272 -134 -325 -239
+-56 -111 -75 -276 -45 -400 51 -216 244 -360 482 -360 130 0 237 18 363 62
+142 50 195 89 195 144 0 44 -30 74 -74 74 -18 0 -66 -14 -107 -31 -121 -51
+-180 -70 -255 -83 -201 -37 -378 58 -413 222 -6 29 -11 57 -11 62 0 6 154 10
+399 10 226 0 410 4 424 9 32 12 41 40 39 116 -7 246 -239 439 -522 434 -30 -1
+-64 -3 -75 -5z m155 -159 c98 -15 201 -105 228 -201 7 -23 12 -44 12 -48 0 -3
+-148 -6 -329 -6 l-330 0 22 54 c27 64 91 137 150 168 42 22 159 49 187 43 8
+-2 35 -7 60 -10z"/>
+<path d="M6290 1970 c-26 -26 -27 -90 -2 -113 10 -10 30 -17 45 -17 30 0 14
+44 177 -480 96 -305 108 -337 135 -360 24 -20 104 -16 126 7 12 11 44 111 86
+265 37 136 70 244 72 242 3 -3 36 -109 72 -236 37 -127 76 -243 87 -257 10
+-14 30 -28 45 -32 37 -10 94 8 111 34 8 12 67 201 132 420 118 395 119 397
+146 397 39 0 58 24 58 75 0 73 -5 75 -213 75 -215 0 -227 -4 -227 -74 0 -58
+17 -70 110 -76 l77 -5 -80 -293 c-44 -161 -83 -289 -87 -285 -4 5 -35 102 -69
+217 -34 114 -69 219 -78 232 -30 47 -121 49 -154 4 -11 -14 -46 -119 -80 -235
+-34 -115 -64 -213 -68 -217 -5 -6 -171 550 -171 575 0 4 34 7 75 7 91 0 115
+17 115 79 0 67 -14 71 -232 71 -175 0 -189 -1 -208 -20z"/>
+<path d="M0 790 l0 -410 3255 0 3255 0 0 35 0 35 -3220 0 -3220 0 0 375 0 375
+-35 0 -35 0 0 -410z"/>
+<path d="M6642 648 c-33 -33 -4 -68 55 -68 l43 0 0 -155 0 -155 -54 0 c-30 0
+-61 -3 -70 -6 -19 -7 -21 -45 -4 -62 14 -14 305 -17 326 -3 8 5 12 21 10 37
+-3 28 -5 29 -65 32 l-63 3 0 194 0 195 -83 0 c-51 0 -88 -5 -95 -12z"/>
+<path d="M7690 620 l0 -40 45 0 45 0 0 40 0 40 -45 0 -45 0 0 -40z"/>
+<path d="M8703 509 c-28 -18 -33 -19 -33 -5 0 12 -10 16 -44 16 -24 0 -51 -3
+-60 -6 -24 -9 -20 -55 4 -61 18 -5 20 -14 20 -92 0 -80 -2 -87 -22 -96 -27
+-12 -35 -40 -18 -60 9 -11 33 -15 80 -15 47 0 71 4 80 15 17 20 9 48 -18 60
+-20 9 -22 17 -22 77 0 65 1 67 34 87 18 12 47 21 64 21 49 0 62 -21 62 -103 0
+-65 -2 -73 -22 -82 -27 -12 -35 -40 -18 -60 15 -19 130 -21 148 -3 18 18 14
+46 -8 60 -17 11 -20 24 -20 99 0 72 -3 91 -21 113 -45 57 -127 73 -186 35z"/>
+<path d="M7622 508 c-33 -33 -4 -68 55 -68 l43 0 0 -85 0 -85 -54 0 c-30 0
+-61 -3 -70 -6 -19 -7 -21 -45 -4 -62 14 -14 305 -17 326 -3 8 5 12 21 10 37
+-3 28 -5 29 -65 32 l-63 3 0 124 0 125 -83 0 c-51 0 -88 -5 -95 -12z"/>
+<path d="M9522 508 c-7 -7 -12 -20 -12 -30 0 -19 35 -42 50 -33 6 4 10 -27 10
+-82 0 -100 10 -127 59 -160 43 -29 104 -30 149 -3 26 16 32 17 32 5 0 -19 90
+-21 108 -3 18 18 14 46 -8 58 -18 10 -20 21 -20 135 l0 125 -69 0 c-50 0 -72
+-4 -82 -16 -19 -23 1 -48 40 -52 l31 -3 0 -69 c0 -64 -2 -70 -31 -94 -35 -30
+-89 -35 -113 -10 -13 12 -16 39 -16 130 l0 114 -58 0 c-32 0 -63 -5 -70 -12z"/>
+<path d="M10532 508 c-19 -19 -14 -48 11 -58 12 -5 42 -26 67 -48 l45 -40 -49
+-43 c-27 -24 -59 -50 -72 -57 -28 -15 -33 -57 -8 -66 32 -12 141 -6 154 9 13
+16 5 55 -13 55 -7 1 1 12 17 25 l30 24 29 -21 c25 -18 27 -22 13 -30 -9 -5
+-16 -17 -16 -27 0 -33 24 -42 102 -39 71 3 73 4 76 30 2 20 -3 30 -20 39 -13
+6 -47 32 -76 56 l-52 45 52 44 c29 24 58 44 65 44 18 0 26 39 12 56 -18 22
+-138 16 -153 -8 -8 -13 -8 -23 0 -35 9 -14 6 -21 -10 -34 -18 -15 -23 -15 -43
+-2 -19 12 -20 18 -11 38 18 40 -4 55 -76 55 -35 0 -67 -5 -74 -12z"/>
+</g>
+</svg>
diff --git a/xdm/slackware_traditional_black.svg b/xdm/slackware_traditional_black.svg
new file mode 100644
index 0000000..6a1a8a7
--- /dev/null
+++ b/xdm/slackware_traditional_black.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
+ width="468pt" height="99pt" viewBox="0 0 468 99"
+ preserveAspectRatio="xMidYMid meet">
+<metadata>
+Created by potrace 1.7, written by Peter Selinger 2001-2005
+</metadata>
+<g transform="translate(0,99) scale(0.040696,-0.040696)"
+fill="#000000" stroke="none">
+<path d="M1636 2374 c-36 -35 -32 -105 7 -126 13 -7 80 -13 160 -16 l137 -5 0
+-523 0 -524 -150 0 c-172 0 -214 -10 -222 -55 -8 -41 5 -78 33 -93 18 -9 125
+-11 452 -10 411 3 429 4 443 22 24 34 18 91 -12 115 -25 19 -40 21 -200 21
+l-174 0 0 589 c0 523 -2 591 -16 605 -23 24 -435 24 -458 0z"/>
+<path d="M5082 2374 c-17 -12 -22 -25 -22 -59 0 -56 20 -71 113 -80 l67 -7 0
+-523 0 -522 -72 -6 c-58 -5 -77 -11 -90 -28 -26 -31 -23 -75 7 -104 23 -24 30
+-25 145 -25 67 0 130 5 140 10 30 16 40 74 40 240 l0 156 44 36 43 37 147
+-161 146 -160 -33 -22 c-37 -25 -48 -77 -23 -111 13 -19 28 -20 203 -23 180
+-3 190 -2 216 18 21 16 27 30 27 58 0 20 -4 42 -8 49 -12 19 -60 33 -115 33
+l-52 1 -190 206 c-104 114 -190 210 -190 213 0 9 141 130 200 171 59 42 91 55
+164 69 79 15 101 32 101 80 0 66 -14 70 -232 70 -175 0 -189 -1 -208 -20 -27
+-27 -25 -66 6 -97 31 -31 42 -17 -126 -157 l-115 -96 -5 375 c-4 319 -7 377
+-20 385 -8 5 -76 10 -150 10 -107 0 -140 -3 -158 -16z"/>
+<path d="M775 2009 c-170 -25 -272 -104 -295 -229 -18 -97 8 -187 72 -246 73
+-69 157 -93 368 -104 186 -9 241 -24 265 -71 38 -72 5 -146 -82 -186 -48 -22
+-71 -26 -143 -26 -157 1 -265 51 -328 153 -41 66 -74 86 -115 71 -43 -17 -49
+-41 -45 -191 3 -119 6 -141 22 -159 25 -27 74 -27 128 0 40 20 42 20 122 4 44
+-10 133 -20 196 -22 215 -10 351 50 415 182 38 77 38 184 0 261 -53 107 -155
+147 -418 164 -219 14 -258 26 -282 84 -30 72 19 142 123 172 47 14 68 15 134
+6 98 -14 146 -39 228 -117 80 -77 100 -88 134 -75 39 14 46 40 46 167 0 139
+-10 163 -66 163 -19 0 -49 -7 -66 -16 -20 -11 -44 -14 -67 -11 -20 4 -79 13
+-131 21 -105 17 -127 18 -215 5z"/>
+<path d="M3070 2010 c-143 -13 -252 -54 -287 -106 -19 -30 -11 -84 18 -110 29
+-26 71 -21 179 22 82 32 106 37 180 38 75 0 91 -3 131 -26 52 -31 84 -82 93
+-151 5 -43 4 -48 -12 -43 -98 29 -287 34 -395 11 -230 -48 -342 -191 -307
+-389 16 -91 63 -161 136 -205 147 -88 392 -61 545 60 20 16 39 29 42 29 3 0 8
+-18 12 -40 11 -66 39 -80 161 -80 121 0 148 8 162 49 25 70 -17 109 -120 110
+l-47 1 -3 293 c-3 275 -4 295 -26 347 -42 106 -132 171 -262 190 -71 10 -88
+10 -200 0z m170 -499 c36 -5 84 -14 108 -20 l42 -12 0 -62 c0 -99 -44 -151
+-174 -209 -52 -23 -87 -31 -154 -34 -79 -5 -91 -3 -132 19 -109 59 -122 180
+-28 250 58 42 123 61 263 75 6 1 39 -2 75 -7z"/>
+<path d="M4355 2013 c-209 -20 -390 -174 -439 -374 -69 -280 83 -545 356 -623
+63 -18 179 -20 279 -6 140 20 317 120 350 198 24 56 24 73 -1 100 -35 37 -78
+29 -167 -31 -103 -71 -130 -84 -209 -103 -148 -34 -300 24 -376 143 -74 117
+-71 277 7 383 46 62 129 117 198 131 169 33 277 -11 373 -151 54 -80 85 -98
+138 -80 51 16 60 53 54 217 -7 163 -16 183 -83 183 -44 0 -76 -19 -87 -50 -3
+-10 -25 -5 -86 18 -78 31 -189 53 -242 50 -14 -1 -43 -3 -65 -5z"/>
+<path d="M8120 2010 c-81 -7 -188 -33 -231 -56 -79 -40 -92 -141 -22 -173 29
+-13 51 -9 168 37 77 30 102 35 175 36 72 0 92 -4 128 -24 51 -29 87 -87 94
+-153 5 -41 3 -47 -11 -43 -114 34 -341 32 -455 -4 -193 -61 -279 -194 -246
+-380 15 -86 62 -155 134 -198 149 -89 393 -63 547 59 20 16 39 29 42 29 2 0 7
+-18 11 -39 10 -67 39 -81 163 -81 99 0 138 9 155 34 10 15 10 78 0 94 -11 17
+-67 32 -119 32 l-43 0 0 260 c0 263 -6 327 -40 405 -38 86 -131 148 -247 165
+-74 10 -90 10 -203 0z m170 -499 c36 -5 84 -14 108 -20 l42 -12 0 -55 c0 -73
+-19 -114 -71 -156 -73 -57 -157 -89 -257 -95 -79 -4 -91 -3 -132 19 -108 59
+-122 182 -28 251 58 42 123 61 263 75 6 1 39 -2 75 -7z"/>
+<path d="M9722 2010 c-112 -17 -194 -62 -304 -169 l-58 -55 0 90 c0 57 -4 94
+-12 102 -8 8 -60 12 -168 12 -185 0 -200 -6 -200 -75 0 -63 21 -75 132 -75
+l88 0 0 -329 0 -329 -114 -4 c-134 -4 -156 -15 -156 -79 0 -29 6 -42 26 -58
+26 -20 37 -21 404 -21 356 0 379 1 401 19 18 14 24 29 24 60 0 73 -8 76 -230
+79 l-195 3 0 206 0 206 52 56 c160 170 284 218 412 158 75 -35 115 -35 150 -1
+57 57 27 152 -59 188 -43 18 -130 25 -193 16z"/>
+<path d="M10565 2014 c-11 -2 -45 -9 -75 -15 -123 -25 -272 -134 -325 -239
+-56 -111 -75 -276 -45 -400 51 -216 244 -360 482 -360 130 0 237 18 363 62
+142 50 195 89 195 144 0 44 -30 74 -74 74 -18 0 -66 -14 -107 -31 -121 -51
+-180 -70 -255 -83 -201 -37 -378 58 -413 222 -6 29 -11 57 -11 62 0 6 154 10
+399 10 226 0 410 4 424 9 32 12 41 40 39 116 -7 246 -239 439 -522 434 -30 -1
+-64 -3 -75 -5z m155 -159 c98 -15 201 -105 228 -201 7 -23 12 -44 12 -48 0 -3
+-148 -6 -329 -6 l-330 0 22 54 c27 64 91 137 150 168 42 22 159 49 187 43 8
+-2 35 -7 60 -10z"/>
+<path d="M6290 1970 c-26 -26 -27 -90 -2 -113 10 -10 30 -17 45 -17 30 0 14
+44 177 -480 96 -305 108 -337 135 -360 24 -20 104 -16 126 7 12 11 44 111 86
+265 37 136 70 244 72 242 3 -3 36 -109 72 -236 37 -127 76 -243 87 -257 10
+-14 30 -28 45 -32 37 -10 94 8 111 34 8 12 67 201 132 420 118 395 119 397
+146 397 39 0 58 24 58 75 0 73 -5 75 -213 75 -215 0 -227 -4 -227 -74 0 -58
+17 -70 110 -76 l77 -5 -80 -293 c-44 -161 -83 -289 -87 -285 -4 5 -35 102 -69
+217 -34 114 -69 219 -78 232 -30 47 -121 49 -154 4 -11 -14 -46 -119 -80 -235
+-34 -115 -64 -213 -68 -217 -5 -6 -171 550 -171 575 0 4 34 7 75 7 91 0 115
+17 115 79 0 67 -14 71 -232 71 -175 0 -189 -1 -208 -20z"/>
+<path d="M0 790 l0 -410 3255 0 3255 0 0 35 0 35 -3220 0 -3220 0 0 375 0 375
+-35 0 -35 0 0 -410z"/>
+<path d="M6642 648 c-33 -33 -4 -68 55 -68 l43 0 0 -155 0 -155 -54 0 c-30 0
+-61 -3 -70 -6 -19 -7 -21 -45 -4 -62 14 -14 305 -17 326 -3 8 5 12 21 10 37
+-3 28 -5 29 -65 32 l-63 3 0 194 0 195 -83 0 c-51 0 -88 -5 -95 -12z"/>
+<path d="M7690 620 l0 -40 45 0 45 0 0 40 0 40 -45 0 -45 0 0 -40z"/>
+<path d="M8703 509 c-28 -18 -33 -19 -33 -5 0 12 -10 16 -44 16 -24 0 -51 -3
+-60 -6 -24 -9 -20 -55 4 -61 18 -5 20 -14 20 -92 0 -80 -2 -87 -22 -96 -27
+-12 -35 -40 -18 -60 9 -11 33 -15 80 -15 47 0 71 4 80 15 17 20 9 48 -18 60
+-20 9 -22 17 -22 77 0 65 1 67 34 87 18 12 47 21 64 21 49 0 62 -21 62 -103 0
+-65 -2 -73 -22 -82 -27 -12 -35 -40 -18 -60 15 -19 130 -21 148 -3 18 18 14
+46 -8 60 -17 11 -20 24 -20 99 0 72 -3 91 -21 113 -45 57 -127 73 -186 35z"/>
+<path d="M7622 508 c-33 -33 -4 -68 55 -68 l43 0 0 -85 0 -85 -54 0 c-30 0
+-61 -3 -70 -6 -19 -7 -21 -45 -4 -62 14 -14 305 -17 326 -3 8 5 12 21 10 37
+-3 28 -5 29 -65 32 l-63 3 0 124 0 125 -83 0 c-51 0 -88 -5 -95 -12z"/>
+<path d="M9522 508 c-7 -7 -12 -20 -12 -30 0 -19 35 -42 50 -33 6 4 10 -27 10
+-82 0 -100 10 -127 59 -160 43 -29 104 -30 149 -3 26 16 32 17 32 5 0 -19 90
+-21 108 -3 18 18 14 46 -8 58 -18 10 -20 21 -20 135 l0 125 -69 0 c-50 0 -72
+-4 -82 -16 -19 -23 1 -48 40 -52 l31 -3 0 -69 c0 -64 -2 -70 -31 -94 -35 -30
+-89 -35 -113 -10 -13 12 -16 39 -16 130 l0 114 -58 0 c-32 0 -63 -5 -70 -12z"/>
+<path d="M10532 508 c-19 -19 -14 -48 11 -58 12 -5 42 -26 67 -48 l45 -40 -49
+-43 c-27 -24 -59 -50 -72 -57 -28 -15 -33 -57 -8 -66 32 -12 141 -6 154 9 13
+16 5 55 -13 55 -7 1 1 12 17 25 l30 24 29 -21 c25 -18 27 -22 13 -30 -9 -5
+-16 -17 -16 -27 0 -33 24 -42 102 -39 71 3 73 4 76 30 2 20 -3 30 -20 39 -13
+6 -47 32 -76 56 l-52 45 52 44 c29 24 58 44 65 44 18 0 26 39 12 56 -18 22
+-138 16 -153 -8 -8 -13 -8 -23 0 -35 9 -14 6 -21 -10 -34 -18 -15 -23 -15 -43
+-2 -19 12 -20 18 -11 38 18 40 -4 55 -76 55 -35 0 -67 -5 -74 -12z"/>
+</g>
+</svg>
diff --git a/xdm/xdm-config b/xdm/xdm-config
new file mode 100644
index 0000000..5ab90f2
--- /dev/null
+++ b/xdm/xdm-config
@@ -0,0 +1,28 @@
+DisplayManager.authDir: /var/lib/xdm
+DisplayManager.errorLogFile: /var/log/xdm.log
+DisplayManager.pidFile: /var/run/xdm.pid
+DisplayManager.keyFile: /usr/lib64/X11/xdm/xdm-keys
+DisplayManager.servers: /usr/lib64/X11/xdm/Xservers
+DisplayManager.accessFile: /usr/lib64/X11/xdm/Xaccess
+DisplayManager*resources: /etc/X11/xdm/liveslak-xdm/Xresources
+DisplayManager.willing: su nobody -c /usr/lib64/X11/xdm/Xwilling
+! All displays should use authorization, but we cannot be sure
+! X terminals may not be configured that way, so they will require
+! individual resource settings.
+DisplayManager*authorize: true
+!
+DisplayManager*chooser: /usr/lib64/X11/xdm/chooser
+DisplayManager*startup: /usr/lib64/X11/xdm/Xstartup
+DisplayManager*session: /usr/lib64/X11/xdm/Xsession
+DisplayManager*reset: /usr/lib64/X11/xdm/Xreset
+DisplayManager*authComplain: true
+! The following three resources set up display :0 as the console.
+DisplayManager._0.setup: /etc/X11/xdm/liveslak-xdm/Xsetup
+DisplayManager._0.startup: /etc/X11/xdm/liveslak-xdm/Xstartup
+DisplayManager._0.reset: /usr/lib64/X11/xdm/TakeConsole
+
+DisplayManager*loginmoveInterval: 10
+
+! SECURITY: do not listen for XDMCP or Chooser requests
+! Comment out this line if you want to manage X terminals with xdm
+DisplayManager.requestPort: 0