diff options
Diffstat (limited to 'pc-bios')
105 files changed, 11171 insertions, 0 deletions
diff --git a/pc-bios/Makefile b/pc-bios/Makefile new file mode 100644 index 00000000..315288df --- /dev/null +++ b/pc-bios/Makefile @@ -0,0 +1,19 @@ +# +# NOTE: only compilable with x86 cross compile tools +# +include ../config-host.mak + +DEFINES= + +TARGETS= + +all: $(TARGETS) + +%.o: %.S +	$(CC) $(DEFINES) -c -o $@ $< + +%.dtb: %.dts +	dtc -I dts -O dtb -o $@ $< + +clean: +	rm -f $(TARGETS) *.o *~ diff --git a/pc-bios/QEMU,cgthree.bin b/pc-bios/QEMU,cgthree.bin Binary files differnew file mode 100644 index 00000000..6fec9462 --- /dev/null +++ b/pc-bios/QEMU,cgthree.bin diff --git a/pc-bios/QEMU,tcx.bin b/pc-bios/QEMU,tcx.bin Binary files differnew file mode 100644 index 00000000..d79cc1fe --- /dev/null +++ b/pc-bios/QEMU,tcx.bin diff --git a/pc-bios/README b/pc-bios/README new file mode 100644 index 00000000..05cf0421 --- /dev/null +++ b/pc-bios/README @@ -0,0 +1,48 @@ +- SeaBIOS (bios.bin) is the successor of pc bios. +  See http://www.seabios.org/ for more information. + +- The VGA BIOS and the Cirrus VGA BIOS come from the LGPL VGA bios +  project (http://www.nongnu.org/vgabios/). + +- The PowerPC Open Hack'Ware Open Firmware Compatible BIOS is +  available at http://repo.or.cz/w/openhackware.git. + +- OpenBIOS (http://www.openbios.org/) is a free (GPL v2) portable +  firmware implementation. The goal is to implement a 100% IEEE +  1275-1994 (referred to as Open Firmware) compliant firmware. +  The included images for PowerPC (for 32 and 64 bit PPC CPUs), +  Sparc32 (including QEMU,tcx.bin and QEMU,cgthree.bin) and Sparc64 are built +  from OpenBIOS SVN revision 1280. + +- SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware +  implementation for certain IBM POWER hardware.  The sources are at +  https://github.com/aik/SLOF, and the image currently in qemu is +  built from git tag qemu-slof-20150429. + +- sgabios (the Serial Graphics Adapter option ROM) provides a means for +  legacy x86 software to communicate with an attached serial console as +  if a video card were attached.  The master sources reside in a subversion +  repository at http://sgabios.googlecode.com/svn/trunk.  A git mirror is +  available at git://git.qemu-project.org/sgabios.git. + +- The PXE roms come from the iPXE project. Built with BANNER_TIME 0. +  Sources available at http://ipxe.org.  Vendor:Device ID -> ROM mapping: + +	8086:100e -> pxe-e1000.rom +	8086:1209 -> pxe-eepro100.rom +	1050:0940 -> pxe-ne2k_pci.rom +	1022:2000 -> pxe-pcnet.rom +	10ec:8139 -> pxe-rtl8139.rom +	1af4:1000 -> pxe-virtio.rom + +- The S390 zipl loader is an addition to the official IBM s390-tools +  package. That fork is maintained in its own git repository at: +  git://repo.or.cz/s390-tools.git + +- The sources for the Alpha palcode image is available from: +  git://github.com/rth7680/qemu-palcode.git + +- The u-boot binary for e500 comes from the upstream denx u-boot project where +  it was compiled using the qemu-ppce500 target. +  A git mirror is available at: git://git.qemu-project.org/u-boot.git +  The hash used to compile the current version is: 2072e72 diff --git a/pc-bios/acpi-dsdt.aml b/pc-bios/acpi-dsdt.aml Binary files differnew file mode 100644 index 00000000..558c10f5 --- /dev/null +++ b/pc-bios/acpi-dsdt.aml diff --git a/pc-bios/bamboo.dtb b/pc-bios/bamboo.dtb Binary files differnew file mode 100644 index 00000000..d12e201a --- /dev/null +++ b/pc-bios/bamboo.dtb diff --git a/pc-bios/bamboo.dts b/pc-bios/bamboo.dts new file mode 100644 index 00000000..62fabcca --- /dev/null +++ b/pc-bios/bamboo.dts @@ -0,0 +1,200 @@ +/* + * Device Tree Source for AMCC Bamboo + * + * Copyright (c) 2006, 2007 IBM Corp. + * Josh Boyer <jwboyer@linux.vnet.ibm.com> + * + * This file is licensed under the terms of the GNU General Public + * License version 2.  This program is licensed "as is" without + * any warranty of any kind, whether express or implied. + */ + +/dts-v1/; + +/ { +	#address-cells = <2>; +	#size-cells = <1>; +	model = "amcc,bamboo"; +	compatible = "amcc,bamboo"; +	dcr-parent = <&{/cpus/cpu@0}>; + +	aliases { +		serial0 = &UART0; +		serial1 = &UART1; +	}; + +	cpus { +		#address-cells = <1>; +		#size-cells = <0>; + +		cpu@0 { +			device_type = "cpu"; +			model = "PowerPC,440EP"; +			reg = <0>; +			clock-frequency = <0x1fca0550>; +			timebase-frequency = <0x017d7840>; +			i-cache-line-size = <0x20>; +			d-cache-line-size = <0x20>; +			i-cache-size = <0x8000>; +			d-cache-size = <0x8000>; +			dcr-controller; +			dcr-access-method = "native"; +		}; +	}; + +	memory { +		device_type = "memory"; +		reg = <0x0 0x0 0x9000000>; +	}; + +	UIC0: interrupt-controller0 { +		compatible = "ibm,uic-440ep","ibm,uic"; +		interrupt-controller; +		cell-index = <0x0>; +		dcr-reg = <0x0c0 0x009>; +		#address-cells = <0x0>; +		#size-cells = <0x0>; +		#interrupt-cells = <0x2>; +	}; + +	SDR0: sdr { +		compatible = "ibm,sdr-440ep"; +		dcr-reg = <0x00e 0x002>; +	}; + +	CPR0: cpr { +		compatible = "ibm,cpr-440ep"; +		dcr-reg = <0x00c 0x002>; +	}; + +	plb { +		compatible = "ibm,plb-440ep", "ibm,plb-440gp", "ibm,plb4"; +		#address-cells = <2>; +		#size-cells = <1>; +		ranges; +		clock-frequency = <0x07f28154>; + +		SDRAM0: sdram { +			compatible = "ibm,sdram-440ep", "ibm,sdram-405gp"; +			dcr-reg = <0x010 0x2>; +		}; + +		DMA0: dma { +			compatible = "ibm,dma-440ep", "ibm,dma-440gp"; +			dcr-reg = <0x100 0x027>; +		}; + +		POB0: opb { +			compatible = "ibm,opb-440ep", "ibm,opb-440gp", "ibm,opb"; +			#address-cells = <1>; +			#size-cells = <1>; +			/* Bamboo is oddball in the 44x world and doesn't use the ERPN +			 * bits. +			 */ +			ranges = <0x00000000 0x0 0x00000000 0x80000000 +			          0x80000000 0x0 0x80000000 0x80000000>; +			/* interrupt-parent = <&UIC1>; */ +			interrupts = <7 4>; +			clock-frequency = <0x03f940aa>; + +			EBC0: ebc { +				compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc"; +				dcr-reg = <0x012 2>; +				#address-cells = <2>; +				#size-cells = <1>; +				clock-frequency = <0x03f940aa>; +				interrupts = <5 1>; +			/* interrupt-parent = <&UIC1>; */ +			}; + +			UART0: serial@ef600300 { +				device_type = "serial"; +				compatible = "ns16550"; +				reg = <0xef600300 8>; +				virtual-reg = <0xef600300>; +				clock-frequency = <0x00a8c000>; +				current-speed = <0x1c200>; +				interrupt-parent = <&UIC0>; +				interrupts = <0 4>; +			}; + +			UART1: serial@ef600400 { +				device_type = "serial"; +				compatible = "ns16550"; +				reg = <0xef600400 8>; +				virtual-reg = <0xef600400>; +				clock-frequency = <0x00a8c000>; +				current-speed = <0>; +				interrupt-parent = <&UIC0>; +				interrupts = <1 4>; +			}; + +			IIC0: i2c@ef600700 { +				device_type = "i2c"; +				compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic"; +				reg = <0xef600700 0x14>; +				interrupt-parent = <&UIC0>; +				interrupts = <2 4>; +			}; + +			IIC1: i2c@ef600800 { +				device_type = "i2c"; +				compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic"; +				reg = <0xef600800 14>; +				interrupt-parent = <&UIC0>; +				interrupts = <7 4>; +			}; + +			ZMII0: emac-zmii@ef600d00 { +				device_type = "zmii-interface"; +				compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii"; +				reg = <0xef600d00 0xc>; +			}; + +		}; + +		PCI0: pci@ec000000 { +			device_type = "pci"; +			#interrupt-cells = <1>; +			#size-cells = <2>; +			#address-cells = <3>; +			compatible = "ibm,plb440ep-pci", "ibm,plb-pci"; +			primary; +			reg = <0 0xeec00000 8     /* Config space access */ +			       0 0xeed00000 4     /* IACK */ +			       0 0xeed00000 4     /* Special cycle */ +			       0 0xef400000 0x40>;  /* Internal registers */ + +			/* Outbound ranges, one memory and one IO, +			 * later cannot be changed. Chip supports a second +			 * IO range but we don't use it for now +			 */ +			ranges = <0x02000000 0 0xa0000000 0 0xa0000000 0 0x20000000 +				  0x01000000 0 0x00000000 0 0xe8000000 0 0x00010000>; + +			/* Inbound 2GB range starting at 0 */ +			dma-ranges = <0x42000000 0 0 0 0 0 0x80000000>; + +			/* Bamboo has all 4 IRQ pins tied together per slot */ +			interrupt-map-mask = <0xf800 0 0 0>; +			interrupt-map = < +				/* IDSEL 1 */ +				0x0800 0 0 0 &UIC0 0x1c 8 + +				/* IDSEL 2 */ +				0x1000 0 0 0 &UIC0 0x1b 8 + +				/* IDSEL 3 */ +				0x1800 0 0 0 &UIC0 0x1a 8 + +				/* IDSEL 4 */ +				0x2000 0 0 0 &UIC0 0x19 8 +			>; +		}; + +	}; + +	chosen { +		linux,stdout-path = "/plb/opb/serial@ef600300"; +	}; +}; diff --git a/pc-bios/bios-256k.bin b/pc-bios/bios-256k.bin Binary files differnew file mode 100644 index 00000000..f86adff1 --- /dev/null +++ b/pc-bios/bios-256k.bin diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin Binary files differnew file mode 100644 index 00000000..db835fb5 --- /dev/null +++ b/pc-bios/bios.bin diff --git a/pc-bios/efi-e1000.rom b/pc-bios/efi-e1000.rom Binary files differnew file mode 100644 index 00000000..4e29d9d1 --- /dev/null +++ b/pc-bios/efi-e1000.rom diff --git a/pc-bios/efi-eepro100.rom b/pc-bios/efi-eepro100.rom Binary files differnew file mode 100644 index 00000000..2a92d6f3 --- /dev/null +++ b/pc-bios/efi-eepro100.rom diff --git a/pc-bios/efi-ne2k_pci.rom b/pc-bios/efi-ne2k_pci.rom Binary files differnew file mode 100644 index 00000000..63660170 --- /dev/null +++ b/pc-bios/efi-ne2k_pci.rom diff --git a/pc-bios/efi-pcnet.rom b/pc-bios/efi-pcnet.rom Binary files differnew file mode 100644 index 00000000..a61f586e --- /dev/null +++ b/pc-bios/efi-pcnet.rom diff --git a/pc-bios/efi-rtl8139.rom b/pc-bios/efi-rtl8139.rom Binary files differnew file mode 100644 index 00000000..c9c77ea7 --- /dev/null +++ b/pc-bios/efi-rtl8139.rom diff --git a/pc-bios/efi-virtio.rom b/pc-bios/efi-virtio.rom Binary files differnew file mode 100644 index 00000000..eec27909 --- /dev/null +++ b/pc-bios/efi-virtio.rom diff --git a/pc-bios/keymaps/ar b/pc-bios/keymaps/ar new file mode 100644 index 00000000..c430c03b --- /dev/null +++ b/pc-bios/keymaps/ar @@ -0,0 +1,98 @@ +# generated from XKB map ar +include common +map 0x401 +exclam 0x02 shift +at 0x03 shift +numbersign 0x04 shift +dollar 0x05 shift +percent 0x06 shift +asciicircum 0x07 shift +ampersand 0x08 shift +asterisk 0x09 shift +parenleft 0x0a shift +parenright 0x0b shift +minus 0x0c +underscore 0x0c shift +equal 0x0d +plus 0x0d shift +Arabic_dad 0x10 altgr +Arabic_fatha 0x10 shift altgr +Arabic_sad 0x11 altgr +Arabic_fathatan 0x11 shift altgr +Arabic_theh 0x12 altgr +Arabic_damma 0x12 shift altgr +Arabic_qaf 0x13 altgr +Arabic_dammatan 0x13 shift altgr +Arabic_feh 0x14 altgr +UFEF9 0x14 shift altgr +Arabic_ghain 0x15 altgr +Arabic_hamzaunderalef 0x15 shift altgr +Arabic_ain 0x16 altgr +grave 0x16 shift altgr +Arabic_ha 0x17 altgr +division 0x17 shift altgr +Arabic_khah 0x18 altgr +multiply 0x18 shift altgr +Arabic_hah 0x19 altgr +Arabic_semicolon 0x19 shift altgr +bracketleft 0x1a +braceleft 0x1a shift +Arabic_jeem 0x1a altgr +bracketright 0x1b +braceright 0x1b shift +Arabic_dal 0x1b altgr +Arabic_sheen 0x1e altgr +backslash 0x1e shift altgr +Arabic_seen 0x1f altgr +Arabic_yeh 0x20 altgr +bracketleft 0x20 shift altgr +Arabic_beh 0x21 altgr +bracketright 0x21 shift altgr +Arabic_lam 0x22 altgr +UFEF7 0x22 shift altgr +Arabic_alef 0x23 altgr +Arabic_hamzaonalef 0x23 shift altgr +Arabic_teh 0x24 altgr +Arabic_tatweel 0x24 shift altgr +Arabic_noon 0x25 altgr +Arabic_comma 0x25 shift altgr +Arabic_meem 0x26 altgr +slash 0x26 shift altgr +semicolon 0x27 +colon 0x27 shift +Arabic_kaf 0x27 altgr +apostrophe 0x28 +quotedbl 0x28 shift +Arabic_tah 0x28 altgr +grave 0x29 +asciitilde 0x29 shift +Arabic_thal 0x29 altgr +Arabic_shadda 0x29 shift altgr +backslash 0x2b +bar 0x2b shift +less 0x2b altgr +greater 0x2b shift altgr +Arabic_hamzaonyeh 0x2c altgr +asciitilde 0x2c shift altgr +Arabic_hamza 0x2d altgr +Arabic_sukun 0x2d shift altgr +Arabic_hamzaonwaw 0x2e altgr +Arabic_kasra 0x2e shift altgr +Arabic_ra 0x2f altgr +Arabic_kasratan 0x2f shift altgr +UFEFB 0x30 altgr +UFEF5 0x30 shift altgr +Arabic_alefmaksura 0x31 altgr +Arabic_maddaonalef 0x31 shift altgr +Arabic_tehmarbuta 0x32 altgr +apostrophe 0x32 shift altgr +comma 0x33 +less 0x33 shift +Arabic_waw 0x33 altgr +period 0x34 +greater 0x34 shift +Arabic_zain 0x34 altgr +slash 0x35 +question 0x35 shift +Arabic_zah 0x35 altgr +Arabic_question_mark 0x35 shift altgr diff --git a/pc-bios/keymaps/bepo b/pc-bios/keymaps/bepo new file mode 100644 index 00000000..d40041a4 --- /dev/null +++ b/pc-bios/keymaps/bepo @@ -0,0 +1,333 @@ +include common + +# Bépo : Improved ergonomic french keymap using Dvorak method. +# Built by community on 'Dvorak Fr / Bépo' : +# see http://www.clavier-dvorak.org/wiki/ to join and help. +# +# Bépo layout (1.0rc2 version) for a pc105 keyboard (french) : +# ┌────┐ +# │ S A│   S = Shift,  A = AltGr + Shift +# │ s a│   s = normal, a = AltGr +# └────┘ +# +# ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓ +# │ # ¶ │ 1 „ │ 2 “ │ 3 ” │ 4 ≤ │ 5 ≥ │ 6   │ 7 ¬ │ 8 ¼ │ 9 ½ │ 0 ¾ │ ° ′ │ ` ″ ┃ ⌫ Retour┃ +# │ $ – │ " — │ « < │ » > │ ( [ │ ) ] │ @ ^ │ + ± │ - − │ / ÷ │ * × │ = ≠ │ % ‰ ┃  arrière┃ +# ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫ +# ┃       ┃ B ¦ │ É ˝ │ P § │ O Œ │ È ` │ !   │ V   │ D Ð │ L   │ J IJ │ Z Ə │ W   ┃Entrée ┃ +# ┃Tab ↹  ┃ b | │ é ˊ │ p & │ o œ │ è ` │ ˆ ¡ │ v ˇ │ d ð │ l / │ j ij │ z ə │ w ̆ ┃   ⏎   ┃ +# ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃ +# ┃        ┃ A Æ │ U Ù │ I ˙ │ E ¤ │ ; ̛ │ C ſ │ T Þ │ S ẞ │ R ™ │ N   │ M º │ Ç , ┃      ┃ +# ┃Maj ⇬   ┃ a æ │ u ù │ i ̈ │ e € │ , ’ │ c © │ t þ │ s ß │ r ® │ n ˜ │ m ¯ │ ç ¸ ┃      ┃ +# ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫ +# ┃       ┃ Ê   │ À   │ Y ‘ │ X ’ │ : · │ K   │ ? ̉ │ Q ̣ │ G   │ H ‡ │ F ª ┃             ┃ +# ┃Shift ⇧┃ ê / │ à \ │ y { │ x } │ . … │ k ~ │ ' ¿ │ q ˚ │ g µ │ h † │ f ˛ ┃Shift ⇧      ┃ +# ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛ +# ┃       ┃       ┃       ┃ Espace inséc.   Espace inséc. fin ┃       ┃       ┃       ┃ +# ┃Ctrl   ┃Meta   ┃Alt    ┃ ␣ (Espace)      _               ␣ ┃AltGr ⇮┃Menu   ┃Ctrl   ┃ +# ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛ + + +# First row +## keycode  41 = dollar numbersign       U+2013  U+00b6 +dollar        0x29 +numbersign    0x29  shift +U2013         0x29        altgr +U00b6         0x29  shift altgr + +## keycode   2 = +quotedbl +one          U+2014  U+201e +quotedbl      0x2 +one           0x2  shift +U2014         0x2        altgr +U201e         0x2  shift altgr + +## keycode   3 = +guillemotleft  +two     less    U+201c +guillemotleft  0x3 +two           0x3  shift +less          0x3        altgr +U201c         0x3  shift altgr + +## keycode   4 = +guillemotright +three  greater U+201d +guillemotright  0x4 +three         0x4  shift +greater       0x4        altgr +U201d         0x4  shift altgr + +## keycode   5 = +parenleft +four        bracketleft  U+2264 +parenleft     0x5 +four          0x5  shift +bracketleft   0x5        altgr +U2264         0x5  shift altgr + +## keycode   6 = +parenright +five       bracketright  U+2265 +parenright    0x6 +five          0x6  shift +bracketright  0x6        altgr +U2265         0x6  shift altgr + +## keycode   7 = +at       +six          asciicircum +at            0x7 +six           0x7  shift +asciicircum   0x7        altgr + +## keycode   8 = +plus     +seven        U+00b1  U+00ac +plus          0x8 +seven         0x8  shift +U00b1         0x8        altgr +U00ac         0x8  shift altgr + +## keycode   9 = +minus    +eight        U+2212  U+00bc +minus         0x9 +eight         0x9  shift +U2212         0x9        altgr +U00bc         0x9  shift altgr + +## keycode  10 = +slash    +nine         U+00f7  U+00bd +slash         0xa +nine          0xa  shift +U00f7         0xa        altgr +U00bd         0xa  shift altgr + +## keycode  11 = +asterisk +zero         U+00d7  U+00be +asterisk      0xb +zero          0xb  shift +U00d7         0xb        altgr +U00be         0xb  shift altgr + +## keycode  12 = equal     U+00b0        U+2260  U+2032 +equal         0xc +U00b0         0xc  shift +U2260         0xc        altgr +U2032         0xc  shift altgr + +## keycode  13 = percent   grave         U+2030  U+2033 +percent       0xd +grave         0xd  shift +U2030         0xd        altgr +U2033         0xd  shift altgr + + +# Second row + +# simplified letter definitions notation : +## keycode 16 = b +b             0x10  addupper +## keycode 18 = p +p             0x12  addupper +## keycode 19 = o +o             0x13  addupper +## keycode 22 = v +v             0x16  addupper +## keycode 23 = d +d             0x17  addupper +## keycode 24 = l +l             0x18  addupper +## keycode 25 = j +j             0x19  addupper +## keycode 26 = z +z             0x1a  addupper +## keycode 27 = w +w             0x1b  addupper + +# then, add specific definitions +##                    AltGr keycode  16 = bar +bar           0x10        altgr +##              Shift AltGr keycode  16 = brokenbar +brokenbar     0x10  shift altgr + +## keycode 17 = +eacute +Eacute dead_acute +eacute        0x11 +Eacute        0x11  shift +dead_acute    0x11        altgr + +##                    AltGr keycode  18 = ampersand +ampersand     0x12        altgr +##              Shift AltGr keycode  18 = U+00a7 +U00a7         0x12  shift altgr + +##                    AltGr keycode  19 = +U+0153 +U+0153        0x13        altgr +##              Shift AltGr keycode  19 = +U+0152 +U+0152        0x13  shift altgr + +## keycode 20 = +egrave +Egrave dead_grave grave # no Meta ! +egrave        0x14 +Egrave        0x14  shift +dead_grave    0x14        altgr + +## keycode 21 = dead_circumflex exclam exclamdown +dead_circumflex  0x15 +exclam        0x15  shift +exclamdown    0x15        altgr + +##                    AltGr keycode  22 = dead_caron +dead_caron    0x16        altgr + +##                    AltGr keycode  23 = eth +eth           0x17        altgr +##              Shift AltGr keycode  23 = ETH +ETH           0x17  shift altgr + +##                    AltGr keycode  25 = +U+0133 +U+0133        0x19        altgr +##              Shift AltGr keycode  25 = +U+0132 +U+0132        0x19  shift altgr + +##                    AltGr keycode  26 = +U+0259 +U+0259        0x1a        altgr +##              Shift AltGr keycode  26 = +U+018f +U+018f        0x1a  shift altgr + + + +# Third row + +# simplified letter definitions notation : +## keycode 30 = a +a             0x1e  addupper +## keycode 31 = u +u             0x1f  addupper +## keycode 32 = i +i             0x20  addupper +## keycode 33 = e +e             0x21  addupper +## keycode 35 = c +c             0x23  addupper +## keycode 36 = t +t             0x24  addupper +## keycode 37 = s +s             0x25  addupper +## keycode 38 = r +r             0x26  addupper +## keycode 39 = n +n             0x27  addupper +## keycode 40 = m +m             0x28  addupper + +# then, add specific definitions +##                    AltGr keycode  30 = +ae +ae            0x1e        altgr +##              Shift AltGr keycode  30 = +AE +AE            0x1e  shift altgr + +##                    AltGr keycode  31 = +ugrave +ugrave        0x1f        altgr +##              Shift AltGr keycode  31 = +Ugrave +Ugrave        0x1f  shift altgr + +##                    AltGr keycode  32 = dead_diaeresis +dead_diaeresis  0x20        altgr + + +##                    AltGr keycode  33 = U+20ac +U20ac         0x21        altgr + +## keycode 34 = comma semicolon U+2019 +U+031b +comma         0x22 +semicolon     0x22  shift +U2019         0x22        altgr +U+031b        0x22  shift altgr + +##                    AltGr keycode  35 = copyright +copyright     0x23        altgr +##              Shift AltGr keycode  35 = U+017f +U017f         0x23  shift altgr + +##                    AltGr keycode  36 = +thorn +thorn         0x24        altgr +##              Shift AltGr keycode  36 = +THORN +THORN         0x24  shift altgr + +##                    AltGr keycode  37 = +ssharp +ssharp        0x25        altgr +##              Shift AltGr keycode  37 = U+1e9e +U1e9e         0x25  shift altgr + +##                    AltGr keycode  38 = registered +registered    0x26        altgr +##              Shift AltGr keycode  38 = U+2122 +U2122         0x26  shift altgr + +##                    AltGr keycode  39 = dead_tilde +dead_tilde    0x27        altgr + +##              Shift AltGr keycode  40 = masculine +masculine     0x28  shift altgr + +## keycode 43 = +ccedilla +Ccedilla dead_cedilla +ccedilla      0x2b +Ccedilla      0x2b  shift +dead_cedilla  0x2b        altgr + + +# Fourth row + +# simplified letter definitions notation : +## keycode 45 = y +y             0x2d  addupper +## keycode 46 = x +x             0x2e  addupper +## keycode 48 = k +k             0x30  addupper +## keycode 50 = q +q             0x32  addupper +## keycode 51 = g +g             0x33  addupper +## keycode 52 = h +h             0x34  addupper +## keycode 53 = f +f             0x35  addupper + +# then, add specific definitions +## keycode 86 = +ecircumflex +Ecircumflex slash slash +ecircumflex   0x56 +Ecircumflex   0x56  shift + +## keycode 44 = +agrave +Agrave backslash +agrave        0x2c +Agrave        0x2c  shift +backslash     0x2c        altgr + +##                    AltGr keycode  45 = braceleft +braceleft     0x2d        altgr +##              Shift AltGr keycode  45 = U+2018 +U2018         0x2d  shift altgr + +##                    AltGr keycode  46 = braceright +braceright    0x2e        altgr + +## keycode 47 = period colon U+2026 periodcentered +period        0x2f +colon         0x2f  shift +U2026         0x2f        altgr +periodcentered  0x2f  shift altgr + +##                    AltGr keycode  48 = asciitilde +asciitilde    0x30        altgr +##              Shift AltGr keycode  48 = U+2328 +U2328         0x30  shift altgr + +## keycode 49 = apostrophe question questiondown +U+0309 +apostrophe    0x31 +question      0x31  shift +questiondown  0x31        altgr +U+0309        0x31  shift altgr + +##                    AltGr keycode  51 = mu +mu            0x33        altgr + +##                    AltGr keycode  52 = U+2020 +U2020         0x34        altgr +##              Shift AltGr keycode  52 = U+2021 +U2021         0x34  shift altgr + +##              Shift AltGr keycode  53 = ordfeminine +ordfeminine   0x35  shift altgr + + + +## keycode 57 = space nobreakspace underscore U+202f +space         0x39 +nobreakspace  0x39  shift +underscore    0x39        altgr +U202f         0x39  shift altgr diff --git a/pc-bios/keymaps/common b/pc-bios/keymaps/common new file mode 100644 index 00000000..adc56c77 --- /dev/null +++ b/pc-bios/keymaps/common @@ -0,0 +1,157 @@ +include modifiers + +# +# Top row +# +1 0x2 +2 0x3 +3 0x4 +4 0x5 +5 0x6 +6 0x7 +7 0x8 +8 0x9 +9 0xa +0 0xb +BackSpace 0xe + +# +# QWERTY first row +# +Tab 0xf localstate +ISO_Left_Tab 0xf shift +q 0x10 addupper +w 0x11 addupper +e 0x12 addupper +r 0x13 addupper +t 0x14 addupper +y 0x15 addupper +u 0x16 addupper +i 0x17 addupper +o 0x18 addupper +p 0x19 addupper + +# +# QWERTY second row +# +a 0x1e addupper +s 0x1f addupper +d 0x20 addupper +f 0x21 addupper +g 0x22 addupper +h 0x23 addupper +j 0x24 addupper +k 0x25 addupper +l 0x26 addupper +Return 0x1c localstate + +# +# QWERTY third row +# +z 0x2c addupper +x 0x2d addupper +c 0x2e addupper +v 0x2f addupper +b 0x30 addupper +n 0x31 addupper +m 0x32 addupper + +space 0x39 localstate + +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# +# Esc and Function keys +# +Escape 0x1 localstate +F1 0x3b localstate +F2 0x3c localstate +F3 0x3d localstate +F4 0x3e localstate +F5 0x3f localstate +F6 0x40 localstate +F7 0x41 localstate +F8 0x42 localstate +F9 0x43 localstate +F10 0x44 localstate +F11 0x57 localstate +F12 0x58 localstate + +# Printscreen, Scrollock and Pause +# Printscreen really requires four scancodes (0xe0, 0x2a, 0xe0, 0x37), +# but (0xe0, 0x37) seems to work. +Print 0xb7 localstate +Sys_Req 0xb7 localstate +Execute 0xb7 localstate +Scroll_Lock 0x46 + +# +# Insert - PgDown +# +Insert 0xd2 localstate +Delete 0xd3 localstate +Home 0xc7 localstate +End 0xcf localstate +Page_Up 0xc9 localstate +Page_Down 0xd1 localstate + +# +# Arrow keys +# +Left 0xcb localstate +Up 0xc8 localstate +Down 0xd0 localstate +Right 0xcd localstate + +# +# Numpad +# +Num_Lock 0x45 +KP_Divide 0xb5 +KP_Multiply 0x37 +KP_Subtract 0x4a +KP_Add 0x4e +KP_Enter 0x9c + +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +KP_Delete 0x53 + +KP_0 0x52 numlock +KP_Insert 0x52 + +KP_1 0x4f numlock +KP_End 0x4f + +KP_2 0x50 numlock +KP_Down 0x50 + +KP_3 0x51 numlock +KP_Next 0x51 + +KP_4 0x4b numlock +KP_Left 0x4b + +KP_5 0x4c numlock +KP_Begin 0x4c + +KP_6 0x4d numlock +KP_Right 0x4d + +KP_7 0x47 numlock +KP_Home 0x47 + +KP_8 0x48 numlock +KP_Up 0x48 + +KP_9 0x49 numlock +KP_Prior 0x49 + +Caps_Lock 0x3a +# +# Inhibited keys +# +Multi_key 0x0 inhibit diff --git a/pc-bios/keymaps/cz b/pc-bios/keymaps/cz new file mode 100644 index 00000000..6584bfb1 --- /dev/null +++ b/pc-bios/keymaps/cz @@ -0,0 +1,94 @@ +include common + +# Czech qwertz layout +# comments are czech descriptions of the characters + +# ----------- +#  First row +# ----------- + +# strednik, kolecko +semicolon 0x29 +dead_abovering 0x29 shift + +# numbers +plus 0x2 +1 0x2 shift +ecaron 0x3 +2 0x3 shift +scaron 0x4 +3 0x4 shift +ccaron 0x5 +4 0x5 shift +rcaron 0x6 +5 0x6 shift +zcaron 0x7 +6 0x7 shift +yacute 0x8 +7 0x8 shift +aacute 0x9 +8 0x9 shift +iacute 0xa +9 0xa shift +eacute 0xb +0 0xb shift + +# rovnitko +equal 0x0c +percent 0x0c shift + +# carka, hacek +dead_acute 0x0d +dead_caron 0x0d shift + +# ------------ +#  Second row +# ------------ + +z 0x15 addupper + +# u s carkou, zpetne lomitko +uacute 0x1a +slash 0x1a shift + +# prava zavorka, leva zavorka +parenright 0x1b +parenleft 0x1b shift + +# ----------- +#  Third row +# ----------- + +# u s krouzkem, uvozovky +uring 0x27 +quotedbl 0x27 shift + +# paragraf, vykricnik +section 0x28 +exclam 0x28 shift + +# vodorovna dvojtecka, apostrof +dead_diaeresis 0x2b +apostrophe 0x2b shift + +# ------------ +#  Fourth row +# ------------ + +# zpetne lomitko, roura +backslash 0x2b +bar 0x2b shift + +y 0x2c addupper + +# carka, otaznik +comma 0x33 +question 0x33 shift + +# tecka, dvojtecka +period 0x34 +colon 0x34 shift + +# minus, podtrzitko +minus 0x35 +underscore 0x35 shift diff --git a/pc-bios/keymaps/da b/pc-bios/keymaps/da new file mode 100644 index 00000000..3884dcf1 --- /dev/null +++ b/pc-bios/keymaps/da @@ -0,0 +1,120 @@ +# generated from XKB map dk +include common +map 0x406 +exclam 0x02 shift +exclamdown 0x02 altgr +onesuperior 0x02 shift altgr +quotedbl 0x03 shift +at 0x03 altgr +twosuperior 0x03 shift altgr +numbersign 0x04 shift +sterling 0x04 altgr +threesuperior 0x04 shift altgr +currency 0x05 shift +dollar 0x05 altgr +onequarter 0x05 shift altgr +percent 0x06 shift +onehalf 0x06 altgr +cent 0x06 shift altgr +ampersand 0x07 shift +yen 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +braceleft 0x08 altgr +division 0x08 shift altgr +parenleft 0x09 shift +bracketleft 0x09 altgr +guillemotleft 0x09 shift altgr +parenright 0x0a shift +bracketright 0x0a altgr +guillemotright 0x0a shift altgr +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +plus 0x0c +question 0x0c shift +plusminus 0x0c altgr +questiondown 0x0c shift altgr +dead_acute 0x0d +dead_grave 0x0d shift +bar 0x0d altgr +brokenbar 0x0d shift altgr +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +cent 0x12 shift altgr +registered 0x13 altgr +thorn 0x14 altgr +THORN 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oe 0x18 altgr +OE 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +aring 0x1a +Aring 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +dead_diaeresis 0x1b +dead_circumflex 0x1b shift +dead_tilde 0x1b altgr +dead_caron 0x1b shift altgr +ordfeminine 0x1e altgr +masculine 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +ae 0x27 +AE 0x27 shift +oslash 0x28 +Ooblique 0x28 shift +dead_caron 0x28 shift altgr +onehalf 0x29 +section 0x29 shift +threequarters 0x29 altgr +paragraph 0x29 shift altgr +apostrophe 0x2b +asterisk 0x2b shift +dead_doubleacute 0x2b altgr +multiply 0x2b shift altgr +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +copyright 0x2e altgr +leftdoublequotemark 0x2f altgr +grave 0x2f shift altgr +rightdoublequotemark 0x30 altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +dead_cedilla 0x33 altgr +dead_ogonek 0x33 shift altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +dead_abovedot 0x34 shift altgr +minus 0x35 +underscore 0x35 shift +hyphen 0x35 altgr +macron 0x35 shift altgr +nobreakspace 0x39 altgr +less 0x56 +greater 0x56 shift +backslash 0x56 altgr +notsign 0x56 shift altgr diff --git a/pc-bios/keymaps/de b/pc-bios/keymaps/de new file mode 100644 index 00000000..ed929c74 --- /dev/null +++ b/pc-bios/keymaps/de @@ -0,0 +1,114 @@ +# generated from XKB map de +include common +map 0x407 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +quotedbl 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr +section 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr +dollar 0x05 shift +onequarter 0x05 altgr +currency 0x05 shift altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +ampersand 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr +equal 0x0b shift +braceright 0x0b altgr +ssharp 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +acute 0x0d +dead_acute 0x0d +grave 0x0d shift +dead_grave 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr +EuroSign 0x12 altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +z 0x15 addupper +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +udiaeresis 0x1a +Udiaeresis 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +plus 0x1b +asterisk 0x1b shift +asciitilde 0x1b altgr +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +odiaeresis 0x27 +Odiaeresis 0x27 shift +dead_doubleacute 0x27 altgr +adiaeresis 0x28 +Adiaeresis 0x28 shift +dead_caron 0x28 shift altgr +asciicircum 0x29 +dead_circumflex 0x29 +degree 0x29 shift +notsign 0x29 altgr +numbersign 0x2b +apostrophe 0x2b shift +dead_breve 0x2b shift altgr +y 0x2c addupper +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +cent 0x2e altgr +copyright 0x2e shift altgr +leftdoublequotemark 0x2f altgr +rightdoublequotemark 0x30 altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/keymaps/de-ch b/pc-bios/keymaps/de-ch new file mode 100644 index 00000000..852f8b8d --- /dev/null +++ b/pc-bios/keymaps/de-ch @@ -0,0 +1,169 @@ +# rdesktop Swiss-German (de-ch) keymap file +# 2003-06-03 by noldi@tristar.ch +# +include common +map 0x00000807 +# +# Scan Code 1 +section 0x29 +degree 0x29 shift +notsign 0x29 altgr inhibit +# +# Scan Code 2 +plus 0x2 shift +brokenbar 0x02 altgr +# +# Scan Code 3 +quotedbl 0x03 shift +at 0x03 altgr +# +# Scan Code 4 +asterisk 0x04 shift +numbersign 0x04 altgr +# +# Scan Code 5 +ccedilla 0x05 shift +onequarter 0x05 altgr inhibit +# +# Scan Code 6 +percent 0x06 shift +onehalf 0x06 altgr inhibit +# +# Scan Code 7 +ampersand 0x07 shift +notsign 0x07 altgr +# +# Scan Code 8 +slash 0x08 shift +bar 0x08 altgr +# +# Scan Code 9 +parenleft 0x09 shift +cent 0x09 altgr +# +# Scan Code 10 +parenright 0x0a shift +# +# Scan Code 11 +equal 0x0b shift +braceright 0x0b altgr inhibit +# +# Scan Code 12 +apostrophe 0x0c +question 0x0c shift +dead_acute 0x0c altgr +# +# Scan Code 13 +dead_circumflex 0x0d +dead_grave 0x0d shift +dead_tilde 0x0d altgr +# +# Scan Code 19 +EuroSign 0x12 altgr +# +# Scan Code 22 +z 0x15 addupper +# +# Scan Code 27 +udiaeresis 0x1a +egrave 0x1a shift +bracketleft 0x1a altgr +# +# Scan Code 28 +dead_diaeresis 0x1b +exclam 0x1b shift +bracketright 0x1b altgr +# +# Scan Code 40 +odiaeresis 0x27 +eacute 0x27 shift +# +# Scan Code 41 +adiaeresis 0x28 +agrave 0x28 shift +braceleft 0x28 altgr +# +# Scan Code 42 (only on international keyboards) +dollar 0x2b +sterling 0x2b shift +braceright 0x2b altgr +# +# Scan Code 45 (only on international keyboards) +backslash 0x56 altgr +# +# Scan Code 46 +y 0x2c addupper +# +# Scan Code 53 +comma 0x33 +semicolon 0x33 shift +# +# Scan Code 54 +period 0x34 +colon 0x34 shift +# +# Scan Code 55 +minus 0x35 +underscore 0x35 shift +# +# Suppress Windows unsupported AltGr keys +# +# Scan Code 17 +paragraph 0x10 altgr inhibit +# +# Scan Code 21 +tslash 0x14 altgr inhibit +# +# Scan Code 22 +leftarrow 0x15 altgr inhibit +# +# Scan Code 23 +downarrow 0x16 altgr inhibit +# +# Scan Code 24 +rightarrow 0x17 altgr inhibit +# +# Scan Code 25 +oslash 0x18 altgr inhibit +# +# Scan Code 26 +thorn 0x19 altgr inhibit +# +# Scan Code 31 +ae 0x1e altgr inhibit +# +# Scan Code 32 +ssharp 0x1f altgr inhibit +# +# Scan Code 33 +eth 0x20 altgr inhibit +# +# Scan Code 34 +dstroke 0x21 altgr inhibit +# +# Scan Code 35 +eng 0x22 altgr inhibit +# +# Scan Code 36 +hstroke 0x23 altgr inhibit +# +# Scan Code 38 +kra 0x25 altgr inhibit +# +# Scan Code 39 +lstroke 0x26 altgr inhibit +# +# Scan Code 46 +guillemotleft 0x2c altgr inhibit +# +# Scan Code 47 +guillemotright 0x2d altgr inhibit +# +# Scan Code 49 +leftdoublequotemark 0x2f altgr inhibit +# +# Scan Code 50 +rightdoublequotemark 0x30 altgr inhibit +# +# Scan Code 52 +mu 0x32 altgr inhibit diff --git a/pc-bios/keymaps/en-gb b/pc-bios/keymaps/en-gb new file mode 100644 index 00000000..b45f06c7 --- /dev/null +++ b/pc-bios/keymaps/en-gb @@ -0,0 +1,119 @@ +# generated from XKB map gb +include common +map 0x809 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +quotedbl 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr +sterling 0x04 shift +threesuperior 0x04 altgr +dollar 0x05 shift +EuroSign 0x05 altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +asciicircum 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr +ampersand 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +asterisk 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr +parenleft 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr +parenright 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +minus 0x0c +underscore 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +equal 0x0d +plus 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +bracketleft 0x1a +braceleft 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +bracketright 0x1b +braceright 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +semicolon 0x27 +colon 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr +apostrophe 0x28 +at 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr +grave 0x29 +notsign 0x29 shift +bar 0x29 altgr +numbersign 0x2b +asciitilde 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr +guillemotleft 0x2c altgr +less 0x2c shift altgr +guillemotright 0x2d altgr +greater 0x2d shift altgr +cent 0x2e altgr +copyright 0x2e shift altgr +leftdoublequotemark 0x2f altgr +rightdoublequotemark 0x30 altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +less 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +greater 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +slash 0x35 +question 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr +backslash 0x56 +bar 0x56 shift diff --git a/pc-bios/keymaps/en-us b/pc-bios/keymaps/en-us new file mode 100644 index 00000000..f5784bbb --- /dev/null +++ b/pc-bios/keymaps/en-us @@ -0,0 +1,35 @@ +# generated from XKB map us +include common +map 0x409 +exclam 0x02 shift +at 0x03 shift +numbersign 0x04 shift +dollar 0x05 shift +percent 0x06 shift +asciicircum 0x07 shift +ampersand 0x08 shift +asterisk 0x09 shift +parenleft 0x0a shift +parenright 0x0b shift +minus 0x0c +underscore 0x0c shift +equal 0x0d +plus 0x0d shift +bracketleft 0x1a +braceleft 0x1a shift +bracketright 0x1b +braceright 0x1b shift +semicolon 0x27 +colon 0x27 shift +apostrophe 0x28 +quotedbl 0x28 shift +grave 0x29 +asciitilde 0x29 shift +backslash 0x2b +bar 0x2b shift +comma 0x33 +less 0x33 shift +period 0x34 +greater 0x34 shift +slash 0x35 +question 0x35 shift diff --git a/pc-bios/keymaps/es b/pc-bios/keymaps/es new file mode 100644 index 00000000..0c29eec5 --- /dev/null +++ b/pc-bios/keymaps/es @@ -0,0 +1,105 @@ +# generated from XKB map es +include common +map 0x40a +exclam 0x02 shift +bar 0x02 altgr +quotedbl 0x03 shift +at 0x03 altgr +oneeighth 0x03 shift altgr +periodcentered 0x04 shift +numbersign 0x04 altgr +sterling 0x04 shift altgr +dollar 0x05 shift +asciitilde 0x05 altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +ampersand 0x07 shift +notsign 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +seveneighths 0x08 shift altgr +parenleft 0x09 shift +trademark 0x09 shift altgr +parenright 0x0a shift +plusminus 0x0a shift altgr +equal 0x0b shift +degree 0x0b shift altgr +apostrophe 0x0c +question 0x0c shift +exclamdown 0x0d +questiondown 0x0d shift +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +dead_grave 0x1a +dead_circumflex 0x1a shift +bracketleft 0x1a altgr +dead_abovering 0x1a shift altgr +plus 0x1b +asterisk 0x1b shift +bracketright 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +ntilde 0x27 +Ntilde 0x27 shift +dead_doubleacute 0x27 shift altgr +dead_acute 0x28 +dead_diaeresis 0x28 shift +braceleft 0x28 altgr +masculine 0x29 +ordfeminine 0x29 shift +backslash 0x29 altgr +ccedilla 0x2b +Ccedilla 0x2b shift +braceright 0x2b altgr +dead_breve 0x2b shift altgr +guillemotleft 0x2c altgr +less 0x56 +greater 0x56 shift +guillemotright 0x2d altgr +cent 0x2e altgr +copyright 0x2e shift altgr +leftdoublequotemark 0x2f altgr +grave 0x2f shift altgr +rightdoublequotemark 0x30 altgr +mu 0x32 altgr +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +colon 0x34 shift +division 0x34 shift altgr +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/keymaps/et b/pc-bios/keymaps/et new file mode 100644 index 00000000..85541a37 --- /dev/null +++ b/pc-bios/keymaps/et @@ -0,0 +1,85 @@ +map 0x00000425 +include common + +# +# Top row +# +dead_caron 0x29 +dead_tilde 0x29 shift + +# 1 +exclam 0x2 shift + +# 2 +quotedbl 0x3 shift +at 0x3 altgr + +# 3 +numbersign 0x4 shift +sterling 0x4 altgr +# 4 +currency 0x5 shift +dollar 0x5 altgr +# 5 +percent 0x6 shift +# 6 +ampersand 0x7 shift +# 7 +slash 0x8 shift +braceleft 0x8 altgr +# 8 +parenleft 0x9 shift +bracketleft 0x9 altgr +# 9 +parenright 0xa shift +bracketright 0xa altgr +# 0 +equal 0xb shift +braceright 0xb altgr + +plus 0xc +question 0xc shift +backslash 0xc altgr + +acute 0xd +dead_acute 0xd +grave 0xd shift +dead_grave 0xd shift + +# +# QWERTY first row +# +EuroSign 0x12 altgr +udiaeresis 0x1a +Udiaeresis 0x1a shift +otilde 0x1b +Otilde 0x1b shift +section 0x1b altgr + +# +# QWERTY second row +# +scaron 0x1f altgr +Scaron 0x1f altgr shift +odiaeresis 0x27 +Odiaeresis 0x27 shift +adiaeresis 0x28 +Adiaeresis 0x28 shift +asciicircum 0x28 altgr +apostrophe 0x2b +asterisk 0x2b shift +onehalf 0x2b altgr +# +# QWERTY third row +# +less 0x56 +greater 0x56 shift +bar 0x56 altgr +zcaron 0x2c altgr +Zcaron 0x2c altgr shift +comma 0x33 +semicolon 0x33 shift +period 0x34 +colon 0x34 shift +minus 0x35 +underscore 0x35 shift diff --git a/pc-bios/keymaps/fi b/pc-bios/keymaps/fi new file mode 100644 index 00000000..4be75865 --- /dev/null +++ b/pc-bios/keymaps/fi @@ -0,0 +1,122 @@ +# generated from XKB map se_FI +include common +map 0x40b +exclam 0x02 shift +exclamdown 0x02 altgr +onesuperior 0x02 shift altgr +quotedbl 0x03 shift +at 0x03 altgr +twosuperior 0x03 shift altgr +numbersign 0x04 shift +sterling 0x04 altgr +threesuperior 0x04 shift altgr +currency 0x05 shift +dollar 0x05 altgr +onequarter 0x05 shift altgr +percent 0x06 shift +onehalf 0x06 altgr +cent 0x06 shift altgr +ampersand 0x07 shift +yen 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +braceleft 0x08 altgr +division 0x08 shift altgr +parenleft 0x09 shift +bracketleft 0x09 altgr +guillemotleft 0x09 shift altgr +parenright 0x0a shift +bracketright 0x0a altgr +guillemotright 0x0a shift altgr +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +plus 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +dead_acute 0x0d +dead_grave 0x0d shift +plusminus 0x0d altgr +notsign 0x0d shift altgr +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +cent 0x12 shift altgr +registered 0x13 altgr +thorn 0x14 altgr +THORN 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oe 0x18 altgr +OE 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +aring 0x1a +Aring 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +dead_diaeresis 0x1b +dead_circumflex 0x1b shift +dead_tilde 0x1b altgr +dead_caron 0x1b shift altgr +ordfeminine 0x1e altgr +masculine 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +ampersand 0x25 shift altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +odiaeresis 0x27 +Odiaeresis 0x27 shift +oslash 0x27 altgr +Ooblique 0x27 shift altgr +adiaeresis 0x28 +Adiaeresis 0x28 shift +ae 0x28 altgr +AE 0x28 shift altgr +section 0x29 +onehalf 0x29 shift +paragraph 0x29 altgr +threequarters 0x29 shift altgr +apostrophe 0x2b +asterisk 0x2b shift +acute 0x2b altgr +multiply 0x2b shift altgr +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +copyright 0x2e altgr +leftdoublequotemark 0x2f altgr +grave 0x2f shift altgr +rightdoublequotemark 0x30 altgr +apostrophe 0x30 shift altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +dead_cedilla 0x33 altgr +dead_ogonek 0x33 shift altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +dead_abovedot 0x34 shift altgr +minus 0x35 +underscore 0x35 shift +hyphen 0x35 altgr +macron 0x35 shift altgr +nobreakspace 0x39 altgr diff --git a/pc-bios/keymaps/fo b/pc-bios/keymaps/fo new file mode 100644 index 00000000..c00d9d4d --- /dev/null +++ b/pc-bios/keymaps/fo @@ -0,0 +1,76 @@ +map 0x438 +include common + +# +# Top row +# +onehalf 0x29 +section 0x29 shift + +# 1 +exclam 0x2 shift + +# 2 +quotedbl 0x3 shift +at 0x3 altgr + +# 3 +numbersign 0x4 shift +sterling 0x4 altgr +# 4 +currency 0x5 shift +dollar 0x5 altgr +# 5 +percent 0x6 shift +# 6 +ampersand 0x7 shift +# 7 +slash 0x8 shift +braceleft 0x8 altgr +# 8 +parenleft 0x9 shift +bracketleft 0x9 altgr +# 9 +parenright 0xa shift +bracketright 0xa altgr +# 0 +equal 0xb shift +braceright 0xb altgr + +plus 0xc +question 0xc shift +plusminus 0xc altgr + +bar 0xd altgr +dead_acute 0xd + +# +# QWERTY first row +# +EuroSign 0x12 altgr +aring 0x1a +Aring 0x1a shift +eth 0x1b addupper +asciitilde 0x1b altgr + +# +# QWERTY second row +# +ae 0x27 addupper +oslash 0x28 +Ooblique 0x28 shift +apostrophe 0x2b +asterisk 0x2b shift + +# +# QWERTY third row +# +less 0x56 +greater 0x56 shift +backslash 0x56 altgr +comma 0x33 +semicolon 0x33 shift +period 0x34 +colon 0x34 shift +minus 0x35 +underscore 0x35 shift diff --git a/pc-bios/keymaps/fr b/pc-bios/keymaps/fr new file mode 100644 index 00000000..ba5a176c --- /dev/null +++ b/pc-bios/keymaps/fr @@ -0,0 +1,181 @@ +include common +map 0x40c +# +# Top row +# +twosuperior 0x29 +notsign 0x29 altgr + +ampersand 0x02 +1 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +eacute 0x03 +2 0x03 shift +asciitilde 0x03 altgr +oneeighth 0x03 shift altgr + +quotedbl 0x04 +3 0x04 shift +numbersign 0x04 altgr + +apostrophe 0x05 +4 0x05 shift +braceleft 0x05 altgr + +parenleft 0x06 +5 0x06 shift +bracketleft 0x06 altgr +threeeighths 0x06 shift altgr + +minus 0x07 +6 0x07 shift +bar 0x07 altgr +fiveeighths 0x07 shift altgr + +egrave 0x08 +7 0x08 shift +grave 0x08 altgr +seveneighths 0x08 shift altgr + +underscore 0x09 +8 0x09 shift +backslash 0x09 altgr +trademark 0x09 shift altgr + +ccedilla 0x0a +9 0x0a shift +asciicircum 0x0a altgr +plusminus 0x0a shift altgr + +agrave 0x0b +0 0x0b shift +at 0x0b altgr + +parenright 0x0c +degree 0x0c shift +bracketright 0x0c altgr +questiondown 0x0c shift altgr + +equal 0x0d +plus 0x0d shift +braceright 0x0d altgr +dead_ogonek 0x0d shift altgr + +# +# AZERTY first row +# + +a 0x10 addupper +ae 0x10 altgr +AE 0x10 shift altgr + +z 0x11 addupper +guillemotleft 0x11 altgr + +EuroSign 0x12 altgr + +paragraph 0x13 altgr +registered 0x13 shift altgr + +tslash 0x14 altgr +Tslash 0x14 shift altgr + +leftarrow 0x15 altgr +yen 0x15 shift altgr + +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +oslash 0x18 altgr +Ooblique 0x18 shift altgr + +thorn 0x19 altgr +THORN 0x19 shift altgr + +dead_circumflex 0x1a +dead_diaeresis 0x1a shift +dead_abovering 0x1a shift altgr + +dollar 0x1b +sterling 0x1b shift +currency 0x1b altgr +dead_macron 0x1b shift altgr + +# +# AZERTY second row +# +q 0x1e addupper +Greek_OMEGA 0x1e shift altgr + +ssharp 0x1f altgr + +eth 0x20 altgr +ETH 0x20 shift altgr + +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +eng 0x22 altgr +ENG 0x22 shift altgr + +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +kra 0x25 altgr + +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +m 0x27 addupper +masculine 0x27 shift altgr + +ugrave 0x28 +percent 0x28 shift +dead_caron 0x28 shift altgr + +asterisk 0x2b +mu 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr + +# +# AZERTY third row +# +less 0x56 +greater 0x56 shift + +w 0x2c addupper + +guillemotright 0x2d altgr + +cent 0x2e altgr +copyright 0x2e shift altgr + +leftdoublequotemark 0x2f altgr + +rightdoublequotemark 0x30 altgr + +comma 0x32 +question 0x32 shift +dead_acute 0x32 altgr +dead_doubleacute 0x32 shift altgr + +semicolon 0x33 +period 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +colon 0x34 +slash 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +exclam 0x35 +section 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/keymaps/fr-be b/pc-bios/keymaps/fr-be new file mode 100644 index 00000000..62f71286 --- /dev/null +++ b/pc-bios/keymaps/fr-be @@ -0,0 +1,134 @@ +# generated from XKB map be +include common +map 0x80c +ampersand 0x02 +1 0x02 shift +bar 0x02 altgr +exclamdown 0x02 shift altgr +eacute 0x03 +2 0x03 shift +at 0x03 altgr +oneeighth 0x03 shift altgr +quotedbl 0x04 +3 0x04 shift +numbersign 0x04 altgr +sterling 0x04 shift altgr +apostrophe 0x05 +4 0x05 shift +onequarter 0x05 altgr +dollar 0x05 shift altgr +parenleft 0x06 +5 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +section 0x07 +6 0x07 shift +asciicircum 0x07 altgr +fiveeighths 0x07 shift altgr +egrave 0x08 +7 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +exclam 0x09 +8 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr +ccedilla 0x0a +9 0x0a shift +braceleft 0x0a altgr +plusminus 0x0a shift altgr +agrave 0x0b +0 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +parenright 0x0c +degree 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +minus 0x0d +underscore 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr +a 0x10 addupper +Greek_OMEGA 0x10 shift altgr +z 0x11 addupper +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +cent 0x12 shift altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +dead_circumflex 0x1a +dead_diaeresis 0x1a shift +bracketleft 0x1a altgr +dead_abovering 0x1a shift altgr +dollar 0x1b +asterisk 0x1b shift +bracketright 0x1b altgr +dead_macron 0x1b shift altgr +q 0x1e addupper +ae 0x1e altgr +AE 0x1e shift altgr +ssharp 0x1f altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +m 0x27 addupper +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr +ugrave 0x28 +percent 0x28 shift +dead_acute 0x28 altgr +dead_caron 0x28 shift altgr +twosuperior 0x29 +threesuperior 0x29 shift +notsign 0x29 altgr +mu 0x2b +sterling 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr +w 0x2c addupper +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +cent 0x2e altgr +copyright 0x2e shift altgr +leftdoublequotemark 0x2f altgr +grave 0x2f shift altgr +rightdoublequotemark 0x30 altgr +comma 0x32 +question 0x32 shift +dead_cedilla 0x32 altgr +masculine 0x32 shift altgr +semicolon 0x33 +period 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +colon 0x34 +slash 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +equal 0x35 +plus 0x35 shift +dead_tilde 0x35 altgr +dead_abovedot 0x35 shift altgr +backslash 0x56 altgr diff --git a/pc-bios/keymaps/fr-ca b/pc-bios/keymaps/fr-ca new file mode 100644 index 00000000..b645208e --- /dev/null +++ b/pc-bios/keymaps/fr-ca @@ -0,0 +1,50 @@ +# Canadian French +# By Simon Germain +include common +map 0xc0c + +backslash 0x29 altgr +plusminus 0x2 altgr +at 0x3 altgr +sterling 0x4 altgr +cent 0x5 altgr +currency 0x6 altgr +notsign 0x7 altgr +bar 0x29 shift +twosuperior 0x9 altgr +threesuperior 0xa altgr +onequarter 0xb altgr +onehalf 0xc altgr +threequarters 0xd altgr +section 0x18 altgr +paragraph 0x19 altgr +bracketleft 0x1a altgr +bracketright 0x1b altgr +asciitilde 0x27 altgr +braceleft 0x28 altgr +braceright 0x2b altgr +less 0x2b +greater 0x2b shift +guillemotleft 0x56 +guillemotright 0x56 shift +degree 0x56 altgr +mu 0x32 altgr +eacute 0x35 +dead_acute 0x35 altgr +dead_grave 0x28 +dead_circumflex 0x1a +dead_circumflex 0x1a shift +dead_cedilla 0x1b +dead_diaeresis 0x1b shift +exclam 0x2 shift +quotedbl 0x3 shift +slash 0x4 shift +dollar 0x5 shift +percent 0x6 shift +question 0x7 shift +ampersand 0x8 shift +asterisk 0x9 shift +parenleft 0xa shift +parenright 0xb shift +underscore 0xc shift +plus 0xd shift diff --git a/pc-bios/keymaps/fr-ch b/pc-bios/keymaps/fr-ch new file mode 100644 index 00000000..4620d203 --- /dev/null +++ b/pc-bios/keymaps/fr-ch @@ -0,0 +1,114 @@ +# generated from XKB map fr_CH +include common +map 0x100c +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +quotedbl 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr +section 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr +dollar 0x05 shift +onequarter 0x05 altgr +currency 0x05 shift altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +ampersand 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr +equal 0x0b shift +braceright 0x0b altgr +ssharp 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +acute 0x0d +dead_acute 0x0d +grave 0x0d shift +dead_grave 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr +EuroSign 0x12 altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +z 0x15 addupper +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +udiaeresis 0x1a +Udiaeresis 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +plus 0x1b +asterisk 0x1b shift +asciitilde 0x1b altgr +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +odiaeresis 0x27 +Odiaeresis 0x27 shift +dead_doubleacute 0x27 altgr +adiaeresis 0x28 +Adiaeresis 0x28 shift +dead_caron 0x28 shift altgr +asciicircum 0x29 +dead_circumflex 0x29 +degree 0x29 shift +notsign 0x29 altgr +numbersign 0x2b +apostrophe 0x2b shift +dead_breve 0x2b shift altgr +y 0x2c addupper +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +cent 0x2e altgr +copyright 0x2e shift altgr +leftdoublequotemark 0x2f altgr +rightdoublequotemark 0x30 altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/keymaps/hr b/pc-bios/keymaps/hr new file mode 100644 index 00000000..613aa692 --- /dev/null +++ b/pc-bios/keymaps/hr @@ -0,0 +1,125 @@ +# generated from XKB map hr +include common +map 0x41a +exclam 0x02 shift +asciitilde 0x02 altgr +dead_tilde 0x02 shift altgr +quotedbl 0x03 shift +dead_caron 0x03 altgr +caron 0x03 shift altgr +numbersign 0x04 shift +asciicircum 0x04 altgr +dead_circumflex 0x04 shift altgr +dollar 0x05 shift +dead_breve 0x05 altgr +breve 0x05 shift altgr +percent 0x06 shift +degree 0x06 altgr +dead_abovering 0x06 shift altgr +ampersand 0x07 shift +dead_ogonek 0x07 altgr +ogonek 0x07 shift altgr +slash 0x08 shift +grave 0x08 altgr +dead_grave 0x08 shift altgr +parenleft 0x09 shift +dead_abovedot 0x09 altgr +abovedot 0x09 shift altgr +parenright 0x0a shift +dead_acute 0x0a altgr +apostrophe 0x0a shift altgr +equal 0x0b shift +dead_doubleacute 0x0b altgr +doubleacute 0x0b shift altgr +apostrophe 0x0c +question 0x0c shift +dead_diaeresis 0x0c altgr +diaeresis 0x0c shift altgr +plus 0x0d +asterisk 0x0d shift +dead_cedilla 0x0d altgr +cedilla 0x0d shift altgr +backslash 0x10 altgr +Greek_OMEGA 0x10 shift altgr +bar 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +z 0x15 addupper +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +scaron 0x1a +Scaron 0x1a shift +division 0x1a altgr +dead_abovering 0x1a shift altgr +dstroke 0x1b +Dstroke 0x1b shift +multiply 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +bracketleft 0x21 altgr +ordfeminine 0x21 shift altgr +bracketright 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +lstroke 0x25 altgr +ampersand 0x25 shift altgr +Lstroke 0x26 altgr +ccaron 0x27 +Ccaron 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr +cacute 0x28 +Cacute 0x28 shift +ssharp 0x28 altgr +dead_caron 0x28 shift altgr +dead_cedilla 0x29 +dead_diaeresis 0x29 shift +notsign 0x29 altgr +zcaron 0x2b +Zcaron 0x2b shift +currency 0x2b altgr +dead_breve 0x2b shift altgr +y 0x2c addupper +guillemotleft 0x2c altgr +less 0x2c shift altgr +guillemotright 0x2d altgr +greater 0x2d shift altgr +cent 0x2e altgr +copyright 0x2e shift altgr +at 0x2f altgr +grave 0x2f shift altgr +braceleft 0x30 altgr +apostrophe 0x30 shift altgr +braceright 0x31 altgr +section 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/keymaps/hu b/pc-bios/keymaps/hu new file mode 100644 index 00000000..8aba4444 --- /dev/null +++ b/pc-bios/keymaps/hu @@ -0,0 +1,115 @@ +# Hungarian keyboard layout (QWERTZ) +# Created by: The NeverGone <never@delfin.klte.hu> + +include common +map 0x40e + + +# AltGr keys: +notsign 0x29 altgr +asciitilde 0x02 altgr +caron 0x03 altgr +asciicircum 0x04 altgr +breve 0x05 altgr +degree 0x06 altgr +ogonek 0x07 altgr +grave 0x08 altgr +abovedot 0x09 altgr +acute 0x0a altgr +doubleacute 0x0b altgr +diaeresis 0x0c altgr +cedilla 0x0d altgr +backslash 0x10 altgr +bar 0x11 altgr +EuroSign 0x12 altgr +Iacute 0x17 altgr +division 0x1a altgr +multiply 0x1b altgr +dstroke 0x1f altgr +Dstroke 0x20 altgr +bracketleft 0x21 altgr +bracketright 0x22 altgr +iacute 0x24 altgr +lstroke 0x25 altgr +Lstroke 0x26 altgr +dollar 0x27 altgr +ssharp 0x28 altgr +currency 0x2b altgr +less 0x56 altgr +greater 0x2c altgr +numbersign 0x2d altgr +ampersand 0x2e altgr +at 0x2f altgr +braceleft 0x30 altgr +braceright 0x31 altgr +semicolon 0x33 altgr +asterisk 0x35 altgr + + +# Shift keys: +section 0x29 shift +apostrophe 0x02 shift +quotedbl 0x03 shift +plus 0x04 shift +exclam 0x05 shift +percent 0x06 shift +slash 0x07 shift +equal 0x08 shift +parenleft 0x09 shift +parenright 0x0a shift +Odiaeresis 0x0b shift +Udiaeresis 0x0c shift +Oacute 0x0d shift +Z 0x15 shift +Odoubleacute 0x1a shift +Uacute 0x1b shift +Eacute 0x27 shift +Aacute 0x28 shift +Udoubleacute 0x2b shift +Y 0x2c shift +question 0x33 shift +colon 0x34 shift +underscore 0x35 shift +F13 0x3b shift +F14 0x3c shift +F15 0x3d shift +F16 0x3e shift +F17 0x3f shift +F18 0x40 shift +F19 0x41 shift +F20 0x42 shift +F21 0x43 shift +F22 0x44 shift +F23 0x57 shift +F24 0x58 shift + + +# Ctrl keys: +F25 0x3b ctrl +F26 0x3c ctrl +F27 0x3d ctrl +F28 0x3e ctrl +F29 0x3f ctrl +F30 0x40 ctrl +F31 0x41 ctrl +F32 0x42 ctrl +F33 0x43 ctrl +F34 0x44 ctrl +F35 0x57 ctrl +#NoSymbol 0x58 ctrl + + +0 0x29 +odiaeresis 0x0b +udiaeresis 0x0c +oacute 0x0d +z 0x15 +odoubleacute 0x1a +uacute 0x1b +eacute 0x27 +aacute 0x28 +udoubleacute 0x2b +y 0x2c +comma 0x33 +period 0x34 +minus 0x35 diff --git a/pc-bios/keymaps/is b/pc-bios/keymaps/is new file mode 100644 index 00000000..935ac1da --- /dev/null +++ b/pc-bios/keymaps/is @@ -0,0 +1,139 @@ +# 2004-03-16 Halldór Guðmundsson and Morten Lange +# Keyboard definition file for the Icelandic keyboard +# to be used in rdesktop 1.3.x ( See rdesktop.org) +# generated from XKB map de, and changed manually +# Location for example /usr/local/share/rdesktop/keymaps/is +include common +map 0x40f +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +quotedbl 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr +#section 0x04 shift +numbersign 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr +dollar 0x05 shift +onequarter 0x05 altgr +currency 0x05 shift altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +ampersand 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr +equal 0x0b shift +braceright 0x0b altgr +#ssharp 0x0c +odiaeresis 0x0c +#question 0x0c shift +Odiaeresis 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +#acute 0x0d +minus  0x0d +#dead_acute 0x0d +#grave 0x0d shift +#dead_grave 0x0d shift +underscore 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr +EuroSign 0x12 altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +#z 0x15 addupper +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +#thorn 0x19 altgr +#THORN 0x19 shift altgr +#udiaeresis 0x1a +#Udiaeresis 0x1a shift +#dead_diaeresis 0x1a altgr +#dead_abovering 0x1a shift altgr +eth 0x1a +ETH 0x1a shift +apostrophe 0x1b +question 0x1b shift +#plus 0x1b +#asterisk 0x1b shift +asciitilde 0x1b altgr +#grave 0x1b altgr +#dead_tilde 0x1b altgr +#dead_macron 0x1b shift altgr +#ae 0x1e altgr +#AE 0x1e shift altgr +#eth 0x20 altgr +#eth 0x20 +#ETH 0x20 shift altgr +#ETH 0x20 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +#adiaeresis 0x27 +#Adiaeresis 0x27 shift +ae 0x27 +AE 0x27 shift +dead_doubleacute 0x27 altgr +#adiaeresis 0x28 +#Adiaeresis 0x28 shift +#dead_caron 0x28 shift altgr +#asciicircum 0x29 +acute  0x28 +dead_acute 0x28 +#dead_circumflex 0x29 +#degree 0x29 shift +#notsign 0x29 altgr +plus 0x2b +asterisk 0x2b shift +grave 0x2b altgr +#numbersign 0x2b +#apostrophe 0x2b shift +#dead_breve 0x2b shift altgr +#y 0x2c addupper +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +cent 0x2e altgr +copyright 0x2e shift altgr +leftdoublequotemark 0x2f altgr +rightdoublequotemark 0x30 altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +#minus 0x35 +#underscore 0x35 shift +thorn 0x35 +THORN 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/keymaps/it b/pc-bios/keymaps/it new file mode 100644 index 00000000..00ca73a3 --- /dev/null +++ b/pc-bios/keymaps/it @@ -0,0 +1,115 @@ +# generated from XKB map it +include common +map 0x410 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +quotedbl 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr +sterling 0x04 shift +threesuperior 0x04 altgr +dollar 0x05 shift +onequarter 0x05 altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +ampersand 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +parenleft 0x09 shift +trademark 0x09 shift altgr +parenright 0x0a shift +plusminus 0x0a shift altgr +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +apostrophe 0x0c +question 0x0c shift +grave 0x0c altgr +questiondown 0x0c shift altgr +igrave 0x0d +asciicircum 0x0d shift +asciitilde 0x0d altgr +dead_ogonek 0x0d shift altgr +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +cent 0x12 shift altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +egrave 0x1a +eacute 0x1a shift +bracketleft 0x1a altgr +dead_abovering 0x1a shift altgr +plus 0x1b +asterisk 0x1b shift +bracketright 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +ograve 0x27 +ccedilla 0x27 shift +at 0x27 altgr +dead_doubleacute 0x27 shift altgr +agrave 0x28 +degree 0x28 shift +numbersign 0x28 altgr +backslash 0x29 +bar 0x29 shift +notsign 0x29 altgr +ugrave 0x2b +section 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +cent 0x2e altgr +copyright 0x2e shift altgr +leftdoublequotemark 0x2f altgr +grave 0x2f shift altgr +rightdoublequotemark 0x30 altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/keymaps/ja b/pc-bios/keymaps/ja new file mode 100644 index 00000000..9d90a78c --- /dev/null +++ b/pc-bios/keymaps/ja @@ -0,0 +1,109 @@ +# generated from XKB map jp106 +include common +map 0x411 +exclam 0x02 shift +kana_NU 0x02 altgr +quotedbl 0x03 shift +kana_FU 0x03 altgr +numbersign 0x04 shift +kana_A 0x04 altgr +kana_a 0x04 shift altgr +dollar 0x05 shift +kana_U 0x05 altgr +kana_u 0x05 shift altgr +percent 0x06 shift +kana_E 0x06 altgr +kana_e 0x06 shift altgr +ampersand 0x07 shift +kana_O 0x07 altgr +kana_o 0x07 shift altgr +apostrophe 0x08 shift +kana_YA 0x08 altgr +kana_ya 0x08 shift altgr +parenleft 0x09 shift +kana_YU 0x09 altgr +kana_yu 0x09 shift altgr +parenright 0x0a shift +kana_YO 0x0a altgr +kana_yo 0x0a shift altgr +asciitilde 0x0b shift +kana_WA 0x0b altgr +kana_WO 0x0b shift altgr +minus 0x0c +equal 0x0c shift +kana_HO 0x0c altgr +asciicircum 0x0d +asciitilde 0x0d shift +kana_HE 0x0d altgr +kana_TA 0x10 altgr +kana_TE 0x11 altgr +kana_I 0x12 altgr +kana_i 0x12 shift altgr +kana_SU 0x13 altgr +kana_KA 0x14 altgr +kana_N 0x15 altgr +kana_NA 0x16 altgr +kana_NI 0x17 altgr +kana_RA 0x18 altgr +kana_SE 0x19 altgr +at 0x1a +grave 0x1a shift +voicedsound 0x1a altgr +bracketleft 0x1b +braceleft 0x1b shift +semivoicedsound 0x1b altgr +kana_openingbracket 0x1b shift altgr +kana_CHI 0x1e altgr +kana_TO 0x1f altgr +kana_SHI 0x20 altgr +kana_HA 0x21 altgr +kana_KI 0x22 altgr +kana_KU 0x23 altgr +kana_MA 0x24 altgr +kana_NO 0x25 altgr +kana_RI 0x26 altgr +semicolon 0x27 +plus 0x27 shift +kana_RE 0x27 altgr +colon 0x28 +asterisk 0x28 shift +kana_KE 0x28 altgr +Zenkaku_Hankaku 0x29 +bracketright 0x2b +braceright 0x2b shift +kana_MU 0x2b altgr +kana_closingbracket 0x2b shift altgr +kana_TSU 0x2c altgr +kana_tsu 0x2c shift altgr +kana_SA 0x2d altgr +kana_SO 0x2e altgr +kana_HI 0x2f altgr +kana_KO 0x30 altgr +kana_MI 0x31 altgr +kana_MO 0x32 altgr +comma 0x33 +less 0x33 shift +kana_NE 0x33 altgr +kana_comma 0x33 shift altgr +period 0x34 +greater 0x34 shift +kana_RU 0x34 altgr +kana_fullstop 0x34 shift altgr +slash 0x35 +question 0x35 shift +kana_ME 0x35 altgr +kana_conjunctive 0x35 shift altgr +Eisu_toggle 0x3a shift +Execute 0x54 shift +Kanji 0x70 +backslash 0x73 +yen 0x7d +bar 0x7d shift +underscore 0x73 shift +Henkan_Mode 0x79 +Katakana_Real 0x70 +Katakana 0x70 +Muhenkan 0x7b +Henkan_Mode_Real 0x79 +Henkan_Mode_Ultra 0x79 +backslash_ja 0x73 diff --git a/pc-bios/keymaps/lt b/pc-bios/keymaps/lt new file mode 100644 index 00000000..3d9d619e --- /dev/null +++ b/pc-bios/keymaps/lt @@ -0,0 +1,57 @@ +# generated from XKB map lt +include common +map 0x427 +exclam 0x02 shift +aogonek 0x02 altgr +Aogonek 0x02 shift altgr +at 0x03 shift +ccaron 0x03 altgr +Ccaron 0x03 shift altgr +numbersign 0x04 shift +eogonek 0x04 altgr +Eogonek 0x04 shift altgr +dollar 0x05 shift +eabovedot 0x05 altgr +Eabovedot 0x05 shift altgr +percent 0x06 shift +iogonek 0x06 altgr +Iogonek 0x06 shift altgr +asciicircum 0x07 shift +scaron 0x07 altgr +Scaron 0x07 shift altgr +ampersand 0x08 shift +uogonek 0x08 altgr +Uogonek 0x08 shift altgr +asterisk 0x09 shift +umacron 0x09 altgr +Umacron 0x09 shift altgr +parenleft 0x0a shift +doublelowquotemark 0x0a altgr +parenright 0x0b shift +leftdoublequotemark 0x0b altgr +minus 0x0c +underscore 0x0c shift +equal 0x0d +plus 0x0d shift +zcaron 0x0d altgr +Zcaron 0x0d shift altgr +bracketleft 0x1a +braceleft 0x1a shift +bracketright 0x1b +braceright 0x1b shift +semicolon 0x27 +colon 0x27 shift +apostrophe 0x28 +quotedbl 0x28 shift +grave 0x29 +asciitilde 0x29 shift +backslash 0x2b +bar 0x2b shift +comma 0x33 +less 0x33 shift +period 0x34 +greater 0x34 shift +slash 0x35 +question 0x35 shift +endash 0x56 +EuroSign 0x56 shift diff --git a/pc-bios/keymaps/lv b/pc-bios/keymaps/lv new file mode 100644 index 00000000..1d917279 --- /dev/null +++ b/pc-bios/keymaps/lv @@ -0,0 +1,128 @@ +# generated from XKB map lv +include common +map 0x426 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +at 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr +numbersign 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr +dollar 0x05 shift +EuroSign 0x05 altgr +cent 0x05 shift altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +asciicircum 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr +ampersand 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +asterisk 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr +parenleft 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr +parenright 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +minus 0x0c +underscore 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +equal 0x0d +plus 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +emacron 0x12 altgr +Emacron 0x12 shift altgr +rcedilla 0x13 altgr +Rcedilla 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +umacron 0x16 altgr +Umacron 0x16 shift altgr +imacron 0x17 altgr +Imacron 0x17 shift altgr +omacron 0x18 altgr +Omacron 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +bracketleft 0x1a +braceleft 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +bracketright 0x1b +braceright 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr +ISO_Next_Group 0x1c shift +amacron 0x1e altgr +Amacron 0x1e shift altgr +scaron 0x1f altgr +Scaron 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +gcedilla 0x22 altgr +Gcedilla 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kcedilla 0x25 altgr +Kcedilla 0x25 shift altgr +lcedilla 0x26 altgr +Lcedilla 0x26 shift altgr +semicolon 0x27 +colon 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr +apostrophe 0x28 +quotedbl 0x28 shift +leftdoublequotemark 0x28 altgr +doublelowquotemark 0x28 shift altgr +grave 0x29 +asciitilde 0x29 shift +notsign 0x29 altgr +backslash 0x2b +bar 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr +zcaron 0x2c altgr +Zcaron 0x2c shift altgr +guillemotright 0x2d altgr +greater 0x2d shift altgr +ccaron 0x2e altgr +Ccaron 0x2e shift altgr +leftdoublequotemark 0x2f altgr +grave 0x2f shift altgr +rightdoublequotemark 0x30 altgr +apostrophe 0x30 shift altgr +ncedilla 0x31 altgr +Ncedilla 0x31 shift altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +less 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +greater 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +slash 0x35 +question 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr +nobreakspace 0x39 altgr diff --git a/pc-bios/keymaps/mk b/pc-bios/keymaps/mk new file mode 100644 index 00000000..18c15048 --- /dev/null +++ b/pc-bios/keymaps/mk @@ -0,0 +1,101 @@ +# generated from XKB map mk +include common +map 0x42f +exclam 0x02 shift +at 0x03 shift +doublelowquotemark 0x03 shift altgr +numbersign 0x04 shift +leftdoublequotemark 0x04 shift altgr +dollar 0x05 shift +percent 0x06 shift +asciicircum 0x07 shift +ampersand 0x08 shift +asterisk 0x09 shift +parenleft 0x0a shift +parenright 0x0b shift +minus 0x0c +underscore 0x0c shift +equal 0x0d +plus 0x0d shift +Cyrillic_lje 0x10 altgr +Cyrillic_LJE 0x10 shift altgr +Cyrillic_nje 0x11 altgr +Cyrillic_NJE 0x11 shift altgr +Cyrillic_ie 0x12 altgr +Cyrillic_IE 0x12 shift altgr +Cyrillic_er 0x13 altgr +Cyrillic_ER 0x13 shift altgr +Cyrillic_te 0x14 altgr +Cyrillic_TE 0x14 shift altgr +Macedonia_dse 0x15 altgr +Macedonia_DSE 0x15 shift altgr +Cyrillic_u 0x16 altgr +Cyrillic_U 0x16 shift altgr +Cyrillic_i 0x17 altgr +Cyrillic_I 0x17 shift altgr +Cyrillic_o 0x18 altgr +Cyrillic_O 0x18 shift altgr +Cyrillic_pe 0x19 altgr +Cyrillic_PE 0x19 shift altgr +bracketleft 0x1a +braceleft 0x1a shift +Cyrillic_sha 0x1a altgr +Cyrillic_SHA 0x1a shift altgr +bracketright 0x1b +braceright 0x1b shift +Macedonia_gje 0x1b altgr +Macedonia_GJE 0x1b shift altgr +Cyrillic_a 0x1e altgr +Cyrillic_A 0x1e shift altgr +Cyrillic_es 0x1f altgr +Cyrillic_ES 0x1f shift altgr +Cyrillic_de 0x20 altgr +Cyrillic_DE 0x20 shift altgr +Cyrillic_ef 0x21 altgr +Cyrillic_EF 0x21 shift altgr +Cyrillic_ghe 0x22 altgr +Cyrillic_GHE 0x22 shift altgr +Cyrillic_ha 0x23 altgr +Cyrillic_HA 0x23 shift altgr +Cyrillic_je 0x24 altgr +Cyrillic_JE 0x24 shift altgr +Cyrillic_ka 0x25 altgr +Cyrillic_KA 0x25 shift altgr +Cyrillic_el 0x26 altgr +Cyrillic_EL 0x26 shift altgr +semicolon 0x27 +colon 0x27 shift +Cyrillic_che 0x27 altgr +Cyrillic_CHE 0x27 shift altgr +apostrophe 0x28 +quotedbl 0x28 shift +Macedonia_kje 0x28 altgr +Macedonia_KJE 0x28 shift altgr +grave 0x29 +asciitilde 0x29 shift +backslash 0x2b +bar 0x2b shift +Cyrillic_zhe 0x2b altgr +Cyrillic_ZHE 0x2b shift altgr +Cyrillic_ze 0x2c altgr +Cyrillic_ZE 0x2c shift altgr +Cyrillic_dzhe 0x2d altgr +Cyrillic_DZHE 0x2d shift altgr +Cyrillic_tse 0x2e altgr +Cyrillic_TSE 0x2e shift altgr +Cyrillic_ve 0x2f altgr +Cyrillic_VE 0x2f shift altgr +Cyrillic_be 0x30 altgr +Cyrillic_BE 0x30 shift altgr +Cyrillic_en 0x31 altgr +Cyrillic_EN 0x31 shift altgr +Cyrillic_em 0x32 altgr +Cyrillic_EM 0x32 shift altgr +comma 0x33 +less 0x33 shift +semicolon 0x33 shift altgr +period 0x34 +greater 0x34 shift +colon 0x34 shift altgr +slash 0x35 +question 0x35 shift diff --git a/pc-bios/keymaps/modifiers b/pc-bios/keymaps/modifiers new file mode 100644 index 00000000..d73b7a66 --- /dev/null +++ b/pc-bios/keymaps/modifiers @@ -0,0 +1,18 @@ +Shift_R 0x36 +Shift_L 0x2a + +Alt_R 0xb8 +Mode_switch 0xb8 +ISO_Level3_Shift 0xb8 +Alt_L 0x38 + +Control_R 0x9d +Control_L 0x1d + +# Translate Super to Windows keys. +# This is hardcoded. See documentation for details. +Super_R 0xdc +Super_L 0xdb + +# Translate Menu to the Windows Application key. +Menu 0xdd diff --git a/pc-bios/keymaps/nl b/pc-bios/keymaps/nl new file mode 100644 index 00000000..b4892f93 --- /dev/null +++ b/pc-bios/keymaps/nl @@ -0,0 +1,59 @@ +# Dutch (Netherlands) +include common +map 0x413 + +exclam 0x02 shift +onesuperior 0x02 altgr +quotebl 0x03 shift +twosuperior 0x03 altgr +numbersign 0x04 shift +threesuperior 0x04 altgr +dollar 0x05 shift +onequarter 0x05 altgr +percent 0x06 shift +onehalf 0x06 altgr +ampersand 0x07 shift +threequarters 0x07 altgr +underscore 0x08 shift +sterling 0x08 altgr +parenleft 0x09 shift +braceleft 0x09 altgr +parenright 0x0a shift +braceright 0x0a altgr +apostrophe 0x0b shift +slash 0x0c +question 0x0c shift +backslash 0x0c altgr +degree 0x0d +dead_tilde 0x0d shift +dead_cedilla 0x0d altgr +EuroSign 0x12 altgr +paragraph 0x13 altgr +dead_diaeresis 0x1a +dead_circumflex 0x1a shift +asterisk 0x1b +bar 0x1b shift +ssharp 0x1f altgr +plus 0x27 +plusminus 0x27 shift +dead_acute 0x28 +dead_grave 0x28 shift +at 0x29 +section 0x29 shift +notsign 0x29 altgr +less 0x2b +greater 0x2b shift +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +copyright 0x2e altgr +mu 0x32 altgr +comma 0x33 +semicolon 0x33 shift +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +hyphen 0x35 +equal 0x35 shift +bracketright 0x56 +bracketleft 0x56 shift +brokenbar 0x56 altgr diff --git a/pc-bios/keymaps/nl-be b/pc-bios/keymaps/nl-be new file mode 100644 index 00000000..34fc881a --- /dev/null +++ b/pc-bios/keymaps/nl-be @@ -0,0 +1,3 @@ +# Dutch (Belgium) +map 0x813 +include common diff --git a/pc-bios/keymaps/no b/pc-bios/keymaps/no new file mode 100644 index 00000000..40a64790 --- /dev/null +++ b/pc-bios/keymaps/no @@ -0,0 +1,119 @@ +# generated from XKB map no +include common +map 0x414 +exclam 0x02 shift +exclamdown 0x02 altgr +onesuperior 0x02 shift altgr +quotedbl 0x03 shift +at 0x03 altgr +twosuperior 0x03 shift altgr +numbersign 0x04 shift +sterling 0x04 altgr +threesuperior 0x04 shift altgr +currency 0x05 shift +dollar 0x05 altgr +onequarter 0x05 shift altgr +percent 0x06 shift +onehalf 0x06 altgr +cent 0x06 shift altgr +ampersand 0x07 shift +yen 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +braceleft 0x08 altgr +division 0x08 shift altgr +parenleft 0x09 shift +bracketleft 0x09 altgr +guillemotleft 0x09 shift altgr +parenright 0x0a shift +bracketright 0x0a altgr +guillemotright 0x0a shift altgr +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +plus 0x0c +question 0x0c shift +plusminus 0x0c altgr +questiondown 0x0c shift altgr +backslash 0x0d +dead_grave 0x0d shift +dead_acute 0x0d altgr +notsign 0x0d shift altgr +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +cent 0x12 shift altgr +registered 0x13 altgr +thorn 0x14 altgr +THORN 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oe 0x18 altgr +OE 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +aring 0x1a +Aring 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +dead_diaeresis 0x1b +dead_circumflex 0x1b shift +asciicircum 0x01b shift +dead_tilde 0x1b altgr +asciitilde 0x1b altgr +dead_caron 0x1b shift altgr +ordfeminine 0x1e altgr +masculine 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +oslash 0x27 +Ooblique 0x27 shift +dead_doubleacute 0x27 shift altgr +ae 0x28 +AE 0x28 shift +dead_caron 0x28 shift altgr +bar 0x29 +section 0x29 shift +brokenbar 0x29 altgr +paragraph 0x29 shift altgr +apostrophe 0x2b +asterisk 0x2b shift +multiply 0x2b shift altgr +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +copyright 0x2e altgr +leftdoublequotemark 0x2f altgr +rightdoublequotemark 0x30 altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +dead_cedilla 0x33 altgr +dead_ogonek 0x33 shift altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +dead_abovedot 0x34 shift altgr +minus 0x35 +underscore 0x35 shift +hyphen 0x35 altgr +macron 0x35 shift altgr +nobreakspace 0x39 altgr +onehalf 0x56 altgr +threequarters 0x56 shift altgr diff --git a/pc-bios/keymaps/pl b/pc-bios/keymaps/pl new file mode 100644 index 00000000..09c600d3 --- /dev/null +++ b/pc-bios/keymaps/pl @@ -0,0 +1,122 @@ +# generated from XKB map pl +include common +map 0x415 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +at 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr +numbersign 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr +dollar 0x05 shift +onequarter 0x05 altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +asciicircum 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr +ampersand 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +asterisk 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr +parenleft 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr +parenright 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +minus 0x0c +underscore 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +equal 0x0d +plus 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +eogonek 0x12 altgr +Eogonek 0x12 shift altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +EuroSign 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oacute 0x18 altgr +Oacute 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +bracketleft 0x1a +braceleft 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +bracketright 0x1b +braceright 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr +aogonek 0x1e altgr +Aogonek 0x1e shift altgr +sacute 0x1f altgr +Sacute 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +semicolon 0x27 +colon 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr +apostrophe 0x28 +quotedbl 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr +grave 0x29 +asciitilde 0x29 shift +notsign 0x29 altgr +backslash 0x2b +bar 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr +zabovedot 0x2c altgr +Zabovedot 0x2c shift altgr +zacute 0x2d altgr +Zacute 0x2d shift altgr +cacute 0x2e altgr +Cacute 0x2e shift altgr +leftdoublequotemark 0x2f altgr +grave 0x2f shift altgr +rightdoublequotemark 0x30 altgr +nacute 0x31 altgr +Nacute 0x31 shift altgr +mu 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +less 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +greater 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +slash 0x35 +question 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/keymaps/pt b/pc-bios/keymaps/pt new file mode 100644 index 00000000..c6941f65 --- /dev/null +++ b/pc-bios/keymaps/pt @@ -0,0 +1,113 @@ +# generated from XKB map pt +include common +map 0x816 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +quotedbl 0x03 shift +at 0x03 altgr +oneeighth 0x03 shift altgr +numbersign 0x04 shift +sterling 0x04 altgr +dollar 0x05 shift +section 0x05 altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +ampersand 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +apostrophe 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +guillemotleft 0x0d +guillemotright 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +cent 0x12 shift altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +plus 0x1a +asterisk 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +dead_acute 0x1b +dead_grave 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +ssharp 0x1f altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +ccedilla 0x27 +Ccedilla 0x27 shift +dead_doubleacute 0x27 shift altgr +masculine 0x28 +ordfeminine 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr +backslash 0x29 +bar 0x29 shift +notsign 0x29 altgr +dead_tilde 0x2b +dead_circumflex 0x2b shift +dead_breve 0x2b shift altgr +less 0x56 +greater 0x56 shift +cent 0x2e altgr +copyright 0x2e shift altgr +leftdoublequotemark 0x2f altgr +grave 0x2f shift altgr +rightdoublequotemark 0x30 altgr +mu 0x32 altgr +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/keymaps/pt-br b/pc-bios/keymaps/pt-br new file mode 100644 index 00000000..54bafc5d --- /dev/null +++ b/pc-bios/keymaps/pt-br @@ -0,0 +1,69 @@ +# generated from XKB map br +include common +map 0x416 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +at 0x03 shift +twosuperior 0x03 altgr +onehalf 0x03 shift altgr +numbersign 0x04 shift +threesuperior 0x04 altgr +threequarters 0x04 shift altgr +dollar 0x05 shift +sterling 0x05 altgr +onequarter 0x05 shift altgr +percent 0x06 shift +cent 0x06 altgr +dead_diaeresis 0x07 shift +notsign 0x07 altgr +diaeresis 0x07 shift altgr +ampersand 0x08 shift +braceleft 0x08 altgr +asterisk 0x09 shift +bracketleft 0x09 altgr +parenleft 0x0a shift +bracketright 0x0a altgr +parenright 0x0b shift +braceright 0x0b altgr +minus 0x0c +underscore 0x0c shift +backslash 0x0c altgr +equal 0x0d +plus 0x0d shift +section 0x0d altgr +EuroSign 0x12 altgr +registered 0x13 altgr +dead_acute 0x1a +dead_grave 0x1a shift +acute 0x1a altgr +grave 0x1a shift altgr +bracketleft 0x1b +braceleft 0x1b shift +ordfeminine 0x1b altgr +ccedilla 0x27 +Ccedilla 0x27 shift +dead_tilde 0x28 +dead_circumflex 0x28 shift +asciitilde 0x28 altgr +asciicircum 0x28 shift altgr +apostrophe 0x29 +quotedbl 0x29 shift +bracketright 0x2b +braceright 0x2b shift +masculine 0x2b altgr +copyright 0x2e altgr +mu 0x32 altgr +comma 0x33 +less 0x33 shift +period 0x34 +greater 0x34 shift +semicolon 0x35 +colon 0x35 shift +comma 0x53 numlock +backslash 0x56 +bar 0x56 shift +slash 0x73 +question 0x73 shift +degree 0x73 altgr +KP_Decimal 0x34 diff --git a/pc-bios/keymaps/ru b/pc-bios/keymaps/ru new file mode 100644 index 00000000..8f652d5a --- /dev/null +++ b/pc-bios/keymaps/ru @@ -0,0 +1,109 @@ +# generated from XKB map ru +include common +map 0x419 +exclam 0x02 shift +at 0x03 shift +quotedbl 0x03 shift altgr +numerosign 0x04 shift +dollar 0x05 shift +asterisk 0x05 shift altgr +percent 0x06 shift +colon 0x06 shift altgr +asciicircum 0x07 shift +comma 0x07 shift altgr +ampersand 0x08 shift +period 0x08 shift altgr +asterisk 0x09 shift +semicolon 0x09 shift altgr +parenleft 0x0a shift +parenright 0x0b shift +minus 0x0c +underscore 0x0c shift +equal 0x0d +plus 0x0d shift +Cyrillic_shorti 0x10 altgr +Cyrillic_SHORTI 0x10 shift altgr +Cyrillic_tse 0x11 altgr +Cyrillic_TSE 0x11 shift altgr +Cyrillic_u 0x12 altgr +Cyrillic_U 0x12 shift altgr +Cyrillic_ka 0x13 altgr +Cyrillic_KA 0x13 shift altgr +Cyrillic_ie 0x14 altgr +Cyrillic_IE 0x14 shift altgr +Cyrillic_en 0x15 altgr +Cyrillic_EN 0x15 shift altgr +Cyrillic_ghe 0x16 altgr +Cyrillic_GHE 0x16 shift altgr +Cyrillic_sha 0x17 altgr +Cyrillic_SHA 0x17 shift altgr +Cyrillic_shcha 0x18 altgr +Cyrillic_SHCHA 0x18 shift altgr +Cyrillic_ze 0x19 altgr +Cyrillic_ZE 0x19 shift altgr +bracketleft 0x1a +braceleft 0x1a shift +Cyrillic_ha 0x1a altgr +Cyrillic_HA 0x1a shift altgr +bracketright 0x1b +braceright 0x1b shift +Cyrillic_hardsign 0x1b altgr +Cyrillic_HARDSIGN 0x1b shift altgr +Cyrillic_ef 0x1e altgr +Cyrillic_EF 0x1e shift altgr +Cyrillic_yeru 0x1f altgr +Cyrillic_YERU 0x1f shift altgr +Cyrillic_ve 0x20 altgr +Cyrillic_VE 0x20 shift altgr +Cyrillic_a 0x21 altgr +Cyrillic_A 0x21 shift altgr +Cyrillic_pe 0x22 altgr +Cyrillic_PE 0x22 shift altgr +Cyrillic_er 0x23 altgr +Cyrillic_ER 0x23 shift altgr +Cyrillic_o 0x24 altgr +Cyrillic_O 0x24 shift altgr +Cyrillic_el 0x25 altgr +Cyrillic_EL 0x25 shift altgr +Cyrillic_de 0x26 altgr +Cyrillic_DE 0x26 shift altgr +semicolon 0x27 +colon 0x27 shift +Cyrillic_zhe 0x27 altgr +Cyrillic_ZHE 0x27 shift altgr +apostrophe 0x28 +quotedbl 0x28 shift +Cyrillic_e 0x28 altgr +Cyrillic_E 0x28 shift altgr +grave 0x29 +asciitilde 0x29 shift +Cyrillic_io 0x29 altgr +Cyrillic_IO 0x29 shift altgr +backslash 0x2b +bar 0x2b shift +Cyrillic_ya 0x2c altgr +Cyrillic_YA 0x2c shift altgr +Cyrillic_che 0x2d altgr +Cyrillic_CHE 0x2d shift altgr +Cyrillic_es 0x2e altgr +Cyrillic_ES 0x2e shift altgr +Cyrillic_em 0x2f altgr +Cyrillic_EM 0x2f shift altgr +Cyrillic_i 0x30 altgr +Cyrillic_I 0x30 shift altgr +Cyrillic_te 0x31 altgr +Cyrillic_TE 0x31 shift altgr +Cyrillic_softsign 0x32 altgr +Cyrillic_SOFTSIGN 0x32 shift altgr +comma 0x33 +less 0x33 shift +Cyrillic_be 0x33 altgr +Cyrillic_BE 0x33 shift altgr +period 0x34 +greater 0x34 shift +Cyrillic_yu 0x34 altgr +Cyrillic_YU 0x34 shift altgr +slash 0x35 +question 0x35 shift +slash 0x56 altgr +bar 0x56 shift altgr diff --git a/pc-bios/keymaps/sl b/pc-bios/keymaps/sl new file mode 100644 index 00000000..56835a92 --- /dev/null +++ b/pc-bios/keymaps/sl @@ -0,0 +1,110 @@ +# generated from XKB map sl +include common +map 0x424 +exclam 0x02 shift +asciitilde 0x02 altgr +dead_tilde 0x02 shift altgr +quotedbl 0x03 shift +dead_caron 0x03 altgr +caron 0x03 shift altgr +numbersign 0x04 shift +asciicircum 0x04 altgr +dead_circumflex 0x04 shift altgr +dollar 0x05 shift +dead_breve 0x05 altgr +breve 0x05 shift altgr +percent 0x06 shift +degree 0x06 altgr +dead_abovering 0x06 shift altgr +ampersand 0x07 shift +dead_ogonek 0x07 altgr +ogonek 0x07 shift altgr +slash 0x08 shift +grave 0x08 altgr +dead_grave 0x08 shift altgr +parenleft 0x09 shift +dead_abovedot 0x09 altgr +abovedot 0x09 shift altgr +parenright 0x0a shift +dead_acute 0x0a altgr +equal 0x0b shift +dead_doubleacute 0x0b altgr +doubleacute 0x0b shift altgr +apostrophe 0x0c +question 0x0c shift +dead_diaeresis 0x0c altgr +diaeresis 0x0c shift altgr +plus 0x0d +asterisk 0x0d shift +dead_cedilla 0x0d altgr +cedilla 0x0d shift altgr +backslash 0x10 altgr +Greek_OMEGA 0x10 shift altgr +bar 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +z 0x15 addupper +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +scaron 0x1a +Scaron 0x1a shift +division 0x1a altgr +dstroke 0x1b +Dstroke 0x1b shift +multiply 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +bracketleft 0x21 altgr +ordfeminine 0x21 shift altgr +bracketright 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +lstroke 0x25 altgr +Lstroke 0x26 altgr +ccaron 0x27 +Ccaron 0x27 shift +cacute 0x28 +Cacute 0x28 shift +ssharp 0x28 altgr +dead_cedilla 0x29 +notsign 0x29 altgr +zcaron 0x2b +Zcaron 0x2b shift +currency 0x2b altgr +y 0x2c addupper +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +cent 0x2e altgr +copyright 0x2e shift altgr +at 0x2f altgr +braceleft 0x30 altgr +braceright 0x31 altgr +section 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr diff --git a/pc-bios/keymaps/sv b/pc-bios/keymaps/sv new file mode 100644 index 00000000..5d9080ef --- /dev/null +++ b/pc-bios/keymaps/sv @@ -0,0 +1,81 @@ +map 0x0000041d +include common + +# +# Top row +# +section 0x29 +onehalf 0x29 shift + +# 1 +exclam 0x2 shift + +# 2 +quotedbl 0x3 shift +at 0x3 altgr + +# 3 +numbersign 0x4 shift +sterling 0x4 altgr +# 4 +currency 0x5 shift +dollar 0x5 altgr +# 5 +percent 0x6 shift +# 6 +ampersand 0x7 shift +# 7 +slash 0x8 shift +braceleft 0x8 altgr +# 8 +parenleft 0x9 shift +bracketleft 0x9 altgr +# 9 +parenright 0xa shift +bracketright 0xa altgr +# 0 +equal 0xb shift +braceright 0xb altgr + +plus 0xc +question 0xc shift +backslash 0xc altgr + +acute 0xd +dead_acute 0xd +grave 0xd shift +dead_grave 0xd shift + +# +# QWERTY first row +# +EuroSign 0x12 altgr +aring 0x1a +Aring 0x1a shift +dead_diaeresis 0x1b +dead_circumflex 0x1b shift +dead_tilde 0x1b altgr + +# +# QWERTY second row +# +odiaeresis 0x27 +Odiaeresis 0x27 shift +adiaeresis 0x28 +Adiaeresis 0x28 shift +apostrophe 0x2b +asterisk 0x2b shift + +# +# QWERTY third row +# +less 0x56 +greater 0x56 shift +bar 0x56 altgr +mu 0x32 altgr +comma 0x33 +semicolon 0x33 shift +period 0x34 +colon 0x34 shift +minus 0x35 +underscore 0x35 shift diff --git a/pc-bios/keymaps/th b/pc-bios/keymaps/th new file mode 100644 index 00000000..b65b6da5 --- /dev/null +++ b/pc-bios/keymaps/th @@ -0,0 +1,131 @@ +# generated from XKB map th +include common +map 0x41e +exclam 0x02 shift +Thai_lakkhangyao 0x02 altgr +plus 0x02 shift altgr +at 0x03 shift +slash 0x03 altgr +Thai_leknung 0x03 shift altgr +numbersign 0x04 shift +minus 0x04 altgr +Thai_leksong 0x04 shift altgr +dollar 0x05 shift +Thai_phosamphao 0x05 altgr +Thai_leksam 0x05 shift altgr +percent 0x06 shift +Thai_thothung 0x06 altgr +Thai_leksi 0x06 shift altgr +asciicircum 0x07 shift +Thai_sarau 0x07 altgr +Thai_sarauu 0x07 shift altgr +ampersand 0x08 shift +Thai_saraue 0x08 altgr +Thai_baht 0x08 shift altgr +asterisk 0x09 shift +Thai_khokhwai 0x09 altgr +Thai_lekha 0x09 shift altgr +parenleft 0x0a shift +Thai_totao 0x0a altgr +Thai_lekhok 0x0a shift altgr +parenright 0x0b shift +Thai_chochan 0x0b altgr +Thai_lekchet 0x0b shift altgr +minus 0x0c +underscore 0x0c shift +Thai_khokhai 0x0c altgr +Thai_lekpaet 0x0c shift altgr +equal 0x0d +plus 0x0d shift +Thai_chochang 0x0d altgr +Thai_lekkao 0x0d shift altgr +Thai_maiyamok 0x10 altgr +Thai_leksun 0x10 shift altgr +Thai_saraaimaimalai 0x11 altgr +quotedbl 0x11 shift altgr +Thai_saraam 0x12 altgr +Thai_dochada 0x12 shift altgr +Thai_phophan 0x13 altgr +Thai_thonangmontho 0x13 shift altgr +Thai_saraa 0x14 altgr +Thai_thothong 0x14 shift altgr +Thai_maihanakat 0x15 altgr +Thai_nikhahit 0x15 shift altgr +Thai_saraii 0x16 altgr +Thai_maitri 0x16 shift altgr +Thai_rorua 0x17 altgr +Thai_nonen 0x17 shift altgr +Thai_nonu 0x18 altgr +Thai_paiyannoi 0x18 shift altgr +Thai_yoyak 0x19 altgr +Thai_yoying 0x19 shift altgr +bracketleft 0x1a +braceleft 0x1a shift +Thai_bobaimai 0x1a altgr +Thai_thothan 0x1a shift altgr +bracketright 0x1b +braceright 0x1b shift +Thai_loling 0x1b altgr +comma 0x1b shift altgr +Thai_fofan 0x1e altgr +Thai_ru 0x1e shift altgr +Thai_hohip 0x1f altgr +Thai_khorakhang 0x1f shift altgr +Thai_kokai 0x20 altgr +Thai_topatak 0x20 shift altgr +Thai_dodek 0x21 altgr +Thai_sarao 0x21 shift altgr +Thai_sarae 0x22 altgr +Thai_chochoe 0x22 shift altgr +Thai_maitho 0x23 altgr +Thai_maitaikhu 0x23 shift altgr +Thai_maiek 0x24 altgr +Thai_maichattawa 0x24 shift altgr +Thai_saraaa 0x25 altgr +Thai_sorusi 0x25 shift altgr +Thai_sosua 0x26 altgr +Thai_sosala 0x26 shift altgr +semicolon 0x27 +colon 0x27 shift +Thai_wowaen 0x27 altgr +Thai_soso 0x27 shift altgr +apostrophe 0x28 +quotedbl 0x28 shift +Thai_ngongu 0x28 altgr +period 0x28 shift altgr +grave 0x29 +asciitilde 0x29 shift +underscore 0x29 altgr +percent 0x29 shift altgr +ISO_First_Group 0x2a shift +backslash 0x2b +bar 0x2b shift +Thai_khokhuat 0x2b altgr +Thai_khokhon 0x2b shift altgr +Thai_phophung 0x2c altgr +parenleft 0x2c shift altgr +Thai_popla 0x2d altgr +parenright 0x2d shift altgr +Thai_saraae 0x2e altgr +Thai_choching 0x2e shift altgr +Thai_oang 0x2f altgr +Thai_honokhuk 0x2f shift altgr +Thai_sarai 0x30 altgr +Thai_phinthu 0x30 shift altgr +Thai_sarauee 0x31 altgr +Thai_thanthakhat 0x31 shift altgr +Thai_thothahan 0x32 altgr +question 0x32 shift altgr +comma 0x33 +less 0x33 shift +Thai_moma 0x33 altgr +Thai_thophuthao 0x33 shift altgr +period 0x34 +greater 0x34 shift +Thai_saraaimaimuan 0x34 altgr +Thai_lochula 0x34 shift altgr +slash 0x35 +question 0x35 shift +Thai_fofa 0x35 altgr +Thai_lu 0x35 shift altgr +ISO_Last_Group 0x36 shift diff --git a/pc-bios/keymaps/tr b/pc-bios/keymaps/tr new file mode 100644 index 00000000..5650e1e9 --- /dev/null +++ b/pc-bios/keymaps/tr @@ -0,0 +1,123 @@ +# generated from XKB map tr +include common +map 0x41f +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr +apostrophe 0x03 shift +at 0x03 altgr +oneeighth 0x03 shift altgr +dead_circumflex 0x04 shift +numbersign 0x04 altgr +sterling 0x04 shift altgr +plus 0x05 shift +dollar 0x05 altgr +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr +ampersand 0x07 shift +asciicircum 0x07 altgr +fiveeighths 0x07 shift altgr +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr +asterisk 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr +minus 0x0d +underscore 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr +lstroke 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +idotless 0x17 +I 0x17 shift +rightarrow 0x17 altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +gbreve 0x1a +Gbreve 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr +udiaeresis 0x1b +Udiaeresis 0x1b shift +asciitilde 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr +eng 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +kra 0x25 altgr +ampersand 0x25 shift altgr +lstroke 0x26 altgr +Lstroke 0x26 shift altgr +scedilla 0x27 +Scedilla 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr +i 0x28 +Iabovedot 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr +backslash 0x29 +quotedbl 0x29 shift +asciitilde 0x29 altgr +comma 0x2b +semicolon 0x2b shift +bar 0x2b altgr +dead_breve 0x2b shift altgr +guillemotleft 0x2c altgr +less 0x2c shift altgr +guillemotright 0x2d altgr +greater 0x2d shift altgr +cent 0x2e altgr +copyright 0x2e shift altgr +leftdoublequotemark 0x2f altgr +grave 0x2f shift altgr +rightdoublequotemark 0x30 altgr +apostrophe 0x30 shift altgr +mu 0x32 altgr +masculine 0x32 shift altgr +odiaeresis 0x33 +Odiaeresis 0x33 shift +less 0x33 altgr +multiply 0x33 shift altgr +ccedilla 0x34 +Ccedilla 0x34 shift +greater 0x34 altgr +division 0x34 shift altgr +period 0x35 +colon 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr diff --git a/pc-bios/kvmvapic.bin b/pc-bios/kvmvapic.bin Binary files differnew file mode 100644 index 00000000..045f5c28 --- /dev/null +++ b/pc-bios/kvmvapic.bin diff --git a/pc-bios/linuxboot.bin b/pc-bios/linuxboot.bin Binary files differnew file mode 100644 index 00000000..923d1796 --- /dev/null +++ b/pc-bios/linuxboot.bin diff --git a/pc-bios/multiboot.bin b/pc-bios/multiboot.bin Binary files differnew file mode 100644 index 00000000..e772713c --- /dev/null +++ b/pc-bios/multiboot.bin diff --git a/pc-bios/openbios-ppc b/pc-bios/openbios-ppc Binary files differnew file mode 100644 index 00000000..540e45a7 --- /dev/null +++ b/pc-bios/openbios-ppc diff --git a/pc-bios/openbios-sparc32 b/pc-bios/openbios-sparc32 Binary files differnew file mode 100644 index 00000000..0da11883 --- /dev/null +++ b/pc-bios/openbios-sparc32 diff --git a/pc-bios/openbios-sparc64 b/pc-bios/openbios-sparc64 Binary files differnew file mode 100644 index 00000000..9bf3ce54 --- /dev/null +++ b/pc-bios/openbios-sparc64 diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile new file mode 100644 index 00000000..ce4852a4 --- /dev/null +++ b/pc-bios/optionrom/Makefile @@ -0,0 +1,33 @@ +all: build-all +# Dummy command so that make thinks it has done something +	@true + +include ../../config-host.mak +include $(SRC_PATH)/rules.mak + +$(call set-vpath, $(SRC_PATH)/pc-bios/optionrom) + +.PHONY : all clean build-all + +CFLAGS := -Wall -Wstrict-prototypes -Werror -fomit-frame-pointer -fno-builtin +CFLAGS += -I$(SRC_PATH) +CFLAGS += $(call cc-option, $(CFLAGS), -fno-stack-protector) +CFLAGS += $(CFLAGS_NOPIE) +QEMU_CFLAGS = $(CFLAGS) + +build-all: multiboot.bin linuxboot.bin kvmvapic.bin + +# suppress auto-removal of intermediate files +.SECONDARY: + +%.img: %.o +	$(call quiet-command,$(LD) $(LDFLAGS_NOPIE) -Ttext 0 -e _start -s -o $@ $<,"  Building $(TARGET_DIR)$@") + +%.raw: %.img +	$(call quiet-command,$(OBJCOPY) -O binary -j .text $< $@,"  Building $(TARGET_DIR)$@") + +%.bin: %.raw +	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/signrom.py $< $@,"  Signing $(TARGET_DIR)$@") + +clean: +	rm -f *.o *.d *.raw *.img *.bin *~ diff --git a/pc-bios/optionrom/kvmvapic.S b/pc-bios/optionrom/kvmvapic.S new file mode 100644 index 00000000..aa17a402 --- /dev/null +++ b/pc-bios/optionrom/kvmvapic.S @@ -0,0 +1,335 @@ +# +# Local APIC acceleration for Windows XP and related guests +# +# Copyright 2011 Red Hat, Inc. and/or its affiliates +# +# Author: Avi Kivity <avi@redhat.com> +# +# This work is licensed under the terms of the GNU GPL, version 2, or (at your +# option) any later version.  See the COPYING file in the top-level directory. +# + +#include "optionrom.h" + +OPTION_ROM_START + +	# clear vapic area: firmware load using rep insb may cause +	# stale tpr/isr/irr data to corrupt the vapic area. +	push %es +	push %cs +	pop %es +	xor %ax, %ax +	mov $vapic_size/2, %cx +	lea vapic, %di +	cld +	rep stosw +	pop %es + +	# announce presence to the hypervisor +	mov $vapic_base, %ax +	out %ax, $0x7e + +	lret + +	.code32 +vapic_size = 2*4096 + +.macro fixup delta=-4 +777: +	.text 1 +	.long 777b + \delta  - vapic_base +	.text 0 +.endm + +.macro reenable_vtpr +	out %al, $0x7e +.endm + +.text 1 +	fixup_start = . +.text 0 + +.align 16 + +vapic_base: +	.ascii "kvm aPiC" + +	/* relocation data */ +	.long vapic_base	; fixup +	.long fixup_start	; fixup +	.long fixup_end		; fixup + +	.long vapic		; fixup +	.long vapic_size +vcpu_shift: +	.long 0 +real_tpr: +	.long 0 +	.long up_set_tpr	; fixup +	.long up_set_tpr_eax	; fixup +	.long up_get_tpr_eax	; fixup +	.long up_get_tpr_ecx	; fixup +	.long up_get_tpr_edx	; fixup +	.long up_get_tpr_ebx	; fixup +	.long 0 /* esp. won't work. */ +	.long up_get_tpr_ebp	; fixup +	.long up_get_tpr_esi	; fixup +	.long up_get_tpr_edi	; fixup +	.long up_get_tpr_stack  ; fixup +	.long mp_set_tpr	; fixup +	.long mp_set_tpr_eax	; fixup +	.long mp_get_tpr_eax	; fixup +	.long mp_get_tpr_ecx	; fixup +	.long mp_get_tpr_edx	; fixup +	.long mp_get_tpr_ebx	; fixup +	.long 0 /* esp. won't work. */ +	.long mp_get_tpr_ebp	; fixup +	.long mp_get_tpr_esi	; fixup +	.long mp_get_tpr_edi	; fixup +	.long mp_get_tpr_stack  ; fixup + +.macro kvm_hypercall +	.byte 0x0f, 0x01, 0xc1 +.endm + +kvm_hypercall_vapic_poll_irq = 1 + +pcr_cpu = 0x51 + +.align 64 + +mp_get_tpr_eax: +	pushf +	cli +	reenable_vtpr +	push %ecx + +	fs/movzbl pcr_cpu, %eax + +	mov vcpu_shift, %ecx	; fixup +	shl %cl, %eax +	testb $1, vapic+4(%eax)	; fixup delta=-5 +	jz mp_get_tpr_bad +	movzbl vapic(%eax), %eax ; fixup + +mp_get_tpr_out: +	pop %ecx +	popf +	ret + +mp_get_tpr_bad: +	mov real_tpr, %eax	; fixup +	mov (%eax), %eax +	jmp mp_get_tpr_out + +mp_get_tpr_ebx: +	mov %eax, %ebx +	call mp_get_tpr_eax +	xchg %eax, %ebx +	ret + +mp_get_tpr_ecx: +	mov %eax, %ecx +	call mp_get_tpr_eax +	xchg %eax, %ecx +	ret + +mp_get_tpr_edx: +	mov %eax, %edx +	call mp_get_tpr_eax +	xchg %eax, %edx +	ret + +mp_get_tpr_esi: +	mov %eax, %esi +	call mp_get_tpr_eax +	xchg %eax, %esi +	ret + +mp_get_tpr_edi: +	mov %eax, %edi +	call mp_get_tpr_edi +	xchg %eax, %edi +	ret + +mp_get_tpr_ebp: +	mov %eax, %ebp +	call mp_get_tpr_eax +	xchg %eax, %ebp +	ret + +mp_get_tpr_stack: +	call mp_get_tpr_eax +	xchg %eax, 4(%esp) +	ret + +mp_set_tpr_eax: +	push %eax +	call mp_set_tpr +	ret + +mp_set_tpr: +	pushf +	push %eax +	push %ecx +	push %edx +	push %ebx +	cli +	reenable_vtpr + +mp_set_tpr_failed: +	fs/movzbl pcr_cpu, %edx + +	mov vcpu_shift, %ecx	; fixup +	shl %cl, %edx + +	testb $1, vapic+4(%edx)	; fixup delta=-5 +	jz mp_set_tpr_bad + +	mov vapic(%edx), %eax	; fixup + +	mov %eax, %ebx +	mov 24(%esp), %bl + +	/* %ebx = new vapic (%bl = tpr, %bh = isr, %b3 = irr) */ + +	lock cmpxchg %ebx, vapic(%edx) ; fixup +	jnz mp_set_tpr_failed + +	/* compute ppr */ +	cmp %bh, %bl +	jae mp_tpr_is_bigger +mp_isr_is_bigger: +	mov %bh, %bl +mp_tpr_is_bigger: +	/* %bl = ppr */ +	rol $8, %ebx +	/* now: %bl = irr, %bh = ppr */ +	cmp %bh, %bl +	ja mp_set_tpr_poll_irq + +mp_set_tpr_out: +	pop %ebx +	pop %edx +	pop %ecx +	pop %eax +	popf +	ret $4 + +mp_set_tpr_poll_irq: +	mov $kvm_hypercall_vapic_poll_irq, %eax +	kvm_hypercall +	jmp mp_set_tpr_out + +mp_set_tpr_bad: +	mov 24(%esp), %ecx +	mov real_tpr, %eax	; fixup +	mov %ecx, (%eax) +	jmp mp_set_tpr_out + +up_get_tpr_eax: +	reenable_vtpr +	movzbl vapic, %eax ; fixup +	ret + +up_get_tpr_ebx: +	reenable_vtpr +	movzbl vapic, %ebx ; fixup +	ret + +up_get_tpr_ecx: +	reenable_vtpr +	movzbl vapic, %ecx ; fixup +	ret + +up_get_tpr_edx: +	reenable_vtpr +	movzbl vapic, %edx ; fixup +	ret + +up_get_tpr_esi: +	reenable_vtpr +	movzbl vapic, %esi ; fixup +	ret + +up_get_tpr_edi: +	reenable_vtpr +	movzbl vapic, %edi ; fixup +	ret + +up_get_tpr_ebp: +	reenable_vtpr +	movzbl vapic, %ebp ; fixup +	ret + +up_get_tpr_stack: +	reenable_vtpr +	movzbl vapic, %eax ; fixup +	xchg %eax, 4(%esp) +	ret + +up_set_tpr_eax: +	push %eax +	call up_set_tpr +	ret + +up_set_tpr: +	pushf +	push %eax +	push %ebx +	reenable_vtpr + +up_set_tpr_failed: +	mov vapic, %eax	; fixup + +	mov %eax, %ebx +	mov 16(%esp), %bl + +	/* %ebx = new vapic (%bl = tpr, %bh = isr, %b3 = irr) */ + +	lock cmpxchg %ebx, vapic ; fixup +	jnz up_set_tpr_failed + +	/* compute ppr */ +	cmp %bh, %bl +	jae up_tpr_is_bigger +up_isr_is_bigger: +	mov %bh, %bl +up_tpr_is_bigger: +	/* %bl = ppr */ +	rol $8, %ebx +	/* now: %bl = irr, %bh = ppr */ +	cmp %bh, %bl +	ja up_set_tpr_poll_irq + +up_set_tpr_out: +	pop %ebx +	pop %eax +	popf +	ret $4 + +up_set_tpr_poll_irq: +	mov $kvm_hypercall_vapic_poll_irq, %eax +	kvm_hypercall +	jmp up_set_tpr_out + +.text 1 +	fixup_end = . +.text 0 + +/* + * vapic format: + *  per-vcpu records of size 2^vcpu shift. + *     byte 0: tpr (r/w) + *     byte 1: highest in-service interrupt (isr) (r/o); bits 3:0 are zero + *     byte 2: zero (r/o) + *     byte 3: highest pending interrupt (irr) (r/o) + */ +.text 2 + +.align 128 + +vapic: +. = . + vapic_size + +OPTION_ROM_END diff --git a/pc-bios/optionrom/linuxboot.S b/pc-bios/optionrom/linuxboot.S new file mode 100644 index 00000000..ba821ab9 --- /dev/null +++ b/pc-bios/optionrom/linuxboot.S @@ -0,0 +1,195 @@ +/* + * Linux Boot Option ROM + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + * + * Copyright Novell Inc, 2009 + *   Authors: Alexander Graf <agraf@suse.de> + * + * Based on code in hw/pc.c. + */ + +#include "optionrom.h" + +#define BOOT_ROM_PRODUCT "Linux loader" + +BOOT_ROM_START + +run_linuxboot: + +	cli +	cld + +	jmp		copy_kernel +boot_kernel: + +	read_fw		FW_CFG_SETUP_ADDR + +	mov		%eax, %ebx +	shr		$4, %ebx + +	/* All segments contain real_addr */ +	mov		%bx, %ds +	mov		%bx, %es +	mov		%bx, %fs +	mov		%bx, %gs +	mov		%bx, %ss + +	/* CX = CS we want to jump to */ +	add		$0x20, %bx +	mov		%bx, %cx + +	/* SP = cmdline_addr-real_addr-16 */ +	read_fw		FW_CFG_CMDLINE_ADDR +	mov		%eax, %ebx +	read_fw		FW_CFG_SETUP_ADDR +	sub		%eax, %ebx +	sub		$16, %ebx +	mov		%ebx, %esp + +	/* Build indirect lret descriptor */ +	pushw		%cx		/* CS */ +	xor		%ax, %ax +	pushw		%ax		/* IP = 0 */ + +	/* Clear registers */ +	xor		%eax, %eax +	xor		%ebx, %ebx +	xor		%ecx, %ecx +	xor		%edx, %edx +	xor		%edi, %edi +	xor		%ebp, %ebp + +	/* Jump to Linux */ +	lret + + +copy_kernel: +	/* Read info block in low memory (0x10000 or 0x90000) */ +	read_fw		FW_CFG_SETUP_ADDR +	shr		$4, %eax +	mov		%eax, %es +	xor		%edi, %edi +	read_fw_blob_addr32_edi(FW_CFG_SETUP) + +	cmpw            $0x203, %es:0x206      // if protocol >= 0x203 +	jae             1f                     // have initrd_max +	movl            $0x37ffffff, %es:0x22c // else assume 0x37ffffff +1: + +	/* Check if using kernel-specified initrd address */ +	read_fw		FW_CFG_INITRD_ADDR +	mov		%eax, %edi             // (load_kernel wants it in %edi) +	read_fw		FW_CFG_INITRD_SIZE     // find end of initrd +	add		%edi, %eax +	xor		%es:0x22c, %eax        // if it matches es:0x22c +	and		$-4096, %eax           // (apart from padding for page) +	jz		load_kernel            // then initrd is not at top +					       // of memory + +	/* pc.c placed the initrd at end of memory.  Compute a better +	 * initrd address based on e801 data. +	 */ +	mov		$0xe801, %ax +	xor		%cx, %cx +	xor		%dx, %dx +	int		$0x15 + +	/* Output could be in AX/BX or CX/DX */ +	or		%cx, %cx +	jnz		1f +	or		%dx, %dx +	jnz		1f +	mov		%ax, %cx +	mov		%bx, %dx +1: + +	or		%dx, %dx +	jnz		2f +	addw		$1024, %cx            /* add 1 MB */ +	movzwl		%cx, %edi +	shll		$10, %edi             /* convert to bytes */ +	jmp		3f + +2: +	addw		$16777216 >> 16, %dx  /* add 16 MB */ +	movzwl		%dx, %edi +	shll		$16, %edi             /* convert to bytes */ + +3: +	read_fw         FW_CFG_INITRD_SIZE +	subl            %eax, %edi +	andl            $-4096, %edi          /* EDI = start of initrd */ +	movl		%edi, %es:0x218       /* put it in the header */ + +load_kernel: +	/* We need to load the kernel into memory we can't access in 16 bit +	   mode, so let's get into 32 bit mode, write the kernel and jump +	   back again. */ + +	/* Reserve space on the stack for our GDT descriptor. */ +	mov             %esp, %ebp +	sub             $16, %esp + +	/* Now create the GDT descriptor */ +	movw		$((3 * 8) - 1), -16(%bp) +	mov		%cs, %eax +	movzwl		%ax, %eax +	shl		$4, %eax +	addl		$gdt, %eax +	movl		%eax, -14(%bp) + +	/* And load the GDT */ +	data32 lgdt	-16(%bp) +	mov		%ebp, %esp + +	/* Get us to protected mode now */ +	mov		$1, %eax +	mov		%eax, %cr0 + +	/* So we can set ES to a 32-bit segment */ +	mov		$0x10, %eax +	mov		%eax, %es + +	/* We're now running in 16-bit CS, but 32-bit ES! */ + +	/* Load kernel and initrd */ +	read_fw_blob_addr32_edi(FW_CFG_INITRD) +	read_fw_blob_addr32(FW_CFG_KERNEL) +	read_fw_blob_addr32(FW_CFG_CMDLINE) + +	/* And now jump into Linux! */ +	mov		$0, %eax +	mov		%eax, %cr0 + +	/* ES = CS */ +	mov		%cs, %ax +	mov		%ax, %es + +	jmp		boot_kernel + +/* Variables */ + +.align 4, 0 +gdt: +	/* 0x00 */ +.byte	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + +	/* 0x08: code segment (base=0, limit=0xfffff, type=32bit code exec/read, DPL=0, 4k) */ +.byte	0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00 + +	/* 0x10: data segment (base=0, limit=0xfffff, type=32bit data read/write, DPL=0, 4k) */ +.byte	0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00 + +BOOT_ROM_END diff --git a/pc-bios/optionrom/multiboot.S b/pc-bios/optionrom/multiboot.S new file mode 100644 index 00000000..b7efe4de --- /dev/null +++ b/pc-bios/optionrom/multiboot.S @@ -0,0 +1,232 @@ +/* + * Multiboot Option ROM + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + * + * Copyright Novell Inc, 2009 + *   Authors: Alexander Graf <agraf@suse.de> + */ + +#include "optionrom.h" + +#define BOOT_ROM_PRODUCT "multiboot loader" + +#define MULTIBOOT_MAGIC		0x2badb002 + +#define GS_PROT_JUMP		0 +#define GS_GDT_DESC		6 + + +BOOT_ROM_START + +run_multiboot: + +	cli +	cld + +	mov		%cs, %eax +	shl		$0x4, %eax + +	/* set up a long jump descriptor that is PC relative */ + +	/* move stack memory to %gs */ +	mov		%ss, %ecx +	shl		$0x4, %ecx +	mov		%esp, %ebx +	add		%ebx, %ecx +	sub		$0x20, %ecx +	sub		$0x30, %esp +	shr		$0x4, %ecx +	mov		%cx, %gs + +	/* now push the indirect jump descriptor there */ +	mov		(prot_jump), %ebx +	add		%eax, %ebx +	movl		%ebx, %gs:GS_PROT_JUMP +	mov		$8, %bx +	movw		%bx, %gs:GS_PROT_JUMP + 4 + +	/* fix the gdt descriptor to be PC relative */ +	movw		(gdt_desc), %bx +	movw		%bx, %gs:GS_GDT_DESC +	movl		(gdt_desc+2), %ebx +	add		%eax, %ebx +	movl		%ebx, %gs:GS_GDT_DESC + 2 + +	xor		%eax, %eax +	mov		%eax, %es + +	/* Read the bootinfo struct into RAM */ +	read_fw_blob(FW_CFG_INITRD) + +	/* FS = bootinfo_struct */ +	read_fw		FW_CFG_INITRD_ADDR +	shr		$4, %eax +	mov		%ax, %fs + +	/* Account for the EBDA in the multiboot structure's e801 +	 * map. +	 */ +	int		$0x12 +	cwtl +	movl		%eax, %fs:4 + +	/* ES = mmap_addr */ +	mov 		%fs:48, %eax +	shr		$4, %eax +	mov		%ax, %es + +	/* Initialize multiboot mmap structs using int 0x15(e820) */ +	xor		%ebx, %ebx +	/* Start storing mmap data at %es:0 */ +	xor		%edi, %edi + +mmap_loop: +	/* The multiboot entry size has offset -4, so leave some space */ +	add		$4, %di +	/* entry size (mmap struct) & max buffer size (int15) */ +	movl		$20, %ecx +	/* e820 */ +	movl		$0x0000e820, %eax +	/* 'SMAP' magic */ +	movl		$0x534d4150, %edx +	int		$0x15 + +mmap_check_entry: +	/* Error or last entry already done? */ +	jb		mmap_done + +mmap_store_entry: +	/* store entry size */ +	/* old as(1) doesn't like this insn so emit the bytes instead: +	movl		%ecx, %es:-4(%edi) +	*/ +	.dc.b		0x26,0x67,0x66,0x89,0x4f,0xfc + +	/* %edi += entry_size, store as mbs_mmap_length */ +	add		%ecx, %edi +	movw		%di, %fs:0x2c + +	/* Continuation value 0 means last entry */ +	test		%ebx, %ebx +	jnz		mmap_loop + +mmap_done: +	/* Calculate upper_mem field: The amount of memory between 1 MB and +	   the first upper memory hole. Get it from the mmap. */ +	xor		%di, %di +	mov		$0x100000, %edx +upper_mem_entry: +	cmp		%fs:0x2c, %di +	je		upper_mem_done +	add		$4, %di + +	/* Skip if type != 1 */ +	cmpl		$1, %es:16(%di) +	jne		upper_mem_next + +	/* Skip if > 4 GB */ +	movl		%es:4(%di), %eax +	test		%eax, %eax +	jnz		upper_mem_next + +	/* Check for contiguous extension (base <= %edx < base + length) */ +	movl		%es:(%di), %eax +	cmp		%eax, %edx +	jb		upper_mem_next +	addl		%es:8(%di), %eax +	cmp		%eax, %edx +	jae		upper_mem_next + +	/* If so, update %edx, and restart the search (mmap isn't ordered) */ +	mov		%eax, %edx +	xor		%di, %di +	jmp		upper_mem_entry + +upper_mem_next: +	addl		%es:-4(%di), %edi +	jmp		upper_mem_entry + +upper_mem_done: +	sub		$0x100000, %edx +	shr		$10, %edx +	mov		%edx, %fs:0x8 + +real_to_prot: +	/* Load the GDT before going into protected mode */ +lgdt: +	data32 lgdt	%gs:GS_GDT_DESC + +	/* get us to protected mode now */ +	movl		$1, %eax +	movl		%eax, %cr0 + +	/* the LJMP sets CS for us and gets us to 32-bit */ +ljmp: +	data32 ljmp	*%gs:GS_PROT_JUMP + +prot_mode: +.code32 + +	/* initialize all other segments */ +	movl		$0x10, %eax +	movl		%eax, %ss +	movl		%eax, %ds +	movl		%eax, %es +	movl		%eax, %fs +	movl		%eax, %gs + +	/* Read the kernel and modules into RAM */ +	read_fw_blob(FW_CFG_KERNEL) + +	/* Jump off to the kernel */ +	read_fw		FW_CFG_KERNEL_ENTRY +	mov		%eax, %ecx + +	/* EBX contains a pointer to the bootinfo struct */ +	read_fw		FW_CFG_INITRD_ADDR +	movl		%eax, %ebx + +	/* EAX has to contain the magic */ +	movl		$MULTIBOOT_MAGIC, %eax +ljmp2: +	jmp		*%ecx + +/* Variables */ +.align 4, 0 +prot_jump:	.long prot_mode +		.short 8 + +.align 4, 0 +gdt: +	/* 0x00 */ +.byte	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + +	/* 0x08: code segment (base=0, limit=0xfffff, type=32bit code exec/read, DPL=0, 4k) */ +.byte	0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00 + +	/* 0x10: data segment (base=0, limit=0xfffff, type=32bit data read/write, DPL=0, 4k) */ +.byte	0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00 + +	/* 0x18: code segment (base=0, limit=0x0ffff, type=16bit code exec/read/conf, DPL=0, 1b) */ +.byte	0xff, 0xff, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00 + +	/* 0x20: data segment (base=0, limit=0x0ffff, type=16bit data read/write, DPL=0, 1b) */ +.byte	0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00 + +gdt_desc: +.short	(5 * 8) - 1 +.long	gdt + +BOOT_ROM_END diff --git a/pc-bios/optionrom/optionrom.h b/pc-bios/optionrom/optionrom.h new file mode 100644 index 00000000..f1a9021e --- /dev/null +++ b/pc-bios/optionrom/optionrom.h @@ -0,0 +1,152 @@ +/* + * Common Option ROM Functions + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + * + * Copyright Novell Inc, 2009 + *   Authors: Alexander Graf <agraf@suse.de> + */ + + +#define NO_QEMU_PROTOS +#include "../../include/hw/nvram/fw_cfg.h" + +#define BIOS_CFG_IOPORT_CFG	0x510 +#define BIOS_CFG_IOPORT_DATA	0x511 + +/* Break the translation block flow so -d cpu shows us values */ +#define DEBUG_HERE \ +	jmp		1f;				\ +	1: +	 +/* + * Read a variable from the fw_cfg device. + * Clobbers:	%edx + * Out:		%eax + */ +.macro read_fw VAR +	mov		$\VAR, %ax +	mov		$BIOS_CFG_IOPORT_CFG, %dx +	outw		%ax, (%dx) +	mov		$BIOS_CFG_IOPORT_DATA, %dx +	inb		(%dx), %al +	shl		$8, %eax +	inb		(%dx), %al +	shl		$8, %eax +	inb		(%dx), %al +	shl		$8, %eax +	inb		(%dx), %al +	bswap		%eax +.endm + +#define read_fw_blob_pre(var)				\ +	read_fw		var ## _SIZE;			\ +	mov		%eax, %ecx;			\ +	mov		$var ## _DATA, %ax;		\ +	mov		$BIOS_CFG_IOPORT_CFG, %edx;	\ +	outw		%ax, (%dx);			\ +	mov		$BIOS_CFG_IOPORT_DATA, %dx;	\ +	cld + +/* + * Read a blob from the fw_cfg device. + * Requires _ADDR, _SIZE and _DATA values for the parameter. + * + * Clobbers:	%eax, %edx, %es, %ecx, %edi + */ +#define read_fw_blob(var)				\ +	read_fw		var ## _ADDR;			\ +	mov		%eax, %edi;			\ +	read_fw_blob_pre(var);				\ +	/* old as(1) doesn't like this insn so emit the bytes instead: \ +	rep insb	(%dx), %es:(%edi);		\ +	*/						\ +	.dc.b		0xf3,0x6c + +/* + * Read a blob from the fw_cfg device in forced addr32 mode. + * Requires _ADDR, _SIZE and _DATA values for the parameter. + * + * Clobbers:	%eax, %edx, %es, %ecx, %edi + */ +#define read_fw_blob_addr32(var)			\ +	read_fw		var ## _ADDR;			\ +	mov		%eax, %edi;			\ +	read_fw_blob_pre(var);				\ +	/* old as(1) doesn't like this insn so emit the bytes instead: \ +	addr32 rep insb	(%dx), %es:(%edi);		\ +	*/						\ +	.dc.b		0x67,0xf3,0x6c + +/* + * Read a blob from the fw_cfg device in forced addr32 mode, address is in %edi. + * Requires _SIZE and _DATA values for the parameter. + * + * Clobbers:	%eax, %edx, %edi, %es, %ecx + */ +#define read_fw_blob_addr32_edi(var)			\ +	read_fw_blob_pre(var);				\ +	/* old as(1) doesn't like this insn so emit the bytes instead: \ +	addr32 rep insb	(%dx), %es:(%edi);		\ +	*/						\ +	.dc.b		0x67,0xf3,0x6c + +#define OPTION_ROM_START					\ +    .code16;						\ +    .text;						\ +	.global 	_start;				\ +    _start:;						\ +	.short		0xaa55;				\ +	.byte		(_end - _start) / 512; + +#define BOOT_ROM_START					\ +	OPTION_ROM_START				\ +	lret;						\ +	.org 		0x18;				\ +	.short		0;				\ +	.short		_pnph;				\ +    _pnph:						\ +	.ascii		"$PnP";				\ +	.byte		0x01;				\ +	.byte		( _pnph_len / 16 );		\ +	.short		0x0000;				\ +	.byte		0x00;				\ +	.byte		0x00;				\ +	.long		0x00000000;			\ +	.short		_manufacturer;			\ +	.short		_product;			\ +	.long		0x00000000;			\ +	.short		0x0000;				\ +	.short		0x0000;				\ +	.short		_bev;				\ +	.short		0x0000;				\ +	.short		0x0000;				\ +	.equ		_pnph_len, . - _pnph;		\ +    _bev:;						\ +	/* DS = CS */					\ +	movw		%cs, %ax;			\ +	movw		%ax, %ds; + +#define OPTION_ROM_END					\ +	.byte		0;				\ +	.align		512, 0;				\ +    _end: + +#define BOOT_ROM_END					\ +    _manufacturer:;					\ +	.asciz "QEMU";					\ +    _product:;						\ +	.asciz BOOT_ROM_PRODUCT;			\ +	OPTION_ROM_END + diff --git a/pc-bios/palcode-clipper b/pc-bios/palcode-clipper Binary files differnew file mode 100755 index 00000000..9956340c --- /dev/null +++ b/pc-bios/palcode-clipper diff --git a/pc-bios/petalogix-ml605.dtb b/pc-bios/petalogix-ml605.dtb Binary files differnew file mode 100644 index 00000000..fbbd45fd --- /dev/null +++ b/pc-bios/petalogix-ml605.dtb diff --git a/pc-bios/petalogix-s3adsp1800.dtb b/pc-bios/petalogix-s3adsp1800.dtb Binary files differnew file mode 100644 index 00000000..8ac80f2f --- /dev/null +++ b/pc-bios/petalogix-s3adsp1800.dtb diff --git a/pc-bios/ppc_rom.bin b/pc-bios/ppc_rom.bin Binary files differnew file mode 100644 index 00000000..174a2474 --- /dev/null +++ b/pc-bios/ppc_rom.bin diff --git a/pc-bios/pxe-e1000.rom b/pc-bios/pxe-e1000.rom Binary files differnew file mode 100644 index 00000000..2e5f8b28 --- /dev/null +++ b/pc-bios/pxe-e1000.rom diff --git a/pc-bios/pxe-eepro100.rom b/pc-bios/pxe-eepro100.rom Binary files differnew file mode 100644 index 00000000..d292e8fe --- /dev/null +++ b/pc-bios/pxe-eepro100.rom diff --git a/pc-bios/pxe-ne2k_pci.rom b/pc-bios/pxe-ne2k_pci.rom Binary files differnew file mode 100644 index 00000000..62010cbc --- /dev/null +++ b/pc-bios/pxe-ne2k_pci.rom diff --git a/pc-bios/pxe-pcnet.rom b/pc-bios/pxe-pcnet.rom Binary files differnew file mode 100644 index 00000000..512d6d43 --- /dev/null +++ b/pc-bios/pxe-pcnet.rom diff --git a/pc-bios/pxe-rtl8139.rom b/pc-bios/pxe-rtl8139.rom Binary files differnew file mode 100644 index 00000000..67c77fbf --- /dev/null +++ b/pc-bios/pxe-rtl8139.rom diff --git a/pc-bios/pxe-virtio.rom b/pc-bios/pxe-virtio.rom Binary files differnew file mode 100644 index 00000000..b1ec9096 --- /dev/null +++ b/pc-bios/pxe-virtio.rom diff --git a/pc-bios/q35-acpi-dsdt.aml b/pc-bios/q35-acpi-dsdt.aml Binary files differnew file mode 100644 index 00000000..d71b3a32 --- /dev/null +++ b/pc-bios/q35-acpi-dsdt.aml diff --git a/pc-bios/qemu-icon.bmp b/pc-bios/qemu-icon.bmp Binary files differnew file mode 100644 index 00000000..72d9a2f5 --- /dev/null +++ b/pc-bios/qemu-icon.bmp diff --git a/pc-bios/qemu-nsis.bmp b/pc-bios/qemu-nsis.bmp Binary files differnew file mode 100644 index 00000000..ae82cd26 --- /dev/null +++ b/pc-bios/qemu-nsis.bmp diff --git a/pc-bios/qemu-nsis.ico b/pc-bios/qemu-nsis.ico Binary files differnew file mode 100644 index 00000000..1d0128cd --- /dev/null +++ b/pc-bios/qemu-nsis.ico diff --git a/pc-bios/qemu.rsrc b/pc-bios/qemu.rsrc new file mode 100644 index 00000000..e3d205b2 --- /dev/null +++ b/pc-bios/qemu.rsrc @@ -0,0 +1,1504 @@ +data 'icns' (-16455) { +	$"6963 6E73 0000 5DC3 6974 3332 0000 1DB3"            /* icns..]√it32...≥ */ +	$"0000 0000 FF00 FF00 B000 0F08 1222 3645"            /* ....ˇ.ˇ.∞...."6E */ +	$"4D56 6063 5A51 473C 2816 0CE8 0019 0416"            /* MV`cZQG<(..Ë.... */ +	$"3764 94B5 CCDD E7E9 EBEC EDEE ECEB EAE8"            /* 7dîµÃ›ÁÈÎÏÌÓÏÎÍË */ +	$"E2D4 BEA3 7746 200B E000 0608 2763 A5D0"            /* ‚‘æ£wF .‡...'c•– */ +	$"E6EE 80F5 8AF6 08F5 F4F0 EAD9 B97C 3B0F"            /* ÊÓÄıäˆ.ıÙÍŸπ|;. */ +	$"DB00 061C 64AF DAED F0F2 81F1 8BF0 83F1"            /* €...dØ⁄ÌÚÅÒãÉÒ */ +	$"05EE E3C1 8432 07D5 0007 0635 87CD E8ED"            /* .Ó„¡Ñ2.’...5áÕËÌ */ +	$"EDEE 97ED 07EE EEED EBDC A551 11D1 0007"            /* ÌÓóÌ.ÓÓÌ΋•Q.—.. */ +	$"0333 96D9 E6E9 EAE9 9CE8 06E9 E9E8 E1B8"            /* .3ñŸÊÈÍÈúË.ÈÈË·∏ */ +	$"560E CE00 0628 8CD3 E3E6 E5E4 93E3 80E4"            /* V.Œ..(唄ʉì„ĉ */ +	$"87E3 06E4 E5E4 DEAE 4A07 CA00 050D 63C8"            /* á„.‰Â‰fiÆJ. ...c» */ +	$"DFE1 E196 E084 DF86 E004 E1E0 D791 23C8"            /* fl··ñ‡Ñfl܇.·‡◊ë#» */ +	$"0004 2FA0 D8DC DC84 DA06 D9DA D9D9 DAD9"            /* ../†ÿ‹‹Ñ⁄.Ÿ⁄ŸŸ⁄Ÿ */ +	$"D987 DA00 D990 DA05 DBDC DBC0 5708 C400"            /* Ÿá⁄.Ÿê⁄.€‹€¿W.ƒ. */ +	$"1804 54C3 D7D7 D6D6 D7D6 D5D5 D6DF F1DF"            /* ..T√◊◊÷÷◊÷’’÷flÒfl */ +	$"DADF E5F1 EEDD D5D6 D5D4 81D5 81D6 82D8"            /* ⁄flÂÒÓ›’÷’‘Å’Å÷Çÿ */ +	$"83D6 80D8 80D6 80D7 04D6 D7D2 8615 C200"            /* É÷ÄÿÄ÷Ä◊.÷◊“Ü.¬. */ +	$"060E 75CB D4D3 D2D2 80D0 11E0 EAF0 F8FD"            /* ..uÀ‘”““Ä–.‡Í¯˝ */ +	$"F9F7 FAFB FDFD F7DB CED6 DDD7 D380 D08C"            /* ˘˜˙˚˝˝˜€Œ÷›◊”Ä–å */ +	$"D286 D104 D2D3 D2A3 29C0 0003 1591 CDCF"            /* “Ü—.“”“£)¿...ëÕœ */ +	$"80CE 06CC D7DB DEFB FCFD 86FE 0BF5 DBEB"            /* ÄŒ.Ã◊€fi˚¸˝Ü˛.ı€Î */ +	$"FAF7 F3EB E0D7 D0CD CD86 CE84 CD84 CE03"            /* ˙˜Û·◊–ÕÕÜŒÑÕÑŒ. */ +	$"CFD0 B739 BE00 0318 96CB CA81 C803 C7DB"            /* œ–∑9æ...ñÀ Å».«€ */ +	$"FAF9 8AFE 0BFA FCFE FEFD FCFB FAF2 E6D8"            /* ˙˘ä˛.˙¸˛˛˝¸˚˙ÚÊÿ */ +	$"CD8C C883 CA05 C8C9 CACC BA3F BC00 041B"            /* Õå»É .»… Ã∫?º... */ +	$"98C7 C5C3 81C4 02C3 C8F1 93FE 09FD FCFA"            /* ò«≈√Ń.√»Òì˛∆˝¸˙ */ +	$"F3E6 D5CB C3C2 C383 C584 C683 C502 C7B8"            /* ÛÊ’À√¬√É≈Ñ∆É≈.«∏ */ +	$"42BA 0003 1291 C4C1 84C0 02BC CFFB 96FE"            /* B∫...냡ѿ.ºœ˚ñ˛ */ +	$"06FC FAF5 E9D5 C2BD 87C0 86BF 02C1 B536"            /* .¸˙ıÈ’¬Ωá¿Üø.¡µ6 */ +	$"B800 030A 7DC1 BC84 BB03 B9CD D7EE 99FE"            /* ∏..¬}¡ºÑª.πÕ◊Óô˛ */ +	$"07FC F9EF D4BB BBBE BD82 BC87 BB03 BCC0"            /* .¸˘Ô‘ªªæΩǺáª.º¿ */ +	$"A825 B600 0304 64BB B981 B880 B704 B5C6"            /* ®%∂...dªπÅ∏Ä∑.µ∆ */ +	$"F5FA FB9B FE04 FDF9 E6C3 B58F B802 BC97"            /* ı˙˚õ˛.˝˘Ê√µè∏.ºó */ +	$"15B5 0002 39B2 B582 B480 B201 B5EA A0FE"            /* .µ..9≤µÇ¥Ä≤.µÍ†˛ */ +	$"04FC F1C9 B1B3 87B2 01B3 B382 B402 B873"            /* .¸Ò…±≥á≤.≥≥Ç¥.∏s */ +	$"06B3 0002 1899 B385 B002 ADCC FDA2 FE02"            /* .≥...ô≥Ö∞.≠Ã˝¢˛. */ +	$"F7CB AD8E B002 B1B1 43B2 0002 0671 AE86"            /* ˜À≠é∞.±±C≤...qÆÜ */ +	$"AC01 ADEC A4FE 02F7 C3A8 81AB 80AA 01AC"            /* ¨.≠ϧ˛.˜√®Å´Ä™.¨ */ +	$"AB84 AC03 AAAD 9C1C B100 0231 A6A7 80A6"            /* ´Ñ¨.™≠ú.±..1¶ßĶ */ +	$"82A7 02A4 BEFD 97FE 05DC 9C83 8DAE E085"            /* Çß.§æ˝ó˛.‹úÉçÆ‡Ö */ +	$"FE06 EEB0 A6A7 A8A6 A685 A800 A781 A602"            /* ˛.Ó∞¶ß®¶¶Ö®.ßŶ. */ +	$"AD69 04AF 0002 0A7E A681 A281 A302 A2A0"            /* ≠i.Ø..¬~¶Å¢Å£.¢† */ +	$"E097 FE08 A228 110E 0F14 295A BC83 FE03"            /* ‡ó˛.¢(....)ZºÉ˛. */ +	$"FDDF A3A1 81A2 80A3 86A2 02A4 A128 AF00"            /* ˝fl£°Å¢Ä£Ü¢.§°(Ø. */ +	$"013E A286 9E02 9DAE F996 FE02 F228 0181"            /* .>¢Üû.ùÆ˘ñ˛.Ú(.Å */ +	$"0004 0108 1B72 F582 FE04 FBC3 9A9E 9E82"            /* .....rıDz.˚√öûûÇ */ +	$"A086 9E03 A0A3 7407 AD00 0209 7C9D 8599"            /* †Üû.†£t.≠..∆|ùÖô */ +	$"029A 96D4 97FE 01F2 1B85 0002 0B60 F982"            /* .öñ‘ó˛.Ú.Ö...`˘Ç */ +	$"FE03 EB9E 9898 8899 819A 029B 9C28 AD00"            /* ˛.ÎûòòàôÅö.õú(≠. */ +	$"012C 9986 9802 93AC F897 FE01 FD72 8600"            /* .,ôÜò.쨯ó˛.˝rÜ. */ +	$"0109 A882 FE04 FCA6 9497 9780 9885 9781"            /* .∆®Ç˛.¸¶îóóÄòÖóÅ */ +	$"9801 9D60 AC00 0304 6897 9184 9202 9199"            /* ò.ù`¨...hóëÑí.ëô */ +	$"E699 FE01 F35B 8600 005D 83FE 01C2 8E8F"            /* Êô˛.Û[Ü..]ɲ.¬éè */ +	$"9201 8E18 AB00 0317 8B8F 8F83 9003 8F90"            /* í.é.´...ãèèÉê.èê */ +	$"DBFD 9AFE 02F5 8E1F 8400 0095 83FE 02EE"            /* €˝ö˛.ıé.Ñ..ïɲ.Ó */ +	$"978D 8590 808E 8090 048E 8E8F 9642 AB00"            /* óçÖêÄéÄê.ééèñB´. */ +	$"0338 9089 8983 8A02 87AA FC9C FE09 F8E3"            /* .8êââÉä.ᙸú˛∆¯„ */ +	$"934A 2315 1830 8DF8 84FE 02D9 8F86 828B"            /* ìJ#..0ç¯Ñ˛.ŸèÜÇã */ +	$"828A 808B 808A 028F 6904 AA00 015D 8C82"            /* ÇäÄãÄä.èi.™..]åÇ */ +	$"8480 8601 83D3 9EFE 07FD F8F3 EEDF E1F2"            /* ÑÄÜ.É”û˛.˝¯ÛÓfl·Ú */ +	$"F885 FE04 FCE1 A284 8380 8683 8582 8602"            /* ¯Ö˛.¸·¢ÑÉÄÜÉÖÇÜ. */ +	$"8781 14A9 0002 0E79 8282 8104 8383 818F"            /* áÅ.©...yÇÇÅ.ÉÉÅè */ +	$"F498 FE03 FDDE E2F6 83FE 01FD FD88 FE07"            /* Ùò˛.˝fi‚ˆÉ˛.˝˝à˛. */ +	$"FDF8 D3A3 887E 7F81 8282 8383 0189 2EA9"            /* ˝¯”£à~.ÅÇÇÉÉ.â.© */ +	$"0002 1E82 7F82 7E03 8080 7BAA 99FE 0BFD"            /* ...Ç.Ç~.ÄÄ{™ô˛.˝ */ +	$"B46C 5B58 6278 96B7 D4ED FD8A FE08 FCF9"            /* ¥l[Xbxñ∑‘Ì˝ä˛.¸˘ */ +	$"E5C1 9D84 7A7B 7F83 8003 7F7F 834A A900"            /* ¡ùÑz{.ÉÄ...ÉJ©. */ +	$"0432 827A 7B7B 8079 037A 7A75 CB9A FE11"            /* .2Çz{{Äy.zzuÀö˛. */ +	$"FAF5 E8C7 9E72 4B30 2422 2D41 5D7E 9FB6"            /* ˙ıË«ûrK0$"-A]~ü∂ */ +	$"D2F3 85FE 08FD FBF9 E6C2 967A 7579 817A"            /* “ÛÖ˛.˝˚˘Ê¬ñzuyÅz */ +	$"047B 797F 5E03 A800 0143 7E80 7781 7602"            /* .{y.^.®..C~ÄwÅv. */ +	$"757B E99D FE13 FCF9 F6F3 EFD2 A877 4925"            /* u{Èù˛.¸˘ˆÛÔ“®wI% */ +	$"1109 0B0D 2747 709E C9EB 83FE 07FD FBF7"            /* .∆..'Gpû…Îɲ.˝˚˜ */ +	$"D8A7 8072 7481 7602 776B 0BA8 0001 4F77"            /* ÿßÄrtÅv.wk.®..Ow */ +	$"8073 8172 0270 8DFC A2FE 13FC FAF6 F3F1"            /* ÄsÅr.p縢˛.¸˙ˆÛÒ */ +	$"D5AE 7F51 270D 0609 0C20 3C62 8FBB E181"            /* ’Æ.Q'..∆. <b誷Š*/ +	$"FE0B FCF9 E9BB 856F 7273 7374 6F0F A800"            /* ˛.¸˘ÈªÖorssto.®. */ +	$"0156 7281 7080 6F01 69AA A8FE 12FD FAF7"            /* .VrÅpÄo.i™®˛.˝˙˜ */ +	$"F4F1 D0A0 6937 1809 0508 0B19 3979 C3F1"            /* ÙÒ–†i7.∆....9y√Ò */ +	$"80FE 08FB EFB2 746D 706F 7017 A700 0206"            /* IJ.˚Ô≤tmpop.ß... */ +	$"596E 816B 806A 0167 CBAD FE19 FCF9 F6F2"            /* YnÅkÄj.gÀ≠˛.¸˘ˆÚ */ +	$"E3CC AD7B 4622 0D07 0B21 3F5C 92E1 FEFA"            /* „Ã≠{F"...!?\í·˛˙ */ +	$"D87D 686B 6D1B A700 0306 586A 6880 6704"            /* ÿ}hkm.ß...XjhÄg. */ +	$"6666 656E E8B2 FE14 FCFA F7F3 EFD2 AE81"            /* ffenË≤˛.¸˙˜ÛÔ“ÆÅ */ +	$"5429 0D08 1C81 F8FC E179 646B 1CA7 0003"            /* T)...ů¸·ydk.ß.. */ +	$"0655 6765 8264 0261 7EFB B7FE 0FFC FAF7"            /* .UgeÇd.a~˚∑˛.¸˙˜ */ +	$"F4F1 D088 3207 3FDA FDD2 6767 1BA7 0002"            /* ÙÒ–à2.?⁄˝“gg.ß.. */ +	$"0450 6381 6103 6060 5B9C BDFE 0AFC F8F2"            /* .PcÅa.``[úΩ˛¬¸¯Ú */ +	$"A527 24B9 FC94 5F18 A800 0148 6082 5E02"            /* •'$π¸î_.®..H`Ç^. */ +	$"5D58 C4AD FE0D FCE9 CDBA ADA2 A3A7 AFC0"            /* ]Xƒ≠˛.¸ÈÕ∫≠¢£ßØ¿ */ +	$"D2E6 F4FD 82FE 07FA DD30 31CB D75C 12A8"            /* “ÊÙ˝Ç˛.˙›01À◊\.® */ +	$"0003 3E5E 5959 8058 0257 62EA ABFE 1CDD"            /* ..>^YYÄX.WbÍ´˛.› */ +	$"A57D 695C 5958 5757 5857 595F 6873 7E8C"            /* •}i\YXWWXWY_hs~å */ +	$"98A5 AFAE A07C 5B56 639E 5F0E A800 0330"            /* ò•ØÆ†|[Vcû_.®..0 */ +	$"5955 5580 5402 507C FDA9 FE08 DA8F 5F54"            /* YUUÄT.P|˝©˛.⁄è_T */ +	$"5354 5455 5580 5681 5581 5480 5507 5454"            /* STTUUÄVÅUÅTÄU.TT */ +	$"5556 5557 4E07 A800 0122 5680 5203 5151"            /* UVUWN.®.."VÄR.QQ */ +	$"4C9C A8FE 05E1 955D 5051 5080 5183 5282"            /* Lú®˛.·ï]PQPÄQÉRÇ */ +	$"5180 5208 5151 5051 5152 5254 3FA9 0000"            /* QÄR.QQPQQRRT?©.. */ +	$"1581 5003 4F4F 49B4 A6FE 03D4 905D 4D85"            /* .ÅP.OOI¥¶˛.‘ê]MÖ */ +	$"4F82 5083 4F01 5050 844F 0152 2EA9 0002"            /* OÇPÉO.PPÑO.R.©.. */ +	$"0A45 4B81 4A01 49CE A3FE 06F2 BB7B 5349"            /* ¬EKÅJ.IŒ£˛.Úª{SI */ +	$"4A4A 804B 8D4A 824B 814A 014E 1BAA 0001"            /* JJÄKçJÇKÅJ.N.™.. */ +	$"324A 8047 0246 4EE4 A1FE 06E3 9E65 4944"            /* 2JÄG.FN‰°˛.„ûeID */ +	$"4647 8248 8547 8348 0147 4783 4880 4701"            /* FGÇHÖGÉH.GGÉHÄG. */ +	$"440C AA00 011C 4880 4502 4154 F19F FE05"            /* D.™...HÄE.ATÒü˛. */ +	$"DE8C 5644 4244 8043 8245 8344 8245 8644"            /* fiåVDBDÄCÇEÉDÇEÜD */ +	$"8145 0147 33AB 0001 0C3F 8041 023F 5EFB"            /* ÅE.G3´...?ÄA.?^˚ */ +	$"9DFE 02EE 9552 8040 8041 8540 8041 0140"            /* ù˛.ÓïRÄ@ÄAÖ@ÄA.@ */ +	$"4080 4180 4080 4182 4081 4101 4420 AC00"            /* @ÄAÄ@ÄAÇ@ÅA.D ¨. */ +	$"052C 403E 3E38 679D FE04 C35D 3C3D 3E82"            /* .,@>>8gù˛.√]<=>Ç */ +	$"4080 3E80 3F82 4080 3F80 3E8B 3F01 3D0C"            /* @Ä>Ä?Ç@Ä?Ä>ã?.=. */ +	$"AC00 0513 3D3B 3A34 749C FE02 A743 3880"            /* ¨...=;:4tú˛.ßC8Ä */ +	$"3A80 3B82 3A80 3982 3B83 3A80 3B87 3A01"            /* :Ä;Ç:Ä9Ç;É:Ä;á:. */ +	$"3E26 AD00 0504 2E38 3731 789B FE03 9C32"            /* >&≠....871xõ˛.ú2 */ +	$"3536 8037 8038 8337 0136 3688 3783 3680"            /* 56Ä7Ä8É7.66à7É6Ä */ +	$"3781 3601 380F AE00 0415 3634 2D77 9AFE"            /* 7Å6.8.Æ...64-wö˛ */ +	$"02BF 3432 8033 8034 0135 3583 3480 3301"            /* .ø42Ä3Ä4.55É4Ä3. */ +	$"3434 8335 8B34 0136 25AF 0004 0327 322B"            /* 44É5ã4.6%Ø...'2+ */ +	$"6F99 FE02 F24B 2C81 3080 3180 329B 3101"            /* oô˛.ÚK,Å0Ä1Ä2õ1. */ +	$"300D B000 030E 2F28 6099 FE01 9C27 882D"            /* 0.∞.../(`ô˛.ú'à- */ +	$"802E 882D 822E 872D 0130 1DB2 0003 1B29"            /* Ä.à-Ç.á-.0.≤...) */ +	$"4AFC 97FE 02F9 4B26 812A 842B 802C 822B"            /* J¸ó˛.˘K&Å*Ñ+Ä,Ç+ */ +	$"802A 802B 802C 852B 802C 022B 2809 B200"            /* Ä*Ä+Ä,Ö+Ä,.+(∆≤. */ +	$"0306 2137 E997 FE02 CA28 2681 2784 2880"            /* ..!7Èó˛. (&Å'Ñ(Ä */ +	$"2997 2800 10B4 0002 0D25 C897 FE02 931D"            /* )ó(..¥...%»ó˛.ì. */ +	$"2584 248D 2582 2483 2581 2401 2718 B600"            /* %Ñ$ç%Ç$É%Å$.'.∂. */ +	$"0110 B597 FE01 681B 8521 8422 8023 8B22"            /* ..µó˛.h.Ö!Ñ"Ä#ã" */ +	$"8023 8022 0223 1C04 B700 00A2 97FE 014A"            /* Ä#Ä".#..∑..¢ó˛.J */ +	$"1A85 1E84 1F80 2086 1F80 1E82 1F80 2001"            /* .Ö.Ñ.Ä Ü.Ä.Ç.Ä . */ +	$"1C08 B800 0094 96FE 02FB 3C19 841C 881D"            /* ..∏..îñ˛.˚<.Ñ.à. */ +	$"801E 861D 801C 811D 011C 09B9 0000 8C96"            /* Ä.Ü.Ä.Å...∆π..åñ */ +	$"FE02 F434 1688 1994 1A03 191A 190A BA00"            /* ˛.Ù4.à.î.....¬∫. */ +	$"0085 96FE 02F4 3114 8816 8717 8018 8717"            /* .Öñ˛.Ù1.à.á.Ä.á. */ +	$"0218 1609 BB00 007C 96FE 02F7 3111 8B14"            /* ...∆ª..|ñ˛.˜1.ã. */ +	$"8715 8016 8415 0113 07BC 0000 6F97 FE01"            /* á.Ä.Ñ....º..oó˛. */ +	$"3A0E 9D12 0213 0E04 BD00 004C 97FE 0148"            /* :.ù.....Ω..Ló˛.H */ +	$"0A8B 0F8F 1000 0BBF 0001 22F8 96FE 0157"            /* ¬ã.è...ø.."¯ñ˛.W */ +	$"0795 0D83 0E01 0D07 C000 0104 BB96 FE01"            /* .ï.É....¿...ªñ˛. */ +	$"7504 9A0B 0109 03C2 0000 3A96 FE01 9D03"            /* u.ö..∆.¬..:ñ˛.ù. */ +	$"9809 0107 04C5 0000 7295 FE01 A500 9706"            /* ò∆...≈..rï˛.•.ó. */ +	$"0003 C800 0160 F993 FE02 C606 0094 03CC"            /* ..»..`˘ì˛.∆..î.à */ +	$"0001 47EE 92FE 01EC 15E5 0001 37E9 92FE"            /* ..GÓí˛.Ï.Â..7Èí˛ */ +	$"0037 E600 0131 E691 FE00 6BE7 0001 32EC"            /* .7Ê..1Êë˛.kÁ..2Ï */ +	$"90FE 00A6 E800 0139 E68F FE01 E010 E800"            /* ê˛.¶Ë..9Êè˛.‡.Ë. */ +	$"0141 EC8F FE00 37E9 0001 4BF3 8EFE 007A"            /* .AÏè˛.7È..KÛé˛.z */ +	$"EA00 0164 F78D FE01 C305 EA00 0181 F98C"            /* Í..d˜ç˛.√.Í..Å˘å */ +	$"FE01 F423 EA00 0209 9EFB 8CFE 0066 EB00"            /* ˛.Ù#Í..∆û˚å˛.fÎ. */ +	$"020F B9FD 8BFE 01BA 04EB 0001 1CD5 8BFE"            /* ..π˝ã˛.∫.Î...’ã˛ */ +	$"01F4 23EC 0001 30E8 8BFE 0067 ED00 014C"            /* .Ù#Ï..0Ëã˛.gÌ..L */ +	$"F58A FE01 BB04 ED00 016F F989 FE01 F424"            /* ıä˛.ª.Ì..o˘â˛.Ù$ */ +	$"ED00 0206 A1FC 89FE 0067 EE00 0113 CD89"            /* Ì...°¸â˛.gÓ...Õâ */ +	$"FE01 BE06 EE00 012E EA88 FE01 F624 EF00"            /* ˛.æ.Ó...Íà˛.ˆ$Ô. */ +	$"015A F888 FE00 6CEF 0002 038B FB87 FE01"            /* .Z¯à˛.lÔ...ã˚á˛. */ +	$"C206 EF00 010F BC87 FE01 F828 F000 0125"            /* ¬.Ô...ºá˛.¯(..% */ +	$"E687 FE00 6DF1 0001 59F9 86FE 01BD 04F0"            /* Êá˛.mÒ..Y˘Ü˛.Ω. */ +	$"0002 049D FD85 FE01 F320 F100 0117 D786"            /* ...ù˝Ö˛.Û Ò...◊Ü */ +	$"FE00 5EF2 0001 42F6 85FE 00A9 F300 0182"            /* ˛.^Ú..BˆÖ˛.©Û..Ç */ +	$"FB84 FE01 E311 F200 010F C585 FE00 35F3"            /* ˚Ñ˛.„.Ú...≈Ö˛.5Û */ +	$"0001 31F1 84FE 0074 F400 0176 F983 FE01"            /* ..1ÒÑ˛.tÙ..v˘É˛. */ +	$"B601 F300 010E C383 FE01 E310 F400 0138"            /* ∂.Û...√ɲ.„.Ù..8 */ +	$"F082 FE01 FB2A F500 0184 FB82 FE00 4FF5"            /* Dz.˚*ı..Ñ˚Dz.Oı */ +	$"0001 13CD 82FE 007D F600 0145 F481 FE00"            /* ...ÕDz.}ˆ..EÙŞ. */ +	$"A1F6 0002 049A FD80 FE01 BA01 F600 0121"            /* °ˆ...ö˝Ä˛.∫.ˆ..! */ +	$"E480 FE01 D209 F700 056F FAFE FEE5 11F7"            /* ‰Ä˛.“∆˜..o˙˛˛Â.˜ */ +	$"0005 0ECA FEFE F41D F800 0447 F5FE FE2C"            /* ... ˛˛Ù.¯..Gı˛˛, */ +	$"F800 0406 A5FD FE40 F900 0329 E0FE 5BFA"            /* ¯...•˝˛@˘..)‡˛[˙ */ +	$"0002 3BF7 7EFB 0001 C2A8 FB00 026A CB01"            /* ..;˜~˚..¬®˚..jÀ. */ +	$"FA00 0223 D210 FA00 0204 9920 FB00 0129"            /* ˙..#“.˙...ô ˚..) */ +	$"1EFF 00FF 00FF 00FF 00FF 00FF 00FF 00FF"            /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ +	$"00A8 00FF 00FF 00B0 000F 0812 2236 454D"            /* .®.ˇ.ˇ.∞...."6EM */ +	$"5660 635A 5147 3C28 160C E800 1904 1637"            /* V`cZQG<(..Ë....7 */ +	$"6494 B5CC DDE7 E9EB ECED EEEC EBEA E8E2"            /* dîµÃ›ÁÈÎÏÌÓÏÎÍË‚ */ +	$"D4BE A377 4620 0BE0 0006 0827 63A5 D0E6"            /* ‘æ£wF .‡...'c•–Ê */ +	$"EE80 F58A F608 F5F4 F0EA D9B9 7C3B 0FDB"            /* ÓÄıäˆ.ıÙÍŸπ|;.€ */ +	$"0006 1C64 AFDA EDF0 F281 F18B F083 F105"            /* ...dØ⁄ÌÚÅÒãÉÒ. */ +	$"EEE3 C184 3207 D500 0706 3587 CDE8 EDED"            /* Ó„¡Ñ2.’...5áÕËÌÌ */ +	$"EE97 ED07 EEEE EDEB DCA5 5111 D100 0703"            /* ÓóÌ.ÓÓÌ΋•Q.—... */ +	$"3396 D9E6 E9EA E99C E806 E9E9 E8E1 B856"            /* 3ñŸÊÈÍÈúË.ÈÈË·∏V */ +	$"0ECE 0006 288C D3E3 E6E5 E493 E380 E487"            /* .Œ..(唄ʉì„ĉá */ +	$"E306 E4E5 E4DE AE4A 07CA 0005 0D63 C8DF"            /* „.‰Â‰fiÆJ. ...c»fl */ +	$"E1E1 96E0 84DF 86E0 04E1 E0D7 9123 C800"            /* ··ñ‡Ñfl܇.·‡◊ë#». */ +	$"042F A0D8 DCDC 82DA 08DB D9DE DCDE DFDC"            /* ./†ÿ‹‹Ç⁄.€Ÿfi‹fifl‹ */ +	$"DEDE 87DA 00D9 90DA 05DB DCDB C057 08C4"            /* fifiá⁄.Ÿê⁄.€‹€¿W.ƒ */ +	$"0004 0454 C3D7 D780 D614 D7DA DBD9 BC82"            /* ...T√◊◊Ä÷.◊⁄€ŸºÇ */ +	$"BDCA BCA7 8185 C2DA D6D8 D9D8 D6D6 D581"            /* Ω ºßÅÖ¬⁄÷ÿŸÿ÷÷’Å */ +	$"D682 D883 D680 D880 D680 D704 D6D7 D286"            /* ÷ÇÿÉ÷ÄÿÄ÷Ä◊.÷◊“Ü */ +	$"15C2 001F 0E75 CBD4 D3D2 D2D4 D6D3 AC8C"            /* .¬...uÀ‘”““‘÷”¨å */ +	$"7E65 5362 685D 5753 5267 B7D8 C5B1 C2CD"            /* ~eSbh]WSRg∑ÿ≈±¬Õ */ +	$"D4D7 D5D3 8BD2 86D1 04D2 D3D2 A329 C000"            /* ‘◊’”ã“Ü—.“”“£)¿. */ +	$"0315 91CD CF80 CE0B D0B5 ABA5 5A54 5352"            /* ..ë՜Č.–µ´•ZTSR */ +	$"5151 5252 8151 0C66 AA81 5964 6F83 9EB5"            /* QQRRÅQ.f™ÅYdoÉûµ */ +	$"C9D2 D2CF 85CE 84CD 84CE 03CF D0B7 39BE"            /* …““œÖŒÑÕÑŒ.œ–∑9æ */ +	$"0003 1896 CBCA 81C8 06CD 9E57 5D50 5151"            /* ...ñÀ Å».ÕûW]PQQ */ +	$"8552 1151 515A 5551 5152 5456 5E6D 89A6"            /* ÖR.QQZUQQRTV^mâ¶ */ +	$"C0CD CDCB C988 C883 CA05 C8C9 CACC BA3F"            /* ¿ÕÕÀ…à»É .»… Ã∫? */ +	$"BC00 041B 98C7 C5C3 82C4 02BD 684F 8A52"            /* º...ò«≈√ǃ.ΩhOäR */ +	$"0051 8152 0C51 5152 5254 5A67 82A2 BAC6"            /* .QÅR.QQRRTZgÇ¢∫∆ */ +	$"C8C6 83C5 84C6 83C5 02C7 B842 BA00 0312"            /* »∆É≈Ñ∆É≈.«∏B∫... */ +	$"91C4 C184 C003 C6A2 5551 9252 0951 5152"            /* 냡ѿ.∆¢UQíR∆QQR */ +	$"5359 6379 9ABA C387 C086 BF02 C1B5 36B8"            /* SYcyö∫√á¿Üø.¡µ6∏ */ +	$"0003 0A7D C1BC 84BB 04BF 9E8E 6A50 9552"            /* ..¬}¡ºÑª.øûéjPïR */ +	$"0A51 5152 5357 6B95 BBBF BEBD 82BC 87BB"            /* ¬QQRSWkïªøæΩǺ᪠*/ +	$"03BC C0A8 25B6 0003 0464 BBB9 81B8 80B7"            /* .º¿®%∂...dªπÅ∏Ä∑ */ +	$"05BA A35E 5656 5198 5280 5103 5672 A8BB"            /* .∫£^VVQòRÄQ.Vr®ª */ +	$"8FB8 02BC 9715 B500 0239 B2B5 82B4 06B2"            /* è∏.ºó.µ..9≤µÇ¥.≤ */ +	$"B2B3 B16B 5051 9D52 0551 5361 95B8 B387"            /* ≤≥±kPQùR.QSaï∏≥á */ +	$"B201 B3B3 82B4 02B8 7306 B300 0218 99B3"            /* ≤.≥≥Ç¥.∏s.≥...ô≥ */ +	$"85B0 03B3 8E51 519F 5204 5150 5A8D B28E"            /* Ö∞.≥éQQüR.QPZç≤é */ +	$"B002 B1B1 43B2 0002 0671 AE85 AC03 ADAA"            /* ∞.±±C≤...qÆÖ¨.≠™ */ +	$"654F 9652 0054 8056 0155 5383 5203 5158"            /* eOñR.TÄV.USÉR.QX */ +	$"92AE 81AB 80AA 01AC AB84 AC03 AAAD 9C1C"            /* íÆÅ´Ä™.¨´Ñ¨.™≠ú. */ +	$"B100 0231 A6A7 80A6 82A7 01AA 8F97 5208"            /* ±..1¶ßĶÇß.™èóR. */ +	$"5548 342D 313B 4954 5582 5207 5060 9EA9"            /* UH4-1;ITUÇR.P`û© */ +	$"A7A8 A6A6 85A8 00A7 81A6 02AD 6904 AF00"            /* ß®¶¶Ö®.ßŶ.≠i.Ø. */ +	$"020A 7EA6 81A2 82A3 02A4 6C50 9552 0B55"            /* .¬~¶Å¢Ç£.§lPïR.U */ +	$"3610 0605 0506 1021 3F55 5381 5201 516D"            /* 6......!?USÅR.Qm */ +	$"83A2 80A3 86A2 02A4 A128 AF00 013E A286"            /* ɢģܢ.§°(Ø..>¢Ü */ +	$"9E02 A191 5595 5203 534F 1101 8100 0501"            /* û.°ëUïR.SO..Å... */ +	$"030B 2750 5380 5205 5152 81A1 9E9E 82A0"            /* ..'PSÄR.QRŰûûdž */ +	$"869E 03A0 A374 07AD 0002 097C 9D85 9903"            /* Üû.†£t.≠..∆|ùÖô. */ +	$"9A9E 6F50 9552 0253 4F0D 8500 0104 2282"            /* öûoPïR.SO.Ö..."Ç */ +	$"5204 505F 9899 9888 9981 9A02 9B9C 28AD"            /* R.P_òôòàôÅö.õú(≠ */ +	$"0001 2C99 8798 0287 5651 9652 0154 2886"            /* ..,ôáò.áVQñR.T(Ü */ +	$"0002 0339 5581 5201 538A 8097 8098 8597"            /* ...9UÅR.SäÄóÄòÖó */ +	$"8198 019D 60AC 0003 0468 9791 8492 0393"            /* Åò.ù`¨...hóëÑí.ì */ +	$"8E60 5098 5201 5021 8600 0121 5681 5202"            /* é`PòR.P!Ü..!VÅR. */ +	$"5074 968F 9201 8E18 AB00 0317 8B8F 8F84"            /* Ptñèí.é.´...ãèèÑ */ +	$"9002 8F64 5099 5203 5351 310F 8400 0133"            /* ê.èdPôR.SQ1.Ñ..3 */ +	$"5581 5202 5159 8786 9080 8E80 9004 8E8E"            /* UÅR.QYáÜêÄéÄê.éé */ +	$"8F96 42AB 0003 3890 8989 838A 038D 7B51"            /* èñB´..8êââÉä.ç{Q */ +	$"519B 5209 544A 331C 0F0B 0C14 3051 8352"            /* QõR∆TJ3.....0QÉR */ +	$"0350 6288 8D82 8B82 8A80 8B80 8A02 8F69"            /* .PbàçÇãÇäÄãÄä.èi */ +	$"04AA 0001 5D8C 8284 8086 0288 6350 9852"            /* .™..]åÇÑÄÜ.àcPòR */ +	$"0153 5381 5206 5452 4C49 494F 5385 5207"            /* .SSÅR.TRLIIOSÖR. */ +	$"515E 7A87 8887 8686 8385 8286 0287 8114"            /* Q^záàáÜÜÉÖÇÜ.áÅ. */ +	$"A900 020E 7982 8281 8083 017F 5699 5203"            /* ©...yÇÇÅÄÉ..VôR. */ +	$"494A 5054 8056 0255 5453 8952 0651 5464"            /* IJPTÄV.UTSâR.QTd */ +	$"7581 8383 8382 8383 0189 2EA9 0002 1E82"            /* uÅÉÉÉÇÉÉ.â.©...Ç */ +	$"7F82 7E04 8080 816F 5098 520C 533D 2621"            /* .Ç~.ÄÄÅoPòR.S=&! */ +	$"2123 2A33 3E46 4E51 5580 5602 5554 5383"            /* !#*3>FNQUÄV.UTSÉ */ +	$"5208 5153 5A66 737D 8080 7F83 8003 7F7F"            /* R.QSZfs}ÄÄ.ÉÄ... */ +	$"834A A900 0432 827A 7B7B 8079 047A 7A7C"            /* ÉJ©..2Çz{{Äy.zz| */ +	$"6050 9A52 1551 4B41 3628 1D13 100E 1319"            /* `PöR.QKA6(...... */ +	$"222C 363E 4550 5556 5654 5380 5208 5151"            /* ",6>EPUVVTSÄR.QQ */ +	$"5358 6471 797B 7B81 7A04 7B79 7F5E 03A8"            /* SXdqy{{Åz.{y.^.® */ +	$"0001 437E 8077 8276 0274 5851 9B52 2251"            /* ..C~ÄwÇv.tXQõR"Q */ +	$"5253 5352 4D44 392A 1B10 0903 0304 101B"            /* RSSRMD9*..∆..... */ +	$"2836 434E 5356 5655 5352 5151 545D 6874"            /* (6CNSVVUSRQQT]ht */ +	$"7877 8176 0277 6B0B A800 014F 7780 7381"            /* xwÅv.wk.®..OwÄsÅ */ +	$"7201 736B A452 1C53 5352 4D47 3A2C 1E10"            /* r.sk§R.SSRMG:,.. */ +	$"0602 0304 0E17 2332 3F4A 5256 5553 5152"            /* ......#2?JRVUSQR */ +	$"5662 6F74 8073 0274 6F0F A800 0156 7281"            /* VbotÄs.to.®..VrÅ */ +	$"7080 6F02 7062 51A8 521D 5353 524E 4536"            /* pÄo.pbQ®R.SSRNE6 */ +	$"2616 0C05 0202 030B 172B 414F 5456 5553"            /* &........+AOTVUS */ +	$"5362 6F70 706F 7017 A700 0206 596E 816B"            /* Sboppop.ß...YnÅk */ +	$"806A 026C 5B51 AD52 1853 5350 4A43 3A2B"            /* Äj.l[Q≠R.SSPJC:+ */ +	$"1A0F 0802 040E 1922 324B 5652 5969 6C6B"            /* ......."2KVRYilk */ +	$"6D1B A700 0306 586A 6880 6780 6601 6754"            /* m.ß...XjhÄgÄf.gT */ +	$"B252 8053 1151 4C46 3A2D 1E11 0603 0D2E"            /* ≤RÄS.QLF:-...... */ +	$"5153 5564 686B 1CA7 0003 0655 6765 8364"            /* QSUdhk.ß...UgeÉd */ +	$"0060 B952 8053 0B4F 452F 1402 1849 5558"            /* .`πRÄS.OE/...IUX */ +	$"6468 1BA7 0002 0450 6381 6103 6060 615C"            /* dh.ß...PcÅa.``a\ */ +	$"BE52 0954 5039 100E 3D53 5D63 18A8 0001"            /* æR∆TP9..=S]c.®.. */ +	$"4860 825E 025D 5D56 AF52 0255 5756 8058"            /* H`Ç^.]]VØR.UWVÄX */ +	$"0357 5555 5384 5207 534B 1F23 5456 5E12"            /* .WUUSÑR.SK.#TV^. */ +	$"A800 033E 5E59 5980 5801 5958 AC52 0353"            /* ®..>^YYÄX.YX¨R.S */ +	$"5558 5888 5900 5880 5609 5452 5557 5A59"            /* UXXàY.XÄV∆TRUWZY */ +	$"5956 560E A800 0330 5955 5580 5401 5554"            /* YVV.®..0YUUÄT.UT */ +	$"AB52 0254 5555 8054 0155 5580 5680 5585"            /* ´R.TUUÄT.UUÄVÄUÖ */ +	$"5680 5504 5656 584D 07A8 0001 2256 8052"            /* VÄU.VVXM.®.."VÄR */ +	$"8051 AD52 8251 8352 8251 8052 8251 0352"            /* ÄQ≠RÇQÉRÇQÄRÇQ.R */ +	$"5254 3FA9 0000 1581 5080 4F00 51A6 5202"            /* RT?©...ÅPÄO.Q¶R. */ +	$"5150 4F80 5083 4F82 5083 4F01 5050 844F"            /* QPOÄPÉOÇPÉO.PPÑO */ +	$"0152 2EA9 0002 0A45 4B82 4A00 50A2 5207"            /* .R.©..¬EKÇJ.P¢R. */ +	$"5351 4F4E 4A4B 4A4A 804B 8D4A 824B 814A"            /* SQONJKJJÄKçJÇKÅJ */ +	$"014E 1BAA 0001 324A 8147 0148 51A0 5204"            /* .N.™..2JÅG.HQ†R. */ +	$"5351 4E4A 4780 4682 4885 4783 4801 4747"            /* SQNJGÄFÇHÖGÉH.GG */ +	$"8348 8047 0144 0CAA 0001 1C48 8045 0244"            /* ÉHÄG.D.™...HÄE.D */ +	$"4551 9E52 0653 504B 4543 4344 8043 8245"            /* EQûR.SPKECCDÄCÇE */ +	$"8344 8245 8644 8145 0147 33AB 0001 0C3F"            /* ÉDÇEÜDÅE.G3´...? */ +	$"8041 0140 449D 5204 5352 4942 4082 4185"            /* ÄA.@DùR.SRIB@ÇAÖ */ +	$"4080 4101 4040 8041 8040 8041 8240 8141"            /* @ÄA.@@ÄAÄ@ÄAÇ@ÅA */ +	$"0144 20AC 0001 2C40 803E 0042 9C52 0553"            /* .D ¨..,@Ä>.BúR.S */ +	$"4D41 3E3F 3F82 4080 3E80 3F82 4080 3F80"            /* MA>??Ç@Ä>Ä?Ç@Ä?Ä */ +	$"3E8B 3F01 3D0C AC00 0613 3D3B 3A39 4153"            /* >ã?.=.¨...=;:9AS */ +	$"9A52 0353 493A 3980 3A80 3B82 3A80 3982"            /* öR.SI:9Ä:Ä;Ç:Ä9Ç */ +	$"3B83 3A80 3B87 3A01 3E26 AD00 0604 2E38"            /* ;É:Ä;á:.>&≠....8 */ +	$"3736 4153 9952 0153 4680 3680 3780 3883"            /* 76ASôR.SFÄ6Ä7Ä8É */ +	$"3701 3636 8837 8336 8037 8136 0138 0FAE"            /* 7.66à7É6Ä7Å6.8.Æ */ +	$"0005 1536 3433 3F53 9852 0353 4933 3280"            /* ...643?SòR.SI32Ä */ +	$"3380 3401 3535 8334 8033 0134 3483 358B"            /* 3Ä4.55É4Ä3.44É5ã */ +	$"3401 3625 AF00 0503 2732 303B 5398 5202"            /* 4.6%Ø...'20;SòR. */ +	$"5135 2F81 3080 3180 329B 3101 300D B000"            /* Q5/Å0Ä1Ä2õ1.0.∞. */ +	$"040E 2F2C 3853 9752 0254 412C 882D 802E"            /* ../,8SóR.TA,à-Ä. */ +	$"882D 822E 872D 0130 1DB2 0003 1B2C 3251"            /* à-Ç.á-.0.≤...,2Q */ +	$"9752 0251 3129 812A 842B 802C 822B 802A"            /* óR.Q1)Å*Ñ+Ä,Ç+Ä* */ +	$"802B 802C 852B 802C 022B 2809 B200 0406"            /* Ä+Ä,Ö+Ä,.+(∆≤... */ +	$"242D 4D53 9552 0153 4983 2784 2880 2997"            /* $-MSïR.SIÉ'Ñ(Ä)ó */ +	$"2800 10B4 0003 0D26 4853 9552 0354 3D22"            /* (..¥...&HSïR.T=" */ +	$"2584 248D 2582 2483 2581 2401 2718 B600"            /* %Ñ$ç%Ç$É%Å$.'.∂. */ +	$"0212 4454 9552 0254 3220 8521 8422 8023"            /* ..DTïR.T2 Ö!Ñ"Ä# */ +	$"8B22 8023 8022 0223 1C04 B700 0138 5595"            /* ã"Ä#Ä".#..∑..8Uï */ +	$"5202 532A 1D85 1E84 1F80 2086 1F80 1E82"            /* R.S*.Ö.Ñ.Ä Ü.Ä.Ç */ +	$"1F80 2001 1C08 B800 0132 5695 5202 5125"            /* .Ä ...∏..2VïR.Q% */ +	$"1B84 1C88 1D80 1E86 1D80 1C81 1D01 1C09"            /* .Ñ.à.Ä.Ü.Ä.Å...∆ */ +	$"B900 012F 5695 5201 5021 8919 941A 0319"            /* π../VïR.P!â.î... */ +	$"1A19 0ABA 0001 2D56 9552 014F 1E89 1687"            /* ..¬∫..-VïR.O.â.á */ +	$"1780 1887 1702 1816 09BB 0001 2A56 9552"            /* .Ä.á....∆ª..*VïR */ +	$"0250 1C13 8B14 8715 8016 8415 0113 07BC"            /* .P..ã.á.Ä.Ñ....º */ +	$"0001 2756 9652 011E 109D 1202 130E 04BD"            /* ..'VñR...ù.....Ω */ +	$"0001 1C56 9552 0254 210E 8B0F 8F10 000B"            /* ...VïR.T!.ã.è... */ +	$"BF00 010E 5095 5202 5524 0B95 0D83 0E01"            /* ø...PïR.U$.ï.É.. */ +	$"0D07 C000 0203 3E55 9452 0256 2B09 9A0B"            /* ..¿...>UîR.V+∆ö. */ +	$"0109 03C2 0002 1654 5393 5202 5535 0698"            /* .∆.¬...TSìR.U5.ò */ +	$"0901 0704 C500 0227 5553 9252 0255 3704"            /* ∆...≈..'USíR.U7. */ +	$"9706 0003 C800 0222 5253 9152 0254 4104"            /* ó...».."RSëR.TA. */ +	$"9503 CC00 021A 4D54 9052 0253 4D09 E500"            /* ï.Ã...MTêR.SM∆Â. */ +	$"0216 4D54 9052 0154 15E6 0002 134B 548F"            /* ..MTêR.T.Ê...KTè */ +	$"5201 5625 E700 0214 4E54 8E52 0155 36E8"            /* R.V%Á...NTéR.U6Ë */ +	$"0002 154C 538D 5202 5348 08E8 0002 184D"            /* ...LSçR.SH.Ë...M */ +	$"538D 5201 5415 E900 021C 5053 8C52 0156"            /* SçR.T.È...PSåR.V */ +	$"2AEA 0001 2353 8C52 0154 3FEB 0001 2D54"            /* *Í..#SåR.T?Î..-T */ +	$"8C52 0150 0FEA 0002 0434 558B 5201 5623"            /* åR.P.Í...4UãR.V# */ +	$"EB00 0208 3C54 8A52 0155 3CEC 0002 0D46"            /* Î...<TäR.U<Ï...F */ +	$"5389 5202 5350 0FEC 0002 134C 5389 5201"            /* SâR.SP.Ï...LSâR. */ +	$"5624 ED00 011C 5189 5201 553D EE00 0127"            /* V$Ì...QâR.U=Ó..' */ +	$"5488 5202 5350 0FED 0002 0435 5588 5201"            /* TàR.SP.Ì...5UàR. */ +	$"5624 EE00 0209 4454 8752 0155 3EEF 0002"            /* V$Ó..∆DTáR.U>Ô.. */ +	$"134D 5387 5201 5010 EF00 011F 5387 5201"            /* .MSáR.P.Ô...SáR. */ +	$"5625 F000 012F 5586 5201 553F F000 0207"            /* V%../UÜR.U?... */ +	$"3E54 8652 0151 10F0 0002 0F4D 5385 5201"            /* >TÜR.Q....MSÖR. */ +	$"5625 F100 011E 5485 5201 553E F100 0203"            /* V%Ò...TÖR.U>Ò... */ +	$"3455 8452 0253 500E F100 020B 4654 8452"            /* 4UÑR.SP.Ò...FTÑR */ +	$"0156 21F2 0001 1951 8452 0155 38F3 0001"            /* .V!Ú...QÑR.U8Û.. */ +	$"2C55 8352 0253 4908 F200 0208 4054 8352"            /* ,UÉR.SI.Ú...@TÉR */ +	$"0153 15F3 0001 134F 8352 0156 27F4 0001"            /* .S.Û...OÉR.V'Ù.. */ +	$"2854 8252 0155 3DF4 0002 0741 5481 5202"            /* (TÇR.U=Ù...ATÅR. */ +	$"5349 08F4 0001 1550 8252 0151 11F5 0001"            /* SI.Ù...PÇR.Q.ı.. */ +	$"2C55 8152 0156 1BF5 0002 0944 5480 5201"            /* ,UÅR.V.ı..∆DTÄR. */ +	$"562A F600 0019 8152 0156 35F7 0005 3456"            /* V*ˆ...ÅR.V5˜..4V */ +	$"5252 553E F700 060E 4B53 5254 4405 F700"            /* RRU>˜...KSRTD.˜. */ +	$"0526 5552 5349 08F7 0005 0842 5453 4E0D"            /* .&URSI.˜...BTSN. */ +	$"F800 0019 8052 0011 F800 0403 3755 5418"            /* ¯...ÄR..¯...7UT. */ +	$"F900 0310 4A57 20FA 0002 1552 2AFB 0001"            /* ˘...JW ˙...R*˚.. */ +	$"3E37 FB00 0125 43FB 0002 0E44 07FA 0002"            /* >7˚..%C˚...D.˙.. */ +	$"0333 0EFB 0001 0F0D FF00 FF00 FF00 FF00"            /* .3.˚....ˇ.ˇ.ˇ.ˇ. */ +	$"FF00 FF00 FF00 FF00 A800 FF00 FF00 B000"            /* ˇ.ˇ.ˇ.ˇ.®.ˇ.ˇ.∞. */ +	$"0F08 1222 3645 4D56 6063 5A51 473C 2816"            /* ..."6EMV`cZQG<(. */ +	$"0CE8 0019 0416 3764 94B5 CCDD E7E9 EBEC"            /* .Ë....7dîµÃ›ÁÈÎÏ */ +	$"EDEE ECEB EAE8 E2D4 BEA3 7746 200B E000"            /* ÌÓÏÎÍË‚‘æ£wF .‡. */ +	$"0608 2763 A5D0 E6EE 80F5 8AF6 08F5 F4F0"            /* ..'c•–ÊÓÄıäˆ.ıÙ */ +	$"EAD9 B97C 3B0F DB00 061C 64AF DAED F0F2"            /* ÍŸπ|;.€...dØ⁄ÌÚ */ +	$"81F1 8BF0 83F1 05EE E3C1 8432 07D5 0007"            /* ÅÒãÉÒ.Ó„¡Ñ2.’.. */ +	$"0635 87CD E8ED EDEE 97ED 07EE EEED EBDC"            /* .5áÕËÌÌÓóÌ.ÓÓÌ΋ */ +	$"A551 11D1 0007 0333 96D9 E6E9 EAE9 9CE8"            /* •Q.—...3ñŸÊÈÍÈúË */ +	$"06E9 E9E8 E1B8 560E CE00 0628 8CD3 E3E6"            /* .ÈÈË·∏V.Œ..(å”„Ê */ +	$"E5E4 93E3 80E4 87E3 06E4 E5E4 DEAE 4A07"            /* ‰ì„ĉá„.‰Â‰fiÆJ. */ +	$"CA00 050D 63C8 DFE1 E196 E084 DF86 E004"            /*  ...c»fl··ñ‡Ñfl܇. */ +	$"E1E0 D791 23C8 0004 2FA0 D8DC DC81 DA06"            /* ·‡◊ë#»../†ÿ‹‹Å⁄. */ +	$"DBDC D9E0 DEE0 E480 DF87 DA00 D990 DA05"            /* €‹Ÿ‡fi‡‰Äflá⁄.Ÿê⁄. */ +	$"DBDC DBC0 5708 C400 0404 54C3 D7D7 80D6"            /* €‹€¿W.ƒ...T√◊◊Ä÷ */ +	$"14D7 DFDF DDA5 45A8 C1A4 7E43 4DB0 DED6"            /* .◊flfl›•E®¡§~CM∞fi÷ */ +	$"D9DD D9D8 D6D5 81D6 82D8 83D6 80D8 80D6"            /* Ÿ›Ÿÿ÷’Å÷ÇÿÉ÷ÄÿÄ÷ */ +	$"80D7 04D6 D7D2 8615 C200 1F0E 75CB D4D3"            /* Ä◊.÷◊“Ü.¬...uÀ‘” */ +	$"D2D2 D6DA D489 563E 1305 131C 130D 0506"            /* ““÷⁄‘âV>........ */ +	$"1E9F E0BA 94B4 C9D7 DBD7 D38B D286 D104"            /* .ü‡∫◊€◊”ã“Ü—. */ +	$"D2D3 D2A3 29C0 0003 1591 CDCF 80CE 06D2"            /* “”“£)¿...ë՜Č.“ */ +	$"9F8E 800F 0805 8500 0D01 1B8B 4311 152B"            /* üéÄ...Ö....ãC..+ */ +	$"4872 A0C4 D7D7 D185 CE84 CD84 CE03 CFD0"            /* Hr†ƒ◊◊—ÖŒÑÕÑŒ.œ– */ +	$"B739 BE00 0318 96CB CA81 C803 D176 100E"            /* ∑9æ...ñÀ Å».—v.. */ +	$"8900 1001 0F06 0000 0206 0C12 2951 86B8"            /* â...........)QÜ∏ */ +	$"D0D1 CCC9 88C8 83CA 05C8 C9CA CCBA 3FBC"            /* –—Ã…à»É .»… Ã∫?º */ +	$"0004 1B98 C7C5 C381 C402 C7B6 1D93 0009"            /* ...ò«≈√Ń.«∂.ì.∆ */ +	$"0207 0F1F 4982 ADC8 CDC7 83C5 84C6 83C5"            /* ....IÇ≠»Õ«É≈Ñ∆É≈ */ +	$"02C7 B842 BA00 0312 91C4 C184 C001 CB87"            /* .«∏B∫...냡ѿ.Àá */ +	$"9600 0801 060E 193A 75B5 C7C1 86C0 86BF"            /* ñ......:uµ«¡Ü¿Üø */ +	$"02C1 B536 B800 030A 7DC1 BC83 BB04 BAC1"            /* .¡µ6∏..¬}¡ºÉª.∫¡ */ +	$"8160 1F99 0007 040D 266E B9C2 BCBD 82BC"            /* Å`.ô....&nπ¬ºΩǺ */ +	$"87BB 03BC C0A8 25B6 0003 0464 BBB9 81B8"            /* áª.º¿®%∂...dªπÅ∏ */ +	$"80B7 04BE 8B0E 0B04 9B00 0402 0C33 96BF"            /* Ä∑.æã...õ....3ñø */ +	$"8FB8 02BC 9715 B500 0239 B2B5 82B4 04B2"            /* è∏.ºó.µ..9≤µÇ¥.≤ */ +	$"B2B4 AD25 A000 0404 1677 BAB4 87B2 01B3"            /* ≤¥≠%†....w∫¥á≤.≥ */ +	$"B382 B402 B873 06B3 0002 1899 B385 B002"            /* ≥Ç¥.∏s.≥...ô≥Ö∞. */ +	$"B764 02A2 0002 0D68 B78E B002 B1B1 43B2"            /* ∑d.¢...h∑é∞.±±C≤ */ +	$"0002 0671 AE85 AC02 ADA8 1CA4 0002 0B72"            /* ...qÆÖ¨.≠®.§...r */ +	$"B381 AB80 AA01 ACAB 84AC 03AA AD9C 1CB1"            /* ≥Å´Ä™.¨´Ñ¨.™≠ú.± */ +	$"0002 31A6 A780 A682 A702 AE6D 02A5 0006"            /* ..1¶ßĶÇß.Æm.•.. */ +	$"1692 ACA7 A8A6 A685 A800 A781 A602 AD69"            /* .í¨ß®¶¶Ö®.ßŶ.≠i */ +	$"04AF 0002 0A7E A681 A282 A301 A629 A600"            /* .Ø..¬~¶Å¢Ç£.¶)¶. */ +	$"0301 2DA1 A381 A280 A386 A202 A4A1 28AF"            /* ..-°£Å¢Ä£Ü¢.§°(Ø */ +	$"0001 3EA2 869E 02A3 7E04 A700 0403 55A6"            /* ..>¢Üû.£~.ß...U¶ */ +	$"9E9E 82A0 869E 03A0 A374 07AD 0002 097C"            /* ûûdžÜû.†£t.≠..∆| */ +	$"9D85 9902 9AA1 35A9 0003 1594 9B98 8899"            /* ùÖô.ö°5©...îõòàô */ +	$"819A 029B 9C28 AD00 012C 9986 9802 9D71"            /* Åö.õú(≠..,ôÜò.ùq */ +	$"05A9 0004 0178 9997 9780 9885 9781 9801"            /* .©...xôóóÄòÖóÅò. */ +	$"9D60 AC00 0304 6897 9184 9202 9586 18AB"            /* ù`¨...hóëÑí.ïÜ.´ */ +	$"0001 4599 8F92 018E 18AB 0003 178B 8F8F"            /* ..Eôèí.é.´...ãèè */ +	$"8490 028E 2501 AB00 020C 7E94 8590 808E"            /* Ñê.é%.´...~îÖêÄé */ +	$"8090 048E 8E8F 9642 AB00 0338 9089 8983"            /* Äê.ééèñB´..8êââÉ */ +	$"8A02 8F5D 01AD 0002 2082 9082 8B82 8A80"            /* ä.è].≠.. ÇêÇãÇäÄ */ +	$"8B80 8A02 8F69 04AA 0001 5D8C 8284 8086"            /* ãÄä.èi.™..]åÇÑÄÜ */ +	$"018C 24AE 0007 0119 618A 8D87 8686 8385"            /* .å$Æ....aäçáÜÜÉÖ */ +	$"8286 0287 8114 A900 020E 7982 8281 0483"            /* ÇÜ.áÅ.©...yÇÇÅ.É */ +	$"8385 7202 AF00 0701 0525 597C 8986 8382"            /* ÉÖr.Ø....%Y|âÜÉÇ */ +	$"8283 8301 892E A900 021E 827F 827E 0380"            /* ÇÉÉ.â.©...Ç.Ç~.Ä */ +	$"8085 4AB2 0007 0105 1232 5876 8382 8480"            /* ÄÖJ≤.....2XvÉÇÑÄ */ +	$"037F 7F83 4AA9 0004 3282 7A7B 7B80 7903"            /* ...ÉJ©..2Çz{{Äy. */ +	$"7A79 7F24 B500 0702 050F 2E5A 797F 7D81"            /* zy.$µ......Zy.}Å */ +	$"7A04 7B79 7F5E 03A8 0001 437E 8077 8176"            /* z.{y.^.®..C~ÄwÅv */ +	$"0277 700B B800 0602 0519 446B 7D79 8176"            /* .wp.∏.....Dk}yÅv */ +	$"0277 6B0B A800 014F 7780 7381 7201 7656"            /* .wk.®..OwÄsÅr.vV */ +	$"BB00 0B01 0309 2F60 7975 7373 746F 0FA8"            /* ª....∆/`yussto.® */ +	$"0001 5672 8170 806F 0174 36BE 0008 0205"            /* ..VrÅpÄo.t6æ.... */ +	$"336C 7370 6F70 17A7 0002 0659 6E81 6B80"            /* 3lspop.ß...YnÅkÄ */ +	$"6A01 6F1C C000 0602 155B 6F6B 6D1B A700"            /* j.o.¿....[okm.ß. */ +	$"0306 586A 6880 6704 6666 6762 07C2 0004"            /* ..XjhÄg.ffgb.¬.. */ +	$"0C57 6A6B 1CA7 0003 0655 6765 8264 0165"            /* .Wjk.ß...UgeÇd.e */ +	$"50C4 0003 1562 681B A700 0204 5063 8161"            /* Pƒ...bh.ß...PcÅa */ +	$"0360 6064 33C4 0003 0139 6718 A800 0148"            /* .``d3ƒ...9g.®..H */ +	$"6082 5E02 5D60 18AE 000A 0414 1E25 2D2C"            /* `Ç^.]`.Æ.¬...%-, */ +	$"2A25 1B10 0786 0005 161E 1310 5E12 A800"            /* *%...Ü......^.®. */ +	$"033E 5E59 5980 5802 5A51 01AB 0006 0B27"            /* .>^YYÄX.ZQ.´...' */ +	$"404E 585A 5C80 5A12 5959 5751 4940 372E"            /* @NXZ\ÄZ.YYWQI@7. */ +	$"2820 202A 4158 5B54 2C50 0EA8 0003 3059"            /* (  *AX[T,P.®..0Y */ +	$"5555 8054 0158 3CAA 0008 0B31 4F57 5655"            /* UUÄT.X<™...1OWVU */ +	$"5455 5580 5680 5502 5656 5780 5809 5757"            /* TUUÄVÄU.VVWÄX∆WW */ +	$"5656 5556 5757 4D07 A800 0122 5680 5203"            /* VVUVWWM.®.."VÄR. */ +	$"5151 5526 A800 0408 2B4B 5452 8151 8352"            /* QQU&®...+KTRÅQÉR */ +	$"8251 8052 8251 0352 5254 3FA9 0000 1581"            /* ÇQÄRÇQ.RRT?©...Å */ +	$"5003 4F4F 5118 A600 020B 2A45 8050 834F"            /* P.OOQ.¶...*EÄPÉO */ +	$"8250 834F 0150 5084 4F01 522E A900 020A"            /* ÇPÉO.PPÑO.R.©..¬ */ +	$"454B 814A 014C 0DA4 0003 1431 454C 824B"            /* EKÅJ.L.§...1ELÇK */ +	$"8D4A 824B 814A 014E 1BAA 0001 324A 8047"            /* çJÇKÅJ.N.™..2JÄG */ +	$"0148 43A2 0006 051E 3947 4847 4682 4885"            /* .HC¢....9GHGFÇHÖ */ +	$"4783 4801 4747 8348 8047 0144 0CAA 0001"            /* GÉH.GGÉHÄG.D.™.. */ +	$"1C48 8145 003C A000 0506 233C 4644 4480"            /* .HÅE.<†...#<FDDÄ */ +	$"4382 4583 4482 4586 4481 4501 4733 AB00"            /* CÇEÉDÇEÜDÅE.G3´. */ +	$"010C 3F80 4101 4232 9F00 021E 3A43 8241"            /* ..?ÄA.B2ü...:CÇA */ +	$"8540 8041 0140 4080 4180 4080 4182 4081"            /* Ö@ÄA.@@ÄAÄ@ÄAÇ@Å */ +	$"4101 4420 AC00 052C 403E 3E40 2C9D 0004"            /* A.D ¨..,@>>@,ù.. */ +	$"0E2F 3F3E 3F82 4080 3E80 3F82 4080 3F80"            /* ./?>?Ç@Ä>Ä?Ç@Ä?Ä */ +	$"3E8B 3F01 3D0C AC00 0513 3D3B 3A3D 249C"            /* >ã?.=.¨...=;:=$ú */ +	$"0005 1436 3B3B 3A3A 803B 823A 8039 823B"            /* ...6;;::Ä;Ç:Ä9Ç; */ +	$"833A 803B 873A 013E 26AD 0005 042E 3837"            /* É:Ä;á:.>&≠....87 */ +	$"3920 9B00 0316 3937 3680 3780 3883 3701"            /* 9 õ...976Ä7Ä8É7. */ +	$"3636 8837 8336 8037 8136 0138 0FAE 0004"            /* 66à7É6Ä7Å6.8.Æ.. */ +	$"1536 3437 1D9A 0001 0A32 8133 8034 0135"            /* .647.ö..¬2Å3Ä4.5 */ +	$"3583 3480 3301 3434 8335 8B34 0136 25AF"            /* 5É4Ä3.44É5ã4.6%Ø */ +	$"0004 0327 3232 1D9A 0001 2732 8130 8031"            /* ...'22.ö..'2Å0Ä1 */ +	$"8032 9B31 0130 0DB0 0003 0E2F 2F20 9900"            /* Ä2õ1.0.∞...// ô. */ +	$"0111 2F88 2D80 2E88 2D82 2E87 2D01 301D"            /* ../à-Ä.à-Ç.á-.0. */ +	$"B200 021B 2D22 9900 0121 2B81 2A84 2B80"            /* ≤...-"ô..!+Å*Ñ+Ä */ +	$"2C82 2B80 2A80 2B80 2C85 2B80 2C02 2B28"            /* ,Ç+Ä*Ä+Ä,Ö+Ä,.+( */ +	$"09B2 0002 0624 2498 0000 0583 2784 2880"            /* ∆≤...$$ò...É'Ñ(Ä */ +	$"2997 2800 10B4 0002 0D26 0497 0001 0E26"            /* )ó(..¥...&.ó...& */ +	$"8524 8D25 8224 8325 8124 0127 18B6 0001"            /* Ö$ç%Ç$É%Å$.'.∂.. */ +	$"1408 9700 0114 2385 2184 2280 238B 2280"            /* ..ó...#Ö!Ñ"Ä#ã"Ä */ +	$"2380 2202 231C 04D2 0001 161F 851E 841F"            /* #Ä".#..“....Ö.Ñ. */ +	$"8020 861F 801E 821F 8020 011C 08D3 0001"            /* Ä Ü.Ä.Ç.Ä ...”.. */ +	$"171D 841C 881D 801E 861D 801C 811D 011C"            /* ..Ñ.à.Ä.Ü.Ä.Å... */ +	$"09D4 0001 151A 8819 941A 0319 1A19 0AD5"            /* ∆‘....à.î.....¬’ */ +	$"0001 1317 8816 8717 8018 8717 0218 1609"            /* ....à.á.Ä.á....∆ */ +	$"D600 0111 158B 1487 1580 1684 1501 1307"            /* ÷....ã.á.Ä.Ñ.... */ +	$"D700 000E 9E12 0213 0E04 D800 010A 108B"            /* ◊...û.....ÿ..¬.ã */ +	$"0F8F 1000 0BDA 0001 080E 950D 830E 010D"            /* .è...⁄....ï.É... */ +	$"07DB 0000 049B 0B01 0903 DD00 9909 0107"            /* .€...õ..∆.›.ô∆.. */ +	$"04DF 0098 0600 03E1 0096 03FF 00FF 00FF"            /* .fl.ò...·.ñ.ˇ.ˇ.ˇ */ +	$"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF"            /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ +	$"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF"            /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ +	$"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF"            /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ +	$"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF"            /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ +	$"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF"            /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ +	$"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF"            /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ +	$"00FF 00FF 00FF 00FF 00BD 0074 386D 6B00"            /* .ˇ.ˇ.ˇ.ˇ.Ω.t8mk. */ +	$"0040 0800 0000 0000 0000 0000 0000 0000"            /* .@.............. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0006 111F 303C 5376"            /* ............0<Sv */ +	$"8893 9E9F 9388 7653 3C2F 1F11 0600 0000"            /* àìûüìàvS</...... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0923 4564 819C AEBE C9CF D8E2"            /* ....∆#EdÅúÆæ…œÿ‚ */ +	$"E7EA EDEE E9E6 E1D7 CEC8 BBAC 9A81 6344"            /* ÁÍÌÓÈÊ·◊Œ»ª¨öÅcD */ +	$"2409 0000 0000 0000 0000 0000 0000 0000"            /* $∆.............. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0627 5C92 B9D7 E7ED EFF1 F2F2 F4F6 F7F6"            /* .'\íπ◊ÁÌÔÒÚÚÙˆ˜ˆ */ +	$"F7F7 F6F6 F6F5 F4F2 F0F0 EFED ECEB E9E2"            /* ˜˜ˆˆˆıÙÚÔÌÏÎÈ‚ */ +	$"D2B6 8F5B 2807 0000 0000 0000 0000 0000"            /* “∂è[(........... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0006 3275"            /* ..............2u */ +	$"B0D7 EBF0 F2F2 F5F7 F9FB FCFD FEFE FEFE"            /* ∞◊ÎÚÚı˜˘˚¸˝˛˛˛˛ */ +	$"FEFF FFFE FEFE FEFE FDFB F9F6 F4F1 EFED"            /* ˛ˇˇ˛˛˛˛˛˝˚˘ˆÙÒÔÌ */ +	$"ECEB EAE4 D0AC 7332 0700 0000 0000 0000"            /* ÏÎ͉–¨s2........ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0022 6AB0 DDEE"            /* ..........."j∞›Ó */ +	$"F2F3 F5F7 F9FC FDFE FFFF FFFF FFFF FFFF"            /* ÚÛı˜˘¸˝˛ˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FEFE FFFF FFFF FEFD FAF6"            /* ˇˇˇˇˇˇ˛˛ˇˇˇˇ˛˝˙ˆ */ +	$"F1EF EDEC ECEA E7D6 AB69 2200 0000 0000"            /* ÒÔÌÏÏÍÁ÷´i"..... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 043E 94D2 EEF3 F4F5"            /* .........>î“ÓÛÙı */ +	$"F6F8 FBFD FFFF FEFE FEFE FEFE FEFE FEFE"            /* ˆ¯˚˝ˇˇ˛˛˛˛˛˛˛˛˛˛ */ +	$"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFF"            /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ˇ */ +	$"FEFB F6F1 ECEB ECEC EAE4 CA90 3D04 0000"            /* ˛˚ˆÒÏÎÏÏ͉ ê=... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 074F A8E1 F3F5 F5F5 F7FA"            /* .......O®·Ûııı˜˙ */ +	$"FDFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE"            /* ˝˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ +	$"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE"            /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ +	$"FEFE FFFD F9F3 EDEA EBEB EBE8 D8A2 4E08"            /* ˛˛ˇ˝˘ÛÌÍÎÎÎËÿ¢N. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 054D B0E8 F4F5 F5F4 F7FB FDFE"            /* .....M∞ËÙııÙ˜˚˝˛ */ +	$"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE"            /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ +	$"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE"            /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ +	$"FEFE FEFE FEFE FAF3 ECEA EAEB EAE9 DEA9"            /* ˛˛˛˛˛˛˙ÛÏÍÍÎÍÈfi© */ +	$"4C06 0000 0000 0000 0000 0000 0000 0000"            /* L............... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 003B A8E7 F3F6 F6F4 F7FB FDFE FEFE"            /* ...;®ÁÛˆˆÙ˜˚˝˛˛˛ */ +	$"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE"            /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ +	$"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FDFD"            /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˝˝ */ +	$"FDFD FDFD FDFD FDFD F9F2 EBE9 EAEA EAEA"            /* ˝˝˝˝˝˝˝˝˘ÚÎÈÍÍÍÍ */ +	$"DCA1 3B00 0000 0000 0000 0000 0000 0000"            /* ‹°;............. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0020 8DE0 F4F6 F6F5 F6F9 FDFE FEFE FEFE"            /* . ç‡Ùˆˆıˆ˘˝˛˛˛˛˛ */ +	$"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE"            /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ +	$"FEFE FEFE FEFE FEFD FDFD FDFD FDFD FDFD"            /* ˛˛˛˛˛˛˛˝˝˝˝˝˝˝˝˝ */ +	$"FDFD FDFD FDFD FDFD FDFD F7EE E9EA EAE9"            /* ˝˝˝˝˝˝˝˝˝˝˜ÓÈÍÍÈ */ +	$"EAE9 D589 2000 0000 0000 0000 0000 0000"            /* ÍÈ’â ........... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0004"            /* ................ */ +	$"5CCB F4F6 F6F5 F5F7 FCFE FEFE FEFE FEFE"            /* \ÀÙˆˆıı˜¸˛˛˛˛˛˛˛ */ +	$"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE"            /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ +	$"FEFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD"            /* ˛˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝ */ +	$"FDFD FDFD FDFD FDFD FDFD FDFA F3EA EAE9"            /* ˝˝˝˝˝˝˝˝˝˝˝˙ÛÍÍÈ */ +	$"E9E9 E9E6 C35B 0500 0000 0000 0000 0000"            /* ÈÈÈÊ√[.......... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 239F"            /* ..............#ü */ +	$"EBF5 F6F5 F5F5 F9FE FEFE FEFE FEFE FEFE"            /* Îıˆııı˘˛˛˛˛˛˛˛˛˛ */ +	$"FEFE FFFE FEFE FEFF FFFE FEFE FDFD FDFD"            /* ˛˛ˇ˛˛˛˛ˇˇ˛˛˛˝˝˝˝ */ +	$"FDFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD"            /* ˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝ */ +	$"FDFD FDFD FDFD FDFC FCFC FCFC FCF6 ECE9"            /* ˝˝˝˝˝˝˝¸¸¸¸¸¸ˆÏÈ */ +	$"E9E9 E9E9 E9DE 9923 0000 0000 0000 0000"            /* ÈÈÈÈÈfiô#........ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0052 CBF5"            /* .............RÀı */ +	$"F6F6 F5F5 F6FA FEFE FEFE FEFE FEFE FEFF"            /* ˆˆııˆ˙˛˛˛˛˛˛˛˛˛ˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FDFD FDFE FDFD"            /* ˇˇˇˇˇˇˇˇˇˇ˝˝˝˛˝˝ */ +	$"FDFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD"            /* ˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝ */ +	$"FDFD FDFD FCFC FCFC FCFC FCFC FCFD F8EF"            /* ˝˝˝˝¸¸¸¸¸¸¸¸¸˝¯Ô */ +	$"E9E9 E9E9 E8E9 E7C3 5100 0000 0000 0000"            /* ÈÈÈÈËÈÁ√Q....... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 000B 81E6 F5F6"            /* ............ÅÊıˆ */ +	$"F5F5 F5F6 FBFE FEFE FEFE FEFE FEFE FFFF"            /* ıııˆ˚˛˛˛˛˛˛˛˛˛ˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFE FEFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇ˛˛ˇˇˇ */ +	$"FEFE FDFD FDFD FDFD FDFD FDFD FDFD FDFC"            /* ˛˛˝˝˝˝˝˝˝˝˝˝˝˝˝¸ */ +	$"FCFC FCFC FCFC FCFC FCFC FCFC FCFC FCFA"            /* ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸˙ */ +	$"F0E9 E9E9 E8E8 E9E9 DC7E 0C00 0000 0000"            /* ÈÈÈËËÈÈ‹~...... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 20A7 F1F6 F6F5"            /* .......... ßÒˆˆı */ +	$"F5F5 F6FB FDFD FDFD FDFD FDFE FFFF FFFF"            /* ııˆ˚˝˝˝˝˝˝˝˛ˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FEFE FDFD FDFD FDFD FCFC FCFC"            /* ˇˇˇˇ˛˛˝˝˝˝˝˝¸¸¸¸ */ +	$"FCFC FCFC FCFC FCFC FCFC FCFC FCFB FBFB"            /* ¸¸¸¸¸¸¸¸¸¸¸¸¸˚˚˚ */ +	$"FAF1 E9E9 E9E8 E8E8 E8E4 A120 0000 0000"            /* ˙ÒÈÈÈËËËˉ° .... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0034 C4F5 F5F5 F5F5"            /* .........4ƒııııı */ +	$"F5F7 FBFD FDFD FDFD FDFD FDFD FFFF FFFF"            /* ı˜˚˝˝˝˝˝˝˝˝˝ˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFE FEFD FCFC FCFC FCFC"            /* ˇˇˇˇˇˇˇ˛˛˝¸¸¸¸¸¸ */ +	$"FCFC FCFC FCFC FCFC FCFC FBFB FBFB FBFB"            /* ¸¸¸¸¸¸¸¸¸¸˚˚˚˚˚˚ */ +	$"FBFA F1E8 E9E9 E8E8 E8E9 E8BB 3300 0000"            /* ˚˙ÒËÈÈËËËÈ˪3... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 49D4 F6F5 F4F5 F5F5"            /* ........I‘ˆıÙııı */ +	$"F6FB FDFD FDFD FDFD FDFD FDFD FDFF FFFF"            /* ˆ˚˝˝˝˝˝˝˝˝˝˝˝ˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FEFD FCFC FCFC"            /* ˇˇˇˇˇˇˇˇˇˇ˛˝¸¸¸¸ */ +	$"FCFC FCFC FCFC FCFB FBFB FBFB FBFB FBFB"            /* ¸¸¸¸¸¸¸˚˚˚˚˚˚˚˚˚ */ +	$"FBFB FBEF E8E9 E9E8 E8E7 E8E9 CB47 0000"            /* ˚˚˚ÔËÈÈËËÁËÈÀG.. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0055 E0F6 F5F4 F5F5 F5F5"            /* .......U‡ˆıÙıııı */ +	$"FAFD FDFD FDFD FDFD FDFD FDFE FEFE FFFF"            /* ˙˝˝˝˝˝˝˝˝˝˝˛˛˛ˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFD FCFC"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˝¸¸ */ +	$"FCFC FCFB FBFB FBFB FBFB FBFB FBFB FBFB"            /* ¸¸¸˚˚˚˚˚˚˚˚˚˚˚˚˚ */ +	$"FBFB FAF9 EEE8 E9E8 E8E7 E7E8 E9D5 5400"            /* ˚˚˙˘ÓËÈËËÁÁËÈ’T. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 5EE4 F7F5 F4F4 F5F5 F5F9"            /* ......^‰˜ıÙÙııı˘ */ +	$"FDFD FDFD FDFD FDFD FDFD FDFF FFFF FFFF"            /* ˝˝˝˝˝˝˝˝˝˝˝ˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FEFD"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛˝ */ +	$"FCFC FCFB FBFB FBFB FBFB FBFB FBFB FBFA"            /* ¸¸¸˚˚˚˚˚˚˚˚˚˚˚˚˙ */ +	$"FAFA FAFA F7EC E9E9 E8E8 E7E7 E8E8 D85C"            /* ˙˙˙˙˜ÏÈÈËËÁÁËËÿ\ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 005E E6F5 F4F4 F4F4 F5F5 F7FD"            /* .....^ÊıÙÙÙÙıı˜˝ */ +	$"FDFD FDFD FDFD FDFD FDFD FFFF FFFF FFFF"            /* ˝˝˝˝˝˝˝˝˝˝ˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FDFB FBFB FBFB FBFB FBFB FBFB FBFA FAFA"            /* ˝˚˚˚˚˚˚˚˚˚˚˚˚˙˙˙ */ +	$"FAFA FAFA FBF5 E9E9 E9E8 E8E7 E7E8 E8DC"            /* ˙˙˙˙˚ıÈÈÈËËÁÁËË‹ */ +	$"5B00 0000 0000 0000 0000 0000 0000 0000"            /* [............... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 56E5 F6F3 F4F4 F4F5 F5F6 FCFD"            /* ....VˆÛÙÙÙııˆ¸˝ */ +	$"FDFD FDFD FDFD FDFD FDFE FFFF FFFF FFFF"            /* ˝˝˝˝˝˝˝˝˝˛ˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFD FBFB FBFB FBFB FBFB FBFA FAFA FAFA"            /* ˇ˝˚˚˚˚˚˚˚˚˚˙˙˙˙˙ */ +	$"FAFA FAFA FAF9 F0E8 E9E8 E8E7 E7E7 E8E8"            /* ˙˙˙˙˙˘ËÈËËÁÁÁËË */ +	$"DA54 0000 0000 0000 0000 0000 0000 0000"            /* ⁄T.............. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0048 E1F6 F3F4 F4F4 F4F5 F5F9 FCFD"            /* ...H·ˆÛÙÙÙÙıı˘¸˝ */ +	$"FDFD FDFD FDFD FDFD FDFF FFFF FFFF FFFF"            /* ˝˝˝˝˝˝˝˝˝ˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FCFB FBFB FBFB FAFA FAFA FAFA FAFA"            /* ˇˇ¸˚˚˚˚˚˙˙˙˙˙˙˙˙ */ +	$"FAFA FAFA F9F9 F8ED E9E9 E8E8 E7E7 E7E8"            /* ˙˙˙˙˘˘¯ÌÈÈËËÁÁÁË */ +	$"E8D6 4600 0000 0000 0000 0000 0000 0000"            /* Ë÷F............. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 33D6 F7F3 F3F4 F4F4 F4F5 F7FC FCFC"            /* ..3÷˜ÛÛÙÙÙÙı˜¸¸¸ */ +	$"FCFC FCFD FDFD FDFD FEFF FFFF FFFF FFFF"            /* ¸¸¸˝˝˝˝˝˛ˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFB FBFB FAFA FAFA FAFA FAFA FAFA"            /* ˇˇˇ˚˚˚˙˙˙˙˙˙˙˙˙˙ */ +	$"FAF9 F9F9 F9F9 F9F4 E9E9 E8E8 E8E7 E7E7"            /* ˙˘˘˘˘˘˘ÙÈÈËËËÁÁÁ */ +	$"E7E8 CD32 0000 0000 0000 0000 0000 0000"            /* ÁËÕ2............ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"001F C5F6 F3F3 F3F4 F4F4 F4F5 FBFC FCFC"            /* ..≈ˆÛÛÛÙÙÙÙı˚¸¸¸ */ +	$"FCFC FDFD FDFD FDFD FEFF FFFF FFFF FFFF"            /* ¸¸˝˝˝˝˝˝˛ˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFE FAFA FAFA FAFA FAFA FAFA FAF9"            /* ˇˇˇ˛˙˙˙˙˙˙˙˙˙˙˙˘ */ +	$"F9F9 F9F9 F9F9 F9F8 EEE8 E9E8 E8E7 E7E7"            /* ˘˘˘˘˘˘˘¯ÓËÈËËÁÁÁ */ +	$"E7E7 EABD 1F00 0000 0000 0000 0000 0000"            /* ÁÁÍΩ............ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0BA9 F7F3 F3F3 F3F4 F4F4 F4F8 FCFC FCFC"            /* .©˜ÛÛÛÛÙÙÙÙ¯¸¸¸¸ */ +	$"FCFC FCFC FCFC FDFD FFFF FFFF FFFF FFFF"            /* ¸¸¸¸¸¸˝˝ˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FCFA FAFA FAFA FAFA FAF9 F9F9"            /* ˇˇˇˇ¸˙˙˙˙˙˙˙˙˘˘˘ */ +	$"F9F9 F9F9 F9F9 F8F8 F4EA E9E9 E8E8 E7E7"            /* ˘˘˘˘˘˘¯¯ÙÍÈÈËËÁÁ */ +	$"E7E6 E7EB A20B 0000 0000 0000 0000 0000"            /* ÁÊÁ΢........... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"81F4 F3F2 F3F3 F3F4 F4F4 F5FB FCFC FCFC"            /* ÅÙÛÚÛÛÛÙÙÙı˚¸¸¸¸ */ +	$"FCFC FCFC FCFC FDFE FFFF FFFF FFFF FFFF"            /* ¸¸¸¸¸¸˝˛ˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FEFA FAFA FAFA FAF9 F9F9 F9F9"            /* ˇˇˇˇ˛˙˙˙˙˙˙˘˘˘˘˘ */ +	$"F9F9 F9F9 F8F8 F8F8 F8EE E8E9 E8E8 E7E7"            /* ˘˘˘˘¯¯¯¯¯ÓËÈËËÁÁ */ +	$"E7E7 E6E7 E87C 0100 0000 0000 0000 0000"            /* ÁÁÊÁË|.......... */ +	$"0000 0000 0000 0000 0000 0000 0000 0050"            /* ...............P */ +	$"EBF4 F2F2 F3F3 F3F4 F4F4 F7FC FCFC FCFC"            /* ÎÙÚÚÛÛÛÙÙÙ˜¸¸¸¸¸ */ +	$"FCFC FCFC FCFD FDFF FFFF FFFF FFFF FFFF"            /* ¸¸¸¸¸˝˝ˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFB FAFA FAF9 F9F9 F9F9 F9F9"            /* ˇˇˇˇˇ˚˙˙˙˘˘˘˘˘˘˘ */ +	$"F9F9 F8F8 F8F8 F8F8 F8F3 E9E9 E9E8 E8E7"            /* ˘˘¯¯¯¯¯¯¯ÛÈÈÈËËÁ */ +	$"E7E7 E6E6 E9E0 4D00 0000 0000 0000 0000"            /* ÁÁÊÊȇM......... */ +	$"0000 0000 0000 0000 0000 0000 0000 24D8"            /* ..............$ÿ */ +	$"F5F2 F2F2 F3F3 F3F4 F4F4 FAFB FBFC FCFC"            /* ıÚÚÚÛÛÛÙÙÙ˙˚˚¸¸¸ */ +	$"FCFC FCFC FCFD FFFF FFFF FFFF FFFF FFFF"            /* ¸¸¸¸¸˝ˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFC FAFA FAF9 F9F9 F9F9 F9F9"            /* ˇˇˇˇˇ¸˙˙˙˘˘˘˘˘˘˘ */ +	$"F9F9 F8F8 F8F8 F8F8 F7F7 EDE9 E9E8 E8E8"            /* ˘˘¯¯¯¯¯¯˜˜ÌÈÈËËË */ +	$"E7E7 E7E6 E6E9 CF23 0000 0000 0000 0000"            /* ÁÁÁÊÊÈœ#........ */ +	$"0000 0000 0000 0000 0000 0000 0005 AAF9"            /* ..............™˘ */ +	$"F1F2 F2F2 F3F3 F3F4 F4F5 FBFB FBFC FCFC"            /* ÒÚÚÚÛÛÛÙÙı˚˚˚¸¸¸ */ +	$"FCFC FCFC FCFE FFFF FFFF FFFF FFFF FFFF"            /* ¸¸¸¸¸˛ˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFE FBF9 F9F9 F9F9 F9F9 F9F9"            /* ˇˇˇˇˇ˛˚˘˘˘˘˘˘˘˘˘ */ +	$"F8F8 F8F8 F8F8 F8F8 F7F8 F0E9 E9E9 E8E8"            /* ¯¯¯¯¯¯¯¯˜¯ÈÈÈËË */ +	$"E8E7 E7E7 E6E6 EDA3 0500 0000 0000 0000"            /* ËÁÁÁÊÊÌ£........ */ +	$"0000 0000 0000 0000 0000 0000 0060 F6F1"            /* .............`ˆÒ */ +	$"F1F2 F2F2 F3F3 F3F4 F4F7 FBFB FBFC FCFC"            /* ÒÚÚÚÛÛÛÙÙ˜˚˚˚¸¸¸ */ +	$"FCFC FCFC FDFF FFFF FFFF FFFF FFFF FFFF"            /* ¸¸¸¸˝ˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FEFA F9F9 F9F9 F9F9 F8F8"            /* ˇˇˇˇˇˇ˛˙˘˘˘˘˘˘¯¯ */ +	$"F8F8 F8F8 F8F8 F7F7 F7F7 F5EA E9E9 E8E8"            /* ¯¯¯¯¯¯˜˜˜˜ıÍÈÈËË */ +	$"E8E7 E7E7 E6E6 E6EA 5D00 0000 0000 0000"            /* ËÁÁÁÊÊÊÍ]....... */ +	$"0000 0000 0000 0000 0000 0000 1FD8 F4F1"            /* .............ÿÙÒ */ +	$"F1F2 F2F2 F3F3 F3F4 F4F9 FBFB FBFB FBFB"            /* ÒÚÚÚÛÛÛÙÙ˘˚˚˚˚˚˚ */ +	$"FCFC FCFC FEFF FFFF FFFF FFFF FFFF FFFF"            /* ¸¸¸¸˛ˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFE FBF9 F9F9 F9F9 F8F8"            /* ˇˇˇˇˇˇˇ˛˚˘˘˘˘˘¯¯ */ +	$"F8F8 F8F8 F7F7 F7F7 F7F7 F6EC E9E9 E9E8"            /* ¯¯¯¯˜˜˜˜˜˜ˆÏÈÈÈË */ +	$"E8E8 E7E7 E7E6 E6E9 D01F 0000 0000 0000"            /* ËËÁÁÁÊÊÈ–....... */ +	$"0000 0000 0000 0000 0000 0000 96F9 F0F1"            /* ............ñ˘Ò */ +	$"F1F2 F2F2 F3F3 F3F4 F5FA FBFB FBFB FBFB"            /* ÒÚÚÚÛÛÛÙı˙˚˚˚˚˚˚ */ +	$"FCFC FCFC FFFF FFFF FFFF FFFF FFFF FFFF"            /* ¸¸¸¸ˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFD FBF9 F8F8 F8F8"            /* ˇˇˇˇˇˇˇˇˇ˝˚˘¯¯¯¯ */ +	$"F8F8 F7F8 F7F7 F7F7 F7F7 F7EF E9E9 E9E9"            /* ¯¯˜¯˜˜˜˜˜˜˜ÔÈÈÈÈ */ +	$"E8E8 E7E7 E7E6 E6E6 ED91 0000 0000 0000"            /* ËËÁÁÁÊÊÊÌë...... */ +	$"0000 0000 0000 0000 0000 003C ECF1 F0F1"            /* ...........<ÏÒÒ */ +	$"F1F2 F2F2 F3F3 F3F3 F6FA FBFB FBFB FBFB"            /* ÒÚÚÚÛÛÛÛˆ˙˚˚˚˚˚˚ */ +	$"FCFC FCFD FFFF FFFF FFFF FFFF FFFF FFFF"            /* ¸¸¸˝ˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFE FCFA F8F8"            /* ˇˇˇˇˇˇˇˇˇˇˇ˛¸˙¯¯ */ +	$"F8F8 F7F7 F7F7 F7F7 F6F6 F6F1 EAE9 E9E9"            /* ¯¯˜˜˜˜˜˜ˆˆˆÒÍÈÈÈ */ +	$"E8E8 E8E7 E7E7 E6E6 E6E2 3C00 0000 0000"            /* ËËËÁÁÁÊÊÊ‚<..... */ +	$"0000 0000 0000 0000 0000 06B4 F7F0 F0F1"            /* ...........¥˜Ò */ +	$"F1F1 F2F2 F2F3 F3F3 F7FA FBFB FBFB FBFB"            /* ÒÒÚÚÚÛÛÛ˜˙˚˚˚˚˚˚ */ +	$"FBFB FBFE FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˚˚˚˛ˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FEFC"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛¸ */ +	$"F9F7 F7F7 F7F7 F7F7 F6F6 F6F4 EAEA E9E9"            /* ˘˜˜˜˜˜˜˜ˆˆˆÙÍÍÈÈ */ +	$"E9E8 E8E8 E7E7 E6E6 E6EB AD07 0000 0000"            /* ÈËËËÁÁÊÊÊÎ≠..... */ +	$"0000 0000 0000 0000 0000 50F2 F0F0 F0F1"            /* ..........PÚÒ */ +	$"F1F1 F2F2 F2F3 F3F3 F8FA FAFA FAFB FBFB"            /* ÒÒÚÚÚÛÛÛ¯˙˙˙˙˚˚˚ */ +	$"FBFB FBFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˚˚˚ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFD FAF8 F7F7 F6F6 F6F6 F6F5 EBEA E9E9"            /* ˇ˝˙¯˜˜ˆˆˆˆˆıÎÍÈÈ */ +	$"E9E8 E8E8 E7E7 E7E6 E6E6 E94E 0000 0000"            /* ÈËËËÁÁÁÊÊÊÈN.... */ +	$"0000 0000 0000 0000 0009 BCF5 F0F0 F0F1"            /* .........∆ºıÒ */ +	$"F1F1 F2F2 F2F3 F3F3 F8FA FAFA FAFB FBFB"            /* ÒÒÚÚÚÛÛÛ¯˙˙˙˙˚˚˚ */ +	$"FBFB FCFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˚˚¸ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFE FBF8 F6F6 F6F6 F6F6 ECEA EAE9"            /* ˇˇˇ˛˚¯ˆˆˆˆˆˆÏÍÍÈ */ +	$"E9E9 E8E8 E7E7 E7E6 E6E6 EBB6 0900 0000"            /* ÈÈËËÁÁÁÊÊÊÎ∂∆... */ +	$"0000 0000 0000 0000 0052 F4F0 EFF0 F0F1"            /* .........RÙÔÒ */ +	$"F1F1 F2F2 F2F3 F3F3 F9FA FAFA FAFA FBFB"            /* ÒÒÚÚÚÛÛÛ˘˙˙˙˙˙˚˚ */ +	$"FBFB FDFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˚˚˝ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFE FAF6 F6F6 F5F5 EDEA EAE9"            /* ˇˇˇˇˇ˛˙ˆˆˆııÌÍÍÈ */ +	$"E9E9 E8E8 E8E7 E7E7 E6E6 E6EA 5100 0000"            /* ÈÈËËËÁÁÁÊÊÊÍQ... */ +	$"0000 0000 0000 0000 05B6 F5EF EFF0 F0F0"            /* .........∂ıÔÔ */ +	$"F1F1 F2F2 F2F3 F3F3 F8F9 F9FA FAFA FAFA"            /* ÒÒÚÚÚÛÛÛ¯˘˘˙˙˙˙˙ */ +	$"FAFB FEFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˙˚˛ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFD F7F5 F5F5 EEEA EAEA"            /* ˇˇˇˇˇˇˇ˝˜ıııÓÍÍÍ */ +	$"E9E9 E9E8 E8E7 E7E7 E6E6 E6EB B005 0000"            /* ÈÈÈËËÁÁÁÊÊÊÎ∞... */ +	$"0000 0000 0000 0000 40EE F0EF EFF0 F0F0"            /* ........@ÓÔÔ */ +	$"F1F1 F1F2 F2F2 F3F3 F8F9 F9FA FAFA FAFA"            /* ÒÒÒÚÚÚÛÛ¯˘˘˙˙˙˙˙ */ +	$"FAFB FEFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˙˚˛ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FEF6 F5F5 EEEA EAEA"            /* ˇˇˇˇˇˇˇˇ˛ˆııÓÍÍÍ */ +	$"E9E9 E9E8 E8E8 E7E7 E7E6 E6E6 E63E 0000"            /* ÈÈÈËËËÁÁÁÊÊÊÊ>.. */ +	$"0000 0000 0000 0000 9FF6 EEEF EFF0 F0F0"            /* ........üˆÓÔÔ */ +	$"F1F1 F1F2 F2F2 F3F3 F8F9 F9FA FAFA FAFA"            /* ÒÒÒÚÚÚÛÛ¯˘˘˙˙˙˙˙ */ +	$"FAFC FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˙¸ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFD F5F5 EEEB EAEA"            /* ˇˇˇˇˇˇˇˇˇ˝ııÓÎÍÍ */ +	$"EAE9 E9E9 E8E8 E7E7 E7E6 E6E6 ED9A 0000"            /* ÍÈÈÈËËÁÁÁÊÊÊÌö.. */ +	$"0000 0000 0000 0021 E1F0 EEEF EFEF F0F0"            /* .......!·ÓÔÔÔ */ +	$"F0F1 F1F2 F2F2 F3F3 F8F9 F9F9 FAFA FAFA"            /* ÒÒÚÚÚÛÛ¯˘˘˘˙˙˙˙ */ +	$"FAFD FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˙˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF F9F5 EEEB EBEA"            /* ˇˇˇˇˇˇˇˇˇˇ˘ıÓÎÎÍ */ +	$"EAE9 E9E9 E8E8 E8E7 E7E6 E6E6 E7DA 2100"            /* ÍÈÈÈËËËÁÁÊÊÊÁ⁄!. */ +	$"0000 0000 0000 0071 F6EF EEEF EFEF F0F0"            /* .......qˆÔÓÔÔÔ */ +	$"F0F1 F1F1 F2F2 F3F3 F7F9 F9F9 F9F9 F9FA"            /* ÒÒÒÚÚÛÛ˜˘˘˘˘˘˘˙ */ +	$"FAFD FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˙˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFE FDFD FCFB FBFB FBFC FDFE FFFF"            /* ˇˇˇ˛˝˝¸˚˚˚˚¸˝˛ˇˇ */ +	$"FFFF FFFF FFFF FFFC FBFC FDF4 EDEB EBEA"            /* ˇˇˇˇˇˇˇ¸˚¸˝ÙÌÎÎÍ */ +	$"EAEA E9E9 E9E8 E8E7 E7E7 E6E6 E6EE 6E00"            /* ÍÍÈÈÈËËÁÁÁÊÊÊÓn. */ +	$"0000 0000 0000 07C0 F2EE EEEE EFEF F0F0"            /* .......¿ÚÓÓÓÔÔ */ +	$"F0F1 F1F1 F2F2 F2F3 F7F9 F9F9 F9F9 F9FA"            /* ÒÒÒÚÚÚÛ˜˘˘˘˘˘˘˙ */ +	$"FAFE FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˙˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FEFC FAF9 F9F9 F9F8 F8F8 F7F8 F7F7 F8F8"            /* ˛¸˙˘˘˘˘¯¯¯˜¯˜˜¯¯ */ +	$"F9F9 FAFB FBF9 F7F5 F5F5 F9F5 EDEB EBEB"            /* ˘˘˙˚˚˘˜ııı˘ıÌÎÎÎ */ +	$"EAEA E9E9 E9E8 E8E8 E7E7 E7E6 E6EA BB07"            /* ÍÍÈÈÈËËËÁÁÁÊÊͪ. */ +	$"0000 0000 0000 34EC EFEE EEEE EFEF F0F0"            /* ......4ÏÔÓÓÓÔÔ */ +	$"F0F1 F1F1 F2F2 F2F3 F6F9 F9F9 F9F9 F9FA"            /* ÒÒÒÚÚÚÛˆ˘˘˘˘˘˘˙ */ +	$"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FEFC"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛¸ */ +	$"FAFA F9F9 F9F9 F9F8 F8F8 F7F7 F7F7 F7F7"            /* ˙˙˘˘˘˘˘¯¯¯˜˜˜˜˜˜ */ +	$"F6F6 F6F5 F5F5 F5F5 F4F4 F4F3 EDEB EBEB"            /* ˆˆˆıııııÙÙÙÛÌÎÎÎ */ +	$"EAEA EAE9 E9E8 E8E8 E7E7 E7E6 E6E6 E333"            /* ÍÍÍÈÈËËËÁÁÁÊÊÊ„3 */ +	$"0000 0000 0000 7CF6 EDED EEEE EFEF EFF0"            /* ......|ˆÌÌÓÓÔÔÔ */ +	$"F0F0 F1F1 F2F2 F2F2 F5F8 F8F8 F8F9 F9F9"            /* ÒÒÚÚÚÚı¯¯¯¯˘˘˘ */ +	$"FCFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ¸ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FEFC FAFA"            /* ˇˇˇˇˇˇˇˇˇˇˇˇ˛¸˙˙ */ +	$"FAFA F9F9 F9F8 F8F8 F8F8 F8F7 F7F7 F7F7"            /* ˙˙˘˘˘¯¯¯¯¯¯˜˜˜˜˜ */ +	$"F6F6 F6F5 F5F5 F5F5 F4F4 F4F2 ECEC EBEB"            /* ˆˆˆıııııÙÙÙÚÏÏÎÎ */ +	$"EAEA EAE9 E9E9 E8E8 E8E7 E7E6 E6E6 EF7B"            /* ÍÍÍÈÈÈËËËÁÁÊÊÊÔ{ */ +	$"0000 0000 0006 BFF2 EDED EEEE EEEF EFF0"            /* ......øÚÌÌÓÓÓÔÔ */ +	$"F0F0 F1F1 F1F2 F2F2 F4F8 F8F8 F8F9 F9F9"            /* ÒÒÒÚÚÚÙ¯¯¯¯˘˘˘ */ +	$"FDFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FEFC FBFA FAFA"            /* ˇˇˇˇˇˇˇˇˇˇ˛¸˚˙˙˙ */ +	$"F9F9 F9F9 F9F9 F8F8 F8F8 F8F7 F7F7 F6F6"            /* ˘˘˘˘˘˘¯¯¯¯¯˜˜˜ˆˆ */ +	$"F6F6 F6F5 F5F5 F5F5 F5F4 F4F1 ECEC EBEB"            /* ˆˆˆııııııÙÙÒÏÏÎÎ */ +	$"EBEA EAEA E9E9 E8E8 E8E7 E7E7 E6E6 EABA"            /* ÎÍÍÍÈÈËËËÁÁÁÊÊÍ∫ */ +	$"0600 0000 0029 E6EE EDED EEEE EEEF EFF0"            /* .....)ÊÓÌÌÓÓÓÔÔ */ +	$"F0F0 F1F1 F1F2 F2F2 F3F7 F7F8 F8F9 F9F9"            /* ÒÒÒÚÚÚÛ˜˜¯¯˘˘˘ */ +	$"FEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FEFC FBFB FBFB FAFA"            /* ˇˇˇˇˇˇˇˇ˛¸˚˚˚˚˙˙ */ +	$"FAF9 F9F9 F9F9 F8F8 F8F7 F7F7 F7F7 F6F6"            /* ˙˘˘˘˘˘¯¯¯˜˜˜˜˜ˆˆ */ +	$"F6F6 F6F6 F5F5 F4F4 F4F4 F4F0 ECEC ECEB"            /* ˆˆˆˆııÙÙÙÙÙÏÏÏÎ */ +	$"EBEA EAEA E9E9 E9E8 E8E7 E7E7 E6E6 E7DF"            /* ÎÍÍÍÈÈÈËËÁÁÁÊÊÁfl */ +	$"2800 0000 0063 F5EC EDED EDEE EEEE EFEF"            /* (....cıÏÌÌÌÓÓÓÔÔ */ +	$"F0F0 F0F1 F1F1 F2F2 F3F6 F7F8 F8F8 F9F9"            /* ÒÒÒÚÚÛˆ˜¯¯¯˘˘ */ +	$"FEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FDFC FCFB FBFB FAFA FAFA"            /* ˇˇˇˇˇˇ˝¸¸˚˚˚˙˙˙˙ */ +	$"FAF9 F9F9 F9F9 F9F8 F8F7 F7F7 F7F7 F7F6"            /* ˙˘˘˘˘˘˘¯¯˜˜˜˜˜˜ˆ */ +	$"F6F6 F5F5 F5F5 F5F4 F4F4 F3EF ECEC ECEB"            /* ˆˆıııııÙÙÙÛÔÏÏÏÎ */ +	$"EBEB EAEA E9E9 E9E8 E8E8 E7E7 E7E6 E6EF"            /* ÎÎÍÍÈÈÈËËËÁÁÁÊÊÔ */ +	$"6000 0000 009E F4EC EDED EDEE EEEE EFEF"            /* `....ûÙÏÌÌÌÓÓÓÔÔ */ +	$"F0F0 F0F1 F1F1 F2F2 F2F5 F7F8 F8F8 F8F9"            /* ÒÒÒÚÚÚı˜¯¯¯¯˘ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FDFC FCFC FCFB FBFB FAFA FAFA"            /* ˇˇˇˇ˝¸¸¸¸˚˚˚˙˙˙˙ */ +	$"FAFA F9F9 F8F8 F8F8 F8F8 F7F7 F6F6 F6F6"            /* ˙˙˘˘¯¯¯¯¯¯˜˜ˆˆˆˆ */ +	$"F6F6 F5F5 F5F4 F4F4 F4F4 F2ED EDEC ECEB"            /* ˆˆıııÙÙÙÙÙÚÌÌÏÏÎ */ +	$"EBEB EAEA EAE9 E9E9 E8E8 E7E7 E7E6 E6EE"            /* ÎÎÍÍÍÈÈÈËËÁÁÁÊÊÓ */ +	$"9B00 0000 0BCB F0EC ECED EDEE EEEE EFEF"            /* õ....ÀÏÏÌÌÓÓÓÔÔ */ +	$"EFF0 F0F0 F1F1 F2F2 F2F4 F7F7 F8F8 F8F9"            /* ÔÒÒÚÚÚÙ˜˜¯¯¯˘ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FEFD FCFC FCFC FCFC FBFB FBFA FAFA"            /* ˇˇ˛˝¸¸¸¸¸¸˚˚˚˙˙˙ */ +	$"FAFA F9F9 F9F8 F8F8 F8F8 F7F7 F7F6 F6F6"            /* ˙˙˘˘˘¯¯¯¯¯˜˜˜ˆˆˆ */ +	$"F6F6 F5F5 F5F4 F4F4 F4F4 F0ED EDEC ECEC"            /* ˆˆıııÙÙÙÙÙÌÌÏÏÏ */ +	$"EBEB EAEA EAE9 E9E9 E8E8 E8E7 E7E6 E6EA"            /* ÎÎÍÍÍÈÈÈËËËÁÁÊÊÍ */ +	$"C50B 0000 2BE6 EDEC ECED EDED EEEE EEEF"            /* ≈...+ÊÌÏÏÌÌÌÓÓÓÔ */ +	$"EFF0 F0F0 F1F1 F1F2 F2F2 F6F7 F7F7 F7FA"            /* ÔÒÒÒÚÚÚˆ˜˜˜˜˙ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFE FDFD FDFC FCFC FCFC FBFB FBFA FAFA"            /* ˇ˛˝˝˝¸¸¸¸¸˚˚˚˙˙˙ */ +	$"F9F9 F9F9 F9F8 F8F8 F7F7 F7F7 F7F6 F6F6"            /* ˘˘˘˘˘¯¯¯˜˜˜˜˜ˆˆˆ */ +	$"F5F5 F5F5 F5F4 F4F4 F3F3 F0ED EDED ECEC"            /* ıııııÙÙÙÛÛÌÌÌÏÏ */ +	$"EBEB EBEA EAEA E9E9 E8E8 E8E7 E7E7 E6E7"            /* ÎÎÎÍÍÍÈÈËËËÁÁÁÊÁ */ +	$"E129 0000 55F3 EBEC ECEC EDED EEEE EEEF"            /* ·)..UÛÎÏÏÏÌÌÓÓÓÔ */ +	$"EFF0 F0F0 F1F1 F1F2 F2F2 F4F7 F7F7 F7FA"            /* ÔÒÒÒÚÚÚÙ˜˜˜˜˙ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FEFE FDFD FDFC FCFC FBFB FBFB FBFA FAFA"            /* ˛˛˝˝˝¸¸¸˚˚˚˚˚˙˙˙ */ +	$"F9F9 F9F9 F9F8 F8F8 F7F7 F7F7 F7F7 F6F6"            /* ˘˘˘˘˘¯¯¯˜˜˜˜˜˜ˆˆ */ +	$"F5F5 F5F4 F4F4 F4F4 F4F1 EEED EDED ECEC"            /* ıııÙÙÙÙÙÙÒÓÌÌÌÏÏ */ +	$"ECEB EBEA EAEA E9E9 E9E8 E8E7 E7E7 E6E6"            /* ÏÎÎÍÍÍÈÈÈËËÁÁÁÊÊ */ +	$"EE52 0000 81F5 EBEC ECEC EDED EDEE EEEF"            /* ÓR..ÅıÎÏÏÏÌÌÌÓÓÔ */ +	$"EFEF F0F0 F0F1 F1F1 F2F2 F3F6 F6F7 F7FA"            /* ÔÔÒÒÒÚÚÛˆˆ˜˜˙ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ */ +	$"FEFE FEFD FDFC FCFC FBFB FBFB FBFB FAFA"            /* ˛˛˛˝˝¸¸¸˚˚˚˚˚˚˙˙ */ +	$"F9F9 F9F9 F9F9 F8F8 F7F7 F7F6 F6F6 F6F6"            /* ˘˘˘˘˘˘¯¯˜˜˜ˆˆˆˆˆ */ +	$"F6F5 F5F4 F4F4 F4F4 F4EF EEED EDED ECEC"            /* ˆııÙÙÙÙÙÙÔÓÌÌÌÏÏ */ +	$"ECEB EBEB EAEA E9E9 E9E8 E8E8 E7E7 E7E6"            /* ÏÎÎÎÍÍÈÈÈËËËÁÁÁÊ */ +	$"F07E 0000 A7F3 EBEB ECEC EDED EDEE EEEE"            /* ~..ßÛÎÎÏÏÌÌÌÓÓÓ */ +	$"EFEF EFF0 F0F1 F1F1 F2F2 F2F4 F6F7 F7FA"            /* ÔÔÔÒÒÒÚÚÚÙˆ˜˜˙ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FEFE"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛˛ */ +	$"FEFE FEFD FDFD FCFC FCFB FBFB FBFB FAFA"            /* ˛˛˛˝˝˝¸¸¸˚˚˚˚˚˙˙ */ +	$"FAF9 F9F8 F8F8 F8F8 F8F7 F7F7 F6F6 F5F5"            /* ˙˘˘¯¯¯¯¯¯˜˜˜ˆˆıı */ +	$"F5F5 F5F5 F4F4 F3F3 F2EE EEEE EDED EDEC"            /* ııııÙÙÛÛÚÓÓÓÌÌÌÏ */ +	$"ECEB EBEB EAEA EAE9 E9E8 E8E8 E7E7 E7E6"            /* ÏÎÎÎÍÍÍÈÈËËËÁÁÁÊ */ +	$"EDA4 0007 C6EF EBEB ECEC ECED EDED EEEE"            /* ̧..∆ÔÎÎÏÏÏÌÌÌÓÓ */ +	$"EFEF EFF0 F0F0 F1F1 F2F2 F2F3 F5F6 F7FA"            /* ÔÔÔÒÒÚÚÚÛıˆ˜˙ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFE FEFE"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˛˛˛ */ +	$"FEFE FEFD FDFD FCFC FCFB FBFB FBFB FAFA"            /* ˛˛˛˝˝˝¸¸¸˚˚˚˚˚˙˙ */ +	$"FAF9 F9F9 F8F8 F8F8 F8F7 F7F7 F6F6 F6F5"            /* ˙˘˘˘¯¯¯¯¯˜˜˜ˆˆˆı */ +	$"F5F5 F5F5 F4F4 F4F3 F0EE EEEE EDED EDEC"            /* ııııÙÙÙÛÓÓÓÌÌÌÏ */ +	$"ECEC EBEB EAEA EAE9 E9E9 E8E8 E7E7 E7E6"            /* ÏÏÎÎÍÍÍÈÈÈËËÁÁÁÊ */ +	$"EBC3 0716 D9ED EBEB EBEC ECED EDED EEEE"            /* Î√..ŸÌÎÎÎÏÏÌÌÌÓÓ */ +	$"EEEF EFEF F0F0 F1F1 F1F2 F2F2 F4F6 F6F9"            /* ÓÔÔÔÒÒÒÚÚÚÙˆˆ˘ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FEFD FDFD"            /* ˇˇˇˇˇˇˇˇˇˇˇˇ˛˝˝˝ */ +	$"FDFD FDFD FDFD FCFC FCFB FBFB FAFA FAFA"            /* ˝˝˝˝˝˝¸¸¸˚˚˚˙˙˙˙ */ +	$"FAF9 F9F9 F8F8 F8F7 F7F7 F7F7 F6F6 F6F5"            /* ˙˘˘˘¯¯¯˜˜˜˜˜ˆˆˆı */ +	$"F5F5 F4F4 F4F4 F4F2 EFEF EEEE EEED EDEC"            /* ııÙÙÙÙÙÚÔÔÓÓÓÌÌÏ */ +	$"ECEC EBEB EBEA EAE9 E9E9 E8E8 E8E7 E7E7"            /* ÏÏÎÎÎÍÍÈÈÈËËËÁÁÁ */ +	$"E8D6 162B E7EB EBEB EBEC ECEC EDED EDEE"            /* Ë÷.+ÁÎÎÎÎÏÏÏÌÌÌÓ */ +	$"EEEF EFEF F0F0 F0F1 F1F2 F2F2 F3F5 F6F8"            /* ÓÔÔÔÒÒÚÚÚÛıˆ¯ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FDFD FDFD"            /* ˇˇˇˇˇˇˇˇˇˇˇˇ˝˝˝˝ */ +	$"FDFD FDFD FDFD FCFC FCFB FBFB FAFA FAFA"            /* ˝˝˝˝˝˝¸¸¸˚˚˚˙˙˙˙ */ +	$"FAF9 F9F9 F8F8 F8F7 F7F7 F7F7 F6F6 F6F5"            /* ˙˘˘˘¯¯¯˜˜˜˜˜ˆˆˆı */ +	$"F5F5 F4F4 F4F3 F3F0 EFEF EEEE EEED EDED"            /* ııÙÙÙÛÛÔÔÓÓÓÌÌÌ */ +	$"ECEC EBEB EBEA EAEA E9E9 E9E8 E8E7 E7E7"            /* ÏÏÎÎÎÍÍÍÈÈÈËËÁÁÁ */ +	$"E7E3 2A42 EEEA EAEB EBEB ECEC EDED EDEE"            /* Á„*BÓÍÍÎÎÎÏÏÌÌÌÓ */ +	$"EEEE EFEF F0F0 F0F1 F1F1 F2F2 F2F3 F5F7"            /* ÓÓÔÔÒÒÒÚÚÚÛı˜ */ +	$"FEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FDFD FDFD"            /* ˇˇˇˇˇˇˇˇˇˇˇˇ˝˝˝˝ */ +	$"FDFD FDFD FDFD FCFC FCFB FBFB FAFA FAF9"            /* ˝˝˝˝˝˝¸¸¸˚˚˚˙˙˙˘ */ +	$"F9F9 F9F9 F8F8 F8F7 F7F7 F6F6 F6F6 F6F5"            /* ˘˘˘˘¯¯¯˜˜˜ˆˆˆˆˆı */ +	$"F5F5 F4F4 F4F3 F1F0 EFEF EEEE EEED EDED"            /* ııÙÙÙÛÒÔÔÓÓÓÌÌÌ */ +	$"ECEC ECEB EBEA EAEA E9E9 E9E8 E8E8 E7E7"            /* ÏÏÏÎÎÍÍÍÈÈÈËËËÁÁ */ +	$"E7EA 4153 F2EA EAEB EBEB ECEC ECED EDEE"            /* ÁÍASÚÍÍÎÎÎÏÏÏÌÌÓ */ +	$"EEEE EFEF EFF0 F0F0 F1F1 F1F2 F2F3 F4F5"            /* ÓÓÔÔÔÒÒÒÚÚÛÙı */ +	$"FDFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFE FDFD FDFD"            /* ˇˇˇˇˇˇˇˇˇˇˇ˛˝˝˝˝ */ +	$"FDFD FDFD FDFD FCFC FCFB FBFB FAFA FAF9"            /* ˝˝˝˝˝˝¸¸¸˚˚˚˙˙˙˘ */ +	$"F9F9 F9F9 F9F8 F8F7 F7F7 F6F6 F6F5 F5F5"            /* ˘˘˘˘˘¯¯˜˜˜ˆˆˆııı */ +	$"F5F5 F5F4 F4F2 F0F0 EFEF EFEE EEEE EDED"            /* ıııÙÙÚÔÔÔÓÓÓÌÌ */ +	$"ECEC ECEB EBEB EAEA E9E9 E9E8 E8E8 E7E7"            /* ÏÏÏÎÎÎÍÍÈÈÈËËËÁÁ */ +	$"E7EE 5274 F1EA EAEA EBEB EBEC ECED EDED"            /* ÁÓRtÒÍÍÍÎÎÎÏÏÌÌÌ */ +	$"EEEE EEEF EFF0 F0F0 F1F1 F1F2 F2F2 F3F4"            /* ÓÓÓÔÔÒÒÒÚÚÚÛÙ */ +	$"FCFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ¸ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFE FDFD FDFD"            /* ˇˇˇˇˇˇˇˇˇˇˇ˛˝˝˝˝ */ +	$"FDFD FDFD FDFC FCFC FCFB FBFB FAFA FAF9"            /* ˝˝˝˝˝¸¸¸¸˚˚˚˙˙˙˘ */ +	$"F9F9 F8F8 F8F8 F8F8 F7F7 F7F6 F6F5 F5F5"            /* ˘˘¯¯¯¯¯¯˜˜˜ˆˆııı */ +	$"F4F4 F4F4 F3F1 F0F0 EFEF EFEE EEEE EDED"            /* ÙÙÙÙÛÒÔÔÔÓÓÓÌÌ */ +	$"EDEC ECEB EBEB EAEA EAE9 E9E9 E8E8 E7E7"            /* ÌÏÏÎÎÎÍÍÍÈÈÈËËÁÁ */ +	$"E7EE 73A7 EEE9 EAEA EBEB EBEC ECEC EDED"            /* ÁÓsßÓÈÍÍÎÎÎÏÏÏÌÌ */ +	$"EDEE EEEF EFEF F0F0 F0F1 F1F1 F2F2 F3F3"            /* ÌÓÓÔÔÔÒÒÒÚÚÛÛ */ +	$"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFE FDFD FDFD"            /* ˇˇˇˇˇˇˇˇˇˇˇ˛˝˝˝˝ */ +	$"FDFD FDFD FDFC FCFC FCFB FBFB FAFA FAF9"            /* ˝˝˝˝˝¸¸¸¸˚˚˚˙˙˙˘ */ +	$"F9F9 F8F8 F8F8 F8F8 F7F7 F7F6 F6F6 F5F5"            /* ˘˘¯¯¯¯¯¯˜˜˜ˆˆˆıı */ +	$"F4F4 F4F3 F1F1 F0F0 F0EF EFEE EEEE EDED"            /* ÙÙÙÛÒÒÔÔÓÓÓÌÌ */ +	$"EDEC ECEC EBEB EAEA EAE9 E9E9 E8E8 E8E7"            /* ÌÏÏÏÎÎÍÍÍÈÈÈËËËÁ */ +	$"E7EB A5C2 ECE9 EAEA EAEB EBEC ECEC EDED"            /* ÁΕ¬ÏÈÍÍÍÎÎÏÏÏÌÌ */ +	$"EDEE EEEE EFEF F0F0 F0F1 F1F1 F2F2 F2F3"            /* ÌÓÓÓÔÔÒÒÒÚÚÚÛ */ +	$"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFD FCFC FCFC"            /* ˇˇˇˇˇˇˇˇˇˇˇ˝¸¸¸¸ */ +	$"FCFC FCFC FCFC FCFC FCFB FBFB FAFA FAF9"            /* ¸¸¸¸¸¸¸¸¸˚˚˚˙˙˙˘ */ +	$"F9F9 F8F8 F8F7 F7F7 F7F7 F7F6 F6F6 F5F5"            /* ˘˘¯¯¯˜˜˜˜˜˜ˆˆˆıı */ +	$"F4F4 F4F2 F1F1 F0F0 F0EF EFEF EEEE EDED"            /* ÙÙÙÚÒÒÔÔÔÓÓÌÌ */ +	$"EDEC ECEC EBEB EBEA EAE9 E9E9 E8E8 E8E7"            /* ÌÏÏÏÎÎÎÍÍÈÈÈËËËÁ */ +	$"E7E9 BFD1 EBE9 E9EA EAEB EBEB ECEC ECED"            /* ÁÈø—ÎÈÈÍÍÎÎÎÏÏÏÌ */ +	$"EDED EEEE EFEF EFF0 F0F0 F1F1 F1F2 F2F2"            /* ÌÌÓÓÔÔÔÒÒÒÚÚÚ */ +	$"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFC FCFC FCFC"            /* ˇˇˇˇˇˇˇˇˇˇˇ¸¸¸¸¸ */ +	$"FCFC FCFC FCFC FCFC FBFB FBFB FAFA FAF9"            /* ¸¸¸¸¸¸¸¸˚˚˚˚˙˙˙˘ */ +	$"F9F9 F8F8 F8F7 F7F7 F6F6 F6F6 F6F6 F5F5"            /* ˘˘¯¯¯˜˜˜ˆˆˆˆˆˆıı */ +	$"F5F4 F3F2 F1F1 F0F0 F0EF EFEF EEEE EEED"            /* ıÙÛÚÒÒÔÔÔÓÓÓÌ */ +	$"EDEC ECEC EBEB EBEA EAEA E9E9 E8E8 E8E7"            /* ÌÏÏÏÎÎÎÍÍÍÈÈËËËÁ */ +	$"E7E9 CEE1 E9E9 E9EA EAEA EBEB EBEC ECED"            /* ÁÈŒ·ÈÈÈÍÍÍÎÎÎÏÏÌ */ +	$"EDED EEEE EEEF EFEF F0F0 F0F1 F1F2 F2F2"            /* ÌÌÓÓÓÔÔÔÒÒÚÚÚ */ +	$"FAFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˙ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFC FCFC FCFC"            /* ˇˇˇˇˇˇˇˇˇˇˇ¸¸¸¸¸ */ +	$"FCFC FCFC FCFC FCFC FBFB FBFB FAFA FAF9"            /* ¸¸¸¸¸¸¸¸˚˚˚˚˙˙˙˘ */ +	$"F9F9 F8F8 F8F7 F7F7 F6F6 F6F5 F5F5 F5F5"            /* ˘˘¯¯¯˜˜˜ˆˆˆııııı */ +	$"F5F3 F2F2 F1F1 F1F0 F0EF EFEF EEEE EEED"            /* ıÛÚÚÒÒÒÔÔÔÓÓÓÌ */ +	$"EDED ECEC EBEB EBEA EAEA E9E9 E9E8 E8E7"            /* ÌÌÏÏÎÎÎÍÍÍÈÈÈËËÁ */ +	$"E7E7 DFE1 E9E9 E9E9 EAEA EBEB EBEC ECEC"            /* ÁÁfl·ÈÈÈÈÍÍÎÎÎÏÏÏ */ +	$"EDED EDEE EEEF EFEF F0F0 F0F1 F1F1 F2F1"            /* ÌÌÌÓÓÔÔÔÒÒÒÚÒ */ +	$"F9FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˘ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFC FBFB FBFB"            /* ˇˇˇˇˇˇˇˇˇˇˇ¸˚˚˚˚ */ +	$"FBFB FBFB FBFB FBFB FBFB FBFA FAFA FAF9"            /* ˚˚˚˚˚˚˚˚˚˚˚˙˙˙˙˘ */ +	$"F9F9 F8F8 F8F7 F7F7 F6F6 F6F5 F5F5 F4F4"            /* ˘˘¯¯¯˜˜˜ˆˆˆıııÙÙ */ +	$"F3F2 F2F2 F1F1 F1F0 F0F0 EFEF EEEE EEED"            /* ÛÚÚÚÒÒÒÔÔÓÓÓÌ */ +	$"EDED ECEC ECEB EBEA EAEA E9E9 E9E8 E8E8"            /* ÌÌÏÏÏÎÎÍÍÍÈÈÈËËË */ +	$"E7E7 E0D0 EAE9 E9E9 EAEA EAEB EBEB ECEC"            /* ÁÁ‡–ÍÈÈÈÍÍÍÎÎÎÏÏ */ +	$"EDED EDEE EEEE EFEF EFF0 F0F0 F1F1 F2F1"            /* ÌÌÌÓÓÓÔÔÔÒÒÚÒ */ +	$"F9FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˘ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFB FAFB FBFB"            /* ˇˇˇˇˇˇˇˇˇˇˇ˚˙˚˚˚ */ +	$"FBFB FBFB FBFB FAFA FAFA FAFA FAFA FAF9"            /* ˚˚˚˚˚˚˙˙˙˙˙˙˙˙˙˘ */ +	$"F9F9 F8F8 F8F7 F7F7 F6F6 F6F5 F5F5 F4F3"            /* ˘˘¯¯¯˜˜˜ˆˆˆıııÙÛ */ +	$"F3F2 F2F2 F1F1 F1F0 F0F0 EFEF EFEE EEED"            /* ÛÚÚÚÒÒÒÔÔÔÓÓÌ */ +	$"EDED ECEC ECEB EBEB EAEA E9E9 E9E8 E8E8"            /* ÌÌÏÏÏÎÎÎÍÍÈÈÈËËË */ +	$"E7E8 D2C1 EBE8 E9E9 E9EA EAEB EBEB ECEC"            /* ÁË“¡ÎËÈÈÈÍÍÎÎÎÏÏ */ +	$"ECED EDED EEEE EFEF EFF0 F0F0 F1F1 F1F1"            /* ÏÌÌÌÓÓÔÔÔÒÒÒÒ */ +	$"F7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ˜ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFB FAFA FAFB"            /* ˇˇˇˇˇˇˇˇˇˇˇ˚˙˙˙˚ */ +	$"FBFB FBFB FAFA FAFA FAFA FAF9 F9F9 F9F9"            /* ˚˚˚˚˙˙˙˙˙˙˙˘˘˘˘˘ */ +	$"F9F9 F8F8 F8F7 F7F7 F6F6 F6F6 F5F5 F4F3"            /* ˘˘¯¯¯˜˜˜ˆˆˆˆııÙÛ */ +	$"F3F2 F2F2 F1F1 F1F0 F0F0 EFEF EFEE EEEE"            /* ÛÚÚÚÒÒÒÔÔÔÓÓÓ */ +	$"EDED ECEC ECEB EBEB EAEA EAE9 E9E9 E8E8"            /* ÌÌÏÏÏÎÎÎÍÍÍÈÈÈËË */ +	$"E7EA C2A6 EDE8 E9E9 E9EA EAEA EBEB EBEC"            /* Áͬ¶ÌËÈÈÈÍÍÍÎÎÎÏ */ +	$"ECED EDED EEEE EEEF EFEF F0F0 F0F1 F1F1"            /* ÏÌÌÌÓÓÓÔÔÔÒÒÒ */ +	$"F4FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* Ùˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFC FAFA FAFA"            /* ˇˇˇˇˇˇˇˇˇˇˇ¸˙˙˙˙ */ +	$"FAFA FAFA FAFA FAFA FAFA F9F9 F9F9 F8F8"            /* ˙˙˙˙˙˙˙˙˙˙˘˘˘˘¯¯ */ +	$"F8F8 F8F8 F8F7 F7F7 F6F6 F6F6 F4F4 F4F3"            /* ¯¯¯¯¯˜˜˜ˆˆˆˆÙÙÙÛ */ +	$"F3F3 F2F2 F1F1 F1F0 F0F0 EFEF EFEE EEEE"            /* ÛÛÚÚÒÒÒÔÔÔÓÓÓ */ +	$"EDED ECEC ECEB EBEB EAEA EAE9 E9E9 E8E8"            /* ÌÌÏÏÏÎÎÎÍÍÍÈÈÈËË */ +	$"E7EC A073 F0E8 E8E9 E9E9 EAEA EAEB EBEC"            /* ÁφsËËÈÈÈÍÍÍÎÎÏ */ +	$"ECEC EDED EDEE EEEE EFEF EFF0 F0F1 F1F1"            /* ÏÏÌÌÌÓÓÓÔÔÔÒÒÒ */ +	$"F2FC FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* Ú¸ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFC FAFA FAFA"            /* ˇˇˇˇˇˇˇˇˇˇˇ¸˙˙˙˙ */ +	$"FAFA FAFA FAFA FAFA FAF9 F9F9 F9F9 F8F8"            /* ˙˙˙˙˙˙˙˙˙˘˘˘˘˘¯¯ */ +	$"F8F8 F7F7 F7F6 F6F6 F6F6 F6F5 F4F4 F4F3"            /* ¯¯˜˜˜ˆˆˆˆˆˆıÙÙÙÛ */ +	$"F3F3 F2F2 F1F1 F1F0 F0F0 EFEF EFEE EEEE"            /* ÛÛÚÚÒÒÒÔÔÔÓÓÓ */ +	$"EDED EDEC ECEC EBEB EAEA EAE9 E9E9 E8E8"            /* ÌÌÌÏÏÏÎÎÍÍÍÈÈÈËË */ +	$"E8EF 7752 EFE8 E8E9 E9E9 EAEA EAEB EBEB"            /* ËÔwRÔËËÈÈÈÍÍÍÎÎÎ */ +	$"ECEC ECED EDED EEEE EFEF EFF0 F0F0 F1F1"            /* ÏÏÏÌÌÌÓÓÔÔÔÒÒ */ +	$"F1F6 FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* Òˆˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFD F9F9 FAFA"            /* ˇˇˇˇˇˇˇˇˇˇˇ˝˘˘˙˙ */ +	$"FAFA FAFA FAFA FAFA F9F9 F9F9 F9F9 F8F8"            /* ˙˙˙˙˙˙˙˙˘˘˘˘˘˘¯¯ */ +	$"F8F8 F7F7 F7F6 F6F6 F5F5 F5F5 F4F4 F4F3"            /* ¯¯˜˜˜ˆˆˆııııÙÙÙÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 EFEF EFEE EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓÓ */ +	$"EDED EDEC ECEC EBEB EBEA EAE9 E9E9 E8E8"            /* ÌÌÌÏÏÏÎÎÎÍÍÈÈÈËË */ +	$"E8F0 5641 EBE8 E8E8 E9E9 E9EA EAEA EBEB"            /* ËVAÎËËËÈÈÈÍÍÍÎÎ */ +	$"EBEC ECED EDED EEEE EEEF EFEF F0F0 F0F1"            /* ÎÏÏÌÌÌÓÓÓÔÔÔÒ */ +	$"F1F1 F9FF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ÒÒ˘ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFD F9F9 F9F9"            /* ˇˇˇˇˇˇˇˇˇˇˇ˝˘˘˘˘ */ +	$"F9FA FAFA FAFA F9F9 F9F9 F9F9 F9F8 F8F8"            /* ˘˙˙˙˙˙˘˘˘˘˘˘˘¯¯¯ */ +	$"F8F7 F7F7 F7F6 F6F6 F5F5 F5F5 F4F4 F4F3"            /* ¯˜˜˜˜ˆˆˆııııÙÙÙÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EDED EDEC ECEC EBEB EBEA EAEA E9E9 E9E8"            /* ÌÌÌÏÏÏÎÎÎÍÍÍÈÈÈË */ +	$"E8EC 402A E4E8 E8E8 E9E9 E9EA EAEA EBEB"            /* ËÏ@*‰ËËËÈÈÈÍÍÍÎÎ */ +	$"EBEC ECEC EDED EDEE EEEE EFEF F0F0 F0F1"            /* ÎÏÏÏÌÌÌÓÓÓÔÔÒ */ +	$"F1F1 F1F8 FFFF FFFF FFFF FFFF FFFF FFFF"            /* ÒÒÒ¯ˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFE F9F9 F9F9"            /* ˇˇˇˇˇˇˇˇˇˇˇ˛˘˘˘˘ */ +	$"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F8F8 F8F8"            /* ˘˘˘˘˘˘˘˘˘˘˘˘¯¯¯¯ */ +	$"F8F7 F7F7 F7F6 F6F6 F5F5 F5F5 F4F4 F4F3"            /* ¯˜˜˜˜ˆˆˆııııÙÙÙÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDEC ECEC EBEB EBEA EAEA E9E9 E9E8"            /* ÓÌÌÏÏÏÎÎÎÍÍÍÈÈÈË */ +	$"E9E5 2C16 D7E9 E8E8 E8E9 E9E9 EAEA EAEB"            /* ÈÂ,.◊ÈËËËÈÈÈÍÍÍÎ */ +	$"EBEB ECEC ECED EDEE EEEE EFEF EFF0 F0F0"            /* ÎÎÏÏÏÌÌÓÓÓÔÔÔ */ +	$"F1F1 F1F1 F6FE FFFF FFFF FFFF FFFF FFFF"            /* ÒÒÒÒˆ˛ˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF F9F9 F9F9"            /* ˇˇˇˇˇˇˇˇˇˇˇˇ˘˘˘˘ */ +	$"F9F9 F9F9 F9F9 F9F9 F9F9 F9F8 F8F8 F8F8"            /* ˘˘˘˘˘˘˘˘˘˘˘¯¯¯¯¯ */ +	$"F8F7 F7F7 F7F6 F6F6 F5F5 F5F5 F4F4 F4F3"            /* ¯˜˜˜˜ˆˆˆııııÙÙÙÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED ECEC EBEB EBEA EAEA E9E9 E9E8"            /* ÓÌÌÌÏÏÎÎÎÍÍÍÈÈÈË */ +	$"EAD9 1907 C4EC E7E8 E8E8 E9E9 E9EA EAEB"            /* ÍŸ..ƒÏÁËËËÈÈÈÍÍÎ */ +	$"EBEB ECEC ECED EDED EEEE EEEF EFEF F0F0"            /* ÎÎÏÏÏÌÌÌÓÓÓÔÔÔ */ +	$"F0F1 F1F1 F2F5 FEFF FFFF FFFF FFFF FFFF"            /* ÒÒÒÚı˛ˇˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FAF8 F8F9"            /* ˇˇˇˇˇˇˇˇˇˇˇˇ˙¯¯˘ */ +	$"F9F9 F9F9 F9F9 F9F9 F9F9 F8F8 F8F8 F8F8"            /* ˘˘˘˘˘˘˘˘˘˘¯¯¯¯¯¯ */ +	$"F7F7 F7F7 F6F6 F6F6 F5F5 F5F4 F4F4 F4F3"            /* ˜˜˜˜ˆˆˆˆıııÙÙÙÙÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEB EBEA EAEA E9E9 E9E8"            /* ÓÌÌÌÏÏÏÎÎÍÍÍÈÈÈË */ +	$"EDC4 0700 A5EE E7E8 E8E8 E9E9 E9EA EAEA"            /* ̃..•ÓÁËËËÈÈÈÍÍÍ */ +	$"EBEB EBEC ECEC EDED EDEE EEEE EFEF EFF0"            /* ÎÎÎÏÏÏÌÌÌÓÓÓÔÔÔ */ +	$"F0F0 F1F1 F2F2 F5FE FFFF FFFF FFFF FFFF"            /* ÒÒÚÚı˛ˇˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FBF8 F8F8"            /* ˇˇˇˇˇˇˇˇˇˇˇˇ˚¯¯¯ */ +	$"F8F8 F9F9 F9F9 F9F9 F8F8 F8F8 F8F8 F8F7"            /* ¯¯˘˘˘˘˘˘¯¯¯¯¯¯¯˜ */ +	$"F7F7 F7F7 F6F6 F6F6 F5F5 F5F4 F4F4 F4F3"            /* ˜˜˜˜ˆˆˆˆıııÙÙÙÙÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEB EBEA EAEA E9E9 E9E8"            /* ÓÌÌÌÏÏÏÎÎÍÍÍÈÈÈË */ +	$"EFA9 0000 7EF0 E7E7 E8E8 E8E9 E9E9 EAEA"            /* Ô©..~ÁÁËËËÈÈÈÍÍ */ +	$"EAEB EBEB ECEC EDED EDEE EEEE EFEF EFF0"            /* ÍÎÎÎÏÏÌÌÌÓÓÓÔÔÔ */ +	$"F0F0 F1F1 F1F2 F2F5 FEFF FFFF FFFF FFFF"            /* ÒÒÒÚÚı˛ˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FDF8 F8F8"            /* ˇˇˇˇˇˇˇˇˇˇˇˇ˝¯¯¯ */ +	$"F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F7F7"            /* ¯¯¯¯¯¯¯¯¯¯¯¯¯¯˜˜ */ +	$"F7F7 F7F6 F6F6 F6F6 F5F5 F5F4 F4F4 F4F3"            /* ˜˜˜ˆˆˆˆˆıııÙÙÙÙÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9E8"            /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈË */ +	$"F282 0000 53EE E7E7 E7E8 E8E8 E9E9 EAEA"            /* ÚÇ..SÓÁÁÁËËËÈÈÍÍ */ +	$"EAEB EBEB ECEC ECED EDED EEEE EEEF EFEF"            /* ÍÎÎÎÏÏÏÌÌÌÓÓÓÔÔÔ */ +	$"EFF0 F0F1 F1F1 F2F2 F6FF FFFF FFFF FFFF"            /* ÔÒÒÒÚÚˆˇˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FEF8 F8F8"            /* ˇˇˇˇˇˇˇˇˇˇˇˇ˛¯¯¯ */ +	$"F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F8F7 F7F7"            /* ¯¯¯¯¯¯¯¯¯¯¯¯¯˜˜˜ */ +	$"F7F7 F7F6 F6F6 F6F5 F5F5 F5F4 F4F4 F3F3"            /* ˜˜˜ˆˆˆˆııııÙÙÙÛÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9E9"            /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÈ */ +	$"EF53 0000 2AE1 E7E7 E7E8 E8E8 E9E9 E9EA"            /* ÔS..*·ÁÁÁËËËÈÈÈÍ */ +	$"EAEA EBEB EBEC ECEC EDED EDEE EEEE EFEF"            /* ÍÍÎÎÎÏÏÏÌÌÌÓÓÓÔÔ */ +	$"EFEF F0F0 F1F1 F1F2 F1F6 FFFF FFFF FFFF"            /* ÔÔÒÒÒÚÒˆˇˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFF9 F7F7"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˘˜˜ */ +	$"F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F7F7 F7F7"            /* ¯¯¯¯¯¯¯¯¯¯¯¯˜˜˜˜ */ +	$"F7F7 F6F6 F6F6 F6F5 F5F5 F5F4 F4F4 F3F3"            /* ˜˜ˆˆˆˆˆııııÙÙÙÛÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9EA"            /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÍ */ +	$"E42B 0000 0BC6 EAE7 E7E7 E8E8 E8E9 E9E9"            /* ‰+...∆ÍÁÁÁËËËÈÈÈ */ +	$"EAEA EAEB EBEB ECEC ECED EDED EEEE EEEF"            /* ÍÍÍÎÎÎÏÏÏÌÌÌÓÓÓÔ */ +	$"EFEF F0F0 F0F1 F1F1 F2F2 F7FF FFFF FFFF"            /* ÔÔÒÒÒÚÚ˜ˇˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFB F7F7"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˚˜˜ */ +	$"F7F7 F7F7 F8F8 F8F8 F8F7 F7F7 F7F7 F7F7"            /* ˜˜˜˜¯¯¯¯¯˜˜˜˜˜˜˜ */ +	$"F7F6 F6F6 F6F6 F5F5 F5F5 F5F4 F4F4 F3F3"            /* ˜ˆˆˆˆˆıııııÙÙÙÛÛ */ +	$"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9EE"            /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÓ */ +	$"C90B 0000 009B EEE6 E7E7 E7E8 E8E8 E9E9"            /* …....õÓÊÁÁÁËËËÈÈ */ +	$"E9EA EAEB EBEB ECEC ECED EDED EEEE EEEF"            /* ÈÍÍÎÎÎÏÏÏÌÌÌÓÓÓÔ */ +	$"EFEF EFF0 F0F0 F1F1 F1F2 F2F9 FFFF FFFF"            /* ÔÔÔÒÒÒÚÚ˘ˇˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFD F7F7"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˝˜˜ */ +	$"F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7"            /* ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ */ +	$"F6F6 F6F6 F6F6 F5F5 F5F5 F4F4 F4F4 F3F3"            /* ˆˆˆˆˆˆııııÙÙÙÙÛÛ */ +	$"F3F2 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÚÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9F1"            /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÒ */ +	$"9D00 0000 0060 EFE6 E7E7 E7E8 E8E8 E9E9"            /* ù....`ÔÊÁÁÁËËËÈÈ */ +	$"E9EA EAEA EBEB EBEC ECEC EDED EDEE EEEE"            /* ÈÍÍÍÎÎÎÏÏÏÌÌÌÓÓÓ */ +	$"EFEF EFEF F0F0 F1F1 F1F1 F2F2 FAFF FFFF"            /* ÔÔÔÔÒÒÒÒÚÚ˙ˇˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF F8F7"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ¯˜ */ +	$"F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F6"            /* ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ˆ */ +	$"F6F6 F6F6 F6F5 F5F5 F5F5 F4F4 F4F4 F3F3"            /* ˆˆˆˆˆıııııÙÙÙÙÛÛ */ +	$"F3F2 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÚÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9F1"            /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÒ */ +	$"6200 0000 0027 DFE7 E6E7 E7E7 E8E8 E8E9"            /* b....'flÁÊÁÁÁËËËÈ */ +	$"E9E9 EAEA EAEB EBEB ECEC ECED EDED EEEE"            /* ÈÈÍÍÍÎÎÎÏÏÏÌÌÌÓÓ */ +	$"EEEF EFEF EFF0 F0F1 F1F1 F2F2 F2FB FFFF"            /* ÓÔÔÔÔÒÒÒÚÚÚ˚ˇˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FAF6"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˙ˆ */ +	$"F6F6 F7F7 F7F7 F7F7 F7F7 F7F7 F7F6 F6F6"            /* ˆˆ˜˜˜˜˜˜˜˜˜˜˜ˆˆˆ */ +	$"F6F6 F6F6 F6F5 F5F5 F5F4 F4F4 F4F3 F3F3"            /* ˆˆˆˆˆııııÙÙÙÙÛÛÛ */ +	$"F3F2 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÚÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED EDEC ECEC EBEB EBEA EAEA EAE5"            /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÍÍ */ +	$"2B00 0000 0005 B9EB E6E6 E7E7 E7E8 E8E9"            /* +.....πÎÊÊÁÁÁËËÈ */ +	$"E9E9 EAEA EAEB EBEB ECEC ECED EDED EDEE"            /* ÈÈÍÍÍÎÎÎÏÏÏÌÌÌÌÓ */ +	$"EEEE EFEF EFEF F0F0 F1F1 F1F2 F2F3 FDFF"            /* ÓÓÔÔÔÔÒÒÒÚÚÛ˝ˇ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FDF6"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˝ˆ */ +	$"F6F6 F6F6 F6F6 F6F7 F7F6 F6F6 F6F6 F6F6"            /* ˆˆˆˆˆˆˆ˜˜ˆˆˆˆˆˆˆ */ +	$"F6F6 F6F6 F5F5 F5F5 F5F4 F4F4 F4F3 F3F3"            /* ˆˆˆˆıııııÙÙÙÙÛÛÛ */ +	$"F3F2 F2F2 F1F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÛÚÚÚÒÒÒÒÔÔÔÓÓ */ +	$"EEED EDED EDEC ECEC EBEB EBEA EAEA EFBE"            /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÍÔæ */ +	$"0700 0000 0000 79EF E6E6 E7E7 E7E8 E8E8"            /* ......yÔÊÊÁÁÁËËË */ +	$"E9E9 E9EA EAEA EBEB EBEC ECEC EDED EDEE"            /* ÈÈÈÍÍÍÎÎÎÏÏÏÌÌÌÓ */ +	$"EEEE EEEF EFEF F0F0 F0F1 F1F1 F2F2 F4FE"            /* ÓÓÓÔÔÔÒÒÒÚÚÙ˛ */ +	$"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFF7"            /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˜ */ +	$"F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6"            /* ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ */ +	$"F6F6 F5F5 F5F5 F5F5 F4F4 F4F4 F4F3 F3F3"            /* ˆˆııııııÙÙÙÙÙÛÛÛ */ +	$"F2F2 F2F2 F1F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÚÚÚÚÒÒÒÒÔÔÔÓÓ */ +	$"EEED EDED EDEC ECEC EBEB EBEA EAEA F27B"            /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÍÚ{ */ +	$"0000 0000 0000 32E3 E6E6 E6E7 E7E7 E8E8"            /* ......2„ÊÊÊÁÁÁËË */ +	$"E8E9 E9E9 EAEA EAEB EBEB ECEC ECED EDED"            /* ËÈÈÈÍÍÍÎÎÎÏÏÏÌÌÌ */ +	$"EEEE EEEF EFEF EFF0 F0F0 F1F1 F1F2 F2F5"            /* ÓÓÓÔÔÔÔÒÒÒÚÚı */ +	$"FEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFA"            /* ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˙ */ +	$"F5F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6"            /* ıˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ */ +	$"F6F5 F5F5 F5F5 F5F5 F4F4 F4F4 F3F3 F3F3"            /* ˆıııııııÙÙÙÙÛÛÛÛ */ +	$"F2F2 F2F2 F1F1 F1F1 F0F0 F0EF EFEF EEEE"            /* ÚÚÚÚÒÒÒÒÔÔÔÓÓ */ +	$"EEED EDED EDEC ECEC EBEB EBEA EAEA E836"            /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÍË6 */ +	$"0000 0000 0000 07BA EAE6 E6E6 E7E7 E7E8"            /* .......∫ÍÊÊÊÁÁÁË */ +	$"E8E8 E9E9 E9EA EAEA EBEB EBEC ECEC EDED"            /* ËËÈÈÈÍÍÍÎÎÎÏÏÏÌÌ */ +	$"EDEE EEEE EFEF EFEF F0F0 F0F1 F1F1 F2F2"            /* ÌÓÓÓÔÔÔÔÒÒÒÚÚ */ +	$"F7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFD"            /* ˜ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˝ */ +	$"F5F5 F5F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F5"            /* ıııˆˆˆˆˆˆˆˆˆˆˆˆı */ +	$"F5F5 F5F5 F5F5 F5F4 F4F4 F4F4 F3F3 F3F3"            /* ıııııııÙÙÙÙÙÛÛÛÛ */ +	$"F2F2 F2F2 F1F1 F1F0 F0F0 F0EF EFEF EEEE"            /* ÚÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED EDEC ECEC EBEB EBEA EAF0 B907"            /* ÓÌÌÌÌÏÏÏÎÎÎÍÍπ. */ +	$"0000 0000 0000 006D EEE6 E6E6 E7E7 E7E8"            /* .......mÓÊÊÊÁÁÁË */ +	$"E8E8 E9E9 E9EA EAEA EBEB EBEB ECEC ECED"            /* ËËÈÈÈÍÍÍÎÎÎÎÏÏÏÌ */ +	$"EDED EEEE EEEF EFEF EFF0 F0F0 F1F1 F1F1"            /* ÌÌÓÓÓÔÔÔÔÒÒÒÒ */ +	$"F2F9 FFFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* Ú˘ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"F7F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"            /* ˜ııııııııııııııı */ +	$"F5F5 F5F5 F5F5 F4F4 F4F4 F4F3 F3F3 F3F2"            /* ııııııÙÙÙÙÙÛÛÛÛÚ */ +	$"F2F2 F2F2 F1F1 F1F0 F0F0 F0EF EFEF EEEE"            /* ÚÚÚÚÒÒÒÔÔÔÓÓ */ +	$"EEED EDED EDEC ECEC EBEB EBEA EAF2 6700"            /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÚg. */ +	$"0000 0000 0000 0020 D9E7 E6E6 E6E7 E7E7"            /* ....... ŸÁÊÊÊÁÁÁ */ +	$"E8E8 E8E9 E9E9 EAEA EAEB EBEB ECEC ECED"            /* ËËËÈÈÈÍÍÍÎÎÎÏÏÏÌ */ +	$"EDED EDEE EEEE EFEF EFEF F0F0 F0F1 F1F1"            /* ÌÌÌÓÓÓÔÔÔÔÒÒÒ */ +	$"F1F2 FBFF FFFF FFFF FFFF FFFF FFFF FFFF"            /* ÒÚ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"F9F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"            /* ˘ııııııııııııııı */ +	$"F5F5 F5F5 F5F4 F4F4 F4F4 F4F3 F3F3 F3F2"            /* ıııııÙÙÙÙÙÙÛÛÛÛÚ */ +	$"F2F2 F2F1 F1F1 F1F0 F0F0 EFEF EFEF EEEE"            /* ÚÚÚÒÒÒÒÔÔÔÔÓÓ */ +	$"EEED EDED EDEC ECEC EBEB EBEA EDDB 1E00"            /* ÓÌÌÌÌÏÏÏÎÎÎÍÌ€.. */ +	$"0000 0000 0000 0000 9AED E5E6 E6E6 E7E7"            /* ........öÌÂÊÊÊÁÁ */ +	$"E7E8 E8E8 E9E9 E9EA EAEA EBEB EBEC ECEC"            /* ÁËËËÈÈÈÍÍÍÎÎÎÏÏÏ */ +	$"EDED EDEE EEEE EEEF EFEF EFF0 F0F0 F1F1"            /* ÌÌÌÓÓÓÓÔÔÔÔÒÒ */ +	$"F1F1 F3FD FFFF FFFF FFFF FFFF FFFF FFFF"            /* ÒÒÛ˝ˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FDF4 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"            /* ˝Ùıııııııııııııı */ +	$"F5F5 F5F4 F4F4 F4F4 F4F4 F3F3 F3F3 F3F2"            /* ıııÙÙÙÙÙÙÙÛÛÛÛÛÚ */ +	$"F2F2 F2F1 F1F1 F1F0 F0F0 EFEF EFEF EEEE"            /* ÚÚÚÒÒÒÒÔÔÔÔÓÓ */ +	$"EEED EDED EDEC ECEC EBEB EBEA F299 0000"            /* ÓÌÌÌÌÏÏÏÎÎÎÍÚô.. */ +	$"0000 0000 0000 0000 3DE6 E5E6 E6E6 E7E7"            /* ........=ÊÂÊÊÊÁÁ */ +	$"E7E8 E8E8 E8E9 E9E9 EAEA EAEB EBEB ECEC"            /* ÁËËËËÈÈÈÍÍÍÎÎÎÏÏ */ +	$"ECED EDED EEEE EEEE EFEF EFEF F0F0 F0F1"            /* ÏÌÌÌÓÓÓÓÔÔÔÔÒ */ +	$"F1F1 F1F5 FFFF FFFF FFFF FFFF FFFF FFFF"            /* ÒÒÒıˇˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFF6 F4F4 F4F5 F5F5 F5F5 F5F5 F5F5 F5F5"            /* ˇˆÙÙÙııııııııııı */ +	$"F5F4 F4F4 F4F4 F4F4 F4F3 F3F3 F3F3 F2F2"            /* ıÙÙÙÙÙÙÙÙÛÛÛÛÛÚÚ */ +	$"F2F2 F2F1 F1F1 F1F0 F0F0 EFEF EFEF EEEE"            /* ÚÚÚÒÒÒÒÔÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEC EBEB EBEB EC40 0000"            /* ÓÌÌÌÏÏÏÏÎÎÎÎÏ@.. */ +	$"0000 0000 0000 0000 04AF EBE5 E6E6 E6E7"            /* .........ØÎÂÊÊÊÁ */ +	$"E7E7 E8E8 E8E9 E9E9 EAEA EAEB EBEB EBEC"            /* ÁÁËËËÈÈÈÍÍÍÎÎÎÎÏ */ +	$"ECEC EDED EDEE EEEE EFEF EFEF EFF0 F0F0"            /* ÏÏÌÌÌÓÓÓÔÔÔÔÔ */ +	$"F1F1 F1F1 F7FF FFFF FFFF FFFF FFFF FFFF"            /* ÒÒÒÒ˜ˇˇˇˇˇˇˇˇˇˇˇ */ +	$"FFF9 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4"            /* ˇ˘ÙÙÙÙÙÙÙÙÙÙÙÙÙÙ */ +	$"F4F4 F4F4 F4F4 F4F4 F3F3 F3F3 F3F3 F2F2"            /* ÙÙÙÙÙÙÙÙÛÛÛÛÛÛÚÚ */ +	$"F2F2 F1F1 F1F1 F0F0 F0F0 EFEF EFEF EEEE"            /* ÚÚÒÒÒÒÔÔÔÔÓÓ */ +	$"EEED EDED ECEC ECEC EBEB EBF1 AF05 0000"            /* ÓÌÌÌÏÏÏÏÎÎÎÒØ... */ +	$"0000 0000 0000 0000 004F EAE5 E5E6 E6E6"            /* .........OÍÂÂÊÊÊ */ +	$"E7E7 E7E8 E8E8 E9E9 E9EA EAEA EBEB EBEC"            /* ÁÁÁËËËÈÈÈÍÍÍÎÎÎÏ */ +	$"ECEC ECED EDED EEEE EEEE EFEF EFEF F0F0"            /* ÏÏÏÌÌÌÓÓÓÓÔÔÔÔ */ +	$"F0F1 F1F1 F1FA FFFF FFFF FFFF FFFF FFFF"            /* ÒÒÒÒ˙ˇˇˇˇˇˇˇˇˇˇ */ +	$"FFFD F4F4 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4"            /* ˇ˝ÙÙÙÙÙÙÙÙÙÙÙÙÙÙ */ +	$"F4F4 F4F4 F4F4 F3F3 F3F3 F3F3 F3F2 F2F2"            /* ÙÙÙÙÙÙÛÛÛÛÛÛÛÚÚÚ */ +	$"F2F2 F1F1 F1F1 F0F0 F0EF EFEF EFEE EEEE"            /* ÚÚÒÒÒÒÔÔÔÔÓÓÓ */ +	$"EEED EDED ECEC ECEC EBEB ECEC 4900 0000"            /* ÓÌÌÌÏÏÏÏÎÎÏÏI... */ +	$"0000 0000 0000 0000 0008 B5EB E5E5 E6E6"            /* ..........µÎÂÂÊÊ */ +	$"E6E7 E7E7 E8E8 E8E9 E9E9 EAEA EAEB EBEB"            /* ÊÁÁÁËËËÈÈÈÍÍÍÎÎÎ */ +	$"ECEC ECEC EDED EDEE EEEE EEEF EFEF EFF0"            /* ÏÏÏÏÌÌÌÓÓÓÓÔÔÔÔ */ +	$"F0F0 F1F1 F1F2 FDFF FFFF FFFF FFFF FFFF"            /* ÒÒÒÚ˝ˇˇˇˇˇˇˇˇˇ */ +	$"FFFF F5F3 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4"            /* ˇˇıÛÙÙÙÙÙÙÙÙÙÙÙÙ */ +	$"F4F4 F4F4 F4F3 F3F3 F3F3 F3F3 F2F2 F2F2"            /* ÙÙÙÙÙÛÛÛÛÛÛÛÚÚÚÚ */ +	$"F2F1 F1F1 F1F1 F0F0 F0EF EFEF EFEE EEEE"            /* ÚÒÒÒÒÒÔÔÔÔÓÓÓ */ +	$"EEED EDED ECEC ECEC EBEB F1B5 0600 0000"            /* ÓÌÌÌÏÏÏÏÎÎÒµ.... */ +	$"0000 0000 0000 0000 0000 4CE9 E5E5 E6E6"            /* ..........LÈÂÂÊÊ */ +	$"E6E7 E7E7 E8E8 E8E8 E9E9 E9EA EAEA EBEB"            /* ÊÁÁÁËËËËÈÈÈÍÍÍÎÎ */ +	$"EBEC ECEC EDED EDED EEEE EEEE EFEF EFEF"            /* ÎÏÏÏÌÌÌÌÓÓÓÓÔÔÔÔ */ +	$"EFF0 F0F0 F1F1 F4FE FFFF FFFF FFFF FFFF"            /* ÔÒÒÙ˛ˇˇˇˇˇˇˇˇ */ +	$"FFFF F9F3 F3F3 F4F4 F4F4 F4F4 F4F4 F4F4"            /* ˇˇ˘ÛÛÛÙÙÙÙÙÙÙÙÙÙ */ +	$"F4F4 F3F3 F3F3 F3F3 F3F3 F3F2 F2F2 F2F2"            /* ÙÙÛÛÛÛÛÛÛÛÛÚÚÚÚÚ */ +	$"F1F1 F1F1 F1F0 F0F0 F0EF EFEF EFEE EEEE"            /* ÒÒÒÒÒÔÔÔÔÓÓÓ */ +	$"EEED EDED ECEC ECEB EBEC EE4D 0000 0000"            /* ÓÌÌÌÏÏÏÎÎÏÓM.... */ +	$"0000 0000 0000 0000 0000 06AB ECE5 E5E6"            /* ...........´ÏÂÂÊ */ +	$"E6E6 E7E7 E7E8 E8E8 E9E9 E9E9 EAEA EAEB"            /* ÊÊÁÁÁËËËÈÈÈÈÍÍÍÎ */ +	$"EBEB ECEC ECEC EDED EDEE EEEE EEEF EFEF"            /* ÎÎÏÏÏÏÌÌÌÓÓÓÓÔÔÔ */ +	$"EFEF F0F0 F0F1 F0F7 FFFF FFFF FFFF FFFF"            /* ÔÔÒ˜ˇˇˇˇˇˇˇˇ */ +	$"FFFF FCF3 F3F3 F3F3 F3F3 F3F3 F3F3 F3F3"            /* ˇˇ¸ÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +	$"F3F3 F3F3 F3F3 F3F3 F3F3 F2F2 F2F2 F2F2"            /* ÛÛÛÛÛÛÛÛÛÛÚÚÚÚÚÚ */ +	$"F1F1 F1F1 F0F0 F0F0 EFEF EFEF EFEE EEEE"            /* ÒÒÒÒÔÔÔÔÔÓÓÓ */ +	$"EDED EDED ECEC ECEB EBF1 B007 0000 0000"            /* ÌÌÌÌÏÏÏÎÎÒ∞..... */ +	$"0000 0000 0000 0000 0000 003A E2E6 E5E5"            /* ...........:‚Ê */ +	$"E6E6 E6E7 E7E7 E8E8 E8E9 E9E9 EAEA EAEA"            /* ÊÊÊÁÁÁËËËÈÈÈÍÍÍÍ */ +	$"EBEB EBEC ECEC ECED EDED EEEE EEEE EFEF"            /* ÎÎÎÏÏÏÏÌÌÌÓÓÓÓÔÔ */ +	$"EFEF EFF0 F0F0 F1F1 FBFF FFFF FFFF FFFF"            /* ÔÔÔÒÒ˚ˇˇˇˇˇˇˇ */ +	$"FFFF FFF5 F3F3 F3F3 F3F3 F3F3 F3F3 F3F3"            /* ˇˇˇıÛÛÛÛÛÛÛÛÛÛÛÛ */ +	$"F3F3 F3F3 F3F3 F3F3 F2F2 F2F2 F2F2 F2F1"            /* ÛÛÛÛÛÛÛÛÚÚÚÚÚÚÚÒ */ +	$"F1F1 F1F1 F0F0 F0F0 EFEF EFEF EEEE EEEE"            /* ÒÒÒÒÔÔÔÔÓÓÓÓ */ +	$"EDED EDED ECEC ECEB EDE6 3900 0000 0000"            /* ÌÌÌÌÏÏÏÎÌÊ9..... */ +	$"0000 0000 0000 0000 0000 0000 8EED E5E5"            /* ............éÌ */ +	$"E5E6 E6E6 E7E7 E7E8 E8E8 E9E9 E9EA EAEA"            /* ÂÊÊÊÁÁÁËËËÈÈÈÍÍÍ */ +	$"EAEB EBEB ECEC ECEC EDED EDEE EEEE EEEF"            /* ÍÎÎÎÏÏÏÏÌÌÌÓÓÓÓÔ */ +	$"EFEF EFEF F0F0 F0F0 F3FE FFFF FFFF FFFF"            /* ÔÔÔÔÛ˛ˇˇˇˇˇˇ */ +	$"FFFF FFF8 F2F3 F3F3 F3F3 F3F3 F3F3 F3F3"            /* ˇˇˇ¯ÚÛÛÛÛÛÛÛÛÛÛÛ */ +	$"F3F3 F3F3 F3F3 F2F2 F2F2 F2F2 F2F2 F1F1"            /* ÛÛÛÛÛÛÚÚÚÚÚÚÚÚÒÒ */ +	$"F1F1 F1F0 F0F0 F0EF EFEF EFEF EEEE EEEE"            /* ÒÒÒÔÔÔÔÔÓÓÓÓ */ +	$"EDED EDED ECEC ECEB F38B 0000 0000 0000"            /* ÌÌÌÌÏÏÏÎÛã...... */ +	$"0000 0000 0000 0000 0000 0000 1ECF E8E5"            /* .............œË */ +	$"E5E6 E6E6 E7E7 E7E7 E8E8 E8E9 E9E9 EAEA"            /* ÂÊÊÊÁÁÁÁËËËÈÈÈÍÍ */ +	$"EAEA EBEB EBEC ECEC EDED EDED EEEE EEEE"            /* ÍÍÎÎÎÏÏÏÌÌÌÌÓÓÓÓ */ +	$"EFEF EFEF EFEF F0F0 F0F6 FFFF FFFF FFFF"            /* ÔÔÔÔÔÔˆˇˇˇˇˇˇ */ +	$"FFFF FFFB F2F2 F2F2 F3F3 F3F3 F3F3 F3F3"            /* ˇˇˇ˚ÚÚÚÚÛÛÛÛÛÛÛÛ */ +	$"F3F3 F3F3 F2F2 F2F2 F2F2 F2F2 F2F1 F1F1"            /* ÛÛÛÛÚÚÚÚÚÚÚÚÚÒÒÒ */ +	$"F1F1 F1F0 F0F0 F0EF EFEF EFEF EEEE EEEE"            /* ÒÒÒÔÔÔÔÔÓÓÓÓ */ +	$"EDED EDEC ECEC ECF0 D31C 0000 0000 0000"            /* ÌÌÌÏÏÏÏ”....... */ +	$"0000 0000 0000 0000 0000 0000 005B E9E5"            /* .............[È */ +	$"E5E5 E6E6 E6E7 E7E7 E8E8 E8E8 E9E9 E9EA"            /* ÂÂÊÊÊÁÁÁËËËËÈÈÈÍ */ +	$"EAEA EBEB EBEB ECEC ECEC EDED EDEE EEEE"            /* ÍÍÎÎÎÎÏÏÏÏÌÌÌÓÓÓ */ +	$"EEEF EFEF EFEF EFF0 F0F0 F9FF FFFF FFFF"            /* ÓÔÔÔÔÔÔ˘ˇˇˇˇˇ */ +	$"FFFF FFFE F3F2 F2F2 F2F2 F2F2 F2F2 F2F2"            /* ˇˇˇ˛ÛÚÚÚÚÚÚÚÚÚÚÚ */ +	$"F2F2 F2F2 F2F2 F2F2 F2F2 F2F2 F1F1 F1F1"            /* ÚÚÚÚÚÚÚÚÚÚÚÚÒÒÒÒ */ +	$"F1F1 F0F0 F0F0 EFEF EFEF EFEE EEEE EEED"            /* ÒÒÔÔÔÔÔÓÓÓÓÌ */ +	$"EDED EDEC ECEC EDEF 6200 0000 0000 0000"            /* ÌÌÌÏÏÏÌÔb....... */ +	$"0000 0000 0000 0000 0000 0000 0005 A2EC"            /* ..............¢Ï */ +	$"E5E5 E5E6 E6E6 E7E7 E7E8 E8E8 E8E9 E9E9"            /* ÂÂÂÊÊÊÁÁÁËËËËÈÈÈ */ +	$"EAEA EAEB EBEB EBEC ECEC ECED EDED EEEE"            /* ÍÍÍÎÎÎÎÏÏÏÏÌÌÌÓÓ */ +	$"EEEE EEEF EFEF EFEF F0F0 F1FC FFFF FFFF"            /* ÓÓÓÔÔÔÔÔÒ¸ˇˇˇˇ */ +	$"FFFF FFFF F5F2 F2F2 F2F2 F2F2 F2F2 F2F2"            /* ˇˇˇˇıÚÚÚÚÚÚÚÚÚÚÚ */ +	$"F2F2 F2F2 F2F2 F2F2 F2F2 F1F1 F1F1 F1F1"            /* ÚÚÚÚÚÚÚÚÚÚÒÒÒÒÒÒ */ +	$"F1F0 F0F0 F0F0 EFEF EFEF EFEE EEEE EEED"            /* ÒÔÔÔÔÔÓÓÓÓÌ */ +	$"EDED EDEC ECED F2A1 0500 0000 0000 0000"            /* ÌÌÌÏÏÌÚ°........ */ +	$"0000 0000 0000 0000 0000 0000 0000 22CE"            /* .............."Œ */ +	$"E8E5 E5E5 E6E6 E6E7 E7E7 E8E8 E8E9 E9E9"            /* ËÂÂÂÊÊÊÁÁÁËËËÈÈÈ */ +	$"E9EA EAEA EBEB EBEB ECEC ECED EDED EDEE"            /* ÈÍÍÍÎÎÎÎÏÏÏÌÌÌÌÓ */ +	$"EEEE EEEE EFEF EFEF EFEF F0F3 FFFF FFFF"            /* ÓÓÓÓÔÔÔÔÔÔÛˇˇˇˇ */ +	$"FFFF FFFF F8F1 F2F2 F2F2 F2F2 F2F2 F2F2"            /* ˇˇˇˇ¯ÒÚÚÚÚÚÚÚÚÚÚ */ +	$"F2F2 F2F2 F2F2 F2F2 F1F1 F1F1 F1F1 F1F1"            /* ÚÚÚÚÚÚÚÚÒÒÒÒÒÒÒÒ */ +	$"F0F0 F0F0 F0EF EFEF EFEF EEEE EEEE EEED"            /* ÔÔÔÔÔÓÓÓÓÓÌ */ +	$"EDED ECEC ECEF D01E 0000 0000 0000 0000"            /* ÌÌÏÏÏÔ–......... */ +	$"0000 0000 0000 0000 0000 0000 0000 004C"            /* ...............L */ +	$"DFE7 E5E5 E5E6 E6E6 E7E7 E7E7 E8E8 E9E9"            /* flÁÂÂÂÊÊÊÁÁÁÁËËÈÈ */ +	$"E9E9 EAEA EAEB EBEB EBEC ECEC ECED EDED"            /* ÈÈÍÍÍÎÎÎÎÏÏÏÏÌÌÌ */ +	$"EDEE EEEE EEEF EFEF EFEF EFEF F8FF FFFF"            /* ÌÓÓÓÓÔÔÔÔÔÔÔ¯ˇˇˇ */ +	$"FFFF FFFF FCF1 F1F1 F1F1 F2F2 F2F2 F2F2"            /* ˇˇˇˇ¸ÒÒÒÒÒÚÚÚÚÚÚ */ +	$"F2F2 F2F2 F2F1 F1F1 F1F1 F1F1 F1F1 F1F0"            /* ÚÚÚÚÚÒÒÒÒÒÒÒÒÒÒ */ +	$"F0F0 F0F0 EFEF EFEF EFEF EEEE EEEE EDED"            /* ÔÔÔÔÔÔÓÓÓÓÌÌ */ +	$"EDED ECEC EEE6 4900 0000 0000 0000 0000"            /* ÌÌÏÏÓÊI......... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"7AE8 E6E5 E5E6 E6E6 E6E7 E7E7 E7E8 E8E9"            /* zËÊÂÂÊÊÊÊÁÁÁÁËËÈ */ +	$"E9E9 E9EA EAEA EBEB EBEB ECEC ECEC EDED"            /* ÈÈÈÍÍÍÎÎÎÎÏÏÏÏÌÌ */ +	$"EDED EEEE EEEE EFEF EFEF EFEF F0FC FFFF"            /* ÌÌÓÓÓÓÔÔÔÔÔÔ¸ˇˇ */ +	$"FFFF FFFF FEF2 F1F1 F1F1 F1F1 F1F1 F1F1"            /* ˇˇˇˇ˛ÚÒÒÒÒÒÒÒÒÒÒ */ +	$"F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F0F0"            /* ÒÒÒÒÒÒÒÒÒÒÒÒÒÒ */ +	$"F0F0 F0EF EFEF EFEF EFEE EEEE EEEE EDED"            /* ÔÔÔÔÔÔÓÓÓÓÓÌÌ */ +	$"EDED ECEC F4A4 0000 0000 0000 0000 0000"            /* ÌÌÏÏÙ§.......... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0AA0 E9E6 E5E5 E6E6 E6E7 E7E7 E7E7 E8E8"            /* ¬†ÈÊÂÂÊÊÊÁÁÁÁÁËË */ +	$"E9E9 E9E9 EAEA EAEB EBEB EBEC ECEC ECED"            /* ÈÈÈÈÍÍÍÎÎÎÎÏÏÏÏÌ */ +	$"EDED EDEE EEEE EEEE EFEF EFEF EFF3 FFFF"            /* ÌÌÌÓÓÓÓÓÔÔÔÔÔÛˇˇ */ +	$"FFFF FFFF FFF4 F0F1 F1F1 F1F1 F1F1 F1F1"            /* ˇˇˇˇˇÙÒÒÒÒÒÒÒÒÒ */ +	$"F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F0F0 F0F0"            /* ÒÒÒÒÒÒÒÒÒÒÒÒ */ +	$"F0F0 EFEF EFEF EFEF EFEE EEEE EEED EDED"            /* ÔÔÔÔÔÔÔÓÓÓÓÌÌÌ */ +	$"EDED ECEC F1C0 0D00 0000 0000 0000 0000"            /* ÌÌÏÏÒ¿.......... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"001D BBE9 E6E5 E5E6 E6E6 E7E7 E7E7 E7E8"            /* ..ªÈÊÂÂÊÊÊÁÁÁÁÁË */ +	$"E8E9 E9E9 E9EA EAEA EBEB EBEB ECEC ECEC"            /* ËÈÈÈÈÍÍÍÎÎÎÎÏÏÏÏ */ +	$"EDED EDED EDEE EEEE EEEF EFEF EFEF F8FF"            /* ÌÌÌÌÌÓÓÓÓÔÔÔÔÔ¯ˇ */ +	$"FFFF FFFF FFF6 EFF1 F1F1 F1F1 F1F1 F1F1"            /* ˇˇˇˇˇˆÔÒÒÒÒÒÒÒÒÒ */ +	$"F1F1 F1F1 F1F1 F1F1 F1F1 F0F0 F0F0 F0F0"            /* ÒÒÒÒÒÒÒÒÒÒ */ +	$"F0EF EFEF EFEF EFEF EEEE EEEE EEED EDED"            /* ÔÔÔÔÔÔÔÓÓÓÓÓÌÌÌ */ +	$"EDEC ECEC ECEF 4A00 0000 0000 0000 0000"            /* ÌÏÏÏÏÔJ......... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 31CA E8E6 E5E5 E6E6 E6E7 E7E7 E7E8"            /* ..1 ËÊÂÂÊÊÊÁÁÁÁË */ +	$"E8E8 E9E9 E9E9 EAEA EAEA EBEB EBEC ECEC"            /* ËËÈÈÈÈÍÍÍÍÎÎÎÏÏÏ */ +	$"ECED EDED EDED EEEE EEEE EEEF EFEF F0FC"            /* ÏÌÌÌÌÌÓÓÓÓÓÔÔÔ¸ */ +	$"FFFF FFFF FFF8 F0F0 F0F0 F0F1 F1F1 F1F1"            /* ˇˇˇˇˇ¯ÒÒÒÒÒ */ +	$"F1F1 F1F1 F1F1 F1F0 F0F0 F0F0 F0F0 F0F0"            /* ÒÒÒÒÒÒÒ */ +	$"EFEF EFEF EFEF EFEE EEEE EEEE EDED EDED"            /* ÔÔÔÔÔÔÔÓÓÓÓÓÌÌÌÌ */ +	$"EDEC ECEC ECF3 A003 0000 0000 0000 0000"            /* ÌÏÏÏÏÛ†......... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0044 D4E8 E5E5 E5E6 E6E6 E7E7 E7E7"            /* ...D‘ËÂÂÂÊÊÊÁÁÁÁ */ +	$"E8E8 E8E9 E9E9 E9EA EAEA EBEB EBEB ECEC"            /* ËËËÈÈÈÈÍÍÍÎÎÎÎÏÏ */ +	$"ECEC EDED EDED EDEE EEEE EEEE EFEF EEF4"            /* ÏÏÌÌÌÌÌÓÓÓÓÓÔÔÓÙ */ +	$"FFFF FFFF FFFA F0F0 F0F0 F0F0 F0F0 F0F0"            /* ˇˇˇˇˇ˙ */ +	$"F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 EFEF"            /* ÔÔ */ +	$"EFEF EFEF EFEF EEEE EEEE EEEE EDED EDED"            /* ÔÔÔÔÔÔÓÓÓÓÓÓÌÌÌÌ */ +	$"ECEC ECEC ECED E026 0000 0000 0000 0000"            /* ÏÏÏÏÏ̇&........ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 51D7 E8E5 E5E5 E6E6 E6E7 E7E7"            /* ....Q◊ËÂÂÂÊÊÊÁÁÁ */ +	$"E7E7 E8E8 E9E9 E9E9 EAEA EAEB EBEB EBEB"            /* ÁÁËËÈÈÈÈÍÍÍÎÎÎÎÎ */ +	$"ECEC ECEC EDED EDED EDEE EEEE EEEE EFEF"            /* ÏÏÏÏÌÌÌÌÌÓÓÓÓÓÔÔ */ +	$"FAFF FFFF FFFB F0EF EFF0 F0F0 F0F0 F0F0"            /* ˙ˇˇˇˇ˚ÔÔ */ +	$"F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 EFEF EFEF"            /* ÔÔÔÔ */ +	$"EFEF EFEF EFEE EEEE EEEE EEED EDED EDED"            /* ÔÔÔÔÔÓÓÓÓÓÓÌÌÌÌÌ */ +	$"ECEC ECEC EBEB F577 0000 0000 0000 0000"            /* ÏÏÏÏÎÎıw........ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0059 D9E8 E6E5 E5E6 E6E6 E7E7"            /* .....YŸËÊÂÂÊÊÊÁÁ */ +	$"E7E7 E7E8 E8E9 E9E9 E9EA EAEA EAEB EBEB"            /* ÁÁÁËËÈÈÈÈÍÍÍÍÎÎÎ */ +	$"EBEC ECEC ECED EDED EDED EEEE EEEE EEEE"            /* ÎÏÏÏÏÌÌÌÌÌÓÓÓÓÓÓ */ +	$"F1FF FFFF FFFD F0EF EFEF EFEF EFEF F0F0"            /* Òˇˇˇˇ˝ÔÔÔÔÔÔÔ */ +	$"F0F0 F0F0 F0F0 F0F0 EFEF EFEF EFEF EFEF"            /* ÔÔÔÔÔÔÔÔ */ +	$"EFEF EFEF EEEE EEEE EEEE EDED EDED EDEC"            /* ÔÔÔÔÓÓÓÓÓÓÌÌÌÌÌÏ */ +	$"ECEC ECEC EBEB EFC6 0F00 0000 0000 0000"            /* ÏÏÏÏÎÎÔ∆........ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 59D6 E7E6 E5E5 E6E6 E6E7"            /* ......Y÷ÁÊÂÂÊÊÊÁ */ +	$"E7E7 E7E8 E8E8 E9E9 E9E9 EAEA EAEA EBEB"            /* ÁÁÁËËËÈÈÈÈÍÍÍÍÎÎ */ +	$"EBEB ECEC ECEC ECED EDED EDED EEEE EEEE"            /* ÎÎÏÏÏÏÏÌÌÌÌÌÓÓÓÓ */ +	$"EDF6 FFFF FFFE F0EF EFEF EFEF EFEF EFEF"            /* ̈ˇˇˇ˛ÔÔÔÔÔÔÔÔÔ */ +	$"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF"            /* ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔ */ +	$"EFEF EFEE EEEE EEEE EEED EDED EDED ECEC"            /* ÔÔÔÓÓÓÓÓÓÌÌÌÌÌÏÏ */ +	$"ECEC ECEB EBEB EBEF 4C00 0000 0000 0000"            /* ÏÏÏÎÎÎÎÔL....... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0051 D2E7 E6E5 E6E6 E6E6"            /* .......Q“ÁÊÂÊÊÊÊ */ +	$"E7E7 E7E7 E8E8 E8E9 E9E9 E9EA EAEA EAEB"            /* ÁÁÁÁËËËÈÈÈÈÍÍÍÍÎ */ +	$"EBEB EBEC ECEC ECEC EDED EDED EDEE EEEE"            /* ÎÎÎÏÏÏÏÏÌÌÌÌÌÓÓÓ */ +	$"EEEF FCFF FFFE F1EF EFEF EFEF EFEF EFEF"            /* ÓÔ¸ˇˇ˛ÒÔÔÔÔÔÔÔÔÔ */ +	$"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF"            /* ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔ */ +	$"EFEF EEEE EEEE EEEE EEED EDED EDED ECEC"            /* ÔÔÓÓÓÓÓÓÓÌÌÌÌÌÏÏ */ +	$"ECEC ECEB EBEB EBF2 A203 0000 0000 0000"            /* ÏÏÏÎÎÎÎÚ¢....... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 45C7 E7E6 E5E6 E6E6"            /* ........E«ÁÊÂÊÊÊ */ +	$"E6E7 E7E7 E7E7 E8E8 E9E9 E9E9 EAEA EAEA"            /* ÊÁÁÁÁÁËËÈÈÈÈÍÍÍÍ */ +	$"EBEB EBEB EBEC ECEC ECEC EDED EDED EDED"            /* ÎÎÎÎÎÏÏÏÏÏÌÌÌÌÌÌ */ +	$"EEED F3FF FFFF F2EE EFEF EFEF EFEF EFEF"            /* ÓÌÛˇˇˇÚÓÔÔÔÔÔÔÔÔ */ +	$"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF"            /* ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔ */ +	$"EEEE EEEE EEEE EEED EDED EDED EDEC ECEC"            /* ÓÓÓÓÓÓÓÌÌÌÌÌÌÏÏÏ */ +	$"ECEC EBEB EBEB EBEC E127 0000 0000 0000"            /* ÏÏÎÎÎÎÎÏ·'...... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0031 B9E6 E6E5 E6E6"            /* .........1πÊÊÂÊÊ */ +	$"E6E6 E7E7 E7E7 E8E8 E8E9 E9E9 E9EA EAEA"            /* ÊÊÁÁÁÁËËËÈÈÈÈÍÍÍ */ +	$"EAEA EBEB EBEB ECEC ECEC ECED EDED EDED"            /* ÍÍÎÎÎÎÏÏÏÏÏÌÌÌÌÌ */ +	$"EDED EEFA FFFF F3ED EEEE EEEF EFEF EFEF"            /* ÌÌÓ˙ˇˇÛÌÓÓÓÔÔÔÔÔ */ +	$"EFEF EFEF EFEF EFEF EFEF EFEF EFEE EEEE"            /* ÔÔÔÔÔÔÔÔÔÔÔÔÔÓÓÓ */ +	$"EEEE EEEE EEEE EDED EDED EDED ECEC ECEC"            /* ÓÓÓÓÓÓÌÌÌÌÌÌÏÏÏÏ */ +	$"ECEB EBEB EBEB EAEA F379 0000 0000 0000"            /* ÏÎÎÎÎÎÍÍÛy...... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 1E9C E3E7 E6E6"            /* ...........ú„ÁÊÊ */ +	$"E6E6 E6E7 E7E7 E7E7 E8E8 E9E9 E9E9 EAEA"            /* ÊÊÊÁÁÁÁÁËËÈÈÈÈÍÍ */ +	$"EAEA EAEB EBEB EBEB ECEC ECEC ECED EDED"            /* ÍÍÍÎÎÎÎÎÏÏÏÏÏÌÌÌ */ +	$"EDED EDF1 FEFF F5ED EEEE EEEE EEEE EEEF"            /* ÌÌÌÒ˛ˇıÌÓÓÓÓÓÓÓÔ */ +	$"EFEF EFEF EFEF EFEF EFEF EEEE EEEE EEEE"            /* ÔÔÔÔÔÔÔÔÔÔÓÓÓÓÓÓ */ +	$"EEEE EEEE EEED EDED EDED EDEC ECEC ECEC"            /* ÓÓÓÓÓÌÌÌÌÌÌÏÏÏÏÏ */ +	$"ECEB EBEB EBEB EAEA EFC7 0F00 0000 0000"            /* ÏÎÎÎÎÎÍÍÔ«...... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 000A 79D8 E6E6"            /* ...........¬yÿÊÊ */ +	$"E6E6 E6E6 E7E7 E7E7 E7E8 E8E9 E9E9 E9E9"            /* ÊÊÊÊÁÁÁÁÁËËÈÈÈÈÈ */ +	$"EAEA EAEA EBEB EBEB EBEC ECEC ECEC ECED"            /* ÍÍÍÍÎÎÎÎÎÏÏÏÏÏÏÌ */ +	$"EDED EDED F2FF F8ED EEEE EEEE EEEE EEEE"            /* ÌÌÌÌÚˇ¯ÌÓÓÓÓÓÓÓÓ */ +	$"EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE"            /* ÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓ */ +	$"EEEE EEED EDED EDED EDED ECEC ECEC ECEC"            /* ÓÓÓÌÌÌÌÌÌÌÏÏÏÏÏÏ */ +	$"EBEB EBEB EBEA EAEA EAEF 4E00 0000 0000"            /* ÎÎÎÎÎÍÍÍÍÔN..... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 004D BFE5"            /* .............MøÂ */ +	$"E6E7 E6E6 E6E7 E7E7 E7E7 E8E8 E8E9 E9E9"            /* ÊÁÊÊÊÁÁÁÁÁËËËÈÈÈ */ +	$"E9EA EAEA EAEA EBEB EBEB EBEC ECEC ECEC"            /* ÈÍÍÍÍÍÎÎÎÎÎÏÏÏÏÏ */ +	$"ECED EDED EDFB F9ED EDEE EEEE EEEE EEEE"            /* ÏÌÌÌÌ˚˘ÌÌÓÓÓÓÓÓÓ */ +	$"EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE"            /* ÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓ */ +	$"EEED EDED EDED EDED EDEC ECEC ECEC ECEB"            /* ÓÌÌÌÌÌÌÌÌÏÏÏÏÏÏÎ */ +	$"EBEB EBEB EAEA EAEA EAF1 A303 0000 0000"            /* ÎÎÎÎÍÍÍÍÍÒ£..... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 2195"            /* ..............!ï */ +	$"DCE5 E7E6 E6E6 E7E7 E7E7 E7E8 E8E8 E9E9"            /* ‹ÂÁÊÊÊÁÁÁÁÁËËËÈÈ */ +	$"E9E9 EAEA EAEA EAEB EBEB EBEB ECEC ECEC"            /* ÈÈÍÍÍÍÍÎÎÎÎÎÏÏÏÏ */ +	$"ECEC ECED ECF7 FCED EDED EDED EEEE EEEE"            /* ÏÏÏÌϘ¸ÌÌÌÌÌÓÓÓÓ */ +	$"EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEED"            /* ÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÌ */ +	$"EDED EDED EDED EDED ECEC ECEC ECEC ECEB"            /* ÌÌÌÌÌÌÌÌÏÏÏÏÏÏÏÎ */ +	$"EBEB EBEB EAEA EAEA E9EB E12A 0000 0000"            /* ÎÎÎÎÍÍÍÍÈη*.... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0004"            /* ................ */ +	$"57BF E3E7 E7E6 E6E7 E7E7 E7E7 E8E8 E8E9"            /* Wø„ÁÁÊÊÁÁÁÁÁËËËÈ */ +	$"E9E9 E9E9 EAEA EAEA EBEB EBEB EBEB ECEC"            /* ÈÈÈÈÍÍÍÍÎÎÎÎÎÎÏÏ */ +	$"ECEC ECEC ECEF FDEF EDED EDED EDED EDED"            /* ÏÏÏÏÏÔ˝ÔÌÌÌÌÌÌÌÌ */ +	$"EDEE EEEE EEEE EEEE EEEE EEED EDED EDED"            /* ÌÓÓÓÓÓÓÓÓÓÓÌÌÌÌÌ */ +	$"EDEE EEED EDED EDEC ECEC ECEC ECEC EBEB"            /* ÌÓÓÌÌÌÌÏÏÏÏÏÏÏÎÎ */ +	$"EBEB EBEA EAEA EAEA E9E9 F27A 0100 0000"            /* ÎÎÎÍÍÍÍÍÈÈÚz.... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"001E 84D1 E6E7 E7E6 E7E7 E7E7 E7E8 E8E8"            /* ..Ñ—ÊÁÁÊÁÁÁÁÁËËË */ +	$"E9E9 E9E9 E9EA EAEA EAEA EBEB EBEB EBEB"            /* ÈÈÈÈÈÍÍÍÍÍÎÎÎÎÎÎ */ +	$"ECEC ECEC ECEC F9EF EDED EDED EDED EDED"            /* ÏÏÏÏÏÏ˘ÔÌÌÌÌÌÌÌÌ */ +	$"EDED EDED EDED EDED EDED EDED EDED EDEE"            /* ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÓ */ +	$"EEEB E6ED EDEC ECEC ECEC ECEC ECEB EBEB"            /* ÓÎÊÌÌÏÏÏÏÏÏÏÏÎÎÎ */ +	$"EBEB EAEA EAEA EAE9 E9E9 EEC8 0F00 0000"            /* ÎÎÍÍÍÍÍÈÈÈÓ».... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0038 9DD9 E6E7 E7E7 E7E7 E7E7 E8E8"            /* ...8ùŸÊÁÁÁÁÁÁÁËË */ +	$"E8E8 E9E9 E9E9 EAEA EAEA EAEA EBEB EBEB"            /* ËËÈÈÈÈÍÍÍÍÍÍÎÎÎÎ */ +	$"EBEB ECEC ECEB F0EF ECEC EDED EDED EDED"            /* ÎÎÏÏÏÎÔÏÏÌÌÌÌÌÌ */ +	$"EDED EDED EDED EDED EDED EDED EDEE EEED"            /* ÌÌÌÌÌÌÌÌÌÌÌÌÌÓÓÌ */ +	$"E09C 71EA EDEC ECEC ECEC ECEB EBEB EBEB"            /* ‡úqÍÌÏÏÏÏÏÏÎÎÎÎÎ */ +	$"EBEB EAEA EAEA EAE9 E9E9 E9EE 4F00 0000"            /* ÎÎÍÍÍÍÍÈÈÈÈÓO... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0548 A5DA E5E7 E8E8 E7E7 E7E7"            /* .....H•⁄ÂÁËËÁÁÁÁ */ +	$"E8E8 E8E9 E9E9 E9E9 EAEA EAEA EAEB EBEB"            /* ËËËÈÈÈÈÈÍÍÍÍÍÎÎÎ */ +	$"EBEB EBEB ECEC ECEC ECEC ECEC ECEC EDED"            /* ÎÎÎÎÏÏÏÏÏÏÏÏÏÏÌÌ */ +	$"EDED EDED EDED EDED EDED EDEE EFEC E2AD"            /* ÌÌÌÌÌÌÌÌÌÌÌÓÔÏ‚≠ */ +	$"4B04 06C2 F0EC ECEC ECEC EBEB EBEB EBEB"            /* K..¬ÏÏÏÏÏÎÎÎÎÎÎ */ +	$"EBEA EAEA EAEA E9E9 E9E9 E9F0 A504 0000"            /* ÎÍÍÍÍÍÈÈÈÈÈ•... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 074B 9FD5 E4E6 E9E8 E8E7"            /* .......Kü’‰ÊÈËËÁ */ +	$"E7E8 E8E8 E9E9 E9E9 E9EA EAEA EAEA EAEB"            /* ÁËËËÈÈÈÈÈÍÍÍÍÍÍÎ */ +	$"EBEB EBEB EBEB ECEC ECEC ECEC ECEC ECEC"            /* ÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÏ */ +	$"ECEC ECEC EDED EDED EEEE EDEB DAA3 4F09"            /* ÏÏÏÏÌÌÌÌÓÓÌÎ⁄£O∆ */ +	$"0000 0072 F4EC ECEC ECEB EBEB EBEB EBEB"            /* ...rÙÏÏÏÏÎÎÎÎÎÎÎ */ +	$"EAEA EAEA EAE9 E9E9 E9E9 E8EA E12B 0000"            /* ÍÍÍÍÍÈÈÈÈÈËÍ·+.. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 033A 8CC6 E0E6 E7E9"            /* .........:å∆‡ÊÁÈ */ +	$"E8E8 E8E8 E8E8 E9E9 E9E9 E9EA EAEA EAEA"            /* ËËËËËËÈÈÈÈÈÍÍÍÍÍ */ +	$"EAEB EBEB EBEB EBEB EBEC ECEC ECEC ECEC"            /* ÍÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏ */ +	$"ECEC ECEC ECED EDED EBE6 CD92 3C04 0000"            /* ÏÏÏÏÏÌÌÌÎÊÕí<... */ +	$"0000 0023 DFEF ECEB EBEB EBEB EBEB EAEA"            /* ...#flÔÏÎÎÎÎÎÎÎÍÍ */ +	$"EAEA EAEA E9E9 E9E9 E9E9 E8E8 F17C 0100"            /* ÍÍÍÍÈÈÈÈÈÈËËÒ|.. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0020 64A7 D1E2"            /* ........... dß—‚ */ +	$"E6E7 E9E8 E8E8 E8E9 E9E9 E9E9 E9EA EAEA"            /* ÊÁÈËËËËÈÈÈÈÈÈÍÍÍ */ +	$"EAEA EAEB EBEB EBEB EBEB EBEC ECEC ECEC"            /* ÍÍÍÎÎÎÎÎÎÎÎÏÏÏÏÏ */ +	$"ECED EDED EDEB E8D8 AB67 2300 0000 0000"            /* ÏÌÌÌÌÎËÿ´g#..... */ +	$"0000 0001 9FF3 EBEB EBEB EBEB EBEA EAEA"            /* ....üÛÎÎÎÎÎÎÎÍÍÍ */ +	$"EAEA EAEA E9E9 E9E9 E9E8 E8E8 EDC9 1000"            /* ÍÍÍÍÈÈÈÈÈËËËÌ….. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0006 3070"            /* ..............0p */ +	$"A8CC DEE5 E8E8 E9E9 E8E9 E9E9 E9E9 EAEA"            /* ®ÃfiÂËËÈÈËÈÈÈÈÈÍÍ */ +	$"EAEA EAEA EAEB EBEB EBEB EBEB ECEC ECEC"            /* ÍÍÍÍÍÎÎÎÎÎÎÎÏÏÏÏ */ +	$"EDEB EAE5 D1A9 7136 0700 0000 0000 0000"            /* ÌÎÍ—©q6........ */ +	$"0000 0000 48ED EBEB EBEB EBEB EAEA EAEA"            /* ....HÌÎÎÎÎÎÎÍÍÍÍ */ +	$"EAEA EAE9 E9E9 E9E9 E8E8 E8E8 E8ED 5200"            /* ÍÍÍÈÈÈÈÈËËËËËÌR. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0625 588B B1CE DCE3 E6E8 E9E9 E9EA EAE9"            /* .%X㱌‹„ÊËÈÈÈÍÍÈ */ +	$"EAEA EAEA EAEA EAEB ECEB EBEB EAE9 E7E1"            /* ÍÍÍÍÍÍÍÎÏÎÎÎÍÈÁ· */ +	$"D0B4 8C5C 2805 0000 0000 0000 0000 0000"            /* –¥å\(........... */ +	$"0000 0000 0DC4 F0EB EBEB EAEA EAEA EAEA"            /* .....ƒÎÎÎÍÍÍÍÍÍ */ +	$"EAEA E9E9 E9E9 E9E9 E8E8 E8E8 E7EF A704"            /* ÍÍÈÈÈÈÈÈËËËËÁÔß. */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0921 4260 7D96 A7B6 C3CA D2DC"            /* ....∆!B`}ñß∂√ “‹ */ +	$"E1E5 E8E9 E3E0 DCD5 CAC2 B8AB 957C 6043"            /* ·ÂËÈ„‡‹’ ¬∏´ï|`C */ +	$"2209 0000 0000 0000 0000 0000 0000 0000"            /* "∆.............. */ +	$"0000 0000 006D F1EB EBEA EAEA EAEA EAEA"            /* .....mÒÎÎÍÍÍÍÍÍÍ */ +	$"EAE9 E9E9 E9E9 E9E8 E8E8 E8E7 E7E8 E435"            /* ÍÈÈÈÈÈÈËËËËÁÁˉ5 */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0000 0000 0006 101E 2E3A 5072"            /* .............:Pr */ +	$"848F 9B99 8A7B 6E56 392A 1D12 0500 0000"            /* Ñèõôä{nV9*...... */ +	$"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */ +	$"0000 0000 0024 A1A1 A0A0 A0A0 A0A0 A09F"            /* .....$°°†††††††ü */ +	$"9F9F 9F9F 9F9F 9F9F 9F9F 9F9E 9E9E A548"            /* üüüüüüüüüüüûûû•H */ +	$"0000 00"                                            /* ... */ +}; + diff --git a/pc-bios/qemu_logo.svg b/pc-bios/qemu_logo.svg new file mode 100644 index 00000000..07b5b516 --- /dev/null +++ b/pc-bios/qemu_logo.svg @@ -0,0 +1,1010 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg +   xmlns:dc="http://purl.org/dc/elements/1.1/" +   xmlns:cc="http://creativecommons.org/ns#" +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" +   xmlns:svg="http://www.w3.org/2000/svg" +   xmlns="http://www.w3.org/2000/svg" +   xmlns:xlink="http://www.w3.org/1999/xlink" +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" +   width="351.84259" +   height="111.86757" +   id="svg2" +   version="1.1" +   inkscape:version="0.48.3.1 r9886" +   sodipodi:docname="qemu_logo.svg"> +  <title +     id="title3182">Kew the Angry Emu</title> +  <defs +     id="defs4"> +    <linearGradient +       id="linearGradient4686"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4688" /> +      <stop +         id="stop3956" +         offset="0.75" +         style="stop-color:#000000;stop-opacity:0.87843138;" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.43921569;" +         offset="0.75" +         id="stop3958" /> +      <stop +         id="stop3960" +         offset="0.88" +         style="stop-color:#181818;stop-opacity:1;" /> +      <stop +         style="stop-color:#242424;stop-opacity:1;" +         offset="0.88" +         id="stop3962" /> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="1" +         id="stop4690" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4467"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4469" /> +      <stop +         style="stop-color:#000000;stop-opacity:0.8974359;" +         offset="1" +         id="stop4471" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4431"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4433" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4435" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4466"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4468" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4470" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4321"> +      <stop +         style="stop-color:#ff6702;stop-opacity:1;" +         offset="0" +         id="stop4323" /> +      <stop +         style="stop-color:#ff9a55;stop-opacity:1;" +         offset="1" +         id="stop4325" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4283"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4285" /> +      <stop +         style="stop-color:#000000;stop-opacity:0;" +         offset="1" +         id="stop4287" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4251"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4253" /> +      <stop +         style="stop-color:#000000;stop-opacity:0;" +         offset="1" +         id="stop4255" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4007"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop4009" /> +      <stop +         style="stop-color:#ff9148;stop-opacity:1;" +         offset="1" +         id="stop4011" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3999"> +      <stop +         style="stop-color:#fff7f2;stop-opacity:1;" +         offset="0" +         id="stop4001" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4003" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3890"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop3892" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3894" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3880"> +      <stop +         style="stop-color:#eb7400;stop-opacity:1;" +         offset="0" +         id="stop3882" /> +      <stop +         style="stop-color:#f7b06a;stop-opacity:1;" +         offset="1" +         id="stop3884" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4011"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3879"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.90598291;" +         offset="0" +         id="stop3881" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3869"> +      <stop +         style="stop-color:#c95000;stop-opacity:1;" +         offset="0" +         id="stop3871" /> +      <stop +         style="stop-color:#ff9e5e;stop-opacity:1;" +         offset="1" +         id="stop3873" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3861"> +      <stop +         style="stop-color:#f06000;stop-opacity:1;" +         offset="0" +         id="stop3863" /> +      <stop +         style="stop-color:#ffccaa;stop-opacity:1;" +         offset="1" +         id="stop3865" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3826"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop3828" /> +      <stop +         style="stop-color:#ff893b;stop-opacity:1;" +         offset="1" +         id="stop3830" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3879-6"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.90598291;" +         offset="0" +         id="stop3881-4" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-7" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3869-5"> +      <stop +         style="stop-color:#c95000;stop-opacity:1;" +         offset="0" +         id="stop3871-9" /> +      <stop +         style="stop-color:#ff9e5e;stop-opacity:1;" +         offset="1" +         id="stop3873-4" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4" +       id="linearGradient3885-6" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3869-2"> +      <stop +         style="stop-color:#c95000;stop-opacity:1;" +         offset="0" +         id="stop3871-99" /> +      <stop +         style="stop-color:#ff9e5e;stop-opacity:1;" +         offset="1" +         id="stop3873-6" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011" +       id="radialGradient4017" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.23244854,1.600893,-1.0124495,0.14700695,145.40424,-26.300303)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-7" +       id="linearGradient3885-6-2" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-7"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-5" +       id="radialGradient4017-7" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.99779178,6.8718773,-4.3459674,0.6310314,452.75975,-225.98471)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-5"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-1" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-75" +       id="linearGradient3885-6-8" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-75"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-1" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-4" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-0" +       id="radialGradient4017-5" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.23244854,1.600893,-1.0124495,0.14700695,146.34996,53.681728)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-0"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-4" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-0" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-0" +       id="linearGradient4117" +       x1="107.03001" +       y1="189.72537" +       x2="107.18476" +       y2="173.47537" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-7-2" +       id="linearGradient3885-6-2-8" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-7-2"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-5-1" +       id="radialGradient4017-7-9" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.99779178,6.8718773,-4.3459674,0.6310314,448.94742,-406.99277)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-5-1"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-7-2-7" +       id="linearGradient3885-6-2-8-0" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-7-2-7"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9-3" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9-6" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-5-1-5" +       id="radialGradient4017-7-9-5" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.55965334,3.8543806,-2.4376181,0.3539404,454.75182,-145.44353)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-5-1-5"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9-6" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8-9" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-7-2-4" +       id="linearGradient3885-6-2-8-4" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-7-2-4"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9-9" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9-3" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-5-1-7" +       id="radialGradient4017-7-9-7" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.26837158,1.8482981,-1.1689154,0.16972569,466.57614,26.180822)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-5-1-7"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9-1" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8-5" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3879-4-7-2-0"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9-7" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9-8" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4011-5-1-55"> +      <stop +         style="stop-color:#000a30;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9-8" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8-3" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3890-9"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop3892-0" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3894-9" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3880-4"> +      <stop +         style="stop-color:#eb7400;stop-opacity:1;" +         offset="0" +         id="stop3882-5" /> +      <stop +         style="stop-color:#f7b06a;stop-opacity:1;" +         offset="1" +         id="stop3884-1" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3999-7"> +      <stop +         style="stop-color:#fff7f2;stop-opacity:1;" +         offset="0" +         id="stop4001-9" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4003-4" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4007-9"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop4009-1" /> +      <stop +         style="stop-color:#ff9148;stop-opacity:1;" +         offset="1" +         id="stop4011-9" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4007-9-5"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop4009-1-9" /> +      <stop +         style="stop-color:#ff9148;stop-opacity:1;" +         offset="1" +         id="stop4011-9-5" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3999-7-1"> +      <stop +         style="stop-color:#fff7f2;stop-opacity:1;" +         offset="0" +         id="stop4001-9-1" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4003-4-4" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4007-9-5-3"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop4009-1-9-3" /> +      <stop +         style="stop-color:#ff9148;stop-opacity:1;" +         offset="1" +         id="stop4011-9-5-9" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3999-7-1-4"> +      <stop +         style="stop-color:#fff7f2;stop-opacity:1;" +         offset="0" +         id="stop4001-9-1-4" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4003-4-4-4" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3879-4-7-2-3"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9-1" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9-87" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4011-5-1-1"> +      <stop +         style="stop-color:#fde8a1;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9-63" /> +      <stop +         style="stop-color:#2947b9;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8-8" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4466" +       id="linearGradient4472" +       x1="161.7561" +       y1="540.72662" +       x2="161.7561" +       y2="579.80206" +       gradientUnits="userSpaceOnUse" /> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4321" +       id="radialGradient4474" +       cx="130.8242" +       cy="575.27838" +       fx="130.8242" +       fy="575.27838" +       r="49.498173" +       gradientTransform="matrix(0.95670828,0.96684666,-0.72623533,0.71862001,423.45109,35.05138)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4466-5" +       id="linearGradient4472-9" +       x1="161.7561" +       y1="540.72662" +       x2="161.7561" +       y2="579.80206" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4466-5"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4468-2" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4470-3" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4321-0" +       id="radialGradient4474-6" +       cx="130.8242" +       cy="575.27838" +       fx="130.8242" +       fy="575.27838" +       r="49.498173" +       gradientTransform="matrix(0.95670828,0.96684666,-0.72623533,0.71862001,442.64399,170.9169)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4321-0"> +      <stop +         style="stop-color:#ff6702;stop-opacity:1;" +         offset="0" +         id="stop4323-3" /> +      <stop +         style="stop-color:#ff9a55;stop-opacity:1;" +         offset="1" +         id="stop4325-1" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4466-5-5"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4468-2-9" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4470-3-4" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4321-0-0"> +      <stop +         style="stop-color:#ff6702;stop-opacity:1;" +         offset="0" +         id="stop4323-3-9" /> +      <stop +         style="stop-color:#ff9a55;stop-opacity:1;" +         offset="1" +         id="stop4325-1-1" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4466-5-9"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4468-2-7" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4470-3-7" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4321-0-7"> +      <stop +         style="stop-color:#ff6702;stop-opacity:1;" +         offset="0" +         id="stop4323-3-3" /> +      <stop +         style="stop-color:#ff9a55;stop-opacity:1;" +         offset="1" +         id="stop4325-1-6" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4431" +       id="linearGradient4437" +       x1="142.81854" +       y1="831.52283" +       x2="142.81854" +       y2="878.90735" +       gradientUnits="userSpaceOnUse" /> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4467" +       id="radialGradient4475" +       cx="116.51958" +       cy="98.282051" +       fx="116.51958" +       fy="98.282051" +       r="55.859375" +       gradientTransform="matrix(0.97442557,1.5088911,-0.83559154,0.53961599,79.641615,-130.28522)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4431-3" +       id="linearGradient4437-6" +       x1="142.81854" +       y1="831.52283" +       x2="142.81854" +       y2="878.90735" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4431-3"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4433-0" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4435-2" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4467-7" +       id="radialGradient4475-0" +       cx="116.51958" +       cy="98.282051" +       fx="116.51958" +       fy="98.282051" +       r="55.859375" +       gradientTransform="matrix(0.97442557,1.5088911,-0.83559154,0.53961599,225.10358,63.664066)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4467-7"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4469-4" /> +      <stop +         style="stop-color:#000000;stop-opacity:0.8974359;" +         offset="1" +         id="stop4471-7" /> +    </linearGradient> +  </defs> +  <sodipodi:namedview +     id="base" +     pagecolor="#ffffff" +     bordercolor="#666666" +     borderopacity="1.0" +     inkscape:pageopacity="0.0" +     inkscape:pageshadow="2" +     inkscape:zoom="1.0170184" +     inkscape:cx="539.34448" +     inkscape:cy="-81.088823" +     inkscape:document-units="px" +     inkscape:current-layer="layer1" +     showgrid="false" +     showguides="false" +     inkscape:guide-bbox="true" +     inkscape:window-width="992" +     inkscape:window-height="547" +     inkscape:window-x="30" +     inkscape:window-y="24" +     inkscape:window-maximized="0" +     fit-margin-top="0" +     fit-margin-left="0" +     fit-margin-right="0" +     fit-margin-bottom="0"> +    <sodipodi:guide +       orientation="0,1" +       position="52.563745,58.089579" +       id="guide2989" /> +    <sodipodi:guide +       orientation="0,1" +       position="54.584055,28.037549" +       id="guide2991" /> +    <sodipodi:guide +       orientation="1,0" +       position="51.048515,41.169529" +       id="guide2993" /> +    <sodipodi:guide +       orientation="1,0" +       position="77.817565,40.916989" +       id="guide2995" /> +    <sodipodi:guide +       orientation="1,0" +       position="51.048515,41.169529" +       id="guide3017" /> +    <inkscape:grid +       type="xygrid" +       id="grid3019" +       empspacing="5" +       visible="true" +       enabled="true" +       snapvisiblegridlinesonly="true" +       originx="-62.341105px" +       originy="-884.63528px" /> +    <sodipodi:guide +       orientation="1,0" +       position="85.658895,8.3647193" +       id="guide3021" /> +    <sodipodi:guide +       orientation="1,0" +       position="106.6589,4.3647193" +       id="guide3023" /> +    <sodipodi:guide +       orientation="0,1" +       position="90.658895,17.364719" +       id="guide3025" /> +    <sodipodi:guide +       orientation="0,1" +       position="90.658895,-6.6352807" +       id="guide3027" /> +    <sodipodi:guide +       orientation="0,1" +       position="-0.341105,-14.635281" +       id="guide3810" /> +    <sodipodi:guide +       orientation="0,1" +       position="1.658895,-49.635281" +       id="guide3814" /> +    <sodipodi:guide +       orientation="0,1" +       position="-17.698248,11.257579" +       id="guide3856" /> +    <sodipodi:guide +       orientation="0,1" +       position="6.601806,11.257579" +       id="guide3887" /> +    <sodipodi:guide +       orientation="0,1" +       position="24.658283,58.089579" +       id="guide4019" /> +    <sodipodi:guide +       orientation="0,1" +       position="106.6589,-6.6352807" +       id="guide4481" /> +    <sodipodi:guide +       orientation="0,1" +       position="139.08747,-193.20671" +       id="guide4483" /> +  </sodipodi:namedview> +  <metadata +     id="metadata7"> +    <rdf:RDF> +      <cc:Work +         rdf:about=""> +        <dc:format>image/svg+xml</dc:format> +        <dc:type +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> +        <dc:title>Kew the Angry Emu</dc:title> +        <dc:creator> +          <cc:Agent> +            <dc:title>Benoît Canet</dc:title> +          </cc:Agent> +        </dc:creator> +        <dc:rights> +          <cc:Agent> +            <dc:title>CC BY 3.0</dc:title> +          </cc:Agent> +        </dc:rights> +        <dc:publisher> +          <cc:Agent> +            <dc:title>QEMU Community</dc:title> +          </cc:Agent> +        </dc:publisher> +        <dc:date>2012-02-15</dc:date> +        <cc:license +           rdf:resource="http://creativecommons.org/licenses/by/3.0/" /> +        <dc:subject> +          <rdf:Bag> +            <rdf:li>QEMU logo</rdf:li> +            <rdf:li>QEMU mascot</rdf:li> +          </rdf:Bag> +        </dc:subject> +        <dc:source>http://lists.gnu.org/archive/html/qemu-devel/2012-02/msg01961.html</dc:source> +      </cc:Work> +      <cc:License +         rdf:about="http://creativecommons.org/licenses/by/3.0/"> +        <cc:permits +           rdf:resource="http://creativecommons.org/ns#Reproduction" /> +        <cc:permits +           rdf:resource="http://creativecommons.org/ns#Distribution" /> +        <cc:requires +           rdf:resource="http://creativecommons.org/ns#Notice" /> +        <cc:requires +           rdf:resource="http://creativecommons.org/ns#Attribution" /> +        <cc:permits +           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> +      </cc:License> +    </rdf:RDF> +  </metadata> +  <g +     inkscape:label="Layer 1" +     inkscape:groupmode="layer" +     id="layer1" +     transform="translate(-62.341105,-55.859333)"> +    <path +       inkscape:connector-curvature="0" +       style="fill:url(#radialGradient4475);fill-opacity:1;stroke:none" +       d="m 118.2161,55.859333 c -30.850815,0 -55.874995,24.87043 -55.874995,55.562497 0,30.69207 25.02418,55.56249 55.874995,55.56249 10.09496,0 19.54625,-2.6525 27.71875,-7.3125 l 2.90625,7.3125 2.40625,0 20,0 0.125,0 -8.8125,-21.78124 c 7.21537,-9.3622 11.5,-21.07236 11.5,-33.78125 0,-30.692067 -24.99293,-55.562497 -55.84375,-55.562497 z" +       id="path3834-7-7-2-5-5-0-5-4" /> +    <path +       sodipodi:type="arc" +       style="fill:url(#linearGradient4437);fill-opacity:1;stroke:none" +       id="path3661" +       sodipodi:cx="142.5" +       sodipodi:cy="856.29077" +       sodipodi:rx="35.357143" +       sodipodi:ry="24.642857" +       d="m 177.85714,856.29077 c 0,13.60988 -15.82993,24.64286 -35.35714,24.64286 -19.52721,0 -35.35714,-11.03298 -35.35714,-24.64286 0,-13.60987 15.82993,-24.64286 35.35714,-24.64286 19.52721,0 35.35714,11.03299 35.35714,24.64286 z" +       transform="matrix(1.0465082,0,0,1.2920463,-31.641235,-1016.8612)" /> +    <path +       sodipodi:type="arc" +       style="fill:#000000;fill-opacity:1;stroke:none" +       id="path4442" +       sodipodi:cx="115.66247" +       sodipodi:cy="856.39258" +       sodipodi:rx="6.5659914" +       sodipodi:ry="6.5659914" +       d="m 122.22846,856.39258 c 0,3.6263 -2.9397,6.56599 -6.56599,6.56599 -3.6263,0 -6.56599,-2.93969 -6.56599,-6.56599 0,-3.6263 2.93969,-6.56599 6.56599,-6.56599 3.62629,0 6.56599,2.93969 6.56599,6.56599 z" +       transform="translate(7.6700247,-777.60351)" /> +    <rect +       style="fill:#000000;fill-opacity:1;stroke:none" +       id="rect4444" +       width="37.643608" +       height="5.5005069" +       x="125.01157" +       y="65.255234" +       transform="matrix(0.98974903,0.14281759,-0.18972639,0.981837,0,0)" /> +    <rect +       style="fill:#000000;fill-opacity:1;stroke:none" +       id="rect4446" +       width="6.5659914" +       height="2.9041886" +       x="144.92451" +       y="89.016899" /> +    <path +       style="fill:#ff6600;fill-opacity:1" +       d="m 103.38797,65.010543 c -0.057,2.18531 -3.865755,0.28296 -4.031245,2.78125 -4.22387,-1.88052 0.32884,2.87188 -0.0937,3.3125 l -0.0312,0 -0.3125,-0.0312 c -0.20386,-0.0728 -0.49977,-0.19904 -0.9375,-0.46875 -2.9499,2.35025 -3.02157,7.23369 -6.0625,9.9375 -1.99467,4.30504 -2.47977,8.98337 -3.9375,13.46875 -0.71796,4.30292 -1.34881,8.597857 -0.28125,12.906247 0.32053,3.50159 -0.68919,8.25865 2.5,10.71875 4.72728,3.88304 8.65575,8.79543 12.624995,13.46875 6.21914,7.65333 11.72948,15.86251 16.59375,24.4375 0.32431,-2.11756 1.10954,4.26459 2.53125,4.6875 -0.49161,-3.19231 -1.13213,-8.26328 -1.4375,-12.1875 -1.5814,-10.2909 -6.65305,-19.64903 -8.5625,-29.84375 -0.0587,-0.43037 -0.12809,-0.87203 -0.1875,-1.3125 l 0,-1.28125 -0.15625,0 c -0.62551,-5.04297 -0.8504,-10.46546 2.8125,-14.40625 3.73968,-3.772097 9.30633,-4.722447 13.8125,-7.343747 1.00194,-0.59119 2.04921,-1.07174 3.125,-1.40625 0.009,-0.003 0.0228,0.003 0.0312,0 3.11701,-0.96341 6.44862,-0.93323 9.6875,-0.40625 0.0479,0.008 0.10841,0.0233 0.15625,0.0312 0.29455,0.0493 0.61389,0.099 0.90625,0.15625 2.37136,0.21133 7.14463,1.13687 8,-0.5 -3.27225,-2.78631 -7.98526,-2.59211 -11.96875,-3.6875 -0.63059,-0.11469 -1.41182,-0.24041 -2.1875,-0.3125 l -3.90625,-0.875 -0.96875,-0.25 0,0.0312 -13.96875,-2.71875 c -0.22212,-0.20226 -0.46434,-0.40933 -0.6875,-0.5625 l 13.625,1.6875 0,-0.0625 c 0.48011,0.10699 0.95576,0.19361 1.4375,0.25 l 0,0.0312 9.625,1.78125 c 1.66103,0.61952 3.4322,1.08374 5.09375,1.1875 2.74263,0.39907 6.22526,4.49092 7.125,4.6875 -0.44096,-4.307 -4.7422,-6.23586 -8.3125,-7.5 -4.1712,-2.02803 -10.4023,-1.95417 -11.0625,-7.5625 -0.1756,-0.39076 -0.34902,-0.78118 -0.5625,-1.15625 l -1.625,-2.15625 0.0625,-0.0312 c -2.21724,-2.61691 -5.34011,-4.52196 -8.65625,-5.25 -3.2914,-1.13611 -6.98773,-2.2671 -10.46875,-2.71875 -1.18132,3.47826 -2.5031,-2.75561 -5.34375,-0.90625 -2.48996,0.29488 -2.14614,0.95256 -4,-0.625 z m 17.90625,10.15625 c 0.90187,-0.0238 1.93277,0.14208 2.96875,0.5 2.76259,0.95447 4.56151,2.96523 4.03125,4.5 -0.53026,1.53477 -3.20616,1.98572 -5.96875,1.03125 -2.76259,-0.95447 -4.5615,-2.93398 -4.03125,-4.46875 0.33141,-0.95923 1.49689,-1.52281 3,-1.5625 z" +       id="path3499-9-7" +       inkscape:connector-curvature="0" /> +    <text +       xml:space="preserve" +       style="font-size:95.54121399px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold" +       x="184.89412" +       y="166.37402" +       id="text4477" +       sodipodi:linespacing="125%"><tspan +         sodipodi:role="line" +         id="tspan4479" +         x="184.89412" +         y="166.37402" +         style="fill:#000000;fill-opacity:1">EMU</tspan></text> +  </g> +</svg> diff --git a/pc-bios/qemu_logo_no_text.svg b/pc-bios/qemu_logo_no_text.svg new file mode 100644 index 00000000..24ca23a1 --- /dev/null +++ b/pc-bios/qemu_logo_no_text.svg @@ -0,0 +1,976 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg +   xmlns:dc="http://purl.org/dc/elements/1.1/" +   xmlns:cc="http://creativecommons.org/ns#" +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" +   xmlns:svg="http://www.w3.org/2000/svg" +   xmlns="http://www.w3.org/2000/svg" +   xmlns:xlink="http://www.w3.org/1999/xlink" +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" +   width="111.71874" +   height="111.12498" +   id="svg2" +   version="1.1" +   inkscape:version="0.48.2 r9819" +   sodipodi:docname="qemu_logo_no_text.svg"> +  <defs +     id="defs4"> +    <linearGradient +       id="linearGradient4686"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4688" /> +      <stop +         id="stop3956" +         offset="0.75" +         style="stop-color:#000000;stop-opacity:0.87843138;" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.43921569;" +         offset="0.75" +         id="stop3958" /> +      <stop +         id="stop3960" +         offset="0.88" +         style="stop-color:#181818;stop-opacity:1;" /> +      <stop +         style="stop-color:#242424;stop-opacity:1;" +         offset="0.88" +         id="stop3962" /> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="1" +         id="stop4690" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4467"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4469" /> +      <stop +         style="stop-color:#000000;stop-opacity:0.8974359;" +         offset="1" +         id="stop4471" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4431"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4433" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4435" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4466"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4468" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4470" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4321"> +      <stop +         style="stop-color:#ff6702;stop-opacity:1;" +         offset="0" +         id="stop4323" /> +      <stop +         style="stop-color:#ff9a55;stop-opacity:1;" +         offset="1" +         id="stop4325" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4283"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4285" /> +      <stop +         style="stop-color:#000000;stop-opacity:0;" +         offset="1" +         id="stop4287" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4251"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4253" /> +      <stop +         style="stop-color:#000000;stop-opacity:0;" +         offset="1" +         id="stop4255" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4007"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop4009" /> +      <stop +         style="stop-color:#ff9148;stop-opacity:1;" +         offset="1" +         id="stop4011" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3999"> +      <stop +         style="stop-color:#fff7f2;stop-opacity:1;" +         offset="0" +         id="stop4001" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4003" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3890"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop3892" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3894" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3880"> +      <stop +         style="stop-color:#eb7400;stop-opacity:1;" +         offset="0" +         id="stop3882" /> +      <stop +         style="stop-color:#f7b06a;stop-opacity:1;" +         offset="1" +         id="stop3884" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4011"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3879"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.90598291;" +         offset="0" +         id="stop3881" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3869"> +      <stop +         style="stop-color:#c95000;stop-opacity:1;" +         offset="0" +         id="stop3871" /> +      <stop +         style="stop-color:#ff9e5e;stop-opacity:1;" +         offset="1" +         id="stop3873" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3861"> +      <stop +         style="stop-color:#f06000;stop-opacity:1;" +         offset="0" +         id="stop3863" /> +      <stop +         style="stop-color:#ffccaa;stop-opacity:1;" +         offset="1" +         id="stop3865" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3826"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop3828" /> +      <stop +         style="stop-color:#ff893b;stop-opacity:1;" +         offset="1" +         id="stop3830" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3879-6"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.90598291;" +         offset="0" +         id="stop3881-4" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-7" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3869-5"> +      <stop +         style="stop-color:#c95000;stop-opacity:1;" +         offset="0" +         id="stop3871-9" /> +      <stop +         style="stop-color:#ff9e5e;stop-opacity:1;" +         offset="1" +         id="stop3873-4" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4" +       id="linearGradient3885-6" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3869-2"> +      <stop +         style="stop-color:#c95000;stop-opacity:1;" +         offset="0" +         id="stop3871-99" /> +      <stop +         style="stop-color:#ff9e5e;stop-opacity:1;" +         offset="1" +         id="stop3873-6" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011" +       id="radialGradient4017" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.23244854,1.600893,-1.0124495,0.14700695,145.40424,-26.300303)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-7" +       id="linearGradient3885-6-2" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-7"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-5" +       id="radialGradient4017-7" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.99779178,6.8718773,-4.3459674,0.6310314,452.75975,-225.98471)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-5"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-1" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-75" +       id="linearGradient3885-6-8" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-75"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-1" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-4" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-0" +       id="radialGradient4017-5" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.23244854,1.600893,-1.0124495,0.14700695,146.34996,53.681728)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-0"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-4" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-0" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-0" +       id="linearGradient4117" +       x1="107.03001" +       y1="189.72537" +       x2="107.18476" +       y2="173.47537" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-7-2" +       id="linearGradient3885-6-2-8" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-7-2"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-5-1" +       id="radialGradient4017-7-9" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.99779178,6.8718773,-4.3459674,0.6310314,448.94742,-406.99277)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-5-1"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-7-2-7" +       id="linearGradient3885-6-2-8-0" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-7-2-7"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9-3" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9-6" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-5-1-5" +       id="radialGradient4017-7-9-5" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.55965334,3.8543806,-2.4376181,0.3539404,454.75182,-145.44353)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-5-1-5"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9-6" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8-9" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient3879-4-7-2-4" +       id="linearGradient3885-6-2-8-4" +       x1="76.025352" +       y1="124.8497" +       x2="75.874107" +       y2="143.03978" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient3879-4-7-2-4"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9-9" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9-3" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4011-5-1-7" +       id="radialGradient4017-7-9-7" +       cx="66.639" +       cy="93.096375" +       fx="66.639" +       fy="93.096375" +       r="11.515625" +       gradientTransform="matrix(0.26837158,1.8482981,-1.1689154,0.16972569,466.57614,26.180822)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4011-5-1-7"> +      <stop +         style="stop-color:#042dc8;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9-1" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8-5" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3879-4-7-2-0"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9-7" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9-8" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4011-5-1-55"> +      <stop +         style="stop-color:#000a30;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9-8" /> +      <stop +         style="stop-color:#4260d5;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8-3" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3890-9"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop3892-0" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3894-9" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3880-4"> +      <stop +         style="stop-color:#eb7400;stop-opacity:1;" +         offset="0" +         id="stop3882-5" /> +      <stop +         style="stop-color:#f7b06a;stop-opacity:1;" +         offset="1" +         id="stop3884-1" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3999-7"> +      <stop +         style="stop-color:#fff7f2;stop-opacity:1;" +         offset="0" +         id="stop4001-9" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4003-4" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4007-9"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop4009-1" /> +      <stop +         style="stop-color:#ff9148;stop-opacity:1;" +         offset="1" +         id="stop4011-9" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4007-9-5"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop4009-1-9" /> +      <stop +         style="stop-color:#ff9148;stop-opacity:1;" +         offset="1" +         id="stop4011-9-5" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3999-7-1"> +      <stop +         style="stop-color:#fff7f2;stop-opacity:1;" +         offset="0" +         id="stop4001-9-1" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4003-4-4" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4007-9-5-3"> +      <stop +         style="stop-color:#ff6600;stop-opacity:1;" +         offset="0" +         id="stop4009-1-9-3" /> +      <stop +         style="stop-color:#ff9148;stop-opacity:1;" +         offset="1" +         id="stop4011-9-5-9" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3999-7-1-4"> +      <stop +         style="stop-color:#fff7f2;stop-opacity:1;" +         offset="0" +         id="stop4001-9-1-4" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4003-4-4-4" /> +    </linearGradient> +    <linearGradient +       id="linearGradient3879-4-7-2-3"> +      <stop +         style="stop-color:#ffffff;stop-opacity:0.93162394;" +         offset="0" +         id="stop3881-6-7-9-1" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop3883-74-6-9-87" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4011-5-1-1"> +      <stop +         style="stop-color:#fde8a1;stop-opacity:1;" +         offset="0" +         id="stop4013-1-9-63" /> +      <stop +         style="stop-color:#2947b9;stop-opacity:1;" +         offset="1" +         id="stop4015-3-8-8" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4466" +       id="linearGradient4472" +       x1="161.7561" +       y1="540.72662" +       x2="161.7561" +       y2="579.80206" +       gradientUnits="userSpaceOnUse" /> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4321" +       id="radialGradient4474" +       cx="130.8242" +       cy="575.27838" +       fx="130.8242" +       fy="575.27838" +       r="49.498173" +       gradientTransform="matrix(0.95670828,0.96684666,-0.72623533,0.71862001,423.45109,35.05138)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4466-5" +       id="linearGradient4472-9" +       x1="161.7561" +       y1="540.72662" +       x2="161.7561" +       y2="579.80206" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4466-5"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4468-2" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4470-3" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4321-0" +       id="radialGradient4474-6" +       cx="130.8242" +       cy="575.27838" +       fx="130.8242" +       fy="575.27838" +       r="49.498173" +       gradientTransform="matrix(0.95670828,0.96684666,-0.72623533,0.71862001,442.64399,170.9169)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4321-0"> +      <stop +         style="stop-color:#ff6702;stop-opacity:1;" +         offset="0" +         id="stop4323-3" /> +      <stop +         style="stop-color:#ff9a55;stop-opacity:1;" +         offset="1" +         id="stop4325-1" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4466-5-5"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4468-2-9" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4470-3-4" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4321-0-0"> +      <stop +         style="stop-color:#ff6702;stop-opacity:1;" +         offset="0" +         id="stop4323-3-9" /> +      <stop +         style="stop-color:#ff9a55;stop-opacity:1;" +         offset="1" +         id="stop4325-1-1" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4466-5-9"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4468-2-7" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4470-3-7" /> +    </linearGradient> +    <linearGradient +       id="linearGradient4321-0-7"> +      <stop +         style="stop-color:#ff6702;stop-opacity:1;" +         offset="0" +         id="stop4323-3-3" /> +      <stop +         style="stop-color:#ff9a55;stop-opacity:1;" +         offset="1" +         id="stop4325-1-6" /> +    </linearGradient> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4431" +       id="linearGradient4437" +       x1="142.81854" +       y1="831.52283" +       x2="142.81854" +       y2="878.90735" +       gradientUnits="userSpaceOnUse" /> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4467" +       id="radialGradient4475" +       cx="116.51958" +       cy="98.282051" +       fx="116.51958" +       fy="98.282051" +       r="55.859375" +       gradientTransform="matrix(0.97442557,1.5088911,-0.83559154,0.53961599,79.641615,-130.28522)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4431-3" +       id="linearGradient4437-6" +       x1="142.81854" +       y1="831.52283" +       x2="142.81854" +       y2="878.90735" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4431-3"> +      <stop +         style="stop-color:#ffffff;stop-opacity:1;" +         offset="0" +         id="stop4433-0" /> +      <stop +         style="stop-color:#ffffff;stop-opacity:0;" +         offset="1" +         id="stop4435-2" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4467-7" +       id="radialGradient4475-0" +       cx="116.51958" +       cy="98.282051" +       fx="116.51958" +       fy="98.282051" +       r="55.859375" +       gradientTransform="matrix(0.97442557,1.5088911,-0.83559154,0.53961599,225.10358,63.664066)" +       gradientUnits="userSpaceOnUse" /> +    <linearGradient +       id="linearGradient4467-7"> +      <stop +         style="stop-color:#000000;stop-opacity:1;" +         offset="0" +         id="stop4469-4" /> +      <stop +         style="stop-color:#000000;stop-opacity:0.8974359;" +         offset="1" +         id="stop4471-7" /> +    </linearGradient> +    <radialGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4467" +       id="radialGradient3262" +       gradientUnits="userSpaceOnUse" +       gradientTransform="matrix(0.97442557,1.5088911,-0.83559154,0.53961599,59.641615,-150.28522)" +       cx="116.51958" +       cy="98.282051" +       fx="116.51958" +       fy="98.282051" +       r="55.859375" /> +    <linearGradient +       inkscape:collect="always" +       xlink:href="#linearGradient4431" +       id="linearGradient3264" +       gradientUnits="userSpaceOnUse" +       x1="142.81854" +       y1="831.52283" +       x2="142.81854" +       y2="878.90735" /> +  </defs> +  <sodipodi:namedview +     id="base" +     pagecolor="#ffffff" +     bordercolor="#666666" +     borderopacity="1.0" +     inkscape:pageopacity="0.0" +     inkscape:pageshadow="2" +     inkscape:zoom="5.6" +     inkscape:cx="31.144191" +     inkscape:cy="38.335716" +     inkscape:document-units="px" +     inkscape:current-layer="layer1" +     showgrid="false" +     showguides="false" +     inkscape:guide-bbox="true" +     inkscape:window-width="1920" +     inkscape:window-height="1056" +     inkscape:window-x="0" +     inkscape:window-y="0" +     inkscape:window-maximized="1" +     fit-margin-top="0" +     fit-margin-right="0" +     fit-margin-bottom="0" +     fit-margin-left="0"> +    <sodipodi:guide +       orientation="0,1" +       position="72.563745,37.346999" +       id="guide2989" /> +    <sodipodi:guide +       orientation="0,1" +       position="74.584055,7.2949693" +       id="guide2991" /> +    <sodipodi:guide +       orientation="1,0" +       position="71.048515,20.426949" +       id="guide2993" /> +    <sodipodi:guide +       orientation="1,0" +       position="97.817565,20.174409" +       id="guide2995" /> +    <sodipodi:guide +       orientation="1,0" +       position="71.048515,20.426949" +       id="guide3017" /> +    <inkscape:grid +       type="xygrid" +       id="grid3019" +       empspacing="5" +       visible="true" +       enabled="true" +       snapvisiblegridlinesonly="true" /> +    <sodipodi:guide +       orientation="1,0" +       position="105.6589,-12.377861" +       id="guide3021" /> +    <sodipodi:guide +       orientation="1,0" +       position="126.6589,-16.377861" +       id="guide3023" /> +    <sodipodi:guide +       orientation="0,1" +       position="110.6589,-3.3778607" +       id="guide3025" /> +    <sodipodi:guide +       orientation="0,1" +       position="110.6589,-27.377861" +       id="guide3027" /> +    <sodipodi:guide +       orientation="0,1" +       position="19.658895,-35.37786" +       id="guide3810" /> +    <sodipodi:guide +       orientation="0,1" +       position="21.658895,-70.377861" +       id="guide3814" /> +    <sodipodi:guide +       orientation="0,1" +       position="2.301752,-9.4850007" +       id="guide3856" /> +    <sodipodi:guide +       orientation="0,1" +       position="26.601806,-9.4850007" +       id="guide3887" /> +    <sodipodi:guide +       orientation="0,1" +       position="44.658283,37.346999" +       id="guide4019" /> +    <sodipodi:guide +       orientation="0,1" +       position="126.6589,-27.377861" +       id="guide4481" /> +    <sodipodi:guide +       orientation="0,1" +       position="159.08747,-213.94929" +       id="guide4483" /> +  </sodipodi:namedview> +  <metadata +     id="metadata7"> +    <rdf:RDF> +      <cc:Work +         rdf:about=""> +        <dc:format>image/svg+xml</dc:format> +        <dc:type +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> +        <dc:title /> +      </cc:Work> +    </rdf:RDF> +  </metadata> +  <g +     inkscape:label="Layer 1" +     inkscape:groupmode="layer" +     id="layer1" +     transform="translate(-42.341105,-35.859333)"> +    <path +       inkscape:connector-curvature="0" +       style="fill:url(#radialGradient3262);fill-opacity:1;stroke:none" +       d="m 98.2161,35.859333 c -30.850815,0 -55.874995,24.87043 -55.874995,55.562497 0,30.69207 25.02418,55.56249 55.874995,55.56249 10.09496,0 19.54625,-2.6525 27.71875,-7.3125 l 2.90625,7.3125 2.40625,0 20,0 0.125,0 -8.8125,-21.78124 c 7.21537,-9.3622 11.5,-21.07236 11.5,-33.78125 0,-30.692067 -24.99293,-55.562497 -55.84375,-55.562497 z" +       id="path3834-7-7-2-5-5-0-5-4" /> +    <path +       sodipodi:type="arc" +       style="fill:url(#linearGradient3264);fill-opacity:1;stroke:none" +       id="path3661" +       sodipodi:cx="142.5" +       sodipodi:cy="856.29077" +       sodipodi:rx="35.357143" +       sodipodi:ry="24.642857" +       d="m 177.85714,856.29077 c 0,13.60988 -15.82993,24.64286 -35.35714,24.64286 -19.52721,0 -35.35714,-11.03298 -35.35714,-24.64286 0,-13.60987 15.82993,-24.64286 35.35714,-24.64286 19.52721,0 35.35714,11.03299 35.35714,24.64286 z" +       transform="matrix(1.0465082,0,0,1.2920463,-51.641235,-1036.8612)" /> +    <path +       sodipodi:type="arc" +       style="fill:#000000;fill-opacity:1;stroke:none" +       id="path4442" +       sodipodi:cx="115.66247" +       sodipodi:cy="856.39258" +       sodipodi:rx="6.5659914" +       sodipodi:ry="6.5659914" +       d="m 122.22846,856.39258 c 0,3.6263 -2.9397,6.56599 -6.56599,6.56599 -3.6263,0 -6.56599,-2.93969 -6.56599,-6.56599 0,-3.6263 2.93969,-6.56599 6.56599,-6.56599 3.62629,0 6.56599,2.93969 6.56599,6.56599 z" +       transform="translate(-12.329975,-797.60351)" /> +    <rect +       style="fill:#000000;fill-opacity:1;stroke:none" +       id="rect4444" +       width="37.643608" +       height="5.5005069" +       x="101.55376" +       y="48.297417" +       transform="matrix(0.98974903,0.14281759,-0.18972639,0.981837,0,0)" /> +    <rect +       style="fill:#000000;fill-opacity:1;stroke:none" +       id="rect4446" +       width="6.5659914" +       height="2.9041886" +       x="124.92451" +       y="69.016899" /> +    <path +       style="fill:#ff6600;fill-opacity:1" +       d="m 83.38797,45.010543 c -0.057,2.18531 -3.865755,0.28296 -4.031245,2.78125 -4.22387,-1.88052 0.32884,2.87188 -0.0937,3.3125 l -0.0312,0 -0.3125,-0.0312 c -0.20386,-0.0728 -0.49977,-0.19904 -0.9375,-0.46875 -2.9499,2.35025 -3.02157,7.23369 -6.0625,9.9375 -1.99467,4.30504 -2.47977,8.98337 -3.9375,13.46875 -0.71796,4.30292 -1.34881,8.597857 -0.28125,12.906247 0.32053,3.50159 -0.68919,8.25865 2.5,10.71875 4.72728,3.88304 8.65575,8.79543 12.624995,13.46875 6.21914,7.65333 11.72948,15.86251 16.59375,24.4375 0.32431,-2.11756 1.10954,4.26459 2.53125,4.6875 -0.49161,-3.19231 -1.13213,-8.26328 -1.4375,-12.1875 -1.5814,-10.2909 -6.65305,-19.64903 -8.5625,-29.84375 -0.0587,-0.43037 -0.12809,-0.87203 -0.1875,-1.3125 l 0,-1.28125 -0.15625,0 c -0.62551,-5.04297 -0.8504,-10.46546 2.8125,-14.40625 3.73968,-3.772097 9.30633,-4.722447 13.8125,-7.343747 1.00194,-0.59119 2.04921,-1.07174 3.125,-1.40625 0.009,-0.003 0.0228,0.003 0.0312,0 3.11701,-0.96341 6.44862,-0.93323 9.6875,-0.40625 0.0479,0.008 0.10841,0.0233 0.15625,0.0312 0.29455,0.0493 0.61389,0.099 0.90625,0.15625 2.37136,0.21133 7.14463,1.13687 8,-0.5 -3.27225,-2.78631 -7.98526,-2.59211 -11.96875,-3.6875 -0.63059,-0.11469 -1.41182,-0.24041 -2.1875,-0.3125 l -3.90625,-0.875 -0.96875,-0.25 0,0.0312 -13.96875,-2.71875 c -0.22212,-0.20226 -0.46434,-0.40933 -0.6875,-0.5625 l 13.625,1.6875 0,-0.0625 c 0.48011,0.10699 0.95576,0.19361 1.4375,0.25 l 0,0.0312 9.625,1.78125 c 1.66103,0.61952 3.4322,1.08374 5.09375,1.1875 2.74263,0.39907 6.22526,4.49092 7.125,4.6875 -0.44096,-4.307 -4.7422,-6.23586 -8.3125,-7.5 -4.1712,-2.02803 -10.4023,-1.95417 -11.0625,-7.5625 -0.1756,-0.39076 -0.34902,-0.78118 -0.5625,-1.15625 l -1.625,-2.15625 0.0625,-0.0312 c -2.21724,-2.61691 -5.34011,-4.52196 -8.65625,-5.25 -3.2914,-1.13611 -6.98773,-2.2671 -10.46875,-2.71875 -1.18132,3.47826 -2.5031,-2.75561 -5.34375,-0.90625 -2.48996,0.29488 -2.14614,0.95256 -4,-0.625 z m 17.90625,10.15625 c 0.90187,-0.0238 1.93277,0.14208 2.96875,0.5 2.76259,0.95447 4.56151,2.96523 4.03125,4.5 -0.53026,1.53477 -3.20616,1.98572 -5.96875,1.03125 -2.76259,-0.95447 -4.5615,-2.93398 -4.03125,-4.46875 0.33141,-0.95923 1.49689,-1.52281 3,-1.5625 z" +       id="path3499-9-7" +       inkscape:connector-curvature="0" /> +  </g> +</svg> diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img Binary files differnew file mode 100644 index 00000000..f64380a9 --- /dev/null +++ b/pc-bios/s390-ccw.img diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile new file mode 100644 index 00000000..746603a3 --- /dev/null +++ b/pc-bios/s390-ccw/Makefile @@ -0,0 +1,27 @@ +all: build-all +# Dummy command so that make thinks it has done something +	@true + +include ../../config-host.mak +include $(SRC_PATH)/rules.mak + +$(call set-vpath, $(SRC_PATH)/pc-bios/s390-ccw) + +.PHONY : all clean build-all + +OBJECTS = start.o main.o bootmap.o sclp-ascii.o virtio.o +CFLAGS += -fPIE -fno-stack-protector -ffreestanding -fno-delete-null-pointer-checks +LDFLAGS += -Wl,-pie -nostdlib + +build-all: s390-ccw.img + +s390-ccw.elf: $(OBJECTS) +	$(call quiet-command,$(CC) $(LDFLAGS) -o $@ $(OBJECTS),"  Building $(TARGET_DIR)$@") + +s390-ccw.img: s390-ccw.elf +	$(call quiet-command,strip --strip-unneeded $< -o $@,"  Stripping $(TARGET_DIR)$@") + +$(OBJECTS): Makefile + +clean: +	rm -f *.o *.d *.img *.elf *~ diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c new file mode 100644 index 00000000..b678d5eb --- /dev/null +++ b/pc-bios/s390-ccw/bootmap.c @@ -0,0 +1,495 @@ +/* + * QEMU S390 bootmap interpreter + * + * Copyright (c) 2009 Alexander Graf <agraf@suse.de> + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#include "s390-ccw.h" +#include "bootmap.h" +#include "virtio.h" + +#ifdef DEBUG +/* #define DEBUG_FALLBACK */ +#endif + +#ifdef DEBUG_FALLBACK +#define dputs(txt) \ +    do { sclp_print("zipl: " txt); } while (0) +#else +#define dputs(fmt, ...) \ +    do { } while (0) +#endif + +/* Scratch space */ +static uint8_t sec[MAX_SECTOR_SIZE*4] __attribute__((__aligned__(PAGE_SIZE))); + +typedef struct ResetInfo { +    uint32_t ipl_mask; +    uint32_t ipl_addr; +    uint32_t ipl_continue; +} ResetInfo; + +static ResetInfo save; + +static void jump_to_IPL_2(void) +{ +    ResetInfo *current = 0; + +    void (*ipl)(void) = (void *) (uint64_t) current->ipl_continue; +    *current = save; +    ipl(); /* should not return */ +} + +static void jump_to_IPL_code(uint64_t address) +{ +    /* store the subsystem information _after_ the bootmap was loaded */ +    write_subsystem_identification(); +    /* +     * The IPL PSW is at address 0. We also must not overwrite the +     * content of non-BIOS memory after we loaded the guest, so we +     * save the original content and restore it in jump_to_IPL_2. +     */ +    ResetInfo *current = 0; + +    save = *current; +    current->ipl_addr = (uint32_t) (uint64_t) &jump_to_IPL_2; +    current->ipl_continue = address & 0x7fffffff; + +    debug_print_int("set IPL addr to", current->ipl_continue); + +    /* Ensure the guest output starts fresh */ +    sclp_print("\n"); + +    /* +     * HACK ALERT. +     * We use the load normal reset to keep r15 unchanged. jump_to_IPL_2 +     * can then use r15 as its stack pointer. +     */ +    asm volatile("lghi 1,1\n\t" +                 "diag 1,1,0x308\n\t" +                 : : : "1", "memory"); +    virtio_panic("\n! IPL returns !\n"); +} + +/*********************************************************************** + * IPL an ECKD DASD (CDL or LDL/CMS format) + */ + +static unsigned char _bprs[8*1024]; /* guessed "max" ECKD sector size */ +static const int max_bprs_entries = sizeof(_bprs) / sizeof(ExtEckdBlockPtr); + +static inline void verify_boot_info(BootInfo *bip) +{ +    IPL_assert(magic_match(bip->magic, ZIPL_MAGIC), "No zIPL magic"); +    IPL_assert(bip->version == BOOT_INFO_VERSION, "Wrong zIPL version"); +    IPL_assert(bip->bp_type == BOOT_INFO_BP_TYPE_IPL, "DASD is not for IPL"); +    IPL_assert(bip->dev_type == BOOT_INFO_DEV_TYPE_ECKD, "DASD is not ECKD"); +    IPL_assert(bip->flags == BOOT_INFO_FLAGS_ARCH, "Not for this arch"); +    IPL_assert(block_size_ok(bip->bp.ipl.bm_ptr.eckd.bptr.size), +               "Bad block size in zIPL section of the 1st record."); +} + +static block_number_t eckd_block_num(BootMapPointer *p) +{ +    const uint64_t sectors = virtio_get_sectors(); +    const uint64_t heads = virtio_get_heads(); +    const uint64_t cylinder = p->eckd.cylinder +                            + ((p->eckd.head & 0xfff0) << 12); +    const uint64_t head = p->eckd.head & 0x000f; +    const block_number_t block = sectors * heads * cylinder +                               + sectors * head +                               + p->eckd.sector +                               - 1; /* block nr starts with zero */ +    return block; +} + +static bool eckd_valid_address(BootMapPointer *p) +{ +    const uint64_t head = p->eckd.head & 0x000f; + +    if (head >= virtio_get_heads() +        ||  p->eckd.sector > virtio_get_sectors() +        ||  p->eckd.sector <= 0) { +        return false; +    } + +    if (!virtio_guessed_disk_nature() && +        eckd_block_num(p) >= virtio_get_blocks()) { +        return false; +    } + +    return true; +} + +static block_number_t load_eckd_segments(block_number_t blk, uint64_t *address) +{ +    block_number_t block_nr; +    int j, rc; +    BootMapPointer *bprs = (void *)_bprs; +    bool more_data; + +    memset(_bprs, FREE_SPACE_FILLER, sizeof(_bprs)); +    read_block(blk, bprs, "BPRS read failed"); + +    do { +        more_data = false; +        for (j = 0;; j++) { +            block_nr = eckd_block_num((void *)&(bprs[j].xeckd)); +            if (is_null_block_number(block_nr)) { /* end of chunk */ +                break; +            } + +            /* we need the updated blockno for the next indirect entry +             * in the chain, but don't want to advance address +             */ +            if (j == (max_bprs_entries - 1)) { +                break; +            } + +            IPL_assert(block_size_ok(bprs[j].xeckd.bptr.size), +                       "bad chunk block size"); +            IPL_assert(eckd_valid_address(&bprs[j]), "bad chunk ECKD addr"); + +            if ((bprs[j].xeckd.bptr.count == 0) && unused_space(&(bprs[j+1]), +                sizeof(EckdBlockPtr))) { +                /* This is a "continue" pointer. +                 * This ptr should be the last one in the current +                 * script section. +                 * I.e. the next ptr must point to the unused memory area +                 */ +                memset(_bprs, FREE_SPACE_FILLER, sizeof(_bprs)); +                read_block(block_nr, bprs, "BPRS continuation read failed"); +                more_data = true; +                break; +            } + +            /* Load (count+1) blocks of code at (block_nr) +             * to memory (address). +             */ +            rc = virtio_read_many(block_nr, (void *)(*address), +                                  bprs[j].xeckd.bptr.count+1); +            IPL_assert(rc == 0, "code chunk read failed"); + +            *address += (bprs[j].xeckd.bptr.count+1) * virtio_get_block_size(); +        } +    } while (more_data); +    return block_nr; +} + +static void run_eckd_boot_script(block_number_t mbr_block_nr) +{ +    int i; +    block_number_t block_nr; +    uint64_t address; +    ScsiMbr *scsi_mbr = (void *)sec; +    BootMapScript *bms = (void *)sec; + +    memset(sec, FREE_SPACE_FILLER, sizeof(sec)); +    read_block(mbr_block_nr, sec, "Cannot read MBR"); + +    block_nr = eckd_block_num((void *)&(scsi_mbr->blockptr)); + +    memset(sec, FREE_SPACE_FILLER, sizeof(sec)); +    read_block(block_nr, sec, "Cannot read Boot Map Script"); + +    for (i = 0; bms->entry[i].type == BOOT_SCRIPT_LOAD; i++) { +        address = bms->entry[i].address.load_address; +        block_nr = eckd_block_num(&(bms->entry[i].blkptr)); + +        do { +            block_nr = load_eckd_segments(block_nr, &address); +        } while (block_nr != -1); +    } + +    IPL_assert(bms->entry[i].type == BOOT_SCRIPT_EXEC, +               "Unknown script entry type"); +    jump_to_IPL_code(bms->entry[i].address.load_address); /* no return */ +} + +static void ipl_eckd_cdl(void) +{ +    XEckdMbr *mbr; +    Ipl2 *ipl2 = (void *)sec; +    IplVolumeLabel *vlbl = (void *)sec; +    block_number_t block_nr; + +    /* we have just read the block #0 and recognized it as "IPL1" */ +    sclp_print("CDL\n"); + +    memset(sec, FREE_SPACE_FILLER, sizeof(sec)); +    read_block(1, ipl2, "Cannot read IPL2 record at block 1"); + +    mbr = &ipl2->u.x.mbr; +    IPL_assert(magic_match(mbr, ZIPL_MAGIC), "No zIPL section in IPL2 record."); +    IPL_assert(block_size_ok(mbr->blockptr.xeckd.bptr.size), +               "Bad block size in zIPL section of IPL2 record."); +    IPL_assert(mbr->dev_type == DEV_TYPE_ECKD, +               "Non-ECKD device type in zIPL section of IPL2 record."); + +    /* save pointer to Boot Script */ +    block_nr = eckd_block_num((void *)&(mbr->blockptr)); + +    memset(sec, FREE_SPACE_FILLER, sizeof(sec)); +    read_block(2, vlbl, "Cannot read Volume Label at block 2"); +    IPL_assert(magic_match(vlbl->key, VOL1_MAGIC), +               "Invalid magic of volume label block"); +    IPL_assert(magic_match(vlbl->f.key, VOL1_MAGIC), +               "Invalid magic of volser block"); +    print_volser(vlbl->f.volser); + +    run_eckd_boot_script(block_nr); +    /* no return */ +} + +static void print_eckd_ldl_msg(ECKD_IPL_mode_t mode) +{ +    LDL_VTOC *vlbl = (void *)sec; /* already read, 3rd block */ +    char msg[4] = { '?', '.', '\n', '\0' }; + +    sclp_print((mode == ECKD_CMS) ? "CMS" : "LDL"); +    sclp_print(" version "); +    switch (vlbl->LDL_version) { +    case LDL1_VERSION: +        msg[0] = '1'; +        break; +    case LDL2_VERSION: +        msg[0] = '2'; +        break; +    default: +        msg[0] = vlbl->LDL_version; +        msg[0] &= 0x0f; /* convert EBCDIC   */ +        msg[0] |= 0x30; /* to ASCII (digit) */ +        msg[1] = '?'; +        break; +    } +    sclp_print(msg); +    print_volser(vlbl->volser); +} + +static void ipl_eckd_ldl(ECKD_IPL_mode_t mode) +{ +    block_number_t block_nr; +    BootInfo *bip = (void *)(sec + 0x70); /* BootInfo is MBR for LDL */ + +    if (mode != ECKD_LDL_UNLABELED) { +        print_eckd_ldl_msg(mode); +    } + +    /* DO NOT read BootMap pointer (only one, xECKD) at block #2 */ + +    memset(sec, FREE_SPACE_FILLER, sizeof(sec)); +    read_block(0, sec, "Cannot read block 0 to grab boot info."); +    if (mode == ECKD_LDL_UNLABELED) { +        if (!magic_match(bip->magic, ZIPL_MAGIC)) { +            return; /* not applicable layout */ +        } +        sclp_print("unlabeled LDL.\n"); +    } +    verify_boot_info(bip); + +    block_nr = eckd_block_num((void *)&(bip->bp.ipl.bm_ptr.eckd.bptr)); +    run_eckd_boot_script(block_nr); +    /* no return */ +} + +static void print_eckd_msg(void) +{ +    char msg[] = "Using ECKD scheme (block size *****), "; +    char *p = &msg[34], *q = &msg[30]; +    int n = virtio_get_block_size(); + +    /* Fill in the block size and show up the message */ +    if (n > 0 && n <= 99999) { +        while (n) { +            *p-- = '0' + (n % 10); +            n /= 10; +        } +        while (p >= q) { +            *p-- = ' '; +        } +    } +    sclp_print(msg); +} + +/*********************************************************************** + * IPL a SCSI disk + */ + +static void zipl_load_segment(ComponentEntry *entry) +{ +    const int max_entries = (MAX_SECTOR_SIZE / sizeof(ScsiBlockPtr)); +    ScsiBlockPtr *bprs = (void *)sec; +    const int bprs_size = sizeof(sec); +    block_number_t blockno; +    uint64_t address; +    int i; +    char err_msg[] = "zIPL failed to read BPRS at 0xZZZZZZZZZZZZZZZZ"; +    char *blk_no = &err_msg[30]; /* where to print blockno in (those ZZs) */ + +    blockno = entry->data.blockno; +    address = entry->load_address; + +    debug_print_int("loading segment at block", blockno); +    debug_print_int("addr", address); + +    do { +        memset(bprs, FREE_SPACE_FILLER, bprs_size); +        fill_hex_val(blk_no, &blockno, sizeof(blockno)); +        read_block(blockno, bprs, err_msg); + +        for (i = 0;; i++) { +            uint64_t *cur_desc = (void *)&bprs[i]; + +            blockno = bprs[i].blockno; +            if (!blockno) { +                break; +            } + +            /* we need the updated blockno for the next indirect entry in the +               chain, but don't want to advance address */ +            if (i == (max_entries - 1)) { +                break; +            } + +            if (bprs[i].blockct == 0 && unused_space(&bprs[i + 1], +                sizeof(ScsiBlockPtr))) { +                /* This is a "continue" pointer. +                 * This ptr is the last one in the current script section. +                 * I.e. the next ptr must point to the unused memory area. +                 * The blockno is not zero, so the upper loop must continue +                 * reading next section of BPRS. +                 */ +                break; +            } +            address = virtio_load_direct(cur_desc[0], cur_desc[1], 0, +                                         (void *)address); +            IPL_assert(address != -1, "zIPL load segment failed"); +        } +    } while (blockno); +} + +/* Run a zipl program */ +static void zipl_run(ScsiBlockPtr *pte) +{ +    ComponentHeader *header; +    ComponentEntry *entry; +    uint8_t tmp_sec[MAX_SECTOR_SIZE]; + +    read_block(pte->blockno, tmp_sec, "Cannot read header"); +    header = (ComponentHeader *)tmp_sec; + +    IPL_assert(magic_match(tmp_sec, ZIPL_MAGIC), "No zIPL magic"); +    IPL_assert(header->type == ZIPL_COMP_HEADER_IPL, "Bad header type"); + +    dputs("start loading images\n"); + +    /* Load image(s) into RAM */ +    entry = (ComponentEntry *)(&header[1]); +    while (entry->component_type == ZIPL_COMP_ENTRY_LOAD) { +        zipl_load_segment(entry); + +        entry++; + +        IPL_assert((uint8_t *)(&entry[1]) <= (tmp_sec + MAX_SECTOR_SIZE), +                   "Wrong entry value"); +    } + +    IPL_assert(entry->component_type == ZIPL_COMP_ENTRY_EXEC, "No EXEC entry"); + +    /* should not return */ +    jump_to_IPL_code(entry->load_address); +} + +static void ipl_scsi(void) +{ +    ScsiMbr *mbr = (void *)sec; +    uint8_t *ns, *ns_end; +    int program_table_entries = 0; +    const int pte_len = sizeof(ScsiBlockPtr); +    ScsiBlockPtr *prog_table_entry; + +    /* The 0-th block (MBR) was already read into sec[] */ + +    sclp_print("Using SCSI scheme.\n"); +    debug_print_int("program table", mbr->blockptr.blockno); + +    /* Parse the program table */ +    read_block(mbr->blockptr.blockno, sec, +               "Error reading Program Table"); + +    IPL_assert(magic_match(sec, ZIPL_MAGIC), "No zIPL magic"); + +    ns_end = sec + virtio_get_block_size(); +    for (ns = (sec + pte_len); (ns + pte_len) < ns_end; ns++) { +        prog_table_entry = (ScsiBlockPtr *)ns; +        if (!prog_table_entry->blockno) { +            break; +        } + +        program_table_entries++; +    } + +    debug_print_int("program table entries", program_table_entries); + +    IPL_assert(program_table_entries != 0, "Empty Program Table"); + +    /* Run the default entry */ + +    prog_table_entry = (ScsiBlockPtr *)(sec + pte_len); + +    zipl_run(prog_table_entry); /* no return */ +} + +/*********************************************************************** + * IPL starts here + */ + +void zipl_load(void) +{ +    ScsiMbr *mbr = (void *)sec; +    LDL_VTOC *vlbl = (void *)sec; + +    /* Grab the MBR */ +    memset(sec, FREE_SPACE_FILLER, sizeof(sec)); +    read_block(0, mbr, "Cannot read block 0"); + +    dputs("checking magic\n"); + +    if (magic_match(mbr->magic, ZIPL_MAGIC)) { +        ipl_scsi(); /* no return */ +    } + +    /* We have failed to follow the SCSI scheme, so */ +    if (virtio_guessed_disk_nature()) { +        sclp_print("Using guessed DASD geometry.\n"); +        virtio_assume_eckd(); +    } +    print_eckd_msg(); +    if (magic_match(mbr->magic, IPL1_MAGIC)) { +        ipl_eckd_cdl(); /* no return */ +    } + +    /* LDL/CMS? */ +    memset(sec, FREE_SPACE_FILLER, sizeof(sec)); +    read_block(2, vlbl, "Cannot read block 2"); + +    if (magic_match(vlbl->magic, CMS1_MAGIC)) { +        ipl_eckd_ldl(ECKD_CMS); /* no return */ +    } +    if (magic_match(vlbl->magic, LNX1_MAGIC)) { +        ipl_eckd_ldl(ECKD_LDL); /* no return */ +    } + +    ipl_eckd_ldl(ECKD_LDL_UNLABELED); /* it still may return */ +    /* +     * Ok, it is not a LDL by any means. +     * It still might be a CDL with zero record keys for IPL1 and IPL2 +     */ +    ipl_eckd_cdl(); + +    virtio_panic("\n* this can never happen *\n"); +} diff --git a/pc-bios/s390-ccw/bootmap.h b/pc-bios/s390-ccw/bootmap.h new file mode 100644 index 00000000..ab132e35 --- /dev/null +++ b/pc-bios/s390-ccw/bootmap.h @@ -0,0 +1,344 @@ +/* + * QEMU S390 bootmap interpreter -- declarations + * + * Copyright 2014 IBM Corp. + * Author(s): Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ +#ifndef _PC_BIOS_S390_CCW_BOOTMAP_H +#define _PC_BIOS_S390_CCW_BOOTMAP_H + +#include "s390-ccw.h" +#include "virtio.h" + +typedef uint64_t block_number_t; +#define NULL_BLOCK_NR 0xffffffffffffffffULL + +#define FREE_SPACE_FILLER '\xAA' + +typedef struct ScsiBlockPtr { +    uint64_t blockno; +    uint16_t size; +    uint16_t blockct; +    uint8_t reserved[4]; +} __attribute__ ((packed)) ScsiBlockPtr; + +typedef struct FbaBlockPtr { +    uint32_t blockno; +    uint16_t size; +    uint16_t blockct; +} __attribute__ ((packed)) FbaBlockPtr; + +typedef struct EckdBlockPtr { +    uint16_t cylinder; /* cylinder/head/sector is an address of the block */ +    uint16_t head; +    uint8_t sector; +    uint16_t size; +    uint8_t count; /* (size_in_blocks-1); +                    * it's 0 for TablePtr, ScriptPtr, and SectionPtr */ +} __attribute__ ((packed)) EckdBlockPtr; + +typedef struct ExtEckdBlockPtr { +    EckdBlockPtr bptr; +    uint8_t reserved[8]; +} __attribute__ ((packed)) ExtEckdBlockPtr; + +typedef union BootMapPointer { +    ScsiBlockPtr scsi; +    FbaBlockPtr fba; +    EckdBlockPtr eckd; +    ExtEckdBlockPtr xeckd; +} __attribute__ ((packed)) BootMapPointer; + +typedef struct ComponentEntry { +    ScsiBlockPtr data; +    uint8_t pad[7]; +    uint8_t component_type; +    uint64_t load_address; +} __attribute((packed)) ComponentEntry; + +typedef struct ComponentHeader { +    uint8_t magic[4];   /* == "zIPL"                    */ +    uint8_t type;       /* == ZIPL_COMP_HEADER_*        */ +    uint8_t reserved[27]; +} __attribute((packed)) ComponentHeader; + +typedef struct ScsiMbr { +    uint8_t magic[4]; +    uint32_t version_id; +    uint8_t reserved[8]; +    ScsiBlockPtr blockptr; +} __attribute__ ((packed)) ScsiMbr; + +#define ZIPL_MAGIC              "zIPL" +#define IPL1_MAGIC "\xc9\xd7\xd3\xf1" /* == "IPL1" in EBCDIC */ +#define IPL2_MAGIC "\xc9\xd7\xd3\xf2" /* == "IPL2" in EBCDIC */ +#define VOL1_MAGIC "\xe5\xd6\xd3\xf1" /* == "VOL1" in EBCDIC */ +#define LNX1_MAGIC "\xd3\xd5\xe7\xf1" /* == "LNX1" in EBCDIC */ +#define CMS1_MAGIC "\xc3\xd4\xe2\xf1" /* == "CMS1" in EBCDIC */ + +#define LDL1_VERSION '\x40' /* == ' ' in EBCDIC */ +#define LDL2_VERSION '\xf2' /* == '2' in EBCDIC */ + +#define ZIPL_COMP_HEADER_IPL    0x00 +#define ZIPL_COMP_HEADER_DUMP   0x01 + +#define ZIPL_COMP_ENTRY_LOAD    0x02 +#define ZIPL_COMP_ENTRY_EXEC    0x01 + +typedef struct XEckdMbr { +    uint8_t magic[4];   /* == "xIPL"        */ +    uint8_t version; +    uint8_t bp_type; +    uint8_t dev_type;   /* == DEV_TYPE_*    */ +#define DEV_TYPE_ECKD 0x00 +#define DEV_TYPE_FBA  0x01 +    uint8_t flags; +    BootMapPointer blockptr; +    uint8_t reserved[8]; +} __attribute__ ((packed)) XEckdMbr; /* see also BootInfo */ + +typedef struct BootMapScriptEntry { +    BootMapPointer blkptr; +    uint8_t pad[7]; +    uint8_t type;   /* == BOOT_SCRIPT_* */ +#define BOOT_SCRIPT_EXEC 0x01 +#define BOOT_SCRIPT_LOAD 0x02 +    union { +        uint64_t load_address; +        uint64_t load_psw; +    } address; +} __attribute__ ((packed)) BootMapScriptEntry; + +typedef struct BootMapScriptHeader { +    uint32_t magic; +    uint8_t type; +#define BOOT_SCRIPT_HDR_IPL 0x00 +    uint8_t reserved[27]; +} __attribute__ ((packed)) BootMapScriptHeader; + +typedef struct BootMapScript { +    BootMapScriptHeader header; +    BootMapScriptEntry  entry[0]; +} __attribute__ ((packed)) BootMapScript; + +/* + * These aren't real VTOCs, but referred to this way in some docs. + * They are "volume labels" actually. + * + * Some structures looks similar to described above, but left + * separate as there is no indication that they are the same. + * So, the value definitions are left separate too. + */ +typedef struct LDL_VTOC {       /* @ rec.3 cyl.0 trk.0 for ECKD */ +    char magic[4];              /* "LNX1", EBCDIC               */ +    char volser[6];             /* volser, EBCDIC               */ +    uint8_t reserved[69];       /* reserved, 0x40               */ +    uint8_t LDL_version;        /* 0x40 or 0xF2                 */ +    uint64_t formatted_blocks;  /* if LDL_version >= 0xF2       */ +} __attribute__ ((packed)) LDL_VTOC; + +typedef struct format_date { +    uint8_t YY; +    uint8_t MM; +    uint8_t DD; +    uint8_t hh; +    uint8_t mm; +    uint8_t ss; +} __attribute__ ((packed)) format_date_t; + +typedef struct CMS_VTOC {       /* @ rec.3 cyl.0 trk.0 for ECKD */ +                                /* @ blk.1 (zero based) for FBA */ +    char magic[4];              /* 'CMS1', EBCDIC               */ +    char volser[6];             /* volser, EBCDIC               */ +    uint16_t version;           /* = 0                          */ +    uint32_t block_size;        /* = 512, 1024, 2048, or 4096   */ +    uint32_t disk_origin;       /* = 4 or 5                     */ +    uint32_t blocks;            /* Number of usable cyls/blocks */ +    uint32_t formatted;         /* Max number of fmtd cyls/blks */ +    uint32_t CMS_blocks;        /* disk size in CMS blocks      */ +    uint32_t CMS_used;          /* Number of CMS blocks in use  */ +    uint32_t FST_size;          /* = 64, bytes                  */ +    uint32_t FST_per_CMS_blk;   /*                              */ +    format_date_t format_date;  /* YYMMDDhhmmss as 6 bytes      */ +    uint8_t reserved1[2];       /* = 0                          */ +    uint32_t offset;            /* disk offset when reserved    */ +    uint32_t next_hole;         /* block nr                     */ +    uint32_t HBLK_hole_offset;  /* >> HBLK data of next hole    */ +    uint32_t alloc_map_usr_off; /* >> user part of Alloc map    */ +    uint8_t reserved2[4];       /* = 0                          */ +    char shared_seg_name[8];    /*                              */ +} __attribute__ ((packed)) CMS_VTOC; + +/* from zipl/include/boot.h */ +typedef struct BootInfoBpIpl { +    union { +        ExtEckdBlockPtr eckd; +        ScsiBlockPtr linr; +    } bm_ptr; +    uint8_t unused[16]; +} __attribute__ ((packed)) BootInfoBpIpl; + +typedef struct EckdDumpParam { +    uint32_t        start_blk; +    uint32_t        end_blk; +    uint16_t        blocksize; +    uint8_t         num_heads; +    uint8_t         bpt; +    char            reserved[4]; +} __attribute((packed, may_alias)) EckdDumpParam; + +typedef struct FbaDumpParam { +    uint64_t        start_blk; +    uint64_t        blockct; +} __attribute((packed)) FbaDumpParam; + +typedef struct BootInfoBpDump { +    union { +        EckdDumpParam eckd; +        FbaDumpParam fba; +    } param; +    uint8_t         unused[16]; +} __attribute__ ((packed)) BootInfoBpDump; + +typedef struct BootInfo {          /* @ 0x70, record #0    */ +    unsigned char magic[4]; /* = 'zIPL', ASCII      */ +    uint8_t version;        /* = 1                  */ +#define BOOT_INFO_VERSION               1 +    uint8_t bp_type;        /* = 0                  */ +#define BOOT_INFO_BP_TYPE_IPL           0x00 +#define BOOT_INFO_BP_TYPE_DUMP          0x01 +    uint8_t dev_type;       /* = 0                  */ +#define BOOT_INFO_DEV_TYPE_ECKD         0x00 +#define BOOT_INFO_DEV_TYPE_FBA          0x01 +    uint8_t flags;          /* = 1                  */ +#ifdef __s390x__ +#define BOOT_INFO_FLAGS_ARCH            0x01 +#else +#define BOOT_INFO_FLAGS_ARCH            0x00 +#endif +    union { +        BootInfoBpDump dump; +        BootInfoBpIpl ipl; +    } bp; +} __attribute__ ((packed)) BootInfo; /* see also XEckdMbr   */ + +typedef struct Ipl1 { +    unsigned char key[4]; /* == "IPL1" */ +    unsigned char data[24]; +} __attribute__((packed)) Ipl1; + +typedef struct Ipl2 { +    unsigned char key[4]; /* == "IPL2" */ +    union { +        unsigned char data[144]; +        struct { +            unsigned char reserved1[92-4]; +            XEckdMbr mbr; +            unsigned char reserved2[144-(92-4)-sizeof(XEckdMbr)]; +        } x; +    } u; +} __attribute__((packed)) Ipl2; + +typedef struct IplVolumeLabel { +    unsigned char key[4]; /* == "VOL1" */ +    union { +        unsigned char data[80]; +        struct { +            unsigned char key[4]; /* == "VOL1" */ +            unsigned char volser[6]; +            unsigned char reserved[6]; +        } f; +    }; +} __attribute__((packed)) IplVolumeLabel; + +typedef enum { +    ECKD_NO_IPL, +    ECKD_CMS, +    ECKD_LDL, +    ECKD_LDL_UNLABELED, +} ECKD_IPL_mode_t; + +/* utility code below */ + +static inline void IPL_assert(bool term, const char *message) +{ +    if (!term) { +        sclp_print("\n! "); +        sclp_print(message); +        virtio_panic(" !\n"); /* no return */ +    } +} + +static const unsigned char ebc2asc[256] = +      /* 0123456789abcdef0123456789abcdef */ +        "................................" /* 1F */ +        "................................" /* 3F */ +        " ...........<(+|&.........!$*);." /* 5F first.chr.here.is.real.space */ +        "-/.........,%_>?.........`:#@'=\""/* 7F */ +        ".abcdefghi.......jklmnopqr......" /* 9F */ +        "..stuvwxyz......................" /* BF */ +        ".ABCDEFGHI.......JKLMNOPQR......" /* DF */ +        "..STUVWXYZ......0123456789......";/* FF */ + +static inline void ebcdic_to_ascii(const char *src, +                                   char *dst, +                                   unsigned int size) +{ +    unsigned int i; +    for (i = 0; i < size; i++) { +        unsigned c = src[i]; +        dst[i] = ebc2asc[c]; +    } +} + +static inline void print_volser(const void *volser) +{ +    char ascii[8]; + +    ebcdic_to_ascii((char *)volser, ascii, 6); +    ascii[6] = '\0'; +    sclp_print("VOLSER=["); +    sclp_print(ascii); +    sclp_print("]\n"); +} + +static inline bool unused_space(const void *p, size_t size) +{ +    size_t i; +    const unsigned char *m = p; + +    for (i = 0; i < size; i++) { +        if (m[i] != FREE_SPACE_FILLER) { +            return false; +        } +    } +    return true; +} + +static inline bool is_null_block_number(block_number_t x) +{ +    return x == NULL_BLOCK_NR; +} + +static inline void read_block(block_number_t blockno, +                              void *buffer, +                              const char *errmsg) +{ +    IPL_assert(virtio_read(blockno, buffer) == 0, errmsg); +} + +static inline bool block_size_ok(uint32_t block_size) +{ +    return block_size == virtio_get_block_size(); +} + +static inline bool magic_match(const void *data, const void *magic) +{ +    return *((uint32_t *)data) == *((uint32_t *)magic); +} + +#endif /* _PC_BIOS_S390_CCW_BOOTMAP_H */ diff --git a/pc-bios/s390-ccw/cio.h b/pc-bios/s390-ccw/cio.h new file mode 100644 index 00000000..f5b4549e --- /dev/null +++ b/pc-bios/s390-ccw/cio.h @@ -0,0 +1,342 @@ +/* + * Channel IO definitions + * + * Copyright (c) 2013 Alexander Graf <agraf@suse.de> + * + * Inspired by various s390 headers in Linux 3.9. + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#ifndef CIO_H +#define CIO_H + +/* + * path management control word + */ +struct pmcw { +    __u32 intparm;        /* interruption parameter */ +    __u32 qf      : 1;    /* qdio facility */ +    __u32 w       : 1; +    __u32 isc     : 3;    /* interruption sublass */ +    __u32 res5    : 3;    /* reserved zeros */ +    __u32 ena     : 1;    /* enabled */ +    __u32 lm      : 2;    /* limit mode */ +    __u32 mme     : 2;    /* measurement-mode enable */ +    __u32 mp      : 1;    /* multipath mode */ +    __u32 tf      : 1;    /* timing facility */ +    __u32 dnv     : 1;    /* device number valid */ +    __u32 dev     : 16;   /* device number */ +    __u8  lpm;            /* logical path mask */ +    __u8  pnom;           /* path not operational mask */ +    __u8  lpum;           /* last path used mask */ +    __u8  pim;            /* path installed mask */ +    __u16 mbi;            /* measurement-block index */ +    __u8  pom;            /* path operational mask */ +    __u8  pam;            /* path available mask */ +    __u8  chpid[8];       /* CHPID 0-7 (if available) */ +    __u32 unused1 : 8;    /* reserved zeros */ +    __u32 st      : 3;    /* subchannel type */ +    __u32 unused2 : 18;   /* reserved zeros */ +    __u32 mbfc    : 1;    /* measurement block format control */ +    __u32 xmwme   : 1;    /* extended measurement word mode enable */ +    __u32 csense  : 1;    /* concurrent sense; can be enabled ...*/ +                /*  ... per MSCH, however, if facility */ +                /*  ... is not installed, this results */ +                /*  ... in an operand exception.       */ +} __attribute__ ((packed)); + +/* Target SCHIB configuration. */ +struct schib_config { +    __u64 mba; +    __u32 intparm; +    __u16 mbi; +    __u32 isc:3; +    __u32 ena:1; +    __u32 mme:2; +    __u32 mp:1; +    __u32 csense:1; +    __u32 mbfc:1; +} __attribute__ ((packed)); + +struct scsw { +    __u16 flags; +    __u16 ctrl; +    __u32 cpa; +    __u8 dstat; +    __u8 cstat; +    __u16 count; +} __attribute__ ((packed)); + +#define SCSW_FCTL_CLEAR_FUNC 0x1000 +#define SCSW_FCTL_HALT_FUNC 0x2000 +#define SCSW_FCTL_START_FUNC 0x4000 + +/* + * subchannel information block + */ +struct schib { +    struct pmcw pmcw;     /* path management control word */ +    struct scsw scsw;     /* subchannel status word */ +    __u64 mba;            /* measurement block address */ +    __u8 mda[4];          /* model dependent area */ +} __attribute__ ((packed,aligned(4))); + +struct subchannel_id { +        __u32 cssid  : 8; +        __u32        : 4; +        __u32 m      : 1; +        __u32 ssid   : 2; +        __u32 one    : 1; +        __u32 sch_no : 16; +} __attribute__ ((packed, aligned(4))); + +struct chsc_header { +    __u16 length; +    __u16 code; +} __attribute__((packed)); + +struct chsc_area_sda { +    struct chsc_header request; +    __u8 reserved1:4; +    __u8 format:4; +    __u8 reserved2; +    __u16 operation_code; +    __u32 reserved3; +    __u32 reserved4; +    __u32 operation_data_area[252]; +    struct chsc_header response; +    __u32 reserved5:4; +    __u32 format2:4; +    __u32 reserved6:24; +} __attribute__((packed)); + +/* + * TPI info structure + */ +struct tpi_info { +    struct subchannel_id schid; +    __u32 intparm;         /* interruption parameter */ +    __u32 adapter_IO : 1; +    __u32 reserved2  : 1; +    __u32 isc        : 3; +    __u32 reserved3  : 12; +    __u32 int_type   : 3; +    __u32 reserved4  : 12; +} __attribute__ ((packed)); + +/* channel command word (type 1) */ +struct ccw1 { +    __u8 cmd_code; +    __u8 flags; +    __u16 count; +    __u32 cda; +} __attribute__ ((packed)); + +#define CCW_FLAG_DC              0x80 +#define CCW_FLAG_CC              0x40 +#define CCW_FLAG_SLI             0x20 +#define CCW_FLAG_SKIP            0x10 +#define CCW_FLAG_PCI             0x08 +#define CCW_FLAG_IDA             0x04 +#define CCW_FLAG_SUSPEND         0x02 + +#define CCW_CMD_NOOP             0x03 +#define CCW_CMD_BASIC_SENSE      0x04 +#define CCW_CMD_TIC              0x08 +#define CCW_CMD_SENSE_ID         0xe4 + +#define CCW_CMD_SET_VQ           0x13 +#define CCW_CMD_VDEV_RESET       0x33 +#define CCW_CMD_READ_FEAT        0x12 +#define CCW_CMD_WRITE_FEAT       0x11 +#define CCW_CMD_READ_CONF        0x22 +#define CCW_CMD_WRITE_CONF       0x21 +#define CCW_CMD_WRITE_STATUS     0x31 +#define CCW_CMD_SET_IND          0x43 +#define CCW_CMD_SET_CONF_IND     0x53 +#define CCW_CMD_READ_VQ_CONF     0x32 + +/* + * Command-mode operation request block + */ +struct cmd_orb { +    __u32 intparm;    /* interruption parameter */ +    __u32 key:4;      /* flags, like key, suspend control, etc. */ +    __u32 spnd:1;     /* suspend control */ +    __u32 res1:1;     /* reserved */ +    __u32 mod:1;      /* modification control */ +    __u32 sync:1;     /* synchronize control */ +    __u32 fmt:1;      /* format control */ +    __u32 pfch:1;     /* prefetch control */ +    __u32 isic:1;     /* initial-status-interruption control */ +    __u32 alcc:1;     /* address-limit-checking control */ +    __u32 ssic:1;     /* suppress-suspended-interr. control */ +    __u32 res2:1;     /* reserved */ +    __u32 c64:1;      /* IDAW/QDIO 64 bit control  */ +    __u32 i2k:1;      /* IDAW 2/4kB block size control */ +    __u32 lpm:8;      /* logical path mask */ +    __u32 ils:1;      /* incorrect length */ +    __u32 zero:6;     /* reserved zeros */ +    __u32 orbx:1;     /* ORB extension control */ +    __u32 cpa;    /* channel program address */ +}  __attribute__ ((packed, aligned(4))); + +struct ciw { +    __u8 type; +    __u8 command; +    __u16 count; +}; + +/* + * sense-id response buffer layout + */ +struct senseid { +    /* common part */ +    __u8  reserved;   /* always 0x'FF' */ +    __u16 cu_type;    /* control unit type */ +    __u8  cu_model;   /* control unit model */ +    __u16 dev_type;   /* device type */ +    __u8  dev_model;  /* device model */ +    __u8  unused;     /* padding byte */ +    /* extended part */ +    struct ciw ciw[62]; +}  __attribute__ ((packed, aligned(4))); + +/* interruption response block */ +struct irb { +    struct scsw scsw; +    __u32 esw[5]; +    __u32 ecw[8]; +    __u32 emw[8]; +}  __attribute__ ((packed, aligned(4))); + +/* + * Some S390 specific IO instructions as inline + */ + +static inline int stsch_err(struct subchannel_id schid, struct schib *addr) +{ +    register struct subchannel_id reg1 asm ("1") = schid; +    int ccode = -EIO; + +    asm volatile( +        "    stsch    0(%3)\n" +        "0:  ipm    %0\n" +        "    srl    %0,28\n" +        "1:\n" +        : "+d" (ccode), "=m" (*addr) +        : "d" (reg1), "a" (addr) +        : "cc"); +    return ccode; +} + +static inline int msch(struct subchannel_id schid, struct schib *addr) +{ +    register struct subchannel_id reg1 asm ("1") = schid; +    int ccode; + +    asm volatile( +        "    msch    0(%2)\n" +        "    ipm    %0\n" +        "    srl    %0,28" +        : "=d" (ccode) +        : "d" (reg1), "a" (addr), "m" (*addr) +        : "cc"); +    return ccode; +} + +static inline int msch_err(struct subchannel_id schid, struct schib *addr) +{ +    register struct subchannel_id reg1 asm ("1") = schid; +    int ccode = -EIO; + +    asm volatile( +        "    msch    0(%2)\n" +        "0:  ipm    %0\n" +        "    srl    %0,28\n" +        "1:\n" +        : "+d" (ccode) +        : "d" (reg1), "a" (addr), "m" (*addr) +        : "cc"); +    return ccode; +} + +static inline int tsch(struct subchannel_id schid, struct irb *addr) +{ +    register struct subchannel_id reg1 asm ("1") = schid; +    int ccode; + +    asm volatile( +        "    tsch    0(%3)\n" +        "    ipm    %0\n" +        "    srl    %0,28" +        : "=d" (ccode), "=m" (*addr) +        : "d" (reg1), "a" (addr) +        : "cc"); +    return ccode; +} + +static inline int ssch(struct subchannel_id schid, struct cmd_orb *addr) +{ +    register struct subchannel_id reg1 asm("1") = schid; +    int ccode = -EIO; + +    asm volatile( +        "    ssch    0(%2)\n" +        "0:  ipm    %0\n" +        "    srl    %0,28\n" +        "1:\n" +        : "+d" (ccode) +        : "d" (reg1), "a" (addr), "m" (*addr) +        : "cc", "memory"); +    return ccode; +} + +static inline int csch(struct subchannel_id schid) +{ +    register struct subchannel_id reg1 asm("1") = schid; +    int ccode; + +    asm volatile( +        "    csch\n" +        "    ipm    %0\n" +        "    srl    %0,28" +        : "=d" (ccode) +        : "d" (reg1) +        : "cc"); +    return ccode; +} + +static inline int tpi(struct tpi_info *addr) +{ +    int ccode; + +    asm volatile( +        "    tpi    0(%2)\n" +        "    ipm    %0\n" +        "    srl    %0,28" +        : "=d" (ccode), "=m" (*addr) +        : "a" (addr) +        : "cc"); +    return ccode; +} + +static inline int chsc(void *chsc_area) +{ +    typedef struct { char _[4096]; } addr_type; +    int cc; + +    asm volatile( +        "    .insn    rre,0xb25f0000,%2,0\n" +        "    ipm    %0\n" +        "    srl    %0,28\n" +        : "=d" (cc), "=m" (*(addr_type *) chsc_area) +        : "d" (chsc_area), "m" (*(addr_type *) chsc_area) +        : "cc"); +    return cc; +} + +#endif /* CIO_H */ diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c new file mode 100644 index 00000000..584d4a27 --- /dev/null +++ b/pc-bios/s390-ccw/main.c @@ -0,0 +1,100 @@ +/* + * S390 virtio-ccw loading program + * + * Copyright (c) 2013 Alexander Graf <agraf@suse.de> + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#include "s390-ccw.h" +#include "virtio.h" + +char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); +char ring_area[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); +uint64_t boot_value; +static struct subchannel_id blk_schid = { .one = 1 }; + +/* + * Priniciples of Operations (SA22-7832-09) chapter 17 requires that + * a subsystem-identification is at 184-187 and bytes 188-191 are zero + * after list-directed-IPL and ccw-IPL. + */ +void write_subsystem_identification(void) +{ +    struct subchannel_id *schid = (struct subchannel_id *) 184; +    uint32_t *zeroes = (uint32_t *) 188; + +    *schid = blk_schid; +    *zeroes = 0; +} + + +void virtio_panic(const char *string) +{ +    sclp_print(string); +    disabled_wait(); +    while (1) { } +} + +static void virtio_setup(uint64_t dev_info) +{ +    struct schib schib; +    int i; +    int r; +    bool found = false; +    bool check_devno = false; +    uint16_t dev_no = -1; + +    if (dev_info != -1) { +        check_devno = true; +        dev_no = dev_info & 0xffff; +        debug_print_int("device no. ", dev_no); +        blk_schid.ssid = (dev_info >> 16) & 0x3; +        if (blk_schid.ssid != 0) { +            debug_print_int("ssid ", blk_schid.ssid); +            if (enable_mss_facility() != 0) { +                virtio_panic("Failed to enable mss facility\n"); +            } +        } +    } + +    for (i = 0; i < 0x10000; i++) { +        blk_schid.sch_no = i; +        r = stsch_err(blk_schid, &schib); +        if (r == 3) { +            break; +        } +        if (schib.pmcw.dnv) { +            if (!check_devno || (schib.pmcw.dev == dev_no)) { +                if (virtio_is_blk(blk_schid)) { +                    found = true; +                    break; +                } +            } +        } +    } + +    if (!found) { +        virtio_panic("No virtio-blk device found!\n"); +    } + +    virtio_setup_block(blk_schid); + +    if (!virtio_ipl_disk_is_valid()) { +        virtio_panic("No valid hard disk detected.\n"); +    } +} + +int main(void) +{ +    sclp_setup(); +    debug_print_int("boot reg[7] ", boot_value); +    virtio_setup(boot_value); + +    zipl_load(); /* no return */ + +    virtio_panic("Failed to load OS from hard disk\n"); +    return 0; /* make compiler happy */ +} diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h new file mode 100644 index 00000000..5484c2a4 --- /dev/null +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -0,0 +1,146 @@ +/* + * S390 CCW boot loader + * + * Copyright (c) 2013 Alexander Graf <agraf@suse.de> + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#ifndef S390_CCW_H +#define S390_CCW_H + +/* #define DEBUG */ + +typedef unsigned char      u8; +typedef unsigned short     u16; +typedef unsigned int       u32; +typedef unsigned long long u64; +typedef unsigned long      ulong; +typedef long               size_t; +typedef int                bool; +typedef unsigned char      uint8_t; +typedef unsigned short     uint16_t; +typedef unsigned int       uint32_t; +typedef unsigned long long uint64_t; +typedef unsigned char      __u8; +typedef unsigned short     __u16; +typedef unsigned int       __u32; +typedef unsigned long long __u64; + +#define true 1 +#define false 0 +#define PAGE_SIZE 4096 + +#ifndef EIO +#define EIO     1 +#endif +#ifndef EBUSY +#define EBUSY   2 +#endif +#ifndef NULL +#define NULL    0 +#endif + +#include "cio.h" + +/* start.s */ +void disabled_wait(void); +void consume_sclp_int(void); + +/* main.c */ +void virtio_panic(const char *string); +void write_subsystem_identification(void); +extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); +extern char ring_area[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); +extern uint64_t boot_value; + +/* sclp-ascii.c */ +void sclp_print(const char *string); +void sclp_setup(void); + +/* virtio.c */ +unsigned long virtio_load_direct(ulong rec_list1, ulong rec_list2, +                                 ulong subchan_id, void *load_addr); +bool virtio_is_blk(struct subchannel_id schid); +void virtio_setup_block(struct subchannel_id schid); +int virtio_read(ulong sector, void *load_addr); +int enable_mss_facility(void); + +/* bootmap.c */ +void zipl_load(void); + +static inline void *memset(void *s, int c, size_t n) +{ +    int i; +    unsigned char *p = s; + +    for (i = 0; i < n; i++) { +        p[i] = c; +    } + +    return s; +} + +static inline void fill_hex(char *out, unsigned char val) +{ +    const char hex[] = "0123456789abcdef"; + +    out[0] = hex[(val >> 4) & 0xf]; +    out[1] = hex[val & 0xf]; +} + +static inline void fill_hex_val(char *out, void *ptr, unsigned size) +{ +    unsigned char *value = ptr; +    unsigned int i; + +    for (i = 0; i < size; i++) { +        fill_hex(&out[i*2], value[i]); +    } +} + +static inline void print_int(const char *desc, u64 addr) +{ +    char out[] = ": 0xffffffffffffffff\n"; + +    fill_hex_val(&out[4], &addr, sizeof(addr)); + +    sclp_print(desc); +    sclp_print(out); +} + +static inline void debug_print_int(const char *desc, u64 addr) +{ +#ifdef DEBUG +    print_int(desc, addr); +#endif +} + +static inline void debug_print_addr(const char *desc, void *p) +{ +#ifdef DEBUG +    debug_print_int(desc, (unsigned int)(unsigned long)p); +#endif +} + +/*********************************************** + *           Hypercall functions               * + ***********************************************/ + +#define KVM_S390_VIRTIO_NOTIFY          0 +#define KVM_S390_VIRTIO_RESET           1 +#define KVM_S390_VIRTIO_SET_STATUS      2 +#define KVM_S390_VIRTIO_CCW_NOTIFY      3 + +static inline void yield(void) +{ +    asm volatile ("diag 0,0,0x44" +                  : : +                  : "memory", "cc"); +} + +#define MAX_SECTOR_SIZE 4096 + +#endif /* S390_CCW_H */ diff --git a/pc-bios/s390-ccw/sclp-ascii.c b/pc-bios/s390-ccw/sclp-ascii.c new file mode 100644 index 00000000..dc1c3e4f --- /dev/null +++ b/pc-bios/s390-ccw/sclp-ascii.c @@ -0,0 +1,82 @@ +/* + * SCLP ASCII access driver + * + * Copyright (c) 2013 Alexander Graf <agraf@suse.de> + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#include "s390-ccw.h" +#include "sclp.h" + +static char _sccb[PAGE_SIZE] __attribute__((__aligned__(4096))); + +/* Perform service call. Return 0 on success, non-zero otherwise. */ +static int sclp_service_call(unsigned int command, void *sccb) +{ +        int cc; + +        asm volatile( +                "       .insn   rre,0xb2200000,%1,%2\n"  /* servc %1,%2 */ +                "       ipm     %0\n" +                "       srl     %0,28" +                : "=&d" (cc) : "d" (command), "a" (__pa(sccb)) +                : "cc", "memory"); +        consume_sclp_int(); +        if (cc == 3) +                return -EIO; +        if (cc == 2) +                return -EBUSY; +        return 0; +} + +static void sclp_set_write_mask(void) +{ +    WriteEventMask *sccb = (void *)_sccb; + +    sccb->h.length = sizeof(WriteEventMask); +    sccb->mask_length = sizeof(unsigned int); +    sccb->receive_mask = SCLP_EVENT_MASK_MSG_ASCII; +    sccb->cp_receive_mask = SCLP_EVENT_MASK_MSG_ASCII; +    sccb->send_mask = SCLP_EVENT_MASK_MSG_ASCII; +    sccb->cp_send_mask = SCLP_EVENT_MASK_MSG_ASCII; + +    sclp_service_call(SCLP_CMD_WRITE_EVENT_MASK, sccb); +} + +void sclp_setup(void) +{ +    sclp_set_write_mask(); +} + +static int _strlen(const char *str) +{ +    int i; +    for (i = 0; *str; i++) +        str++; +    return i; +} + +static void _memcpy(char *dest, const char *src, int len) +{ +    int i; +    for (i = 0; i < len; i++) +        dest[i] = src[i]; +} + +void sclp_print(const char *str) +{ +    int len = _strlen(str); +    WriteEventData *sccb = (void *)_sccb; + +    sccb->h.length = sizeof(WriteEventData) + len; +    sccb->h.function_code = SCLP_FC_NORMAL_WRITE; +    sccb->ebh.length = sizeof(EventBufferHeader) + len; +    sccb->ebh.type = SCLP_EVENT_ASCII_CONSOLE_DATA; +    sccb->ebh.flags = 0; +    _memcpy(sccb->data, str, len); + +    sclp_service_call(SCLP_CMD_WRITE_EVENT_DATA, sccb); +} diff --git a/pc-bios/s390-ccw/sclp.h b/pc-bios/s390-ccw/sclp.h new file mode 100644 index 00000000..3cbfb789 --- /dev/null +++ b/pc-bios/s390-ccw/sclp.h @@ -0,0 +1,107 @@ +/* + * SCLP ASCII access driver + * + * Copyright (c) 2013 Alexander Graf <agraf@suse.de> + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#ifndef SCLP_H +#define SCLP_H + +/* SCLP command codes */ +#define SCLP_CMDW_READ_SCP_INFO                 0x00020001 +#define SCLP_CMDW_READ_SCP_INFO_FORCED          0x00120001 +#define SCLP_CMD_READ_EVENT_DATA                0x00770005 +#define SCLP_CMD_WRITE_EVENT_DATA               0x00760005 +#define SCLP_CMD_READ_EVENT_DATA                0x00770005 +#define SCLP_CMD_WRITE_EVENT_DATA               0x00760005 +#define SCLP_CMD_WRITE_EVENT_MASK               0x00780005 + +/* SCLP response codes */ +#define SCLP_RC_NORMAL_READ_COMPLETION          0x0010 +#define SCLP_RC_NORMAL_COMPLETION               0x0020 +#define SCLP_RC_INVALID_SCLP_COMMAND            0x01f0 +#define SCLP_RC_CONTAINED_EQUIPMENT_CHECK       0x0340 +#define SCLP_RC_INSUFFICIENT_SCCB_LENGTH        0x0300 +#define SCLP_RC_INVALID_FUNCTION                0x40f0 +#define SCLP_RC_NO_EVENT_BUFFERS_STORED         0x60f0 +#define SCLP_RC_INVALID_SELECTION_MASK          0x70f0 +#define SCLP_RC_INCONSISTENT_LENGTHS            0x72f0 +#define SCLP_RC_EVENT_BUFFER_SYNTAX_ERROR       0x73f0 +#define SCLP_RC_INVALID_MASK_LENGTH             0x74f0 + +/* Service Call Control Block (SCCB) and its elements */ + +#define SCCB_SIZE 4096 + +#define SCLP_VARIABLE_LENGTH_RESPONSE           0x80 +#define SCLP_EVENT_BUFFER_ACCEPTED              0x80 + +#define SCLP_FC_NORMAL_WRITE                    0 + +typedef struct SCCBHeader { +    uint16_t length; +    uint8_t function_code; +    uint8_t control_mask[3]; +    uint16_t response_code; +} __attribute__((packed)) SCCBHeader; + +#define SCCB_DATA_LEN (SCCB_SIZE - sizeof(SCCBHeader)) + +typedef struct ReadInfo { +    SCCBHeader h; +    uint16_t rnmax; +    uint8_t rnsize; +} __attribute__((packed)) ReadInfo; + +typedef struct SCCB { +    SCCBHeader h; +    char data[SCCB_DATA_LEN]; + } __attribute__((packed)) SCCB; + +/* SCLP event types */ +#define SCLP_EVENT_ASCII_CONSOLE_DATA           0x1a +#define SCLP_EVENT_SIGNAL_QUIESCE               0x1d + +/* SCLP event masks */ +#define SCLP_EVENT_MASK_SIGNAL_QUIESCE          0x00000008 +#define SCLP_EVENT_MASK_MSG_ASCII               0x00000040 + +#define SCLP_UNCONDITIONAL_READ                 0x00 +#define SCLP_SELECTIVE_READ                     0x01 + +typedef struct WriteEventMask { +    SCCBHeader h; +    uint16_t _reserved; +    uint16_t mask_length; +    uint32_t cp_receive_mask; +    uint32_t cp_send_mask; +    uint32_t send_mask; +    uint32_t receive_mask; +} __attribute__((packed)) WriteEventMask; + +typedef struct EventBufferHeader { +    uint16_t length; +    uint8_t  type; +    uint8_t  flags; +    uint16_t _reserved; +} __attribute__((packed)) EventBufferHeader; + +typedef struct WriteEventData { +    SCCBHeader h; +    EventBufferHeader ebh; +    char data[0]; +} __attribute__((packed)) WriteEventData; + +typedef struct ReadEventData { +    SCCBHeader h; +    EventBufferHeader ebh; +    uint32_t mask; +} __attribute__((packed)) ReadEventData; + +#define __pa(x) (x) + +#endif /* SCLP_H */ diff --git a/pc-bios/s390-ccw/start.S b/pc-bios/s390-ccw/start.S new file mode 100644 index 00000000..b6dd8c2f --- /dev/null +++ b/pc-bios/s390-ccw/start.S @@ -0,0 +1,65 @@ +/* + * First stage boot loader for virtio devices. The compiled output goes + * into the pc-bios directory of qemu. + * + * Copyright (c) 2013 Alexander Graf <agraf@suse.de> + * Copyright 2013 IBM Corp. + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +        .globl _start +_start: + +larl	%r15, stack + 0x8000    /* Set up stack */ +larl    %r6, boot_value +stg     %r7, 0(%r6)     /* save the boot_value before any function calls */ +j	main                    /* And call C */ + +/* + * void disabled_wait(void) + * + * stops the current guest cpu. + */ +	.globl disabled_wait +disabled_wait: +        larl %r1,disabled_wait_psw +        lpswe   0(%r1) + + +/* + * void consume_sclp_int(void) + * + * eats one sclp interrupt + */ +        .globl consume_sclp_int +consume_sclp_int: +        /* enable service interrupts in cr0 */ +        stctg 0,0,0(15) +        oi 6(15), 0x2 +        lctlg 0,0,0(15) +        /* prepare external call handler */ +        larl %r1, external_new_code +        stg %r1, 0x1b8 +        larl %r1, external_new_mask +        mvc 0x1b0(8),0(%r1) +        /* load enabled wait PSW */ +        larl %r1, enabled_wait_psw +        lpswe 0(%r1) + +external_new_code: +        /* disable service interrupts in cr0 */ +        stctg 0,0,0(15) +        ni 6(15), 0xfd +        lctlg 0,0,0(15) +        br 14 + +        .align  8 +disabled_wait_psw: +        .quad   0x0002000180000000,0x0000000000000000 +enabled_wait_psw: +        .quad   0x0302000180000000,0x0000000000000000 +external_new_mask: +        .quad   0x0000000180000000 diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c new file mode 100644 index 00000000..57ff1b07 --- /dev/null +++ b/pc-bios/s390-ccw/virtio.c @@ -0,0 +1,434 @@ +/* + * Virtio driver bits + * + * Copyright (c) 2013 Alexander Graf <agraf@suse.de> + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#include "s390-ccw.h" +#include "virtio.h" + +static struct vring block; + +static char chsc_page[PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE))); + +static long kvm_hypercall(unsigned long nr, unsigned long param1, +                          unsigned long param2) +{ +    register ulong r_nr asm("1") = nr; +    register ulong r_param1 asm("2") = param1; +    register ulong r_param2 asm("3") = param2; +    register long retval asm("2"); + +    asm volatile ("diag 2,4,0x500" +                  : "=d" (retval) +                  : "d" (r_nr), "0" (r_param1), "r"(r_param2) +                  : "memory", "cc"); + +    return retval; +} + +static void virtio_notify(struct subchannel_id schid) +{ +    kvm_hypercall(KVM_S390_VIRTIO_CCW_NOTIFY, *(u32 *)&schid, 0); +} + +/*********************************************** + *             Virtio functions                * + ***********************************************/ + +static int drain_irqs(struct subchannel_id schid) +{ +    struct irb irb = {}; +    int r = 0; + +    while (1) { +        /* FIXME: make use of TPI, for that enable subchannel and isc */ +        if (tsch(schid, &irb)) { +            /* Might want to differentiate error codes later on. */ +            if (irb.scsw.cstat) { +                r = -EIO; +            } else if (irb.scsw.dstat != 0xc) { +                r = -EIO; +            } +            return r; +        } +    } +} + +static int run_ccw(struct subchannel_id schid, int cmd, void *ptr, int len) +{ +    struct ccw1 ccw = {}; +    struct cmd_orb orb = {}; +    struct schib schib; +    int r; + +    /* start command processing */ +    stsch_err(schid, &schib); +    schib.scsw.ctrl = SCSW_FCTL_START_FUNC; +    msch(schid, &schib); + +    /* start subchannel command */ +    orb.fmt = 1; +    orb.cpa = (u32)(long)&ccw; +    orb.lpm = 0x80; + +    ccw.cmd_code = cmd; +    ccw.cda = (long)ptr; +    ccw.count = len; + +    r = ssch(schid, &orb); +    /* +     * XXX Wait until device is done processing the CCW. For now we can +     *     assume that a simple tsch will have finished the CCW processing, +     *     but the architecture allows for asynchronous operation +     */ +    if (!r) { +        r = drain_irqs(schid); +    } +    return r; +} + +static void virtio_set_status(struct subchannel_id schid, +                              unsigned long dev_addr) +{ +    unsigned char status = dev_addr; +    if (run_ccw(schid, CCW_CMD_WRITE_STATUS, &status, sizeof(status))) { +        virtio_panic("Could not write status to host!\n"); +    } +} + +static void virtio_reset(struct subchannel_id schid) +{ +    run_ccw(schid, CCW_CMD_VDEV_RESET, NULL, 0); +} + +static void vring_init(struct vring *vr, unsigned int num, void *p, +                       unsigned long align) +{ +    debug_print_addr("init p", p); +    vr->num = num; +    vr->desc = p; +    vr->avail = p + num*sizeof(struct vring_desc); +    vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + align-1) +                & ~(align - 1)); + +    /* Zero out all relevant field */ +    vr->avail->flags = 0; +    vr->avail->idx = 0; + +    /* We're running with interrupts off anyways, so don't bother */ +    vr->used->flags = VRING_USED_F_NO_NOTIFY; +    vr->used->idx = 0; +    vr->used_idx = 0; +    vr->next_idx = 0; + +    debug_print_addr("init vr", vr); +} + +static void vring_notify(struct subchannel_id schid) +{ +    virtio_notify(schid); +} + +static void vring_send_buf(struct vring *vr, void *p, int len, int flags) +{ +    /* For follow-up chains we need to keep the first entry point */ +    if (!(flags & VRING_HIDDEN_IS_CHAIN)) { +        vr->avail->ring[vr->avail->idx % vr->num] = vr->next_idx; +    } + +    vr->desc[vr->next_idx].addr = (ulong)p; +    vr->desc[vr->next_idx].len = len; +    vr->desc[vr->next_idx].flags = flags & ~VRING_HIDDEN_IS_CHAIN; +    vr->desc[vr->next_idx].next = vr->next_idx; +    vr->desc[vr->next_idx].next++; +    vr->next_idx++; + +    /* Chains only have a single ID */ +    if (!(flags & VRING_DESC_F_NEXT)) { +        vr->avail->idx++; +    } +} + +static u64 get_clock(void) +{ +    u64 r; + +    asm volatile("stck %0" : "=Q" (r) : : "cc"); +    return r; +} + +static ulong get_second(void) +{ +    return (get_clock() >> 12) / 1000000; +} + +/* + * Wait for the host to reply. + * + * timeout is in seconds if > 0. + * + * Returns 0 on success, 1 on timeout. + */ +static int vring_wait_reply(struct vring *vr, int timeout) +{ +    ulong target_second = get_second() + timeout; +    struct subchannel_id schid = vr->schid; +    int r = 0; + +    /* Wait until the used index has moved. */ +    while (vr->used->idx == vr->used_idx) { +        vring_notify(schid); +        if (timeout && (get_second() >= target_second)) { +            r = 1; +            break; +        } +        yield(); +    } + +    vr->used_idx = vr->used->idx; +    vr->next_idx = 0; +    vr->desc[0].len = 0; +    vr->desc[0].flags = 0; + +    return r; +} + +/*********************************************** + *               Virtio block                  * + ***********************************************/ + +int virtio_read_many(ulong sector, void *load_addr, int sec_num) +{ +    struct virtio_blk_outhdr out_hdr; +    u8 status; +    int r; + +    /* Tell the host we want to read */ +    out_hdr.type = VIRTIO_BLK_T_IN; +    out_hdr.ioprio = 99; +    out_hdr.sector = virtio_sector_adjust(sector); + +    vring_send_buf(&block, &out_hdr, sizeof(out_hdr), VRING_DESC_F_NEXT); + +    /* This is where we want to receive data */ +    vring_send_buf(&block, load_addr, virtio_get_block_size() * sec_num, +                   VRING_DESC_F_WRITE | VRING_HIDDEN_IS_CHAIN | +                   VRING_DESC_F_NEXT); + +    /* status field */ +    vring_send_buf(&block, &status, sizeof(u8), VRING_DESC_F_WRITE | +                   VRING_HIDDEN_IS_CHAIN); + +    /* Now we can tell the host to read */ +    vring_wait_reply(&block, 0); + +    r = drain_irqs(block.schid); +    if (r) { +        /* Well, whatever status is supposed to contain... */ +        status = 1; +    } +    return status; +} + +unsigned long virtio_load_direct(ulong rec_list1, ulong rec_list2, +                                 ulong subchan_id, void *load_addr) +{ +    u8 status; +    int sec = rec_list1; +    int sec_num = ((rec_list2 >> 32) & 0xffff) + 1; +    int sec_len = rec_list2 >> 48; +    ulong addr = (ulong)load_addr; + +    if (sec_len != virtio_get_block_size()) { +        return -1; +    } + +    sclp_print("."); +    status = virtio_read_many(sec, (void *)addr, sec_num); +    if (status) { +        virtio_panic("I/O Error"); +    } +    addr += sec_num * virtio_get_block_size(); + +    return addr; +} + +int virtio_read(ulong sector, void *load_addr) +{ +    return virtio_read_many(sector, load_addr, 1); +} + +static VirtioBlkConfig blk_cfg = {}; +static bool guessed_disk_nature; + +bool virtio_guessed_disk_nature(void) +{ +    return guessed_disk_nature; +} + +void virtio_assume_scsi(void) +{ +    guessed_disk_nature = true; +    blk_cfg.blk_size = 512; +    blk_cfg.physical_block_exp = 0; +} + +void virtio_assume_eckd(void) +{ +    guessed_disk_nature = true; +    blk_cfg.blk_size = 4096; +    blk_cfg.physical_block_exp = 0; + +    /* this must be here to calculate code segment position */ +    blk_cfg.geometry.heads = 15; +    blk_cfg.geometry.sectors = 12; +} + +bool virtio_disk_is_scsi(void) +{ +    if (guessed_disk_nature) { +        return (virtio_get_block_size()  == 512); +    } +    return (blk_cfg.geometry.heads == 255) +        && (blk_cfg.geometry.sectors == 63) +        && (virtio_get_block_size()  == 512); +} + +/* + * Other supported value pairs, if any, would need to be added here. + * Note: head count is always 15. + */ +static inline u8 virtio_eckd_sectors_for_block_size(int size) +{ +    switch (size) { +    case 512: +        return 49; +    case 1024: +        return 33; +    case 2048: +        return 21; +    case 4096: +        return 12; +    } +    return 0; +} + +bool virtio_disk_is_eckd(void) +{ +    const int block_size = virtio_get_block_size(); + +    if (guessed_disk_nature) { +        return (block_size  == 4096); +    } +    return (blk_cfg.geometry.heads == 15) +        && (blk_cfg.geometry.sectors == +            virtio_eckd_sectors_for_block_size(block_size)); +} + +bool virtio_ipl_disk_is_valid(void) +{ +    return virtio_disk_is_scsi() || virtio_disk_is_eckd(); +} + +int virtio_get_block_size(void) +{ +    return blk_cfg.blk_size << blk_cfg.physical_block_exp; +} + +uint8_t virtio_get_heads(void) +{ +    return blk_cfg.geometry.heads; +} + +uint8_t virtio_get_sectors(void) +{ +    return blk_cfg.geometry.sectors; +} + +uint64_t virtio_get_blocks(void) +{ +    return blk_cfg.capacity / +           (virtio_get_block_size() / VIRTIO_SECTOR_SIZE); +} + +void virtio_setup_block(struct subchannel_id schid) +{ +    struct vq_info_block info; +    struct vq_config_block config = {}; + +    blk_cfg.blk_size = 0; /* mark "illegal" - setup started... */ +    guessed_disk_nature = false; + +    virtio_reset(schid); + +    /* +     * Skipping CCW_CMD_READ_FEAT. We're not doing anything fancy, and +     * we'll just stop dead anyway if anything does not work like we +     * expect it. +     */ + +    config.index = 0; +    if (run_ccw(schid, CCW_CMD_READ_VQ_CONF, &config, sizeof(config))) { +        virtio_panic("Could not get block device VQ configuration\n"); +    } +    if (run_ccw(schid, CCW_CMD_READ_CONF, &blk_cfg, sizeof(blk_cfg))) { +        virtio_panic("Could not get block device configuration\n"); +    } +    vring_init(&block, config.num, ring_area, +               KVM_S390_VIRTIO_RING_ALIGN); + +    info.queue = (unsigned long long) ring_area; +    info.align = KVM_S390_VIRTIO_RING_ALIGN; +    info.index = 0; +    info.num = config.num; +    block.schid = schid; + +    if (!run_ccw(schid, CCW_CMD_SET_VQ, &info, sizeof(info))) { +        virtio_set_status(schid, VIRTIO_CONFIG_S_DRIVER_OK); +    } + +    if (!virtio_ipl_disk_is_valid()) { +        /* make sure all getters but blocksize return 0 for invalid IPL disk */ +        memset(&blk_cfg, 0, sizeof(blk_cfg)); +        virtio_assume_scsi(); +    } +} + +bool virtio_is_blk(struct subchannel_id schid) +{ +    int r; +    struct senseid senseid = {}; + +    /* run sense id command */ +    r = run_ccw(schid, CCW_CMD_SENSE_ID, &senseid, sizeof(senseid)); +    if (r) { +        return false; +    } +    if ((senseid.cu_type != 0x3832) || (senseid.cu_model != VIRTIO_ID_BLOCK)) { +        return false; +    } + +    return true; +} + +int enable_mss_facility(void) +{ +    int ret; +    struct chsc_area_sda *sda_area = (struct chsc_area_sda *) chsc_page; + +    memset(sda_area, 0, PAGE_SIZE); +    sda_area->request.length = 0x0400; +    sda_area->request.code = 0x0031; +    sda_area->operation_code = 0x2; + +    ret = chsc(sda_area); +    if ((ret == 0) && (sda_area->response.code == 0x0001)) { +        return 0; +    } +    return -EIO; +} diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h new file mode 100644 index 00000000..c23466b8 --- /dev/null +++ b/pc-bios/s390-ccw/virtio.h @@ -0,0 +1,212 @@ +/* + * Virtio driver bits + * + * Copyright (c) 2013 Alexander Graf <agraf@suse.de> + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#ifndef VIRTIO_H +#define VIRTIO_H + +#include "s390-ccw.h" + +/* Status byte for guest to report progress, and synchronize features. */ +/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */ +#define VIRTIO_CONFIG_S_ACKNOWLEDGE     1 +/* We have found a driver for the device. */ +#define VIRTIO_CONFIG_S_DRIVER          2 +/* Driver has used its parts of the config, and is happy */ +#define VIRTIO_CONFIG_S_DRIVER_OK       4 +/* We've given up on this device. */ +#define VIRTIO_CONFIG_S_FAILED          0x80 + +enum virtio_dev_type { +    VIRTIO_ID_NET = 1, +    VIRTIO_ID_BLOCK = 2, +    VIRTIO_ID_CONSOLE = 3, +    VIRTIO_ID_BALLOON = 5, +}; + +struct virtio_dev_header { +    enum virtio_dev_type type : 8; +    u8  num_vq; +    u8  feature_len; +    u8  config_len; +    u8  status; +    u8  vqconfig[]; +} __attribute__((packed)); + +struct virtio_vqconfig { +    u64 token; +    u64 address; +    u16 num; +    u8  pad[6]; +} __attribute__((packed)); + +struct vq_info_block { +    u64 queue; +    u32 align; +    u16 index; +    u16 num; +} __attribute__((packed)); + +struct vq_config_block { +    u16 index; +    u16 num; +} __attribute__((packed)); + +struct virtio_dev { +    struct virtio_dev_header *header; +    struct virtio_vqconfig *vqconfig; +    char *host_features; +    char *guest_features; +    char *config; +}; + +#define KVM_S390_VIRTIO_RING_ALIGN  4096 + +#define VRING_USED_F_NO_NOTIFY  1 + +/* This marks a buffer as continuing via the next field. */ +#define VRING_DESC_F_NEXT       1 +/* This marks a buffer as write-only (otherwise read-only). */ +#define VRING_DESC_F_WRITE      2 +/* This means the buffer contains a list of buffer descriptors. */ +#define VRING_DESC_F_INDIRECT   4 + +/* Internal flag to mark follow-up segments as such */ +#define VRING_HIDDEN_IS_CHAIN   256 + +/* Virtio ring descriptors: 16 bytes.  These can chain together via "next". */ +struct vring_desc { +    /* Address (guest-physical). */ +    u64 addr; +    /* Length. */ +    u32 len; +    /* The flags as indicated above. */ +    u16 flags; +    /* We chain unused descriptors via this, too */ +    u16 next; +} __attribute__((packed)); + +struct vring_avail { +    u16 flags; +    u16 idx; +    u16 ring[]; +} __attribute__((packed)); + +/* u32 is used here for ids for padding reasons. */ +struct vring_used_elem { +    /* Index of start of used descriptor chain. */ +    u32 id; +    /* Total length of the descriptor chain which was used (written to) */ +    u32 len; +} __attribute__((packed)); + +struct vring_used { +    u16 flags; +    u16 idx; +    struct vring_used_elem ring[]; +} __attribute__((packed)); + +struct vring { +    unsigned int num; +    int next_idx; +    int used_idx; +    struct vring_desc *desc; +    struct vring_avail *avail; +    struct vring_used *used; +    struct subchannel_id schid; +}; + + +/*********************************************** + *               Virtio block                  * + ***********************************************/ + +/* + * Command types + * + * Usage is a bit tricky as some bits are used as flags and some are not. + * + * Rules: + *   VIRTIO_BLK_T_OUT may be combined with VIRTIO_BLK_T_SCSI_CMD or + *   VIRTIO_BLK_T_BARRIER.  VIRTIO_BLK_T_FLUSH is a command of its own + *   and may not be combined with any of the other flags. + */ + +/* These two define direction. */ +#define VIRTIO_BLK_T_IN         0 +#define VIRTIO_BLK_T_OUT        1 + +/* This bit says it's a scsi command, not an actual read or write. */ +#define VIRTIO_BLK_T_SCSI_CMD   2 + +/* Cache flush command */ +#define VIRTIO_BLK_T_FLUSH      4 + +/* Barrier before this op. */ +#define VIRTIO_BLK_T_BARRIER    0x80000000 + +/* This is the first element of the read scatter-gather list. */ +struct virtio_blk_outhdr { +        /* VIRTIO_BLK_T* */ +        u32 type; +        /* io priority. */ +        u32 ioprio; +        /* Sector (ie. 512 byte offset) */ +        u64 sector; +}; + +typedef struct VirtioBlkConfig { +    u64 capacity; /* in 512-byte sectors */ +    u32 size_max; /* max segment size (if VIRTIO_BLK_F_SIZE_MAX) */ +    u32 seg_max;  /* max number of segments (if VIRTIO_BLK_F_SEG_MAX) */ + +    struct virtio_blk_geometry { +        u16 cylinders; +        u8 heads; +        u8 sectors; +    } geometry; /* (if VIRTIO_BLK_F_GEOMETRY) */ + +    u32 blk_size; /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ + +    /* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY  */ +    u8 physical_block_exp; /* exponent for physical block per logical block */ +    u8 alignment_offset;   /* alignment offset in logical blocks */ +    u16 min_io_size;       /* min I/O size without performance penalty +                              in logical blocks */ +    u32 opt_io_size;       /* optimal sustained I/O size in logical blocks */ + +    u8 wce; /* writeback mode (if VIRTIO_BLK_F_CONFIG_WCE) */ +} __attribute__((packed)) VirtioBlkConfig; + +bool virtio_guessed_disk_nature(void); +void virtio_assume_scsi(void); +void virtio_assume_eckd(void); + +extern bool virtio_disk_is_scsi(void); +extern bool virtio_disk_is_eckd(void); +extern bool virtio_ipl_disk_is_valid(void); +extern int virtio_get_block_size(void); +extern uint8_t virtio_get_heads(void); +extern uint8_t virtio_get_sectors(void); +extern uint64_t virtio_get_blocks(void); +extern int virtio_read_many(ulong sector, void *load_addr, int sec_num); + +#define VIRTIO_SECTOR_SIZE 512 + +static inline ulong virtio_eckd_sector_adjust(ulong sector) +{ +     return sector * (virtio_get_block_size() / VIRTIO_SECTOR_SIZE); +} + +static inline ulong virtio_sector_adjust(ulong sector) +{ +    return virtio_disk_is_eckd() ? virtio_eckd_sector_adjust(sector) : sector; +} + +#endif /* VIRTIO_H */ diff --git a/pc-bios/s390-zipl.rom b/pc-bios/s390-zipl.rom Binary files differnew file mode 100644 index 00000000..3115128e --- /dev/null +++ b/pc-bios/s390-zipl.rom diff --git a/pc-bios/sgabios.bin b/pc-bios/sgabios.bin Binary files differnew file mode 100644 index 00000000..c3da4c3d --- /dev/null +++ b/pc-bios/sgabios.bin diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin Binary files differnew file mode 100644 index 00000000..0398ac67 --- /dev/null +++ b/pc-bios/slof.bin diff --git a/pc-bios/spapr-rtas.bin b/pc-bios/spapr-rtas.bin Binary files differnew file mode 100644 index 00000000..fc24c8ed --- /dev/null +++ b/pc-bios/spapr-rtas.bin diff --git a/pc-bios/spapr-rtas/Makefile b/pc-bios/spapr-rtas/Makefile new file mode 100644 index 00000000..dc8b23e3 --- /dev/null +++ b/pc-bios/spapr-rtas/Makefile @@ -0,0 +1,24 @@ +all: build-all +# Dummy command so that make thinks it has done something +	@true + +include ../../config-host.mak +include $(SRC_PATH)/rules.mak + +$(call set-vpath, $(SRC_PATH)/pc-bios/spapr-rtas) + +.PHONY : all clean build-all + +#CFLAGS += -I$(SRC_PATH) +#QEMU_CFLAGS = $(CFLAGS) + +build-all: spapr-rtas.bin + +%.img: %.o +	$(call quiet-command,$(CC) -nostdlib -o $@ $<,"  Building $(TARGET_DIR)$@") + +%.bin: %.img +	$(call quiet-command,$(OBJCOPY) -O binary -j .text $< $@,"  Building $(TARGET_DIR)$@") + +clean: +	rm -f *.o *.d *.img *.bin *~ diff --git a/pc-bios/spapr-rtas/spapr-rtas.S b/pc-bios/spapr-rtas/spapr-rtas.S new file mode 100644 index 00000000..903bec21 --- /dev/null +++ b/pc-bios/spapr-rtas/spapr-rtas.S @@ -0,0 +1,37 @@ +/* + * QEMU PowerPC pSeries Logical Partition (aka sPAPR) hardware System Emulator + * + * Trivial in-partition RTAS implementation, based on a hypercall + * + * Copyright (c) 2010,2011 David Gibson, IBM Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#define KVMPPC_HCALL_BASE       0xf000 +#define KVMPPC_H_RTAS           (KVMPPC_HCALL_BASE + 0x0) + +.globl	_start +_start: +	mr	4,3 +	lis	3,KVMPPC_H_RTAS@h +	ori	3,3,KVMPPC_H_RTAS@l +	sc	1 +	blr diff --git a/pc-bios/u-boot.e500 b/pc-bios/u-boot.e500 Binary files differnew file mode 100755 index 00000000..6e547de6 --- /dev/null +++ b/pc-bios/u-boot.e500 diff --git a/pc-bios/vgabios-cirrus.bin b/pc-bios/vgabios-cirrus.bin Binary files differnew file mode 100644 index 00000000..dde85029 --- /dev/null +++ b/pc-bios/vgabios-cirrus.bin diff --git a/pc-bios/vgabios-qxl.bin b/pc-bios/vgabios-qxl.bin Binary files differnew file mode 100644 index 00000000..5c43bd22 --- /dev/null +++ b/pc-bios/vgabios-qxl.bin diff --git a/pc-bios/vgabios-stdvga.bin b/pc-bios/vgabios-stdvga.bin Binary files differnew file mode 100644 index 00000000..b2dd8f91 --- /dev/null +++ b/pc-bios/vgabios-stdvga.bin diff --git a/pc-bios/vgabios-virtio.bin b/pc-bios/vgabios-virtio.bin Binary files differnew file mode 100644 index 00000000..03ac8a7d --- /dev/null +++ b/pc-bios/vgabios-virtio.bin diff --git a/pc-bios/vgabios-vmware.bin b/pc-bios/vgabios-vmware.bin Binary files differnew file mode 100644 index 00000000..15e21c2a --- /dev/null +++ b/pc-bios/vgabios-vmware.bin diff --git a/pc-bios/vgabios.bin b/pc-bios/vgabios.bin Binary files differnew file mode 100644 index 00000000..84f1561d --- /dev/null +++ b/pc-bios/vgabios.bin  | 
