diff options
42 files changed, 16494 insertions, 1 deletions
diff --git a/Makefile.inc b/Makefile.inc index 0fb86ce643..ec7854099b 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -50,7 +50,7 @@ PHONY+= clean-abuild coreboot lint lint-stable build-dirs ####################################################################### # root source directories of coreboot -subdirs-y := src/lib src/console src/device src/ec src/southbridge +subdirs-y := src/lib src/console src/device src/ec src/southbridge src/soc subdirs-y += src/northbridge src/superio src/drivers src/cpu src/vendorcode subdirs-y += util/cbfstool util/sconfig util/nvramtool subdirs-y += src/arch/$(ARCHDIR-y) diff --git a/src/Kconfig b/src/Kconfig index 8646b19fb1..31a41ab80e 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -261,6 +261,8 @@ comment "Super I/O" source src/superio/Kconfig comment "Embedded Controllers" source src/ec/Kconfig +comment "SoC" +source src/soc/Kconfig endmenu diff --git a/src/soc/Kconfig b/src/soc/Kconfig new file mode 100644 index 0000000000..ac29205c9b --- /dev/null +++ b/src/soc/Kconfig @@ -0,0 +1,3 @@ +if ARCH_X86 +source src/soc/intel/Kconfig +endif diff --git a/src/soc/Makefile.inc b/src/soc/Makefile.inc new file mode 100644 index 0000000000..fdf9db0d59 --- /dev/null +++ b/src/soc/Makefile.inc @@ -0,0 +1,4 @@ +################################################################################ +## Subdirectories +################################################################################ +subdirs-y += intel diff --git a/src/soc/intel/Kconfig b/src/soc/intel/Kconfig new file mode 100644 index 0000000000..07099b32b6 --- /dev/null +++ b/src/soc/intel/Kconfig @@ -0,0 +1 @@ +source src/soc/intel/baytrail/Kconfig diff --git a/src/soc/intel/Makefile.inc b/src/soc/intel/Makefile.inc new file mode 100644 index 0000000000..ad798174be --- /dev/null +++ b/src/soc/intel/Makefile.inc @@ -0,0 +1 @@ +subdirs-$(CONFIG_SOC_INTEL_BAYTRAIL) += baytrail diff --git a/src/soc/intel/baytrail/Kconfig b/src/soc/intel/baytrail/Kconfig new file mode 100644 index 0000000000..deee31a708 --- /dev/null +++ b/src/soc/intel/baytrail/Kconfig @@ -0,0 +1,236 @@ + +config SOC_INTEL_BAYTRAIL + bool + help + Bay Trail M/D part support. + +if SOC_INTEL_BAYTRAIL + +config CPU_SPECIFIC_OPTIONS + def_bool y + select SMP + select SSE2 + select UDELAY_TSC + select TSC_CONSTANT_RATE + select SMM_TSEG + select SMM_MODULES + select RELOCATABLE_MODULES + select DYNAMIC_CBMEM + select SUPPORT_CPU_UCODE_IN_CBFS + select TSC_SYNC_MFENCE + select CAR_MIGRATION + select MMCONF_SUPPORT + select MMCONF_SUPPORT_DEFAULT + select HAVE_SMI_HANDLER + select CACHE_MRC_SETTINGS + select CACHE_ROM + select SPI_FLASH + +config BOOTBLOCK_CPU_INIT + string + default "soc/intel/baytrail/bootblock/bootblock.c" + +config MMCONF_BASE_ADDRESS + hex + default 0xe0000000 + +config MAX_CPUS + int + default 4 + +config CPU_ADDR_BITS + int + default 36 + +config SMM_TSEG_SIZE + hex + default 0x800000 + +config SMM_RESERVED_SIZE + hex + default 0x100000 + +config HAVE_MRC + bool "Add a Memory Reference Code binary" + default y + help + Select this option to add a blob containing + memory reference code. + Note: Without this binary coreboot will not work + +if HAVE_MRC + +config MRC_FILE + string "Intel memory refeference code path and filename" + default "3rdparty/northbridge/intel/sandybridge/systemagent-r6.bin" + help + The path and filename of the file to use as System Agent + binary. Note that this points to the sandybridge binary file + which is will not work, but it serves its purpose to do builds. + +config MRC_BIN_ADDRESS + hex + default 0xfffa0000 + +config CACHE_MRC_SETTINGS + bool "Save cached MRC settings" + default n + +if CACHE_MRC_SETTINGS + +config MRC_SETTINGS_CACHE_BASE + hex + default 0xffb00000 + +config MRC_SETTINGS_CACHE_SIZE + hex + default 0x10000 + +endif # CACHE_MRC_SETTINGS + +endif # HAVE_MRC + +config CAR_TILE_SIZE + hex + default 0x8000 + help + The tile size is the limit that can be assigned to cache-as-ram + region as well as the amount of code cache used during cache-as-ram. + Also note that (DCACHE_RAM_BASE ^ MRC_BIN_ADDRESS) & CAR_TILE_SIZE == + CAR_TILE_SIZE. + +# Cache As RAM region layout: +# +# +-------------+ DCACHE_RAM_BASE + DCACHE_RAM_SIZE + DCACHE_RAM_MRC_VAR_SIZE +# | MRC usage | +# | | +# +-------------+ DCACHE_RAM_BASE + DCACHE_RAM_SIZE +# | Stack |\ +# | | | * DCACHE_RAM_ROMSTAGE_STACK_SIZE +# | v |/ +# +-------------+ +# | ^ | +# | | | +# | CAR Globals | +# +-------------+ DCACHE_RAM_BASE +# +# Note that the MRC binary is linked to assume the region marked as "MRC usage" +# starts at DCACHE_RAM_BASE + DCACHE_RAM_SIZE. If those values change then +# a new MRC binary needs to be produced with the updated start and size +# information. + +config DCACHE_RAM_BASE + hex + default 0xff7f8000 + +config DCACHE_RAM_SIZE + hex + default 0x1000 + help + The size of the cache-as-ram region required during bootblock + and/or romstage. Note DCACHE_RAM_SIZE and DCACHE_RAM_MRC_VAR_SIZE + must add up to a power of 2. + +config DCACHE_RAM_MRC_VAR_SIZE + hex + default 0x7000 + help + The amount of cache-as-ram region required by the reference code. + +config DCACHE_RAM_ROMSTAGE_STACK_SIZE + hex + default 0x800 + help + The amount of anticipated stack usage from the data cache + during pre-ram rom stage execution. + +config RESET_ON_INVALID_RAMSTAGE_CACHE + bool "Reset the system on S3 wake when ramstage cache invalid." + default n + depends on RELOCATABLE_RAMSTAGE + help + The baytrail romstage code caches the loaded ramstage program + in SMM space. On S3 wake the romstage will copy over a fresh + ramstage that was cached in the SMM space. This option determines + the action to take when the ramstage cache is invalid. If selected + the system will reset otherwise the ramstage will be reloaded from + cbfs. + +config CBFS_SIZE + hex "Size of CBFS filesystem in ROM" + default 0x100000 + help + On Bay Trail systems the firmware image has to store a lot more + than just coreboot, including: + - a firmware descriptor + - Intel Management Engine firmware + - MRC cache information + This option allows to limit the size of the CBFS portion in the + firmware image. + +config ENABLE_BUILTIN_COM1 + bool "Enable builtin COM1 Serial Port" + default n + help + The PMC has a legacy COM1 serial port. Choose this option to + configure the pads and enable it. This serial port can be used for + the debug console. + +config HAVE_ME_BIN + bool "Add Intel Management Engine firmware" + default y + help + The Intel processor in the selected system requires a special firmware + for an integrated controller called Management Engine (ME). The ME + firmware might be provided in coreboot's 3rdparty repository. If + not and if you don't have the firmware elsewhere, you can still + build coreboot without it. In this case however, you'll have to make + sure that you don't overwrite your ME firmware on your flash ROM. + +config ME_BIN_PATH + string "Path to management engine firmware" + depends on HAVE_ME_BIN + default "3rdparty/mainboard/$(MAINBOARDDIR)/me.bin" + +config HAVE_IFD_BIN + bool + default y + +config BUILD_WITH_FAKE_IFD + bool "Build with a fake IFD" + default y if !HAVE_IFD_BIN + help + If you don't have an Intel Firmware Descriptor (ifd.bin) for your + board, you can select this option and coreboot will build without it. + Though, the resulting coreboot.rom will not contain all parts required + to get coreboot running on your board. You can however write only the + BIOS section to your board's flash ROM and keep the other sections + untouched. Unfortunately the current version of flashrom doesn't + support this yet. But there is a patch pending [1]. + + WARNING: Never write a complete coreboot.rom to your flash ROM if it + was built with a fake IFD. It just won't work. + + [1] http://www.flashrom.org/pipermail/flashrom/2013-June/011083.html + +config IFD_BIOS_SECTION + depends on BUILD_WITH_FAKE_IFD + string + default "" + +config IFD_ME_SECTION + depends on BUILD_WITH_FAKE_IFD + string + default "" + +config IFD_PLATFORM_SECTION + depends on BUILD_WITH_FAKE_IFD + string + default "" + +config IFD_BIN_PATH + string "Path to intel firmware descriptor" + depends on !BUILD_WITH_FAKE_IFD + default "3rdparty/mainboard/$(MAINBOARDDIR)/descriptor.bin" + +endif diff --git a/src/soc/intel/baytrail/Makefile.inc b/src/soc/intel/baytrail/Makefile.inc new file mode 100644 index 0000000000..90b39ebba4 --- /dev/null +++ b/src/soc/intel/baytrail/Makefile.inc @@ -0,0 +1,65 @@ +subdirs-y += microcode +subdirs-y += romstage +subdirs-y += ../../../cpu/x86/lapic +subdirs-y += ../../../cpu/x86/mtrr +subdirs-y += ../../../cpu/x86/tsc + +ramstage-y += memmap.c +romstage-y += memmap.c +ramstage-y += tsc_freq.c +romstage-y += tsc_freq.c +ramstage-$(CONFIG_CACHE_MRC_SETTINGS) += nvm.c +ramstage-$(CONFIG_CACHE_MRC_SETTINGS) += mrc_cache.c +romstage-$(CONFIG_CACHE_MRC_SETTINGS) += mrc_cache.c +ramstage-y += spi.c +ramstage-y += chip.c +ramstage-y += iosf.c +romstage-y += iosf.c + + +# Remove as ramstage gets fleshed out +ramstage-y += placeholders.c + +INCLUDES += -Isrc/soc/intel/baytrail/ + +# Run an intermediate step when producing coreboot.rom +# that adds additional components to the final firmware +# image outside of CBFS +INTERMEDIATE:=baytrail_add_me + +ifeq ($(CONFIG_BUILD_WITH_FAKE_IFD),y) +IFD_BIN_PATH := $(objgenerated)/ifdfake.bin +IFD_SECTIONS := $(addprefix -b ,$(CONFIG_IFD_BIOS_SECTION:"%"=%)) \ + $(addprefix -m ,$(CONFIG_IFD_ME_SECTION:"%"=%)) \ + $(addprefix -p ,$(CONFIG_IFD_PLATFORM_SECTION:"%"=%)) +else +IFD_BIN_PATH := $(CONFIG_IFD_BIN_PATH) +endif + +baytrail_add_me: $(obj)/coreboot.pre $(IFDTOOL) $(IFDFAKE) +ifeq ($(CONFIG_BUILD_WITH_FAKE_IFD),y) + printf "\n** WARNING **\n" + printf "Coreboot will be built with a fake Intel Firmware Descriptor (IFD).\n" + printf "Never write a complete coreboot.rom with a fake IFD to your board's\n" + printf "flash ROM! Make sure that you only write valid flash regions.\n\n" + printf " IFDFAKE Building a fake Intel Firmware Descriptor\n" + $(IFDFAKE) $(IFD_SECTIONS) $(IFD_BIN_PATH) +endif + printf " DD Adding Intel Firmware Descriptor\n" + dd if=$(IFD_BIN_PATH) \ + of=$(obj)/coreboot.pre conv=notrunc >/dev/null 2>&1 +ifeq ($(CONFIG_HAVE_ME_BIN),y) + printf " IFDTOOL me.bin -> coreboot.pre\n" + $(objutil)/ifdtool/ifdtool \ + -i ME:$(CONFIG_ME_BIN_PATH) \ + $(obj)/coreboot.pre + mv $(obj)/coreboot.pre.new $(obj)/coreboot.pre +endif + +# Add memory reference code blob. +cbfs-files-$(CONFIG_HAVE_MRC) += mrc.bin +mrc.bin-file := $(call strip_quotes,$(CONFIG_MRC_FILE)) +mrc.bin-position := $(CONFIG_MRC_BIN_ADDRESS) +mrc.bin-type := 0xab + +PHONY += baytrail_add_me diff --git a/src/soc/intel/baytrail/acpi/globalnvs.asl b/src/soc/intel/baytrail/acpi/globalnvs.asl new file mode 100644 index 0000000000..5b000930d1 --- /dev/null +++ b/src/soc/intel/baytrail/acpi/globalnvs.asl @@ -0,0 +1,284 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of + * the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +/* Global Variables */ + +Name(\PICM, 0) // IOAPIC/8259 +Name(\DSEN, 1) // Display Output Switching Enable + +/* Global ACPI memory region. This region is used for passing information + * between coreboot (aka "the system bios"), ACPI, and the SMI handler. + * Since we don't know where this will end up in memory at ACPI compile time, + * we have to fix it up in coreboot's ACPI creation phase. + */ + + +OperationRegion (GNVS, SystemMemory, 0xC0DEBABE, 0xf00) +Field (GNVS, ByteAcc, NoLock, Preserve) +{ + /* Miscellaneous */ + Offset (0x00), + OSYS, 16, // 0x00 - Operating System + SMIF, 8, // 0x02 - SMI function + PRM0, 8, // 0x03 - SMI function parameter + PRM1, 8, // 0x04 - SMI function parameter + SCIF, 8, // 0x05 - SCI function + PRM2, 8, // 0x06 - SCI function parameter + PRM3, 8, // 0x07 - SCI function parameter + LCKF, 8, // 0x08 - Global Lock function for EC + PRM4, 8, // 0x09 - Lock function parameter + PRM5, 8, // 0x0a - Lock function parameter + P80D, 32, // 0x0b - Debug port (IO 0x80) value + LIDS, 8, // 0x0f - LID state (open = 1) + PWRS, 8, // 0x10 - Power State (AC = 1) + /* Thermal policy */ + Offset (0x11), + TLVL, 8, // 0x11 - Throttle Level Limit + FLVL, 8, // 0x12 - Current FAN Level + TCRT, 8, // 0x13 - Critical Threshold + TPSV, 8, // 0x14 - Passive Threshold + TMAX, 8, // 0x15 - CPU Tj_max + F0OF, 8, // 0x16 - FAN 0 OFF Threshold + F0ON, 8, // 0x17 - FAN 0 ON Threshold + F0PW, 8, // 0x18 - FAN 0 PWM value + F1OF, 8, // 0x19 - FAN 1 OFF Threshold + F1ON, 8, // 0x1a - FAN 1 ON Threshold + F1PW, 8, // 0x1b - FAN 1 PWM value + F2OF, 8, // 0x1c - FAN 2 OFF Threshold + F2ON, 8, // 0x1d - FAN 2 ON Threshold + F2PW, 8, // 0x1e - FAN 2 PWM value + F3OF, 8, // 0x1f - FAN 3 OFF Threshold + F3ON, 8, // 0x20 - FAN 3 ON Threshold + F3PW, 8, // 0x21 - FAN 3 PWM value + F4OF, 8, // 0x22 - FAN 4 OFF Threshold + F4ON, 8, // 0x23 - FAN 4 ON Threshold + F4PW, 8, // 0x24 - FAN 4 PWM value + TMPS, 8, // 0x25 - Temperature Sensor ID + /* Processor Identification */ + Offset (0x28), + APIC, 8, // 0x28 - APIC Enabled by coreboot + MPEN, 8, // 0x29 - Multi Processor Enable + PCP0, 8, // 0x2a - PDC CPU/CORE 0 + PCP1, 8, // 0x2b - PDC CPU/CORE 1 + PPCM, 8, // 0x2c - Max. PPC state + PCNT, 8, // 0x2d - Processor count + /* Super I/O & CMOS config */ + Offset (0x32), + NATP, 8, // 0x32 - + S5U0, 8, // 0x33 - Enable USB0 in S5 + S5U1, 8, // 0x34 - Enable USB1 in S5 + S3U0, 8, // 0x35 - Enable USB0 in S3 + S3U1, 8, // 0x36 - Enable USB1 in S3 + S33G, 8, // 0x37 - Enable 3G in S3 + CMEM, 32, // 0x38 - CBMEM TOC + /* Integrated Graphics Device */ + Offset (0x3c), + IGDS, 8, // 0x3c - IGD state (primary = 1) + TLST, 8, // 0x3d - Display Toggle List pointer + CADL, 8, // 0x3e - Currently Attached Devices List + PADL, 8, // 0x3f - Previously Attached Devices List + CSTE, 16, // 0x40 - Current display state + NSTE, 16, // 0x42 - Next display state + SSTE, 16, // 0x44 - Set display state + Offset (0x46), + NDID, 8, // 0x46 - Number of Device IDs + DID1, 32, // 0x47 - Device ID 1 + DID2, 32, // 0x4b - Device ID 2 + DID3, 32, // 0x4f - Device ID 3 + DID4, 32, // 0x53 - Device ID 4 + DID5, 32, // 0x57 - Device ID 5 + + /* TPM support */ + Offset (0x5b), + TPMP, 8, // 0x5b - TPM Present + TPME, 8, // 0x5c - TPM Enable + + /* LynxPoint Serial IO device BARs */ + Offset (0x60), + S0B0, 32, // 0x60 - D21:F0 Serial IO SDMA BAR0 + S1B0, 32, // 0x64 - D21:F1 Serial IO I2C0 BAR0 + S2B0, 32, // 0x68 - D21:F2 Serial IO I2C1 BAR0 + S3B0, 32, // 0x6c - D21:F3 Serial IO SPI0 BAR0 + S4B0, 32, // 0x70 - D21:F4 Serial IO SPI1 BAR0 + S5B0, 32, // 0x74 - D21:F5 Serial IO UAR0 BAR0 + S6B0, 32, // 0x78 - D21:F6 Serial IO UAR1 BAR0 + S7B0, 32, // 0x7c - D23:F0 Serial IO SDIO BAR0 + S0B1, 32, // 0x80 - D21:F0 Serial IO SDMA BAR1 + S1B1, 32, // 0x84 - D21:F1 Serial IO I2C0 BAR1 + S2B1, 32, // 0x88 - D21:F2 Serial IO I2C1 BAR1 + S3B1, 32, // 0x8c - D21:F3 Serial IO SPI0 BAR1 + S4B1, 32, // 0x90 - D21:F4 Serial IO SPI1 BAR1 + S5B1, 32, // 0x94 - D21:F5 Serial IO UAR0 BAR1 + S6B1, 32, // 0x98 - D21:F6 Serial IO UAR1 BAR1 + S7B1, 32, // 0x9c - D23:F0 Serial IO SDIO BAR1 + + Offset (0xa0), + CBMC, 32, // 0xa0 - coreboot mem console pointer + + /* IGD OpRegion */ + Offset (0xb4), + ASLB, 32, // 0xb4 - IGD OpRegion Base Address + IBTT, 8, // 0xb8 - IGD boot panel device + IPAT, 8, // 0xb9 - IGD panel type cmos option + ITVF, 8, // 0xba - IGD TV format cmos option + ITVM, 8, // 0xbb - IGD TV minor format option + IPSC, 8, // 0xbc - IGD panel scaling + IBLC, 8, // 0xbd - IGD BLC config + IBIA, 8, // 0xbe - IGD BIA config + ISSC, 8, // 0xbf - IGD SSC config + I409, 8, // 0xc0 - IGD 0409 modified settings + I509, 8, // 0xc1 - IGD 0509 modified settings + I609, 8, // 0xc2 - IGD 0609 modified settings + I709, 8, // 0xc3 - IGD 0709 modified settings + IDMM, 8, // 0xc4 - IGD Power conservation feature + IDMS, 8, // 0xc5 - IGD DVMT memory size + IF1E, 8, // 0xc6 - IGD function 1 enable + HVCO, 8, // 0xc7 - IGD HPLL VCO + NXD1, 32, // 0xc8 - IGD _DGS next DID1 + NXD2, 32, // 0xcc - IGD _DGS next DID2 + NXD3, 32, // 0xd0 - IGD _DGS next DID3 + NXD4, 32, // 0xd4 - IGD _DGS next DID4 + NXD5, 32, // 0xd8 - IGD _DGS next DID5 + NXD6, 32, // 0xdc - IGD _DGS next DID6 + NXD7, 32, // 0xe0 - IGD _DGS next DID7 + NXD8, 32, // 0xe4 - IGD _DGS next DID8 + + ISCI, 8, // 0xe8 - IGD SMI/SCI mode (0: SCI) + PAVP, 8, // 0xe9 - IGD PAVP data + Offset (0xeb), + OSCC, 8, // 0xeb - PCIe OSC control + NPCE, 8, // 0xec - native pcie support + PLFL, 8, // 0xed - platform flavor + BREV, 8, // 0xee - board revision + DPBM, 8, // 0xef - digital port b mode + DPCM, 8, // 0xf0 - digital port c mode + DPDM, 8, // 0xf1 - digital port d mode + ALFP, 8, // 0xf2 - active lfp + IMON, 8, // 0xf3 - current graphics turbo imon value + MMIO, 8, // 0xf4 - 64bit mmio support + + /* ChromeOS specific */ + Offset (0x100), + #include <vendorcode/google/chromeos/acpi/gnvs.asl> +} + +/* Set flag to enable USB charging in S3 */ +Method (S3UE) +{ + Store (One, \S3U0) + Store (One, \S3U1) +} + +/* Set flag to disable USB charging in S3 */ +Method (S3UD) +{ + Store (Zero, \S3U0) + Store (Zero, \S3U1) +} + +/* Set flag to enable USB charging in S5 */ +Method (S5UE) +{ + Store (One, \S5U0) + Store (One, \S5U1) +} + +/* Set flag to disable USB charging in S5 */ +Method (S5UD) +{ + Store (Zero, \S5U0) + Store (Zero, \S5U1) +} + +/* Set flag to enable 3G module in S3 */ +Method (S3GE) +{ + Store (One, \S33G) +} + +/* Set flag to disable 3G module in S3 */ +Method (S3GD) +{ + Store (Zero, \S33G) +} + +External (\_TZ.THRM) +External (\_TZ.SKIN) + +Method (TZUP) +{ + /* Update Primary Thermal Zone */ + If (CondRefOf (\_TZ.THRM, Local0)) { + Notify (\_TZ.THRM, 0x81) + } + + /* Update Secondary Thermal Zone */ + If (CondRefOf (\_TZ.SKIN, Local0)) { + Notify (\_TZ.SKIN, 0x81) + } +} + +/* Update Fan 0 thresholds */ +Method (F0UT, 2) +{ + Store (Arg0, \F0OF) + Store (Arg1, \F0ON) + TZUP () +} + +/* Update Fan 1 thresholds */ +Method (F1UT, 2) +{ + Store (Arg0, \F1OF) + Store (Arg1, \F1ON) + TZUP () +} + +/* Update Fan 2 thresholds */ +Method (F2UT, 2) +{ + Store (Arg0, \F2OF) + Store (Arg1, \F2ON) + TZUP () +} + +/* Update Fan 3 thresholds */ +Method (F3UT, 2) +{ + Store (Arg0, \F3OF) + Store (Arg1, \F3ON) + TZUP () +} + +/* Update Fan 4 thresholds */ +Method (F4UT, 2) +{ + Store (Arg0, \F4OF) + Store (Arg1, \F4ON) + TZUP () +} + +/* Update Temperature Sensor ID */ +Method (TMPU, 1) +{ + Store (Arg0, \TMPS) + TZUP () +} diff --git a/src/soc/intel/baytrail/acpi/sleepstates.asl b/src/soc/intel/baytrail/acpi/sleepstates.asl new file mode 100644 index 0000000000..06bfcb6a58 --- /dev/null +++ b/src/soc/intel/baytrail/acpi/sleepstates.asl @@ -0,0 +1,27 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2007-2009 coresystems GmbH + * + * 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; version 2 of + * the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +Name(\_S0, Package(){0x0,0x0,0x0,0x0}) +// Name(\_S1, Package(){0x1,0x1,0x0,0x0}) +Name(\_S3, Package(){0x5,0x5,0x0,0x0}) +Name(\_S4, Package(){0x6,0x6,0x0,0x0}) +Name(\_S5, Package(){0x7,0x7,0x0,0x0}) + diff --git a/src/soc/intel/baytrail/acpi/southcluster.asl b/src/soc/intel/baytrail/acpi/southcluster.asl new file mode 100644 index 0000000000..307841b368 --- /dev/null +++ b/src/soc/intel/baytrail/acpi/southcluster.asl @@ -0,0 +1,32 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of + * the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +Scope(\) +{ + // IO-Trap at 0x800. This is the ACPI->SMI communication interface. + + OperationRegion(IO_T, SystemIO, 0x800, 0x10) + Field(IO_T, ByteAcc, NoLock, Preserve) + { + Offset(0x8), + TRP0, 8 // IO-Trap at 0x808 + } +} diff --git a/src/soc/intel/baytrail/baytrail/acpi.h b/src/soc/intel/baytrail/baytrail/acpi.h new file mode 100644 index 0000000000..917eb26d06 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/acpi.h @@ -0,0 +1,29 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_ACPI_H_ +#define _BAYTRAIL_ACPI_H_ + +#include <arch/acpi.h> + +void acpi_create_intel_hpet(acpi_hpet_t * hpet); +void acpi_create_serialio_ssdt(acpi_header_t *ssdt); + +#endif /* _BAYTRAIL_ACPI_H_ */ + diff --git a/src/soc/intel/baytrail/baytrail/gpio.h b/src/soc/intel/baytrail/baytrail/gpio.h new file mode 100644 index 0000000000..68e32416fc --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/gpio.h @@ -0,0 +1,70 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_GPIO_H_ +#define _BAYTRAIL_GPIO_H_ + +#include <stdint.h> +#include <arch/io.h> +#include <baytrail/iomap.h> + +/* Registers sitting behind the IO_BASE_ADDRESS */ + +#define SCORE_PCONF_OFFSET 0x0000 +#define SSUS_PCONF_OFFSET 0x2000 + +static inline unsigned int score_pconf0(int pad_num) +{ + return IO_BASE_ADDRESS + SCORE_PCONF_OFFSET + pad_num * 16; +} + + +static inline unsigned int ssus_pconf0(int pad_num) +{ + return IO_BASE_ADDRESS + SSUS_PCONF_OFFSET + pad_num * 16; +} + +static inline void score_select_func(int pad, int func) +{ + uint32_t reg; + uint32_t pconf0_addr = score_pconf0(pad); + + reg = read32(pconf0_addr); + reg &= ~0x7; + reg |= func & 0x7; + write32(pconf0_addr, reg); +} + +static inline void ssus_select_func(int pad, int func) +{ + uint32_t reg; + uint32_t pconf0_addr = ssus_pconf0(pad); + + reg = read32(pconf0_addr); + reg &= ~0x7; + reg |= func & 0x7; + write32(pconf0_addr, reg); +} + +/* SCORE Pad definitions. */ +#define PCU_SMB_CLK_PAD 88 +#define PCU_SMB_DATA_PAD 90 +#define PCU_SMB_ALERT_PAD 92 + +#endif /* _BAYTRAIL_GPIO_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/iomap.h b/src/soc/intel/baytrail/baytrail/iomap.h new file mode 100644 index 0000000000..ea2d648e36 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/iomap.h @@ -0,0 +1,38 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_IOMAP_H_ +#define _BAYTRAIL_IOMAP_H_ + + +/* Memory Mapped IO bases. */ + +#define PMC_BASE_ADDRESS 0xfed03000 +#define IO_BASE_ADDRESS 0xfed0c000 +#define ILB_BASE_ADDRESS 0xfed08000 +#define SPI_BASE_ADDRESS 0xfed01000 +#define MPHY_BASE_ADDRESS 0xfef00000 +#define RCBA_BASE_ADDRESS 0xfed1c000 + +/* IO Port base */ +#define ACPI_BASE_ADDRESS 0x0400 +#define GPIO_BASE_ADDRESS 0x0500 +#define SMBUS_BASE_ADDRESS 0xefa0 + +#endif /* _BAYTRAIL_IOMAP_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/iosf.h b/src/soc/intel/baytrail/baytrail/iosf.h new file mode 100644 index 0000000000..6ff087bdb6 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/iosf.h @@ -0,0 +1,111 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_IOSF_H_ +#define _BAYTRAIL_IOSF_H_ + +#include <stdint.h> +#include <baytrail/pci_devs.h> + +/* + * The Bay Trail SoC has a message network called IOSF Sideband. The access + * routines are through 3 registers in PCI config space of 00:00.0: + * MCR - control register + * MDR - data register + * MCRX - control register extension + * The extension regist is only used for addresses that don't fit into the + * 8 bit register address. + */ + +#ifndef PCI_DEV +#define PCI_DEV(SEGBUS, DEV, FN) ( \ + (((SEGBUS) & 0xFFF) << 20) | \ + (((DEV) & 0x1F) << 15) | \ + (((FN) & 0x07) << 12)) +#endif +#define IOSF_PCI_DEV PCI_DEV(0,SOC_DEV,SOC_FUNC) + +#define MCR_REG 0xd0 +#define IOSF_OPCODE(x) ((x) << 24) +#define IOSF_PORT(x) ((0xff & (x)) << 16) +#define IOSF_REG(x) ((0xff & (x)) << 8) +#define IOSF_BYTE_EN 0xf0 +#define MDR_REG 0xd4 +#define MCRX_REG 0xd8 + +uint32_t iosf_bunit_read(int reg); +void iosf_bunit_write(int reg, uint32_t val); + +/* IOSF ports. */ +#define IOSF_PORT_AUNIT 0x00 /* IO Arbiter unit */ +#define IOSF_PORT_SYSMEMC 0x01 /* System Memory Controller */ +#define IOSF_PORT_CPU_BUS 0x02 /* CPU Bus Interface Controller */ +#define IOSF_PORT_BUNIT 0x03 /* System Memroy Arbiter/Bunit */ +#define IOSF_PORT_PMC 0x04 /* Power Management Controller */ +#define IOSF_PORT_GFX 0x06 /* Graphics Adapter */ +#define IOSF_PORT_SYSMEMIO 0x0c /* System Memory IO */ +#define IOSF_PORT_USBPHY 0x43 /* USB PHY */ +#define IOSF_PORT_SATAPHY 0xa3 /* SATA PHY */ +#define IOSF_PORT_PCIEPHY 0xa3 /* PCIE PHY */ + +/* Read and write opcodes differ per port. */ +#define IOSF_OP_READ_AUNIT 0x10 +#define IOSF_OP_WRITE_AUNIT (IOSF_OP_READ_AUNIT | 1) +#define IOSF_OP_READ_SYSMEMC 0x10 +#define IOSF_OP_WRITE_SYSMEMC (IOSF_OP_READ_SYSMEMC | 1) +#define IOSF_OP_READ_CPU_BUS 0x10 +#define IOSF_OP_WRITE_CPU_BUS (IOSF_OP_READ_CPU_BUS | 1) +#define IOSF_OP_READ_BUNIT 0x10 +#define IOSF_OP_WRITE_BUNIT (IOSF_OP_READ_BUNIT | 1) +#define IOSF_OP_READ_PMC 0x06 +#define IOSF_OP_WRITE_PMC (IOSF_OP_READ_PMC | 1) +#define IOSF_OP_READ_GFX 0x00 +#define IOSF_OP_WRITE_GFX (IOSF_OP_READ_GFX | 1) +#define IOSF_OP_READ_SYSMEMIO 0x06 +#define IOSF_OP_WRITE_SYSMEMIO (IOSF_OP_READ_SYSMEMIO | 1) +#define IOSF_OP_READ_USBPHY 0x06 +#define IOSF_OP_WRITE_USBPHY (IOSF_OP_READ_USBPHY | 1) +#define IOSF_OP_READ_SATAPHY 0x00 +#define IOSF_OP_WRITE_SATAPHY (IOSF_OP_READ_SATAPHY | 1) +#define IOSF_OP_READ_PCIEPHY 0x00 +#define IOSF_OP_WRITE_PCIEPHY (IOSF_OP_READ_PCIEPHY | 1) + + +/* + * BUNIT Registers. + */ + +#define BNOCACHE 0x23 +/* BMBOUND has a 128MiB granularity. Highest address is 0xf8000000. */ +#define BUNIT_BMBOUND 0x25 +/* BMBOUND_HI describes the available ram above 4GiB. It has a + * 256MiB granularity. Physical address bits 35:28 are compared with 31:24 + * bits in the BMBOUND_HI register. Also note that since BMBOUND has 128MiB + * granularity care needs to be taken with the e820 map to account for a hole + * in the ram. */ +#define BUNIT_BMBOUND_HI 0x26 +#define BUNIT_MMCONF_REG 0x27 +/* The SMMRR registers define the SMM region in MiB granularity. */ +#define BUNIT_SMRRL 0x2e +#define BUNIT_SMRRH 0x2f +# define BUNIT_SMRR_ENABLE (1 << 31) + + + +#endif /* _BAYTRAIL_IOSF_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/lpc.h b/src/soc/intel/baytrail/baytrail/lpc.h new file mode 100644 index 0000000000..17dc4b533c --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/lpc.h @@ -0,0 +1,34 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_LPC_H_ +#define _BAYTRAIL_LPC_H_ + +/* PCI config registers in LPC bridge. */ +#define ABASE 0x40 +#define PBASE 0x44 +#define GBASE 0x48 +#define IOBASE 0x4c +#define IBASE 0x50 +#define SBASE 0x54 +#define MPBASE 0x58 +#define UART_CONT 0x80 +#define RCBA 0xf0 + +#endif /* _BAYTRAIL_LPC_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/mrc_cache.h b/src/soc/intel/baytrail/baytrail/mrc_cache.h new file mode 100644 index 0000000000..6791ec4a82 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/mrc_cache.h @@ -0,0 +1,40 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _MRC_CACHE_H_ +#define _MRC_CACHE_H_ + +#include <stddef.h> +#include <stdint.h> + +/* Wrapper object to save MRC information. */ +struct mrc_saved_data { + uint32_t signature; + uint32_t size; + uint32_t checksum; + uint32_t reserved; + uint8_t data[0]; +} __attribute__((packed)); + +/* Locate the most recently saved MRC data. */ +int mrc_cache_get_current(const struct mrc_saved_data **cache); + +/* Stash the resulting MRC data to be saved in non-volatile storage later. */ +int mrc_cache_stash_data(void *data, size_t size); +#endif /* _MRC_CACHE_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/mrc_wrapper.h b/src/soc/intel/baytrail/baytrail/mrc_wrapper.h new file mode 100644 index 0000000000..556746bb53 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/mrc_wrapper.h @@ -0,0 +1,88 @@ +/* + * MRC wrapper definitions + * + * Copyright 2013 Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Google Inc. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _MRC_WRAPPER_H_ +#define _MRC_WRAPPER_H_ + +#define MRC_PARAMS_VER 1 + +#define NUM_CHANNELS 2 + +enum { + DRAM_INFO_SPD_SMBUS, /* Use the typical SPD smbus access. */ + DRAM_INFO_SPD_MEM, /* SPD info in memory. */ + DRAM_INFO_DETAILED, /* Timing info not in SPD format. */ +}; + +enum dram_type { + DRAM_DDR3, + DRAM_DDR3L, + DRAM_LPDDR3, +}; + +/* Errors returned by the MRC wrapper. */ +enum mrc_wrapper_error { + INVALID_VER = -1, + INVALID_DRAM_TYPE = -2, + INVALID_SLEEP_MODE = -3, + PLATFORM_SETTINGS_FAIL = -4, + DIMM_DETECTION_FAILURE = -5, + MEMORY_CONFIG_FAILURE = -6, +}; + +struct mrc_mainboard_params { + int dram_type; + int dram_info_location; /* DRAM_INFO_* */ + int spd_addrs[NUM_CHANNELS]; + void *dram_data[NUM_CHANNELS]; /* SPD or Timing specific data. */ +} __attribute__((packed)); + +struct mrc_params { + /* Mainboard Inputs */ + int version; + + struct mrc_mainboard_params mainboard; + + void (*console_out)(unsigned char byte); + + int prev_sleep_state; + + int saved_data_size; + const void *saved_data; + + int txe_size_mb; /* TXE memory size in megabytes. */ + + /* Outputs */ + void *txe_base_address; + int data_to_save_size; + void *data_to_save; +} __attribute__((packed)); + +/* Call into wrapper. */ +typedef int (*mrc_wrapper_entry_t)(struct mrc_params *); + +#endif /* _MRC_WRAPPER_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/msr.h b/src/soc/intel/baytrail/baytrail/msr.h new file mode 100644 index 0000000000..1934a31354 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/msr.h @@ -0,0 +1,25 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_MSR_H_ +#define _BAYTRAIL_MSR_H_ + +#define MSR_PLATFORM_INFO 0xce + +#endif /* _BAYTRAIL_IOSF_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/nvm.h b/src/soc/intel/baytrail/baytrail/nvm.h new file mode 100644 index 0000000000..d0cbf7b0e6 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/nvm.h @@ -0,0 +1,34 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _NVM_H_ +#define _NVM_H_ + +#include <stddef.h> + +/* Determine if area is erased. returns 1 if erased. 0 otherwise. */ +int nvm_is_erased(const void *start, size_t size); + +/* Erase region according to start and size. Returns < 0 on error else 0. */ +int nvm_erase(void *start, size_t size); + +/* Write data to NVM. Returns 0 on success < 0 on error. */ +int nvm_write(void *start, const void *data, size_t size); + +#endif /* _NVM_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/nvs.h b/src/soc/intel/baytrail/baytrail/nvs.h new file mode 100644 index 0000000000..4283ca13d5 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/nvs.h @@ -0,0 +1,136 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2008-2009 coresystems GmbH + * Copyright (C) 2011 Google Inc + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "vendorcode/google/chromeos/gnvs.h" +typedef struct { + /* Miscellaneous */ + u16 osys; /* 0x00 - Operating System */ + u8 smif; /* 0x02 - SMI function call ("TRAP") */ + u8 prm0; /* 0x03 - SMI function call parameter */ + u8 prm1; /* 0x04 - SMI function call parameter */ + u8 scif; /* 0x05 - SCI function call (via _L00) */ + u8 prm2; /* 0x06 - SCI function call parameter */ + u8 prm3; /* 0x07 - SCI function call parameter */ + u8 lckf; /* 0x08 - Global Lock function for EC */ + u8 prm4; /* 0x09 - Lock function parameter */ + u8 prm5; /* 0x0a - Lock function parameter */ + u32 p80d; /* 0x0b - Debug port (IO 0x80) value */ + u8 lids; /* 0x0f - LID state (open = 1) */ + u8 pwrs; /* 0x10 - Power state (AC = 1) */ + /* Thermal policy */ + u8 tlvl; /* 0x11 - Throttle Level Limit */ + u8 flvl; /* 0x12 - Current FAN Level */ + u8 tcrt; /* 0x13 - Critical Threshold */ + u8 tpsv; /* 0x14 - Passive Threshold */ + u8 tmax; /* 0x15 - CPU Tj_max */ + u8 f0of; /* 0x16 - FAN 0 OFF Threshold */ + u8 f0on; /* 0x17 - FAN 0 ON Threshold */ + u8 f0pw; /* 0x18 - FAN 0 PWM value */ + u8 f1of; /* 0x19 - FAN 1 OFF Threshold */ + u8 f1on; /* 0x1a - FAN 1 ON Threshold */ + u8 f1pw; /* 0x1b - FAN 1 PWM value */ + u8 f2of; /* 0x1c - FAN 2 OFF Threshold */ + u8 f2on; /* 0x1d - FAN 2 ON Threshold */ + u8 f2pw; /* 0x1e - FAN 2 PWM value */ + u8 f3of; /* 0x1f - FAN 3 OFF Threshold */ + u8 f3on; /* 0x20 - FAN 3 ON Threshold */ + u8 f3pw; /* 0x21 - FAN 3 PWM value */ + u8 f4of; /* 0x22 - FAN 4 OFF Threshold */ + u8 f4on; /* 0x23 - FAN 4 ON Threshold */ + u8 f4pw; /* 0x24 - FAN 4 PWM value */ + u8 tmps; /* 0x25 - Temperature Sensor ID */ + u8 rsvd3[2]; + /* Processor Identification */ + u8 apic; /* 0x28 - APIC enabled */ + u8 mpen; /* 0x29 - MP capable/enabled */ + u8 pcp0; /* 0x2a - PDC CPU/CORE 0 */ + u8 pcp1; /* 0x2b - PDC CPU/CORE 1 */ + u8 ppcm; /* 0x2c - Max. PPC state */ + u8 pcnt; /* 0x2d - Processor Count */ + u8 rsvd4[4]; + /* Super I/O & CMOS config */ + u8 natp; /* 0x32 - SIO type */ + u8 s5u0; /* 0x33 - Enable USB0 in S5 */ + u8 s5u1; /* 0x34 - Enable USB1 in S5 */ + u8 s3u0; /* 0x35 - Enable USB0 in S3 */ + u8 s3u1; /* 0x36 - Enable USB1 in S3 */ + u8 s33g; /* 0x37 - Enable S3 in 3G */ + u32 cmem; /* 0x38 - CBMEM TOC */ + /* Integrated Graphics Device */ + u8 igds; /* 0x3c - IGD state */ + u8 tlst; /* 0x3d - Display Toggle List Pointer */ + u8 cadl; /* 0x3e - currently attached devices */ + u8 padl; /* 0x3f - previously attached devices */ + u16 cste; /* 0x40 - current display state */ + u16 nste; /* 0x42 - next display state */ + u16 sste; /* 0x44 - set display state */ + u8 ndid; /* 0x46 - number of device ids */ + u32 did[5]; /* 0x47 - 5b device id 1..5 */ + /* TPM support */ + u8 tpmp; /* 0x5b - TPM Present */ + u8 tpme; /* 0x5c - TPM Enable */ + u8 rsvd5[3]; + /* LynxPoint Serial IO device BARs */ + u32 s0b[8]; /* 0x60 - 0x7f - BAR0 */ + u32 s1b[8]; /* 0x80 - 0x9f - BAR1 */ + u32 cbmc; /* 0xa0 - 0xa3 - coreboot memconsole */ + u8 rsvd6[16]; + /* IGD OpRegion (not implemented yet) */ + u32 aslb; /* 0xb4 - IGD OpRegion Base Address */ + u8 ibtt; /* 0xb8 - IGD boot type */ + u8 ipat; /* 0xb9 - IGD panel type */ + u8 itvf; /* 0xba - IGD TV format */ + u8 itvm; /* 0xbb - IGD TV minor format */ + u8 ipsc; /* 0xbc - IGD Panel Scaling */ + u8 iblc; /* 0xbd - IGD BLC configuration */ + u8 ibia; /* 0xbe - IGD BIA configuration */ + u8 issc; /* 0xbf - IGD SSC configuration */ + u8 i409; /* 0xc0 - IGD 0409 modified settings */ + u8 i509; /* 0xc1 - IGD 0509 modified settings */ + u8 i609; /* 0xc2 - IGD 0609 modified settings */ + u8 i709; /* 0xc3 - IGD 0709 modified settings */ + u8 idmm; /* 0xc4 - IGD Power Conservation */ + u8 idms; /* 0xc5 - IGD DVMT memory size */ + u8 if1e; /* 0xc6 - IGD Function 1 Enable */ + u8 hvco; /* 0xc7 - IGD HPLL VCO */ + u32 nxd[8]; /* 0xc8 - IGD next state DIDx for _DGS */ + u8 isci; /* 0xe8 - IGD SMI/SCI mode (0: SCI) */ + u8 pavp; /* 0xe9 - IGD PAVP data */ + u8 rsvd12; /* 0xea - rsvd */ + u8 oscc; /* 0xeb - PCIe OSC control */ + u8 npce; /* 0xec - native pcie support */ + u8 plfl; /* 0xed - platform flavor */ + u8 brev; /* 0xee - board revision */ + u8 dpbm; /* 0xef - digital port b mode */ + u8 dpcm; /* 0xf0 - digital port c mode */ + u8 dpdm; /* 0xf1 - digital port c mode */ + u8 alfp; /* 0xf2 - active lfp */ + u8 imon; /* 0xf3 - current graphics turbo imon value */ + u8 mmio; /* 0xf4 - 64bit mmio support */ + u8 rsvd13[11]; /* 0xf5 - rsvd */ + + /* ChromeOS specific (starts at 0x100)*/ + chromeos_acpi_t chromeos; +} __attribute__((packed)) global_nvs_t; + +#ifdef __SMM__ +/* Used in SMM to find the ACPI GNVS address */ +global_nvs_t *smm_get_gnvs(void); +#endif diff --git a/src/soc/intel/baytrail/baytrail/pci_devs.h b/src/soc/intel/baytrail/baytrail/pci_devs.h new file mode 100644 index 0000000000..46c6ea6f41 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/pci_devs.h @@ -0,0 +1,149 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_PCI_DEVS_H_ +#define _BAYTRAIL_PCI_DEVS_H_ + +/* All these devices live on bus 0 with the associated device and function */ + +/* SoC transaction router */ +#define SOC_DEV 0 +#define SOC_FUNC 0 +# define SOC_DEVID 0x0f00 + +/* Graphics and Display */ +#define GFX_DEV 2 +#define GFX_FUNC 0 +# define GFX_DEVID 0x0f31 + +/* MMC Port */ +#define MMC_DEV 16 +#define MMC_FUNC 0 +# define MMC_DEVID 0x0f14 + +/* SDIO Port */ +#define SDIO_DEV 17 +#define SDIO_FUNC 0 +# define SDIO_DEVID 0x0f15 + +/* SD Port */ +#define SD_DEV 18 +#define SD_FUNC 0 +# define SD_DEVID 0x0f16 + +/* SATA */ +#define SATA_DEV 19 +#define SATA_FUNC 0 +# define ACHI1_DEVID 0x0f22 +# define ACHI2_DEVID 0x0f23 + +/* xHCI */ +#define XHCI_DEV 20 +#define XHCI_FUNC 0 +# define XCHI_DEVID 0x0f35 + +/* LPE Audio */ +#define LPE_DEV 21 +#define LPE_FUNC 0 +# define LPE_DEVID 0x0f28 + +/* Serial IO 1 */ +#define SIO1_DEV 24 +# define SIO_DMA1_DEV SIO1_DEV +# define SIO_DMA1_FUNC 0 +# define SIO_DMA1_DEVID 0x0f40 +# define I2C1_DEV SIO1_DEV +# define I2C1_FUNC 1 +# define I2C1_DEVID 0x0f41 +# define I2C2_DEV SIO1_DEV +# define I2C2_FUNC 2 +# define I2C2_DEVID 0x0f42 +# define I2C3_DEV SIO1_DEV +# define I2C3_FUNC 3 +# define I2C3_DEVID 0x0f43 +# define I2C4_DEV SIO1_DEV +# define I2C4_FUNC 4 +# define I2C4_DEVID 0x0f44 +# define I2C5_DEV SIO1_DEV +# define I2C5_FUNC 5 +# define I2C5_DEVID 0x0f45 +# define I2C6_DEV SIO1_DEV +# define I2C6_FUNC 6 +# define I2C6_DEVID 0x0f46 +# define I2C7_DEV SIO1_DEV +# define I2C7_FUNC 7 +# define I2C7_DEVID 0x0f47 + +/* Trusted Execution Engine */ +#define TXE_DEV 26 +#define TXE_FUNC 0 +# define TXE_DEVID 0x0f18 + +/* HD Audio */ +#define HDA_DEV 27 +#define HDA_FUNC 0 +# define HDA_DEVID 0x0f04 + +/* PCIe Ports */ +#define PCIE_DEV 28 +# define PCIE_PORT1_FUNC 0 +# define PCIE_PORT1_DEVID 0x0f48 +# define PCIE_PORT2_FUNC 1 +# define PCIE_PORT2_DEVID 0x0f4a +# define PCIE_PORT3_FUNC 2 +# define PCIE_PORT3_DEVID 0x0f4c +# define PCIE_PORT4_FUNC 3 +# define PCIE_PORT4_DEVID 0x0f4e + +/* EHCI */ +#define EHCI_DEV 29 +#define EHCI_FUNC 29 +# define EHCI_DEVID 0x0f34 + +/* Serial IO 2 */ +#define SIO2_DEV 30 +# define SIO_DMA2_DEV SIO2_DEV +# define SIO_DMA2_FUNC 0 +# define SIO_DMA2_DEVID 0x0f06 +# define PWM1_DEV SIO2_DEV +# define PWM1_FUNC 1 +# define PWM1_DEVID 0x0f08 +# define PWM2_DEV SIO2_DEV +# define PWM2_FUNC 2 +# define PWM2_DEVID 0x0f09 +# define HSUART1_DEV SIO2_DEV +# define HSUART1_FUNC 3 +# define HSUART1_DEVID 0x0f0a +# define HSUART2_DEV SIO2_DEV +# define HSUART2_FUNC 4 +# define HSUART2_DEVID 0x0f0c +# define SPI_DEV SIO2_DEV +# define SPI_FUNC 5 +# define SPI_DEVID 0xf0e + +/* Platform Controller Unit */ +#define PCU_DEV 31 +# define LPC_DEV PCU_DEV +# define LPC_FUNC 0 +# define LPC_DEVID 0x0f1c +# define SMBUS_DEV PCU_DEV +# define SMBUS_FUNC 3 +# define SMBUS_DEVID 0x0f12 + +#endif /* _BAYTRAIL_PCI_DEVS_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/pmc.h b/src/soc/intel/baytrail/baytrail/pmc.h new file mode 100644 index 0000000000..64de97ade1 --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/pmc.h @@ -0,0 +1,30 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_PMC_H_ +#define _BAYTRAIL_PMC_H_ + + +#define IOCOM1 0x3f8 + +/* Memory mapped IO registers behind PMC_BASE_ADDRESS */ +#define GEN_PMCONF1 0x20 +# define UART_EN (1 << 24) + +#endif /* _BAYTRAIL_PMC_H_ */ diff --git a/src/soc/intel/baytrail/baytrail/romstage.h b/src/soc/intel/baytrail/baytrail/romstage.h new file mode 100644 index 0000000000..b0755e5e6d --- /dev/null +++ b/src/soc/intel/baytrail/baytrail/romstage.h @@ -0,0 +1,46 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_ROMSTAGE_H_ +#define _BAYTRAIL_ROMSTAGE_H_ + +#if !defined(__PRE_RAM__) +#error "Don't include romstage.h from a ramstage compilation unit!" +#endif + +#include <arch/cpu.h> +#include <baytrail/mrc_wrapper.h> + +struct romstage_params { + struct mrc_params *mrc_params; +}; + +void mainboard_romstage_entry(unsigned long bist); +void romstage_common(const struct romstage_params *params); +void * asmlinkage romstage_main(unsigned long bist); +void asmlinkage romstage_after_car(void); +void raminit(struct mrc_params *mp, int prev_sleep_state); + +#if CONFIG_ENABLE_BUILTIN_COM1 +void byt_config_com1_and_enable(void); +#else +static inline void byt_config_com1_and_enable(void) { } +#endif + +#endif /* _BAYTRAIL_ROMSTAGE_H_ */ diff --git a/src/soc/intel/baytrail/bootblock/bootblock.c b/src/soc/intel/baytrail/bootblock/bootblock.c new file mode 100644 index 0000000000..66120d9125 --- /dev/null +++ b/src/soc/intel/baytrail/bootblock/bootblock.c @@ -0,0 +1,39 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <baytrail/iosf.h> + +static void bootblock_cpu_init(void) +{ + uint32_t reg; + + /* Set up the MMCONF range. The register lives in the BUNIT. The + * IO variant of the config access needs to be used initially to + * properly configure as the IOSF access registers live in PCI + * config space. */ + reg = 0; + /* Clear the extended register. */ + pci_io_write_config32(IOSF_PCI_DEV, MCRX_REG, reg); + reg = CONFIG_MMCONF_BASE_ADDRESS | 1; + pci_io_write_config32(IOSF_PCI_DEV, MDR_REG, reg); + reg = IOSF_OPCODE(IOSF_OP_WRITE_BUNIT) | IOSF_PORT(IOSF_PORT_BUNIT) | + IOSF_REG(BUNIT_MMCONF_REG) | IOSF_BYTE_EN; + pci_io_write_config32(IOSF_PCI_DEV, MCR_REG, reg); +} diff --git a/src/soc/intel/baytrail/chip.c b/src/soc/intel/baytrail/chip.c new file mode 100644 index 0000000000..5a5c364f5f --- /dev/null +++ b/src/soc/intel/baytrail/chip.c @@ -0,0 +1,74 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <arch/pci_ops.h> + +#include <baytrail/pci_devs.h> +#include <baytrail/ramstage.h> +#include "chip.h" + +static void pci_domain_set_resources(device_t dev) +{ + assign_resources(dev->link_list); +} + +static struct device_operations pci_domain_ops = { + .read_resources = pci_domain_read_resources, + .set_resources = pci_domain_set_resources, + .enable_resources = NULL, + .init = NULL, + .scan_bus = pci_domain_scan_bus, + .ops_pci_bus = pci_bus_default_ops, +}; + +static void cpu_bus_init(device_t dev) +{ + printk(BIOS_DEBUG, "cpu_bus_init()\n"); +} + +static void cpu_bus_noop(device_t dev) { } + +static struct device_operations cpu_bus_ops = { + .read_resources = cpu_bus_noop, + .set_resources = cpu_bus_noop, + .enable_resources = cpu_bus_noop, + .init = cpu_bus_init, + .scan_bus = 0, +}; + + +static void enable_dev(device_t dev) +{ + printk(BIOS_DEBUG, "enable_dev(%s, %d)\n", + dev_name(dev), dev->path.type); + /* Set the operations if it is a special bus type */ + if (dev->path.type == DEVICE_PATH_DOMAIN) { + dev->ops = &pci_domain_ops; + } else if (dev->path.type == DEVICE_PATH_CPU_CLUSTER) { + dev->ops = &cpu_bus_ops; + } +} + +struct chip_operations soc_intel_baytrail_ops = { + CHIP_NAME("Intel BayTrail SoC") + .enable_dev = enable_dev, +}; diff --git a/src/soc/intel/baytrail/chip.h b/src/soc/intel/baytrail/chip.h new file mode 100644 index 0000000000..b6d3f840d3 --- /dev/null +++ b/src/soc/intel/baytrail/chip.h @@ -0,0 +1,29 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BAYTRAIL_CHIP_H_ +#define _BAYTRAIL_CHIP_H_ +/* The devicetree parser expects chip.h to reside directly in the path + * specified by the devicetree. */ + +struct soc_intel_baytrail_config { +}; + +extern struct chip_operations soc_intel_baytrail_ops; +#endif /* _BAYTRAIL_CHIP_H_ */ diff --git a/src/soc/intel/baytrail/iosf.c b/src/soc/intel/baytrail/iosf.c new file mode 100644 index 0000000000..6d4cba9bb6 --- /dev/null +++ b/src/soc/intel/baytrail/iosf.c @@ -0,0 +1,61 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <baytrail/iosf.h> + +#if !defined(__PRE_RAM__) +#define IOSF_PCI_BASE (CONFIG_MMCONF_BASE_ADDRESS + (IOSF_PCI_DEV << 12)) + +static inline void write_iosf_reg(int reg, uint32_t value) +{ + write32(IOSF_PCI_BASE + reg, value); +} +static inline uint32_t read_iosf_reg(int reg) +{ + return read32(IOSF_PCI_BASE + reg); +} +#else +static inline void write_iosf_reg(int reg, uint32_t value) +{ + pci_write_config32(IOSF_PCI_DEV, reg, value); +} +static inline uint32_t read_iosf_reg(int reg) +{ + return pci_read_config32(IOSF_PCI_DEV, reg); +} +#endif + +uint32_t iosf_bunit_read(int reg) +{ + uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_BUNIT) | + IOSF_PORT(IOSF_PORT_BUNIT) | IOSF_REG(reg) | IOSF_BYTE_EN; + + write_iosf_reg(MCR_REG, cr); + return read_iosf_reg(MDR_REG); +} + +void iosf_bunit_write(int reg, uint32_t val) +{ + uint32_t cr = IOSF_OPCODE(IOSF_OP_WRITE_BUNIT) | + IOSF_PORT(IOSF_PORT_BUNIT) | IOSF_REG(reg) | IOSF_BYTE_EN; + + write_iosf_reg(MCR_REG, cr); + write_iosf_reg(MDR_REG, val); +} diff --git a/src/soc/intel/baytrail/memmap.c b/src/soc/intel/baytrail/memmap.c new file mode 100644 index 0000000000..f958bae830 --- /dev/null +++ b/src/soc/intel/baytrail/memmap.c @@ -0,0 +1,27 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <cbmem.h> +#include <baytrail/iosf.h> + +unsigned long get_top_of_ram(void) +{ + return (unsigned long)(iosf_bunit_read(BUNIT_SMRRL) << 20); +} diff --git a/src/soc/intel/baytrail/microcode/M0C3067_0000030f.h b/src/soc/intel/baytrail/microcode/M0C3067_0000030f.h new file mode 100644 index 0000000000..aa39049a12 --- /dev/null +++ b/src/soc/intel/baytrail/microcode/M0C3067_0000030f.h @@ -0,0 +1,13056 @@ +0x000000001, +0x00000030f, +0x008132013, +0x000030673, +0x08692d626, +0x000000001, +0x00000000c, +0x00000cbd0, +0x00000cc00, +0x000000000, +0x000000000, +0x000000000, +0x000000000, +0x0000000a1, +0x000020001, +0x00000030f, +0x000000000, +0x000000000, +0x020130813, +0x000003201, +0x000000001, +0x000030673, +0x000000000, +0x000000000, +0x000000000, +0x000000000, +0x000000000, +0x000000000, +0x000000000, +0x0000032f4, +0x000000000, +0x000000000, +0x000000000, +0x000000000, +0x000000000, +0x000000000, +0x0636d269e, +0x0801be255, +0x01393389a, +0x0c4069453, +0x0cb5ad229, +0x0e27ef1ff, +0x0cd5ba4e5, +0x0fab049c6, +0x0156866db, +0x0c4bf175a, +0x09d00ca4f, +0x0b3e89a09, +0x07d2c8e19, +0x0bf5b667c, +0x07a1a7ac0, +0x026eebc7d, +0x0b2967286, +0x0ceb685c8, +0x0ffba02e6, +0x0144b5468, +0x000c428c9, +0x06d15dd3a, +0x0f9461953, +0x01632a092, +0x0222335da, +0x01fee67d9, +0x0a770513c, +0x04e83def6, +0x0b3d82e5a, +0x050f0b89f, +0x07fe10d45, +0x070f05efd, +0x05f575449, +0x0ab71a0a3, +0x0fb2a6eb5, +0x00283b4e2, +0x058a95566, +0x038a4c957, +0x08a682f1b, +0x0c49b3009, +0x01256e90b, +0x033169c52, +0x0d91585c4, +0x0df78eb29, +0x09f403399, +0x0a9de58da, +0x0fd05c858, +0x05a0f11bc, +0x0c00e7840, +0x0b39bd56a, +0x0b87f38c7, +0x090141c59, +0x0325933f9, +0x00b0e1332, +0x0963c4bef, +0x0f203d9ac, +0x03925365b, +0x02955f8e7, +0x01fc417cb, +0x0d840e4e7, +0x025e9f7fa, +0x0fb769b96, +0x0c7b8da5e, +0x0e81200f0, +0x071291c12, +0x05989b1e5, +0x0c007fdad, +0x0d7c9091f, +0x06a008197, +0x073005539, +0x06d8b436c, +0x0bc606f43, +0x000000011, +0x0ddd911cd, +0x04e9e269c, +0x0eff9a59c, +0x0a5bdfa52, +0x02f97e4b3, +0x03b04dc8e, +0x0a84efce6, +0x0dac6c212, +0x06e780d34, +0x05e294f31, +0x0578699e9, +0x07c58e316, +0x02a434716, +0x01c2e9bc5, +0x0a16d98ae, +0x08f9a1aba, +0x0d8e68cb1, +0x0e731ab03, +0x0d2deec57, +0x051b34f93, +0x0b793d2c9, +0x0eb746864, +0x0f2bf767a, +0x0b13661dc, +0x0e25b4f7c, +0x00006f3ba, +0x0e1f266eb, +0x06fd6c3e0, +0x098e261cc, +0x072467fc8, +0x09ef2f190, +0x0827c05b6, +0x0693d071e, +0x0faddc7c6, +0x0397b286d, +0x0f5deeaab, +0x03e49a3ee, +0x02f4a9685, +0x041ba1713, +0x02a128067, +0x053315d91, +0x0f6b402c7, +0x080380bd3, +0x0de19b741, +0x0cc3fb55e, +0x090ea41be, +0x06519b57a, +0x0e3a35dd0, +0x0cb55fdde, +0x014f1ee93, +0x052f10099, +0x0343df1c4, +0x039b38eb0, +0x0c80191dc, +0x03619ed54, +0x06dec1231, +0x0bfd4940e, +0x0b00713ab, +0x077b82e9b, +0x0a69b529e, +0x059d83ae1, +0x05d829628, +0x08c5a1114, +0x03a3b60a6, +0x0a51111fa, +0x0b30eb375, +0x018b832a5, +0x077ced5c8, +0x0a2e9f499, +0x097c51352, +0x0c674c154, +0x0abc1ad35, +0x061050ae9, +0x06587bcd0, +0x05e16c3ca, +0x0aacb6c10, +0x00b497993, +0x0f73f1f61, +0x01a75e33a, +0x07b8baa99, +0x0a7947a94, +0x07a622440, +0x0647e2dc6, +0x03e9ddd56, +0x0666c867f, +0x04cd51395, +0x0bff3f91b, +0x0e2d3defc, +0x0dd560b47, +0x03d082039, +0x01e8edce0, +0x0da991aa7, +0x0b05bac31, +0x0aa820133, +0x0716d0f2d, +0x0fe9ccdde, +0x029abd185, +0x01ab2fc65, +0x08fe67c6e, +0x0000902dd, +0x036a4a7ce, +0x04a2f8fb1, +0x0a5584548, +0x0874399a8, +0x008c7d8f7, +0x09e68e23f, +0x0387c4fc0, +0x088bca285, +0x03ab8e01c, +0x05fddca0b, +0x0fc5b96e2, +0x063b7f40d, +0x09fb6a7d6, +0x054b64bfb, +0x0cd113319, +0x0be9c5bed, +0x0770aabd2, +0x010abbe11, +0x0539cf509, +0x01e75fc18, +0x08cb757e4, +0x092f10761, +0x06cea98c7, +0x090f0c990, +0x0eb81c54c, +0x0ccc760f8, +0x0d212a59b, +0x08928e76d, +0x03e114fcd, +0x08ff21ceb, +0x02342cb9d, +0x0605bd832, +0x067a072a4, +0x03b50d070, +0x007d5efd1, +0x02474ddb5, +0x0ed547dad, +0x0c450321b, +0x0d4f6df2e, +0x0447d5a38, +0x0b63242a8, +0x008bb8d8b, +0x0ab634896, +0x0ce67bd60, +0x0b36a5f17, +0x0102d8ad6, +0x05e7b3c2a, +0x089df7c9d, +0x03aa3529b, +0x04ced92b7, +0x01a524ca8, +0x0965f361d, +0x03d9dc2f0, +0x073aec282, +0x03a9e2ccd, +0x0c56fbc4a, +0x00cb91681, +0x02bfc7672, +0x0060779e1, +0x09cae9df7, +0x02e00e4e6, +0x0c5a63f00, +0x0e00da22e, +0x045cae0d5, +0x07b8b87a8, +0x0505356c7, +0x0b4a2440f, +0x02524cd6b, +0x0f79915aa, +0x00b27f2da, +0x01172a644, +0x0afa894bd, +0x089479390, +0x019c3f27c, +0x0a7918a33, +0x06bcf275d, +0x05724525a, +0x022897aee, +0x0ae3584a2, +0x07ae594bc, +0x0c14c3376, +0x0cfd8462d, +0x0d760a973, +0x05717d480, +0x0a7c3dde3, +0x0e287fd0c, +0x06853e36b, +0x0a35d3db9, +0x09dc454b1, +0x022276852, +0x03f07416b, +0x0e96ab9cf, +0x0091844c8, +0x076a7deb2, +0x01f36f300, +0x0242840eb, +0x01d309647, +0x0165b78fa, +0x039f308fc, +0x06da7566a, +0x0a6baf114, +0x015fd3845, +0x0db3f480b, +0x01ee46c7c, +0x0d6d7149d, +0x0c9b70a66, +0x0b63eb61c, +0x047780382, +0x0210416c9, +0x0760de074, +0x08a2642ff, +0x019b62f83, +0x0760cd445, +0x0c216b517, +0x057713221, +0x09673be60, +0x0934e7ea2, +0x02a5bdb27, +0x0a2faa7f7, +0x05348cc51, +0x0eacd0a4b, +0x016bac11c, +0x026f8d595, +0x0f49bed81, +0x05ba6e7cf, +0x069b53b65, +0x09cbee693, +0x0fce3b0dc, +0x04a3f3b66, +0x06f33f8aa, +0x0397adc2b, +0x074f0b683, +0x0bd0a2023, +0x0993b8723, +0x09547b43f, +0x0a67266f6, +0x06c8aa901, +0x040ea6c7b, +0x0cacadb91, +0x0979014c2, +0x0854b580b, +0x0586e712e, +0x0abcfbbbb, +0x0d93584f9, +0x0e266445f, +0x026dc1fa4, +0x08a9ac39c, +0x04036ed1a, +0x077d61142, +0x0cc9c763f, +0x0bb203269, +0x01321ee90, +0x05fd510f8, +0x086607efd, +0x00701019f, +0x05ae87519, +0x0249746a8, +0x0719e77f1, +0x0354173c3, +0x00a435e60, +0x084dcfdc9, +0x0164ccec4, +0x016149c8c, +0x05c6a9f64, +0x02642536b, +0x01d15f4c7, +0x04df9df1d, +0x08750adeb, +0x0638a69fe, +0x021e67f23, +0x082560ecd, +0x0391e7b5a, +0x0b335a047, +0x064b4aedb, +0x0ba6c4c8c, +0x08d83ca2e, +0x013cceab5, +0x077f1536b, +0x04cbeeb59, +0x04292f245, +0x0f0cdbb74, +0x00985ffad, +0x0cc5c463a, +0x023ac28a8, +0x044fe6eed, +0x0c9475892, +0x08d94ecaf, +0x02231e3ba, +0x0031cc0a6, +0x04e751f46, +0x0cb962420, +0x066fbeb86, +0x04d6e8d2e, +0x0487d7df2, +0x0f7e58bdb, +0x08a533b4c, +0x0d4f63c71, +0x0dce582aa, +0x06ae33205, +0x004008f13, +0x00bfb3b3e, +0x06c777d50, +0x0fb1f46a1, +0x0be0792d1, +0x0f5bfc238, +0x07d065201, +0x0b0e6e400, +0x0062b38db, +0x0d842ae5d, +0x0b56987cc, +0x0c5764bca, +0x0e5259c34, +0x072cb2d5b, +0x0998a2c92, +0x00efdf213, +0x03a5091ff, +0x04fb5a107, +0x09f4e3506, +0x04ec50bb0, +0x0598e9a3c, +0x0ca81d167, +0x0ecd44804, +0x0d351eb1d, +0x0beedc0d5, +0x0b6fc6e2c, +0x065818119, +0x0d97e32d1, +0x0078e9d97, +0x0122248e5, +0x07bec600c, +0x03cf3beb2, +0x0721c95f5, +0x08d080016, +0x0e76f1711, +0x013726e67, +0x0d7b9e0d2, +0x06d2a5d16, +0x08503bba9, +0x0348ff573, +0x0024fbc66, +0x00cd4cbf4, +0x04efeb77b, +0x0d1178ee4, +0x057f68d05, +0x04c5935bb, +0x013381536, +0x0cdbd0442, +0x0b49cb8fd, +0x09e23cbe7, +0x031683136, +0x0c062af86, +0x03ba2a19b, +0x07f481991, +0x03da8d7b6, +0x0dc3036b0, +0x0da9c3289, +0x09444a2cf, +0x0aab3ee66, +0x0925f9f33, +0x0cb79285c, +0x0de7f908b, +0x0f5c87d21, +0x0848836d7, +0x01706c28d, +0x00acfa65e, +0x0a72adfcb, +0x06d11a116, +0x00b9816bc, +0x0c07532c7, +0x0f6d1be15, +0x0df5eff56, +0x0794316fa, +0x0716a5357, +0x0b8f7868d, +0x04b500131, +0x0d2298943, +0x09948e8e6, +0x00a2f4866, +0x046e0016c, +0x0ab16cd59, +0x07cdef3f3, +0x03fed90bc, +0x0ae2c1bd4, +0x0256e406f, +0x05f22e5eb, +0x092d1a1a1, +0x0adf2dba7, +0x0bdad0d7c, +0x0ad0d29c0, +0x0e3dbabbd, +0x0128e5148, +0x0e5544db0, +0x0dfc4bfb3, +0x0c47a0bcb, +0x0aa30811c, +0x05cfcf7b5, +0x0ad83080f, +0x027632012, +0x088d3d13a, +0x0aabfab43, +0x01dda8092, +0x07a496a36, +0x069032622, +0x08b71da3b, +0x06874deac, +0x07eeb2fac, +0x05fcf9dbd, +0x01eb55996, +0x024d0d3ea, +0x0f1fc9ff2, +0x014153522, +0x01b3b44e8, +0x09e9d61ff, +0x0b19f6bce, +0x0e294b888, +0x010e68279, +0x022d368d2, +0x076be520a, +0x0a5973ec7, +0x0732edb73, +0x07628b85e, +0x05c805117, +0x00f1c7a81, +0x03811e9a1, +0x0538814c4, +0x092843ed2, +0x0b9807e0a, +0x046f8f479, +0x0b0162f1b, +0x0b426d08b, +0x09ac00f73, +0x09b934325, +0x0a691d6e7, +0x01cfb747d, +0x0035a0473, +0x0d3abf8f5, +0x0410456ea, +0x04e33405a, +0x034f73e47, +0x02dd5a42f, +0x0d4079806, +0x066018697, +0x00b89233a, +0x0bcae3dc7, +0x08a82b3a5, +0x0bd8595a2, +0x0854e64a0, +0x0c4105b11, +0x0bca4999f, +0x06ad6de22, +0x0f2047e50, +0x046a881a2, +0x027f62297, +0x072cda692, +0x0b1dd6700, +0x0d569e7c8, +0x0f315deaf, +0x0312b30f2, +0x07e3d364c, +0x06dbed41e, +0x0f9bfa27f, +0x03705536b, +0x01ecc8e8c, +0x01a0a1b89, +0x0a93be1f4, +0x066d7a4dd, +0x0e9dfbace, +0x03e622d78, +0x0e3363994, +0x0cf48166c, +0x0ee2c0357, +0x02852baf2, +0x0f1006ddb, +0x0bfd237e1, +0x00a6ae120, +0x0ceef2f37, +0x0b6856d62, +0x0b3b31cc7, +0x07304d72f, +0x06d540010, +0x03d48978b, +0x06b36b08c, +0x0e7536a93, +0x0b33390f1, +0x01823d4f7, +0x074b8b6e0, +0x062c7fb45, +0x047c1a1ae, +0x020ab9c77, +0x015bae1be, +0x07251c351, +0x0735fcaa6, +0x06c07e6a2, +0x0eaf90777, +0x069d75ff3, +0x0b2398290, +0x0028c2928, +0x0e3cf7273, +0x07edfc1f8, +0x07bc495b8, +0x0088e150a, +0x0c18102d2, +0x0e8cf3cf7, +0x059d8cc69, +0x0b0094f5e, +0x05835f955, +0x0348e0629, +0x0e19a85d6, +0x0855ca3ed, +0x00aebc7d0, +0x0182e8ccc, +0x0d49c2ee6, +0x066aac9f9, +0x093d9d400, +0x0b0098069, +0x04c94f3e8, +0x02cc04660, +0x07dd8b343, +0x090f77eb5, +0x09a2416cd, +0x07d4021cf, +0x0947e21f9, +0x0ed2ff09e, +0x0b728b391, +0x027afc17d, +0x02c0b0c31, +0x0208130fe, +0x06c518286, +0x0c813486d, +0x070e4de4b, +0x06ee43eb9, +0x0b3532f5f, +0x068774802, +0x06061b744, +0x059092514, +0x0dbd94eca, +0x01f32f383, +0x0a829d84f, +0x00d4a93dd, +0x04d67c070, +0x0d0ce67cf, +0x0cabad5b3, +0x0d1b2c647, +0x0a3933b8c, +0x0ce1e4c32, +0x0af58a75c, +0x0a4e1fee9, +0x013eceaf2, +0x053513af0, +0x03be42eb7, +0x08462d564, +0x089cab8b8, +0x071f58230, +0x0835ed132, +0x0a8f4b66e, +0x086fc1d00, +0x085028daa, +0x06b35350c, +0x06e894768, +0x05a670e67, +0x07165de3a, +0x0524bde2b, +0x054e81434, +0x0a7203b5f, +0x0a8212af6, +0x07dd3c461, +0x0a94c449b, +0x0469a6f6b, +0x04583659b, +0x0df7750d7, +0x0229525ad, +0x07419a044, +0x069eb6b87, +0x039efd904, +0x05732bf50, +0x08e8728bc, +0x033bae3c5, +0x0b861f8d0, +0x07f7b3fea, +0x0045d8810, +0x0c55a1a11, +0x051fdee02, +0x0215bfa90, +0x0afaa81a9, +0x0a2701375, +0x0041fcde7, +0x0e5c7b1dc, +0x0b4344977, +0x0c4ed9033, +0x03eae9004, +0x07be7ebd9, +0x06d070aba, +0x003861443, +0x02d616e6d, +0x0c11a6d7f, +0x0c04aed84, +0x022f72e09, +0x010345745, +0x06e71bf9a, +0x0800672e9, +0x01b07e70c, +0x088bc3093, +0x0bfbf10bd, +0x067cad4fc, +0x06e1ace1d, +0x01b317e18, +0x0b30410cd, +0x0e00077be, +0x0902ac678, +0x0570b21d8, +0x08e0fb430, +0x0984206a0, +0x0641918a8, +0x0513c2189, +0x0ecc8d862, +0x074bab12d, +0x058c7a592, +0x0ecbc0384, +0x03be2b9ac, +0x06a5407cd, +0x0f9fc56eb, +0x0159eebdd, +0x0155581ee, +0x078d1a25d, +0x0449ba798, +0x01ddc52b5, +0x0a03daf31, +0x07c1b1a96, +0x01c2f7de4, +0x09c79951a, +0x0c8a030e0, +0x0bc03cd62, +0x0cad4159b, +0x0d5651149, +0x03d79b9e2, +0x0e5fd9f3b, +0x09d493142, +0x097191ba9, +0x01625e4ce, +0x073e9b1ff, +0x05d8d23e3, +0x08730e743, +0x02cd982fb, +0x06072e5d9, +0x048bbe478, +0x04968f5df, +0x08448f163, +0x049700a68, +0x0ddb102de, +0x0fea46a6d, +0x077b829b1, +0x0483a883b, +0x0085e8119, +0x0d43c58f5, +0x09a1fbdd6, +0x0eb0bd2eb, +0x03c0dc25d, +0x0582ee139, +0x0c2e5c78a, +0x021cad086, +0x064e32172, +0x0977a960e, +0x07442387b, +0x0a39a84ac, +0x0356e8107, +0x02373af1c, +0x0eed55841, +0x065219da5, +0x0b3646eeb, +0x005135a7a, +0x09923dc82, +0x007e1ee99, +0x0186893a2, +0x05d643f7d, +0x03c9757fa, +0x07a9b27fd, +0x0ea74ef55, +0x007d0354d, +0x004f60854, +0x09237d803, +0x068240d5b, +0x0e2f49821, +0x09e7c8881, +0x0d7e9090b, +0x04956a701, +0x0e02b8bba, +0x016bc7582, +0x03428023e, +0x0d7da5c26, +0x0d7c1779c, +0x0f7436b14, +0x0291ba75b, +0x0cc409b2e, +0x0be3cbc54, +0x08fa6954f, +0x0a44e9012, +0x002cbbb6b, +0x0b6e38b12, +0x0c644f9af, +0x0cc75bd7b, +0x08d034c03, +0x017ac32dc, +0x040b6e88a, +0x0a4fae293, +0x021fababe, +0x0380b9197, +0x0696c56c3, +0x065ae2b6b, +0x0eb0c96f6, +0x015b6c72d, +0x039b13e90, +0x08cde218e, +0x051129150, +0x0548a4dd3, +0x0c7c6008f, +0x0d86b4197, +0x0b1ba5edb, +0x093d30207, +0x026f8beba, +0x06723eaa5, +0x0c0e37bbd, +0x033ae90e2, +0x07e075bd5, +0x02bdf18fc, +0x02d6f794a, +0x0ad1098cc, +0x0e6ac641f, +0x0f65c23c8, +0x08b11344f, +0x0805a3e53, +0x0ed7c87af, +0x0f1ef6344, +0x0edaec081, +0x0b9241540, +0x0eaa120ae, +0x03c7c6854, +0x079401ca4, +0x0a75a961d, +0x005ec1adb, +0x0e7f4d302, +0x0c31c252c, +0x0ff4ad652, +0x0f2f027c5, +0x0b55f71b9, +0x08f328be1, +0x0dae31a1a, +0x08d9bf7d4, +0x0d0100325, +0x00699e8f8, +0x0d7616ca5, +0x0775c000e, +0x08610c84f, +0x00e72ed49, +0x084ebe6de, +0x06a1847b7, +0x0dfe713c1, +0x01a1d728b, +0x0c62cdd6b, +0x0a5a85af9, +0x003e9422d, +0x0bef665cd, +0x078671a55, +0x07ad2b216, +0x0e60cdb99, +0x0eeefdace, +0x05a80a31b, +0x0532b9cd5, +0x0dd8e1cea, +0x097e8983e, +0x0f9b9c6b1, +0x031a94796, +0x03c1137b9, +0x034ab30cb, +0x089781687, +0x046eab43b, +0x0138772ad, +0x024795ee2, +0x0376ff630, +0x0a28dcca1, +0x0415b8443, +0x0067dd2c4, +0x0dbc2ec65, +0x0d9fa6d45, +0x0cbc92b9c, +0x0233e201f, +0x0d6858307, +0x00d2660b9, +0x0d183ae9d, +0x0221a58a7, +0x02436b0bd, +0x0488c3e90, +0x0175eff0c, +0x036f911c1, +0x0d2ceef1a, +0x056cdd32e, +0x025ebe036, +0x0fe49568f, +0x073aa5fa8, +0x0782a461a, +0x0ba6af225, +0x0e0c49bbc, +0x01894684a, +0x0f2db5bc5, +0x0586a2052, +0x02f895c56, +0x04565bf6d, +0x02c3e4855, +0x04c0a7cc2, +0x0213b13d7, +0x0f2230f04, +0x0037d3081, +0x03d5ca242, +0x0c49c2f16, +0x06baca7ef, +0x00c411c76, +0x029607436, +0x07cfb7c19, +0x04c920034, +0x0c6e86c13, +0x080bf6f79, +0x008aefe25, +0x01797a272, +0x037e9bbf0, +0x0f01f45b5, +0x004517a3f, +0x0208b2128, +0x044255527, +0x0b67ff59d, +0x0fdf3d10e, +0x0a449683f, +0x0e7796c5b, +0x003e64bb2, +0x0e4cb3a15, +0x06187a3ef, +0x0217235d3, +0x087bea99f, +0x0f9148e5e, +0x0eb985731, +0x05dcdeab7, +0x06ffa440e, +0x005b11348, +0x0f5c5c633, +0x0e9b5d5f0, +0x07289b052, +0x0fd6aa430, +0x0ada1bd45, +0x03586f8f6, +0x0c59cef26, +0x05c6fb4f1, +0x060a0a418, +0x09bea6008, +0x0ae7e6fe3, +0x0e5684ae6, +0x02ea86f6c, +0x0b52471ba, +0x068c54ece, +0x0d180dec9, +0x09eb0f093, +0x0995b66b0, +0x0f522791c, +0x07a83ae6d, +0x03e73392b, +0x03fb3947e, +0x09ac143da, +0x0f48534f0, +0x064bd5119, +0x084416580, +0x070d668c1, +0x001173251, +0x0ff472d38, +0x03e72533d, +0x0164f6402, +0x02ddc0228, +0x013b970a4, +0x0043b0c12, +0x053f952a0, +0x0fca52869, +0x0fbde8835, +0x0dee8994a, +0x0ed69c1be, +0x06f1031f6, +0x06e97bf0d, +0x0b87f07b2, +0x0c5109fd1, +0x0bf270748, +0x02a92b2ea, +0x061406018, +0x00909d2ed, +0x0dce1c028, +0x005db4629, +0x0b3f89e98, +0x08cabcefe, +0x0dc7af5c5, +0x096450b3f, +0x01c9fa171, +0x0df265919, +0x09ebf8420, +0x0b2e50bdf, +0x0dfc644f8, +0x04257e689, +0x0a0b54fc6, +0x0a0996a5e, +0x0dab29c95, +0x0ceb1a1ee, +0x0cfa34552, +0x0ed249ff1, +0x041589dc3, +0x03da19ce4, +0x08fb3467b, +0x0f21b4cbc, +0x0b90e44e2, +0x0fd878c41, +0x05d53aa23, +0x08d69e872, +0x04c27585d, +0x08c094557, +0x003b0d638, +0x0f7f4f34d, +0x0c9b4ec4f, +0x0835128bf, +0x04cddd57a, +0x0fc9a8181, +0x083ec67e5, +0x03a387329, +0x05b1e1ed1, +0x019a9a068, +0x085dc609a, +0x007e9bbd8, +0x0bdbc1409, +0x01e3c9b5a, +0x0283c7502, +0x034218d6d, +0x0f3b00805, +0x04c72bb3e, +0x0e08ec1b6, +0x0af81a209, +0x08482f0a2, +0x026753a9a, +0x0260d2e3e, +0x026e48b15, +0x0230c42ec, +0x0ca0da123, +0x08e6c46ed, +0x04930b8ff, +0x0904503b1, +0x09a5aa100, +0x0005e26bf, +0x0a2f22a4c, +0x0978cbd95, +0x0774f3d58, +0x00d4e3481, +0x03367f0ef, +0x038592e4b, +0x0a14b2676, +0x0d0a8cf96, +0x05228adc7, +0x031aaa111, +0x02cf9586a, +0x005ec35a2, +0x0ab7fee97, +0x051b00144, +0x08aa0d672, +0x0c6d3d351, +0x0ffea4806, +0x0e9a3575f, +0x0257b5ba5, +0x0e69cfd2c, +0x0afd477c2, +0x06bcf3cea, +0x03dd56b06, +0x04b00004e, +0x081339fdf, +0x068ebba89, +0x0d4e8c957, +0x007246efd, +0x0da13c334, +0x050508628, +0x038f349e7, +0x066a8f959, +0x045659bd2, +0x0b12439ae, +0x01130d84a, +0x014cfa8e0, +0x013edaebf, +0x09061e932, +0x0e88177ea, +0x0758149c1, +0x014e5aca7, +0x07da5eb5b, +0x0764b0110, +0x0a4a0148c, +0x00c9e41b7, +0x0130d07c9, +0x014e3883c, +0x0c1e47dee, +0x0a07839cb, +0x0e4e92d4a, +0x00c2b65c4, +0x084473451, +0x0382e1db2, +0x0fa5ac56a, +0x04c21f072, +0x0d3cce0fa, +0x0d76da7ac, +0x08abf0d87, +0x095ece61c, +0x05b2e8efe, +0x0d86aed10, +0x0d88e1e16, +0x086e0104b, +0x0cabd5659, +0x0ebc6d108, +0x0dfcd4826, +0x0351fa725, +0x04f1991c2, +0x043b17423, +0x01af3fa88, +0x07a73e092, +0x0fc1cb100, +0x00a32244a, +0x0ffdebe89, +0x002da1fd9, +0x03ccf70bd, +0x0067e5699, +0x0dd910b87, +0x012d8c95d, +0x06ba6aa23, +0x0dc61fe0d, +0x09f3b66b8, +0x08e17cdaa, +0x0edc1c605, +0x09e323dcf, +0x0fea280f1, +0x060298e92, +0x07cd7c6e9, +0x038f05793, +0x0081486b7, +0x0e5a4c776, +0x0932fd436, +0x02a7bcb50, +0x034e0b956, +0x0ef22d04f, +0x00e4f1a25, +0x001a93a52, +0x0d60c0ebb, +0x0fdacab03, +0x06dcc649a, +0x05ed0aa31, +0x0524d73bf, +0x030247911, +0x0ed58e905, +0x0c71ddbd0, +0x0fe7d54a7, +0x02c86e1ce, +0x0c2c7ccef, +0x0066e18c8, +0x04f13cc22, +0x0d1c04d9e, +0x0599ef93a, +0x0a88beed5, +0x01d5ae6fb, +0x0ffba31b1, +0x0d08528ad, +0x08ced053a, +0x07ec4e595, +0x00604444e, +0x0dbef573e, +0x08f9a5080, +0x06f6ede07, +0x00bf0d25f, +0x0db16cabb, +0x05ee2ef2f, +0x00580eadd, +0x0308d3c78, +0x0757f8d88, +0x023b606aa, +0x093f26a05, +0x0b8c42bb4, +0x01abb8209, +0x060222316, +0x0a34703ac, +0x07a72469d, +0x066da20d6, +0x006ef764b, +0x04813ecaf, +0x05377910c, +0x03f3ec268, +0x0edfc0d53, +0x05097b7a0, +0x0677d1896, +0x086725f90, +0x0cbb53be8, +0x0ff5afcf0, +0x02d3df492, +0x0195464dd, +0x0c4e6a437, +0x0a0cc9e8b, +0x0043e8bba, +0x08842b5ee, +0x0b484dd74, +0x06dc208f4, +0x003a505ce, +0x0a2bd456b, +0x004a7e2c2, +0x0f8452b4d, +0x0c74b8ea2, +0x0ae6f2aaf, +0x0da604672, +0x0fd370647, +0x02bd68f66, +0x05154e90d, +0x09265460c, +0x0490561b5, +0x0ee101ff6, +0x0c0f63e05, +0x0a065e401, +0x08d4b734d, +0x0b43615e2, +0x0d25b0950, +0x040c9c6f8, +0x0ecdd2190, +0x08e5f935e, +0x0a0608168, +0x029286fc5, +0x086657dd8, +0x0ecc641f0, +0x0426d9cbf, +0x0a8d1bd3c, +0x09cc211d0, +0x0fc27cbe4, +0x0cfe89c6b, +0x021f2c405, +0x0f5d8804a, +0x0b7c49c67, +0x0fde6d60c, +0x046484660, +0x065a3d3ac, +0x00d3c900a, +0x062a7d196, +0x08db7cecf, +0x06de84e4d, +0x01add807b, +0x02d68b5e9, +0x0df356cca, +0x0c360e074, +0x0fcec5116, +0x06bdfa7bd, +0x010957088, +0x04d2486ed, +0x0d40c4ddc, +0x0757469eb, +0x035227aab, +0x0a8176946, +0x0ce96e48e, +0x06dc61188, +0x006790d8a, +0x03d57f416, +0x008ca5e27, +0x0c97ff894, +0x01f45beb9, +0x0782e55b2, +0x017281cc1, +0x031e4496d, +0x065979ab1, +0x034df6016, +0x07ef438d9, +0x038d69c88, +0x0d90947e6, +0x0a9984e87, +0x0b23ed7dc, +0x0840b550a, +0x0d8ba6a14, +0x038eafb33, +0x055290f85, +0x0dd611dd6, +0x0d062d1b1, +0x086057670, +0x059f8e23a, +0x07961f520, +0x085868da3, +0x0a6a29d2c, +0x060409f7f, +0x085b1d53c, +0x0ef359664, +0x056082bd0, +0x0d4da3c77, +0x02bb47ab2, +0x09fe01a83, +0x0778f2b74, +0x010725b45, +0x0f0f31809, +0x0c431722c, +0x03e7a2e69, +0x0d3a57fff, +0x0c720e025, +0x0c9802bc5, +0x05ba52e78, +0x0315a32aa, +0x0d1107e42, +0x0dfe7a7eb, +0x0b3aa1d12, +0x0aec14181, +0x0266dbae8, +0x092e98209, +0x0fd597e6c, +0x0ca79e2c3, +0x0b4f445ae, +0x0d5adf258, +0x05d016150, +0x0b39e414f, +0x0d1e7e5eb, +0x054acc87e, +0x0e7608351, +0x01a8616dd, +0x0a7b1544c, +0x0798df1d1, +0x0ed477645, +0x0211d4cea, +0x070656d0d, +0x0df6a274f, +0x02c064fd4, +0x0e772df37, +0x0d658e948, +0x0ae932efb, +0x03db6a103, +0x07e50d3d3, +0x0e5627819, +0x0229f0ca7, +0x086562d75, +0x0f2c932fa, +0x04251caea, +0x0e1484866, +0x0a9602f21, +0x0bf965750, +0x05535ecc9, +0x0840bf96b, +0x0cffedc0f, +0x07b97fbbf, +0x07754361c, +0x0a48f5a28, +0x05e8d23b6, +0x0bcb36d0a, +0x08b1c13af, +0x07ab47856, +0x0eecd0423, +0x05852bb77, +0x01570789b, +0x0f539e443, +0x0334ab815, +0x0cde63b91, +0x03d07151f, +0x09317abb7, +0x0b19aa4f4, +0x0b415c907, +0x02f674f0b, +0x08da46772, +0x0e56933fe, +0x0c8370918, +0x0725f3115, +0x0bc3fa3f4, +0x07364729f, +0x020be6be0, +0x094ab1ab2, +0x041c6a08b, +0x04dcb26fd, +0x07526f745, +0x0461bba09, +0x027479756, +0x007a38efc, +0x07860f080, +0x023124882, +0x056ed40bc, +0x0284b7d9e, +0x04b345e11, +0x0d33fbd30, +0x01a80d50d, +0x092e5dda5, +0x02a3b508d, +0x09806c2ff, +0x0fe602e72, +0x0850ab15a, +0x01714b068, +0x0547d4789, +0x01b86ab5b, +0x07d862abd, +0x059406619, +0x02bd82c93, +0x073a8f0af, +0x0264ecbcd, +0x0aa423806, +0x053135459, +0x01cde8563, +0x0750efff5, +0x0edcf43c9, +0x06c0a1ecf, +0x04d6d14b4, +0x0d2cf3c9e, +0x0f823882b, +0x0d1d58dc9, +0x079395f52, +0x0ab45e6b2, +0x00321e54a, +0x0967e6ff4, +0x039380313, +0x0620733d4, +0x0c248945c, +0x0f1bfa3b4, +0x0f5f98512, +0x04df1ad2e, +0x0de85ec86, +0x0258deb96, +0x0e463ed21, +0x0c7803f7d, +0x06aa58beb, +0x0dec7a5df, +0x0195e244a, +0x0abe257f6, +0x0d77247b8, +0x08b5053f0, +0x07a3001da, +0x07c5fa608, +0x01c7e4247, +0x024aa520b, +0x02913956d, +0x06d0dc98b, +0x004a1753f, +0x02574fcb1, +0x089952fa9, +0x0873eacb9, +0x05801531c, +0x0a6376965, +0x07facbf54, +0x079d4b938, +0x001c077bf, +0x09aa2c99b, +0x0bd56dc56, +0x05adcccf6, +0x0d337d9db, +0x0daefe43d, +0x0541381c9, +0x046868a2b, +0x0114e9733, +0x09f1e3db7, +0x074c2481c, +0x066e9aacc, +0x08816c06d, +0x0d8287d6e, +0x0f6ca7a49, +0x0269ac196, +0x0777c8f6c, +0x0678c8794, +0x01a72f9f0, +0x098a82033, +0x0db5ff119, +0x0088b8cce, +0x0cbf0e0f2, +0x091e872e7, +0x0d47759c7, +0x0e35161ca, +0x087d6e78b, +0x0086320e8, +0x02e55c505, +0x0ca282405, +0x030eb8db3, +0x0c9a0ae66, +0x07b57e013, +0x06d25d3ea, +0x01fdcef75, +0x0bd6d455a, +0x0f4a4826b, +0x0ce375e5f, +0x07975f05a, +0x0dd9ce4ed, +0x0eef3f0d8, +0x09c24ced3, +0x0d5195d19, +0x0f3144ee4, +0x021b49695, +0x0a86017fe, +0x0420b27bc, +0x05f79bc8b, +0x0f5443910, +0x0801e84e8, +0x0d339576b, +0x07d16bbc3, +0x0a68e63c3, +0x0ef23596b, +0x07c8857d1, +0x00754f393, +0x0fb26b6fe, +0x0eb8d5dfe, +0x0275c7fdb, +0x0af676d09, +0x0dc81b5a1, +0x04fe0c1de, +0x02fb553a8, +0x038eb552a, +0x03d7ed438, +0x0135cdf60, +0x02bc55986, +0x0a6b7d576, +0x0f3d95554, +0x054c927ac, +0x0de4122e8, +0x0da650899, +0x0f585589d, +0x017f3c9f2, +0x010e1ce60, +0x0f71c7f88, +0x0519be92e, +0x0a844092d, +0x009d76d21, +0x0ac171275, +0x0b53e4db7, +0x0c0c74c4f, +0x0ebe4c296, +0x0e015452c, +0x0b3dffe4c, +0x060e3a96c, +0x0df86c0ce, +0x0c13e9637, +0x01501fb72, +0x0e753e2f7, +0x070c64325, +0x0e8c6062c, +0x0eb0eda39, +0x0850eed72, +0x02ebc11e4, +0x04da1d894, +0x09667c756, +0x08c2a1dfd, +0x00cdbcb10, +0x05139277a, +0x0e0016a17, +0x02010f894, +0x072646af5, +0x021c812da, +0x0227ec3da, +0x01de4acae, +0x0dbb119f9, +0x02b15c462, +0x0c173d212, +0x0fde2a8d0, +0x056515891, +0x0b1dd835d, +0x04a4cefb3, +0x0c9c7e445, +0x0b17b47be, +0x0038d496f, +0x013bcc6fe, +0x0d4569b3c, +0x08fbf8f24, +0x01e0ba2da, +0x0e9426c6c, +0x07dc6bcac, +0x085562aba, +0x089a2026f, +0x035579f21, +0x0c6d734a5, +0x0944c2d56, +0x0aef83956, +0x0bd679725, +0x0f4323ffa, +0x0821750be, +0x09b5f9e78, +0x0ddce3ec5, +0x0d7be656b, +0x0e1471e9a, +0x0dac523d6, +0x0a07e60c7, +0x0f65bd171, +0x023fe9f89, +0x083bb3a85, +0x00c4af673, +0x061c3d560, +0x0d40d0cc4, +0x0057c59da, +0x049d65f4c, +0x0461af175, +0x0a98d099a, +0x039e5b9bc, +0x0a8d2cad5, +0x03e537d97, +0x08221c935, +0x0e5c16415, +0x0248bb488, +0x025e09dad, +0x0232f1e2e, +0x0c50e97fb, +0x0c6e5fdf1, +0x0aefbea90, +0x0577d17f0, +0x08f18a95f, +0x0d4675f9e, +0x0431fc45e, +0x0b20d6df1, +0x049b9f75b, +0x0aa19b267, +0x00c6bfcd3, +0x0d2f745dc, +0x0959c9813, +0x0097130a5, +0x03112a97c, +0x035104038, +0x05fbe8f71, +0x0d074d665, +0x06d5c9e32, +0x0a3203aa8, +0x00c3c7a83, +0x0e7283f17, +0x02942f305, +0x08d264a52, +0x0525254ae, +0x0a092c939, +0x0e8657700, +0x0be0f29a7, +0x06020e281, +0x09e444d53, +0x0dc623b66, +0x0b3b66315, +0x00c244ec6, +0x060967930, +0x0fd368a48, +0x0237a4869, +0x0f135f0e2, +0x080c8fe00, +0x058f11c76, +0x0b8f38abc, +0x0d668c37d, +0x0740b61bc, +0x079f52c3c, +0x08ee12b47, +0x023fb4ffd, +0x06e944d02, +0x0f25910c1, +0x0e331bd93, +0x0f62ab4c1, +0x01d3107d8, +0x0f398ea7e, +0x0416fc29f, +0x010d656b7, +0x0290c29c5, +0x03d969d08, +0x020ba15f9, +0x044195622, +0x0f79205b4, +0x0a80f59ec, +0x050c66c4c, +0x01e84f61c, +0x0f23f9831, +0x0ad98194d, +0x0c246bea4, +0x00de8d5ef, +0x0039f38c9, +0x029e68ab2, +0x07944bb3c, +0x0bface3f2, +0x0b7b4ac01, +0x094f6a295, +0x00953ea77, +0x058d5dd40, +0x08b45f6f5, +0x08fc543b9, +0x06c5d6ff1, +0x0ca4801ea, +0x033f40caf, +0x0ec60c484, +0x0e3c337e9, +0x07fc79fb5, +0x0a8a9acdc, +0x0f00e8953, +0x0d427004b, +0x0ecf19707, +0x0c098aed0, +0x08aa7d970, +0x005c2d629, +0x0be9ee49d, +0x0f3428ad7, +0x0a6f847df, +0x04cb99253, +0x09b61b470, +0x0dd60ec56, +0x0f727103b, +0x0fb5c4c80, +0x0ee2c6070, +0x07afe0dde, +0x0bdba7bae, +0x0e043a378, +0x0b02c456c, +0x079e4d681, +0x0c10962ea, +0x0d080b790, +0x09d0f7bad, +0x0e89a7eab, +0x07d235687, +0x0ba2a9c4c, +0x0da70bd3f, +0x031c5057d, +0x0eecf2a71, +0x0e557fdda, +0x0e81eb661, +0x0f99cb9e1, +0x0aced17eb, +0x0a241eace, +0x0661e43d9, +0x09a97e649, +0x0937d7287, +0x01ca10db1, +0x00f308446, +0x058186f52, +0x09a0bf935, +0x0e07a5c3b, +0x029237a6c, +0x06dd850d1, +0x0cdd88d3e, +0x0c81275ed, +0x057721735, +0x0cc9ee89a, +0x09729c053, +0x0fa531764, +0x0f9828dcf, +0x00a40f3aa, +0x0e35c5967, +0x00abed85d, +0x075d5f714, +0x04aa6da85, +0x0b05d945b, +0x0c36ac0b4, +0x0d142ca07, +0x09c336579, +0x03addb22d, +0x0a276c983, +0x0708e5a27, +0x071a49a1d, +0x03bd187e8, +0x0e2666f6d, +0x075aac5c8, +0x0761c7c2e, +0x0251632a7, +0x0a81371fd, +0x067361946, +0x0232f168d, +0x02e9af0f7, +0x0427de8fc, +0x047f13497, +0x0770abbb8, +0x038ef952e, +0x06cf47b02, +0x06069ac43, +0x021766166, +0x0843f8e47, +0x06e7d89cb, +0x030f9b9f5, +0x0c438756a, +0x0956fbfe6, +0x02447e9f2, +0x011f5adac, +0x0a9881470, +0x023278bce, +0x0e0fac15e, +0x0cd8696f5, +0x021de9ac3, +0x0bd2db0cd, +0x08cc3da36, +0x0b28c0891, +0x0a2fbab19, +0x036c313ae, +0x01858dab7, +0x070e87937, +0x03cd7d737, +0x0babf6b82, +0x09d550890, +0x065196e53, +0x058b92a7b, +0x0ac5391c8, +0x055ad2e7c, +0x01ec746ff, +0x033fdcaaa, +0x00012e6e7, +0x07fc102cf, +0x0803f557a, +0x096f95d90, +0x04c194356, +0x0ca532064, +0x01553aa7a, +0x0412fe8c5, +0x0b64bde3d, +0x0b3e8ed70, +0x026fb418d, +0x05e47e25b, +0x00c58195d, +0x000c5f3ed, +0x0acb84351, +0x014f05466, +0x02114fc66, +0x0610f14d3, +0x0fcf37188, +0x0eb3621a4, +0x040b798ce, +0x07c376b7e, +0x02dec07f3, +0x0baf993c3, +0x09091ad4c, +0x09b4dba73, +0x06305f85c, +0x0e0cdcfd0, +0x06c548e10, +0x03b2d8eb1, +0x08ed5e24f, +0x0562f536b, +0x0ac2089e1, +0x07d60b981, +0x019de7ec5, +0x026bb631b, +0x096ab13f8, +0x0cd7a5145, +0x0e503c2b5, +0x08e06f05f, +0x00770cd40, +0x031faaaf7, +0x05f29b86d, +0x0cdc42580, +0x07da3b5df, +0x0c36683a7, +0x084d8fdef, +0x0ac933a26, +0x058eff9a9, +0x0b69af4d2, +0x0e94c7459, +0x068324c76, +0x0e22fa3fe, +0x0663ffdee, +0x03d3db418, +0x0a79dfeb9, +0x0d8f4ab6b, +0x056d3ed9a, +0x0424d5035, +0x01b4cdf64, +0x01a22fdf6, +0x0c4b86e9a, +0x0cfd3afd5, +0x025dc510a, +0x092f5a5b7, +0x0300486d9, +0x03dd9bf71, +0x048cb352b, +0x0f8af0886, +0x05030c2ed, +0x07b798cff, +0x0c2c788c5, +0x01150da0f, +0x0411a77ef, +0x08dabdb1f, +0x0925562ff, +0x0abbc075f, +0x002c642a4, +0x0bf124967, +0x06b04b014, +0x0da9ede0c, +0x03dd96b13, +0x0e4825d1f, +0x08b29ccef, +0x0314ba0a2, +0x0b500ad64, +0x0b3398d7d, +0x0f29b7736, +0x0e851a831, +0x08509aac8, +0x00e9f1043, +0x053b5af99, +0x0ecb4e38e, +0x01de406de, +0x0983a73f2, +0x00c53e528, +0x0526d0f6b, +0x0f1ccbe55, +0x0d8f0b1ea, +0x0d38657d6, +0x0f745ea6b, +0x03520d73d, +0x0c6ff3249, +0x05cded7bc, +0x0a839742c, +0x0258f5a04, +0x0785a438c, +0x09e92834f, +0x0f49d95f7, +0x00cdf2fb6, +0x052159f0c, +0x015a66da8, +0x094a21cba, +0x067a3518e, +0x03fb81688, +0x096694e05, +0x071076d53, +0x08859b5bd, +0x0e12155b9, +0x06a59040b, +0x057e3dac8, +0x078e1e9d9, +0x0ca69ccc0, +0x0ad4e0f38, +0x0e5bf28cd, +0x03d2cb07f, +0x04692634d, +0x01a4c72f8, +0x0f1f91c94, +0x0202d6b59, +0x0c84b883e, +0x02e38f047, +0x04d058fb9, +0x046e7a835, +0x0c73407e3, +0x0ab50287a, +0x09c548183, +0x000582731, +0x0c0be10a3, +0x0b252750f, +0x063216274, +0x0101e0bce, +0x09948edac, +0x0b89e0e57, +0x0c298cbeb, +0x03304c28d, +0x0fe73856b, +0x037541696, +0x0e0fdafa3, +0x07e74ad9e, +0x09c98518c, +0x0786cb470, +0x0be8e94d6, +0x042e7b139, +0x0ee63dc2c, +0x0a336a187, +0x058f8c647, +0x0391888bd, +0x09dc0ee49, +0x0aab78030, +0x085a31c58, +0x054c8674b, +0x0f523ef27, +0x0f946ed5b, +0x047981167, +0x091ea3421, +0x050acaf57, +0x0abade8fd, +0x0cecf185a, +0x07b68c502, +0x04dc2fbdf, +0x0a8388b95, +0x044d0f4a9, +0x0c27343cb, +0x09726a51a, +0x0670c821d, +0x097980b6e, +0x01b21b080, +0x05b0c0c3d, +0x0fc97f7ce, +0x054676df2, +0x0858cf894, +0x09e2b4e38, +0x0f46da94e, +0x0a1089dc8, +0x0af707a4a, +0x015744b86, +0x015879b38, +0x0e4836564, +0x080341648, +0x01252edc4, +0x0c1f9f40e, +0x0ce500d94, +0x0d93621a2, +0x0e1a3a71c, +0x0b31c78bf, +0x0ea73331a, +0x0449420d3, +0x00318f9a2, +0x061f16b41, +0x05d1bc9a9, +0x0cc95b4df, +0x02882504c, +0x0c9beec78, +0x0cfefc640, +0x05c2a598f, +0x07690888b, +0x010ea4165, +0x029246768, +0x0767be2e1, +0x061f92b50, +0x099da3fa2, +0x01cfe9347, +0x07c4e106c, +0x0525562f8, +0x02eb0ca9a, +0x04b0453ca, +0x064c48896, +0x0fc48d13e, +0x02e2eb5f2, +0x079dd70aa, +0x0f2335863, +0x058e66886, +0x062252d83, +0x09b1fb766, +0x048d9e45a, +0x07dc4a242, +0x067da1887, +0x03109ef07, +0x0677151f4, +0x0d9ca6d34, +0x0b21e697c, +0x0974353d6, +0x06be4add8, +0x043abdfc1, +0x09aed82ca, +0x0580f6546, +0x087f2d920, +0x002282745, +0x0c6bdd73a, +0x0e8f19021, +0x0a9e948bc, +0x06e5cea85, +0x08eb20168, +0x0b9cf2a9a, +0x015cddfad, +0x058a1eb60, +0x0663e4abb, +0x03b1f00df, +0x0095f9e54, +0x018600f71, +0x07ce1e9a2, +0x0aa3f6af8, +0x0e3ef34f6, +0x0a3e63761, +0x0d395f5a4, +0x06a78a61e, +0x0d978abf0, +0x0bc9cdba4, +0x0670766d6, +0x068cd414d, +0x0ca0d0760, +0x08bd7a9e4, +0x0fd97d5d3, +0x09d679da1, +0x042b4e151, +0x0e1dc786e, +0x03a735f63, +0x0a5571f56, +0x0489a51f6, +0x008f2145d, +0x000571b31, +0x0afe1a990, +0x091b7cf3b, +0x0ec938b35, +0x088124e1f, +0x01a2b8a13, +0x005b47363, +0x0bd63f129, +0x0802dcb0a, +0x00549c12f, +0x03bd18b72, +0x06bdc80e5, +0x02fcfdd77, +0x098d8ea0b, +0x0823e2b58, +0x07da424a5, +0x0db7c27e1, +0x05695a41c, +0x07f9ca3eb, +0x09a0d902e, +0x055b36f91, +0x0044e10d8, +0x0a36623b9, +0x03e4ccdb8, +0x05562c79f, +0x0232abddb, +0x0e4051422, +0x001be0624, +0x0277b61f9, +0x0e2ff44de, +0x00e7e32e5, +0x094c6aa8f, +0x016dd7285, +0x0be7c43d6, +0x0c58ff8f9, +0x0283b38e1, +0x01a9a7055, +0x0faca5883, +0x069f44205, +0x0798c7394, +0x035590ef9, +0x000f01c82, +0x0524ee473, +0x0d80b12bb, +0x0150678df, +0x0ee0ddedc, +0x08064a348, +0x0c6ba4a05, +0x0bd97796f, +0x040987f57, +0x00eee2606, +0x0a301e6d2, +0x059eb5b6c, +0x038ff7251, +0x0a62ff5e7, +0x01ae87f0b, +0x0c9a93a10, +0x08180b32c, +0x07cf36d47, +0x00f7a08bb, +0x0a80c09d4, +0x02d1ad8f3, +0x018b88663, +0x0baf00ed9, +0x0041b5aef, +0x0c1f968f6, +0x0078fe15f, +0x03554c82e, +0x0e38cb89b, +0x0f60038de, +0x08aefb575, +0x013ae7182, +0x091e23955, +0x029723478, +0x009a186e0, +0x028d43c3b, +0x0236dec22, +0x0439fdb2d, +0x06cbe5792, +0x0cbf35180, +0x0159a8696, +0x02109758c, +0x0805b8463, +0x084e56b5d, +0x0b264f69f, +0x0ca3793b8, +0x09b801178, +0x08967772f, +0x018fc1b28, +0x0c43df173, +0x05c4c5fe0, +0x0c4036909, +0x09ee48aea, +0x0f8fb471b, +0x01d404413, +0x0a49fb05b, +0x080518683, +0x013fdd52e, +0x0f24ce4c3, +0x05e0e420c, +0x0b5b52f99, +0x0b11cbbe2, +0x0a4fca33f, +0x05a85f46d, +0x075002fe6, +0x0760c578a, +0x0d1541f1b, +0x08b77f94d, +0x0966f1ada, +0x052f88875, +0x0ecb1a888, +0x0217b04f5, +0x0917499e5, +0x0e1ddf22d, +0x0d661a411, +0x04d192234, +0x0c3b59c9a, +0x09eae01ac, +0x0dba9dbdb, +0x01d929b1f, +0x0e1fa2127, +0x0d5b0234b, +0x081ce41f2, +0x07d440fe6, +0x0cc6e6f99, +0x0cd3e4467, +0x04bd388f0, +0x06d0fa4ae, +0x0fec276ce, +0x08431d5cb, +0x0b003e107, +0x06683b80b, +0x099c02c71, +0x0418732f0, +0x071807db0, +0x02cf6cb40, +0x0cf0d0970, +0x0e666feb1, +0x0555eeebf, +0x0f1577170, +0x08b2928a9, +0x0478c7a16, +0x069fefa62, +0x04a8bbc60, +0x0e61e9fc6, +0x044fc5c47, +0x0e5394882, +0x07cf8554e, +0x0f26d0e00, +0x04a8a2da9, +0x09f9d2386, +0x00f85c722, +0x0fecf7184, +0x01c68396c, +0x0712321bb, +0x072f36605, +0x05ed57bfb, +0x04893595d, +0x09a8455be, +0x0a2c8eb1e, +0x06184499e, +0x0ac285ec7, +0x01f590ae9, +0x0d07dc4e7, +0x098232a33, +0x0a8633194, +0x0d6ded0c6, +0x0de4ce750, +0x021d889f2, +0x03557c630, +0x0124944be, +0x00d98ffc9, +0x08c1cd5d0, +0x0b0a18deb, +0x03c540569, +0x0da7e84e2, +0x029c03441, +0x0f91457c1, +0x038f7240b, +0x0f1600e6e, +0x05b29544a, +0x0b11633be, +0x07bceb29e, +0x002bb19fe, +0x0fd239a8a, +0x0105300dd, +0x06a73c7e0, +0x0be27a1b4, +0x0cde4a695, +0x0acde24f8, +0x0d2e65faa, +0x00f082d68, +0x0bbea2cbf, +0x0ad67b256, +0x05180cff0, +0x0e87bd426, +0x0d2d0fe68, +0x0eacc5ffb, +0x053f6deea, +0x0879e5a8e, +0x0273732d5, +0x033d8a0f1, +0x0590f2907, +0x0663bbac9, +0x08537c38c, +0x043f2e69d, +0x0bd8818e8, +0x05436c82c, +0x0943c7887, +0x0a65e69a4, +0x0e5377db6, +0x08b97d64e, +0x0e6809cef, +0x0d9a078c5, +0x04ce906b8, +0x0059e7a30, +0x0701209bc, +0x0700c22f7, +0x0051ef389, +0x05d12084f, +0x08640d7ab, +0x0f5a9e069, +0x0a1e2ecf2, +0x00db0ffdb, +0x028f6b0f4, +0x038659160, +0x0ae477614, +0x06c779217, +0x0f7071bc5, +0x0c9205b6d, +0x0f07915a9, +0x014b8c583, +0x01c9a92b3, +0x0b3806403, +0x0fa3c2892, +0x0408a8d11, +0x0dbd11034, +0x01ec37a40, +0x0ff98fd02, +0x0b71fa461, +0x0bbeb028b, +0x06a437990, +0x0ab00a698, +0x0304e3a1c, +0x0a910f759, +0x053432167, +0x0ed945eb1, +0x0d403140a, +0x086a98c46, +0x01adfd863, +0x06fabd4ab, +0x0c57d5fe9, +0x06fbadcb3, +0x089f56ba8, +0x0cad6e95c, +0x0b4980ea0, +0x0b86d96d8, +0x07fbc66f3, +0x00d918e9c, +0x0b658e1e3, +0x084483e99, +0x0830bc911, +0x0e7eb8bb9, +0x052c73ae9, +0x09ef7db3e, +0x0d324e7ff, +0x0d0b86b69, +0x0f7f76255, +0x07820944f, +0x05c13247a, +0x018b2054e, +0x00f77cd93, +0x050c16aba, +0x0dcb1167d, +0x0c0383d92, +0x0fab27e6b, +0x01ff11b3c, +0x01d232c0d, +0x0c7e2e218, +0x09b09e071, +0x0d48d38e4, +0x0c8cb0afd, +0x0a9e27ab3, +0x0eecece41, +0x0d89ec306, +0x033630226, +0x0c2201288, +0x0f25a3f9f, +0x075608fde, +0x0aaabb6cc, +0x0d344f975, +0x0ba1479a5, +0x058f4f036, +0x0809cfb0e, +0x0607cca3a, +0x0cb8cdcc4, +0x0b792efcc, +0x07745ab3b, +0x08b427b55, +0x09da6a809, +0x0775e2688, +0x0c8cf3601, +0x03aa93920, +0x0853c54e1, +0x0cf605460, +0x06d8d8474, +0x017f760cf, +0x0dc1f625c, +0x01119414c, +0x076eed608, +0x090b9a3f8, +0x0518934da, +0x03edddfd8, +0x06f3f8e55, +0x0914f6ac8, +0x0c21a75b2, +0x02138ab0e, +0x00934ef95, +0x0d73799ce, +0x0d9984baf, +0x0b464d270, +0x095c3546f, +0x08257db51, +0x00e804072, +0x03980b4d9, +0x069ecd773, +0x0a6930631, +0x0e3225fa3, +0x0bbd69ffa, +0x078c97d06, +0x0a17377a8, +0x0e6c490fc, +0x043283515, +0x01a0dd570, +0x0d853843c, +0x0e7e3c689, +0x0cc9f308e, +0x02a2bde32, +0x01c89f6a1, +0x00e107c42, +0x0cd8b7b70, +0x0205ed9f3, +0x00c94cf8a, +0x08026b1b7, +0x0405dcfb2, +0x072ea707a, +0x0de23e029, +0x0edcbf2a4, +0x0d196263c, +0x00390e3a2, +0x0aac26bd9, +0x090cba045, +0x09c0c675d, +0x08a10e0a1, +0x05957afae, +0x0b945fe85, +0x03ce4d650, +0x00193fd7b, +0x0e9a23a23, +0x09efd3142, +0x0d553b9a6, +0x0748c446a, +0x02ceaa2cb, +0x06f79b097, +0x0059a8d2b, +0x0cfb77e06, +0x0e8bb7ca7, +0x0a70c7a1d, +0x09ce06800, +0x07e04305e, +0x06935ec31, +0x0addebdc7, +0x00da95365, +0x0939a5711, +0x0038a8a4b, +0x0429e89e2, +0x095639a56, +0x0673b137e, +0x025e7251f, +0x0613367c1, +0x0cc65db85, +0x034dfe21b, +0x08f8de665, +0x01fd97715, +0x0832ed23c, +0x0431a8660, +0x085eb91dc, +0x02e5950c5, +0x06a96d6aa, +0x089a6aaa0, +0x026e4bc52, +0x00f407884, +0x0c85fb5a7, +0x05150434e, +0x02b324850, +0x0d1d43d36, +0x024e56870, +0x0c76bbb03, +0x0b6b26f0e, +0x0407f54a8, +0x0e35b36e4, +0x04d012058, +0x00b69f40c, +0x00b2a301f, +0x0c6c8078d, +0x075560712, +0x08b63bc2b, +0x0c9cd0836, +0x08912af84, +0x082d7febd, +0x015b410bd, +0x07b5ffbfc, +0x012fdf733, +0x0030c3c33, +0x0238d0ceb, +0x07d5a05bf, +0x0e63ade55, +0x0de742d52, +0x0de05f37b, +0x02e3fa2f1, +0x0c8f32f28, +0x005c300ca, +0x0d878d681, +0x044e335df, +0x06b7829ea, +0x0e3e513e5, +0x01397b2e1, +0x0f8b3baa1, +0x0e46455bd, +0x0e195d92e, +0x0a40f5ca6, +0x05a589ea9, +0x0a04bd5ae, +0x047677038, +0x0464c407d, +0x05aac69bc, +0x09de1a62e, +0x0dfe552b6, +0x093601c5c, +0x09fe4845c, +0x00b55d4bc, +0x0a311ed4b, +0x061fc7b2e, +0x0c68b64bb, +0x0c1e999c2, +0x09b9e6273, +0x01c001f82, +0x005f83cc3, +0x06fd95930, +0x0ae9c189e, +0x0f0a4a440, +0x04ce8f87f, +0x03f764a5e, +0x02469b51c, +0x0f589c525, +0x060837d2c, +0x065078ca2, +0x04419e8e8, +0x09dd1c14a, +0x0482ec7a1, +0x04a0c179a, +0x01895b364, +0x066e0b4d5, +0x0805008ee, +0x0f385b9d8, +0x0c713ca23, +0x0699e916f, +0x025b80eb2, +0x0e88f3344, +0x09161fac8, +0x09fc4fd49, +0x040f89c31, +0x0d0183bed, +0x00cc39ce4, +0x0ffd90c51, +0x0b4425257, +0x081db500d, +0x0f15dd954, +0x0617bcf8a, +0x08964b76e, +0x0b703e6dd, +0x05c137cbb, +0x096c78e72, +0x0b6d81af3, +0x0e6529685, +0x03217e186, +0x0bbd3bb39, +0x04f31ed8f, +0x041b5faee, +0x04605b0a4, +0x0fa106b9e, +0x0546039bd, +0x05158bf7f, +0x0d900edbf, +0x055a6686c, +0x072f5e754, +0x0c111a816, +0x0a01c6b86, +0x0643d2cb9, +0x0336336ba, +0x094ec5c78, +0x03ea765c6, +0x0c8eb4700, +0x0fe842124, +0x0fb4f09cb, +0x077cc2b36, +0x08104627e, +0x064a5a977, +0x04b56fbc0, +0x002835a05, +0x0f7c28f3c, +0x08531ea7f, +0x0e9eca586, +0x09094d55d, +0x00aefc5ae, +0x0e09ef5e4, +0x0368f6cf7, +0x038d19817, +0x09d8f6295, +0x007fc97fa, +0x00548c607, +0x0a457e894, +0x0694c31b2, +0x042b64b2f, +0x069ec89ef, +0x084a31593, +0x08989dce6, +0x0367f2abc, +0x005e1f879, +0x078385eea, +0x0066d774e, +0x0533be6fa, +0x0ea8469a0, +0x05f497dd8, +0x081998860, +0x08d2b2f38, +0x0697f0e45, +0x04077252f, +0x0464dd9eb, +0x0342755d7, +0x004fdea4d, +0x0bed52f30, +0x08ff2535e, +0x0e22056db, +0x025ed51ce, +0x004ed4b6a, +0x0488f798a, +0x03bbb372a, +0x03b65f55c, +0x008b21713, +0x01a569ea5, +0x0c8b2a518, +0x00c4c5397, +0x0e44d559f, +0x0b8140ef0, +0x09a33d0b9, +0x0bb804e38, +0x086a2601b, +0x0aff1c6b9, +0x0e52a0d74, +0x06825879e, +0x07f9703ac, +0x0745489db, +0x09e466bfa, +0x06ffa1d96, +0x00863eba9, +0x09d61eed4, +0x0fa5dca71, +0x0a429e56a, +0x0e6d1e05a, +0x0f0f7f175, +0x08bb909d1, +0x04e87eac4, +0x018577021, +0x0c9845dab, +0x0ac726ed4, +0x0869726af, +0x01eb0cfe7, +0x013427adb, +0x0eec23366, +0x05bc3238c, +0x03ea8ff97, +0x09bc3ba27, +0x0c4e8cd94, +0x0ec962db2, +0x04b2218a6, +0x0e4598fb8, +0x069a50c6c, +0x03ba86eff, +0x07afab231, +0x089f3b720, +0x0cc020cd1, +0x0e6b85406, +0x009db0b3b, +0x0fdd4b188, +0x0fa852129, +0x07ebc377b, +0x0713fab5d, +0x01c803fc9, +0x0c3683dcb, +0x0944163bd, +0x043dfd297, +0x0698cd1ef, +0x059859802, +0x0420ce2df, +0x0dba936e4, +0x025d422d0, +0x057f7a7f1, +0x0e72cb433, +0x002c6d872, +0x08f1c5618, +0x0b5a94d44, +0x0134fd017, +0x0f8792683, +0x0eaecb2d7, +0x0f13ee8c9, +0x02ba9eb05, +0x0e64a88d5, +0x00861d500, +0x0cd0a4631, +0x0ca1efb50, +0x08df22b5e, +0x0c6bf733b, +0x01066a1f1, +0x0f39aabba, +0x0c1545d28, +0x0a4ed0455, +0x01d721b61, +0x0ee92f6c5, +0x072264552, +0x09d90c46a, +0x0fd0681fd, +0x0b12f2bba, +0x018cdda71, +0x071961801, +0x0ab88417e, +0x00975f356, +0x03480c79b, +0x005be8db6, +0x002778e88, +0x0fc734697, +0x0e1f15697, +0x06639f4ee, +0x054f9f870, +0x0a8afd83f, +0x048a037e3, +0x001189d7e, +0x07ed66920, +0x03c120f30, +0x0d8cf3a1c, +0x0f002f33a, +0x065a26b3d, +0x0797decf8, +0x04d6c462a, +0x0cf15f43c, +0x04b88cde0, +0x00288e344, +0x0b838a59f, +0x056d9e2f2, +0x03d629981, +0x05f583def, +0x022d3abdb, +0x06bb2efa3, +0x0d30b8ce5, +0x0f87a6c8c, +0x0f9b068ef, +0x011ac6eba, +0x0ac1a9fc1, +0x06beab7a2, +0x08f0c80dc, +0x0f947cace, +0x0ad0b9a64, +0x0ea748714, +0x0b7d1c933, +0x09a186660, +0x0e347bbb2, +0x0ce80cada, +0x02122ded3, +0x03c064c3d, +0x0c5dd82af, +0x0e7442e87, +0x015a16299, +0x089296f7d, +0x08bcb8876, +0x000093d7a, +0x03c2eeceb, +0x06a012214, +0x0847ed28d, +0x03425a492, +0x05f81cd86, +0x083597e7f, +0x01cfb5725, +0x0e2eae680, +0x095975efd, +0x0a068cc9a, +0x04cb89352, +0x0f544d522, +0x08c8fac5d, +0x0f62c10a2, +0x0e42d548c, +0x06b6cec20, +0x0cdf9f9ec, +0x031d8ac12, +0x026fe2bc5, +0x0e7c54a2f, +0x03d34f436, +0x0bd91c66c, +0x0e30ae97a, +0x0b8ccc087, +0x0ff59b1a9, +0x0840c7e05, +0x0fff9b4db, +0x054ee254e, +0x05e6f439b, +0x0a4fd4df6, +0x023d2e228, +0x0ae717944, +0x07430951a, +0x03bdcb277, +0x049a90763, +0x08155271a, +0x0edca13e8, +0x08c9d1f4d, +0x0182b4ee3, +0x0b06d2bcb, +0x06df0065d, +0x0ec12e18a, +0x095c65073, +0x00a48435f, +0x0f460bf95, +0x0397ea607, +0x025589a26, +0x02911f2aa, +0x0355ff541, +0x02fef9916, +0x0064c15bb, +0x05be2f23e, +0x01ab89dd1, +0x005359da7, +0x0f5800ce3, +0x0cb270121, +0x0fe08c8b1, +0x036735932, +0x021a5f9f0, +0x0bade3d91, +0x094cb8f91, +0x045573025, +0x01505a15a, +0x0a70f78f9, +0x07c6d2cc1, +0x08fb5bb0d, +0x0a69a0093, +0x03c41c3c1, +0x02a44b98c, +0x093c2d251, +0x06bbf77ac, +0x0ec2ea0cf, +0x05a0da05f, +0x000d03c0d, +0x0e5e4e109, +0x03d853cd2, +0x08ccd3650, +0x07ef2924f, +0x0a3048884, +0x0d213d0a9, +0x0a763a62c, +0x056c75a0e, +0x09844c232, +0x08e6f8730, +0x0ddb56a38, +0x090634f07, +0x0b70bdc17, +0x0066779f5, +0x0a95a9fb0, +0x0f36aba1b, +0x0554084f4, +0x0c16c2b41, +0x089a0f0e1, +0x06e8b1b48, +0x02642f0b6, +0x093b261bf, +0x065f2a694, +0x01906057e, +0x05f8a9b21, +0x0712c52f5, +0x0704c03d1, +0x02083417c, +0x0f7bce098, +0x03973f4c7, +0x0a02dde96, +0x02343503a, +0x0a3fdba7a, +0x0a5ac6e99, +0x0a65f927a, +0x0092d85a2, +0x0cd818099, +0x0e452d1d5, +0x033cceac5, +0x098893c0f, +0x015623827, +0x0d4c7ce17, +0x02808c337, +0x0ddb559a5, +0x048ca4b7e, +0x0448ca7c8, +0x0902e3a7e, +0x0637a3b18, +0x0c3433afe, +0x00e49a4d8, +0x0aa6c238c, +0x039043acd, +0x09e10bcf7, +0x0cf1523d7, +0x0d0915c95, +0x061d8fd7d, +0x0543edd9d, +0x0f00a39af, +0x036214bfc, +0x0e8b9510a, +0x0ab69c53e, +0x098170a05, +0x090859021, +0x0002662cd, +0x09f2a6c10, +0x0a79fdc61, +0x061bfabb9, +0x0a0166265, +0x0eb0ced3b, +0x0ccafa76d, +0x0a6abc811, +0x082415b30, +0x0fb37d28d, +0x05f9db829, +0x0374b3b5f, +0x03a7dda87, +0x084732cf7, +0x0c0aaee39, +0x017681ad8, +0x08f1364f2, +0x041df8256, +0x00d4c55d1, +0x0e11cd5b0, +0x0028b3850, +0x06494117a, +0x07dbdce75, +0x0cff5e2e0, +0x0cd5792d4, +0x0d214649b, +0x0a06835e2, +0x0258490f0, +0x018219108, +0x0b9a3955f, +0x070025e19, +0x0e262796a, +0x08fd609be, +0x0042416f8, +0x0f97637bc, +0x05c01bf44, +0x0c3c759ae, +0x0638904fa, +0x0f19dca48, +0x0884125fc, +0x0b8a52bcb, +0x0886b380a, +0x0dc5294b7, +0x0cd65e1b5, +0x0374c1b82, +0x03017cfae, +0x052a2cc0a, +0x06c29669e, +0x0c6ecf4e7, +0x0b5cbb7fa, +0x0aa73c664, +0x0f817b54a, +0x06aa6c8f7, +0x0a0ea86e6, +0x0bc976215, +0x0d1dfd660, +0x017d8e808, +0x056f6cbfe, +0x06557b9e8, +0x04d54e7cf, +0x097fd9e76, +0x0c8be48dd, +0x01947d8c7, +0x051240825, +0x0163fe06d, +0x0b4b44182, +0x0093de4a9, +0x064e34035, +0x09e71daff, +0x00e9d57e2, +0x0496067f8, +0x0de2b5d3b, +0x06213c078, +0x0ac648c2c, +0x06cd447df, +0x061ca1855, +0x063e96c36, +0x0ae3d4741, +0x04dcf4a59, +0x048919dc6, +0x054d5f193, +0x00ba48844, +0x03d6f38e8, +0x031866c27, +0x073898caa, +0x0aa050e84, +0x06c09b907, +0x04562e8a3, +0x0a95a1c77, +0x0bed9ab38, +0x0445b7d76, +0x0a2acff77, +0x046528554, +0x014f9ec77, +0x05bdbc4d5, +0x080a5ad5d, +0x085a197ed, +0x093331cb7, +0x0b5f52598, +0x0511a8af3, +0x09318ca46, +0x004b71f64, +0x0b61663e5, +0x0f178bda8, +0x021524ce1, +0x0bb96978d, +0x096455b02, +0x02b47da5f, +0x0fd7c0ceb, +0x0cb2788c6, +0x0ab023e3d, +0x049d8928d, +0x05625d11d, +0x0832733d6, +0x02f68d225, +0x018e02765, +0x0eea41bd4, +0x05503d185, +0x0a28a11bb, +0x0846957ab, +0x051e2af66, +0x02fed9cf9, +0x05eee329d, +0x036d47537, +0x086fc5bbf, +0x0bb0341a3, +0x020e637be, +0x0d29eee59, +0x09c0a3ad6, +0x041c2eb94, +0x0b550a0dd, +0x030265a48, +0x0fc9588e4, +0x0b3b21b27, +0x03d58eef7, +0x068c27089, +0x064298a42, +0x001f4dc18, +0x0c809cc53, +0x0faca4de0, +0x01649eed6, +0x04ca2c04c, +0x0300161fb, +0x06c75c6f3, +0x02f97ae94, +0x0206de178, +0x0eb5c3c91, +0x0e708d5ab, +0x0959e9a8e, +0x043050dc2, +0x0498aeb08, +0x0ebf1a2cb, +0x0cab927bb, +0x09e618965, +0x01150762a, +0x03e3a508a, +0x091f67ca5, +0x00e386d1c, +0x0a5fc9042, +0x04a15ea9c, +0x096b0e5d6, +0x0fd9ddae8, +0x05b40f8db, +0x0a28071f1, +0x054d06f45, +0x014f6c122, +0x03774bc50, +0x06090c040, +0x0e4cd09a6, +0x0c2d3f373, +0x0c4a0182c, +0x0cd10ac30, +0x094eecf91, +0x0b8f349a3, +0x0b94771d8, +0x0fbfde663, +0x012574a50, +0x0348b8a1f, +0x052457b0c, +0x02b07bd97, +0x07301a1d5, +0x0e03a28a7, +0x095107bb9, +0x077ab6043, +0x06fe15f22, +0x0e0bc898d, +0x05e8b25e3, +0x088443c46, +0x01c11d5e7, +0x0634d23a2, +0x055a0f037, +0x0f37b7ed1, +0x0c3588a89, +0x0cd34b14a, +0x09f57d424, +0x07068cc94, +0x0aa514e9b, +0x05697bbfc, +0x09bd07381, +0x037c2b0ff, +0x0d284c5f6, +0x01f65a3e2, +0x0db6be88c, +0x04f7fdb01, +0x065043295, +0x008e98723, +0x03b254e3d, +0x0435b47cb, +0x08f2cd3f1, +0x0f0e5e8ad, +0x02aa9b3a4, +0x005d6374a, +0x0990084fc, +0x0c762a4af, +0x0ea3d92e0, +0x039a34d87, +0x08e676c4e, +0x0ba2bee3c, +0x06e4fca99, +0x059382b72, +0x03a75b19c, +0x02a3cf3ba, +0x0dc8b476a, +0x0a90b11bf, +0x017652ac8, +0x05c3f644d, +0x09c01c1d3, +0x0235d4820, +0x053ab8721, +0x0be2bda51, +0x0b69e9ecd, +0x023af3688, +0x088e22255, +0x033b65942, +0x011bfab30, +0x09fe22949, +0x0f3b75c6d, +0x0c3b97147, +0x06a78e68b, +0x0b7e06750, +0x0743d656b, +0x0e7421726, +0x0b97e50e1, +0x0bacdc1bd, +0x0e964cf09, +0x0f8c7e190, +0x0c10b4f47, +0x0d6de32c6, +0x0a7719885, +0x0ea8a0a5b, +0x051e5e50f, +0x092ec03f8, +0x069f0b98f, +0x0c8353d43, +0x07574c6a2, +0x0f58e5b7d, +0x04fc71b3a, +0x08b15d15a, +0x0b12607b1, +0x061782970, +0x0780f900e, +0x0b53bd76a, +0x000e88d59, +0x0efaa3690, +0x0a3d2fb4f, +0x06c228459, +0x0866635a1, +0x0a61aa9aa, +0x0edcc0393, +0x016ffee80, +0x0227b6384, +0x0825605cf, +0x067d074d4, +0x0d6f49798, +0x098cf6000, +0x0bcaba9d8, +0x075657167, +0x0c7a894bc, +0x0d9ec3b82, +0x0fc88788f, +0x07f73ac1f, +0x0a6dc6aa1, +0x0762fb5c4, +0x006d8ab3a, +0x08e71eb94, +0x0424686a0, +0x06558bd73, +0x0e45c955f, +0x08e414941, +0x0ed7f9408, +0x0b136c992, +0x0e8e0ed3d, +0x020d3397b, +0x09d84abac, +0x078a96b7e, +0x0e52f7864, +0x02d47989e, +0x0cb754e39, +0x0bbaf322a, +0x06f3ad305, +0x0ae47e263, +0x0debd0b6e, +0x0421adcd5, +0x0bd553a5c, +0x02156f37e, +0x06a4ec34f, +0x0d787f44e, +0x0d6632c1f, +0x0b0bad429, +0x0b016242f, +0x0621a7140, +0x00fe933db, +0x0dbb9ee21, +0x08a053b9c, +0x06b73cd09, +0x06da05fab, +0x07dc5afba, +0x0458fe5d6, +0x065bd7a6d, +0x047ddfda4, +0x0542b14f9, +0x05107658e, +0x04f0280ba, +0x059a50692, +0x0af0ec724, +0x0f862e744, +0x0d0c23b4d, +0x04f819816, +0x0b1ca7b1f, +0x09cdd8014, +0x07adf7cd1, +0x0d69e6b29, +0x0733746ea, +0x03e11fa60, +0x020a0664b, +0x0f495ca76, +0x0a2b2c470, +0x05251b1fb, +0x072eba1ff, +0x0e36111e5, +0x0c6118dd4, +0x0126da6bd, +0x056faf3a3, +0x0144cd2c2, +0x0cd3d475b, +0x06d83b12d, +0x03d34e0dd, +0x0b12658d9, +0x0def9b331, +0x0af72a8e5, +0x0f251851c, +0x07b53846f, +0x0578bf056, +0x0e43e72d4, +0x03aea92b8, +0x0ab38aa10, +0x053a5f32a, +0x07d21c558, +0x0b3b0d2d4, +0x0874fb122, +0x034e0750b, +0x00858cc33, +0x0fb19eed1, +0x0beb3d8c9, +0x0d7414638, +0x0db64df79, +0x06ec183cf, +0x00cd4b199, +0x091e87b2b, +0x0566450d2, +0x0c92800ee, +0x0fc139f99, +0x0a9639692, +0x0b67e023d, +0x07a3c5278, +0x03f4e8376, +0x019a621bb, +0x024eb4285, +0x0d5edc4a4, +0x00c9dd119, +0x01bf7f8e2, +0x090e03803, +0x0e471eea4, +0x092a64420, +0x0a6f62449, +0x075e01fc1, +0x0dd6f729a, +0x067c90de6, +0x0924f43e4, +0x0d2fb85a3, +0x0d62b961d, +0x006f24553, +0x099bfc747, +0x0bcab05af, +0x035feabec, +0x0d3001914, +0x043fdfb53, +0x09f386ecf, +0x08d00e564, +0x0ff4d4be7, +0x00ff3c53f, +0x0c5bb6a78, +0x0c1ade827, +0x0c4943891, +0x025499f74, +0x0df25b330, +0x08a037684, +0x0d24627d8, +0x0d6bdd144, +0x0e0386304, +0x09bcbf728, +0x043d42eda, +0x0174f5e32, +0x09c3244c1, +0x06a6afb45, +0x0feff5c0c, +0x0cb2982f9, +0x099437726, +0x083d8d6d2, +0x02f6fa614, +0x08f527fe8, +0x070ec9956, +0x086ae3fdf, +0x0f192bbec, +0x03529c804, +0x0b9ab9172, +0x0bed7d969, +0x026b9b2e2, +0x08ecd33c9, +0x0640ba726, +0x0389dd7ac, +0x0a7f0b6ba, +0x0f66008d1, +0x0d3d4b08e, +0x0e833bffa, +0x0c0de7f3c, +0x00251542a, +0x0a913d7b4, +0x0bcdb3dc4, +0x00d651d8c, +0x033fae049, +0x025e4ae96, +0x0e096e2e1, +0x079ffce7b, +0x02b752d13, +0x0596de4a6, +0x023b36c95, +0x0edc52665, +0x06c1ab812, +0x0062a4e7f, +0x002ea81f9, +0x0484fcb75, +0x05a3b9189, +0x019b8bcbe, +0x0c384ca31, +0x09046e000, +0x05bc8aa5f, +0x049a58f7a, +0x0cb6a7095, +0x0d4ce391a, +0x0cb676672, +0x0b6446614, +0x04fe767b2, +0x0c0de00c3, +0x05bccbce2, +0x02c7382f4, +0x074dd6fb3, +0x040295b7c, +0x088219ee3, +0x01511d88c, +0x0bd98d685, +0x0a61e8067, +0x02655e076, +0x0d3cd4532, +0x0dba1bea8, +0x0b7e3e798, +0x047377f67, +0x0fa4f2d48, +0x0b88cfa73, +0x05cbcad97, +0x0347e7dbb, +0x0c8e5d24f, +0x0dd3020da, +0x058142c32, +0x0547fdda9, +0x0ae332516, +0x03f797820, +0x02ecbc4a8, +0x0e1fca3dc, +0x0c119c441, +0x06a234e6f, +0x060c02d41, +0x0a2dbb36f, +0x09624320f, +0x006d8212b, +0x0deaa489e, +0x047536e78, +0x062e1af09, +0x0f7fe93f0, +0x0646ce13f, +0x046c0a4c0, +0x07867ab01, +0x0d0e01752, +0x0643545f5, +0x0d424150b, +0x086dc09b8, +0x02d353645, +0x0c20f8b07, +0x0c3c0504b, +0x007bc152c, +0x09b24b95c, +0x04f9a4e07, +0x02643c223, +0x063e46ccf, +0x0bdf9b07f, +0x0200df3cf, +0x07ea1aa23, +0x032eb1dc2, +0x060267b84, +0x01cf931d0, +0x0f8754102, +0x04358bce3, +0x062865dd3, +0x0e3fb37a5, +0x025f3f1b1, +0x0db5d6d0c, +0x0829d71c0, +0x0717c5f9c, +0x0974d8d5d, +0x07d673be2, +0x01c273667, +0x085164d07, +0x0be68e102, +0x067c9887e, +0x0cf616182, +0x03d28b94a, +0x0a024a01c, +0x005c6563c, +0x08b9f1340, +0x0bd7d9442, +0x00cc856a2, +0x0e1925606, +0x002042e8f, +0x008c1dd9b, +0x0321fea53, +0x02333221d, +0x095d66459, +0x022646c15, +0x07b3a59f5, +0x023d8d730, +0x0ddc9f474, +0x06e6ef1e1, +0x058b3f6af, +0x026e78956, +0x0e7a92e1f, +0x0a1a4455d, +0x0d352d9fc, +0x06b5b3473, +0x065bebb6c, +0x0643804ef, +0x06f28984d, +0x02bb06dc9, +0x04e2d67a2, +0x0656252c9, +0x0782dd020, +0x0e8be9f23, +0x023b73f06, +0x081f17d83, +0x09df56674, +0x09d99e9c9, +0x0cbf9ef2f, +0x0c26b6307, +0x025747dc8, +0x0ca32d52e, +0x0ab950eb1, +0x064d4a0a2, +0x018c829b5, +0x021c44227, +0x0bee755ee, +0x0369617fe, +0x0ff62d731, +0x0c9567256, +0x04580123a, +0x01e01a677, +0x0ab506704, +0x0d857d31f, +0x0045f651e, +0x0b2b490b6, +0x04c5b11b6, +0x0fc9540f5, +0x0de3f7144, +0x084cb314e, +0x00a58753c, +0x0cf83bc70, +0x00031cb41, +0x072c5c806, +0x02798489c, +0x05dd160e0, +0x0c52a033f, +0x04c80b387, +0x0b225f07c, +0x0e011dbc6, +0x0a03b5d4f, +0x0b3e09aec, +0x04d9375e8, +0x0e7b87ecf, +0x0716243f3, +0x0ba481f23, +0x0a216b581, +0x0e3fc0fd1, +0x0ee38346a, +0x0b4db1bca, +0x04f5589f2, +0x061a3f2ea, +0x0a230cd68, +0x0303faa5e, +0x03ccce92c, +0x07e727fda, +0x03996c38e, +0x0914a8bce, +0x01932768e, +0x0b54fb352, +0x06ff6510f, +0x02e53fdc9, +0x04ef33e9b, +0x03125d97a, +0x064ac7200, +0x00254dd04, +0x0b7cb6fb7, +0x0d9a83158, +0x0dbab1c3d, +0x0d37f5d11, +0x0d9638d20, +0x0a607bb23, +0x0408340a5, +0x079191d9d, +0x04d49f12e, +0x01df1f016, +0x062e7b429, +0x0b2b25dc7, +0x00c775635, +0x0b330a404, +0x09994486c, +0x0adff7abf, +0x0f59eb266, +0x02817832e, +0x01544a8a3, +0x06e768fb7, +0x0273a6ca0, +0x00ef0570a, +0x02209c170, +0x0fea8ed91, +0x0dee35ef6, +0x04c18b0c7, +0x096034ed3, +0x0e15abaf5, +0x0941470b9, +0x03b4e2810, +0x0328ddf66, +0x0ffde257f, +0x008708a43, +0x0638c66c5, +0x0e90bcfda, +0x0e1a09c7b, +0x00aab1e0c, +0x01563a9a0, +0x0017e5dc8, +0x0e5703846, +0x044ffa5e6, +0x01f1c5d96, +0x0b1d41e4a, +0x0cc2a0603, +0x046cafb2f, +0x0c66ddf6d, +0x007b50197, +0x070ec9251, +0x0c77c3d7a, +0x041c7d563, +0x0266fdc86, +0x04475ba07, +0x0d543368a, +0x0bddde05f, +0x0680e40e7, +0x070626a6c, +0x006ed85d8, +0x02af21acc, +0x068659da1, +0x0029b21b1, +0x0c50c6519, +0x011a0bc95, +0x07e42edee, +0x098858474, +0x0f6a037b3, +0x059b721bc, +0x0b8f05703, +0x0a06b5f43, +0x0543f0143, +0x0e5c73e1e, +0x0f7a62fe5, +0x05f442220, +0x0ef87d33b, +0x0b3bb6824, +0x033c08533, +0x005da3b47, +0x062454cda, +0x091cb61e8, +0x0a1fdd9d7, +0x07a679acf, +0x070fdc78e, +0x0097d85f5, +0x009e8ff33, +0x016f5d41e, +0x0b38951c6, +0x06b62d962, +0x0cfbdd1fa, +0x02052e863, +0x0cb6347de, +0x092efb094, +0x0a7128d2a, +0x029177d87, +0x068a98041, +0x032a44d3f, +0x0c6ac30d2, +0x075f154dc, +0x099c798ed, +0x0c53e6ae8, +0x0f69a6168, +0x0c5480b0d, +0x00ce98fdb, +0x0226ebbde, +0x086564bc2, +0x03f06c09e, +0x03d9910f3, +0x0174379e1, +0x0c2281aa2, +0x0af89e8bc, +0x0e7dbd0da, +0x0d558a1a6, +0x0f4074c56, +0x0c2b9b97c, +0x0acd2fcfa, +0x01cf48100, +0x09ed07100, +0x015437a53, +0x00af77a3e, +0x0daab612e, +0x01a9c899b, +0x07194d75c, +0x007acf256, +0x0f1921804, +0x0e559e17b, +0x018adc6cd, +0x020bf21c7, +0x0e94bc0c6, +0x063efcc13, +0x0d32641b1, +0x04fee7af3, +0x07c720f09, +0x062e9b6db, +0x0a657ade3, +0x0b06a20ed, +0x074c0c321, +0x0fd1cb21b, +0x0b20d07d2, +0x0006fba21, +0x0e0ae1584, +0x0ff2fa60c, +0x0204d3d2a, +0x0ebd8cc8c, +0x03229bcfd, +0x04ea57e81, +0x05ce5f513, +0x0e2280e9a, +0x0ab805547, +0x06ab1fc53, +0x0435c1e90, +0x05c3bc563, +0x08d09d3eb, +0x09485891c, +0x0abe51ec6, +0x05a3a27ab, +0x05c2c4a96, +0x063b01174, +0x065a0e704, +0x048e3b64c, +0x0a3a79efa, +0x0ea447b4c, +0x0481646e6, +0x098633b16, +0x0616dfdf1, +0x0f926a4f3, +0x015f3daeb, +0x0877b5b23, +0x0a1f4427a, +0x0267e9161, +0x0347a7589, +0x01c275a49, +0x08cdcda02, +0x087104924, +0x0cb96bde7, +0x0d793b96b, +0x03078040a, +0x01d639b7b, +0x07cc25ac9, +0x0637d36f7, +0x03e8522a4, +0x00e4162d2, +0x0b49bb899, +0x09844f848, +0x06a0a5481, +0x0b774eb3d, +0x02f37ec76, +0x0c196cb2e, +0x0043746d6, +0x0d14335ed, +0x0e64a1084, +0x01f5f2f5f, +0x00a309231, +0x055d46b93, +0x063415301, +0x0d9fa2a14, +0x0efed5236, +0x0ca58b79b, +0x0d6226dae, +0x09ca23897, +0x0e5f0de62, +0x00b276a7d, +0x038bc0c3e, +0x06bf35f1e, +0x07a136263, +0x0f6ccf0f8, +0x0b54ddf4d, +0x0138e2f6a, +0x06e4ea912, +0x0bfa0dd1f, +0x0ef03814a, +0x057693cfe, +0x0172f3ca2, +0x072c525aa, +0x07cea4b44, +0x022f110de, +0x0340e0d0d, +0x035e6d7b3, +0x0a2916b34, +0x05b8f330c, +0x02fd9f08f, +0x0e1cfdf78, +0x08a7fd5d0, +0x00c66fd8e, +0x0c89f6f08, +0x01eaba7cd, +0x0627706ab, +0x0cfa35751, +0x0f7270e23, +0x06f23257b, +0x00c7ba3ec, +0x019263167, +0x090bcb192, +0x0f24618f3, +0x0dba89d24, +0x0daccb5bf, +0x0678d24ab, +0x074dad78c, +0x010b7690d, +0x0d13384d6, +0x013cebfe4, +0x097018964, +0x0f39369e9, +0x076238743, +0x019dee861, +0x0094e04ad, +0x02264bb67, +0x0998f84fb, +0x0a8c582a1, +0x02763b097, +0x04d653dcf, +0x02cab433c, +0x0b665f398, +0x0decb5ec5, +0x01e2e4396, +0x0a05e532e, +0x053a7b2d9, +0x015688393, +0x0f0322f35, +0x08a12fff0, +0x03a016ead, +0x0f3c97224, +0x01346b5cc, +0x062ad7512, +0x048b205d0, +0x02e5a8740, +0x0b8f0d853, +0x0f0998db9, +0x0c5a66eb3, +0x0f6cd2006, +0x0ea60eb2a, +0x0a1c4e1a4, +0x0606f9719, +0x0f8c7ec86, +0x035c2098a, +0x017d44b2f, +0x0cd0de9e3, +0x0632209b8, +0x08a9c5ef6, +0x07b210fc5, +0x03588e3dd, +0x0a7f61f25, +0x0b59b194e, +0x0c4911978, +0x04417ddae, +0x01058e8d6, +0x06ffef633, +0x0a8cace15, +0x06cf8267a, +0x0b3e06b69, +0x03b701fb4, +0x0621802cb, +0x095f19f75, +0x0fd4bf10d, +0x0bc779846, +0x029eba128, +0x0f462af99, +0x0f308f29f, +0x0020e713d, +0x09b4d6624, +0x0c74cbf1f, +0x0d1c14280, +0x05b5bc511, +0x032e4aa4f, +0x065a5bdf1, +0x06072c258, +0x07c22ed27, +0x034e58f09, +0x0a87f5bc2, +0x0f0174d86, +0x065192769, +0x052140151, +0x0154d2d28, +0x0f8de075b, +0x0b2a6626d, +0x0c2ef823d, +0x0eaa1d834, +0x015aa5a91, +0x00731942c, +0x0f44166b4, +0x0134df0af, +0x065f03e58, +0x003baa2d0, +0x05efc5562, +0x07f7bc54b, +0x0bd21e597, +0x0d573c9a6, +0x0071b5d2b, +0x0a2f0331a, +0x06ad54429, +0x042bca1ff, +0x0cdec277c, +0x0938b4bb2, +0x0a6ffa1c8, +0x044236d40, +0x05251c7d9, +0x05dc1abf1, +0x00d67a97b, +0x0e222f8da, +0x0ce9ba1bf, +0x0023fdfef, +0x0e1b059ce, +0x0bbe2363b, +0x00fc44882, +0x02cd58513, +0x0b5e62f45, +0x0bb5fca0e, +0x053ae9efe, +0x081647aac, +0x04a18e4d7, +0x088529d94, +0x021789b9d, +0x06049f2c4, +0x0b5a40a9c, +0x08efb9cd2, +0x0449b9a37, +0x04430358a, +0x0cb01ad29, +0x00d3f2767, +0x0273e9aab, +0x055cd1307, +0x0fa39c427, +0x0243a6669, +0x03f01a714, +0x01d41575e, +0x01749bb15, +0x074ab0954, +0x0d3d6d68a, +0x0e717a55d, +0x05b39b157, +0x0b32e327e, +0x034f45318, +0x0db40cb1d, +0x0b071e83f, +0x00b85ed23, +0x0753fe00f, +0x07d62fc16, +0x0912c292d, +0x05e8737a4, +0x0de996612, +0x01c55eb4f, +0x0302112af, +0x0255fdae4, +0x03af29b3b, +0x05bb339ba, +0x09ba0d044, +0x0e0b08eef, +0x097b578d9, +0x090592824, +0x02b955693, +0x0f3398869, +0x0a52f8755, +0x05fa25992, +0x00be41bf7, +0x06671e8db, +0x0c9ec16c4, +0x05ac0c274, +0x04a7c55be, +0x02dd51d95, +0x0b2329d66, +0x03ed35bf0, +0x023955c23, +0x0a4eba4a3, +0x0ed687341, +0x0eda16648, +0x02cfa2254, +0x0bcdc27c1, +0x0d188d014, +0x066e987ec, +0x030496cf8, +0x040e62b01, +0x06c278635, +0x0edfef458, +0x0448d9b07, +0x06ec487cd, +0x072f0b04a, +0x0c2f487b1, +0x0d032fb20, +0x0f54dc9f2, +0x0563000db, +0x0c384e4bc, +0x02d55205b, +0x0b3b3b7b0, +0x007abf16e, +0x068ec381f, +0x07468eb0d, +0x05115cdb6, +0x0bd7ed294, +0x018991ee8, +0x0b5a0c8a8, +0x092f8a45d, +0x01b2cd9a3, +0x01344ce79, +0x0705ac58e, +0x0870f112e, +0x0f93b406c, +0x0f4c69ae3, +0x0a41974ab, +0x092711713, +0x0bcdc82ca, +0x0406b0bd8, +0x075cf5c79, +0x022645dc3, +0x0129123d0, +0x013a3c4c8, +0x0d58a8380, +0x08a86478e, +0x06b46361e, +0x06ef98760, +0x0466905e0, +0x097745201, +0x01a03c67f, +0x021bd2d71, +0x0bd2be792, +0x005e65039, +0x08474ce0b, +0x070fd3f46, +0x02ae1e3dc, +0x03a9c1e56, +0x03c6c22d3, +0x0e93877bd, +0x02d1d8455, +0x0e7b0b9ba, +0x009625611, +0x04129bbb2, +0x086bea60d, +0x0448e63f9, +0x0106d967d, +0x0c4eff542, +0x077ccb8ba, +0x07f400395, +0x0fcc0535f, +0x0e6f46370, +0x0aa64b51e, +0x016f5260c, +0x02def6e15, +0x08d63322b, +0x0dbce5da3, +0x0db7f01d0, +0x0d5cd7e9f, +0x0ae1c1252, +0x099b43d2b, +0x01815e1c2, +0x0ac64b21c, +0x033dca636, +0x0cba70005, +0x02fbf96cb, +0x064e66b9a, +0x0738eee5c, +0x0ec559735, +0x044b9bfb1, +0x079c4cf9b, +0x0e5fa3f9a, +0x0ce4ee7c0, +0x029252435, +0x07756e50b, +0x0370df515, +0x044039174, +0x07ec5afbb, +0x0ca69c2df, +0x04ab68c85, +0x069e5075e, +0x07ba21a26, +0x0796a7b6b, +0x06b9df83c, +0x09a2a012b, +0x0cf9de6b8, +0x0c78109b6, +0x0d736aa31, +0x027499d6f, +0x07a52f60c, +0x0d93088de, +0x06d6d9dc8, +0x0333c93d1, +0x0864c4747, +0x086feaab8, +0x074e76501, +0x0c6420081, +0x09bcf5d77, +0x0f55e0b7c, +0x0a7c5286c, +0x0a7d4659c, +0x0d6d1c20d, +0x093673571, +0x09e5273a8, +0x02e669c9a, +0x0a0f6bec4, +0x0495a4fe4, +0x001467b87, +0x02680bb9f, +0x07f30555c, +0x0ccf78e5c, +0x0b916340a, +0x09741c16a, +0x0a8b0fbb5, +0x0cd846b70, +0x0a41c0a55, +0x05ec91585, +0x09020deac, +0x07d105913, +0x0907c32e2, +0x02f205cbf, +0x035182df0, +0x0d0b7862c, +0x0a45a04cc, +0x05db18ff7, +0x0b07940ea, +0x00574aa89, +0x0ea25bab5, +0x028a7604c, +0x06f7ed190, +0x0ffb3d50a, +0x03f503922, +0x0e5b3af47, +0x05900f130, +0x0db3eeef7, +0x03fbc90a1, +0x0fbfdd569, +0x004f1ea38, +0x0a3b6ea5f, +0x064bd18ca, +0x08231a891, +0x02dffd319, +0x09d058818, +0x078e7586a, +0x044f33d38, +0x02a0ca7d4, +0x0c5b4a844, +0x0ab2987c9, +0x02821b39e, +0x06f0e1571, +0x0809c3124, +0x064b02bd8, +0x0cfd27f97, +0x006709f26, +0x0d963ca69, +0x0e9c0370a, +0x0461867ed, +0x0941442dd, +0x0192bf3f7, +0x0610878ad, +0x03fdd235f, +0x0317aea8d, +0x01b4a315a, +0x02692a8ba, +0x00c2688bb, +0x000efa32b, +0x0f750eb88, +0x0f2751780, +0x09c0f957f, +0x07db7e7a1, +0x05501e1ff, +0x069a10f0a, +0x0fac771fc, +0x0cf016c57, +0x07cda97be, +0x0838945a7, +0x04f4f1cec, +0x063b86e21, +0x0b656ed57, +0x06b611551, +0x0ea42d5e8, +0x002875b63, +0x0655d95f2, +0x0acc9ec74, +0x06f2ba84a, +0x082b2a451, +0x04442c9bf, +0x05f2305b5, +0x0e22d49ce, +0x06bed7443, +0x09a6fce09, +0x0d6a8a728, +0x0cdd3899c, +0x0997f8814, +0x097a69fd4, +0x03be58588, +0x0991b1615, +0x065b0ff8c, +0x0b6ea0d99, +0x09eb15982, +0x00efca604, +0x08d0acb0f, +0x0103ee7c7, +0x0be488625, +0x01f8cc764, +0x02ae19c0b, +0x08be99469, +0x014f692f5, +0x00ab6bb7d, +0x0a78efdf5, +0x06181c1cf, +0x0d0bcc72d, +0x015ffab3c, +0x0573cb372, +0x0de295f16, +0x049cfc41a, +0x0612dc65b, +0x0ec204129, +0x0e23741e0, +0x027ce9394, +0x09dd9d6ab, +0x0cebfa646, +0x088a7663e, +0x0de885df1, +0x055678908, +0x05c104cfe, +0x0c05a5c38, +0x096c1a4ea, +0x0214f5335, +0x0b185b65e, +0x0f78213fc, +0x09eaa3804, +0x0e53db037, +0x00fc863c0, +0x05c5ea45f, +0x0ba6ead97, +0x075e93d99, +0x0ddc34300, +0x04d51254b, +0x031431cec, +0x0ae2a22c1, +0x08d0b85dc, +0x084fbe26b, +0x00fa0c186, +0x0064168b0, +0x086f1b93f, +0x03b7d1707, +0x094fd18ff, +0x011c3e41b, +0x0225a6234, +0x066643e1d, +0x076a82e2a, +0x002f58852, +0x00484283d, +0x08a60a003, +0x0746c1490, +0x0b731274b, +0x00ff80841, +0x0016674e0, +0x09932da89, +0x0f346e100, +0x0002dc117, +0x0f23ecaff, +0x01590b984, +0x06165fdf5, +0x0bdafebae, +0x0c332785a, +0x02500ec53, +0x04dee5b3a, +0x0414b55f2, +0x01f0576f3, +0x0689e8f91, +0x05106d55c, +0x001e94293, +0x0a35d1dea, +0x0de6e0f6d, +0x0ea34926d, +0x052599d4c, +0x0deca7385, +0x0bc03cdee, +0x05799e387, +0x0db382c11, +0x06ad90d7c, +0x0049925fe, +0x0246bdb23, +0x0ed8a52ab, +0x09763770e, +0x0fc5d4e4f, +0x0b4452106, +0x0126166d8, +0x0cdd3514f, +0x0cf6f7218, +0x0c868d411, +0x006e88286, +0x0478cf0e5, +0x04c3b7cb2, +0x089d69e4d, +0x0d3fb82bb, +0x05f7a70ac, +0x0342f6f4a, +0x05c980d85, +0x04daf1539, +0x0bc6e8376, +0x090868790, +0x071db8184, +0x08b0964b2, +0x077b0a383, +0x07a8df65d, +0x095eff8f6, +0x07961fffd, +0x0b2476e21, +0x005b3cfbd, +0x0cd632440, +0x0dc962ed7, +0x00d9b567c, +0x0cd22a7c9, +0x05374de0f, +0x051a8a74e, +0x07c1b2ad0, +0x045309d03, +0x0c98a15e5, +0x0fb5b8a8a, +0x0c57dc5c9, +0x0a642d413, +0x067173fa2, +0x0ff53b9a0, +0x0712c8435, +0x06ef411a3, +0x0dda3a1ed, +0x08188d2b0, +0x0bc0bb4b5, +0x049ae60c3, +0x06472aa4f, +0x01965292c, +0x03d40a462, +0x0c88c61aa, +0x0e2b3b6ea, +0x0fd52d4c6, +0x00cd8626a, +0x04d0f2c8a, +0x000198755, +0x0250d8695, +0x0676f4c51, +0x0a6f5587f, +0x0d4f5bc81, +0x0694b15f6, +0x0f80dc351, +0x02c1d879a, +0x049d1da17, +0x069c9b63b, +0x00e9c38de, +0x07d6d33ff, +0x0d0101b73, +0x098fdac41, +0x0f8f49c11, +0x0658d1cfa, +0x0af00dd6d, +0x08dc4f13b, +0x0923b2cc6, +0x03e9af443, +0x01619fa47, +0x0025bb0a2, +0x02eb98cdd, +0x01bd8474b, +0x0754074a2, +0x06c104589, +0x02ea6943f, +0x0fce1d081, +0x0644119e8, +0x0d1881d41, +0x0a510505e, +0x0c1f1df87, +0x0814c9547, +0x07bbd222e, +0x06bf57b18, +0x06965cf12, +0x0f2494b04, +0x063464471, +0x09e478dab, +0x01c6999af, +0x03e16f976, +0x083447ec5, +0x0eea46803, +0x017ea6e03, +0x0eb44bf3a, +0x06d2b8f07, +0x0c409bea2, +0x0affdb9fa, +0x06b90849c, +0x0037eb7b1, +0x038884f46, +0x0dba65ddb, +0x08275d6a8, +0x0d914d383, +0x0959590e5, +0x015d3bd68, +0x01de32f57, +0x042c3f36e, +0x025d07540, +0x0aa9c1424, +0x007914ce3, +0x02d1f519f, +0x0a1cde2d9, +0x0331e82b3, +0x0618bab78, +0x0d6b171c4, +0x0ea96987d, +0x014d7e3c0, +0x0c6d866b3, +0x096d441f4, +0x07ff957b4, +0x0fa3ff2b2, +0x003960abf, +0x06275c3f2, +0x013fd2a68, +0x06da01e4d, +0x0641aff82, +0x00458f84b, +0x0881d0cf5, +0x0c4e28f95, +0x04d596070, +0x06daa59fd, +0x045c1690e, +0x07599f014, +0x0b22197cf, +0x01a213931, +0x0d3d53990, +0x0494396b1, +0x0d2847860, +0x0c0d95a6d, +0x02a5842d7, +0x0e4edf57e, +0x0d1e5c9b1, +0x0ce771753, +0x0842bca9c, +0x092a276d6, +0x0b5442999, +0x0ac0b9b8f, +0x04284adde, +0x03bb95c1e, +0x016407f24, +0x076695141, +0x0f5e2abf5, +0x076eed52b, +0x04ee45e36, +0x028eef565, +0x0ecf6714e, +0x0dce23746, +0x05f1c249f, +0x038828ee0, +0x036d6a3e2, +0x0eeabd260, +0x0164c4665, +0x0d0e467bd, +0x0ae2f2ea8, +0x0d2118979, +0x0011c78ce, +0x0dbf8efb4, +0x0ec703462, +0x02b653a6d, +0x02a17984a, +0x0c5904175, +0x0b3e83ad9, +0x07ccc2127, +0x0308c961f, +0x0815d1722, +0x0d728e13b, +0x0024ed1f6, +0x0f2a12632, +0x04782d6c2, +0x02d77d093, +0x080d6608f, +0x04e4ed62f, +0x0657875d8, +0x0687a98ec, +0x08f19138b, +0x040113071, +0x05c48fd70, +0x0ed449e41, +0x09e0d6635, +0x0b67bea2a, +0x0bbf68adf, +0x0ff7bbe98, +0x0e7e12062, +0x000fd33a2, +0x02473a973, +0x001f9775e, +0x015fec31e, +0x05774edbf, +0x0e1ef8cbf, +0x071ec60e8, +0x0436a2f8c, +0x0ee82f87d, +0x0515bceeb, +0x0435cf4eb, +0x0b5d33ef6, +0x0113136de, +0x0576201eb, +0x0b0a1aa5e, +0x0fbcaea94, +0x082dab632, +0x08feadf71, +0x003690ec4, +0x06b2760f5, +0x06d111fbd, +0x0be7fe31d, +0x0d7190030, +0x00de003b3, +0x038bf585f, +0x0d31144cf, +0x019e62005, +0x06e3927fb, +0x0f75057f6, +0x04164f354, +0x0d94a2606, +0x062987771, +0x0b8fa5e52, +0x0dcd7c6b8, +0x04442eeeb, +0x019069295, +0x0b97676ed, +0x0dfe421f2, +0x0109361d3, +0x0435931c0, +0x02d04ffec, +0x01f9058c2, +0x0659bd184, +0x01c0fe2cf, +0x081b07528, +0x0b2cf5414, +0x0e6375da8, +0x08935ef98, +0x0400f208f, +0x07aab862b, +0x0d14fa164, +0x08203df24, +0x0af492f96, +0x0caed0728, +0x078832333, +0x00ba51e3d, +0x0198f8bb7, +0x01253d375, +0x070589546, +0x0b6bb29f4, +0x00c8773cf, +0x020b266cd, +0x002ccfa80, +0x0d306498b, +0x0eafc752d, +0x0c7d02374, +0x0f8642f23, +0x0733f69f5, +0x0bb6f5dc0, +0x09f311632, +0x0c466c87e, +0x08c83318c, +0x0c9b57b7c, +0x088ae0e12, +0x07ee24cf2, +0x002350eab, +0x0cc67796a, +0x08c3dbc29, +0x0838a45d8, +0x0fe8ad858, +0x0612732ba, +0x0179f1a06, +0x08931663d, +0x08080c70b, +0x0a0046a67, +0x07116e337, +0x06c7ae318, +0x004378f05, +0x0108b80a8, +0x044afcd7a, +0x0e72fae9e, +0x09d6afe6d, +0x00dfe0e11, +0x09cc4665d, +0x09153ff83, +0x0d6e7f6bf, +0x05d2f6c88, +0x06ba27e3c, +0x001dc6b7c, +0x084497e07, +0x03a667742, +0x0b28d8ca6, +0x00657bf3d, +0x0e71fc714, +0x0c36fa018, +0x0edf11ad5, +0x0384b117d, +0x09cbf2832, +0x0356fd288, +0x0b1db545e, +0x0976e9f5f, +0x08380761d, +0x06b6c0902, +0x0c1c33bb6, +0x064712509, +0x08b39fc26, +0x06c6c736e, +0x0b903b7b0, +0x0fc7106a4, +0x07978674d, +0x0dbb5b41f, +0x090c03ae6, +0x01b9ee8e4, +0x0881b55a3, +0x05052ecb5, +0x093f08f5f, +0x0cfc07949, +0x0e9e6c34b, +0x0160d4ce6, +0x067b85950, +0x042df8547, +0x0be323890, +0x0faafe3fe, +0x03c9de148, +0x0ac3156cb, +0x0cf24ab3b, +0x040328a45, +0x01c261e2d, +0x08b9e5893, +0x0fd61109d, +0x0eba09da8, +0x0cd3ed1c8, +0x08e2d5df8, +0x089171c8f, +0x0fc602fb7, +0x062db8d54, +0x081e48680, +0x0ccb065ab, +0x038f9dd9a, +0x05ae6f73f, +0x0da93f64b, +0x0da58db62, +0x028fd04a5, +0x0894cec1f, +0x087bf02e9, +0x0162e0312, +0x05c94cb15, +0x0e8bba3db, +0x0cc3528b3, +0x05b74a856, +0x0572d0754, +0x0ff2d946f, +0x00e2a2bc5, +0x0c687b13d, +0x08d83b9df, +0x09106ea98, +0x02294502e, +0x0b7c0deb0, +0x0478d87f3, +0x075cc4796, +0x0737e617b, +0x0cb566748, +0x05d07d064, +0x0c0c301d1, +0x07f831b35, +0x001c01511, +0x013f23273, +0x0c7b82d1e, +0x09144fb8e, +0x0637fbef3, +0x0a7fc5717, +0x0eb37cdf0, +0x022fb0d02, +0x0297516d6, +0x061966ebd, +0x05b9caffc, +0x043e11d44, +0x0311c9e6e, +0x0e857d468, +0x05efdb00c, +0x08be86402, +0x0e12457db, +0x0143490c0, +0x01f2c29a7, +0x007ede2b6, +0x0ec0fb664, +0x0824cfeed, +0x09da4ba9d, +0x04bd8f73b, +0x09f0d6a34, +0x03e29812c, +0x02226faba, +0x084c5e0aa, +0x0f24c28b8, +0x0d1ddbe76, +0x03092cd2d, +0x08f170960, +0x05daf09bb, +0x077fac755, +0x01eec7696, +0x0290bd9ea, +0x0f80210e9, +0x00d996304, +0x0b8690a5e, +0x010ce2ed5, +0x0c394434d, +0x068a26471, +0x08e940fe9, +0x0065fe814, +0x07686a8da, +0x0973d6676, +0x0ceca6e1a, +0x013ddf214, +0x05b734b65, +0x0a3c80550, +0x0fb890201, +0x052b78543, +0x0f2c5887a, +0x057101c62, +0x0ffb59f94, +0x0e69e7770, +0x0c1a34b81, +0x09ff898a7, +0x03192fc1d, +0x0f7c965aa, +0x032a2ab2e, +0x01ef377d8, +0x0e752d76d, +0x066490cfe, +0x0426a95c8, +0x0854a5738, +0x006db830a, +0x0de5393ef, +0x00a6c7bbe, +0x0de8dbb3d, +0x0acf5bc7f, +0x0edc14c00, +0x06da29111, +0x0a35871ee, +0x033c22524, +0x0a50ce475, +0x056008f6a, +0x079f22774, +0x0529cd770, +0x0a80d4537, +0x016c812f4, +0x04a025e5b, +0x064c94da6, +0x05640ce28, +0x08179107c, +0x039ba9049, +0x069ca33ea, +0x03a5b2df2, +0x085af992c, +0x0bbf0c98d, +0x0fc51dc4d, +0x016fce145, +0x02ca6060c, +0x0ae8d02de, +0x0c425d0ce, +0x0fdd0fe51, +0x0ba052d90, +0x0bd374ca5, +0x09afbbf87, +0x05ef9a435, +0x063b37d1c, +0x0e99d8d6a, +0x097fbd865, +0x0c8bdca19, +0x0b883042d, +0x099fad61a, +0x08eba42fb, +0x0c680851e, +0x06cd19510, +0x08026e652, +0x00dfe98ee, +0x095eec86f, +0x016fa16f5, +0x04b21a78a, +0x09855ca47, +0x01bf92546, +0x030bc2bd7, +0x026891d0f, +0x0368ccf98, +0x0a6577f74, +0x09e9ffeeb, +0x05aca3e64, +0x02d77ef92, +0x05a782407, +0x07864020b, +0x01629913f, +0x01b61de31, +0x0bf621ba1, +0x066660645, +0x0fc0be267, +0x0a7c1f2d2, +0x080777ef1, +0x0f9637b1c, +0x067c9475a, +0x0403e38a4, +0x034c679b7, +0x08cdfa3b5, +0x0577fc140, +0x0a6752b11, +0x01563a184, +0x04f37882d, +0x02a9a6cae, +0x0d9ab298a, +0x008d9a7a4, +0x0baca9f36, +0x040cd7823, +0x05ed52ffd, +0x0b752c6aa, +0x01ee73415, +0x09bc7c399, +0x0144a6305, +0x0850698e8, +0x0b4d3eca3, +0x0daa3f80d, +0x050937400, +0x0e6b29d0d, +0x0cddf2df0, +0x0686efb87, +0x07ebfd73b, +0x0ac11e56a, +0x0a0493435, +0x04bdf48d1, +0x03d898115, +0x03717b80d, +0x0bcbd2a77, +0x0e4732839, +0x0b5211c79, +0x000b02fc6, +0x0b2716cb6, +0x08139b5bd, +0x0ee4ccab7, +0x0ff99969c, +0x00e221ef9, +0x08217f65a, +0x010dcd816, +0x05d072344, +0x071debdff, +0x06ba1cdc9, +0x04f9a5826, +0x078b02e15, +0x0ce3814b5, +0x0cb4fc728, +0x02d3d25c8, +0x0fb23c2ab, +0x0ec528451, +0x0fa520852, +0x0b56d8a9f, +0x04895a4ab, +0x01639776e, +0x0f4e79a05, +0x0b6bf8737, +0x0e56eec67, +0x04ef012af, +0x0d0c3fc7d, +0x0440d876f, +0x071bf55b6, +0x03e5ae0fa, +0x0760f800d, +0x0dcea531d, +0x0a57289b9, +0x0e8e5cfec, +0x0df7cd464, +0x0a974bb9a, +0x03f955608, +0x0a1b49162, +0x0fdde69b6, +0x0c75e92af, +0x0e3b5cc42, +0x01ac36e47, +0x07d1894a4, +0x0adccaefd, +0x0ae14cd0b, +0x090f9d25b, +0x0049138ee, +0x0659612c9, +0x044405fe9, +0x0957ab0fa, +0x0e9e2f6b1, +0x01806b633, +0x04fff0e5a, +0x05d20accc, +0x00f06bf39, +0x0e8cef970, +0x051af3653, +0x0ed24eb87, +0x0aa579692, +0x084512891, +0x02a75d1c6, +0x01413648b, +0x031842f0d, +0x0962453cf, +0x02354fb5a, +0x001f36019, +0x0a28383b1, +0x00e2c13d2, +0x0fb1cae19, +0x0dcad1f25, +0x08c952af5, +0x0cc13b91c, +0x0ce8d4f30, +0x026ffe5d1, +0x0fd8ac322, +0x0384cca6d, +0x0c595b28d, +0x04a11c9f4, +0x041cc257f, +0x0ffe7543f, +0x0b798cd02, +0x0029604f6, +0x045e34bb7, +0x0bf0776af, +0x03a8e8f71, +0x037ca1dff, +0x0b4b41263, +0x0d7422640, +0x0788ab72e, +0x0379338ef, +0x02396e6ab, +0x09f249b6c, +0x0aaea75aa, +0x03a1eece5, +0x0448ea5d4, +0x0f75974f7, +0x0711d2a5d, +0x0d5ccb220, +0x0d5968ca7, +0x0508c1a2f, +0x0d3b45655, +0x04ee3b71a, +0x045adbb72, +0x0f016f935, +0x0ffa6e3f9, +0x0fcd95316, +0x0422f67f2, +0x0f2ce0b4c, +0x0c532c835, +0x06eaa3b51, +0x0e2f1b887, +0x043b1d79f, +0x0b029f65d, +0x0b5ec797e, +0x04c9bd067, +0x0fdcd8d32, +0x01da01c6d, +0x025447856, +0x0135f76ef, +0x065ceeb82, +0x0bef99e87, +0x0698e0e7d, +0x0214ea490, +0x0095b6e72, +0x0f6b0a5b6, +0x0b91bcb37, +0x0272c2226, +0x04a26ea44, +0x09729b712, +0x09f7e10ba, +0x049004661, +0x08c0264f8, +0x074038353, +0x0be05359e, +0x0d46b468e, +0x09978255c, +0x0f1bda06c, +0x0a8c61b1f, +0x02f51e308, +0x07e2a8563, +0x02971ed94, +0x0eb2a9287, +0x04c2b773a, +0x06a3b2d01, +0x0fa4708d4, +0x0cd9a54ff, +0x07935518a, +0x0d64d83c8, +0x07c1340f0, +0x083f27b74, +0x0a4dee594, +0x07d170e72, +0x0f24657d1, +0x009994788, +0x09b14bcce, +0x08bdf72f3, +0x03a664536, +0x081580eaf, +0x0a9aee1ab, +0x039268d2f, +0x0f2d9a53b, +0x0de46e3b6, +0x0b3b89530, +0x08f28a5b8, +0x0ce17eab7, +0x0f37ceb60, +0x0dabeb2b1, +0x0fb0f67fb, +0x03125cdd3, +0x07064f93f, +0x0c11e2348, +0x0d4f4694a, +0x02bcd3e49, +0x0753daa66, +0x0eef0df57, +0x0d8fb00bd, +0x08ec8f8b1, +0x020a2e84e, +0x0b688387a, +0x0b2434fbf, +0x081ad1ebb, +0x0148165c0, +0x0596e5756, +0x01e3acc08, +0x05936d07f, +0x0fe72e589, +0x0e5fc7882, +0x06827b9b6, +0x0e1e0ac33, +0x0f496e669, +0x002ab7d7e, +0x0325c2e8b, +0x00c2e0a90, +0x02c78a79f, +0x0f162d44b, +0x094f10d7d, +0x0bff5db6d, +0x02eb5aa7a, +0x0ebb43bcb, +0x0f192f50b, +0x047f44772, +0x0e772c676, +0x00864172d, +0x008774f1a, +0x0995fd6e5, +0x0ebc91600, +0x005119427, +0x0849c58a2, +0x00ba0f0b4, +0x081fc7f3c, +0x0087000d6, +0x02cb94183, +0x0649ce1da, +0x096e22c75, +0x01e596bb2, +0x0ef86788a, +0x0ff63d7d3, +0x05d44056c, +0x0bb64bbde, +0x037e97c33, +0x0029d84c9, +0x037b90730, +0x0a5d59c32, +0x0d407d714, +0x0e9090c9f, +0x04b21a508, +0x0cc9c5cdf, +0x05248e2a2, +0x08477970b, +0x04c65c823, +0x02c7da831, +0x0677d6545, +0x046e1e158, +0x0f5735c0e, +0x09c9def8d, +0x0d22d0a65, +0x052cc4a5b, +0x09e02b7ad, +0x0405ef256, +0x09ce90c70, +0x005f32385, +0x0bcd1cab9, +0x015847d6e, +0x0a284d987, +0x03bcad855, +0x0b86e6e09, +0x0e850b170, +0x0da79c14e, +0x01b9c0162, +0x04ed342a0, +0x0a5db6a72, +0x03d135bcd, +0x04a33654f, +0x03a5d7e3e, +0x0fc7d8831, +0x09055b641, +0x044c3a147, +0x0b629d9be, +0x078ba8072, +0x0c606f583, +0x02c966473, +0x06b9c719f, +0x025bef16f, +0x058bb05c4, +0x02b36e718, +0x044761e24, +0x00a4d7f22, +0x0eaae5587, +0x02759b7b8, +0x09f789931, +0x0492aa4df, +0x0b915ee5a, +0x05d1fc87f, +0x08bd1c40e, +0x0e8ef18c5, +0x0553c6718, +0x0ff091ca4, +0x0bf04b02a, +0x0bd367ef3, +0x0003c3c92, +0x08ac16a1c, +0x0a96501dd, +0x063285c95, +0x01446537a, +0x038d1c3bf, +0x04629f5e9, +0x0236e1d55, +0x0d4e8a73d, +0x05a812c3f, +0x094e72f54, +0x033183347, +0x03a8db9a6, +0x05090a79f, +0x08d8785ca, +0x027994fb7, +0x094a7aa99, +0x0f47adcbc, +0x0a387ffcd, +0x0bb7ad45d, +0x0e6dc3976, +0x0ac997499, +0x072325978, +0x07b19d9e1, +0x079f7070e, +0x025a2dc04, +0x04f65d227, +0x08c65b90e, +0x0f60b5717, +0x01a8c09aa, +0x01213a9ad, +0x0d18dbc01, +0x00417af31, +0x07886f7f9, +0x0bfe936a6, +0x0b005cc53, +0x00aedd367, +0x04f445026, +0x0473261ad, +0x0e725453c, +0x0fc853072, +0x0eda2517e, +0x0aa07c3dc, +0x0b6c49d45, +0x0b9281a84, +0x08e96e6c9, +0x004ea3569, +0x08be99996, +0x0ddb9cdf0, +0x06f1b85fe, +0x09de20941, +0x0f0dd6aa4, +0x07510994c, +0x025d251fb, +0x08d5e01bd, +0x08edafaf0, +0x0823947b5, +0x024380630, +0x0efe3248b, +0x02bb21f60, +0x0d4300c32, +0x03fcbd0cc, +0x089e86d66, +0x0c2238f4e, +0x092986446, +0x0fbcdb466, +0x0fe25118f, +0x08449946c, +0x09dc1d9cc, +0x03e195f93, +0x09bd2fc17, +0x0ddc0fbc3, +0x050b79946, +0x0bcc6f6e6, +0x0a75fda1c, +0x02d4e6214, +0x04384e541, +0x0795a515a, +0x0a0e9edb8, +0x0b3fe2e58, +0x023eae84f, +0x0beab0a7f, +0x0834a5518, +0x065fdf406, +0x0d99602aa, +0x06098c0f3, +0x0178353d1, +0x0ae55ac36, +0x07f7d84b9, +0x00f932358, +0x0e2c6c03e, +0x011b94099, +0x07cc1a005, +0x03e0106ab, +0x08e63e3ff, +0x0e663861b, +0x0c7603bd6, +0x09d29215c, +0x0590ed27f, +0x041db3bc9, +0x08fabb3d0, +0x0ded14819, +0x09440d548, +0x0614e7556, +0x0ce166604, +0x0fc72b91f, +0x0a97c4a51, +0x0ef4aaaee, +0x05b9768c9, +0x02cc5997d, +0x05e0288bd, +0x0d2580236, +0x04e3c9bf9, +0x05b040a0c, +0x0a5752ed1, +0x0a4676a03, +0x01c9a6141, +0x0cf837546, +0x0add00d14, +0x062eb9b59, +0x0301c9b24, +0x0c6bbb256, +0x085025396, +0x0c5b9b2e2, +0x038c8f5ff, +0x07266961b, +0x049507b9d, +0x020771c12, +0x093a2436e, +0x0b1df06da, +0x0220fde8a, +0x003e2bc54, +0x070d0def8, +0x010c168b0, +0x0a0edf0ce, +0x088121901, +0x01ec45568, +0x0cfa8d7d6, +0x00c82041f, +0x0e881bf9b, +0x07bd74902, +0x0a5cbee07, +0x08765916c, +0x0e60d0478, +0x03af446b2, +0x08387edc2, +0x0329c0870, +0x0e71ee997, +0x0f6b77f59, +0x07619b419, +0x07b9a2e6b, +0x0d3be2789, +0x0d8209288, +0x0ea19d678, +0x0abca5390, +0x0b6a62c8f, +0x05870efa4, +0x094847c3a, +0x012a97027, +0x029adc3b5, +0x0dcbf5a89, +0x0a2b3bbdc, +0x0671435b8, +0x05c8c6d5f, +0x044081e41, +0x082586bbc, +0x0888747b8, +0x028a5da97, +0x01629f2c4, +0x0705cec52, +0x0ab8d97cc, +0x0050f2f8e, +0x0f4497dfd, +0x0f37f01b4, +0x070d265d7, +0x05789c750, +0x04208e303, +0x08c18269e, +0x0fc9c1005, +0x0f3332b83, +0x099acdd12, +0x0d935a329, +0x0615eef1f, +0x0a46808bc, +0x053fbd7c1, +0x018d3a1ee, +0x04819aeac, +0x02d7e6fa6, +0x0dfc49ed2, +0x0f8f61c10, +0x0caa3179b, +0x01175b294, +0x0a093fe91, +0x0a9d96d72, +0x0ab4833e2, +0x0453f352b, +0x0eb234703, +0x0a4eaf3de, +0x0d440a743, +0x020d4bd58, +0x0d684ada1, +0x01f88d122, +0x09fb85aa5, +0x02e560186, +0x0b85cde4d, +0x00fdde376, +0x02102028e, +0x0b79687a5, +0x073c171f2, +0x07b6cf2fa, +0x0f2ce7296, +0x0557aca8e, +0x0b5e378d0, +0x0d917e385, +0x07941d2b3, +0x00b57d25f, +0x0e418721b, +0x0e7e75dae, +0x029a51336, +0x050cd9911, +0x0cc11b3d5, +0x03575738b, +0x04efdefef, +0x08815b748, +0x048e5701e, +0x0befb3088, +0x0b1df011f, +0x0a25f2004, +0x0b8b2dceb, +0x0bd8c36a7, +0x0bb455d90, +0x051cc0d18, +0x082afea8e, +0x0eceb0e77, +0x0820b9ee4, +0x0b1e5eb36, +0x066f3460d, +0x0ff35c96c, +0x0abef2ef8, +0x008002865, +0x086983368, +0x0e1a54777, +0x03659947d, +0x0b998e19c, +0x039b8ec18, +0x00c029f88, +0x08c137265, +0x02d4319fb, +0x0b3c665d2, +0x0c9d4b09f, +0x057e1bd27, +0x01e4793ec, +0x0b75f3aa5, +0x0fd09cd3a, +0x0579ed7f8, +0x0920675ba, +0x0389437d6, +0x02e6ee773, +0x038763b48, +0x08eca3b56, +0x07de9d8db, +0x0085b0d08, +0x0d4b19ffb, +0x0a71baf5f, +0x0d3f45366, +0x08e7a49ac, +0x007d35d40, +0x0adda49ee, +0x0aaee932c, +0x0faef0e58, +0x03a7c0e79, +0x00bca447c, +0x0dfbf63f4, +0x0150b5bee, +0x0413dbb7f, +0x01b1bcd4d, +0x047d690b6, +0x01df8bef4, +0x00795853a, +0x00550df11, +0x066abf45e, +0x059fa97c0, +0x00a312492, +0x04f87391f, +0x08975065a, +0x0534fa497, +0x06b63a021, +0x029aa1066, +0x060e23c4a, +0x0a7f0d89b, +0x0b90fcf6d, +0x0d5d39809, +0x0c0e9dfd1, +0x0e3bc9df1, +0x062829cdd, +0x063278cce, +0x0fd58848c, +0x0d2b08436, +0x0dadd96ea, +0x0ed4f5d37, +0x0a2e85dc2, +0x070d291ec, +0x0c84ea23c, +0x01384f584, +0x0102141e6, +0x08b6664d1, +0x04bcc9a42, +0x0ee11f7a9, +0x0097ad1d2, +0x0ae7a0498, +0x0c7c8a11c, +0x0bb436d45, +0x08b5411e5, +0x045cfe65c, +0x0736868e9, +0x0939b1df1, +0x0ac3ffce5, +0x089442521, +0x00736fb86, +0x0d0fb22d1, +0x0bd9ae5b6, +0x097919729, +0x05dd35703, +0x0151d3174, +0x06a64bc41, +0x02adc832c, +0x0e8be6c33, +0x0bc3b091c, +0x07891cf45, +0x03461556c, +0x0d0cec8ce, +0x01ac043bd, +0x02e2c2c3a, +0x0e686572f, +0x0e7911340, +0x0a7d9fb2b, +0x0a9abdba7, +0x0674da9e9, +0x0283aedda, +0x0d4a85d5c, +0x031b6244f, +0x0d2a9d97a, +0x0e240e651, +0x0d788cf89, +0x0a672e920, +0x022711017, +0x03be87af0, +0x08afa1c6c, +0x0a1283702, +0x0b8561956, +0x0fe1b5805, +0x0c3d0caaf, +0x056d16011, +0x0f540d24e, +0x022c0accb, +0x06a6d7a94, +0x0596d7d0c, +0x0266892ba, +0x0554b86c4, +0x0ce706b0d, +0x02945887f, +0x07cdd2ba4, +0x0cf9403a0, +0x09797cf37, +0x0572916b3, +0x0377cb1d3, +0x0a5418938, +0x0ae3a81d2, +0x0cab1b51a, +0x0365f8e59, +0x00af0ead9, +0x0e3a8e44e, +0x023935aef, +0x0472aa028, +0x0e563ff5b, +0x0a517cb98, +0x03f5512a6, +0x037f384d8, +0x03ac4ab5a, +0x0175f94b2, +0x0f90e5af2, +0x02747b7f4, +0x03d94abdc, +0x0617eac7f, +0x09782b9ba, +0x099865421, +0x0c2fcbefd, +0x089835bf6, +0x065319688, +0x0d308f2b6, +0x0e5153c4d, +0x03d343a8e, +0x042d0eaba, +0x09bdee04b, +0x05593a175, +0x0c7d34e64, +0x0d087c12b, +0x067fccebe, +0x0b9b22726, +0x06fca01ed, +0x062d9f6b7, +0x09bba00f2, +0x06d4b023b, +0x01bb7c88d, +0x0dc644d9b, +0x028c2335a, +0x0f4457a56, +0x0dafe17ca, +0x0d59392f0, +0x0cf530fe5, +0x0ce8604e5, +0x0a169b8bc, +0x0d9d02040, +0x0771f620f, +0x0139ec980, +0x0a4248740, +0x0849551f8, +0x0731292df, +0x093714f7b, +0x0d3fa68e4, +0x06bf069ea, +0x0f1cfbaa9, +0x0ea132022, +0x0a116eff2, +0x0c133d169, +0x0cc206b7c, +0x0717e4f61, +0x05872efcd, +0x009facadc, +0x06a08b735, +0x0007c492d, +0x05ec9b776, +0x04459010d, +0x007729924, +0x087bc613d, +0x0bc10886a, +0x0274693c7, +0x0200c2c6a, +0x0de70c7c6, +0x06bf33c9b, +0x0bff97dfe, +0x01958dbc5, +0x0958d198f, +0x0f1e8a222, +0x0f870d120, +0x040a9c32e, +0x073203d5b, +0x049fc2373, +0x0292e60aa, +0x0a83dc2b3, +0x0373999c5, +0x05d5b2df7, +0x095910da9, +0x000e9c76e, +0x04547130c, +0x0d4a2ecbf, +0x03b2cedd3, +0x08c143747, +0x08b8bf54d, +0x0b6838764, +0x0a737cc3a, +0x03cbe6464, +0x0c141fdb1, +0x0cca3695b, +0x0eb5e837b, +0x06a052921, +0x0dbccede3, +0x022ce1071, +0x047e3bf83, +0x0a1800cd3, +0x09ee00e03, +0x08cba816b, +0x016524e69, +0x0dce86fa3, +0x0769a67aa, +0x03dca4bf1, +0x07d891f4e, +0x0aa79ab07, +0x03f531a46, +0x0bdc89dff, +0x0ce7d6870, +0x01bd8cd4f, +0x05a6d5d54, +0x05f63fdfb, +0x00db79827, +0x09b90e1a6, +0x0c1e534b3, +0x01e498782, +0x0b4070c46, +0x0a86fc014, +0x07c15e53c, +0x00eff6667, +0x080d50ede, +0x0f189c46f, +0x012833de3, +0x04d4b95fc, +0x06f90eac9, +0x0f4f957f9, +0x0ec322dad, +0x0057a32cf, +0x0b0fc898a, +0x0c9d7f862, +0x050392ff6, +0x0bd79fbda, +0x013f7fb6b, +0x06aaabdd4, +0x0c33fe436, +0x0c88905e4, +0x087f458e9, +0x0cef99773, +0x0ed104fe8, +0x0ffce9a42, +0x036191607, +0x0274c0ef5, +0x0e90ec69c, +0x0c877c54e, +0x0c6329202, +0x03f6cca3a, +0x07756e7fc, +0x0ba965b3f, +0x0174f53e6, +0x0cf29325f, +0x0a1cfc3d7, +0x0df6f3c1b, +0x01a6ae902, +0x0c5f9a7b0, +0x05c57f158, +0x068b99cee, +0x03aaec50a, +0x0534b68e0, +0x087553109, +0x03abd7cef, +0x0aa1726f8, +0x071bab01a, +0x0d197197d, +0x0ec6b59b6, +0x045228269, +0x004642329, +0x09cb53c11, +0x0cbada70a, +0x07d0bd414, +0x0aab8f38a, +0x043849255, +0x0c0513dfa, +0x086a73872, +0x020372b8d, +0x043a9f871, +0x001eaee76, +0x09714bb56, +0x08c905fef, +0x0596efe7e, +0x080bfc9d7, +0x0d3cf9620, +0x0daec6987, +0x0ec5987dc, +0x0daf0f14b, +0x0ade5de61, +0x0e6c400c4, +0x0e4fe8267, +0x076f527d5, +0x0076a500d, +0x0e822b9ba, +0x0358b513d, +0x0dc7090d3, +0x059dd01c5, +0x042ffd60b, +0x0a355033e, +0x0541dfe21, +0x0e76c35a7, +0x0e315c9da, +0x08b41841f, +0x0569b306e, +0x0915a11fb, +0x062999d6d, +0x0440898b6, +0x09a4333b9, +0x04b090761, +0x01cabe711, +0x0e7c73c9a, +0x086fae33d, +0x041c38471, +0x06e1ad5e2, +0x0a6adda55, +0x04588fa22, +0x0606c8434, +0x059a01a5c, +0x04e167814, +0x0f615d33a, +0x008c3937e, +0x0eb0aeceb, +0x0953117eb, +0x055d66265, +0x018a4c60a, +0x0c6bb7c0f, +0x0bcde6834, +0x05635bfdb, +0x0fa34dab6, +0x0f20e0a01, +0x05a88d07b, +0x0561d503f, +0x01fb5fd75, +0x0d9b6123d, +0x0788b973a, +0x09270c167, +0x006ffa311, +0x0ae67782d, +0x0996391fa, +0x0105bf236, +0x0c362032d, +0x01b496335, +0x03368b034, +0x0c91ad18a, +0x072ee875f, +0x0d1e075da, +0x0594549c7, +0x091e8ce74, +0x050510083, +0x0be95f446, +0x09efed3b5, +0x0af3f7ca4, +0x00420c8c7, +0x04433207e, +0x09bf88bd0, +0x0909513ed, +0x06641ff6c, +0x0522a84af, +0x0319b0b10, +0x0365a1827, +0x026c0d8d4, +0x043d39dba, +0x09e2c0624, +0x0c76c10e9, +0x09e054db7, +0x079a95fde, +0x0faee8955, +0x0509b9ce5, +0x00a460a16, +0x0a8a7293a, +0x062e5afc1, +0x0e55658c0, +0x0be79bfd0, +0x00e000940, +0x08e3224c1, +0x02c22d942, +0x014325f09, +0x02422b3b1, +0x05f35deba, +0x076e06bb4, +0x0e63f06cd, +0x0e5987660, +0x03a30dde9, +0x0627b5782, +0x0c9e7e953, +0x01019537c, +0x0be07df22, +0x0ed9498b0, +0x0d81a065c, +0x0398c954f, +0x0362f5ec5, +0x006d80260, +0x0611eca01, +0x010849659, +0x0ef4063c2, +0x0b04d4468, +0x05e7e87e6, +0x03c263c6a, +0x08a2cf204, +0x0edab6793, +0x081391588, +0x00ecf4ddd, +0x006d12d98, +0x049ea395c, +0x0615ed428, +0x0da7fb76b, +0x04dbec572, +0x0b03a9bc9, +0x0c3bdc0df, +0x009d0c6df, +0x0f002a3f9, +0x024122eb7, +0x00db94ba5, +0x08893adde, +0x0a9b50be8, +0x029b757e6, +0x0a692ad36, +0x0282270ff, +0x06b0d8936, +0x07c82e775, +0x0b609e552, +0x03bf6677e, +0x03a23e488, +0x05746135d, +0x0907b99fd, +0x0cdf8d6bc, +0x05b742bbf, +0x08fa17428, +0x08ff3039b, +0x0278eef4f, +0x01732f668, +0x0cf30c226, +0x0bdf9457a, +0x0cba7df92, +0x0548c5c4c, +0x091a2dbdc, +0x035698ad2, +0x00ccec9c2, +0x0f48f525f, +0x0b8f8929d, +0x079a75ab8, +0x0d63b3881, +0x0a7296ecb, +0x01568dae6, +0x0ae698061, +0x0ee94b5a1, +0x0f2fecdcf, +0x04745e5d1, +0x0350c2e6a, +0x071b880d6, +0x0eee6a136, +0x01d0ad7b7, +0x0680d1485, +0x0dae0ec44, +0x06e5b370e, +0x00031cece, +0x01a43a9aa, +0x01e1adfd7, +0x0fe4bba80, +0x00c83f3d3, +0x03b4ea496, +0x0c4a476de, +0x0632d7ddf, +0x062923699, +0x06f281a74, +0x004f1d8e6, +0x09c068ba9, +0x08cac6d00, +0x086332ed6, +0x058bc5fe1, +0x062c2d238, +0x0b09a0714, +0x0349c6cdb, +0x0291d79ce, +0x068d1d3fc, +0x053421a8e, +0x0f8b29b5f, +0x0886459ef, +0x0bc9be1c0, +0x07c971ae9, +0x033b4b449, +0x0ef0dfe0a, +0x076540885, +0x08f104a80, +0x0610c7d03, +0x0284dcb3e, +0x04cb62ab9, +0x037f37853, +0x04a7072a7, +0x0ccc3303b, +0x091ee67b8, +0x041a3fe19, +0x07cd01408, +0x04ac27a7b, +0x0da499c9a, +0x0fdda0bbc, +0x03837a891, +0x0a53e5437, +0x0e197a6e0, +0x0078b0a8d, +0x0a5340a36, +0x061f390c2, +0x04d2e4c09, +0x01b504e57, +0x0f9dae747, +0x0e7c74514, +0x02e74cceb, +0x0b7029f8c, +0x0e7bc50f9, +0x0d3f4c2cc, +0x0c9590c3c, +0x08e44abab, +0x0745293fb, +0x04cf40653, +0x0d351a4d0, +0x04e0fb246, +0x03621f248, +0x07664e9af, +0x0b41bc5e1, +0x0aa8a079f, +0x03876d188, +0x0a509f2d5, +0x08b4a9b0b, +0x048924179, +0x058da0b36, +0x03866f290, +0x05a11f7c6, +0x0b6607cb9, +0x012430480, +0x05a1b4c2d, +0x0269c620a, +0x058cd0768, +0x01a36e7d8, +0x0d126d6a0, +0x0813ba4a7, +0x0ead7e629, +0x0ad55ba65, +0x018352166, +0x0b907d3cc, +0x0f2bae794, +0x0870d8d6d, +0x03646c42d, +0x05af9cb80, +0x090950f4e, +0x082658238, +0x0a0f06725, +0x04ea4d88b, +0x090a6eeb3, +0x0c25ebf1d, +0x0cfa57865, +0x0921eed26, +0x07156984b, +0x039d67b96, +0x0aa57b64a, +0x0ed27eb12, +0x07946b0d8, +0x026b08d66, +0x019cc8b7f, +0x0b64f1bc7, +0x05172e68c, +0x0dab3a547, +0x0381e0547, +0x02f0bc08c, +0x043d8e76a, +0x0afd02e0c, +0x0d7b48ec7, +0x00e47f9a1, +0x0397a5b34, +0x09b7286ae, +0x036199337, +0x0fc9d5ccb, +0x09abb39ba, +0x0e586b143, +0x0977da17d, +0x0703f5ba3, +0x090deabc4, +0x0b0cf5773, +0x0f71bad78, +0x030384138, +0x0b363cc9e, +0x051211c45, +0x00731aa4e, +0x0911712e7, +0x00ffe8067, +0x039d36ffb, +0x00b9b547f, +0x08f8c8097, +0x0ca76e0be, +0x04005a33d, +0x0a59b9fa3, +0x014c37006, +0x04f606d7b, +0x0a5c28ecc, +0x0c29ca1aa, +0x0cae4682e, +0x079c243c3, +0x0448c805a, +0x004fca925, +0x05efbf8d9, +0x05117a2ff, +0x001826bcf, +0x03bc89cd9, +0x0ca82e6ae, +0x0768ad2cb, +0x09e44e690, +0x0716ec17a, +0x0459efed8, +0x0fdbc215e, +0x0c00f0304, +0x0c5f556e7, +0x05e4fdc5e, +0x0b6faad27, +0x028414cad, +0x0c0c8c0d4, +0x05abe1e78, +0x0fe753a46, +0x056502057, +0x0937c7a2a, +0x0414a881a, +0x0243ee5b2, +0x0e1ba8782, +0x081942ceb, +0x0652b7b27, +0x0e8e27207, +0x0cc368142, +0x05935443a, +0x0c3b61797, +0x027fad2bd, +0x072755244, +0x0ea72e00d, +0x0a89bf0a2, +0x0319d5584, +0x02cbf5da0, +0x0e78f225a, +0x054740049, +0x0fc4ece4b, +0x0a733f174, +0x07cf66768, +0x019b4175d, +0x0726e7b49, +0x00e156dc6, +0x02fd8c03c, +0x00c333296, +0x0ea6d9fc5, +0x00962e5ab, +0x0092168d0, +0x0770da787, +0x0b51ff6ba, +0x0005f9c6e, +0x04d54dcbf, +0x020123459, +0x07a009b26, +0x019e9a47d, +0x0e46a6409, +0x0ecb5f6ec, +0x0e55d8791, +0x06192e606, +0x05e081885, +0x039923d37, +0x01bc37c81, +0x0798bf0e9, +0x0dd097fb0, +0x045463549, +0x07979cbcb, +0x0a365a479, +0x0abf93d4f, +0x0b678480b, +0x0235ca428, +0x003f8d6c5, +0x0fa60fb3e, +0x061501749, +0x0ec9c20f3, +0x03e91dd20, +0x02d195fac, +0x093ba26da, +0x00795ef95, +0x07d004074, +0x01fb2179f, +0x033a20f39, +0x01930b031, +0x0700724eb, +0x0f1ce3d10, +0x0bef18f06, +0x0834d058a, +0x057495652, +0x05698c783, +0x0171e3d94, +0x0da258033, +0x0646ab70d, +0x08847e1f8, +0x0c20d9be2, +0x09f210e97, +0x025052408, +0x049480903, +0x01a1fa4fd, +0x091636b69, +0x08abf2f5f, +0x08544c55f, +0x0f0f57d2b, +0x0ddc01314, +0x0dbfd2422, +0x02c3139f9, +0x0646f7b05, +0x089e16c00, +0x0cbe8b391, +0x0bd38281c, +0x0aab9f12b, +0x0ab652503, +0x01e6f983a, +0x058f260d9, +0x058664e12, +0x0309a22d6, +0x038a45b9e, +0x007a86311, +0x0e3b6681d, +0x0755f7161, +0x0a3100737, +0x01e16fa8c, +0x0bfdf8dd2, +0x0aca734ba, +0x0862dac42, +0x058d4d1b4, +0x0d8537ab4, +0x0db037ebd, +0x0a8eba846, +0x074fe15d1, +0x0e4dcb475, +0x0371281de, +0x07c6de27f, +0x0822750c6, +0x09a40bed1, +0x0e63c8a62, +0x0b175be6a, +0x0824151e8, +0x03292c6ce, +0x069f45a87, +0x06990f25d, +0x00e46a987, +0x040333963, +0x0132ab223, +0x05eb568e0, +0x0d598d126, +0x06f21ef9b, +0x0aaf3d615, +0x062fbf5e4, +0x0aea4fe59, +0x0ee82b8ce, +0x084460f5d, +0x057ede139, +0x062f495e6, +0x0990a9253, +0x07def180b, +0x0c162d524, +0x0eb677abb, +0x0559256d6, +0x0122e0c2d, +0x03c1f2c28, +0x06077bf51, +0x06e3bdc6e, +0x0e8d94426, +0x069e214d8, +0x028c15f57, +0x05cfe2d34, +0x02d4f59ea, +0x0d5311e66, +0x032cc13ed, +0x0242c47fe, +0x0ab260ca4, +0x07974ae35, +0x09e015cb0, +0x097880f98, +0x028590c03, +0x015c55276, +0x0d1559147, +0x012a06120, +0x0f9e3a5de, +0x095fe2b7f, +0x03e32793d, +0x0b964723a, +0x0a360505d, +0x0369e3cd4, +0x066c5d5e6, +0x0863c2b44, +0x088d3106b, +0x0c5f1c826, +0x003d9005f, +0x08ce9aac5, +0x008d606ee, +0x064764803, +0x05ca0e738, +0x0f912aafc, +0x0e8ca3c1f, +0x05914487e, +0x0a61f663b, +0x0c045ac69, +0x044f76ff7, +0x04bcfe25a, +0x069e075aa, +0x0baef5082, +0x0f87029eb, +0x0e66bea06, +0x0df7f9a43, +0x007821e1f, +0x08c2314a7, +0x0b8bcb1d7, +0x054f67465, +0x0155e6a4a, +0x044faf31c, +0x0c778fbb5, +0x01485425e, +0x07e772bce, +0x07438ec75, +0x08fe6bcac, +0x048f1ab2e, +0x0af3d47cc, +0x0476c1b37, +0x026d0b5aa, +0x07814f67a, +0x0f702daf6, +0x02b559a4f, +0x03eb07d45, +0x07de3857a, +0x0addf5503, +0x0ecba76fe, +0x03c8a1018, +0x0265b9252, +0x00ef00984, +0x03d467633, +0x0cc96e48f, +0x0ded2b019, +0x099c3293b, +0x04a30c717, +0x08adb6903, +0x085c48d82, +0x049a2dd67, +0x07cb2914b, +0x09a9033f7, +0x0e472d2b8, +0x0511ea3df, +0x072044f0e, +0x0efe969c4, +0x021207790, +0x001703d17, +0x046dc1534, +0x0a245c87f, +0x0c05df1dc, +0x0e3fc20d4, +0x06eed9e80, +0x09fd0479a, +0x0a3773184, +0x0425fe121, +0x046c8e111, +0x0098a47dd, +0x0b269e2d3, +0x080faccc3, +0x0d7c1eceb, +0x0995e8703, +0x023f35ed6, +0x04e2eacab, +0x09d637c84, +0x01fb3686f, +0x08df0855e, +0x00e6c22e2, +0x0cdc5fcc7, +0x092fcaf71, +0x0c096fb9e, +0x0120bf80c, +0x013c7595a, +0x0dd7df268, +0x0e14793a7, +0x0d71107ca, +0x0cccc0936, +0x033bc08eb, +0x0e0cf4660, +0x02efa53ff, +0x078b8d160, +0x0bfc40591, +0x0098b8c6c, +0x07fe7149d, +0x0a3b3afc9, +0x04c89ea75, +0x0545c3d8a, +0x0ec8c6c90, +0x01aa02e6f, +0x087e9c744, +0x0228f65be, +0x060858fe3, +0x0a1f691f9, +0x08a04bba0, +0x0332e3e0a, +0x06715f3c1, +0x0d5d909ec, +0x06bf2fb5e, +0x0b80abb9e, +0x08e481abc, +0x011fc2d01, +0x03b041960, +0x00c65f22d, +0x0d3fd5693, +0x0ff1ef2ae, +0x018145e7f, +0x0bc6d8805, +0x007347681, +0x01733933a, +0x081d043fb, +0x07618badb, +0x0bec0f77b, +0x0325dba03, +0x047b1bbb9, +0x02d97c596, +0x05a636a64, +0x0bb4bc220, +0x01ca0b921, +0x09f9bf548, +0x0ea2edded, +0x0bf2f6ee8, +0x06a53dcee, +0x085f91812, +0x06afc2c9a, +0x016d8dd3c, +0x0f1a00123, +0x0038a08be, +0x0b62ec7d5, +0x0f93395a3, +0x0bb1e8b7c, +0x056432fa2, +0x09bede8d6, +0x06bc05b37, +0x0fc0834cb, +0x0682167fe, +0x0efb36168, +0x019fa5eea, +0x0cbb0e6ac, +0x0fff41eb4, +0x0d49761d1, +0x0e15ba408, +0x0b3845642, +0x0d0db3ebc, +0x094e3d5f3, +0x03fd091d7, +0x0d9b6e1e3, +0x0d6cfc5d4, +0x0f0712f94, +0x093129e3c, +0x0d48b32a3, +0x017f30e5c, +0x0f6916712, +0x0588593e2, +0x0899b12f8, +0x0cee57049, +0x0409a2a95, +0x0046b80b8, +0x01af8c4e7, +0x0ef2a509f, +0x08c8b990e, +0x00a16043d, +0x0e830f134, +0x05257bc80, +0x0e3df9a06, +0x0f79f74b9, +0x035c812cc, +0x0d95274f2, +0x09073aa2c, +0x02af5b4d8, +0x01c9791f2, +0x01f3dc865, +0x034ffee0a, +0x08beefc0a, +0x0903cbe79, +0x0dfaca298, +0x0d0383923, +0x0cdf1d74a, +0x04f6558e4, +0x08f1bc12c, +0x093e13d52, +0x062cd7cde, +0x0366a4497, +0x0bfeb90b7, +0x01e1b08ab, +0x08c94dadd, +0x0e9276f1f, +0x070f93d69, +0x0d332bf79, +0x0c6c3ce66, +0x02c26311a, +0x0f84f1b27, +0x0d6c59ffa, +0x090bc5754, +0x01f98e481, +0x02414c6b0, +0x0238b563a, +0x051c716c1, +0x04224196f, +0x0cd6e0f84, +0x04696e701, +0x00178b339, +0x03cee7be6, +0x024b5d319, +0x0906e952f, +0x08cb92245, +0x0cddf5ab3, +0x058aaa310, +0x0c9d48de4, +0x018c6b789, +0x0f820df8d, +0x0eb8fc2b1, +0x0f0c7361d, +0x0d4d7f62c, +0x0999046b1, +0x048570099, +0x07faf2f4a, +0x012c77bbb, +0x09369f90d, +0x0691c2293, +0x0bb9d6cfd, +0x0266030b7, +0x0cdc30036, +0x051e1de9d, +0x065910637, +0x01f2524d8, +0x0445bbd1c, +0x0d49183e2, +0x0349e808e, +0x00b454696, +0x0a93ed6a0, +0x0b68f06c3, +0x00337c951, +0x01df92f0c, +0x04cfa47bd, +0x00c5024ee, +0x0b1ee0c8e, +0x0f3ca099b, +0x0a9887991, +0x07404e5cd, +0x022c72aa9, +0x080271e35, +0x0928ab0ee, +0x0379e5c76, +0x0d66d021f, +0x00b5f1627, +0x0160f4f68, +0x013e13710, +0x0fbdd8927, +0x0d69b9818, +0x0ec0764d8, +0x00bbbca12, +0x04af5538f, +0x0c349c42c, +0x01b9cbb59, +0x02fc4c340, +0x0960542c8, +0x0231606d0, +0x0272ce00a, +0x00e95c0fc, +0x06355bc25, +0x0b6ba3523, +0x0349118a3, +0x0f3c9d2a6, +0x0ed1dabc6, +0x009b14b73, +0x026afbbaf, +0x08696bd40, +0x02d517018, +0x0b61b831b, +0x03e2d5d44, +0x01a41a0bb, +0x08a9b2fbb, +0x092dda197, +0x02c3d8f82, +0x02ab0604b, +0x0ac83d757, +0x0376a3127, +0x042acc8bd, +0x0ace3003c, +0x038b31b27, +0x0a867dca3, +0x09bb24dfa, +0x0e8837c05, +0x088e4e68c, +0x0b54c36ca, +0x00007d83a, +0x099f137bb, +0x0370a80cf, +0x0b0568121, +0x0ead29e54, +0x0f17c0ac8, +0x09cd97852, +0x015823264, +0x0faf8cf2a, +0x0262a9d93, +0x0e89c746b, +0x0b0e3ddf6, +0x06ca29869, +0x00207af03, +0x0c540fa0b, +0x03db6b20e, +0x02bf1b353, +0x00d86df2f, +0x08d788531, +0x0513cf456, +0x0d89931a1, +0x0bf3b3e5c, +0x06b1a2781, +0x09415fa2a, +0x03c02a6b2, +0x06205fe4a, +0x07b10e7cb, +0x0dc7e851d, +0x04cec3868, +0x0fc636315, +0x0c81e2339, +0x0b24666fe, +0x01eac7a8c, +0x0f0ca4cbc, +0x0e66dbc99, +0x09b0031cb, +0x0b88e4621, +0x0a1f121ad, +0x0752121d1, +0x08809f237, +0x028ea3a77, +0x06591606f, +0x05aefd9f7, +0x003f48da5, +0x068b82746, +0x0e69f6779, +0x0aae9d884, +0x03b17b714, +0x01445e25f, +0x0b427c6be, +0x081d09adb, +0x0118f6996, +0x0ce55aae8, +0x0cfe4dea9, +0x02baf2e31, +0x06261696c, +0x03a8a0b0a, +0x0c64b91f6, +0x0c861e514, +0x065ff8cdc, +0x012ec49bf, +0x04b9f78a3, +0x088c74041, +0x0c542cd4a, +0x0824f3dc7, +0x0438b7c7c, +0x01561da46, +0x0137a3e94, +0x007e77e86, +0x097421dbe, +0x050a2c445, +0x0839ac8e5, +0x02694b69c, +0x00604c37e, +0x0c2c1dcbb, +0x0ca82518c, +0x0867e9a1a, +0x0e3e9f46f, +0x036841cbb, +0x0041ac211, +0x0fd87f329, +0x0f3227222, +0x0e6adb266, +0x08301a4d5, +0x045447b08, +0x07b510ab0, +0x0722a3be3, +0x0e685731c, +0x04f2ebb01, +0x03d20c2a1, +0x00f9925d8, +0x0e905d8d1, +0x0dc64d43d, +0x0442d59b2, +0x07c7fe99f, +0x03d40ba9c, +0x0ffd55cb0, +0x0b13d2cba, +0x094e2092c, +0x06deb2d1e, +0x0256c3a0a, +0x01cdda65e, +0x039ef4947, +0x0aef511d3, +0x07860b4d5, +0x04e1b7581, +0x06295bc3b, +0x08bde56eb, +0x0860620ab, +0x03876f625, +0x0cc3c6a2c, +0x0c5bb118e, +0x0db715521, +0x062262bef, +0x0278dea5e, +0x0fa2c12eb, +0x0fc5a7974, +0x0ce2b804c, +0x0cfd8c571, +0x0781774a1, +0x0d5213ae9, +0x09628e9c4, +0x03f4e0c99, +0x09fc42657, +0x0b3a1275e, +0x03f270605, +0x01a5dfc2c, +0x049f1ebb7, +0x099511a2c, +0x091866bc0, +0x087a7880e, +0x03e977e4c, +0x02df8a287, +0x0d167e75d, +0x0ef9fd748, +0x0ccbfccf5, +0x0a6340f6f, +0x03bfb1382, +0x0fd29f4cd, +0x0944e7aa1, +0x0f037a29d, +0x0a665ba47, +0x08c6c68ca, +0x09c21a987, +0x0b787e9ea, +0x048b33033, +0x0f9e3a84d, +0x0e90fe184, +0x0dcc1b7b1, +0x04d26914b, +0x0cd500124, +0x05caabb46, +0x06cb6e01c, +0x06784e309, +0x0e5f015ed, +0x0567f72c5, +0x0e1059aaa, +0x007a34dee, +0x0d5068916, +0x026aa2553, +0x03348cace, +0x0a46e5831, +0x0c485f8b3, +0x014bb3b3c, +0x07368538d, +0x0de1d2085, +0x01cb318d2, +0x039bb763a, +0x0a6e0852d, +0x08ec0ca10, +0x0c29a1580, +0x04c4b9021, +0x05359c1ec, +0x0bddc34c2, +0x0108fb074, +0x03a488313, +0x004b81a99, +0x0c2234694, +0x021d0293b, +0x0efb49c70, +0x093feb123, +0x0c2b68609, +0x0eb5d1c40, +0x0681370e6, +0x034766910, +0x02b9b462a, +0x076a2d177, +0x031dea291, +0x084b06b3a, +0x027e947b9, +0x028979e59, +0x0f9cf004a, +0x00e926ade, +0x0b5231b49, +0x0636bab96, +0x01984dce2, +0x037a27733, +0x0034590a2, +0x064878e13, +0x0b0905861, +0x0a7403729, +0x0ecd1fd05, +0x0d01cffb2, +0x0430ddace, +0x023d7d458, +0x0e89f0832, +0x0cdd170d8, +0x0c877f33c, +0x005a19ecf, +0x0c1730789, +0x05c82c696, +0x0e1946cd9, +0x0ede3d973, +0x0b0f1f15f, +0x0f59fb63f, +0x0da5765a3, +0x0dd3317a8, +0x099f0eb45, +0x0bc976bea, +0x06c0d3a19, +0x04059e482, +0x027916a56, +0x021b7eba7, +0x0461bc9e9, +0x0d278efad, +0x03159fe4d, +0x0cfe61f72, +0x048718e4c, +0x00f0d3496, +0x0dc8f1757, +0x08c0208df, +0x0c02538ea, +0x04b625433, +0x0de6fed5a, +0x068523b4c, +0x0a3e5bbcc, +0x0155e6aba, +0x0edc7cdd5, +0x0b093bf54, +0x06386530a, +0x066f72ad1, +0x0ad04649b, +0x0649973c7, +0x0d4e5b118, +0x0ee9a8469, +0x0b9713bd1, +0x0c44c9844, +0x062bbe94e, +0x0d20707f7, +0x0c17a0364, +0x09bd3ef70, +0x02e99a6fb, +0x055de442d, +0x057c6048d, +0x0988e5979, +0x043de27f1, +0x0cb65bf99, +0x05a9467d8, +0x05d487298, +0x09e7bfc1e, +0x068d2a00f, +0x03a643441, +0x06da23fd6, +0x007c7fb9a, +0x0fa851d2e, +0x0da64ce2b, +0x0716e5f0f, +0x0b3bce144, +0x0dd245b5d, +0x02656ab20, +0x0c3cdfed7, +0x09cbedb63, +0x02bdc1386, +0x0b193c0ed, +0x0ecb98b29, +0x0d276276e, +0x062a109a8, +0x0c8b06ca3, +0x00354e59a, +0x0de1ab95b, +0x060fb4dc9, +0x0324ad2f3, +0x0f2486c3c, +0x0972ce44f, +0x06b011224, +0x0bf27f8b3, +0x07a8f0bf9, +0x0f6012ad8, +0x083e017a3, +0x0349d2c23, +0x012a2b6d2, +0x091a0fed5, +0x08ea65fa5, +0x0640bfbc7, +0x0e110536b, +0x0a1bf9612, +0x00d337693, +0x0d5809f08, +0x08c0516ab, +0x0463ee0c0, +0x0a4fed5c1, +0x02bda6e62, +0x0ee322eec, +0x014f78a8d, +0x0564feed6, +0x0cd55ad37, +0x06ea63b7e, +0x0837eae6d, +0x0dc92d46e, +0x0f464b83c, +0x019cc7edb, +0x02b90558a, +0x01ec5cf5e, +0x0e46762ca, +0x01392d45c, +0x04e5344a5, +0x0ec8e7d9e, +0x083060f1c, +0x03ec08cc6, +0x0abc161ea, +0x06dee055d, +0x0011276c6, +0x0e217b7aa, +0x0e3d858aa, +0x0f82e4d1b, +0x055503d9d, +0x0e4f5527d, +0x019c5968f, +0x0a4f7d2e5, +0x019aa7308, +0x0bca749d5, +0x0d582e2ef, +0x0e023b1eb, +0x04a2aa219, +0x03fca3525, +0x0a060abe3, +0x08491f0ad, +0x0eedc8429, +0x0fa3ec8d4, +0x042221826, +0x053d1b647, +0x0cc41b547, +0x03bfcc793, +0x0dc5481b9, +0x0c643b68e, +0x0b96a00f6, +0x0ebe39d99, +0x07cf37f20, +0x017c6c68a, +0x08b035d27, +0x02825f6c6, +0x019c41b23, +0x0327753c0, +0x00048326d, +0x04a236dab, +0x0fcef379c, +0x01b187bd2, +0x0624e0413, +0x04ee11385, +0x021f0248f, +0x0c538d568, +0x06ad421c3, +0x0784bffd5, +0x0420eb580, +0x0265ba85b, +0x09eab4435, +0x0a75ebad4, +0x032972823, +0x03d7b3bc6, +0x067cf5945, +0x0fe7c6cea, +0x03564d52a, +0x09f84f0f5, +0x01db540fc, +0x032dcc570, +0x0f9c2453a, +0x0a169bcfd, +0x075435bf9, +0x06c004eab, +0x062249887, +0x0c2fc0fc7, +0x07b59fd5c, +0x05c101e96, +0x0ae929cb6, +0x02888439f, +0x0e1dd18cd, +0x015a89a71, +0x017b15c64, +0x0d39f8662, +0x0f6ce8480, +0x09b697b1f, +0x070913b7d, +0x01209d382, +0x014a2b522, +0x0afeefc39, +0x0ef2f7c8e, +0x02d9baf10, +0x06345de6b, +0x0062f66e8, +0x0370d00ab, +0x06543cfce, +0x06a870583, +0x08ea63a55, +0x01e9c781c, +0x0fe9f4f8a, +0x0dcc352be, +0x01e152c0b, +0x01d6605eb, +0x08175b57a, +0x09ae65766, +0x035a10358, +0x07426e25b, +0x0ead33aa9, +0x01b3d31c2, +0x0a6eb3ca9, +0x0d9339779, +0x0a72baef3, +0x083cd1325, +0x075cf3a3f, +0x0c2a36b1a, +0x0f254526f, +0x08fb490f9, +0x042e9c451, +0x09dea69b0, +0x07a46d1f2, +0x05766b3d4, +0x0b3a9fe51, +0x0480603c8, +0x0c58b81f2, +0x09454bb81, +0x0a98e5a67, +0x07b33c3f7, +0x0ad91d4cd, +0x097284d53, +0x05384d971, +0x05c516d60, +0x0ba630f1c, +0x0b170e034, +0x099dced07, +0x068840dde, +0x088343c32, +0x06486f13f, +0x04026f9fc, +0x09bdcee24, +0x026871ddc, +0x072e579da, +0x0636b2657, +0x07bdfa2f2, +0x08dfe18f7, +0x0bcdb9854, +0x039442a4c, +0x01c549acd, +0x0599e3987, +0x0ad727df6, +0x0e07355a1, +0x0099f5a0f, +0x0f068b476, +0x075ad4ea7, +0x076253729, +0x092fbe44a, +0x01722f24d, +0x0d877f68e, +0x08972985b, +0x0e416f715, +0x00d118075, +0x04536a085, +0x067ce4a03, +0x0a93a81df, +0x076bc6f4b, +0x0e9df8255, +0x0b90fff69, +0x0c01e05b5, +0x05252e07d, +0x047020bb4, +0x0ab1fad19, +0x0a2ba48fd, +0x0b82c4ebe, +0x0445fae67, +0x0cbe88418, +0x0720eb961, +0x0647284cf, +0x0112e78e6, +0x014f98071, +0x004d2f454, +0x0e9cd686a, +0x0f1381dab, +0x05883778d, +0x07fc6792f, +0x0a60631db, +0x0287ed778, +0x0ca22e566, +0x01b4bee18, +0x00abeb9c8, +0x0ed04963c, +0x08705e0a6, +0x05c769801, +0x0aee7b4f7, +0x025d36e59, +0x0e0492426, +0x0f7df0aaa, +0x07b7ffead, +0x080562667, +0x08cbecdd8, +0x050b0e373, +0x082057bd7, +0x0270e31d7, +0x008a99e46, +0x0809ea0d0, +0x08768473a, +0x06003bc0f, +0x0658bf275, +0x09ed449b4, +0x06f75eaf2, +0x0725c420d, +0x023ba89c7, +0x02f2d6455, +0x033d87eaa, +0x025672c31, +0x0e57fae44, +0x0cc613678, +0x0ffb7e938, +0x0083c852b, +0x03ac25dc2, +0x08a174c2b, +0x00697b789, +0x062992bc9, +0x046999b5b, +0x0c930d749, +0x057fedc6b, +0x00c95058d, +0x06c0106e1, +0x00d6e46ef, +0x07f463d90, +0x010e4379c, +0x0cc7d3ae4, +0x0c23d18fc, +0x0cc2205bd, +0x0bc2fa8d8, +0x0b7b4e2e8, +0x0068d3103, +0x07c4c7f54, +0x095e32fc7, +0x006d01fcd, +0x06f31835b, +0x0675185af, +0x010fcd982, +0x00bdde8d3, +0x03779d3d7, +0x0e7953e73, +0x023007787, +0x0a84a2c6c, +0x0b9ee0329, +0x09da2096a, +0x045bcefe0, +0x09911df89, +0x0bb1d370a, +0x067e27650, +0x029493976, +0x08612db37, +0x046bffdba, +0x0a6386ed4, +0x04b807cde, +0x0015ee71c, +0x05eaec53c, +0x09bd0b7bf, +0x044e062c6, +0x0a309ec20, +0x0c02ce306, +0x01db95a29, +0x0abdb582e, +0x0ca473f91, +0x0c0be6419, +0x0f40ecd12, +0x0acda0ef5, +0x0007e56b5, +0x0216d9f48, +0x0cfd4dfcb, +0x00c9d3711, +0x071b0c4a4, +0x0f137298e, +0x0c996bc73, +0x0c1796b4e, +0x0d3991f15, +0x05567e816, +0x04cef83ac, +0x08cfbac1e, +0x00b11a685, +0x0c31fc32c, +0x080cd871b, +0x0afe86193, +0x09908fb8a, +0x03c67081d, +0x050874be8, +0x0d734d891, +0x0c8a78da9, +0x03529beed, +0x0521c522d, +0x069d1f6e7, +0x0bdc13061, +0x010baaaca, +0x0d9bfa7df, +0x02b8c3385, +0x07d52e6c3, +0x04b3c5364, +0x08b41ae90, +0x0d0e691f3, +0x034c95baf, +0x067668b2a, +0x0ada21337, +0x0e98b0f4b, +0x0f1bbb8eb, +0x0536b2550, +0x066719212, +0x063bc4e25, +0x005fe01bb, +0x0fe804676, +0x0b3f14fb2, +0x08fa490d2, +0x06eb5c3e4, +0x0f55665b0, +0x0ac439874, +0x02231a8a1, +0x032309008, +0x038faaab5, +0x04b4bfeb5, +0x00ccf8437, +0x03da9fb10, +0x0248c5e90, +0x0def2c94a, +0x0c61b88e4, +0x0cb4d1a3c, +0x06d46294b, +0x08d43d55a, +0x082336107, +0x06b9eea19, +0x0ca4eb227, +0x0351e737e, +0x0d15aeb9a, +0x0bb842bab, +0x0c5e16656, +0x0fe0fd230, +0x02cb22a48, +0x0a026c29b, +0x0236575e9, +0x063a4fbde, +0x02e537204, +0x0f2f6276b, +0x0965cf94a, +0x05a88f61e, +0x0e51a1fd0, +0x0b0632ac2, +0x087c535fc, +0x05feb3ec3, +0x0644e906a, +0x009c44abb, +0x0f7d9a8d3, +0x062fffd1d, +0x01ed86af9, +0x09c93bfb5, +0x05d7e8cb1, +0x051478a2d, +0x003c0a6dc, +0x083785ade, +0x02a77549e, +0x02fe9b2ab, +0x0914c4abe, +0x02ca2e7f6, +0x057637ecf, +0x0e1ccff47, +0x0051b9f7a, +0x0512ddc8c, +0x086bb6ddc, +0x09a0cfb14, +0x003fb30fd, +0x0404d5d88, +0x062dd0690, +0x024d3c66a, +0x02116d989, +0x0575e060b, +0x0e18f2739, +0x0d1e3b20f, +0x01d1a94c3, +0x0c89ec1da, +0x040032b81, +0x0e8bf2c8b, +0x092a900b5, +0x08c9b869d, +0x05de4ce2d, +0x02c4e35ff, +0x059c93b57, +0x01a7fa3ab, +0x073e7be83, +0x0a0bc2104, +0x0d7ce518f, +0x02a81c568, +0x02d27148f, +0x036e734b0, +0x0ec0cf13a, +0x0026b09a2, +0x038eeb380, +0x0be6031b0, +0x03bcdcce1, +0x0a8e5b8b3, +0x0ab1d71dc, +0x0dcd11374, +0x046af5e57, +0x016590d30, +0x0a3bbc809, +0x0932c1bbe, +0x01c73b905, +0x0444dbf01, +0x0741a57c4, +0x00214d6b6, +0x07b1a7cb2, +0x05fc8bcd6, +0x0abd22b8f, +0x08a32b456, +0x0c9d1ddf3, +0x070af2772, +0x03bb755af, +0x0374fb62b, +0x04146382e, +0x067b84bde, +0x04af8ee50, +0x07bc7d76c, +0x0b5a1827f, +0x0ee5f14dd, +0x0337268b9, +0x0206cea23, +0x030e9447b, +0x058248153, +0x0f36c9c01, +0x018b18bd3, +0x02e8f70ef, +0x0c56c2530, +0x01e67310c, +0x093a05303, +0x0de3f2074, +0x01dadf5fb, +0x0da2b13b1, +0x00361f0f7, +0x00d7242c0, +0x0b7dc4d55, +0x0168a6fed, +0x085881e1b, +0x0b715b609, +0x09e240fbc, +0x052515eaa, +0x0ef165a9a, +0x082bc0dbb, +0x0de54339f, +0x052ea9e44, +0x0d47f2c6e, +0x01f91a0b8, +0x03c9bf617, +0x00aea49ab, +0x0768637b0, +0x0148e082f, +0x03784aee5, +0x057132931, +0x0606fcd71, +0x01c44b715, +0x08ce38bc8, +0x04234887b, +0x09b6998ab, +0x07a776c45, +0x09ee3cbac, +0x047be6c12, +0x0b3259590, +0x08c4b0a37, +0x0dccc9ab1, +0x0730c92b1, +0x04c40e705, +0x08e447dcb, +0x07faf14fc, +0x00a50d1d1, +0x07e5beaef, +0x0a15aa0c0, +0x003f8072e, +0x0c2d3938e, +0x09458bdac, +0x01f05a4ea, +0x0e60401c3, +0x00fba0b6e, +0x051963f2a, +0x02d883158, +0x0feaa328f, +0x030a6ec88, +0x029293b12, +0x048015dde, +0x010964f80, +0x018807f06, +0x0d9acfff1, +0x071fe6228, +0x0c776e7fa, +0x0fa9ba4be, +0x0a1106954, +0x040b8a182, +0x08be57f9c, +0x0a4585d40, +0x0b71704ad, +0x046937c44, +0x05a4e5b00, +0x0833bf1de, +0x09d14d7da, +0x035b01a80, +0x0c3cc5190, +0x0ee44a78f, +0x064b96481, +0x0aa105d2b, +0x03cfbf22a, +0x0ae3ccde4, +0x0dd381261, +0x0157dad7e, +0x0eb75929e, +0x030ba1956, +0x0185e1e05, +0x01d0b4d3b, +0x0261a784f, +0x05b43a9f7, +0x0addbeb1a, +0x0fc98713e, +0x0f37d1ecd, +0x0caad1f95, +0x0f3d71101, +0x09e71e7f5, +0x063b9e940, +0x09f8d7ece, +0x0354f5d31, +0x0d6592a90, +0x0e4cd1c90, +0x094e8030a, +0x0f30562b6, +0x019a426b7, +0x098b8588b, +0x0c2ee25c4, +0x0ee6d0293, +0x08a9e0808, +0x0d3b11c71, +0x044381a24, +0x050432146, +0x065b9a9b9, +0x041e9d44c, +0x0925a3fe5, +0x0a5f69afb, +0x0a0c5d5d3, +0x04d4afa41, +0x0b1c942cb, +0x0f607c219, +0x0cb6b2754, +0x06e46886f, +0x0158c8ea1, +0x088993d80, +0x00ab81838, +0x0d085e12a, +0x01ef1f9b8, +0x041e0690d, +0x012979e2a, +0x09ae7c8e3, +0x058b2cdf9, +0x0d13ba3b9, +0x0a602918a, +0x0eb4442dd, +0x09dd33ebe, +0x086e20103, +0x0d4c8e12f, +0x0541c9a79, +0x02396f5e2, +0x0d47e25b4, +0x08b9c8174, +0x0aa653a18, +0x048838901, +0x0194792e5, +0x089fc2df1, +0x05cac2d9e, +0x03fedfcdd, +0x0098c905e, +0x09ddae100, +0x059d903ee, +0x0afc23b55, +0x0bd313bb7, +0x0aa89fe91, +0x0b900435e, +0x0f3533fe5, +0x0e94e81bf, +0x0f3b42bec, +0x0f727a5fc, +0x088ed7cf4, +0x016b3f150, +0x0f5da5aab, +0x0037c7081, +0x0821e70f7, +0x08357afc0, +0x01ca0c5a8, +0x0ec1923b9, +0x07855cc16, +0x0c7482dbf, +0x029a34715, +0x03a1eb92f, +0x098b2fda5, +0x0a31d928e, +0x01e8016f3, +0x0a90fb5b1, +0x02917d0a9, +0x0411298ba, +0x02ead3c5e, +0x066076868, +0x012f6f1b7, +0x08ec6e8d6, +0x0d52b6254, +0x06f9f04c2, +0x0c59c2913, +0x0ef3cc150, +0x0a34be8b1, +0x0a874fc2d, +0x012c0a95f, +0x01ba1bde4, +0x0fe71cf92, +0x09c4cdba8, +0x060ad9848, +0x0283d73dd, +0x067e9cb05, +0x03595d4df, +0x063c4a52c, +0x04130a3e7, +0x055bd7327, +0x0657176ac, +0x034201aeb, +0x073385f9d, +0x0363f99dd, +0x0b1bab063, +0x09d905762, +0x003f3caff, +0x039f5041f, +0x079fb93d3, +0x0d0bf6435, +0x03bfee698, +0x00c4173b3, +0x0a693b2a7, +0x00a16a07f, +0x0a22ea958, +0x033ec0864, +0x001c9789f, +0x03f056743, +0x0aacdb13e, +0x0bd3c8b76, +0x081251c78, +0x02adc2a4d, +0x028822dd0, +0x0ad222404, +0x083e35b07, +0x0ffdfdf6e, +0x025ea16be, +0x00f17de5d, +0x0c6759069, +0x064f52c44, +0x0596a1207, +0x0ce95bf10, +0x0a2b26b1d, +0x0245970be, +0x0f2d3d2e1, +0x08afa6be5, +0x0e60ed8b9, +0x0909bc2df, +0x0c11d9017, +0x0c1cf7b30, +0x096f796c8, +0x0976ca8ed, +0x0f2e63af8, +0x073a6414e, +0x0cf2cef6e, +0x0af31583c, +0x0d216e568, +0x007d11c21, +0x0db1436c7, +0x0fe589c4c, +0x0b39c0aed, +0x0504f5909, +0x0664e998a, +0x0250e2ca1, +0x05475ae74, +0x051543a64, +0x0c1d79d6a, +0x02562f68f, +0x059ec22fe, +0x0453c6608, +0x0a6de30ea, +0x054f50b5b, +0x05ca3e32e, +0x02c9a73e1, +0x04130ecfb, +0x0da1505ce, +0x0ef22f8e5, +0x05f6b35d6, +0x0018348d4, +0x0948f175b, +0x09b2ad362, +0x04695d083, +0x076e1c60a, +0x051e26c77, +0x04bd5dfe6, +0x0c703a9f1, +0x0eb707bd2, +0x00843166e, +0x0e732d136, +0x02eb16131, +0x0f88d0572, +0x0c6054f54, +0x0dbc3e9e1, +0x07c51d166, +0x025f2e4c9, +0x087798e5b, +0x0bfdc8f90, +0x03a92fb56, +0x0243f216b, +0x02f506c72, +0x02c09b2c1, +0x0627ea913, +0x031499574, +0x0b67456be, +0x07d792afc, +0x032ac8635, +0x0e44ca2ea, +0x0219aa052, +0x0c0b22f4f, +0x08bdd7ede, +0x0a7ef79ba, +0x074236f81, +0x032309c9c, +0x011c9fbae, +0x039d5a92c, +0x03fa1110c, +0x0c17e33a9, +0x057081f2c, +0x0460f65e0, +0x005a42f69, +0x024d2e020, +0x0a8583a48, +0x09398d3a7, +0x09f9e5147, +0x002652215, +0x0582dfa25, +0x03689b203, +0x0352ba83a, +0x0a23bc86d, +0x02720514d, +0x0e6959e9f, +0x0dc4f45ab, +0x0393e2699, +0x017c09441, +0x0ec4acfec, +0x0118461f7, +0x0d6dc76e6, +0x0854f35d6, +0x02fbd6ba3, +0x071382044, +0x03f4d4ee1, +0x01f813a77, +0x06d1678f3, +0x0a408e461, +0x0aa40a397, +0x07e116fb2, +0x0c3324b8a, +0x0f2535db8, +0x06b9efabb, +0x0b0560468, +0x04cc6f21a, +0x0ae979d3b, +0x0c32cdead, +0x09a31fe77, +0x0d1d00c11, +0x0870cbf97, +0x0b5ab2de1, +0x05595d7a7, +0x0fe72836e, +0x0e9efe3b0, +0x053335f4b, +0x01cd01e31, +0x081339669, +0x0349f76b5, +0x02872c0f0, +0x04da20839, +0x024e73f28, +0x0b9faa2dc, +0x0f849fc78, +0x0edef2ad2, +0x003b50d16, +0x0f7699b33, +0x0d388755a, +0x01698b430, +0x089009c4b, +0x0b37cd64c, +0x047740ede, +0x0a00df612, +0x075410129, +0x0f760221a, +0x0250b1854, +0x04cb1a96b, +0x03401f52c, +0x09412d230, +0x0520096ba, +0x0a6cd8e3b, +0x0b7235c39, +0x09a47a271, +0x07cca3c52, +0x0b117389c, +0x038d63b34, +0x06ea65f5d, +0x0ef9ecab8, +0x0696736da, +0x075bd3ccd, +0x05b52b809, +0x0de95047a, +0x03b301f74, +0x064a0f082, +0x041931a17, +0x0bb105685, +0x0ce1ce0bc, +0x0e574e04f, +0x05d635658, +0x0854704c7, +0x028de49ab, +0x0d35cd641, +0x0d7200931, +0x04b74ae5c, +0x087a6a776, +0x0f69c8d9f, +0x0d5ddcd71, +0x06e6a739e, +0x0e84f3c62, +0x03fad74a9, +0x052cd2cad, +0x08af38b4e, +0x00bbc7670, +0x0229124e3, +0x0c95012ec, +0x06c19045f, +0x0363eba58, +0x09d97d5d5, +0x0b04c1ed7, +0x01830d473, +0x05f9eaa6b, +0x03cf5b503, +0x023cef2da, +0x0d6fe57ca, +0x0423a4e70, +0x0fd75a9c3, +0x03d594999, +0x0f528d6d9, +0x0b14521d1, +0x05bd679bb, +0x0e4a23805, +0x035923d22, +0x0862a744e, +0x0b60f4d73, +0x071484622, +0x0a8c8b5ff, +0x082c74def, +0x0710c7b35, +0x0012f58c7, +0x03c2ca897, +0x06ac9c8ec, +0x0e36ca074, +0x0ef8167fa, +0x09f9ead14, +0x08553b797, +0x06774078a, +0x09080d99b, +0x01d2434d7, +0x0cb91c1db, +0x0ab7d6e62, +0x068ee2ec0, +0x0dc557a6e, +0x0df985f15, +0x0820c165c, +0x0eab66281, +0x07e80fc33, +0x0694d3288, +0x031a9d7db, +0x0ab806a85, +0x0667ac60d, +0x0cd9637e4, +0x036af5da5, +0x093facf50, +0x06fa0884f, +0x0d2bd85b9, +0x03304e871, +0x0311b1596, +0x0d3f68d0d, +0x0dc43a97c, +0x0a97cf004, +0x05809449c, +0x090d4cd62, +0x02aa57d98, +0x0dacca92e, +0x03f9a75d3, +0x05cf78459, +0x01399856f, +0x0781120f0, +0x04085f365, +0x069c05d66, +0x095078781, +0x0e403aa3a, +0x008e804e3, +0x0dc441579, +0x0393c99a7, +0x0ff703817, +0x0ff058c24, +0x068517d78, +0x0524098bf, +0x00df41959, +0x01bb22b8c, +0x0d6950cf6, +0x019117b8a, +0x0fbe25bed, +0x08ce338c3, +0x0fbb3d867, +0x04ead4d6f, +0x034c5f2ed, +0x0406c55dd, +0x0fb055356, +0x0c0dccf62, +0x043790ae2, +0x05ddc693a, +0x04b9fbcee, +0x02ed73d0b, +0x0d9098498, +0x0bf312a10, +0x02acffb22, +0x004714b1c, +0x0120a7fb8, +0x00d06afee, +0x03dde190a, +0x039476ff4, +0x0d4871eef, +0x03d2c5f73, +0x0035bd315, +0x0557a464e, +0x03d7c2126, +0x027012205, +0x049aec13f, +0x0d509d079, +0x08eebd582, +0x03b4d7ed2, +0x06addb1ab, +0x020d877e0, +0x0012f4b5c, +0x0f604cdfa, +0x0c009e3ec, +0x0154a8ac4, +0x0222c0e11, +0x004669143, +0x0d57b9a1e, +0x07e9f4028, +0x0890cbf77, +0x0aa009745, +0x09d93daa2, +0x0c72fff6f, +0x0276d66e8, +0x09ec797f9, +0x0bc7e999d, +0x094f1f167, +0x089c0977c, +0x0fe352ba1, +0x0d161b88a, +0x0ef9cc11d, +0x09153f2cd, +0x046ac0a1c, +0x06fbe8def, +0x00a599934, +0x01f47e80c, +0x0319de0ff, +0x02128b95f, +0x074803bb4, +0x00da80fc8, +0x0ac371436, +0x0707cb14b, +0x00f837317, +0x07d5f6df8, +0x0caf61432, +0x0329a06c5, +0x0d5ad6d3b, +0x0a941d09d, +0x022f898b0, +0x050ac6ee8, +0x0858e7ecb, +0x0820bfa2f, +0x094f3c391, +0x0834c033f, +0x097e543ea, +0x0b8a1b6b9, +0x053daacb8, +0x03fcf98c4, +0x0b268d51e, +0x0f1611ae9, +0x09315a206, +0x0cdbed566, +0x0d7dc0408, +0x053749b54, +0x0552e094e, +0x0f485cef7, +0x0be62cc0d, +0x051da1472, +0x0f04f8964, +0x0c71027e7, +0x0e2fc53d9, +0x077544d89, +0x05d2cff23, +0x0e96f3972, +0x0ee5ed5a6, +0x02c0425d7, +0x004a0bd2e, +0x0514f60d2, +0x042e4e295, +0x02919b2ca, +0x052a439df, +0x0e1b4c377, +0x093686cb4, +0x047bc59fc, +0x0c9123426, +0x0cdd5a1e1, +0x0d4ce41e0, +0x0448921e8, +0x011b34ca8, +0x093d16d6e, +0x0b80d2e20, +0x0bc6c3971, +0x0c4f51b01, +0x0682d3a70, +0x05fdb3982, +0x0d9b867bf, +0x00d4b8bbd, +0x07cad30e9, +0x07c388342, +0x050bbcead, +0x0306c7387, +0x02e7fe9fa, +0x02318fc81, +0x0e9185b21, +0x0f39f1c59, +0x01c65af33, +0x0ef0d15fa, +0x097e0da22, +0x0bec34712, +0x0aa073e2d, +0x0935e583a, +0x0d7d43504, +0x08a1199bc, +0x09191f741, +0x0ab605554, +0x06f920b95, +0x0646ce32d, +0x06dce1192, +0x044f1db90, +0x0f9dc773b, +0x0b7e71cf4, +0x044f349ee, +0x00710757b, +0x00d9f64b9, +0x0bcf4a345, +0x0b4251659, +0x0cae580f7, +0x056a5c2bd, +0x0494a0d91, +0x0b0d06545, +0x029616ee3, +0x0a97dc501, +0x01f0112fe, +0x0533c04d7, +0x0130daefa, +0x0d5c61fe2, +0x0e223c3d8, +0x0337596b3, +0x0a26b0b42, +0x00182228f, +0x02043c4ba, +0x03bb2d76f, +0x060f54b7f, +0x0e5d13be4, +0x0986bb839, +0x03be8396d, +0x0f3fb846b, +0x0f23716de, +0x00273ed6d, +0x0faae4dcc, +0x0faef2c38, +0x08ac5c335, +0x06c418455, +0x0dcead9d1, +0x0cd08f3d5, +0x0dea38069, +0x08d069af4, +0x003b0c42c, +0x07256709d, +0x08038eaf5, +0x09212b5e6, +0x07f622c64, +0x0a9151165, +0x0625594d8, +0x08e2b697d, +0x073daab1e, +0x0b39ed983, +0x095cc95ba, +0x0b93cd7eb, +0x0be39e88d, +0x09100122e, +0x0c4303747, +0x01447eb10, +0x0168d80fd, +0x04d6c456f, +0x0d84d3404, +0x0affc1e13, +0x0a1f13475, +0x02ac6961b, +0x065140760, +0x0b0ea57dc, +0x0ad7d911c, +0x054c25d4a, +0x0feff7479, +0x069749ec9, +0x059180d58, +0x060359cc5, +0x0056bae73, +0x0720a2246, +0x07cea568c, +0x0e0a40884, +0x098599fd3, +0x0bc98286f, +0x062cc10c2, +0x07869205f, +0x07161bd37, +0x00b7fd8e7, +0x0d0cbb249, +0x0786651e0, +0x02883bd57, +0x060f49f92, +0x0d03d5b52, +0x00b33da0e, +0x02b7e90f8, +0x082b95b33, +0x0c64871df, +0x084306b4b, +0x057270108, +0x03fb1f75c, +0x00273ea69, +0x05d90f957, +0x06e1c3574, +0x0bd649d3a, +0x009e92569, +0x013eddf74, +0x04c8ba028, +0x0a12b27ce, +0x0dbdfe27b, +0x01533007a, +0x0873f44f1, +0x00084a540, +0x0d415aabe, +0x0b5fc8110, +0x0a0299f83, +0x077b8702d, +0x0b3372059, +0x0616d9a17, +0x054f493b2, +0x039ddbac2, +0x057ce95ea, +0x0f917d9d3, +0x004abbbb1, +0x074d5dccd, +0x0d1f45b96, +0x087f60133, +0x09a0f02c4, +0x0e3158762, +0x095de06f8, +0x07bb4e650, +0x0ab7ca8c8, +0x0ec9f3d46, +0x03c658403, +0x06f2ad2d6, +0x0c9a91711, +0x06633aa59, +0x000e11881, +0x0fae622e5, +0x01999882b, +0x043bffdd0, +0x0c21d3a1f, +0x067072b72, +0x0bda819e0, +0x07c61aa51, +0x0abe86c13, +0x06fe82672, +0x06ec11706, +0x099af3387, +0x027f584e4, +0x00a331125, +0x073b12b53, +0x09e0b3526, +0x04136e435, +0x04f0d2de8, +0x001fd22e5, +0x001befe3d, +0x02020d425, +0x0583dec3e, +0x0aa25e7c3, +0x0e96a2451, +0x07f40183f, +0x02c4f343d, +0x0df7d0b30, +0x0a90225eb, +0x0cb8eb2c1, +0x09b2df171, +0x002b54b0e, +0x0c7ac914c, +0x0cdffb879, +0x058fbd10f, +0x09ba1e9c1, +0x0e926d032, +0x00a134e83, +0x0b347ab09, +0x027483c9a, +0x0e8ae99bc, +0x0b4009dc0, +0x0cdfce3d3, +0x0189ffffc, +0x049994960, +0x02ce51645, +0x0c43576a6, +0x0da718231, +0x0e0794be2, +0x08cf7881e, +0x0c6ef633b, +0x0327af2f1, +0x01c012c1d, +0x0442ee411, +0x07fe18f82, +0x0457aabce, +0x0115b9354, +0x012a5e913, +0x036923e53, +0x01f21d23d, +0x0343d2643, +0x0de42e298, +0x00cb755a0, +0x0df0e661c, +0x0fbe95502, +0x0cc8d0880, +0x058b5f1f2, +0x0f424241b, +0x0858ce51d, +0x01a00127f, +0x0b3b45970, +0x0cbf533bb, +0x039f9c8c7, +0x0232b30c3, +0x037c75823, +0x019cd8685, +0x0ef0c651e, +0x0cc7025a4, +0x0bacfd6bd, +0x0d24982bd, +0x0ebfddaa8, +0x09a387ca3, +0x09c5f95d0, +0x0637e7530, +0x0d7c92b4b, +0x0cab54e65, +0x0bf5f8dca, +0x0bc2785e0, +0x038e8cf98, +0x0b1406dd5, +0x05237310a, +0x0b07239d9, +0x033d2726f, +0x08dc49876, +0x0cabff0f3, +0x01c30d7ac, +0x04f948555, +0x0ca40c9b7, +0x036af7a46, +0x095ca2dd3, +0x0ec725f3c, +0x0dd41cc7f, +0x02f211d7e, +0x048010050, +0x01bbb8399, +0x0a0bf881c, +0x0d0d9e2e1, +0x04d24cdab, +0x03b826a85, +0x0c73a6db5, +0x0c21cf387, +0x0b7744e81, +0x0c40cc779, +0x06aa03a55, +0x06d6b4b05, +0x00bfd8611, +0x08a5737aa, +0x0e9135c71, +0x0eecb3ddf, +0x0e9d192f2, +0x04aa04eb0, +0x0718fe356, +0x007cb1ef4, +0x07bb9097b, +0x06318999f, +0x006bb80e7, +0x01bc016fa, +0x0b45a3a62, +0x0513ae02a, +0x0d3b923fb, +0x0141902bc, +0x04186ff05, +0x05443eefa, +0x02fd3ac91, +0x09ea4cf32, +0x085ac1331, +0x028d329e4, +0x00a831275, +0x070a2a921, +0x0adf528ea, +0x0e84d3cc4, +0x0ebc04021, +0x0ea3c4cc2, +0x0c967b6b9, +0x079a79392, +0x031ed8269, +0x0d1c1d8fd, +0x06951439d, +0x03cc01dbc, +0x0306370b4, +0x0cb6115c7, +0x059770c9d, +0x0007057f5, +0x0375b7f8b, +0x0025f06f1, +0x0f554008d, +0x0277051fd, +0x05454dcf6, +0x0a5359016, +0x0f18a83a5, +0x0b7803629, +0x073c0b2c2, +0x0511b81ba, +0x0f40a3fac, +0x0e0168052, +0x0b8f200ae, +0x056e59912, +0x053da4bf6, +0x0811622ee, +0x072a7f3f2, +0x01bf8036a, +0x04f0ad76e, +0x07786f7d9, +0x07c1796c1, +0x0e4e9a8e5, +0x09a240c33, +0x0a97746cc, +0x04c36738a, +0x09019b71f, +0x0cbde9f16, +0x0998a6e50, +0x0a5c8ae39, +0x0a39e8114, +0x079ff26d5, +0x0d918a689, +0x0148100ee, +0x075074392, +0x0c0b88d92, +0x0df2dd49e, +0x0ef690760, +0x044336d81, +0x0fd6eaaca, +0x079c1f937, +0x00868419a, +0x044d101d9, +0x0617b00bd, +0x04f3caed3, +0x02748acea, +0x0814c1a1c, +0x0992dc564, +0x01badc121, +0x0b02b2a25, +0x049a7a7f3, +0x0c5970de1, +0x0c24c5d86, +0x0a396f3c2, +0x0fcce2e17, +0x080c99b44, +0x07f90cc66, +0x078df5427, +0x0a6460305, +0x0a6de3ccc, +0x053d3bb16, +0x0684fc52d, +0x01e1fe00a, +0x01360a7da, +0x0d0b77210, +0x04df456e1, +0x024f66589, +0x0063e61ba, +0x0387eac9f, +0x0e38d8c7e, +0x0af6f9165, +0x07171a3de, +0x021ce4463, +0x00dc1d179, +0x052db8677, +0x0371e379b, +0x07a146c2b, +0x0b461401b, +0x005948e57, +0x039430433, +0x0d68b48d0, +0x0d11245b2, +0x0fb7795f2, +0x0090f570b, +0x0d7ac8920, +0x00761056c, +0x02b38f7b1, +0x08b7d0d8d, +0x037d1a04e, +0x06f7418d1, +0x0903f8486, +0x0a34fc705, +0x0e199cd6a, +0x099738ade, +0x089d9d9de, +0x0a1176455, +0x012162a2f, +0x0940517a0, +0x0949307d4, +0x0da995fa9, +0x06b212de2, +0x0df402083, +0x006291828, +0x0b0c52ae1, +0x0eb2fd095, +0x0a20ad8c8, +0x079ce9a51, +0x051e738c8, +0x09d691164, +0x08ddfd415, +0x0fca02d98, +0x0097e91ed, +0x001b01b03, +0x0a58c3c8f, +0x082a349f6, +0x0772a6c03, +0x0d97b0bd4, +0x03e90d584, +0x04581e71e, +0x0ac377fb7, +0x01fc10582, +0x01f0b43ee, +0x0b784dd20, +0x0df85729d, +0x0c0cab967, +0x07b4fa968, +0x0430ad206, +0x0da773270, +0x0738b3c7e, +0x0c436bdd0, +0x02da6e444, +0x0736eae64, +0x07267ad1f, +0x0ae159838, +0x0598ca319, +0x01b700043, +0x042c90663, +0x01d5fbc7c, +0x0944dd516, +0x03f844187, +0x0869f8288, +0x0b5b0b722, +0x0229072af, +0x06a440e85, +0x0436452ae, +0x0f4725e7a, +0x0839b138a, +0x0ac332103, +0x02279cdd8, +0x0ed7de765, +0x071849c32, +0x06a8141db, +0x0b2bcead0, +0x0ee1bd03c, +0x0481be8f7, +0x0a3c6663a, +0x067305c5a, +0x04fe9850f, +0x01d09b09f, +0x0f57c17ba, +0x0c6733076, +0x0bf6b6cff, +0x020205edb, +0x088573f0f, +0x0555e2dbe, +0x0360245eb, +0x0f4301075, +0x0c9247636, +0x04be1c798, +0x0885e8eae, +0x09ef7f1d9, +0x0d85d8161, +0x054074b55, +0x0ace63d67, +0x0f9271669, +0x05e657b8e, +0x00cac8074, +0x06fe9e014, +0x091deb412, +0x0170dd572, +0x0f47a6ed2, +0x01a2d4d60, +0x088424b3d, +0x007a8ca44, +0x0e64f773b, +0x01b8d6d39, +0x01a2546e9, +0x00a7b184e, +0x084a4f9d3, +0x0f74f4d72, +0x027dc9d5e, +0x0acb307c4, +0x00933d2a8, +0x07c3812b4, +0x063982ff8, +0x0e44e8e4a, +0x06081a7cd, +0x03d66a5df, +0x0dcf1504f, +0x0bcb4931e, +0x05c11eb42, +0x045d63fc7, +0x01802c2a7, +0x0dabf0aec, +0x0c6bc9729, +0x005713aeb, +0x093ba667c, +0x08acccf8f, +0x03cfa645e, +0x01f2197bc, +0x09385427c, +0x04b40953b, +0x081ae6171, +0x065e8e280, +0x09097b651, +0x048f35e02, +0x05bc60bd3, +0x08fbe2c74, +0x07b1fca00, +0x05c785354, +0x047136cd3, +0x025ae0516, +0x020b5cc0d, +0x0ad8d0cad, +0x0cb6699a0, +0x0792a569b, +0x0ff9029d9, +0x02db0d1e4, +0x015c604a5, +0x0709ad7ff, +0x0c0b02818, +0x053d161fa, +0x0cfdbe6de, +0x064b12829, +0x01e58a029, +0x06770b13c, +0x01bfceb60, +0x0ff961e49, +0x0b1e379b1, +0x0ff47679c, +0x08425f71c, +0x00f40cfe1, +0x0fa362223, +0x061dc8c0e, +0x02c792e66, +0x013b8e7de, +0x06fc96e90, +0x019ad5bdd, +0x0839e4ca7, +0x0b519e116, +0x067460c81, +0x01a374d0b, +0x099ec2868, +0x0cc3f782f, +0x09a84437e, +0x0227c10c3, +0x0b34bcb04, +0x0d0254119, +0x0cdd2efcb, +0x06ef15d13, +0x0caba92d3, +0x04304b59c, +0x0bc35b0b3, +0x028e14140, +0x0f1898db9, +0x01b2b1404, +0x0696dd3d2, +0x07e354f50, +0x0ba622d58, +0x05accc9f1, +0x00ce11d52, +0x02cc36cee, +0x0d5899567, +0x023a15168, +0x0af7566c5, +0x003b8ed06, +0x06bc00100, +0x08f8f4111, +0x023fb02aa, +0x08e3b33e4, +0x0bf735a31, +0x02974d5f7, +0x06859496b, +0x06bf74fc7, +0x0a8b2a569, +0x06375933b, +0x09763da64, +0x02af6126d, +0x0524df007, +0x08f299824, +0x01f45febc, +0x0aa480bb0, +0x07ff1ee93, +0x07458f49a, +0x04b51fd28, +0x07f72da7e, +0x0821e0853, +0x023879a51, +0x0d089b54a, +0x0577a15af, +0x059b0f3ab, +0x087d59486, +0x0f6a4aa3f, +0x0bcfe3b70, +0x055dbacd1, +0x05f908fc6, +0x03ba52c2a, +0x005fd5617, +0x0bdd4b7c2, +0x01285ff07, +0x0a13ff3d1, +0x08912807d, +0x00e7c2710, +0x002a073ca, +0x089ade413, +0x072c7d70c, +0x072e9fe79, +0x05fb0d605, +0x0145b9a5e, +0x0fc090b06, +0x0e9ae01de, +0x01afb8e94, +0x0826e20a5, +0x0a9459fc3, +0x0f47e2194, +0x0f68522af, +0x0835e2639, +0x0546a0aa9, +0x0413ddee1, +0x0a485d119, +0x086cbcb31, +0x0c0ab06a1, +0x0727150a6, +0x06739486d, +0x05b5a2e52, +0x0301272ac, +0x026e7dd8b, +0x0f6b657cd, +0x0539f465b, +0x0a030d3cd, +0x0db111f8b, +0x0d1d064cf, +0x01a303fc2, +0x07339cf0a, +0x07bfb3283, +0x0e09fc45c, +0x035f788f2, +0x033d29556, +0x0b4cb6a5e, +0x085591ba5, +0x0d46aeeed, +0x077ec0e03, +0x0291aa731, +0x0eaaa1303, +0x0eed2c77f, +0x07f518f7a, +0x0feb9c473, +0x0f07799b6, +0x0bf96a324, +0x0a757b580, +0x06f0cc394, +0x0145075da, +0x0081811e4, +0x0ce93a5c2, +0x0d9b7412d, +0x0b3cc02e8, +0x0a42dd3a5, +0x080b86989, +0x05c5f9bde, +0x0a9ffb84d, +0x0318cd4ee, +0x0deb96c94, +0x0047fb4bb, +0x0ab820009, +0x04eee4427, +0x024a8398d, +0x09ca80764, +0x097b3a3c4, +0x0edb82cc0, +0x05bdaca8e, +0x018c7ed2d, +0x065634e3f, +0x06bf3281f, +0x05c820418, +0x0c7f5af07, +0x0af39180a, +0x0c3725060, +0x0cf5d429b, +0x0b732a927, +0x0677405bd, +0x03da67bef, +0x09212e532, +0x0f27299f2, +0x03126eb89, +0x0d303c551, +0x0a56e551c, +0x0d865a3f0, +0x07009be33, +0x0fa716db9, +0x0fa8a997a, +0x086809518, +0x0dafc66dc, +0x05613ef99, +0x0fee92b10, +0x0bca7a45d, +0x04343aff4, +0x0b3b346ff, +0x08ed82a1b, +0x0ac626a6b, +0x0c17b0f0c, +0x03aa020a8, +0x06130c5f9, +0x0c0166841, +0x0802414db, +0x0acdc66da, +0x0a70ff7d1, +0x0d00cce95, +0x0397dc3ad, +0x023fab591, +0x0e7fb959f, +0x07fda7adc, +0x096245bce, +0x0b0f269b4, +0x075e78e95, +0x0782fb615, +0x0a6ca0f1b, +0x0bfb4e028, +0x062c26803, +0x0fd3a8d9a, +0x0f27ee268, +0x0dda9850a, +0x04a40101f, +0x092676e9c, +0x03129249b, +0x0c0b4fe77, +0x0653e32f5, +0x0e8356584, +0x024fdb369, +0x0ed89025c, +0x0d75b067b, +0x022e188c7, +0x051928af9, +0x02363fb1b, +0x0b1ef966a, +0x036e6cde2, +0x03f54dd58, +0x0a34a37c1, +0x0aec245ab, +0x06184a35c, +0x0a6235451, +0x0d215d068, +0x0a648137f, +0x0547ab213, +0x09619c00e, +0x02c9096bd, +0x0a986b95c, +0x08741fa26, +0x01389200a, +0x0a7ce72bc, +0x0230a444a, +0x0ff268d4a, +0x0c5490726, +0x02d4733ee, +0x07d9806ba, +0x016aeab18, +0x083a03ce4, +0x00d43b57b, +0x0b625c61f, +0x0cf7cebb9, +0x0aea15c33, +0x008ba5317, +0x047c7eed2, +0x0a0d8d16b, +0x0ae1a2799, +0x08ea45c3e, +0x085afebe5, +0x066c5273b, +0x00bea5479, +0x064234417, +0x0f6744b9a, +0x09fb05ca0, +0x0e1c4ba53, +0x0f5e168a7, +0x011d37491, +0x082bd56ef, +0x01bf99a04, +0x0e3a83d61, +0x0678ceea2, +0x08f94994d, +0x0e29c5149, +0x047b41929, +0x0e8e1d3dc, +0x039ed3e0e, +0x0977702cf, +0x046fddc59, +0x088a71d78, +0x0ffb895f1, +0x0fe101f13, +0x0a78ec2b1, +0x0ff828bc4, +0x02ea5ec5a, +0x061c2618b, +0x06946b55e, +0x00dda21ff, +0x0b17f9617, +0x0c370f826, +0x04318da25, +0x0bca38d81, +0x0e8a5d01f, +0x06d86fcac, +0x04cc9eae3, +0x01eefb8d0, +0x026354752, +0x065d9c942, +0x09050aa50, +0x0459ded48, +0x002fa50c3, +0x08872d505, +0x0fa12a35d, +0x042dc4938, +0x084ea8334, +0x0caac7b64, +0x0a99865a1, +0x02a62d48a, +0x0a26b29cb, +0x03cfeea25, +0x0d8ad951e, +0x06add074a, +0x086dceabe, +0x07a4b9e11, +0x0ee0694ba, +0x0501a0eae, +0x03eeabc9d, +0x002943ff9, +0x0d2e820b9, +0x081e76b87, +0x0e4cae57f, +0x0bd2348c1, +0x0b46285ea, +0x03718b3de, +0x0a38a6600, +0x00e238331, +0x0744e245d, +0x01bac619c, +0x05b472e44, +0x0028ca977, +0x0b573a43d, +0x0701a3a1b, +0x0f191dcc2, +0x0a892bb13, +0x0be66582c, +0x0836f44ba, +0x065cb4cb6, +0x0459bafa0, +0x01d250872, +0x0178039ba, +0x0dd8ba3ed, +0x065766b8f, +0x052eecc3e, +0x075b48ace, +0x01e85855c, +0x09f698782, +0x0586fe893, +0x0816443f8, +0x03145087d, +0x0d0e24239, +0x0c5846c7c, +0x085429e07, +0x0b20a1c2d, +0x0d7709c9d, +0x0808ed40c, +0x09c6966b1, +0x0e99f2bc6, +0x0448fa9da, +0x04e135676, +0x0b81e7230, +0x0838aa297, +0x0d5422656, +0x03e6fd993, +0x0ec73b89e, +0x094416e14, +0x0b1909628, +0x02864d050, +0x00f31757a, +0x0cf1d83a2, +0x043c19729, +0x02a24ab06, +0x096c553b9, +0x036fbb8c9, +0x0abea3271, +0x0bd540f67, +0x068a37931, +0x0d6e53cad, +0x0b09f44aa, +0x01e1cb8a5, +0x0212f8a38, +0x070dce487, +0x046bb4eb8, +0x0dcf68e58, +0x0ec4065a7, +0x0324730e9, +0x0721c83ab, +0x00b618802, +0x0e12ccd17, +0x028c06d64, +0x02ed71cbf, +0x0469642f0, +0x093f53f8a, +0x0b7fe98d1, +0x071d3a914, +0x0727958a2, +0x054ea5bf4, +0x0cd274331, +0x04abd9df8, +0x02fcf269c, +0x090d74b39, +0x04aeecf17, +0x07de78966, +0x0d7b25508, +0x01f4009fc, +0x0a29953d2, +0x08e94044d, +0x0a999eb05, +0x0da53fa38, +0x0d3fad67b, +0x0755ac6e9, +0x0ffe810f3, +0x0a7ed5320, +0x06eea3f8c, +0x0a099c4fe, +0x036cd1bd3, +0x0b18464f6, +0x02b8dd21a, +0x079c533e6, +0x0d7c1838e, +0x0cf9b265b, +0x015c4fbf2, +0x099025728, +0x059779efe, +0x0034f835c, +0x042bd53aa, +0x09ecfdd69, +0x0015ede64, +0x0ea775e5c, +0x0d6c354c2, +0x07f1fe5e1, +0x0983c0c56, +0x08e08c4e7, +0x07307a8cd, +0x02973a9e0, +0x0bfc97ed9, +0x07371be3d, +0x01c7ca481, +0x0e2533258, +0x0798bf9ea, +0x0bed7ad6c, +0x0ffd25031, +0x0625fc6f6, +0x0f88c1111, +0x08e7273c2, +0x0ad94106e, +0x06ce9218b, +0x0b5faa890, +0x0c3d7251f, +0x014d44c11, +0x07c5d8e57, +0x03239cd47, +0x0e01b921c, +0x0214607f1, +0x05c79faf1, +0x0a1d4bfc5, +0x03a5547d4, +0x020d1a568, +0x01794ed4c, +0x03cb2a7c4, +0x01aa02e2d, +0x0b6ca8e1f, +0x0d59e2c90, +0x08989f648, +0x096f85230, +0x00a5f5b55, +0x07956c10c, +0x05967547e, +0x051307ce2, +0x020396fa6, +0x071efd640, +0x01258c1c3, +0x0d8a7ec27, +0x071e7ac77, +0x01608a00f, +0x0a3590efe, +0x0ea559c76, +0x0b1ef675a, +0x0c434929d, +0x0ceac0248, +0x057d72a2d, +0x0f03a6755, +0x0148fa3d3, +0x0cc33d0d2, +0x07950948e, +0x0dae21c1b, +0x0b2f04b27, +0x0a20b8f28, +0x0bed18a12, +0x09b4efdf8, +0x0f36f117a, +0x0f3630ad3, +0x0fbc6becf, +0x0a3d9bedf, +0x0bcf3b738, +0x092a544fc, +0x0e921d578, +0x0e2f4b4f1, +0x0d42f2e4a, +0x071028514, +0x075e1bf4a, +0x0ee086695, +0x0acb9180e, +0x06643aa0e, +0x057e86095, +0x060f6b05c, +0x0d29527ce, +0x0c09cabbb, +0x04b61fc59, +0x076a14207, +0x011f2d522, +0x08882543e, +0x063e218ef, +0x05cfa9236, +0x0d626dca4, +0x0dbb3736c, +0x0e8f2efc1, +0x01eea6cf0, +0x0df844ee4, +0x04128ecd5, +0x002c7588a, +0x0e99b0e82, +0x017284445, +0x0546f7e97, +0x0fd605eef, +0x0c648f31c, +0x0ca0cb0bb, +0x0c1c7929a, +0x097a76cf0, +0x05e9e8040, +0x05baace03, +0x003524eba, +0x06b71c2a7, +0x0fbf06914, +0x02096448e, +0x0844ee661, +0x060739023, +0x0c81fef95, +0x0c2d83ee3, +0x02ed2d94e, +0x0d88b3871, +0x0729746f8, +0x0fbb05953, +0x007230694, +0x08e796122, +0x01b114e49, +0x0cfcfae36, +0x0670e4269, +0x08655b32b, +0x057c07f51, +0x072fbeda2, +0x0f363fdd7, +0x00d2bd114, +0x03caf5fd7, +0x0086f3a2d, +0x09c16930e, +0x0240b13e8, +0x016fcb95b, +0x0b303641e, +0x04019242e, +0x024816f77, +0x08b7b61f5, +0x049979294, +0x0e50cc437, +0x0147bd945, +0x05b5a81c3, +0x0cb3e95ab, +0x0b6e4ddf1, +0x0820613fe, +0x00a30f7bf, +0x0c19b3398, +0x06f9cb6ba, +0x07bc15b9a, +0x0685e7463, +0x0d74c1910, +0x08257b908, +0x0cc27bc38, +0x0d30512af, +0x0f9366c29, +0x0645f1902, +0x0e497ae2f, +0x00df2755d, +0x07fbb82cd, +0x04d123dc4, +0x00019cff4, +0x0fd84dca8, +0x0af75f67e, +0x055b9bc90, +0x033e54769, +0x0867457d7, +0x059e27d98, +0x00cbbc76f, +0x0204310bc, +0x0d37a26b1, +0x04c1f9ece, +0x0662f1aec, +0x081a89ad7, +0x0d3f955eb, +0x0ce7e4884, +0x0eb89029f, +0x0ebad60ae, +0x0e75f58f9, +0x03723bf1b, +0x09771f50d, +0x01135be4e, +0x01b769908, +0x0f541d092, +0x0099d0622, +0x093a4db12, +0x077b782b9, +0x03e3b68f2, +0x0d8f657c0, +0x058fc71b0, +0x049abb73d, +0x0b13d4212, +0x0700fa21e, +0x057e1dd70, +0x0bc92cbaf, +0x0945faebe, +0x0e5d731d1, +0x0907783eb, +0x0a402b18a, +0x0e275d353, +0x070dc48dc, +0x00f5ee0b9, +0x099215e0a, +0x05866de38, +0x0977b8ee2, +0x0bcd705c4, +0x03599e2ec, +0x08872ce01, +0x002d04cbb, +0x04e168f07, +0x01aaeef95, +0x07823ac23, +0x0475b7a7d, +0x0439e436c, +0x01b240d6b, +0x08342b95e, +0x06337ef35, +0x0edb7475d, +0x02510ea8b, +0x04a2aac87, +0x0cd8f0ed9, +0x0484a1daa, +0x088754296, +0x059960fe8, +0x074829468, +0x0dd7fda06, +0x01ffb6375, +0x024542af2, +0x0ae5a9366, +0x017c6088e, +0x02c0a1b3c, +0x0d82690bb, +0x096118497, +0x008325c20, +0x0b15819d8, +0x0eb182d94, +0x031607425, +0x0565772a0, +0x0c1de64b3, +0x0f9a2ee47, +0x068679f02, +0x02ed75427, +0x030717ae7, +0x09c73bf51, +0x09ffa62e5, +0x0574a5dd3, +0x01f0d7e48, +0x05b325cc1, +0x0868cd449, +0x027272045, +0x04263984a, +0x0a5bae202, +0x06c024187, +0x05060ccb3, +0x0001b9d14, +0x0884e8bc1, +0x0fde549e0, +0x0338818b4, +0x0af1aad93, +0x08612f1cc, +0x0ebef6f96, +0x06bce15ff, +0x0c09200e8, +0x0397b8698, +0x03837405e, +0x0520a55d7, +0x08316cc86, +0x0715d7350, +0x0665c43d5, +0x0b50a19fa, +0x097745ca0, +0x0ba024940, +0x07f6e8630, +0x0b8eb813f, +0x0463a0f79, +0x076391506, +0x0cc53d2d9, +0x091e5eef4, +0x01061380c, +0x05c76b6a0, +0x0fd16a1d6, +0x0f43c4bd2, +0x02bd7bc4a, +0x0ac282e6c, +0x010b2a052, +0x0e53c9cbc, +0x0c8592bf6, +0x08f66ffbb, +0x06d41e9c2, +0x042a345d4, +0x053c02799, +0x0aa49fc7e, +0x03ae83c23, +0x013d651fd, +0x0ebee792d, +0x05d8be4a1, +0x055583d23, +0x09d53df59, +0x0ed6629c6, +0x021da62d9, +0x0c65040c7, +0x02d4bc391, +0x0147097e4, +0x0a2aabfc7, +0x06926fd20, +0x0f1edb36e, +0x0f2c5d08e, +0x0d11808cd, +0x0bfd49eeb, +0x0d59bf53a, +0x07db8d5ce, +0x03e38ba7c, +0x0eebeb80a, +0x01dc2324f, +0x04755308d, +0x01185505e, +0x09be76937, +0x065b2fc32, +0x09cbad219, +0x0bfb935a0, +0x04420e682, +0x0354f63de, +0x0c248055b, +0x07248738b, +0x0c45f1371, +0x0f177bc48, +0x04e248679, +0x0cc9de602, +0x001fbc3ff, +0x0bdd0bbc9, +0x08bc04186, +0x0dcaf1ddf, +0x006795f38, +0x06807d08f, +0x06066ce41, +0x0332bb0ce, +0x0422654f0, +0x059127c33, +0x023edd30b, +0x0e1e9e1e8, +0x08c5a5657, +0x0a1f4af1a, +0x0996af2fb, +0x05ece0a8d, +0x02071f572, +0x099da00f6, +0x0462fda3a, +0x0b6b86752, +0x0e72664d4, +0x0e9f84ad3, +0x0a6e0a924, +0x03c8b8edc, +0x0df0875fd, +0x0fd1e05fa, +0x09af72d98, +0x00d8cace4, +0x06c9356b9, +0x0dd1c03a4, +0x0b3b8d8de, +0x095353572, +0x004a059ae, +0x0688f1481, +0x0648226f5, +0x0b336beee, +0x0ad8f60df, +0x0cc3cb177, +0x0dd0e1840, +0x031f6dc38, +0x065d0e565, +0x0f7d425e8, +0x07175eef4, +0x0a9a9ec59, +0x02f15c654, +0x051f6947b, +0x0316489e5, +0x08ab907d9, +0x0eb5629a9, +0x057bb860b, +0x0cd434d37, +0x0a27c480a, +0x0af70e785, +0x0b0a608cd, +0x0e200dcb8, +0x0b3699507, +0x082cf78b6, +0x00dcb66c6, +0x0102683ee, +0x0176078d7, +0x03c0f5566, +0x015db4bb0, +0x02efa86e1, +0x00d10b540, +0x0ac238389, +0x09f2e5abb, +0x08fe00395, +0x06af5713a, +0x0b676a74f, +0x0ae70d3ea, +0x0e70ec60f, +0x047e40a1c, +0x0dba89fa5, +0x0884f7693, +0x0972111ba, +0x00a6f2079, +0x0f7df0371, +0x0065ea034, +0x0dbf50a07, +0x0ffe148f8, +0x0e9a4b6c2, +0x0f0f4a5a5, +0x0ba760070, +0x02782648a, +0x0a274b996, +0x08d2cc42c, +0x01d6eeff7, +0x0431d92e2, +0x088f957e1, +0x0d958f36c, +0x05ac02243, +0x0f7fd3adf, +0x0c877d4df, +0x0b356343e, +0x02fec4630, +0x06016efdd, +0x0b52bf6e5, +0x025845224, +0x0b40ff2b5, +0x0231c7ab7, +0x009fb08a5, +0x05c69bf3f, +0x06f58c635, +0x0c02bb690, +0x0e8d96350, +0x06f2bb16f, +0x040c3fc0d, +0x059002fec, +0x04902bc82, +0x048caa812, +0x060fefa31, +0x0f09bf0e3, +0x095ca25ca, +0x09c5da048, +0x01b9bbc1f, +0x0c1d07ec1, +0x0e621ecdc, +0x0b3229862, +0x0f88f9530, +0x0b755456f, +0x02cfb2a1e, +0x07023a789, +0x0f80e7ea0, +0x097352b6b, +0x0e18b5d0e, +0x0fdb21dad, +0x062ddc2e9, +0x030ac8fd3, +0x0ee63ea2a, +0x08b1221f3, +0x02fc18628, +0x07d3c0d20, +0x07c65a42e, +0x092c95bc8, +0x0d315600f, +0x0677cac3e, +0x0249d35ea, +0x08a8f21cf, +0x09744e0ee, +0x0d9130836, +0x016cd09b5, +0x0bacfbbb1, +0x07fb6f523, +0x0bd1f8a61, +0x03ded18c4, +0x0851dbcd6, +0x0779a3188, +0x05ef6c050, +0x062d88c67, +0x0088b8581, +0x04e0eda82, +0x0fa563d17, +0x0d63b7f0b, +0x0a3a1eae1, +0x0f7b5a538, +0x0999c6837, +0x076b6e37e, +0x01b7b290e, +0x05327526f, +0x0c7dea8be, +0x052bcbbcf, +0x09792dfe8, +0x0655f873a, +0x097ea1e7c, +0x0933ebdf2, +0x02d52509c, +0x0d99f0e80, +0x01c222aea, +0x0072f092c, +0x0e86d9385, +0x0e4a939f1, +0x02fd4a80a, +0x0a767bb1a, +0x028e6dc15, +0x072627c8e, +0x0d890f211, +0x08eea7f87, +0x004f2b524, +0x0ebc272a5, +0x0cbe26ec1, +0x0fbb38688, +0x051f060ac, +0x055ee6291, +0x0f457ecbb, +0x0841a4615, +0x06b11bcec, +0x026182001, +0x0e8e6ee6f, +0x0454dcc1b, +0x0b0a00569, +0x04c776c8d, +0x083ca730b, +0x0c370e1f1, +0x084c0cfb1, +0x07f639782, +0x05bd2fd7b, +0x01028ee76, +0x092023673, +0x066c431c3, +0x078a82ff5, +0x0b18338d6, +0x018e9fdb1, +0x06fbd468d, +0x0a37b526c, +0x05cbe62d0, +0x0c53545bb, +0x0cfe1aae7, +0x08be7acc6, +0x0b8f0c715, +0x02ba987f9, +0x0c66d6cf4, +0x0c9174361, +0x0f12ff58f, +0x0ab44953e, +0x0b62e0518, +0x043230fb4, +0x04502ef93, +0x0ce5d30c1, +0x0633e952a, +0x0f561b996, +0x05dc11180, +0x07ba617f0, +0x0b71d682b, +0x0ad02e3af, +0x03aa802f8, +0x043396c35, +0x0337a6c13, +0x0c9aec342, +0x01c117b45, +0x026da0188, +0x05a3ff359, +0x0e3e636a2, +0x0159bb43b, +0x01434bc99, +0x031c0362c, +0x050238402, +0x0c9c44096, +0x0a399d26d, +0x025dd446c, +0x003ed0928, +0x0ce77e6e1, +0x092e9ff6a, +0x04db1b641, +0x09aa564c7, +0x096ba84e5, +0x0bddedddf, +0x0cf004368, +0x000d0a28e, +0x0b1693eea, +0x0f59fb333, +0x0beb3ecdd, +0x05f7eac2b, +0x0e62bd282, +0x033f40897, +0x00c4d3495, +0x0ad24bcfc, +0x0cfe36aad, +0x0fa89f2f8, +0x0bc9be7b1, +0x020a21415, +0x0fee904a6, +0x0ea84ba5e, +0x08a968d3d, +0x06192003b, +0x04b17935d, +0x0581d12a1, +0x0485d00da, +0x02cf580fb, +0x0c98e75df, +0x078b83ab4, +0x0fdf98e28, +0x0359cf118, +0x0d07ccd8b, +0x0f91c71f8, +0x089c07cea, +0x0173d6577, +0x0fc486250, +0x05738ff27, +0x0ada28b1c, +0x0614d7564, +0x00046c4e7, +0x0ae1df67c, +0x0f1c1c78d, +0x09e5cf524, +0x0a5a95ad0, +0x0e1dd2ba2, +0x09b0fcc5d, +0x04e82f094, +0x07769d934, +0x00a1653be, +0x0b1e86d3c, +0x0474ee24f, +0x082ab972f, +0x06c814919, +0x064cc087b, +0x0ab3a6019, +0x05df03e15, +0x0c4e1979b, +0x0e734c3f6, +0x05b2d3d7f, +0x04c6e8691, +0x06adaa2af, +0x06579daa0, +0x058e6147f, +0x0622e93b9, +0x089f95803, +0x0c3a501b6, +0x04a7243ef, +0x04d2ca8d7, +0x0b937234a, +0x0055b2021, +0x04cc06495, +0x06e831a68, +0x0d376a6f2, +0x0ad637dda, +0x00f5ae01c, +0x0edfce529, +0x083076e34, +0x04b1720d3, +0x0432f52cf, +0x0c2c08038, +0x01e3c6838, +0x0a3b37636, +0x064334134, +0x058d55d3c, +0x07de88857, +0x03fea7ea2, +0x0b1ca6562, +0x05bccb67a, +0x0f9c3a952, +0x09563bc26, +0x0e2ae0b89, +0x0e2d21ef6, +0x0a3e04d35, +0x0eb81bfbb, +0x02eceb803, +0x084948e92, +0x081e67f48, +0x0d573a126, +0x0911ebffc, +0x05b65c916, +0x031de39e8, +0x086c0a00b, +0x04e17c0db, +0x03e85530d, +0x0b8a21d41, +0x052e6d617, +0x04884fe95, +0x04694ba1c, +0x0f00e04b0, +0x0c416d862, +0x0024cecaa, +0x054f5be28, +0x0dacff449, +0x050bfeca4, +0x0d44fd375, +0x09a2db4d7, +0x02f01ff6a, +0x0d20e1c1c, +0x061fa93c3, +0x068820623, +0x044f4bffb, +0x0a55b6404, +0x0c1192511, +0x00204f115, +0x01996eb03, +0x0e7d1e22c, +0x00f7fcd77, +0x0d3bfd265, +0x097f78966, +0x0c5d291c1, +0x0a3ee10ef, +0x0c3e821f6, +0x08dcc4065, +0x0ce02c0e2, +0x043f8bd21, +0x0e5af121b, +0x0d14cc79f, +0x0c8878a30, +0x015dba316, +0x0e1725583, +0x0a866c209, +0x060e8afcb, +0x0f335cc58, +0x009ba81d7, +0x0e83e8187, +0x044eadb58, +0x03a7d7bc0, +0x0ffd42a84, +0x08802faae, +0x01d4afc83, +0x08b3639f8, +0x04af0bc42, +0x0b077684a, +0x05c1059c2, +0x0156787f3, +0x03498966b, +0x0d426296d, +0x0fdfb7c01, +0x0d6122609, +0x044bc1937, +0x02f4473dd, +0x0a9972ab4, +0x046a15a0a, +0x0105b545a, +0x08b19a92e, +0x0592e3977, +0x044e48c62, +0x0a75a4a3d, +0x0d2dcb213, +0x0d6e911da, +0x0db506864, +0x0348f8e7f, +0x05f3d2501, +0x001793c21, +0x07c7155c2, +0x04f44c348, +0x020f44ce5, +0x0f02ea54f, +0x0684e44f1, +0x066951962, +0x0b0baa438, +0x0d39c70b8, +0x04a77444b, +0x0d6dff31e, +0x04fc4ed3f, +0x02e5fdb48, +0x0a2f19726, +0x02cada4f6, +0x00d16f812, +0x05719f53e, +0x05857cc92, +0x0c614c143, +0x096cc0545, +0x0f6a267c0, +0x05379c8ec, +0x0c04c66c0, +0x0c5b30f9e, +0x05764f411, +0x0f64f099c, +0x0a060b65c, +0x0ef6caf62, +0x0ba2733f9, +0x08237366d, +0x031024ee6, +0x0b06ef1d5, +0x03d3d4912, +0x098f64498, +0x01d67435d, +0x0f17df671, +0x0de96c2c5, +0x0622fe24e, +0x0d1d03b64, +0x07665d551, +0x012c1a6c6, +0x0656b4f1b, +0x060ddb4a9, +0x0ad0e4b19, +0x01fe571a0, +0x09a160722, +0x02b894a09, +0x0f3615ff4, +0x02651c3a9, +0x0a1e9839d, +0x0c46d1c39, +0x0267d31fc, +0x07e4480ff, +0x03b78d3cf, +0x0eaa4e082, +0x0142c92ec, +0x0f1b80ee6, +0x0c0981177, +0x0d997d07f, +0x0a7cb292e, +0x0152b3944, +0x09d941190, +0x0de1508c0, +0x038498f28, +0x0e5839721, +0x0072fdb69, +0x09130f44c, +0x03658171d, +0x0173f7be3, +0x0f90824d8, +0x0b0b8197e, +0x04fd47a31, +0x033f627c0, +0x09c855b88, +0x0fb550445, +0x03d1abd01, +0x0f925d1a6, +0x03ab60326, +0x0ae0f3e68, +0x0f0c6f9ab, +0x04b961b37, +0x08851f5fc, +0x09cb96709, +0x010793294, +0x0ef87489b, +0x0f2f13862, +0x0ecbfe7ab, +0x00b6710a0, +0x0c338439e, +0x03dbb181e, +0x0d3f1ab0d, +0x0cca39d2b, +0x076771496, +0x0e09eeab5, +0x0efc337de, +0x0e3995493, +0x0922d9ce5, +0x0e3e6d163, +0x00e4220ce, +0x0d9f274d6, +0x0d8dd5cd1, +0x06a4d0dd3, +0x0040edfca, +0x02a3057c3, +0x0149189b6, +0x0826c25c5, +0x0d9947ce7, +0x00f478bfb, +0x08c134922, +0x01f72a82b, +0x0d92f8e5e, +0x0aaa9aa3c, +0x0a1e65bef, +0x0dafd6994, +0x035fb0c32, +0x0b514893f, +0x067bd3452, +0x022f31e97, +0x0c109a348, +0x0466d13d9, +0x04e89e6d8, +0x02e8f45ad, +0x02d19c1ce, +0x051881124, +0x0f513d7be, +0x04e5efae7, +0x05153348a, +0x0f19b7744, +0x0dcd290a4, +0x0b04505b7, +0x02ebff1c2, +0x0787f4ee3, +0x0bcaa802c, +0x0787c9412, +0x0865a7f5d, +0x062756fca, +0x063d3dee5, +0x04b53e1c4, +0x086a2b1c4, +0x049e6dc58, +0x00d3b9167, +0x013143324, +0x010b09878, +0x054b58363, +0x049ecd0c4, +0x0180eb361, +0x011db31f9, +0x05b26a24a, +0x0f9f95656, +0x0ae76f650, +0x0be05df89, +0x04b64fa46, +0x079dab1a4, +0x034901409, +0x082b030ea, +0x0cc91b065, +0x04e2b7d32, +0x050a9d818, +0x00ebbb941, +0x048f7b4f7, +0x02e298a98, +0x098b8e30f, +0x07588e360, +0x0a8111b84, +0x08771c651, +0x084db08d0, +0x0a28aba03, +0x000807e10, +0x041759a39, +0x0ae50e94f, +0x0a0c735db, +0x05e582276, +0x09df9ef2e, +0x0e05d261c, +0x0a4e2e68d, +0x016f4946c, +0x015cffcf2, +0x05da5d728, +0x06b10a3c6, +0x0ac625747, +0x05cc6ef8f, +0x09100ef19, +0x03c8b3b53, +0x03dc33c31, +0x03287da37, +0x02faa4b5b, +0x07e03b6cc, +0x09abafc96, +0x062ca2722, +0x063525a54, +0x04006c809, +0x0a9dd80fc, +0x041386734, +0x0ff35250c, +0x07d727696, +0x0de0d8ee2, +0x07a979fdf, +0x027a4c7c3, +0x0170a185b, +0x06cfc9ca9, +0x09d81900d, +0x0ac242ea8, +0x07d6c0ade, +0x037c72552, +0x0021d0c0f, +0x0f8b18b37, +0x04ec3966c, +0x0a8ab2510, +0x084a5c88b, +0x00a9e4bbe, +0x01ced3068, +0x0d6a0bec0, +0x00a454b47, +0x0cb1632e6, +0x0f7f9bb17, +0x0539d927a, +0x044e433cc, +0x09c95b7ba, +0x09954864c, +0x0b55ce500, +0x07b30b4df, +0x07c1e2308, +0x00a689dbe, +0x06b1fbcaf, +0x02bf73c26, +0x04bcbf6f3, +0x03de6b035, +0x066481ce3, +0x02f1ec5b4, +0x01ef744ef, +0x045a0fe7f, +0x0bad86ab7, +0x0d7c93d83, +0x00d44d518, +0x06c7fd64b, +0x0b653f33f, +0x0af2a56e9, +0x06beccb54, +0x02767d232, +0x05d14b801, +0x037df0166, +0x06236004c, +0x015851861, +0x04a4f22e9, +0x05ac7dd8c, +0x00761142b, +0x072f8bab3, +0x0d9cd5b14, +0x081f3ee67, +0x013f2e121, +0x0dbd14c21, +0x0deba5c0e, +0x034d61f56, +0x00003c9b3, +0x06890fd20, +0x0d8b02474, +0x08bca569d, +0x05c60e3cc, +0x00d4ec16c, +0x0a1dec842, +0x071333438, +0x01f2dd55a, +0x0e19d95c1, +0x0308b92ca, +0x01fac2e77, +0x05b72bbb1, +0x07b1cc420, +0x0ec8080e5, +0x072e3f1b9, +0x03a6a04a2, +0x0b31ce048, +0x0e2db2078, +0x09e5332bb, +0x0de036c2c, +0x024d1d60f, +0x094f286cd, +0x0918ce883, +0x0e6ca89f6, +0x03e1731be, +0x0d331de1a, +0x0e91db7c2, +0x00b495f93, +0x0a72959eb, +0x0e2756d49, +0x030e3df89, +0x084c7050a, +0x0cb6ea174, +0x0e7ca4b35, +0x0844ca288, +0x035fe2b22, +0x0abefeb5b, +0x08a0a69c6, +0x06c2ea036, +0x0030296ab, +0x00d242209, +0x0d79e077c, +0x094980863, +0x057274ca3, +0x07e15af94, +0x0142a3c04, +0x052a72ddc, +0x027b6920d, +0x046baf2ca, +0x0a9358d08, +0x095a06790, +0x0f941a732, +0x0f8a59477, +0x04bf91d6e, +0x0678f35e6, +0x01c9d60f9, +0x0510ed180, +0x0eefffd41, +0x0cdf2dc3d, +0x04909055f, +0x06321b830, +0x04b83deb4, +0x0621b1d9d, +0x011d8de44, +0x06e4093ec, +0x0ace90349, +0x0709a9dd1, +0x039374009, +0x08a59b1cd, +0x09c75f359, +0x09353e0c5, +0x07d778454, +0x0819dc15a, +0x0fa512a98, +0x036a8b2a4, +0x02efb09e7, +0x0a4249c2f, +0x00ddb4111, +0x0860f8609, +0x0a03437b4, +0x0ffa2c4ba, +0x09fe35f5f, +0x04b4c02bb, +0x0122c466e, +0x0d5efa500, +0x0ad3a9af3, +0x05335a4e3, +0x01bd92c96, +0x0abe49e18, +0x084fd7e0d, +0x0b5f6a64d, +0x0959ed3f6, +0x045621feb, +0x08e876c5d, +0x00d2e4f7b, +0x0039a9aa3, +0x05b2e65d2, +0x0d29c83fe, +0x05876c698, +0x0b0e26e6a, +0x080a42c14, +0x061dd394b, +0x02411bc8d, +0x0f468d092, +0x047ac48f0, +0x096cbbe6e, +0x0d1bfbe2c, +0x073d623de, +0x0e5f88c75, +0x08b556b9b, +0x0b84ef8c2, +0x058446a98, +0x0740cc902, +0x0660623ca, +0x01a7b82f7, +0x01cd245b3, +0x01c7de7f3, +0x039ac97ba, +0x07ae6464f, +0x0c9310da6, +0x0b3b8df22, +0x03e3d24b4, +0x0c2435f18, +0x0919776fd, +0x067ff5dad, +0x010ceab50, +0x0e526dfdd, +0x0dfccb947, +0x04e3198a4, +0x08d93281e, +0x04a58ce7c, +0x06586e587, +0x01ad58b19, +0x0e3d053b0, +0x0defdd430, +0x0fd3d1f01, +0x09828271a, +0x014fad6d1, +0x0bafa6471, +0x0f49e9d8f, +0x058c34aef, +0x0de9758b6, +0x04de203d1, +0x008c080b3, +0x0b8ae625c, +0x0faa48b5f, +0x068496f8a, +0x0e7d027b1, +0x0fc54b32b, +0x0554fd9b7, +0x0ce09bdc8, +0x0487c289b, +0x0506210fd, +0x0ec139c93, +0x018934f1e, +0x044791ed6, +0x0d8fb9160, +0x025f78aaf, +0x06d6ff1ef, +0x0729f52a1, +0x00bc04c0b, +0x0d1cb35c0, +0x083d31989, +0x01a8176a5, +0x090d9943a, +0x03e75ad2f, +0x0f6fe7fa8, +0x00e66d4a5, +0x0b68877ca, +0x0c7d37615, +0x0ceff9958, +0x03142a253, +0x0fae53940, +0x0b44e660f, +0x0df24bf51, +0x0411287cd, +0x0ef32547a, +0x0bdd35c95, +0x0f7f84a49, +0x069f4a735, +0x09299365a, +0x0641d45da, +0x0d8725191, +0x0492b2dab, +0x0e7965002, +0x0ac0ca092, +0x08809e345, +0x0b539724d, +0x0fa4ad0a5, +0x05f12accd, +0x04bc40a6b, +0x07c407361, +0x0fba21b90, +0x0d910ff35, +0x0ec9092f8, +0x0be6551bb, +0x06e46810f, +0x0e13b6981, +0x07476d530, +0x0c0b6c823, +0x0a9f2ece8, +0x0a4447ce5, +0x0edf0d6a1, +0x0fdecc6ff, +0x0d69f99fb, +0x0dde7dce2, +0x08f9ea1cd, +0x0d5867612, +0x069b944ca, +0x0ef32bb74, +0x0953e9ada, +0x0b05c6d88, +0x047514317, +0x0939fb43a, +0x098a93393, +0x0faaf19a6, +0x02858774d, +0x065847639, +0x09701a22d, +0x0db64fbd1, +0x07ceeb72b, +0x0af77580e, +0x09f65be61, +0x06511d6b2, +0x0c6a8ba3a, +0x04b0448aa, +0x0248ca2c3, +0x0bf5a1fd7, +0x016d2aa9d, +0x0230f44b0, +0x0fb214e83, +0x0d867d418, +0x0c367112d, +0x0a77be7dc, +0x00b4a48ed, +0x0855f1656, +0x00af390d5, +0x0efa45d80, +0x088e8bd89, +0x0d2583745, +0x08a7f7005, +0x0d6dbb07f, +0x08366e096, +0x02bf2ba7b, +0x0810d50c6, +0x00037c321, +0x01a8b6ad8, +0x0c5028f77, +0x05fe3ba54, +0x071185f6b, +0x09859a8bd, +0x04c60384b, +0x0e8bb3e7f, +0x0ca99b1de, +0x048be7922, +0x001ffa313, +0x0c618c3cb, +0x01d559fb3, +0x000764664, +0x083568bf2, +0x0104a4d02, +0x046044c33, +0x02a25f618, +0x0a4926cd0, +0x086cc15fb, +0x0f142a360, +0x067778c0a, +0x0fe0a2b84, +0x0dee109fe, +0x0af76c4eb, +0x01f741b7d, +0x03698c9a8, +0x0eb166568, +0x0a8e893f9, +0x08409e49c, +0x07ed3a145, +0x0a151322d, +0x0aa9fcbec, +0x057765b0e, +0x0bac4cfe4, +0x0c52dc267, +0x0f4557c81, +0x0a48fe7ff, +0x02b1d1782, +0x03c3647ee, +0x09c7c8a8c, +0x0be2999eb, +0x00d526c68, +0x0b4baa1a8, +0x07d2880fb, +0x0f40c06b7, +0x0af905388, +0x0c1ec6247, +0x03475690f, +0x02725a66e, +0x08b148537, +0x06d1d54a9, +0x0f57411bc, +0x0d04cdb66, +0x0250d8355, +0x01960218d, +0x0cf781e79, +0x07667b776, +0x009f28503, +0x0dee7ec74, +0x0832589bc, +0x02a18055d, +0x058dfec93, +0x09685afc7, +0x0c0c80300, +0x070433fc1, +0x0e2d186d2, +0x0072cc787, +0x05d8e2952, +0x07bed4694, +0x01f0f6fa9, +0x0ce8c3041, +0x00ca92391, +0x0f4e02060, +0x0a083298c, +0x08864da34, +0x0c3d22a63, +0x0b6311664, +0x0a55884af, +0x0060cc37f, +0x0b4912e7b, +0x05840732d, +0x053ee1586, +0x0e383441d, +0x0493e5a02, +0x057ecbe87, +0x0505dd026, +0x0dbadb439, +0x01bc2aae9, +0x06b848a2d, +0x061edc1d8, +0x02382015f, +0x04ed84963, +0x047711046, +0x00e6830d0, +0x059985d74, +0x073525673, +0x0f4fecddd, +0x078309b28, +0x058b91cd2, +0x025db8ec0, +0x03be80215, +0x0473b7fd1, +0x004cb921a, +0x0b067d071, +0x0431ac652, +0x082c74323, +0x040fb61ac, +0x0f50b37a1, +0x00a438ae2, +0x0019319bc, +0x0a46656c0, +0x063111ef5, +0x0a7b9f7a6, +0x0097e22c6, +0x036470576, +0x05d057098, +0x0b6de485c, +0x05e10ada0, +0x0d34a41d3, +0x0ca7c7241, +0x0ad3668f1, +0x0c5826133, +0x04a721395, +0x05e89aed5, +0x07dc46b48, +0x0763ae774, +0x017223e54, +0x01d6cb8c9, +0x04ef9b3ec, +0x0750db47a, +0x078090dc7, +0x0258c53e7, +0x0aaf6cde0, +0x03aa0ca5b, +0x07e62065b, +0x0a9dbd44a, +0x08256b2f0, +0x0192370fc, +0x097a03c8c, +0x06acb222c, +0x0ee15fe71, +0x0101a644b, +0x0a1fc60ac, +0x0f9be349b, +0x068b5e2bd, +0x05950938d, +0x03ece0275, +0x027476182, +0x0ab7feec6, +0x09f7bcc5c, +0x01af68080, +0x0ed4c4893, +0x0910c1e76, +0x012215542, +0x04910f0fe, +0x0e8a865c5, +0x0d959fb33, +0x016457ac7, +0x05de9f40e, +0x009e9a124, +0x07578ba9a, +0x0fe05d820, +0x0a7b47c4a, +0x02c257cab, +0x02f17febe, +0x0195623ff, +0x000442d94, +0x0afda5117, +0x0dafc9063, +0x0e53dcf9a, +0x0ffa75073, +0x03e5aac87, +0x0194843e8, +0x01c7f4811, +0x0ef615ddf, +0x0226d55ab, +0x0ac482c58, +0x0e717c92c, +0x027ce06ed, +0x04f4522fd, +0x03b169f3c, +0x0adcfe494, +0x05b28c1c4, +0x0f2d82506, +0x0587a2c85, +0x06695db58, +0x0890a9661, +0x0a952aef8, +0x04bf64677, +0x0c6164c57, +0x0651953e2, +0x0797cd8bb, +0x013a4b350, +0x09d2430b5, +0x0014cff8f, +0x0ab43d9d8, +0x0e6dde601, +0x07fa536a2, +0x0d9bd3a96, +0x0cbe1ab80, +0x000c275d0, +0x08b6115c9, +0x031006dfe, +0x05c33d993, +0x0f453722c, +0x0c121cede, +0x08cb91e62, +0x013de65cf, +0x0dbf1ea10, +0x0179e0a76, +0x014a71b2d, +0x00e433f15, +0x0161fc033, +0x0f376ced4, +0x03f83c48a, +0x0713a7943, +0x04e7ac505, +0x0a4371a2e, +0x0341fc1fd, +0x00b8e1b23, +0x0dd1256c8, +0x0ac876d85, +0x0f7645522, +0x069da0e7d, +0x00276b805, +0x0b453fe67, +0x077d3f0ad, +0x0948b0af2, +0x027b0c06e, +0x0d942976b, +0x0507b5566, +0x002a5509f, +0x08a531ba7, +0x0b9e234d8, +0x0fb6f5656, +0x0e7e60a7b, +0x0bbd77034, +0x08ba39df8, +0x0b2314c44, +0x0162e06fd, +0x0d427f659, +0x0c26be5b6, +0x09a113c0a, +0x08f07c9e8, +0x01c86e013, +0x00341ba4f, +0x07422577e, +0x09f18604a, +0x001e1e531, +0x054e6ffec, +0x0bc0912fb, +0x041c5d9e0, +0x0ed9164c0, +0x04ac20176, +0x001307cd5, +0x0425548fd, +0x0f869efdc, +0x06ac5ebb6, +0x0e949dbee, +0x0c85b2a8a, +0x0f9876002, +0x0bdc3c58c, +0x08af7865b, +0x0d04d5089, +0x068d3f690, +0x095a2bf4a, +0x01c9ee6d2, +0x09ff5f4b7, +0x03416e590, +0x028a16c01, +0x09a4e9d90, +0x0104a6007, +0x0097c15ba, +0x0cbe2df96, +0x09fff8b01, +0x08bac9be7, +0x0c216b54a, +0x034d49afc, +0x0fa0daf86, +0x04034e186, +0x0a8685480, +0x0ef5764f6, +0x03de501a3, +0x020e05040, +0x0df9e3e07, +0x0afcf944d, +0x0c43a2b9d, +0x0cc4b02e4, +0x09a55f08d, +0x0786c1c59, +0x0647ccd65, +0x0eb6bd7dd, +0x0b867242c, +0x019eba375, +0x065559dda, +0x061697048, +0x00b255544, +0x032e2a335, +0x00aac436c, +0x09cf3d9da, +0x0b1d4f0c4, +0x011646086, +0x02896c057, +0x0e5f2c4c1, +0x02a588fac, +0x070175742, +0x054827a35, +0x055671346, +0x04000f11a, +0x02dc714b4, +0x036b1218d, +0x070c27228, +0x0bdbf0ab1, +0x0ee64dbaa, +0x04def9365, +0x054d49b51, +0x093c568f5, +0x045ee7038, +0x0b7d4b970, +0x0115e9cd4, +0x0c04d5d62, +0x078b5153b, +0x06c346080, +0x0b87473b9, +0x0dfecfc0c, +0x06e6116d5, +0x0ab3661fd, +0x06ee303a4, +0x09f2523cc, +0x046023426, +0x0f538e5a7, +0x0f80b96bd, +0x0e172c0d4, +0x0f9d5e5c6, +0x0ebf6bc08, +0x0a2e6280a, +0x0685c0f8c, +0x0c704fc75, +0x01542ec6a, +0x036171fd5, +0x07169f701, +0x04be63835, +0x0fdbe59e6, +0x0a6845147, +0x0c3cae667, +0x017226d0a, +0x0ee74a53d, +0x0c8eb32fc, +0x03080b6c2, +0x0f85a1088, +0x0e7ac1693, +0x046d9bfc1, +0x01cf82337, +0x0a7ba7549, +0x0cdd0d244, +0x030b52c0e, +0x0e750830f, +0x07734db84, +0x04e1c2cae, +0x026cc0247, +0x009109dfd, +0x0911e1e5a, +0x016191e05, +0x04e83a52c, +0x09be622cd, +0x087e1aedf, +0x08b3da8b0, +0x0bfff6f59, +0x09a69d979, +0x0c257d075, +0x021fecc59, +0x0d0b12f24, +0x000ae0655, +0x0d1698fce, +0x096693806, +0x029b1eead, +0x054892ec6, +0x0bff23ad4, +0x09ad02297, +0x0bff84ece, +0x01f15aebe, +0x0c22c2d36, +0x06421367d, +0x0dc3e2d44, +0x02514aa25, +0x049e1ae18, +0x061752fd9, +0x0c5ec52ad, +0x0cd97819f, +0x07ce27ece, +0x08264a250, +0x02eb92b01, +0x088445a6d, +0x05f758a89, +0x081821329, +0x0f364c8db, +0x03ccfe879, +0x005cc219f, +0x06c2dc0b5, +0x08359be69, +0x0e9b20497, +0x0bf9db6b3, +0x0d6069ab0, +0x005685fa0, +0x070e011df, +0x04ac982a0, +0x0fac6660a, +0x0ca205cb3, +0x0476850f8, +0x07f483f88, +0x0aac46ee0, +0x0c4e782c4, +0x082077dbe, +0x024897a54, +0x04980aad1, +0x037a70186, +0x051ebc8c4, +0x05c9683e4, +0x0c68acb55, +0x074fcfcfd, +0x0dccd8dbe, +0x0ead42f7c, +0x03aa42cee, +0x0947518c6, +0x0ed7289e4, +0x03e38f16b, +0x0a47ebcaa, +0x0e3bbf41d, +0x0f8a7d461, +0x0459096bd, +0x038212863, +0x061436654, +0x0d89661c9, +0x019a58696, +0x046f40be0, +0x05fc751f7, +0x0e5258f51, +0x05d1417e8, +0x0f161f60e, +0x04fc4b183, +0x0cc3fed21, +0x037d2530a, +0x04745d091, +0x061a14e41, +0x0d55ea304, +0x09f0787bb, +0x0d19dfa2c, +0x0e24598af, +0x06378d36c, +0x05cf078eb, +0x0cdc39042, +0x0ebcfc320, +0x0f3b2923b, +0x0603c335b, +0x046cd6eb3, +0x0a9050d62, +0x010901257, +0x06d1cc524, +0x0e390be2a, +0x0d910902a, +0x0c0a2a275, +0x036f2b99e, +0x00f6e7b85, +0x0805a5c3d, +0x0c4a53b1a, +0x0a86f5521, +0x0f6c809b0, +0x016038261, +0x08a520a9c, +0x05414c12f, +0x08640c55b, +0x0c59d441d, +0x02cf8e7f8, +0x0c13fff7d, +0x0daa9c91b, +0x060a0b25a, +0x0d4397d0f, +0x0df78e1b6, +0x0d9867f0b, +0x0a97b619b, +0x022a74ba6, +0x0aa7634db, +0x002f87c3b, +0x067e105e1, +0x0d35ae4ed, +0x0f1b6ccf1, +0x044f14500, +0x0c5225e0f, +0x047aede90, +0x0126c34f7, +0x08a033982, +0x00bbae420, +0x0b4e69476, +0x0801543b7, +0x008fd5976, +0x0ff8ce0eb, +0x00f7eb12b, +0x0e93b7c40, +0x0a117b4fc, +0x0424e5828, +0x0a054d8e4, +0x04b5239e7, +0x0f0073aa1, +0x0e862f03a, +0x040fb561c, +0x0526c7413, +0x019271004, +0x0c62644a5, +0x0da7e15eb, +0x0fe350b6d, +0x01f57cdd1, +0x0eacc4913, +0x0610cda50, +0x0ed35057a, +0x0177b569f, +0x0389c8b60, +0x0f81df26d, +0x0d8be4c19, +0x0ededec25, +0x040a7a2b7, +0x0d55831b8, +0x0d4d07d25, +0x05bcee1d6, +0x0fc4c03b8, +0x07c7a10b7, +0x015242379, +0x02196c472, +0x0b8bf713f, +0x03880879e, +0x06a82a64e, +0x0687ab9bd, +0x094afc5ce, +0x00a571d4f, +0x0eead5626, +0x016bcf987, +0x0e7a4d54b, +0x0a023392d, +0x0077b70c2, +0x052236976, +0x0e136995e, +0x0fa1f8378, +0x084ec55cc, +0x0e29eb2ff, +0x00a5106d7, +0x021643084, +0x076f79f1e, +0x0c8d96efd, +0x080c1d53a, +0x06f0dbb5e, +0x05c46bd56, +0x090c4d1c3, +0x0a7c190a6, +0x058a83f9e, +0x07b58988d, +0x0995863da, +0x0e1d50477, +0x02d664701, +0x095f0245e, +0x019467cad, +0x05a73aaf1, +0x085e87266, +0x0fe47996b, +0x03a14597a, +0x0eb43a93e, +0x03d99d5f5, +0x065494b0a, +0x0ec51e891, +0x02859ffad, +0x02473fc4a, +0x043471a73, +0x0b9b81343, +0x0776c8e4b, +0x05e6b5b5d, +0x025d39ff0, +0x079224e53, +0x0f220c739, +0x040e57d65, +0x0ef64a014, +0x0df83fcd8, +0x065ee66f8, +0x0ed0c7ea7, +0x07c1141f1, +0x0c1c704b4, +0x05dbb3a2a, +0x0b20f0755, +0x0479dcd3f, +0x03baa94d1, +0x0ccb56ac0, +0x02a2409d5, +0x06974363b, +0x0aa16f06a, +0x0557361fb, +0x0186720e7, +0x0ebea3b7f, +0x09a877469, +0x068f531c0, +0x0d2143ac7, +0x04d25ef5f, +0x06a037068, +0x0213ad541, +0x05215819f, +0x08a7dd915, +0x089d6f68f, +0x038cd0690, +0x075225203, +0x03d2e42c3, +0x08fbbfbaf, +0x082b8e882, +0x0949d2bb3, +0x0f2edbd48, +0x063fd7c8f, +0x047ab649b, +0x04e2ed79c, +0x0564c5286, +0x03b4fa6dd, +0x0698ca66e, +0x002ca7e14, +0x078c90212, +0x0054d50d4, +0x05eef484d, +0x03348c3a6, +0x037a14842, +0x0ed484156, +0x03309158a, +0x0a8d1d22a, +0x0da3c3e2a, +0x08f667214, +0x026add79c, +0x040995771, +0x05e01b167, +0x0e8db0f5f, +0x0c09d4f94, +0x06fb1de49, +0x0ccbaa3df, +0x0e7840799, +0x0a65c2579, +0x0cedb5319, +0x0a65106c1, +0x0bfdc7b45, +0x0d3bbf149, +0x0a32cda0b, +0x0717e8a8f, +0x02493a459, +0x094a14b6d, +0x06c786b1d, +0x0891afc30, +0x08bd4d4c3, +0x0287bc30d, +0x05e95339b, +0x0c8676f72, +0x0f4ae210c, +0x0d4abe726, +0x07865a980, +0x086fb7669, +0x02bec3c18, +0x06046734c, +0x089e0b977, +0x05d26849c, +0x05d457640, +0x02b271b88, +0x02fcbac01, +0x0b1194511, +0x037189a45, +0x0207b1a05, +0x0a1e0f2f0, +0x066288d61, +0x09a453234, +0x06463219d, +0x07188020c, +0x0e1b78005, +0x0a259a776, +0x0b61f702d, +0x09fdf7baa, +0x033df7968, +0x0ceb4aedc, +0x053cb806a, +0x094b4845e, +0x08632d2eb, +0x0c2af1fe7, +0x097134695, +0x05cdc5230, +0x0ea86811e, +0x0fbc2307e, +0x05c70f4df, +0x008f0fe06, +0x039ff47ab, +0x000dfeada, +0x039b318d1, +0x0a3bde6a2, +0x01b9970d0, +0x0474ffa68, +0x0f5ce22c8, +0x0dedb250f, +0x0d2bd56e6, +0x0c509c783, +0x06045a82a, +0x099c25718, +0x08f94196c, +0x05d388787, +0x06ab7a09e, +0x04b656877, +0x06b3fca6a, +0x02a12b583, +0x0557618ce, +0x05822ead5, +0x0c09b77de, +0x0aee2d317, +0x02e3f6986, +0x0896ad527, +0x0fed819c8, +0x0b7b28cfb, +0x0957eee5c, +0x039088b97, +0x065499aac, +0x04b798c1e, +0x045461c52, +0x014f8b139, +0x094e94a31, +0x070f96e68, +0x0d0db0651, +0x0ee267b44, +0x0132e5eda, +0x030d348af, +0x043a02faf, +0x0532f910d, +0x0478c76a8, +0x04314ca43, +0x085e44453, +0x0f57ae6bd, +0x01be77173, +0x0a9c9fbea, +0x0c01d6623, +0x0249de52d, +0x097bf4bd2, +0x009c38956, +0x01c0df2d5, +0x0ec501312, +0x00a22e0c7, +0x0e26ae85d, +0x0c9cee4f7, +0x028d1cbe2, +0x02e290086, +0x05893bb16, +0x0cf86e7ad, +0x0d4dc2cf0, +0x04af27c7d, +0x0033b9125, +0x0ce60bace, +0x02853a55b, +0x0ab8e24a7, +0x058d35693, +0x06e85008a, +0x06734731f, +0x04c95e814, +0x0a4924856, +0x0b04766b1, +0x080448fd7, +0x0a1ae61a8, +0x0a513bb63, +0x02bbb9ee2, +0x0d6188645, +0x0ddc0e03c, +0x007a510ed, +0x0d0526944, +0x0361e58f6, +0x0dc05efe7, +0x0337c05f7, +0x04dbc2532, +0x0e3fc78f7, +0x05effd42f, +0x0ab327feb, +0x0bbb25cb5, +0x0f7ad6fef, +0x0991fe8f8, +0x04a03e280, +0x0db8d3b76, +0x0c4c43e6a, +0x0c5096bfd, +0x0af04a215, +0x0b2bbfde8, +0x036852f0b, +0x013901bda, +0x03aa0036a, +0x0ff60e011, +0x0b89b6af1, +0x06b2df4de, +0x0223bb617, +0x0792b4895, +0x016d63035, +0x0c16a0463, +0x0ac61c02d, +0x03f40b64f, +0x0c9ff6a54, +0x0378d58cf, +0x01ccdcc34, +0x04fd28da8, +0x0d33684e2, +0x079ba00f3, +0x0e066c544, +0x0fd27291d, +0x0fee84293, +0x02d00bec9, +0x0789674b2, +0x055673e9c, +0x0c2029bce, +0x09ddf636e, +0x058d4d0e8, +0x01e418eff, +0x09f56449d, +0x0b60b6482, +0x0d245ca2c, +0x0fd10c101, +0x09733b5a3, +0x0d052a8c7, +0x05506114d, +0x071bb15ac, +0x054b6a6e1, +0x0844cba18, +0x03df0f12f, +0x0bddb6fa9, +0x0a2b79aea, +0x03d2b5648, +0x00b5be2ab, +0x02b17cfc9, +0x0cb39e076, +0x076f3b0d3, +0x05c54ce7d, +0x07330c45c, +0x0b3e803ee, +0x029b134ec, +0x0e2759573, +0x0187bb07a, +0x054adead6, +0x0fb9aa81b, +0x007ef8dec, +0x0b2a36bf6, +0x07f70f24b, +0x0f8d7e839, +0x074e51069, +0x06fdb1ddc, +0x0c663d329, +0x0816cfedd, +0x009bbd798, +0x0336237c4, +0x068f28b8b, +0x070451b46, +0x05f1da0d0, +0x0716016f0, +0x0726c66cc, +0x0411f67ed, +0x0df662039, +0x014487261, +0x02ccf9236, +0x0e0be115e, +0x0320fa0c5, +0x03fb501ea, +0x0669fd2b5, +0x076d56145, +0x0845c6089, +0x02ee8dc38, +0x0426905cd, +0x08b6d2279, +0x0e66517d7, +0x08f570609, +0x0fab205df, +0x0afb48353, +0x0a9134428, +0x0465e30ec, +0x0b7cb66af, +0x0f56b21e3, +0x0bd44d143, +0x080ed6f97, +0x0f2ddc0a8, +0x0b7d045ba, +0x06b6146e2, +0x0cacadbd6, +0x0bdf3ef07, +0x04ee2edd8, +0x0dee63e48, +0x01affec5d, +0x0084ba350, +0x0f612a371, +0x00ec7dc2b, +0x03b398dca, +0x04667ce18, +0x0b5f81922, +0x0d424b69c, +0x0617d8308, +0x0c9458c53, +0x04d0072aa, +0x0935e377c, +0x0b20a0976, +0x0751e39be, +0x0e9f5ba2c, +0x0a327771c, +0x033e14043, +0x0645daa4b, +0x072b203f8, +0x0030915aa, +0x0ed061068, +0x0d2ad60d2, +0x0623445b2, +0x0249a54d5, +0x0dea79d54, +0x08181f4e8, +0x0c48a4fdf, +0x0aeef299e, +0x077c47666, +0x0d0c679fc, +0x0e796d743, +0x03c05941c, +0x0f4395c87, +0x06ebb17da, +0x0e9ae320b, +0x016860fb3, +0x04a543110, +0x089d77b03, +0x074ad3e36, +0x070ceb592, +0x07c08cd99, +0x08d601773, +0x04e8365cf, +0x0947fa6a3, +0x0907ff5a8, +0x0e49058b4, +0x07855d7a1, +0x0d6d0ceba, +0x062271a1b, +0x0f6e37699, +0x04e578ac5, +0x0349040f6, +0x076f60177, +0x08e7fa81b, +0x000e094c4, +0x0a6e3d23d, +0x062bff74c, +0x00fe4ca63, +0x08a59a351, +0x07e3293ad, +0x08139f506, +0x09443ff51, +0x0d230ffa0, +0x0bfcfe61e, +0x0da6f2be2, +0x04b15ed25, +0x0c0783de3, +0x02340ecd9, +0x09d24b356, +0x0f46e01d8, +0x06d9b253b, +0x0108d7ebf, +0x0e33f04d6, +0x034468e65, +0x0d1b4c59b, +0x0a288f97b, +0x0ab530ee7, +0x042bc2cb2, +0x0c8c0198f, +0x028230d83, +0x00d5910b1, +0x02b3962d5, +0x037b0affb, +0x01278135d, +0x04df95b3a, +0x0d1691bf8, +0x081dec22b, +0x02f3b6993, +0x0e1c93f4b, +0x0fde5a137, +0x04032ba7c, +0x0beadc5d9, +0x0caf81b71, +0x0ed358eae, +0x0e2db5f2c, +0x0e15b8714, +0x0093d5663, +0x06e24d8bc, +0x0f9683fd2, +0x001dd3d74, +0x0d83dc7af, +0x0eff9e15f, +0x05a47b05a, +0x0c3441204, +0x0d6639428, +0x0ced7aa53, +0x0750cec09, +0x0c434febe, +0x090ac4bf7, +0x0f905749a, +0x06390f457, +0x0f2eef159, +0x0c2572d83, +0x0eb8b5723, +0x07e52b08a, +0x0fa1bdfe6, +0x0a2e57763, +0x026cc5815, +0x0cbed1472, +0x0e6c88e04, +0x01e9c372a, +0x02960aecc, +0x0f689de3c, +0x04229561a, +0x05086ee02, +0x0c7c5fe34, +0x084f3352b, +0x0feeed011, +0x06bb671d2, +0x055c09bd6, +0x0aefd0ac4, +0x0a110ad48, +0x0ec9351fe, +0x0f7de5bb5, +0x01b27283f, +0x06a14f978, +0x09aaa61cf, +0x004794858, +0x054608b3c, +0x03928dc0e, +0x0e81a6ea2, +0x0a0cff283, +0x0068114a2, +0x0e1882df1, +0x0a7e1aed9, +0x0d5152b76, +0x0c2d5bc15, +0x00a61fd28, +0x05d429ab3, +0x0d6671f06, +0x00ff06dc7, +0x0dbb63abf, +0x0b33577a6, +0x0e60ccd6d, +0x0c3f0a74b, +0x0357c4889, +0x096354e6a, +0x075bab990, +0x089eb3dc4, +0x01ed8d2d8, +0x08872d583, +0x0cf9ed8e0, +0x070171fee, +0x0c4e149a9, +0x06c991a86, +0x0a6554e78, +0x0a83000e4, +0x0010fd4c5, +0x0d9eeb109, +0x0b47524a5, +0x0da9a8ac9, +0x0c5c78d3b, +0x0206d38cd, +0x00d15fc81, +0x0fdd72a57, +0x0c7d7ecb4, +0x029ed2b80, +0x0a5f7933c, +0x064fc6487, +0x0d3c0d8db, +0x038df2a31, +0x01598b315, +0x025b5e209, +0x0245f917b, +0x0dca40fdb, +0x03aa3cb2d, +0x0e215df84, +0x0d260a8e9, +0x0a9243f46, +0x028b29fae, +0x06c744308, +0x033babc1c, +0x0259ea720, +0x0a042b8da, +0x0c1d45fbf, +0x015e8162c, +0x046fe743a, +0x041cb24f3, +0x0ba9b5ded, +0x0102a8d0a, +0x0ffede1ad, +0x03c5cc5f6, +0x02f1afecf, +0x09616ca97, +0x06261f051, +0x0be5f6332, +0x0431e24a9, +0x0c2d906a1, +0x0aed15e13, +0x036395b7f, +0x00dcb8298, +0x0e8deb31c, +0x09aab061f, +0x0809cf02c, +0x0c9557485, +0x06a44515a, +0x0979f9127, +0x0407ea8b1, +0x063403c2c, +0x0b4d1255a, +0x0d4f6d011, +0x0196aa960, +0x006cd4f9c, +0x00990c343, +0x045f48efb, +0x0b724a2b5, +0x0af0be7ce, +0x066f7ae91, +0x04a896c85, +0x0a110d8da, +0x0e6919350, +0x03704cdbb, +0x0eee6d3f2, +0x09432f861, +0x064fd3f66, +0x0ab6ad7c7, +0x07975f859, +0x03fdf7245, +0x0f9b39bb8, +0x020121894, +0x07fcd74c4, +0x05fbaa1f9, +0x059381e3e, +0x04f448d78, +0x0dbaccc0d, +0x0aa1496a6, +0x0cdcf2eed, +0x0fca88327, +0x0083544f8, +0x0b461c92b, +0x0b3605ba7, +0x03c2d6846, +0x0c656cc32, +0x0334e14b7, +0x0904e7ff7, +0x094e1c9ed, +0x01ca12adc, +0x007f87e6b, +0x0c8b17c9c, +0x0f1a65c45, +0x071996d54, +0x0347ee6c3, +0x0fdd97564, +0x083e35ca0, +0x026b1ea5c, +0x0ace45bb4, +0x03174d2be, +0x0460d5054, +0x0ab7fbd05, +0x0656ea80c, +0x0af7ec57c, +0x0c4f81f48, +0x0e9381047, +0x09e7bc825, +0x0b43022b8, +0x0b90b5ef5, +0x0c4d0c114, +0x09d859d05, +0x0d0410a4c, +0x07d498d77, +0x0a475aa4e, +0x05026e314, +0x09f04514c, +0x01e40cf0a, +0x008033d2c, +0x088880b8e, +0x0a92f643e, +0x0411661c7, +0x02cba15a0, +0x08145dad1, +0x01f6afb13, +0x07de6ac50, +0x0664cfb73, +0x02c82daa5, +0x042213eff, +0x08e8533cd, +0x098afbaf9, +0x0f4d74a0d, +0x012eb0771, +0x04c9b1568, +0x0e52b1997, +0x080fa0c38, +0x06659f531, +0x017576d58, +0x045d5398a, +0x095e466f6, +0x0ebdd5d2b, +0x0ab94786c, +0x043cc367e, +0x0dafa79f4, +0x045a0e7ea, +0x011cc621a, +0x0441e6b47, +0x099e520a4, +0x030baf67a, +0x02287ab7d, +0x07e5a2378, +0x0ca917d0a, +0x0f38edddb, +0x051945a05, +0x0fe85dbb4, +0x0c9fa1ac5, +0x055412110, +0x0f2dcec9f, +0x0c50dc2d5, +0x0005d415d, +0x0aa116755, +0x0ca4e7350, +0x069726289, +0x077a9f05e, +0x0d735e410, +0x03b25c8ff, +0x0ee838ecd, +0x08629812b, +0x020b42191, +0x014fc2706, +0x0aa548191, +0x0912fed86, +0x0a4364e3e, +0x080e0fbe2, +0x0abb20682, +0x078e108ad, +0x0e0ec01f4, +0x0021552e1, +0x063d3b877, +0x0d9b5a7c3, +0x05c4f6336, +0x0cca2c506, +0x0501e8863, +0x060676c61, +0x09ac383d4, +0x037c8d223, +0x0080ca4a9, +0x052bf1093, +0x054dccdb9, +0x0d9d9b4f5, +0x055964b56, +0x06d5cd921, +0x0469c9832, +0x09107587f, +0x0fdb04e52, +0x068efb95c, +0x0ec58bba4, +0x0dd32b308, +0x050dedffd, +0x0c137ce2d, +0x0282acad1, +0x001e7b632, +0x07071601b, +0x08357486b, +0x0dcd937f1, +0x01d64e735, +0x026811e5b, +0x077366736, +0x032807e1c, +0x0d36b6a86, +0x052707747, +0x0814ed06d, +0x0aa58e37e, +0x07688b300, +0x0d3a6ce3e, +0x0de3a4ff9, +0x0cd6e88d9, +0x03fc10993, +0x0c5956504, +0x07f289634, +0x0b998d636, +0x03bcb173a, +0x067d5c93d, +0x006e94e68, +0x0e04609b3, +0x0a84908ae, +0x0d6c1af8d, +0x0276a8f9a, +0x08d2c5dd1, +0x06f5e07a8, +0x02ca9011a, +0x0eb5034ab, +0x003719c92, +0x0d01ba561, +0x01cfbf2b5, +0x0a9de8153, +0x049b2656f, +0x05703d4ef, +0x0cf60bcfb, +0x0f07fa58d, +0x0f7289414, +0x0cac86db6, +0x0427e9de7, +0x0f02b2183, +0x0e15872ba, +0x06cadaf71, +0x0f5c1ea33, +0x0642bc520, +0x0240410b5, +0x0acfe31c8, +0x0616cf8c0, +0x06ba3df58, +0x0053b3bb7, +0x0ddc892b0, +0x0283326bb, +0x0812345a7, +0x0956b9f67, +0x0a473fb62, +0x033b59dcb, +0x03e436d02, +0x0afb8cad6, +0x0103b12a4, +0x072e151ed, +0x04dea7bac, +0x0bddd1e55, +0x049841830, +0x0149fb319, +0x048bc3c96, +0x0dd62af0e, +0x073ec16c4, +0x021a1be6e, +0x038ea6f4e, +0x09376dbb3, +0x0f50dd111, +0x082798925, +0x0ab674ff6, +0x08ff78da1, +0x027f0ff73, +0x076928354, +0x0e1ebdab1, +0x041024af7, +0x00b57fc66, +0x029993374, +0x014fa8ca8, +0x0bfdfbbdf, +0x09133fd92, +0x0cee6e83d, +0x0e92ec7f9, +0x0fd8a4d8f, +0x022fa7460, +0x05294f7a0, +0x01bce1043, +0x0d047cd3d, +0x0d05c0868, +0x06da87963, +0x0c992c2bc, +0x0d64de907, +0x068156ede, +0x0d0b2cd02, +0x03dd39d27, +0x0745b5731, +0x0b4c590ad, +0x017929f7d, +0x086fa7128, +0x015c35553, +0x06578cddf, +0x0c262a03a, +0x08f132a70, +0x0d4336c74, +0x02dd2450f, +0x080da7b14, +0x0411686ef, +0x074345c95, +0x0f573e999, +0x0fb96147f, +0x03709feab, +0x0a4fb69a9, +0x00eadf848, +0x0d3ff6587, +0x06a92f41f, +0x0b76c8759, +0x098bd3750, +0x003189110, +0x091e75f92, +0x012d2ac4e, +0x0b227b4fd, +0x08aa005bf, +0x055915c6b, +0x0315ba0ed, +0x097d98fdb, +0x0d0aea151, +0x016ee1fcb, +0x038af91c0, +0x03b908982, +0x06b9002a8, +0x0168c4fd7, +0x0802b623a, +0x0cc53c561, +0x028025e6f, +0x0a19de056, +0x011893e31, +0x03e2ee04b, +0x09c57a333, +0x0a28b6606, +0x0502fba93, +0x0beab30bd, +0x0f4e6bddb, +0x09662e5ee, +0x0b9d5a693, +0x06f86ec02, +0x0291cd97b, +0x05b4a658a, +0x0fa4db305, +0x0c95119df, +0x04c1b42f2, +0x0338ffd29, +0x0cb6d5579, +0x0007f50e1, +0x0249ff54f, +0x0356cecde, +0x082d9c87d, +0x0dc833d39, +0x0e79fbca2, +0x0f7e5954b, +0x0db8ebc71, +0x04ca899b0, +0x04bcbe969, +0x030252e05, +0x0a7dc9fa7, +0x03b6258fc, +0x09937e6c0, +0x0a9d21fb4, +0x00dfedeb2, +0x02a2ee4ea, +0x0660f7747, +0x0d498d8e9, +0x040aabf44, +0x02555e47d, +0x0f682dab1, +0x0150e9436, +0x0a7d6f27e, +0x061079b68, +0x07fec9f16, +0x052bc7462, +0x05dc27211, +0x01f72ecdc, +0x0b4987cb9, +0x03047e546, +0x08bd35d8f, +0x01ce65655, +0x029ea963c, +0x0d2ea1685, +0x0ef2d5cb9, +0x021927cd5, +0x0e43e5a20, +0x08ecca97a, +0x03d9b247d, +0x011575704, +0x0b107464a, +0x0dc8aafdd, +0x039eecafc, +0x0804bec6c, +0x0dfa3ab79, +0x08c83b97f, +0x0737dfd34, +0x003cf8d6c, +0x04bf48258, +0x04b4c5b4b, +0x0e1db8f0f, +0x0b4c952b5, +0x050c8abc3, +0x01492fa2d, +0x0542b860d, +0x0e863491e, +0x04944ef30, +0x0236dcb64, +0x02e4392ce, +0x00d4675cb, +0x024c12721, +0x0577ffda5, +0x0fa59b473, +0x088ed3e7b, +0x04f640cc2, +0x026057726, +0x0442566d4, +0x0eec59f96, +0x06cf310c0, +0x03257959d, +0x03d0fb407, +0x0603389f2, +0x0c72c1c59, +0x04fc26d2f, +0x0e1ce2001, +0x0f739afb5, +0x0addcd474, +0x0e2a6c8de, +0x03b2a91f5, +0x07fd50aab, +0x0c92ab093, +0x02cde2a16, +0x09c99158d, +0x01a857a75, +0x0638d6bbb, +0x0d5abd793, +0x009d6f435, +0x09fcea37e, +0x0952c85ff, +0x0dbaf9fab, +0x0f4c31503, +0x01ad8e01e, +0x01d3f3eb8, +0x06c9e11b1, +0x0451165c9, +0x0a67a58b3, +0x0421eacfe, +0x0d17bc63f, +0x0d5dc0ed5, +0x07a288adc, +0x0713ecc25, +0x02b3cd459, +0x05450515a, +0x0fe553e1d, +0x0961209f8, +0x01ee7723d, +0x0d3990b7b, +0x0c9b905b0, +0x03b602648, +0x049d00052, +0x0e0a595a2, +0x0be84a7fe, +0x03ea0bd71, +0x0f53071b0, +0x050699451, +0x0c27ac194, +0x0ec2c7924, +0x0b71f15dc, +0x0c0d28995, +0x0f2c018b6, +0x0705e3a62, +0x070580d07, +0x0dac18ead, +0x00d4abc33, +0x06d73547c, +0x06e4127fc, +0x0e609734e, +0x0524510cd, +0x0683dc01c, +0x0ecc3210f, +0x0d6c601f4, +0x00d7317ef, +0x03eda10a7, +0x0443baab7, +0x088836ebe, +0x0c43755c6, +0x0f51644a1, +0x06b6b8c39, +0x02e6ab7e4, +0x0226f49a0, +0x0b06e2997, +0x0459a27c3, +0x0f023bc5b, +0x0527d684e, +0x05c7bad9d, +0x0c2dddeac, +0x0499b0ffd, +0x048fefe5e, +0x0eee06e42, +0x0060d0410, +0x00aa760bd, +0x084c0fcfa, +0x0beb91c6f, +0x01201338c, +0x022dea0eb, +0x0f845d920, +0x0485365f7, +0x085495372, +0x074f9eb85, +0x01f44810f, +0x0bea78afa, +0x02279d34d, +0x08565fd59, +0x04c1bdd8c, +0x093c64fa1, +0x03e04ec80, +0x06435db77, +0x0ee60397d, +0x0f2a10d52, +0x0e28915b7, +0x0af0dc2f3, +0x00e61ff3f, +0x08e054859, +0x025abaa3d, +0x0de7b040d, +0x0ba60e9fb, +0x07a1043ec, +0x02ded3c66, +0x0481ffdfb, +0x059e65f66, +0x0af7eb968, +0x0c8b0bc64, +0x073a52c9c, +0x03aa634d8, +0x02559f7b9, +0x0ff9cb31b, +0x0689c82bd, +0x0e1f26eb6, +0x03ce88a36, +0x03d7d1a41, +0x038675fc0, +0x002873f75, +0x00ca0c00d, +0x09d79e003, +0x06475fc2d, +0x0576b1516, +0x0606d4341, +0x0eab4b627, +0x0feea7347, +0x07a14d60d, +0x0a8880ce3, +0x09975fdfd, +0x08732b0b4, +0x04a357dc8, +0x001f6d806, +0x0f2214eb2, +0x0512b1b50, +0x0e19da8c0, +0x008c30766, +0x03692cc4b, +0x0c9006601, +0x09320a162, +0x0302f981f, +0x0297bb751, +0x0c4d0b22e, +0x0a5ac6888, +0x082e313ba, +0x0d31d5aa7, +0x032a677e4, +0x002327fc1, +0x0c0d07fc3, +0x0e5b4792d, +0x0067d7b67, +0x0a35de6d5, +0x0afefeaa2, +0x00244674f, +0x03de86f9f, +0x02d139791, +0x0bca4fbaf, +0x07439f84d, +0x0a26650ba, +0x08d28ff33, +0x09e5a3ad7, +0x0ceb6297b, +0x063bdc7da, +0x0a35bae90, +0x041b469ca, +0x0b0c7cd90, +0x0602718ad, +0x003bdab4f, +0x020e05d83, +0x0a563bc81, +0x05627da94, +0x04aead830, +0x02b75683c, +0x02636c048, +0x05f6b3f8d, +0x0ac5d7b4d, +0x0d1bc77e3, +0x0823e814d, +0x0da45a1dd, +0x0a1ffd935, +0x0ac0de00e, +0x09c934ef7, +0x0ff31eacd, +0x0a90f5ad8, +0x09aa1e577, +0x0c03d0f62, +0x0d71dce5e, +0x0b48a02d7, +0x01b964156, +0x0cc912e1e, +0x09047c433, +0x03deeaa0b, +0x04f433c0b, +0x01ab2fc95, +0x07a93cf4b, +0x09d893b0f, +0x08d01f19c, +0x03f10fd75, +0x055442344, +0x04b244554, +0x0d0774d16, +0x0ba87c7c0, +0x05b64121d, +0x073af3d33, +0x09079fe7e, +0x0872e02f9, +0x011071087, +0x0665d6260, +0x0b1e55556, +0x02037f683, +0x0456bb90c, +0x08ec49a02, +0x01f926010, +0x0f766d0a8, +0x0724ee6c7, +0x009009338, +0x059097917, +0x062abd785, +0x06c08cb1b, +0x016627fe5, +0x045e07377, +0x0eaa01c80, +0x05c0b3ed0, +0x0c3427595, +0x0c196641a, +0x0214222cc, +0x029012e3d, +0x0245a25ea, +0x0a9bc3674, +0x0309dee73, +0x03bc9f8a6, +0x0110afdee, +0x052bc0333, +0x02bfcd620, +0x0fa4e9eb9, +0x0cb798a11, +0x0a4a65e16, +0x0cad68ba6, +0x0ae9fd67e, +0x04c78df5b, +0x03b30ddb5, +0x022d1f2bc, +0x0e39fae51, +0x0adca68a9, +0x0d0a52867, +0x0d37daa26, +0x08023fc73, +0x0ada2f491, +0x00829c758, +0x063c1bf6f, +0x00b490b89, +0x060647814, +0x089be6d1a, +0x0e2638e57, +0x0cb8e6aa7, +0x01aca9847, +0x02266dad2, +0x089faa8f2, +0x08eb5588b, +0x066feb9a8, +0x03f0c33f9, +0x0fcb28f3a, +0x0d87b1d8c, +0x0ce0d7631, +0x01f39e93a, +0x09854c58b, +0x0fd4a2abe, +0x02ea21d85, +0x01c35ddee, +0x057d3fa59, +0x020bcbb9b, +0x07a3af491, +0x00b16d0aa, +0x0926f32c4, +0x02ecd5d03, +0x08fe8956e, +0x0fece00c0, +0x022402db5, +0x00f17ce22, +0x0f369d104, +0x03ae91cf3, +0x063b5cb2d, +0x09555fbee, +0x04f049faf, +0x05e91b461, +0x0f746c9c7, +0x01aa2c5d4, +0x048753c7e, +0x061a84e39, +0x034168ca7, +0x02d2d98d5, +0x0ef65b7eb, +0x0809801ce, +0x0b1ffb716, +0x0679d06de, +0x0117b2749, +0x003e4283a, +0x03e8eb0e8, +0x0a332c242, +0x01009038f, +0x074f2fa22, +0x080798c2f, +0x045402c0f, +0x00716141a, +0x02393c425, +0x053eb1360, +0x02e14a2a6, +0x0d8d86993, +0x0e499adc5, +0x0272af842, +0x08951f305, +0x04d94ec9c, +0x04bb5dca4, +0x07653bb86, +0x0669f7f5e, +0x01fb6db46, +0x016b8a32b, +0x003e22235, +0x0c2429f55, +0x00d6ca5b2, +0x0af407392, +0x0680cfb3e, +0x02d0008da, +0x0f3936cb8, +0x0ca4f9a24, +0x07a1c4c41, +0x0d085f053, +0x03b9574ff, +0x034d2d87c, +0x034ec92ee, +0x07bac0790, +0x088aa7a06, +0x0ea8d4001, +0x055483770, +0x0775ed331, +0x0deb106de, +0x0113f3b98, +0x012c01007, +0x04e254b05, +0x0c1ac9da6, +0x0279290ad, +0x08ef58d05, +0x0572ac5f6, +0x02ee354d8, +0x029f97ce6, +0x0e4553a6c, +0x0919d9d94, +0x0e38f6d31, +0x003c9b324, +0x026abdb39, +0x0a5f108a7, +0x000f6bb9e, +0x0755ddfd6, +0x00cdb1852, +0x0388d86c4, +0x0e12bfe4b, +0x01ad05b4c, +0x0aa502943, +0x0c2591447, +0x05ce45da9, +0x0ad7767e5, +0x01d814c48, +0x01cb68278, +0x0d2ee9eb7, +0x02dfd1856, +0x033b45a85, +0x0cf4e394c, +0x0ad3b113c, +0x0437f4f10, +0x045b36041, +0x0fd803733, +0x064d34485, +0x002242b99, +0x008945ea1, +0x0996ebbc0, +0x0546fad1a, +0x0f8191637, +0x04362a6a3, +0x0e993d011, +0x0acd4b736, +0x05499e5e3, +0x0d27a77c2, +0x0a4d38bbe, +0x0d7d8c419, +0x0505a5d06, +0x006453f7c, +0x094fe3836, +0x0e9f08eba, +0x0ea42abb4, +0x0f11bbf9d, +0x0a0ffe2ef, +0x0b9994cd7, +0x00ce29f41, +0x09d8a3f21, +0x0a7799e42, +0x0f2b3e9a6, +0x09fa50271, +0x07fd8e4a3, +0x0c5f05b3d, +0x0e8936ee3, +0x08de47634, +0x094be85a3, +0x09de23497, +0x08d17a2b6, +0x016861079, +0x0add413e0, +0x0740b4f52, +0x03966b556, +0x0ce430269, +0x007d751b8, +0x0bbb9cf58, +0x038a13954, +0x0ac23cfef, +0x079b6469c, +0x04ec411c5, +0x067a1de46, +0x053fa3d26, +0x06908e1eb, +0x01ffc8800, +0x02e070e97, +0x010316129, +0x093693628, +0x07beacca1, +0x04eb7fc53, +0x0a1b3114f, +0x0252e4db9, +0x044a72e62, +0x0c173864b, +0x051ab39a6, +0x0807f07b6, +0x05dbe0e63, +0x08878fbb6, +0x0d769897d, +0x0fce95c68, +0x02d3247f3, +0x0e1986018, +0x0a3416e5b, +0x0836ffded, +0x0095f8455, +0x053a40596, +0x0cf9cd8c8, +0x0f5e16749, +0x006db92d8, +0x0e3ff32f2, +0x084bd15a7, +0x07344cdd0, +0x06923d08b, +0x076db1c73, +0x04ce6a6bc, +0x0630216fb, +0x071877824, +0x05000978d, +0x040f4890d, +0x043851e30, +0x055e459bc, +0x07fe7a9d3, +0x0d00323ae, +0x094d91d96, +0x0cdd4bf5a, +0x028c14d3b, +0x0f7ae2ff2, +0x00015ac2d, +0x0e594a568, +0x0e70b68d6, +0x0aee9902e, +0x0a851023b, +0x020ece141, +0x07803622c, +0x0b96161d3, +0x09638b2aa, +0x084b2ce5c, +0x013ffc276, +0x0bc884abe, +0x0646e1c38, +0x0198de0ac, +0x033b18fe0, +0x0eaa9ad8a, +0x009b2c06d, +0x05cc9f6ce, +0x094f52a62, +0x0f4a8e53d, +0x0c66ab329, +0x0f854dbcf, +0x0b2ba7058, +0x0c247a57f, +0x0f8b034bd, +0x00cd5caae, +0x0bb7c9cc3, +0x0c9ae9ebc, +0x0e43f562f, +0x05c3db9f3, +0x0bc180c33, +0x09af89d57, +0x064d91b6f, +0x08da77111, +0x0fcef32fa, +0x04dc8b688, +0x070ecc280, +0x0d5576311, +0x0fd973360, +0x06e6cb60e, +0x0cd254c70, +0x02883dcec, +0x06e6fadf2, +0x06d64a1ca, +0x036c2397f, +0x0ea64fbf4, +0x077e1c21c, +0x06c6f2f64, +0x01c864e8c, +0x05da64af1, +0x08bcd0e1e, +0x0a71551f5, +0x0fb817bb8, +0x0443406e8, +0x060e596d3, +0x0053b5d19, +0x07387e152, +0x0846ba9ca, +0x0a249b4e3, +0x00ece144b, +0x07268b857, +0x000d3013e, +0x043562bde, +0x01d960611, +0x066c492ff, +0x00bf781ed, +0x06ff6c3e6, +0x0b07c7c3e, +0x0071e003c, +0x0d98beca1, +0x069849148, +0x00d99596b, +0x097f0ac72, +0x07de6774c, +0x0bd7ab32f, +0x08a367072, +0x00d2b8a88, +0x0c344c9d8, +0x0a60830d5, +0x05f963a49, +0x006d5ef3d, +0x011055f8b, +0x01c3f3e74, +0x0b9a0f917, +0x01f2cac8f, +0x025b8c3e0, +0x0bfa52447, +0x040efa618, +0x0a72c6148, +0x01a916da3, +0x09f066261, +0x028312bf8, +0x08f69c27e, +0x06308b97a, +0x0a4b8361e, +0x000ef8685, +0x0eb29d794, +0x0bcac277f, +0x0d3ed44e6, +0x0a8d3f8cd, +0x0c42d110e, +0x01176b1b0, +0x0654bf26d, +0x0ed18b24b, +0x07ca3b295, +0x0f76b9092, +0x065b3e943, +0x0035faff6, +0x0dcbbb8c8, +0x05b0d995e, +0x00b36b82f, +0x0aee3b0c4, +0x0269effa7, +0x0f6b1658b, +0x0fe065d91, +0x068b0cfae, +0x02d1662d0, +0x0ffa34800, +0x0f4098fd7, +0x0bd7a069b, +0x0d2229939, +0x0dd9b77a0, +0x0cc0f46d2, +0x08f184b19, +0x029676687, +0x05f7c0537, +0x0eb61145b, +0x01582df06, +0x0a9887929, +0x0476c5da2, +0x048b071cc, +0x0027c3618, +0x0c06866e4, +0x0c013a9dd, +0x01c59b4de, +0x05b54c60e, +0x0f114bf8e, +0x0f63d582e, +0x088248405, +0x085e70e88, +0x069312654, +0x04f579d8d, +0x06f72694c, +0x01567d8a7, +0x07deb05a1, +0x0f99d79eb, +0x07e607ba7, +0x013016c9c, +0x00ae526eb, +0x02f26fed6, +0x0e2b9c2ae, +0x05741b0bd, +0x0751f374e, +0x0e35c58e1, +0x0673995ea, +0x06d5a0e5d, +0x0b4ddd0bb, +0x02c253734, +0x0f2ef315d, +0x073231ce2, +0x060435dd7, +0x0c45b1256, +0x00cf3767e, +0x0ad532d58, +0x00c5d8d1d, +0x0e433a48c, +0x0a3ed3b1b, +0x09ac0abef, +0x03044c259, +0x0627d3758, +0x0f0813055, +0x005ff2770, +0x028f0052c, +0x0a20428b1, +0x0e5bf5ea4, +0x06e507f6d, +0x0744bb78b, +0x007ee4cdc, +0x0c1cbbf8b, +0x0ae7e3367, +0x098bba8b4, +0x02f4a9b8f, +0x0e79a69f6, +0x0b23b1c7b, +0x04a4f7c03, +0x088c15962, +0x01c2e959f, +0x05f4eba41, +0x01bb71edb, +0x01aabff50, +0x0fc875519, +0x06442ba35, +0x09c2b1439, +0x0c4d327a4, +0x0b61a51e0, +0x038163215, +0x0475c8392, +0x0c223e000, +0x04124a897, +0x0775413cf, +0x0fc457a3d, +0x0b7e38b96, +0x0a97693ab, +0x0e8d7f77c, +0x0d6988b48, +0x03d3bd796, +0x0073a0e13, +0x0861845d5, +0x084fbdba0, +0x0a4a6b7f5, +0x09fd039c6, +0x0290c2bcc, +0x04e05d98e, +0x0a2628c0e, +0x09e28e8e4, +0x090b6b9ea, +0x0e4e87114, +0x0aee3f47d, +0x018fdeda8, +0x0d63f6120, +0x04ef7e15d, +0x006a69742, +0x078fa33d3, +0x009856f02, +0x0cef631dd, +0x0ece3201b, +0x08f833dad, +0x05fc3306a, +0x0df0b7ba1, +0x09ffaef66, +0x023036932, +0x09c0d7044, +0x012e3f76b, +0x0b5d0983c, +0x091306f29, +0x0ec130182, +0x01db64117, +0x0dda2de65, +0x0d189a9f3, +0x0c7d5a7c5, +0x0df68f582, +0x0c88bf3cc, +0x01e137687, +0x0b67cc43b, +0x017635cbf, +0x00a9d5300, +0x0222bc430, +0x0946b35b0, +0x03534733f, +0x0a0061344, +0x02789760d, +0x0d0e66ec4, +0x0277a7d8a, +0x093b1d5f9, +0x0ed470821, +0x0ea3d494f, +0x041a17949, +0x0d9ccf290, +0x0a5815869, +0x061371b14, +0x09248d890, +0x081301467, +0x073e8ac85, +0x018b482e3, +0x0d334a6aa, +0x05a72f3d5, +0x01dbd8264, +0x090116492, +0x02940f235, +0x03b0e1bef, +0x0fd45af74, +0x0da8f9cd2, +0x0d9c362d7, +0x0aa4ac591, +0x0beb897c3, +0x0f372e990, +0x0bb511cce, +0x06931e339, +0x0a5446964, +0x05bdb953a, +0x06890cd5d, +0x01795e058, +0x0e0ccb37f, +0x05e7ab18e, +0x001c6397f, +0x0098dee7e, +0x0de34f9ff, +0x0b2c6bca4, +0x073a564c6, +0x0724a2d53, +0x008619268, +0x0333ea7ee, +0x0e857ed91, +0x0540e853c, +0x0ffde252b, +0x0d37933f9, +0x045e196d1, +0x0f2a060ca, +0x0d8b28a8b, +0x0b97f67bd, +0x092330534, +0x0f1298cdc, +0x0f36853b6, +0x077395faa, +0x0303c93c9, +0x04f6fed00, +0x049f00f5b, +0x0d73445ac, +0x0797a6d49, +0x06b973efd, +0x0c4859e90, +0x061cabdae, +0x06a83b911, +0x0c4943c37, +0x0a5425d66, +0x01a5b8165, +0x07eb4a087, +0x057ef42b3, +0x0f73cdd84, +0x07a889979, +0x071442b44, +0x019cdc63e, +0x0196e6a08, +0x08186f672, +0x038ccdca9, +0x0c414deb5, +0x028d01fd1, +0x0676ecdad, +0x08ad36dae, +0x0c84fb836, +0x0c1d2c106, +0x061e084f8, +0x0e85a09f3, +0x0e536c66a, +0x0f7d608a4, +0x05f06dcc0, +0x0f218202b, +0x04fd26a81, +0x0c6c77a94, +0x0f8995a52, +0x0ea5a1f9c, +0x0da51ca05, +0x01fd4f273, +0x0574ffa8e, +0x0c92b5a59, +0x0cfb22dac, +0x07b22ed78, +0x0e7208abf, +0x0c4cdd412, +0x0baabed8d, +0x06c401962, +0x0e40ca8ac, +0x0e8beb01b, +0x09b2862de, +0x04511d857, +0x0e344b4e7, +0x0e49c6b6d, +0x0c8a5e8f3, +0x01d63ff9e, +0x0050ca77d, +0x0155483b7, +0x00dd1c476, +0x01d1fd726, +0x06821838b, +0x036873249, +0x042a4ea68, +0x0c34dbd2c, +0x0808b4a27, +0x08c1b8f1c, +0x07283bb13, +0x05fda50b3, +0x0609cf352, +0x0d2cdb96e, +0x02c27b26f, +0x035374e13, +0x0f96a9340, +0x05b438a43, +0x01d20d663, +0x0738d799d, +0x0d1a22c38, +0x07cf0e7c5, +0x0310776cc, +0x0f461a9d5, +0x02e491ee9, +0x0169584c0, +0x09ef56627, +0x05eb25a0d, +0x09559c096, +0x0fdaa5be2, +0x08bef6eb3, +0x0f37c714e, +0x04fc5da3b, +0x02097017a, +0x03515743d, +0x08e1aa519, +0x0b7edd0a4, +0x00f88ab26, +0x0308b04b8, +0x0c88f0d32, +0x0497116d8, +0x091204df1, +0x009f3feae, +0x011daff68, +0x091e3939c, +0x0aab3e5d3, +0x027848ff9, +0x0b822d2a2, +0x05973ed68, +0x0b71ce716, +0x04d3765c5, +0x049b92e6e, +0x0c278cd35, +0x01e2bf90a, +0x0df08842a, +0x001cb7855, +0x0a8d123f7, +0x01c5ed051, +0x038a12bbe, +0x0485764a4, +0x09e79814d, +0x07913f20c, +0x07f267f98, +0x0897b6db0, +0x08291a6c0, +0x0411bfa76, +0x057825231, +0x0d095fa80, +0x0c339acaa, +0x03084d180, +0x0754d1a4d, +0x06ea964a0, +0x05b119e10, +0x08fd31ce4, +0x0710d5ae4, +0x005e506d2, +0x02345ad4f, +0x0643bc94e, +0x09c58fb72, +0x0298a3aa1, +0x08d34afac, +0x021d9e0a4, +0x0cd3520cb, +0x00ec13bda, +0x0573836c9, +0x0a1b1f7dd, +0x068d5e266, +0x0d2cbb7c8, +0x01bbddcd6, +0x08e88b69b, +0x0052ca641, +0x064fbbcc5, +0x0a0f3c7a4, +0x00b80fc3b, +0x010de41cc, +0x014647832, +0x0ae997c4d, +0x0def599c3, +0x05744c6fe, +0x020aed792, +0x01ddf4b6e, +0x0bcd7ddc2, +0x0412b5ff8, +0x0c7b5168e, +0x0526c2210, +0x0319b1ddc, +0x0e3b67a04, +0x0b51eb9f8, +0x03b8b5c96, +0x0af381b12, +0x0b0a3cb3a, +0x0e74c7ef0, +0x0befaed5c, +0x01c263c61, +0x053fec7be, +0x07b2cbf05, +0x03daea18a, +0x0e51f505b, +0x0cdbef924, +0x028b57743, +0x09b051893, +0x007505bcc, +0x016ce0654, +0x08b6d9330, +0x09deac02d, +0x01c8ef6e9, +0x0053f7d2b, +0x04cc6fe45, +0x0e18ef626, +0x03263f070, +0x045f8436b, +0x0cc741b80, +0x0e55cab1a, +0x0f99cb1fd, +0x02a6ae76b, +0x028641341, +0x05c21f5c7, +0x06dfc746a, +0x03730e3f8, +0x0715fae24, +0x0da2c48fb, +0x03d352154, +0x0e04c163c, +0x05986beff, +0x0eca7ff63, +0x0125846aa, +0x0443d53d0, +0x0ecd8c011, +0x0a8e89f54, +0x0b8766455, +0x0b803b4c0, +0x095a0b4e2, +0x0b286714d, +0x082ada272, +0x032e8c747, +0x044786922, +0x021e793f7, +0x01409ef01, +0x03c872f5e, +0x0342722ab, +0x016a884d1, +0x0b600ebc7, +0x0c92a57fa, +0x04b83dfa5, +0x03a1936a7, +0x02bba6dca, +0x0674c5a74, +0x080a41054, +0x0aa81eb6f, +0x07f60286b, +0x05b63d91c, +0x05d165ce4, +0x01ecdd0e4, +0x0cd9e91f2, +0x0a9326a9c, +0x07c4dbf68, +0x07e53eede, +0x05d936751, +0x0ea99d29a, +0x0691a314a, +0x09950d4c3, +0x0ac07f029, +0x0105b9e27, +0x0ee3e43b4, +0x07f2fe4e2, +0x0306e6c83, +0x0e7c949fe, +0x0483c364e, +0x0cc031d49, +0x0601fd827, +0x074bb406c, +0x0ffff01f7, +0x03cf28662, +0x082a1ec63, +0x00ab57d17, +0x0e55de78a, +0x015d9ff7a, +0x05b8b43a4, +0x09ad240c6, +0x05b22023a, +0x00235aa40, +0x0656b0982, +0x0b0bdb165, +0x080a527c8, +0x00e7758ad, +0x059da81db, +0x0d02223cf, +0x0966b4fb7, +0x01fd55261, +0x0a86c5ad1, +0x00935981b, +0x0cd7be678, +0x0a7fcf2d5, +0x036ae610b, +0x0d9fe61d8, +0x0c6e65946, +0x0c052c95b, +0x0db228633, +0x0cc405535, +0x06995af68, +0x0d240b2fc, +0x0ff23358f, +0x0df3371b1, +0x0603ae075, +0x087d799d8, +0x0e640771e, +0x0c728a132, +0x094e88830, +0x006f2af59, +0x080df526b, +0x041425855, +0x0dbf10f93, +0x007c5f942, +0x073fcf3c1, +0x080057eb6, +0x07020b021, +0x0e3f28436, +0x0df151805, +0x0892517e2, +0x08eeb19b5, +0x06d1cc620, +0x02171ec2b, +0x09b1a7a4f, +0x03f3630cf, +0x0c0f01526, +0x0f133bf2e, +0x07cd2939a, +0x0b769aae7, +0x0ad2ca975, +0x07f33b08f, +0x0a1f63b24, +0x09469c17a, +0x0acc931c3, +0x032e9cf08, +0x0ac4bc0b1, +0x0b4fab989, +0x0771ae514, +0x0f61c7985, +0x0d790aa74, +0x0301b37c3, +0x0828d3ef9, +0x0a4d48b50, +0x010c6d636, +0x06a7a6738, +0x03c659d9e, +0x028afa7a7, +0x025b1f272, +0x07b754a1a, +0x040df6f60, +0x0efdbc9ff, +0x0fc2c56fe, +0x05f379741, +0x01b9ce546, +0x09575c30c, +0x0b28dcf2b, +0x012cd47b5, +0x08d6fda91, +0x065e438f7, +0x0ccc5fa73, +0x035d8dc18, +0x0360601c8, +0x02e4f1b8f, +0x0ceda2d5e, +0x0eab424d0, +0x04ba637f3, +0x03dc5ee37, +0x00fdb7f89, +0x0ff2bd9e8, +0x0a860ebcb, +0x090bb9ac1, +0x06b4a600b, +0x0683d0171, +0x0caad25ce, +0x004a3c7b6, +0x06430e1f3, +0x0ac23a5ec, +0x0db79bafc, +0x07f802a4c, +0x053d1dbbe, +0x025db29c6, +0x0a2c88bbf, +0x0c541923b, +0x071e94816, +0x0586d2d00, +0x0d33713a9, +0x0b33f9825, +0x071675748, +0x0261f5922, +0x01fe4e393, +0x024040c72, +0x0ef87d102, +0x087cb75a7, +0x06ba0448f, +0x04b8063c9, +0x01b97f973, +0x0c0a83b58, +0x0ff59953c, +0x03eb355b7, +0x02c8d1714, +0x009492ada, +0x097829f25, +0x05b22bf4b, +0x09f10f310, +0x01ef78f60, +0x042b3eada, +0x073c60df8, +0x07a3b3078, +0x09bf18098, +0x0c4654264, +0x0d6159c71, +0x0b77b1452, +0x0d8617af8, +0x05e14871d, +0x096d02138, +0x0e4a94026, +0x03af6e818, +0x0497bac1e, +0x00a0551e3, +0x084251a6b, +0x0031c53aa, +0x0a8634a8b, +0x04e73bfc1, +0x034ab2c20, +0x0b161831b, +0x04d12953c, +0x0d1f9a9df, +0x08142ba0d, +0x0a0713d9e, +0x06939a499, +0x0aa58a2e3, +0x05536a867, +0x06c2cfeed, +0x0adc3706f, +0x0f3372314, +0x01ea6a986, +0x093f4025f, +0x04e3ef4d5, +0x02b5f8749, +0x0217d196e, +0x0a4483f39, +0x02adce5a6, +0x0ce3ad9a0, +0x0b1026212, +0x00eff470d, +0x0cc04f5ee, +0x0fa9db235, +0x00f5208bd, +0x0c941240d, +0x0812b23c5, +0x0a234396e, +0x0774ad6dc, +0x0636e4f63, +0x030673a3a, +0x055b00e0c, +0x08c9314bc, +0x05dfad64b, +0x04fbe70eb, +0x0b70c226f, +0x0a69472e3, +0x03ad39383, +0x0ae2fcd80, +0x0cab45994, +0x0ff27d4ec, +0x059e023ff, +0x0181f6c0b, +0x085399ada, +0x095663faf, +0x0e95c0a17, +0x06515bf8b, +0x0d4a6d189, +0x0a626cae9, +0x033bf87b4, +0x0805dc01e, +0x0869af6a7, +0x0ef11d8c7, +0x06714e120, +0x0611ca874, +0x0f3032c53, +0x0fb471123, +0x076adac06, +0x09bcd67f8, +0x031df7feb, +0x01f3cc5a5, +0x07090c9db, +0x0ec302e9c, +0x08b6cdb15, +0x0906b53a7, +0x06769b8d7, +0x05d0b488b, +0x040c7d1ca, +0x0229e62b5, +0x0ee6006be, +0x005cfd40a, +0x0075e0f75, +0x08ffa19af, +0x07bbbfc2e, +0x0b67fee4b, +0x048b8152b, +0x0c3fda6c2, +0x0e78643c4, +0x0b37783cc, +0x096ecee34, +0x0ce5f456b, +0x0ee5d55cc, +0x0322b6233, +0x01d6e76cd, +0x081976b69, +0x0b67bd9f6, +0x06e9ccf4f, +0x062f9131c, +0x098b3f6dd, +0x07e34d0ec, +0x0d4c560a7, +0x04f1296d0, +0x0ac7b44f5, +0x061478e66, +0x0ef0a0fa2, +0x051f27da1, +0x0ec218fd1, +0x0a876f66b, +0x03ac24284, +0x0186dd28a, +0x08558e08e, +0x0a636c577, +0x0d01ade2f, +0x04b712fc3, +0x0a1baf428, +0x035ab28c5, +0x06c699438, +0x031513055, +0x03d93aea9, +0x08c2ed7d9, +0x0025c4f19, +0x06ff5f6cd, +0x077b002a3, +0x0bcd56ddb, +0x06cb1bfb7, +0x022fab9b4, +0x0c3afc79f, +0x01f43c9a7, +0x051c6d655, +0x0b5a2e9b3, +0x0ae834627, +0x08da1f511, +0x0a7927f72, +0x0b05de8fb, +0x0d37a0c18, +0x0ea5cb97d, +0x0fe589453, +0x0985081b7, +0x005bbd298, +0x0bf0903f9, +0x0e12bbc72, +0x0c21bde02, +0x08bde2e5b, +0x005aafe42, +0x0e6f37539, +0x0a7dc461a, +0x03ad9aab3, +0x0bf3bd09c, +0x056b1edfc, +0x0dffa44d8, +0x0f9f40104, +0x0231ea4af, +0x0c9ba691c, +0x0e71c0508, +0x0d8692078, +0x021e85e13, +0x0019c158b, +0x048a93dbe, +0x04a88483c, +0x0c191b5b4, +0x0bb657c24, +0x04f5ee7d6, +0x075992124, +0x0b6d99be1, +0x05bf8bdf4, +0x00869e554, +0x09ebf2ffe, +0x08d1af645, +0x0e53c3d5b, +0x037e25dd3, +0x082166c1f, +0x09d292a3f, +0x036e4e0c1, +0x06df347c7, +0x0cc52691b, +0x07a356d28, +0x08b56a5d4, +0x05b1ce71b, +0x063469a2c, +0x0b071e353, +0x058d4600f, +0x0e97ce5c9, +0x0269b6472, +0x0acbd00a3, +0x060d0592b, +0x073cb1326, +0x0bef80858, +0x0d37a6406, +0x0787d1f48, +0x0207d811b, +0x000fafda1, +0x029c23577, +0x02bdf4a68, +0x0d80dbcbe, +0x0fbe0cff4, +0x017575a93, +0x0fd3ede14, +0x08a2c4e02, +0x04096892a, +0x0ff3732b6, +0x07e59e199, +0x0b7bd5eb2, +0x075ed78bc, +0x0625e7637, +0x0edf36e43, +0x0943f7829, +0x048739ce7, +0x0ec043eb4, +0x0033cb066, +0x02d72860f, +0x0dcd92a6f, +0x00c844aeb, +0x0d3888318, +0x0f4768162, +0x04deaa8ae, +0x0276f0469, +0x0fa75d51b, +0x0bb369812, +0x00ab26b53, +0x0b402894a, +0x0ea1474d3, +0x0e2bc645e, +0x0d78fe703, +0x08e1f244c, +0x0512394e9, +0x066fa7003, +0x00de0afb3, +0x035e91932, +0x0345df084, +0x0511068b5, +0x0c4bc1f35, +0x0555cb208, +0x058f7f221, +0x02d37f2eb, +0x0fa701a98, +0x09f715513, +0x050805d04, +0x074d9265d, +0x0c162122e, +0x02c822100, +0x002551bac, +0x0ed270be9, +0x08433e26b, +0x09136f069, +0x00b697c0d, +0x08c70e36e, +0x020d41cd6, +0x089b7fea6, +0x0c0022ee9, +0x05a210986, +0x09e5eb167, +0x0ff00f84e, +0x01e8f0c37, +0x09d98f1c8, +0x0185d15f2, +0x05390de55, +0x0688d63c4, +0x03d0124ca, +0x0891da731, +0x063b6e2ec, +0x05b6d69d4, +0x0f0dee368, +0x060e2f0ae, +0x0f0fc7673, +0x0ac80d8cb, +0x04b85f1e7, +0x061b11b8a, +0x09bb5b657, +0x09c5c391a, +0x0f6dfc703, +0x038b805d4, +0x03c236ac9, +0x0833951ba, +0x01c8952bc, +0x009e2a84d, +0x085e59abf, +0x063a59587, +0x02d1fb388, +0x09773277a, +0x0bd5623a4, +0x03da3d04c, +0x091f59f17, +0x0be6eff7b, +0x06f687710, +0x0176a7817, +0x02d7544d0, +0x088b122d0, +0x00d842c6e, +0x0c343bce5, +0x0e600e7bf, +0x044c9e45b, +0x03139ab7a, +0x00393a996, +0x0676507c0, +0x06fc79bd7, +0x0a5742204, +0x0178c7caf, +0x09757cdd4, +0x08873a091, +0x0e467d47f, +0x0a6aed7e5, +0x0aff6629b, +0x0206a6006, +0x0874bb732, +0x083d7f0cd, +0x0147d996f, +0x0ab378154, +0x03226a585, +0x0607752bf, +0x015f906fb, +0x05b258ca4, +0x032503459, +0x0dd60a172, +0x0f1204571, +0x0786cf4a0, +0x0aecb28cf, +0x074f3ef68, +0x0d138bcee, +0x01f0259eb, +0x0a1f90621, +0x0bf70656d, +0x0c8acb0e7, +0x0655dbf8b, +0x0306609bc, +0x027821cae, +0x086febcea, +0x027ea314b, +0x0d2e62b64, +0x02a29c3d1, +0x03acbf9cd, +0x0cded83f0, +0x0a563b61a, +0x0aa8b3e9a, +0x05deaf3aa, +0x05e0ade61, +0x02f0ded5d, +0x0b751e689, +0x0210367b8, +0x021aba18e, +0x023c5f1b8, +0x05cb069d8, +0x0cb0a7055, +0x0e7f70c3d, +0x0f20eb618, +0x0c3237d7a, +0x0a88a5473, +0x0b2319e8d, +0x06bc656d3, +0x0e88aad72, +0x015aa9e8f, +0x0348dc839, +0x07b7281ec, +0x0b6388dfe, +0x0c54c6e87, +0x01fddd392, +0x0a2f4df7c, +0x01402671c, +0x0a6ce2874, +0x099b74628, +0x0f3df87cd, +0x0dd872ad8, +0x0b324b1b8, +0x0a1db171a, +0x04cc693f6, +0x04c2e1dd5, +0x079705c95, +0x0650621ff, +0x0ea43b4a7, +0x07d79109a, +0x07a4b7168, +0x0a6832468, +0x0c59579ee, +0x03ad75f09, +0x0405df3d1, +0x07b135af0, +0x0cdf39590, +0x00d06227c, +0x0abf9d0f7, +0x0890c79cf, +0x0c51de0c1, +0x0f2881a14, +0x016dc132a, +0x0e2c143ef, +0x06ab74cfc, +0x0c5f9c396, +0x0cc410609, +0x059966a71, +0x0ad642694, +0x07e2af650, +0x0d0f56583, +0x0d94da5a9, +0x0cbd32ed9, +0x0f73c089f, +0x01e12c0c3, +0x0f47f1f72, +0x0ab18126f, +0x0e1461f68, +0x0407e295e, +0x04c324df0, +0x02b039f9e, +0x0c631be0a, +0x0c67c15f2, +0x0e6174495, +0x0ec64df46, +0x0d5c80448, +0x003cc0e6b, +0x0d5df488d, +0x0d060d246, +0x04c343e9b, +0x07c234725, +0x0d7a01c4f, +0x0733c13ea, +0x0d465845e, +0x0b321bf28, +0x09a4bfd8c, +0x0084e0141, +0x03d1c1669, +0x037e0c4b8, +0x082a6b740, +0x0480c43ef, +0x0348c075d, +0x081d2f260, +0x0a04f70f3, +0x09440be4f, +0x083da6e59, +0x09b9fc5cd, +0x067ab0b2b, +0x011f4d585, +0x070eafb5f, +0x0a814e096, +0x084dddfe9, +0x03b95f550, +0x082333bf7, +0x0046fd237, +0x0c51fa550, +0x05966e83b, +0x0dd943588, +0x02a89f971, +0x0a50bf74b, +0x061453dff, +0x0e07931d4, +0x07cbc9a51, +0x08bbfb441, +0x0fa3d78b5, +0x05ca3b116, +0x0d476b505, +0x01beedfbc, +0x0c39918a6, +0x01a706c42, +0x003d378ca, +0x04d322519, +0x08a47dd58, +0x0de8628cf, +0x079be5d1b, +0x031485b12, +0x0cad3b1b1, +0x03632d68d, +0x0df7bfa60, +0x062029038, +0x0b94ab7cf, +0x0bad606fa, +0x0d57baa5d, +0x016122f47, +0x00bc4c848, +0x0523d4499, +0x0ece7c785, +0x0c3f7b155, +0x0ef7077a5, +0x02ec127b2, +0x09a61117e, +0x00bd11acb, +0x0e35753c0, +0x0f77b3cfd, +0x025ba4bfe, +0x059b0271c, +0x0af3389b1, +0x08e06e9b7, +0x089be9c46, +0x053c68e4d, +0x050178418, +0x05c766f84, +0x0ce4b7869, +0x0b0983620, +0x07fb95077, +0x0f39509a9, +0x0a6462a99, +0x082ec67f6, +0x06ea2b946, +0x00692d41b, +0x00231f9ba, +0x0623b4b56, +0x0649e0188, +0x07ea7c3b2, +0x0d780f763, +0x017ceec0d, +0x03e130d93, +0x0765f6e3c, +0x093de429f, +0x0a1daf9eb, +0x0283c83c2, +0x06987b7a1, +0x092f53d7e, +0x06f30370e, +0x0915d0ece, +0x0cbfeb0c1, +0x0748dc2e1, +0x0af6630a1, +0x0fd626a83, +0x086da0b78, +0x06001d884, +0x0748a6537, +0x052a04283, +0x0909e7e26, +0x01953a8ab, +0x02cc1627e, +0x03d8129d9, +0x0f2844866, +0x04b6fbd8e, +0x0ab5cab78, +0x07d6e1110, +0x01205c13a, +0x0926b87c2, +0x0925b5f08, +0x048429f8a, +0x003246e39, +0x09fba27e5, +0x06e519de5, +0x074feb3bb, +0x0fd359a46, +0x049b642af, +0x0402495e2, +0x0c9a50d25, +0x0c91ab92b, +0x076fe55ab, +0x08135df83, +0x09b64c1a9, +0x025261ca3, +0x09d6a91da, +0x0e7c881d8, diff --git a/src/soc/intel/baytrail/microcode/Makefile.inc b/src/soc/intel/baytrail/microcode/Makefile.inc new file mode 100644 index 0000000000..09bd454ce0 --- /dev/null +++ b/src/soc/intel/baytrail/microcode/Makefile.inc @@ -0,0 +1 @@ +cpu_microcode-$(CONFIG_CPU_MICROCODE_CBFS_GENERATE) += microcode_blob.c diff --git a/src/soc/intel/baytrail/microcode/microcode_blob.c b/src/soc/intel/baytrail/microcode/microcode_blob.c new file mode 100644 index 0000000000..36f2de2333 --- /dev/null +++ b/src/soc/intel/baytrail/microcode/microcode_blob.c @@ -0,0 +1,3 @@ +unsigned microcode[] = { +#include "M0C3067_0000030f.h" +}; diff --git a/src/soc/intel/baytrail/mrc_cache.c b/src/soc/intel/baytrail/mrc_cache.c new file mode 100644 index 0000000000..5613761ce5 --- /dev/null +++ b/src/soc/intel/baytrail/mrc_cache.c @@ -0,0 +1,294 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <string.h> +#include <console/console.h> +#include <cbmem.h> +#include <ip_checksum.h> +#if CONFIG_CHROMEOS +#include <vendorcode/google/chromeos/fmap.h> +#endif +#include <baytrail/mrc_cache.h> + +#define MRC_DATA_ALIGN 0x1000 +#define MRC_DATA_SIGNATURE (('M'<<0)|('R'<<8)|('C'<<16)|('D'<<24)) + +/* The mrc_data_region describes the larger non-volatile area to store + * mrc_saved_data objects.*/ +struct mrc_data_region { + void *base; + uint32_t size; +}; + +/* common code */ +static int mrc_cache_get_region(struct mrc_data_region *region) +{ +#if CONFIG_CHROMEOS + int ret; + ret = find_fmap_entry("RW_MRC_CACHE", ®ion->base); + if (ret >= 0) { + region->size = ret; + return 0; + } +#endif + region->base = (void *)CONFIG_MRC_SETTINGS_CACHE_BASE; + region->size = CONFIG_MRC_SETTINGS_CACHE_SIZE; + return 0; +} + +static int mrc_cache_in_region(const struct mrc_data_region *region, + const struct mrc_saved_data *cache) +{ + uintptr_t region_end; + uintptr_t cache_end; + + if ((uintptr_t)cache < (uintptr_t)region->base) + return 0; + + region_end = (uintptr_t)region->base; + region_end += region->size; + + if ((uintptr_t)cache >= region_end) + return 0; + + if ((sizeof(*cache) + (uintptr_t)cache) >= region_end) + return 0; + + cache_end = (uintptr_t)cache; + cache_end += cache->size + sizeof(*cache); + + if (cache_end > region_end) + return 0; + + return 1; +} + +static int mrc_cache_valid(const struct mrc_data_region *region, + const struct mrc_saved_data *cache) +{ + uint32_t checksum; + + if (cache->signature != MRC_DATA_SIGNATURE) + return 0; + + if (cache->size > region->size) + return 0; + + if (cache->reserved != 0) + return 0; + + checksum = compute_ip_checksum((void *)&cache->data[0], cache->size); + + if (cache->checksum != checksum) + return 0; + + return 1; +} + +static const struct mrc_saved_data * +next_cache_block(const struct mrc_saved_data *cache) +{ + uintptr_t next = (uintptr_t)cache; + + next += ALIGN(cache->size + sizeof(*cache), MRC_DATA_ALIGN); + + return (const struct mrc_saved_data *)next; +} + +/* Locate the most recently saved MRC data. */ +static int __mrc_cache_get_current(const struct mrc_data_region *region, + const struct mrc_saved_data **cache) +{ + const struct mrc_saved_data *msd; + const struct mrc_saved_data *verified_cache; + + msd = region->base; + + verified_cache = NULL; + + while (mrc_cache_in_region(region, msd) && + mrc_cache_valid(region, msd)) { + verified_cache = msd; + msd = next_cache_block(msd); + } + + if (verified_cache == NULL) + return -1; + + *cache = verified_cache; + return 0; +} + +int mrc_cache_get_current(const struct mrc_saved_data **cache) +{ + struct mrc_data_region region; + + if (mrc_cache_get_region(®ion) < 0) + return -1; + + return __mrc_cache_get_current(®ion, cache); +} + +#if defined(__PRE_RAM__) +/* romstage code */ + +/* Fill in mrc_saved_data structure with payload. */ +static void mrc_cache_fill(struct mrc_saved_data *cache, void *data, + size_t size) +{ + cache->signature = MRC_DATA_SIGNATURE; + cache->size = size; + cache->reserved = 0; + memcpy(&cache->data[0], data, size); + cache->checksum = compute_ip_checksum((void *)&cache->data[0], + cache->size); +} + +int mrc_cache_stash_data(void *data, size_t size) +{ + int cbmem_size; + struct mrc_saved_data *cache; + + cbmem_size = sizeof(*cache) + ALIGN(size, 16); + + cache = cbmem_add(CBMEM_ID_MRCDATA, cbmem_size); + + if (cache == NULL) { + printk(BIOS_ERR, "No space in cbmem for MRC data.\n"); + return -1; + } + + /* Clear alignment padding bytes. */ + memset(&cache->data[size], 0, cbmem_size - size); + + printk(BIOS_DEBUG, "Relocate MRC DATA from %p to %p (%zu bytes)\n", + data, cache, size); + + mrc_cache_fill(cache, data, size); + + return 0; +} + +#else +/* ramstage code */ +#include <bootstate.h> +#include <baytrail/nvm.h> + +static int mrc_slot_valid(const struct mrc_data_region *region, + const struct mrc_saved_data *slot, + const struct mrc_saved_data *to_save) +{ + uintptr_t region_begin; + uintptr_t region_end; + uintptr_t slot_end; + uintptr_t slot_begin; + uint32_t size; + + region_begin = (uintptr_t)region->base; + region_end = region_begin + region->size; + slot_begin = (uintptr_t)slot; + size = to_save->size + sizeof(*to_save); + slot_end = slot_begin + size; + + if (slot_begin < region_begin || slot_begin > region_end) + return 0; + + if (size > region->size) + return 0; + + if (slot_end > region_end || slot_end < region_begin) + return 0; + + if (!nvm_is_erased(slot, size)) + return 0; + + return 1; +} + +static const struct mrc_saved_data * +mrc_cache_next_slot(const struct mrc_data_region *region, + const struct mrc_saved_data *current_slot) +{ + const struct mrc_saved_data *next_slot; + + if (current_slot == NULL) { + next_slot = region->base; + } else { + next_slot = next_cache_block(current_slot); + } + + return next_slot; +} + +static void update_mrc_cache(void *unused) +{ + const struct mrc_saved_data *current_boot; + const struct mrc_saved_data *current_saved; + const struct mrc_saved_data *next_slot; + struct mrc_data_region region; + + printk(BIOS_DEBUG, "Updating MRC cache data.\n"); + + current_boot = cbmem_find(CBMEM_ID_MRCDATA); + if (!current_boot) { + printk(BIOS_ERR, "No MRC cache in cbmem.\n"); + return; + } + + if (mrc_cache_get_region(®ion)) { + printk(BIOS_ERR, "Could not obtain MRC cache region.\n"); + return; + } + + if (!mrc_cache_valid(®ion, current_boot)) { + printk(BIOS_ERR, "MRC cache data in cbmem invalid.\n"); + return; + } + + current_saved = NULL; + + if (!__mrc_cache_get_current(®ion, ¤t_saved)) { + if (current_saved->size == current_boot->size && + !memcmp(¤t_saved->data[0], ¤t_boot->data[0], + current_saved->size)) { + printk(BIOS_DEBUG, "MRC cache up to date.\n"); + return; + } + } + + next_slot = mrc_cache_next_slot(®ion, current_saved); + + if (!mrc_slot_valid(®ion, next_slot, current_boot)) { + if (nvm_erase(region.base, region.size) < 0) { + printk(BIOS_DEBUG, "Could not erase MRC region.\n"); + return; + } + next_slot = region.base; + } + + nvm_write((void *)next_slot, current_boot, + current_boot->size + sizeof(*current_boot)); +} + +BOOT_STATE_INIT_ENTRIES(mrc_cache_update) = { + BOOT_STATE_INIT_ENTRY(BS_WRITE_TABLES, BS_ON_ENTRY, + update_mrc_cache, NULL), +}; + +#endif /* defined(__PRE_RAM__) */ diff --git a/src/soc/intel/baytrail/nvm.c b/src/soc/intel/baytrail/nvm.c new file mode 100644 index 0000000000..dccc8014dc --- /dev/null +++ b/src/soc/intel/baytrail/nvm.c @@ -0,0 +1,83 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stdint.h> +#include <stddef.h> +#include <console/console.h> +#include <string.h> +#include <spi-generic.h> +#include <spi_flash.h> +#include <baytrail/nvm.h> + +/* This module assumes the flash is memory mapped just below 4GiB in the + * address space for reading. Also this module assumes an area it erased + * when all bytes read as all 0xff's. */ + +static struct spi_flash *flash; + +static int nvm_init(void) +{ + if (flash != NULL) + return 0; + + spi_init(); + flash = spi_flash_probe(0, 0, 1000000, SPI_MODE_3); + if (!flash) { + printk(BIOS_DEBUG, "Could not find SPI device\n"); + return -1; + } + + return 0; +} + +/* Convert memory mapped pointer to flash offset. */ +static inline uint32_t to_flash_offset(void *p) +{ + return CONFIG_ROM_SIZE + (uintptr_t)p; +} + +int nvm_is_erased(const void *start, size_t size) +{ + const char *cur = start; + + while (size > 0) { + if (*cur != 0xff) + return 0; + cur++; + size--; + } + return 1; +} + +int nvm_erase(void *start, size_t size) +{ + if (nvm_init() < 0) + return -1; + flash->erase(flash, to_flash_offset(start), size); + return 0; +} + +/* Write data to NVM. Returns 0 on success < 0 on error. */ +int nvm_write(void *start, const void *data, size_t size) +{ + if (nvm_init() < 0) + return -1; + flash->write(flash, to_flash_offset(start), size, data); + return 0; +} diff --git a/src/soc/intel/baytrail/placeholders.c b/src/soc/intel/baytrail/placeholders.c new file mode 100644 index 0000000000..8f2342adc0 --- /dev/null +++ b/src/soc/intel/baytrail/placeholders.c @@ -0,0 +1,21 @@ + +#include <arch/acpi.h> +#include <cpu/cpu.h> +#include <device/pci_rom.h> +#include <baytrail/acpi.h> + + +void generate_cpu_entries(void) {} + +void acpi_create_intel_hpet(acpi_hpet_t * hpet) {} + +void acpi_create_serialio_ssdt(acpi_header_t *ssdt) {} + +unsigned long acpi_fill_mcfg(unsigned long current) { return current; } + +void smm_setup_structures(void *gnvs, void *tcg, void *smi1) {} + +void smm_init(void) {} + +/* Rmodules don't like weak symbols. */ +u32 map_oprom_vendev(u32 vendev) { return vendev; } diff --git a/src/soc/intel/baytrail/romstage/Makefile.inc b/src/soc/intel/baytrail/romstage/Makefile.inc new file mode 100644 index 0000000000..188ce44ecd --- /dev/null +++ b/src/soc/intel/baytrail/romstage/Makefile.inc @@ -0,0 +1,4 @@ +cpu_incs += $(src)/soc/intel/baytrail/romstage/cache_as_ram.inc +romstage-y += romstage.c +romstage-y += raminit.c +romstage-$(CONFIG_ENABLE_BUILTIN_COM1) += uart.c diff --git a/src/soc/intel/baytrail/romstage/cache_as_ram.inc b/src/soc/intel/baytrail/romstage/cache_as_ram.inc new file mode 100644 index 0000000000..920fbe4b09 --- /dev/null +++ b/src/soc/intel/baytrail/romstage/cache_as_ram.inc @@ -0,0 +1,280 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2000,2007 Ronald G. Minnich <rminnich@gmail.com> + * Copyright (C) 2007-2008 coresystems GmbH + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <cpu/x86/stack.h> +#include <cpu/x86/mtrr.h> +#include <cpu/x86/cache.h> +#include <cpu/x86/post_code.h> +#include <cbmem.h> + +/* The full cache-as-ram size includes the cache-as-ram portion from coreboot + * and the space used by the reference code. These 2 values combined should + * be a power of 2 because the MTRR setup assumes that. */ +#define CACHE_AS_RAM_SIZE \ + (CONFIG_DCACHE_RAM_SIZE + CONFIG_DCACHE_RAM_MRC_VAR_SIZE) +#define CACHE_AS_RAM_BASE CONFIG_DCACHE_RAM_BASE + +/* Enough room to cache CAR_TILE_SIZE starting at MRC_BIN_ADDRESS */ +#define CACHE_MRC_BASE (CONFIG_MRC_BIN_ADDRESS) +#define CACHE_MRC_MASK (~(CONFIG_CAR_TILE_SIZE - 1)) + +#define CPU_PHYSMASK_HI ((1 << (CONFIG_CPU_ADDR_BITS - 32)) - 1) + +#define NoEvictMod_MSR 0x2e0 +#define BBL_CR_CTL3_MSR 0x11e +#define MCG_CAP_MSR 0x179 + + /* Save the BIST result. */ + movl %eax, %ebp + +cache_as_ram: + post_code(0x20) + + /* Send INIT IPI to all excluding ourself. */ + movl $0x000C4500, %eax + movl $0xFEE00300, %esi + movl %eax, (%esi) + + /* All CPUs need to be in Wait for SIPI state */ +wait_for_sipi: + movl (%esi), %eax + bt $12, %eax + jc wait_for_sipi + + post_code(0x21) + /* Configure the default memory type to uncacheable as well as disable + * fixed and variable range mtrrs. */ + movl $MTRRdefType_MSR, %ecx + rdmsr + andl $(~0x00000cff), %eax + wrmsr + + post_code(0x22) + /* Zero the variable MTRRs. */ + movl $MCG_CAP_MSR, %ecx + rdmsr + movzx %al, %ebx + /* First variable MTRR. */ + movl $0x200, %ecx + xorl %eax, %eax + xorl %edx, %edx + 1: + wrmsr + inc %ecx + dec %ebx + jnz 1b + + /* Zero out all fixed range and variable range MTRRs. */ + movl $fixed_mtrr_table, %esi + movl $((fixed_mtrr_table_end - fixed_mtrr_table) / 2), %edi + xorl %eax, %eax + xorl %edx, %edx + 1: + movw (%esi), %bx + movzx %bx, %ecx + wrmsr + add $2, %esi + dec %edi + jnz 1b + + post_code(0x23) + /* Set Cache-as-RAM base address. */ + movl $(MTRRphysBase_MSR(0)), %ecx + movl $(CACHE_AS_RAM_BASE | MTRR_TYPE_WRBACK), %eax + xorl %edx, %edx + wrmsr + + post_code(0x24) + /* Set Cache-as-RAM mask. */ + movl $(MTRRphysMask_MSR(0)), %ecx + movl $(~(CACHE_AS_RAM_SIZE - 1) | MTRRphysMaskValid), %eax + movl $CPU_PHYSMASK_HI, %edx + wrmsr + + post_code(0x25) + /* Set Cache-as-RAM base address. */ + movl $(MTRRphysBase_MSR(1)), %ecx + movl $(CACHE_MRC_BASE | MTRR_TYPE_WRPROT), %eax + xorl %edx, %edx + wrmsr + + movl $(MTRRphysMask_MSR(1)), %ecx + movl $(CACHE_MRC_MASK | MTRRphysMaskValid), %eax + movl $CPU_PHYSMASK_HI, %edx + wrmsr + + /* Enable MTRR. */ + movl $MTRRdefType_MSR, %ecx + rdmsr + orl $MTRRdefTypeEn, %eax + wrmsr + + post_code(0x26) + + /* Enable the L2 cache. */ + movl $BBL_CR_CTL3_MSR, %ecx + rdmsr + orl $0x100, %eax + wrmsr + + post_code(0x27) + + /* Enable cache (CR0.CD = 0, CR0.NW = 0). */ + movl %cr0, %eax + andl $(~(CR0_CacheDisable | CR0_NoWriteThrough)), %eax + invd + movl %eax, %cr0 + + /* enable the 'no eviction' mode */ + movl $NoEvictMod_MSR, %ecx + rdmsr + orl $1, %eax + wrmsr + + post_code(0x28) + + /* Clear the cache memory region. This will also fill up the cache */ + movl $CACHE_AS_RAM_BASE, %esi + movl %esi, %edi + movl $(CACHE_AS_RAM_SIZE / 4), %ecx + xorl %eax, %eax + rep stosl + + /* enable no evict mode */ + movl $NoEvictMod_MSR, %ecx + rdmsr + orl $2, %eax + wrmsr + + post_code(0x29) + + /* Setup the stack. */ + movl $(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE), %eax + movl %eax, %esp + + /* Restore the BIST result. */ + movl %ebp, %eax + movl %esp, %ebp + pushl %eax + +before_romstage: + post_code(0x2a) + /* Call romstage.c main function. */ + call romstage_main + /* Save return value from romstage_main. It contains the stack to use + * after cache-as-ram is torn down. It also contains the information + * for setting up MTRRs. */ + movl %eax, %ebx + + post_code(0x2b) + + /* Disable cache. */ + movl %cr0, %eax + orl $CR0_CacheDisable, %eax + movl %eax, %cr0 + + post_code(0x2c) + + /* Disable MTRR. */ + movl $MTRRdefType_MSR, %ecx + rdmsr + andl $(~MTRRdefTypeEn), %eax + wrmsr + + invd + + post_code(0x2d) + + /* Disable the no eviction run state */ + movl $NoEvictMod_MSR, %ecx + rdmsr + andl $~2, %eax + wrmsr + + /* Disable the no eviction mode */ + rdmsr + andl $~1, %eax + wrmsr + + post_code(0x2e) + + /* Setup stack as indicated by return value from ramstage_main(). */ + movl %ebx, %esp + + /* Get number of MTRRs. */ + popl %ebx + movl $MTRRphysBase_MSR(0), %ecx +1: + testl %ebx, %ebx + jz 1f + + /* Low 32 bits of MTRR base. */ + popl %eax + /* Upper 32 bits of MTRR base. */ + popl %edx + /* Write MTRR base. */ + wrmsr + inc %ecx + /* Low 32 bits of MTRR mask. */ + popl %eax + /* Upper 32 bits of MTRR mask. */ + popl %edx + /* Write MTRR mask. */ + wrmsr + inc %ecx + + dec %ebx + jmp 1b +1: + post_code(0x2f) + + /* And enable cache again after setting MTRRs. */ + movl %cr0, %eax + andl $~(CR0_CacheDisable | CR0_NoWriteThrough), %eax + movl %eax, %cr0 + + post_code(0x30) + + /* Enable MTRR. */ + movl $MTRRdefType_MSR, %ecx + rdmsr + orl $MTRRdefTypeEn, %eax + wrmsr + + post_code(0x31) + +__main: + post_code(POST_PREPARE_RAMSTAGE) + cld /* Clear direction flag. */ + call romstage_after_car + +.Lhlt: + post_code(POST_DEAD_CODE) + hlt + jmp .Lhlt + +/* Fixed MTRRs */ +fixed_mtrr_table: + .word 0x250, 0x258, 0x259 + .word 0x268, 0x269, 0x26A + .word 0x26B, 0x26C, 0x26D + .word 0x26E, 0x26F +fixed_mtrr_table_end: + diff --git a/src/soc/intel/baytrail/romstage/raminit.c b/src/soc/intel/baytrail/romstage/raminit.c new file mode 100644 index 0000000000..68836d3ada --- /dev/null +++ b/src/soc/intel/baytrail/romstage/raminit.c @@ -0,0 +1,93 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stddef.h> +#include <arch/io.h> +#include <cbfs.h> +#include <cbmem.h> +#include <console/console.h> +#include <device/pci_def.h> +#include <baytrail/gpio.h> +#include <baytrail/mrc_cache.h> +#include <baytrail/iomap.h> +#include <baytrail/pci_devs.h> +#include <baytrail/romstage.h> + + +static void enable_smbus(void) +{ + uint32_t reg; + const uint32_t smbus_dev = PCI_DEV(0, SMBUS_DEV, SMBUS_FUNC); + + /* SMBus I/O BAR */ + reg = SMBUS_BASE_ADDRESS | 2; + pci_write_config32(smbus_dev, PCI_BASE_ADDRESS_4, reg); + /* Enable decode of I/O space. */ + reg = pci_read_config16(smbus_dev, PCI_COMMAND); + reg |= 0x1; + pci_write_config16(smbus_dev, PCI_COMMAND, reg); + /* Enable Host Controller */ + reg = pci_read_config8(smbus_dev, 0x40); + reg |= 1; + pci_write_config8(smbus_dev, 0x40, reg); + + /* Configure pads to be used for SMBus */ + score_select_func(PCU_SMB_CLK_PAD, 1); + score_select_func(PCU_SMB_DATA_PAD, 1); +} + +void raminit(struct mrc_params *mp, int prev_sleep_state) +{ + int ret; + mrc_wrapper_entry_t mrc_entry; + const struct mrc_saved_data *cache; + + /* Fill in default entries. */ + mp->version = MRC_PARAMS_VER; + mp->console_out = &console_tx_byte; + mp->prev_sleep_state = prev_sleep_state; + + if (!mrc_cache_get_current(&cache)) { + mp->saved_data_size = cache->size; + mp->saved_data = &cache->data[0]; + } else { + printk(BIOS_DEBUG, "No MRC cache found.\n"); + } + + mrc_entry = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, "mrc.bin", 0xab, + NULL); + + if (mrc_entry == NULL) { + printk(BIOS_DEBUG, "Couldn't find mrc.bin\n"); + return; + } + if (mp->mainboard.dram_info_location == DRAM_INFO_SPD_SMBUS) + enable_smbus(); + + ret = mrc_entry(mp); + + cbmem_initialize_empty(); + + printk(BIOS_DEBUG, "MRC Wrapper returned %d\n", ret); + printk(BIOS_DEBUG, "MRC data at %p %d bytes\n", mp->data_to_save, + mp->data_to_save_size); + + if (mp->data_to_save != NULL && mp->data_to_save_size > 0) + mrc_cache_stash_data(mp->data_to_save, mp->data_to_save_size); +} diff --git a/src/soc/intel/baytrail/romstage/romstage.c b/src/soc/intel/baytrail/romstage/romstage.c new file mode 100644 index 0000000000..d3538991bb --- /dev/null +++ b/src/soc/intel/baytrail/romstage/romstage.c @@ -0,0 +1,218 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stddef.h> +#include <arch/cpu.h> +#include <arch/io.h> +#include <arch/cbfs.h> +#include <arch/stages.h> +#include <console/console.h> +#include <cbmem.h> +#include <cpu/x86/mtrr.h> +#include <romstage_handoff.h> +#include <baytrail/gpio.h> +#include <baytrail/iomap.h> +#include <baytrail/iosf.h> +#include <baytrail/lpc.h> +#include <baytrail/pci_devs.h> +#include <baytrail/romstage.h> + +/* The cache-as-ram assembly file calls romstage_main() after setting up + * cache-as-ram. romstage_main() will then call the mainboards's + * mainboard_romstage_entry() function. That function then calls + * romstage_common() below. The reason for the back and forth is to provide + * common entry point from cache-as-ram while still allowing for code sharing. + * Because we can't use global variables the stack is used for allocations -- + * thus the need to call back and forth. */ + +static void *setup_stack_and_mttrs(void); + +static void program_base_addresses(void) +{ + uint32_t reg; + const uint32_t lpc_dev = PCI_DEV(0, LPC_DEV, LPC_FUNC); + + /* Memory Mapped IO registers. */ + reg = PMC_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, PBASE, reg); + reg = IO_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, IOBASE, reg); + reg = ILB_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, IBASE, reg); + reg = SPI_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, SBASE, reg); + reg = MPHY_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, MPBASE, reg); + reg = RCBA_BASE_ADDRESS | 1; + pci_write_config32(lpc_dev, RCBA, reg); + + /* IO Port Registers. */ + reg = ACPI_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, ABASE, reg); + reg = GPIO_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, GBASE, reg); +} + +/* Entry from cache-as-ram.inc. */ +void * asmlinkage romstage_main(unsigned long bist) +{ + /* Call into mainboard. */ + mainboard_romstage_entry(bist); + + return setup_stack_and_mttrs(); +} + +/* Entry from the mainboard. */ +void romstage_common(const struct romstage_params *params) +{ + struct romstage_handoff *handoff; + + program_base_addresses(); + + byt_config_com1_and_enable(); + + console_init(); + + /* Initialize RAM */ + raminit(params->mrc_params, 5); + + handoff = romstage_handoff_find_or_add(); + if (handoff != NULL) + handoff->s3_resume = 0; + else + printk(BIOS_DEBUG, "Romstage handoff structure not added!\n"); + +} + +static void open_up_spi(void) +{ + const uintptr_t sbase = SPI_BASE_ADDRESS; + + /* Disable generating SMI when setting WPD bit. */ + write32(sbase + 0xf8, read32(sbase + 0xf8) & ~(1 << 7)); + /* Disable the SMM-only BIOS write and set WPD bit. */ + write32(sbase + 0xfc, 1 | (read32(sbase + 0xfc) & ~(1 << 5))); +} + +void asmlinkage romstage_after_car(void) +{ + /* Allow BIOS to program SPI part. */ + open_up_spi(); + + /* Load the ramstage. */ + copy_and_run(); + while (1); +} + +static inline uint32_t *stack_push(u32 *stack, u32 value) +{ + stack = &stack[-1]; + *stack = value; + return stack; +} + +/* Romstage needs quite a bit of stack for decompressing images since the lzma + * lib keeps its state on the stack during romstage. */ +static unsigned long choose_top_of_stack(void) +{ + unsigned long stack_top; + const unsigned long romstage_ram_stack_size = 0x5000; + + /* cbmem_add() does a find() before add(). */ + stack_top = (unsigned long)cbmem_add(CBMEM_ID_ROMSTAGE_RAM_STACK, + romstage_ram_stack_size); + stack_top += romstage_ram_stack_size; + return stack_top; +} + +/* setup_stack_and_mttrs() determines the stack to use after + * cache-as-ram is torn down as well as the MTRR settings to use. */ +static void *setup_stack_and_mttrs(void) +{ + unsigned long top_of_stack; + int num_mtrrs; + uint32_t *slot; + uint32_t mtrr_mask_upper; + uint32_t top_of_ram; + + /* Top of stack needs to be aligned to a 4-byte boundary. */ + top_of_stack = choose_top_of_stack() & ~3; + slot = (void *)top_of_stack; + num_mtrrs = 0; + + /* The upper bits of the MTRR mask need to set according to the number + * of physical address bits. */ + mtrr_mask_upper = (1 << ((cpuid_eax(0x80000008) & 0xff) - 32)) - 1; + + /* The order for each MTRR is value then base with upper 32-bits of + * each value coming before the lower 32-bits. The reasoning for + * this ordering is to create a stack layout like the following: + * +0: Number of MTRRs + * +4: MTRR base 0 31:0 + * +8: MTRR base 0 63:32 + * +12: MTRR mask 0 31:0 + * +16: MTRR mask 0 63:32 + * +20: MTRR base 1 31:0 + * +24: MTRR base 1 63:32 + * +28: MTRR mask 1 31:0 + * +32: MTRR mask 1 63:32 + */ + + /* Cache the ROM as WP just below 4GiB. */ + slot = stack_push(slot, mtrr_mask_upper); /* upper mask */ + slot = stack_push(slot, ~(CONFIG_ROM_SIZE - 1) | MTRRphysMaskValid); + slot = stack_push(slot, 0); /* upper base */ + slot = stack_push(slot, ~(CONFIG_ROM_SIZE - 1) | MTRR_TYPE_WRPROT); + num_mtrrs++; + + /* Cache RAM as WB from 0 -> CONFIG_RAMTOP. */ + slot = stack_push(slot, mtrr_mask_upper); /* upper mask */ + slot = stack_push(slot, ~(CONFIG_RAMTOP - 1) | MTRRphysMaskValid); + slot = stack_push(slot, 0); /* upper base */ + slot = stack_push(slot, 0 | MTRR_TYPE_WRBACK); + num_mtrrs++; + + top_of_ram = (uint32_t)cbmem_top(); + /* Cache 8MiB below the top of ram. The top of ram under 4GiB is the + * start of the TSEG region. It is required to be 8MiB aligned. Set + * this area as cacheable so it can be used later for ramstage before + * setting up the entire RAM as cacheable. */ + slot = stack_push(slot, mtrr_mask_upper); /* upper mask */ + slot = stack_push(slot, ~((8 << 20) - 1) | MTRRphysMaskValid); + slot = stack_push(slot, 0); /* upper base */ + slot = stack_push(slot, (top_of_ram - (8 << 20)) | MTRR_TYPE_WRBACK); + num_mtrrs++; + + /* Cache 8MiB at the top of ram. Top of ram is where the TSEG + * region resides. However, it is not restricted to SMM mode until + * SMM has been relocated. By setting the region to cacheable it + * provides faster access when relocating the SMM handler as well + * as using the TSEG region for other purposes. */ + slot = stack_push(slot, mtrr_mask_upper); /* upper mask */ + slot = stack_push(slot, ~((8 << 20) - 1) | MTRRphysMaskValid); + slot = stack_push(slot, 0); /* upper base */ + slot = stack_push(slot, top_of_ram | MTRR_TYPE_WRBACK); + num_mtrrs++; + + /* Save the number of MTRRs to setup. Return the stack location + * pointing to the number of MTRRs. */ + slot = stack_push(slot, num_mtrrs); + + return slot; +} diff --git a/src/soc/intel/baytrail/romstage/uart.c b/src/soc/intel/baytrail/romstage/uart.c new file mode 100644 index 0000000000..dee3be95c3 --- /dev/null +++ b/src/soc/intel/baytrail/romstage/uart.c @@ -0,0 +1,39 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <baytrail/gpio.h> +#include <baytrail/iomap.h> +#include <baytrail/lpc.h> +#include <baytrail/pci_devs.h> +#include <baytrail/romstage.h> + +void byt_config_com1_and_enable(void) +{ + uint32_t reg; + + /* Enable the UART hardware for COM1. */ + reg = 1; + pci_write_config32(PCI_DEV(0, LPC_DEV, 0), UART_CONT, reg); + + /* Set up the pads to select the UART function. RXD and TXD are + * 0x520 and 0x530, respectively. */ + write32(IO_BASE_ADDRESS + 0x520, read32(IO_BASE_ADDRESS + 0x520) | 1); + write32(IO_BASE_ADDRESS + 0x530, read32(IO_BASE_ADDRESS + 0x530) | 1); +} diff --git a/src/soc/intel/baytrail/spi.c b/src/soc/intel/baytrail/spi.c new file mode 100644 index 0000000000..5ac42c2dd4 --- /dev/null +++ b/src/soc/intel/baytrail/spi.c @@ -0,0 +1,654 @@ +/* + * Copyright (c) 2013 Google Inc. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* This file is derived from the flashrom project. */ +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include <delay.h> +#include <arch/io.h> +#include <console/console.h> +#include <device/pci_ids.h> +#include <spi_flash.h> + +#include <baytrail/lpc.h> +#include <baytrail/pci_devs.h> + +#ifdef __SMM__ +#define pci_read_config_byte(dev, reg, targ)\ + *(targ) = pci_read_config8(dev, reg) +#define pci_read_config_word(dev, reg, targ)\ + *(targ) = pci_read_config16(dev, reg) +#define pci_read_config_dword(dev, reg, targ)\ + *(targ) = pci_read_config32(dev, reg) +#define pci_write_config_byte(dev, reg, val)\ + pci_write_config8(dev, reg, val) +#define pci_write_config_word(dev, reg, val)\ + pci_write_config16(dev, reg, val) +#define pci_write_config_dword(dev, reg, val)\ + pci_write_config32(dev, reg, val) +#else /* !__SMM__ */ +#include <device/device.h> +#include <device/pci.h> +#define pci_read_config_byte(dev, reg, targ)\ + *(targ) = pci_read_config8(dev, reg) +#define pci_read_config_word(dev, reg, targ)\ + *(targ) = pci_read_config16(dev, reg) +#define pci_read_config_dword(dev, reg, targ)\ + *(targ) = pci_read_config32(dev, reg) +#define pci_write_config_byte(dev, reg, val)\ + pci_write_config8(dev, reg, val) +#define pci_write_config_word(dev, reg, val)\ + pci_write_config16(dev, reg, val) +#define pci_write_config_dword(dev, reg, val)\ + pci_write_config32(dev, reg, val) +#endif /* !__SMM__ */ + +typedef struct spi_slave ich_spi_slave; + +static int ichspi_lock = 0; + +typedef struct ich9_spi_regs { + uint32_t bfpr; + uint16_t hsfs; + uint16_t hsfc; + uint32_t faddr; + uint32_t _reserved0; + uint32_t fdata[16]; + uint32_t frap; + uint32_t freg[5]; + uint32_t _reserved1[3]; + uint32_t pr[5]; + uint32_t _reserved2[2]; + uint8_t ssfs; + uint8_t ssfc[3]; + uint16_t preop; + uint16_t optype; + uint8_t opmenu[8]; + uint32_t bbar; + uint8_t _reserved3[12]; + uint32_t fdoc; + uint32_t fdod; + uint8_t _reserved4[8]; + uint32_t afc; + uint32_t lvscc; + uint32_t uvscc; + uint8_t _reserved5[4]; + uint32_t fpb; + uint8_t _reserved6[28]; + uint32_t srdl; + uint32_t srdc; + uint32_t srd; +} __attribute__((packed)) ich9_spi_regs; + +typedef struct ich_spi_controller { + int locked; + + uint8_t *opmenu; + int menubytes; + uint16_t *preop; + uint16_t *optype; + uint32_t *addr; + uint8_t *data; + unsigned databytes; + uint8_t *status; + uint16_t *control; + uint32_t *bbar; +} ich_spi_controller; + +static ich_spi_controller cntlr; + +enum { + SPIS_SCIP = 0x0001, + SPIS_GRANT = 0x0002, + SPIS_CDS = 0x0004, + SPIS_FCERR = 0x0008, + SSFS_AEL = 0x0010, + SPIS_LOCK = 0x8000, + SPIS_RESERVED_MASK = 0x7ff0, + SSFS_RESERVED_MASK = 0x7fe2 +}; + +enum { + SPIC_SCGO = 0x000002, + SPIC_ACS = 0x000004, + SPIC_SPOP = 0x000008, + SPIC_DBC = 0x003f00, + SPIC_DS = 0x004000, + SPIC_SME = 0x008000, + SSFC_SCF_MASK = 0x070000, + SSFC_RESERVED = 0xf80000 +}; + +enum { + HSFS_FDONE = 0x0001, + HSFS_FCERR = 0x0002, + HSFS_AEL = 0x0004, + HSFS_BERASE_MASK = 0x0018, + HSFS_BERASE_SHIFT = 3, + HSFS_SCIP = 0x0020, + HSFS_FDOPSS = 0x2000, + HSFS_FDV = 0x4000, + HSFS_FLOCKDN = 0x8000 +}; + +enum { + HSFC_FGO = 0x0001, + HSFC_FCYCLE_MASK = 0x0006, + HSFC_FCYCLE_SHIFT = 1, + HSFC_FDBC_MASK = 0x3f00, + HSFC_FDBC_SHIFT = 8, + HSFC_FSMIE = 0x8000 +}; + +enum { + SPI_OPCODE_TYPE_READ_NO_ADDRESS = 0, + SPI_OPCODE_TYPE_WRITE_NO_ADDRESS = 1, + SPI_OPCODE_TYPE_READ_WITH_ADDRESS = 2, + SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS = 3 +}; + +#if CONFIG_DEBUG_SPI_FLASH + +static u8 readb_(const void *addr) +{ + u8 v = read8((unsigned long)addr); + printk(BIOS_DEBUG, "read %2.2x from %4.4x\n", + v, ((unsigned) addr & 0xffff) - 0xf020); + return v; +} + +static u16 readw_(const void *addr) +{ + u16 v = read16((unsigned long)addr); + printk(BIOS_DEBUG, "read %4.4x from %4.4x\n", + v, ((unsigned) addr & 0xffff) - 0xf020); + return v; +} + +static u32 readl_(const void *addr) +{ + u32 v = read32((unsigned long)addr); + printk(BIOS_DEBUG, "read %8.8x from %4.4x\n", + v, ((unsigned) addr & 0xffff) - 0xf020); + return v; +} + +static void writeb_(u8 b, const void *addr) +{ + write8((unsigned long)addr, b); + printk(BIOS_DEBUG, "wrote %2.2x to %4.4x\n", + b, ((unsigned) addr & 0xffff) - 0xf020); +} + +static void writew_(u16 b, const void *addr) +{ + write16((unsigned long)addr, b); + printk(BIOS_DEBUG, "wrote %4.4x to %4.4x\n", + b, ((unsigned) addr & 0xffff) - 0xf020); +} + +static void writel_(u32 b, const void *addr) +{ + write32((unsigned long)addr, b); + printk(BIOS_DEBUG, "wrote %8.8x to %4.4x\n", + b, ((unsigned) addr & 0xffff) - 0xf020); +} + +#else /* CONFIG_DEBUG_SPI_FLASH ^^^ enabled vvv NOT enabled */ + +#define readb_(a) read8((uint32_t)a) +#define readw_(a) read16((uint32_t)a) +#define readl_(a) read32((uint32_t)a) +#define writeb_(val, addr) write8((uint32_t)addr, val) +#define writew_(val, addr) write16((uint32_t)addr, val) +#define writel_(val, addr) write32((uint32_t)addr, val) + +#endif /* CONFIG_DEBUG_SPI_FLASH ^^^ NOT enabled */ + +static void write_reg(const void *value, void *dest, uint32_t size) +{ + const uint8_t *bvalue = value; + uint8_t *bdest = dest; + + while (size >= 4) { + writel_(*(const uint32_t *)bvalue, bdest); + bdest += 4; bvalue += 4; size -= 4; + } + while (size) { + writeb_(*bvalue, bdest); + bdest++; bvalue++; size--; + } +} + +static void read_reg(const void *src, void *value, uint32_t size) +{ + const uint8_t *bsrc = src; + uint8_t *bvalue = value; + + while (size >= 4) { + *(uint32_t *)bvalue = readl_(bsrc); + bsrc += 4; bvalue += 4; size -= 4; + } + while (size) { + *bvalue = readb_(bsrc); + bsrc++; bvalue++; size--; + } +} + +static void ich_set_bbar(uint32_t minaddr) +{ + const uint32_t bbar_mask = 0x00ffff00; + uint32_t ichspi_bbar; + + minaddr &= bbar_mask; + ichspi_bbar = readl_(cntlr.bbar) & ~bbar_mask; + ichspi_bbar |= minaddr; + writel_(ichspi_bbar, cntlr.bbar); +} + +int spi_cs_is_valid(unsigned int bus, unsigned int cs) +{ + printk(BIOS_DEBUG, "spi_cs_is_valid used but not implemented\n"); + return 0; +} + +struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, + unsigned int max_hz, unsigned int mode) +{ + ich_spi_slave *slave = malloc(sizeof(*slave)); + + if (!slave) { + printk(BIOS_DEBUG, "ICH SPI: Bad allocation\n"); + return NULL; + } + + memset(slave, 0, sizeof(*slave)); + + slave->bus = bus; + slave->cs = cs; + return slave; +} + +static ich9_spi_regs *spi_regs(void) +{ + device_t dev; + uint32_t sbase; + +#ifdef __SMM__ + dev = PCI_DEV(0, LPC_DEV, LPC_FUNC); +#else + dev = dev_find_slot(0, PCI_DEVFN(LPC_DEV, LPC_FUNC)); +#endif + pci_read_config_dword(dev, SBASE, &sbase); + sbase &= ~0x1ff; + + return (void *)sbase; +} + +void spi_init(void) +{ + ich9_spi_regs *ich9_spi = spi_regs(); + + ichspi_lock = readw_(&ich9_spi->hsfs) & HSFS_FLOCKDN; + cntlr.opmenu = ich9_spi->opmenu; + cntlr.menubytes = sizeof(ich9_spi->opmenu); + cntlr.optype = &ich9_spi->optype; + cntlr.addr = &ich9_spi->faddr; + cntlr.data = (uint8_t *)ich9_spi->fdata; + cntlr.databytes = sizeof(ich9_spi->fdata); + cntlr.status = &ich9_spi->ssfs; + cntlr.control = (uint16_t *)ich9_spi->ssfc; + cntlr.bbar = &ich9_spi->bbar; + cntlr.preop = &ich9_spi->preop; + ich_set_bbar(0); +} + +int spi_claim_bus(struct spi_slave *slave) +{ + /* Handled by ICH automatically. */ + return 0; +} + +void spi_release_bus(struct spi_slave *slave) +{ + /* Handled by ICH automatically. */ +} + +void spi_cs_activate(struct spi_slave *slave) +{ + /* Handled by ICH automatically. */ +} + +void spi_cs_deactivate(struct spi_slave *slave) +{ + /* Handled by ICH automatically. */ +} + +typedef struct spi_transaction { + const uint8_t *out; + uint32_t bytesout; + uint8_t *in; + uint32_t bytesin; + uint8_t type; + uint8_t opcode; + uint32_t offset; +} spi_transaction; + +static inline void spi_use_out(spi_transaction *trans, unsigned bytes) +{ + trans->out += bytes; + trans->bytesout -= bytes; +} + +static inline void spi_use_in(spi_transaction *trans, unsigned bytes) +{ + trans->in += bytes; + trans->bytesin -= bytes; +} + +static void spi_setup_type(spi_transaction *trans) +{ + trans->type = 0xFF; + + /* Try to guess spi type from read/write sizes. */ + if (trans->bytesin == 0) { + if (trans->bytesout > 4) + /* + * If bytesin = 0 and bytesout > 4, we presume this is + * a write data operation, which is accompanied by an + * address. + */ + trans->type = SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS; + else + trans->type = SPI_OPCODE_TYPE_WRITE_NO_ADDRESS; + return; + } + + if (trans->bytesout == 1) { /* and bytesin is > 0 */ + trans->type = SPI_OPCODE_TYPE_READ_NO_ADDRESS; + return; + } + + if (trans->bytesout == 4) { /* and bytesin is > 0 */ + trans->type = SPI_OPCODE_TYPE_READ_WITH_ADDRESS; + } + + /* Fast read command is called with 5 bytes instead of 4 */ + if (trans->out[0] == SPI_OPCODE_FAST_READ && trans->bytesout == 5) { + trans->type = SPI_OPCODE_TYPE_READ_WITH_ADDRESS; + --trans->bytesout; + } +} + +static int spi_setup_opcode(spi_transaction *trans) +{ + uint16_t optypes; + uint8_t opmenu[cntlr.menubytes]; + + trans->opcode = trans->out[0]; + spi_use_out(trans, 1); + if (!ichspi_lock) { + /* The lock is off, so just use index 0. */ + writeb_(trans->opcode, cntlr.opmenu); + optypes = readw_(cntlr.optype); + optypes = (optypes & 0xfffc) | (trans->type & 0x3); + writew_(optypes, cntlr.optype); + return 0; + } else { + /* The lock is on. See if what we need is on the menu. */ + uint8_t optype; + uint16_t opcode_index; + + /* Write Enable is handled as atomic prefix */ + if (trans->opcode == SPI_OPCODE_WREN) + return 0; + + read_reg(cntlr.opmenu, opmenu, sizeof(opmenu)); + for (opcode_index = 0; opcode_index < cntlr.menubytes; + opcode_index++) { + if (opmenu[opcode_index] == trans->opcode) + break; + } + + if (opcode_index == cntlr.menubytes) { + printk(BIOS_DEBUG, "ICH SPI: Opcode %x not found\n", + trans->opcode); + return -1; + } + + optypes = readw_(cntlr.optype); + optype = (optypes >> (opcode_index * 2)) & 0x3; + if (trans->type == SPI_OPCODE_TYPE_WRITE_NO_ADDRESS && + optype == SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS && + trans->bytesout >= 3) { + /* We guessed wrong earlier. Fix it up. */ + trans->type = optype; + } + if (optype != trans->type) { + printk(BIOS_DEBUG, "ICH SPI: Transaction doesn't fit type %d\n", + optype); + return -1; + } + return opcode_index; + } +} + +static int spi_setup_offset(spi_transaction *trans) +{ + /* Separate the SPI address and data. */ + switch (trans->type) { + case SPI_OPCODE_TYPE_READ_NO_ADDRESS: + case SPI_OPCODE_TYPE_WRITE_NO_ADDRESS: + return 0; + case SPI_OPCODE_TYPE_READ_WITH_ADDRESS: + case SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS: + trans->offset = ((uint32_t)trans->out[0] << 16) | + ((uint32_t)trans->out[1] << 8) | + ((uint32_t)trans->out[2] << 0); + spi_use_out(trans, 3); + return 1; + default: + printk(BIOS_DEBUG, "Unrecognized SPI transaction type %#x\n", trans->type); + return -1; + } +} + +/* + * Wait for up to 60ms til status register bit(s) turn 1 (in case wait_til_set + * below is True) or 0. In case the wait was for the bit(s) to set - write + * those bits back, which would cause resetting them. + * + * Return the last read status value on success or -1 on failure. + */ +static int ich_status_poll(u16 bitmask, int wait_til_set) +{ + int timeout = 6000; /* This will result in 60 ms */ + u16 status = 0; + + while (timeout--) { + status = readw_(cntlr.status); + if (wait_til_set ^ ((status & bitmask) == 0)) { + if (wait_til_set) + writew_((status & bitmask), cntlr.status); + return status; + } + udelay(10); + } + + printk(BIOS_DEBUG, "ICH SPI: SCIP timeout, read %x, expected %x\n", + status, bitmask); + return -1; +} + +int spi_xfer(struct spi_slave *slave, const void *dout, + unsigned int bitsout, void *din, unsigned int bitsin) +{ + uint16_t control; + int16_t opcode_index; + int with_address; + int status; + + spi_transaction trans = { + dout, bitsout / 8, + din, bitsin / 8, + 0xff, 0xff, 0 + }; + + /* There has to always at least be an opcode. */ + if (!bitsout || !dout) { + printk(BIOS_DEBUG, "ICH SPI: No opcode for transfer\n"); + return -1; + } + /* Make sure if we read something we have a place to put it. */ + if (bitsin != 0 && !din) { + printk(BIOS_DEBUG, "ICH SPI: Read but no target buffer\n"); + return -1; + } + /* Right now we don't support writing partial bytes. */ + if (bitsout % 8 || bitsin % 8) { + printk(BIOS_DEBUG, "ICH SPI: Accessing partial bytes not supported\n"); + return -1; + } + + if (ich_status_poll(SPIS_SCIP, 0) == -1) + return -1; + + writew_(SPIS_CDS | SPIS_FCERR, cntlr.status); + + spi_setup_type(&trans); + if ((opcode_index = spi_setup_opcode(&trans)) < 0) + return -1; + if ((with_address = spi_setup_offset(&trans)) < 0) + return -1; + + if (trans.opcode == SPI_OPCODE_WREN) { + /* + * Treat Write Enable as Atomic Pre-Op if possible + * in order to prevent the Management Engine from + * issuing a transaction between WREN and DATA. + */ + if (!ichspi_lock) + writew_(trans.opcode, cntlr.preop); + return 0; + } + + /* Preset control fields */ + control = SPIC_SCGO | ((opcode_index & 0x07) << 4); + + /* Issue atomic preop cycle if needed */ + if (readw_(cntlr.preop)) + control |= SPIC_ACS; + + if (!trans.bytesout && !trans.bytesin) { + /* SPI addresses are 24 bit only */ + if (with_address) + writel_(trans.offset & 0x00FFFFFF, cntlr.addr); + + /* + * This is a 'no data' command (like Write Enable), its + * bitesout size was 1, decremented to zero while executing + * spi_setup_opcode() above. Tell the chip to send the + * command. + */ + writew_(control, cntlr.control); + + /* wait for the result */ + status = ich_status_poll(SPIS_CDS | SPIS_FCERR, 1); + if (status == -1) + return -1; + + if (status & SPIS_FCERR) { + printk(BIOS_DEBUG, "ICH SPI: Command transaction error\n"); + return -1; + } + + return 0; + } + + /* + * Check if this is a write command atempting to transfer more bytes + * than the controller can handle. Iterations for writes are not + * supported here because each SPI write command needs to be preceded + * and followed by other SPI commands, and this sequence is controlled + * by the SPI chip driver. + */ + if (trans.bytesout > cntlr.databytes) { + printk(BIOS_DEBUG, "ICH SPI: Too much to write. Does your SPI chip driver use" + " CONTROLLER_PAGE_LIMIT?\n"); + return -1; + } + + /* + * Read or write up to databytes bytes at a time until everything has + * been sent. + */ + while (trans.bytesout || trans.bytesin) { + uint32_t data_length; + + /* SPI addresses are 24 bit only */ + writel_(trans.offset & 0x00FFFFFF, cntlr.addr); + + if (trans.bytesout) + data_length = min(trans.bytesout, cntlr.databytes); + else + data_length = min(trans.bytesin, cntlr.databytes); + + /* Program data into FDATA0 to N */ + if (trans.bytesout) { + write_reg(trans.out, cntlr.data, data_length); + spi_use_out(&trans, data_length); + if (with_address) + trans.offset += data_length; + } + + /* Add proper control fields' values */ + control &= ~((cntlr.databytes - 1) << 8); + control |= SPIC_DS; + control |= (data_length - 1) << 8; + + /* write it */ + writew_(control, cntlr.control); + + /* Wait for Cycle Done Status or Flash Cycle Error. */ + status = ich_status_poll(SPIS_CDS | SPIS_FCERR, 1); + if (status == -1) + return -1; + + if (status & SPIS_FCERR) { + printk(BIOS_DEBUG, "ICH SPI: Data transaction error\n"); + return -1; + } + + if (trans.bytesin) { + read_reg(cntlr.data, trans.in, data_length); + spi_use_in(&trans, data_length); + if (with_address) + trans.offset += data_length; + } + } + + /* Clear atomic preop now that xfer is done */ + writew_(0, cntlr.preop); + + return 0; +} diff --git a/src/soc/intel/baytrail/tsc_freq.c b/src/soc/intel/baytrail/tsc_freq.c new file mode 100644 index 0000000000..e0b2b7e908 --- /dev/null +++ b/src/soc/intel/baytrail/tsc_freq.c @@ -0,0 +1,32 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stdint.h> +#include <cpu/x86/msr.h> +#include <cpu/x86/tsc.h> +#include <baytrail/msr.h> + +#define BCLK 100 /* 100 MHz */ +unsigned long tsc_freq_mhz(void) +{ + msr_t platform_info; + + platform_info = rdmsr(MSR_PLATFORM_INFO); + return BCLK * ((platform_info.lo >> 8) & 0xff); +} |