[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] merge with xen-unstable.hg
# HG changeset patch # User Alex Williamson <alex.williamson@xxxxxx> # Date 1186951802 21600 # Node ID cd51fa91956be20dbd744d46117f7f989e08c334 # Parent 5b19839d036508fb2721a567798359dd11f68916 # Parent 7953164cebb6dfbbee08d06c91f424b63d87ed71 merge with xen-unstable.hg --- xen/arch/x86/genapic/es7000.c | 27 xen/arch/x86/genapic/es7000plat.c | 141 xen/include/asm-x86/mach-es7000/mach_mpparse.h | 45 extras/mini-os/Makefile | 4 extras/mini-os/arch/x86/Makefile | 3 extras/mini-os/arch/x86/mm.c | 6 tools/firmware/etherboot/README | 3 tools/firmware/etherboot/eb-rtl8139.zrom.h | 2051 +++++++++++++ tools/firmware/hvmloader/Makefile | 4 tools/libxc/xc_dom_x86.c | 2 tools/pygrub/src/LiloConf.py | 24 tools/python/xen/util/acmpolicy.py | 96 tools/python/xen/util/security.py | 40 tools/python/xen/xend/XendDomainInfo.py | 16 tools/python/xen/xend/server/DevController.py | 27 tools/python/xen/xend/server/blkif.py | 42 tools/python/xen/xm/activatepolicy.py | 27 tools/python/xen/xm/main.py | 5 tools/python/xen/xm/new.py | 3 tools/python/xen/xm/resources.py | 1 tools/python/xen/xm/setpolicy.py | 40 tools/security/Makefile | 11 tools/security/policies/default-security_policy.xml | 30 tools/security/policies/default-ul-security_policy.xml | 41 tools/security/xensec_ezpolicy | 7 tools/xenstat/libxenstat/src/xenstat.c | 2 tools/xenstore/utils.c | 7 tools/xenstore/utils.h | 2 tools/xenstore/xenstored_core.c | 16 unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c | 10 xen/acm/acm_chinesewall_hooks.c | 199 - xen/acm/acm_policy.c | 6 xen/acm/acm_simple_type_enforcement_hooks.c | 2 xen/arch/powerpc/multiboot2.c | 67 xen/arch/x86/domain_build.c | 8 xen/arch/x86/genapic/Makefile | 2 xen/arch/x86/genapic/bigsmp.c | 10 xen/arch/x86/genapic/probe.c | 2 xen/arch/x86/hvm/irq.c | 26 xen/arch/x86/hvm/svm/svm.c | 1 xen/arch/x86/hvm/vmx/vmx.c | 1 xen/arch/x86/mm/hap/guest_walk.c | 2 xen/arch/x86/mm/hap/hap.c | 56 xen/arch/x86/mm/p2m.c | 180 - xen/arch/x86/mm/paging.c | 86 xen/common/compat/grant_table.c | 4 xen/common/libelf/libelf-dominfo.c | 104 xen/common/libelf/libelf-loader.c | 132 xen/common/libelf/libelf-tools.c | 30 xen/common/page_alloc.c | 14 xen/include/asm-powerpc/boot.h | 46 xen/include/asm-x86/domain.h | 17 xen/include/asm-x86/hap.h | 2 xen/include/asm-x86/msr.h | 5 xen/include/public/libelf.h | 18 xen/include/xen/multiboot2.h | 99 firmware/etherboot/eb-rtl8139.zrom | 0 57 files changed, 3074 insertions(+), 778 deletions(-) diff -r 5b19839d0365 -r cd51fa91956b extras/mini-os/Makefile --- a/extras/mini-os/Makefile Sun Aug 12 12:19:13 2007 -0600 +++ b/extras/mini-os/Makefile Sun Aug 12 14:50:02 2007 -0600 @@ -123,3 +123,7 @@ tags: tags: $(all_sources) | xargs ctags +.PHONY: TAGS +TAGS: + $(all_sources) | xargs etags + diff -r 5b19839d0365 -r cd51fa91956b extras/mini-os/arch/x86/Makefile --- a/extras/mini-os/arch/x86/Makefile Sun Aug 12 12:19:13 2007 -0600 +++ b/extras/mini-os/arch/x86/Makefile Sun Aug 12 14:50:02 2007 -0600 @@ -2,6 +2,9 @@ # x86 architecture specific makefiles. # It's is used for x86_32, x86_32y and x86_64 # + +XEN_ROOT = ../../../.. +include $(XEN_ROOT)/Config.mk # include arch.mk has to be before mini-os.mk! diff -r 5b19839d0365 -r cd51fa91956b extras/mini-os/arch/x86/mm.c --- a/extras/mini-os/arch/x86/mm.c Sun Aug 12 12:19:13 2007 -0600 +++ b/extras/mini-os/arch/x86/mm.c Sun Aug 12 14:50:02 2007 -0600 @@ -405,9 +405,9 @@ void *map_frames(unsigned long *f, unsig void arch_init_p2m(unsigned long max_pfn) { -#define L1_P2M_SHIFT 10 -#define L2_P2M_SHIFT 20 -#define L3_P2M_SHIFT 30 +#define L1_P2M_SHIFT 9 +#define L2_P2M_SHIFT 18 +#define L3_P2M_SHIFT 27 #define L1_P2M_ENTRIES (1 << L1_P2M_SHIFT) #define L2_P2M_ENTRIES (1 << (L2_P2M_SHIFT - L1_P2M_SHIFT)) #define L3_P2M_ENTRIES (1 << (L3_P2M_SHIFT - L2_P2M_SHIFT)) diff -r 5b19839d0365 -r cd51fa91956b tools/firmware/etherboot/README --- a/tools/firmware/etherboot/README Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/firmware/etherboot/README Sun Aug 12 14:50:02 2007 -0600 @@ -6,3 +6,6 @@ Rom-o-matic.net will provide this image Rom-o-matic.net will provide this image at the following URL: http://rom-o-matic.net/5.4.3/build.php?version=5.4.3&F=ignore&nic=rtl8139%3Artl8139+--+%5B0x10ec%2C0x8139%5D&ofmt=Binary+ROM+Image%28.zrom%29&arch=i386&ASK_BOOT=-1&BOOT_FIRST=BOOT_NIC&BOOT_SECOND=BOOT_NOTHING&BOOT_THIRD=BOOT_NOTHING&BOOT_INDEX=0&STATIC_CLIENT_IP=&STATIC_SUBNET_MASK=&STATIC_SERVER_IP=&STATIC_GATEWAY_IP=&STATIC_BOOTFILE=&EXIT_ON_FILE_LOAD_ERROR=on&DHCP_CLIENT_ID=&DHCP_CLIENT_ID_LEN=&DHCP_CLIENT_ID_TYPE=&DHCP_USER_CLASS=&DHCP_USER_CLASS_LEN=&ALLOW_ONLY_ENCAPSULATED=on&DEFAULT_BOOTFILE=&CONGESTED=on&BACKOFF_LIMIT=7&TIMEOUT=180&TRY_FLOPPY_FIRST=0&EXIT_IF_NO_OFFER=on&TAGGED_IMAGE=on&ELF_IMAGE=on&PXE_IMAGE=on&DOWNLOAD_PROTO_TFTP=on&COMCONSOLE=0x3F8&CONSPEED=9600&COMPARM=0x03&PXE_EXPORT=on&CONFIG_PCI=on&CONFIG_ISA=on&BUILD_ID=&PCBIOS=on&PXE_DHCP_STRICT=on&A=Get+ROM + +and the mkhex script in tools/firmware/hvmloader will make the header +file from the downloaded image. diff -r 5b19839d0365 -r cd51fa91956b tools/firmware/etherboot/eb-rtl8139.zrom Binary file tools/firmware/etherboot/eb-rtl8139.zrom has changed diff -r 5b19839d0365 -r cd51fa91956b tools/firmware/etherboot/eb-rtl8139.zrom.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/firmware/etherboot/eb-rtl8139.zrom.h Sun Aug 12 14:50:02 2007 -0600 @@ -0,0 +1,2051 @@ +unsigned etherboot[] = { +0xeb40aa55, 0xbfe96c65, 0x68744500, 0x6f627265, +0x0000746f, 0x00540000, 0x0034001c, 0x52494350, +0x813910ec, 0x00180000, 0x00000200, 0x00010040, +0x00008000, 0x506e5024, 0x00000201, 0x00008a00, +0x00090000, 0x00027fd7, 0x00001400, 0x00cc0000, +0x00000000, 0x49444e55, 0x0000a016, 0x01000201, +0x10001000, 0x43500abe, 0x81265249, 0x5024007d, +0x81260c75, 0x506e027d, 0x20b80475, 0x1e50cb00, +0xd88ec031, 0x3d0304a1, 0x1d74e44c, 0xa30064a1, +0x66a10300, 0x0302a300, 0xa300afb8, 0xc88c0064, +0xb80066a3, 0x04a3e44c, 0xb8581f03, 0x31cb0020, +0xa3d88ec0, 0x02a10304, 0x0066a303, 0xa30300a1, +0x50660064, 0x0aeb026a, 0x06eb006a, 0x016a5066, +0xe78900eb, 0x1e505716, 0xb60f2e0e, 0xc1000206, +0x6a5009e0, 0x012be812, 0x8ec88c58, 0x4a068fd8, +0x48068f06, 0x50581f06, 0x6a0c6a66, 0x0060e900, +0x16e08953, 0x55506650, 0x468be589, 0x02468910, +0x8912468b, 0x685d0446, 0x5066104d, 0x0f2e0e50, +0x000206b6, 0x5009e0c1, 0xe6e8146a, 0x8f2e5800, +0x2e064a06, 0x0648068f, 0xc72e6658, 0x00038006, +0x66000000, 0x00020168, 0x50686600, 0xe8000178, +0xc4830010, 0x89175b12, 0x3ce85bdc, 0x0002ca01, +0x6650006a, 0xc0200f50, 0x586601a8, 0x832d7458, +0x0000247c, 0x44871175, 0x44890424, 0x00b80024, +0x87000500, 0x50042444, 0x0002b4b8, 0x74c08500, +0x011ee805, 0xe9580000, 0x000006c0, 0xe5895550, +0x00067e83, 0x8b501375, 0x46890646, 0x46c76602, +0x05000004, 0xeb5d5800, 0x1e585d02, 0xb8665066, +0x000002b4, 0x74c08566, 0x0f061e2f, 0x83a80fa0, +0x895508ec, 0x46010fe5, 0xe80e1602, 0xd1e803a8, +0xe8000000, 0x0000027e, 0x010f5858, 0x835d0256, +0xa90f08c4, 0x1f07a10f, 0x8cc03166, 0x66d88ec8, +0x6604e0c1, 0x00038005, 0x0ba36600, 0x1f586604, +0x500175e9, 0xbb061e60, 0xc38e0040, 0x131e8b26, +0x06e3c100, 0x0d7feb81, 0x2606ebc1, 0x00131e89, +0x8c06e3c1, 0x89d88ed0, 0x4c8b36e6, 0x78c98518, +0x47878d15, 0xbfc08e0c, 0xc1831000, 0x8ecf291a, +0xfcfc89d0, 0x6066a4f3, 0x1f0ec38e, 0x57afb966, +0x89660000, 0xcf8966ce, 0xf3fd4166, 0x66fca467, +0x66506661, 0xd889c031, 0x04e0c166, 0x80a32666, +0xc7266603, 0xf0038406, 0x660000d7, 0x87e58958, +0x5e89165e, 0x611f0714, 0xb80650cb, 0xc08e0040, +0x0013a126, 0x0506e0c1, 0xe8c10dbe, 0x13a32606, +0xc3580700, 0x0000e860, 0x815d0000, 0x0002baed, +0x56b9fd00, 0x8d000051, 0x06530db4, 0xbc8d0000, +0x00457c0d, 0xfca4f300, 0x457db58d, 0xbd8d0000, +0x00000650, 0xffffffbd, 0xa405ebff, 0x0775db01, +0xee831e8b, 0x72db11fc, 0x40c031f2, 0x0775db01, +0xee831e8b, 0x11db11fc, 0x75db01c0, 0x831e8b07, +0xdb11fcee, 0xc931e673, 0x7203e883, 0x08e0c10d, +0x8346068a, 0x5074fff0, 0xdb01c589, 0x1e8b0775, +0x11fcee83, 0x01c911db, 0x8b0775db, 0xfcee831e, +0xc911db11, 0x01411d75, 0x8b0775db, 0xfcee831e, +0xc911db11, 0x0775db01, 0xee831e8b, 0x73db11fc, +0x814141e6, 0xfff300fd, 0x01d183ff, 0x2f348d56, +0xe95ea4f3, 0xffffff74, 0x9090c361, 0x90909090, +0x00000000, 0x00000000, 0x0feb02eb, 0x89559c50, +0x87c88ce5, 0x46870646, 0x9c9d5d04, 0x0fa80f50, +0x161e06a0, 0x01dee80e, 0x550cec83, 0x24448b50, +0x00000d28, 0x44890006, 0x00e81024, 0x5d000000, +0x003fed81, 0x858b0000, 0x0000008b, 0x0000002d, +0x04dc0500, 0x44890000, 0x858d0824, 0x00000067, +0x0c244489, 0xe8c35d58, 0x0000007a, 0x071f1f1f, +0xa90fa10f, 0x5502c483, 0xf766e589, 0x00000646, +0x755d0004, 0x9dcb9d02, 0x000004ca, 0x53000000, +0xe8555756, 0x00000000, 0x98ed815d, 0x8b000000, +0x0001bb9d, 0xa3eb8100, 0x8f000002, 0x0002b783, +0xb3838f00, 0x8f000002, 0x0002af83, 0xab838f00, +0x8f000002, 0x0002a383, 0xa7a38900, 0x8b000002, +0x0001b3a5, 0xb7b5ff00, 0xe8000001, 0x00000006, +0xe904c483, 0x535500d9, 0x0000e850, 0x815d0000, +0x0000eeed, 0x9b858d00, 0x89000001, 0x00019d85, +0x44b70f00, 0xe0c11024, 0x24442904, 0xc1c3890c, +0x896604eb, 0x890e245c, 0x04ebc1c3, 0x9d8d5366, +0x0000018e, 0x5366c329, 0x00000868, 0x849d8d00, +0x29000001, 0x896653c3, 0x0001a585, 0x10e8c100, +0x01a78588, 0xa5880000, 0x000001aa, 0x2444b70f, +0x04e0c11e, 0xad858966, 0x89000001, 0x10ebc1c3, +0x01af9d88, 0xbd880000, 0x000001b2, 0x9b95010f, +0x66000001, 0x8e0010bb, 0x8ec429d3, 0x8ec38edb, +0xcbeb8ee3, 0x80c3200f, 0x220ffee3, 0xc166cbc3, +0xd08e04e8, 0x5b665866, 0x17cb5d66, 0x00000000, +0xff000000, 0x000000ff, 0xff00009b, 0x000000ff, +0x00000093, 0x00000000, 0x00000000, 0x30000000, +0x0042e801, 0x000000e8, 0xed815d00, 0x000001c9, +0x02bbbd8b, 0x8d8b0000, 0x000002bf, 0xf3fce689, +0xa7a58ba4, 0xff000002, 0x0002a3b5, 0xab9d8b00, +0x8b000002, 0x0002afb5, 0xb3bd8b00, 0x8b000002, +0x0002b7ad, 0x6afac300, 0x66556600, 0x89506653, +0xdb3166e5, 0xdb8e5b0e, 0x04e3c166, 0x46b70f66, +0xd801660e, 0x0c468966, 0x66dd8966, 0x00e8db31, +0x8d665b00, 0x66005287, 0x8966e801, 0x66005487, +0x003e878d, 0x66e80166, 0x006a8789, 0x16c03166, +0xe0c16658, 0xb70f6604, 0xc50166ec, 0x97010f66, +0x200f0052, 0x0f010cc0, 0xff66c022, 0x66006aaf, +0x8e0010b8, 0x8eec89d0, 0x8ec08ed8, 0x58e88ee0, +0x17c35d5b, 0x00000000, 0xff000000, 0x000000ff, +0xff00cf9f, 0x000000ff, 0x6f00cf93, 0x08000002, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x02000000, 0x0002bd01, 0x00000000, 0x90909090, +0x00008008, 0xfffffb7f, 0xc7835f58, 0x5b585e06, +0x89d68e59, 0x00f883fc, 0x53510375, 0x750207cb, +0xcd19cd02, 0xffeefdbb, 0x9090fb18, 0xf958fbfa, +0x069c15cd, 0xbb660eb4, 0xcd000001, 0x5cd20c10, +0xc0317f6e, 0xe43016cd, 0x9c01b407, 0xadff0258, +0xe083fffb, 0x12cdfa03, 0x31c931f9, 0x523158d2, +0xc4835048, 0x165b6606, 0xbff7ed07, 0x66e789fd, +0x39e820b8, 0x4150ba66, 0xb966534d, 0x66154514, +0xeddf7609, 0x5b9c50fe, 0x7c009a07, 0x1f0e5819, +0x099e8d5d, 0x55cb1500, 0xdfffb7dd, 0x1eff2e18, +0x729c002d, 0x81e5891c, 0x0f3c027e, 0x08009584, +0xedff7f01, 0x8000c637, 0x0788037e, 0x5d9d0101, +0x0002ca5d, 0xc1016600, 0x6ffffedb, 0x2966da02, +0x660377c3, 0xff85db31, 0x39661274, 0x132b76c2, +0xe6ed07c3, 0x13cb6ef6, 0x1eebd989, 0xd272ca1d, +0xde28f766, 0x39f7ee76, 0x07e376da, 0x1527ca01, +0xc11dd089, 0xfffe56c3, 0x5292eede, 0x2e4d9bbe, +0x54045c8b, 0xffa5e804, 0x8108c683, 0xc877abfe, +0xeaa4dede, 0x5ecb5a66, 0x660000c3, 0x97b7d33d, +0x850fffed, 0x2666ff72, 0x00047d83, 0x66506809, +0x458b0d51, 0xbbfedbe5, 0x084d0400, 0xe8ff3157, +0x0b5fffa4, 0xfd891089, 0x66dbb7fb, 0x42e9ee59, +0x91000c14, 0x06e8da87, 0xff33e905, 0x56f85757, +0xbf5033d8, 0xc166aa60, 0x5b3010e1, 0x36dfdd6d, +0xc14b6ced, 0xcb8910e9, 0x030a1359, 0xdb6fffe8, +0x115a90b7, 0x45582a0a, 0xe853c35f, 0xe95bffc8, +0x9b30fef7, 0x01f0d0bb, 0x09016866, 0x00686eeb, +0xfe500507, 0x789785ed, 0x80002be8, 0xa19ccb08, +0x9d137556, 0xad564eb8, 0x5317dbe1, 0x07004036, +0x003e1ed7, 0x0f9d38f8, 0xd93c2ff7, 0x42c83a2e, +0x66d55000, 0x4487c88c, 0x76030424, 0x7b05fbbb, +0x0f08ec83, 0x0f660801, 0x66a002a8, 0xfb76dd5a, +0x66164185, 0x128d600e, 0x0c038938, 0xfb6e4407, +0xe850dff6, 0xed815d39, 0x89060514, 0x058138ad, +0x7dbf168b, 0xbaa9bbfb, 0x8d217400, 0x09c470b5, +0xd470bd8d, 0x72f43905, 0x6f8e3904, 0x76fcfeec, +0xb9e6890d, 0xcf293248, 0xe8a4f36d, 0xb9b64fe3, +0x2d8bdfb7, 0x686c2936, 0x450b83e8, 0xed12203f, +0x0f7b6dfe, 0x04240ab7, 0x5026245c, 0x6088858d, +0x6dbffa50, 0x548fb6ff, 0x01d38e7c, 0x6158cbec, +0xa102a993, 0x1f660766, 0x6ffb9a14, 0x8b9d0ce4, +0x9cd42464, 0x832696f7, 0x6fb7fec5, 0x9dcb9dbc, +0x565507ca, 0x247c8b57, 0x983d2b10, 0xb6bfb7b8, +0xafa81061, 0x0480e868, 0x7cbae855, 0x336edd63, +0x0ee05b1f, 0x8904e2a3, 0x6dbfbe77, 0xb9237dfb, +0xa3f129b4, 0x2015732e, 0x7ffe00ea, 0x00a80bf7, +0x10b80008, 0x8ed88e1c, 0x8ed08ec0, 0x5fe88ee0, +0xe6c35d5e, 0x35dbbbf3, 0x3589e620, 0x283d0524, +0xddbf2c1d, 0xa358efdd, 0x34250b30, 0x70bb5905, +0x5f1d033e, 0x770f6853, 0x4328bacf, 0xb1e8e451, +0x0ca5890b, 0xcde9a528, 0x2f00bf75, 0x612974a5, +0x768de4cf, 0x4d7b7f00, 0xbcfc77b7, 0x6020a88f, +0x1b22ed0a, 0xa15bb7b1, 0x35b70234, 0xd0ff0b07, +0x91cf7e8b, 0x8b8b9191, 0x8b158b8b, 0x23bbc28d, +0xff041ca1, 0xda4c8be2, 0xb7ff1bd4, 0x5189680b, +0x89045902, 0x69890861, 0x5e71890c, 0xdcd0bd79, +0x006d148f, 0x431f1bc3, 0xbf4a8b08, 0x37b6dbfe, +0x0862095a, 0x728b0c6a, 0x147a8b10, 0x59b80519, +0xfd4f6b69, 0x9c284389, 0xb664bea0, 0x5401c2d8, +0x208dce0c, 0xb849687e, 0x1f30b8b9, 0x5d5821a2, +0x87bc3c9d, 0x3d282ef1, 0x50802b07, 0x2e4070f0, +0x89003881, 0xb1fa8285, 0x6fd23921, 0x29077095, +0x7ee68d4f, 0x530c281d, 0x9da95350, 0xdd4bed1d, +0x43892a4b, 0x1d0a0302, 0x04438810, 0xfdb84702, +0x63880cf2, 0x585b0f07, 0x560090c3, 0x6cbe72a1, +0x1b0aed6e, 0x0483000d, 0x6a24c629, 0x33736f00, +0xf2b801fd, 0xee2d0629, 0xdd056850, 0xe8efe37a, +0x189008bc, 0x0dbd3b80, 0x057003c6, 0x2f62b63c, +0x00b03cdc, 0x5b060e18, 0x51000c03, 0x1dbe9b63, +0x24046f21, 0x0602026a, 0xcd0c0650, 0x50eebdb3, +0x2d40f9b8, 0x70f24b52, 0xe816e589, 0x1a2d955a, +0x7d550119, 0x79dfd6df, 0x0374c085, 0x6dd5b60f, +0x49509b5a, 0x2f973488, 0x8f0203b6, 0x03060e46, +0xf636b0f9, 0x9229f98c, 0xf7b42f1c, 0x0e722f6b, +0x05212603, 0x672107e8, 0x2625b987, 0x16d861c0, +0x32ee0e23, 0xe30e233c, 0xf7063e4c, 0x872723d0, +0x1f298bcd, 0x2ece1616, 0x4db93ccc, 0xad1f2321, +0x1f46792f, 0x53565795, 0x5b4bee27, 0xc76614ee, +0x6c8dadc5, 0x570a6a04, 0x7778d7ca, 0x2ebb7497, +0xeb81562a, 0x6c05f23e, 0xe8ee7598, 0x24f3375d, +0x34750d83, 0x705eb6d8, 0xd2854c72, 0x3c835b75, +0x7f68eb0a, 0xf51664da, 0x06e0c106, 0xae018c07, +0x702ad7c8, 0xe87414c4, 0x1b060a15, 0xebd2f63b, +0x88006dea, 0x025a5669, 0xc9ec60d8, 0x55cceb92, +0x3b072094, 0xdba3ffee, 0x062b381d, 0x31617d7b, +0x6ae089ed, 0xe102501e, 0xb8c3bdaf, 0xd09f6450, +0x06c4e805, 0x607f78f7, 0x0282811b, 0x8b4175cd, +0xdde3a404, 0x75b14777, 0x4334b22a, 0xd5283c8d, +0x05b9fc0a, 0xffba5eb4, 0x5b14c5f7, 0x0b7da5f3, +0xa874db85, 0x89a106ba, 0xc156b7da, 0xdeada599, +0xf2eb3a14, 0x67eb102f, 0xd4e80c87, 0xabbbd601, +0xbbddfffe, 0xa3bd02f7, 0x0a71ba40, 0x4c68206a, +0x7bbba30b, 0x1044bedb, 0x6cff0f47, 0x0c48a35a, +0xcb737559, 0x6f6fbb67, 0x0af22705, 0x0854a399, +0xc70d44a1, 0xbc1ed7bd, 0x09f42005, 0x336e003c, +0x5009b20f, 0x0f581589, 0xbac1055c, 0x1901b191, +0x64091060, 0xd9360d23, 0x2268a3d8, 0x2c703c6c, +0xafb876a1, 0x082e59e1, 0xe3073916, 0xd7861b73, +0x83351763, 0x18744ebd, 0x9b181aff, 0xfc6bf033, +0x77e7721d, 0x868bebed, 0x95bf0b7f, 0xdbfa837f, +0x52779285, 0x7e24ff3d, 0x77e070ad, 0x8532be4b, +0xb52b941e, 0xfdafe0df, 0x23d3391b, 0x770c72ce, +0x0676c60e, 0x2d8d8b8b, 0x2c0db5bc, 0x3fc70729, +0xc3b1d835, 0x19d209da, 0x629d8b3d, 0xdb7f0db6, +0x228d08fb, 0x2e70870f, 0x0903f981, 0xe9bb1f7b, +0xce89640b, 0xdf894203, 0x5230bd13, 0x70deedbd, +0x04b7d739, 0x1d46820f, 0x0f6c0877, 0xdfec3c86, +0x8009cdc1, 0xc1891b77, 0xc8291577, 0x8c89da19, +0x6c7701db, 0x1de96289, 0x4c0e011e, 0xb03ec990, +0x85c781ba, 0x66580954, 0xe970ddd0, 0x13b8bff0, +0xab05d704, 0x1f12b86d, 0x6a83c39c, 0x2e400a0c, +0x08b221de, 0xe208af48, 0xe07b8376, 0xef4c35ff, +0x74e70d5b, 0x60380310, 0xa337f6f7, 0xfdd2e91e, +0x770f684d, 0x704d3e1e, 0x38ed93bc, 0x0949feeb, +0x2b8520a1, 0xc9b59b30, 0x1d4f4669, 0xf75837f5, +0x59379ae8, 0xda380062, 0xbafc5357, 0x109ffc77, +0x89d6ff05, 0x15c5e8c3, 0x0d8ba6ba, 0x48f16e2d, +0xebc1ca65, 0x91028b46, 0x16a178b6, 0x891f2af6, +0x62dff5c7, 0xcab6df6b, 0xc1d7bd3a, 0x071c0ae2, +0x7625b7cb, 0x896802d1, 0x04aa9cd7, 0xd0a15b5a, +0xf889c5e1, 0xf1516b63, 0x70edbbd6, 0x54689fe8, +0x89587524, 0x78935bd8, 0x56c08fbf, 0x03c28984, +0xe2815d15, 0xb102c575, 0x8c8d921f, 0xd66b801a, +0xcdc5a9a9, 0xf289bdac, 0x4e1d280d, 0x7b7ffbbc, +0x701474c9, 0x02c7044a, 0x45524621, 0x9a00c281, +0xec754966, 0x6e867b19, 0x5c1deb47, 0x04a36965, +0xe8b0df6e, 0x5a5863f8, 0x06fcb5e9, 0xedc75790, +0xb96f81ad, 0x115429ca, 0xe7c1faaa, 0xb77d1bb2, +0xfa81c06f, 0x81580280, 0x53754f3f, 0xed8bb603, +0x5f0457da, 0xc9044f1d, 0xc3c5ebc7, 0xd9846170, +0x53b0fe56, 0xa9998df8, 0x2dfdc184, 0x5900e381, +0xa13b29b9, 0xde1866a3, 0x0c0eafc1, 0x51b5bb1b, +0x6bf37268, 0x03768f00, 0xfba25795, 0x52561882, +0x599161e8, 0x25b929d8, 0x3529eefc, 0xeb5b0046, +0x5ab890e4, 0xbb65b856, 0x08fc4aed, 0x60158b46, +0xbac5b350, 0x74da6f6f, 0xff475b02, 0x41144c39, +0x587421b6, 0x097a05c7, 0xd5b87704, 0xd8eb5ae0, +0x403d3417, 0xd72d4cd1, 0xc774dcd5, 0x22960d39, +0xb1cdbdad, 0xe869df6b, 0x448a24c7, 0x6c2d82d1, +0xeb87b83a, 0x365621db, 0xb62d7b54, 0x1c0777be, +0x477a9639, 0x8b7008d8, 0xb854be9b, 0x37bbfbe3, +0x43900578, 0x938389cf, 0xbd828d07, 0xfa63ba2f, +0xb85d0183, 0xba0f2df2, 0xd1bbdffb, 0x9615be34, +0xa13a148d, 0xc83bc46c, 0x7c4beac1, 0x8b1a5ef8, +0x0d180409, 0x765689b6, 0x7ec103c7, 0x7605ab4f, +0xae8d0001, 0xb0f08d8b, 0xb63e7489, 0x2fc57cbb, +0x53b1a975, 0xb7926702, 0xc229760b, 0x9ec6fd3b, +0xdfa315bd, 0x8294ea81, 0x86038992, 0x509c8789, +0x2bdfeb00, 0xd32b696b, 0x109e4d81, 0xd5b139d0, +0xfc3d3a70, 0xdb001822, 0x7fe9dd1b, 0x89130480, +0x1c2d2bc5, 0x8bda1425, 0xc68ea96e, 0x7adc0c42, +0x1fa291fe, 0x0d9eef64, 0x8f01bf42, 0x84e8560c, +0x6ed9124c, 0xc601e3b1, 0x1cff20c4, 0x6c1730ff, +0x9d76ee15, 0xc31b2c3f, 0xf45e5502, 0x08b0be03, +0xc134b9ef, 0x4e1c4f01, 0x6a61731e, 0xe0304cfb, +0x80972a78, 0x85b5a903, 0x3a0d06ed, 0x07c3248e, +0x7ab84d45, 0x9e084377, 0x10438b14, 0xe08df891, +0x1cded6db, 0x9c979902, 0x1859c541, 0xc05c7a03, +0x033e5df4, 0x675e4d3d, 0x36ff5046, 0x756f847c, +0x4bebe857, 0x730320f8, 0x45e9d70c, 0x3960e857, +0x19744c29, 0xbf4e0873, 0x2d2befc2, 0x06e88933, +0x2a0ee9ec, 0x056f6df4, 0xe0eb0419, 0xd10d9690, +0x82eb7e03, 0xa110a32d, 0x08a5080a, 0xfce18303, +0x2ed1beb6, 0x4355045f, 0x5154cc29, 0xd56bae3e, +0x5f5b99dd, 0x3ef632e8, 0x830655d0, 0x89b89b08, +0xc3415dec, 0x1eb76990, 0x387e1dbc, 0x9024ac8b, +0xf7503658, 0xe0f873c5, 0x4c96e83a, 0x9c47c713, +0x4a274674, 0x18ef9a94, 0x4e601236, 0x898984bc, +0xc3830ffb, 0xe16fc818, 0x75118dd6, 0x108b2029, +0xa12ab9ab, 0x99e056a5, 0x1a8ff9f7, 0xfe10c206, +0x7d7709bb, 0x940e1810, 0xca114208, 0x5553f07c, +0xeb718ef5, 0x29920862, 0xe581ca0b, 0x3db5c06b, +0x087466bb, 0x140a7449, 0xb8956d38, 0x8f69f17b, +0x106a102c, 0xa119e1c3, 0xd02db00f, 0x2900d028, +0xc4ddcba1, 0x8b90d1fe, 0x020d68f3, 0xae07718a, +0xc10a19c5, 0xa0882f72, 0x714719bd, 0x1b0e8ba3, +0xc177ce3b, 0x0972edf5, 0x15154a72, 0xe685ed5e, +0xc308b985, 0xe30b0abe, 0xb8077768, 0xd939d5d1, +0x0b73288b, 0x5fa5ede1, 0x423204c1, 0x72d4c101, +0xc10b5bf5, 0x1931c35e, 0x1007a60a, 0xea4ed4a1, +0xb85bbde5, 0x6e85b75b, 0x840fd848, 0x50bd6a07, +0x942d7c88, 0xb3f0e783, 0xb5e370cb, 0xb9f72724, +0x01a13880, 0xaf94afde, 0x0e838d0f, 0xf7f63759, +0x77982db4, 0xa00505b8, 0xaf081304, 0x5d038607, +0x6e030ada, 0x6b04a77f, 0x8dc2b077, 0xf0e5566c, +0x1febf622, 0x9a28776d, 0x772a6804, 0x05499d29, +0xc6e57598, 0xc65899c6, 0x36880707, 0x38d7ec47, +0x862b666f, 0xb61c18bb, 0x1cec7418, 0x12bf071d, +0xeb2a076e, 0x02d8171e, 0xa166d622, 0x032e1661, +0xac43335c, 0x3e1a3b26, 0xd6da2e0d, 0x285314dd, +0x321b2003, 0x6da9182b, 0x2b127d9b, 0x0330155b, +0x91919a7b, 0x43c770ce, 0x0e080542, 0x91919106, +0x2c14160c, 0xdd236375, 0x1e1805ff, 0x40093670, +0x7609db63, 0x6342435a, 0x48054607, 0x7c83637c, +0x054e4a12, 0x1d521250, 0x5683475b, 0x49f558a9, +0x325d28dc, 0x0543e97c, 0x60738d6a, 0xba082f68, +0x2b584894, 0x14bbff52, 0x2c0846c6, 0x23a7e2bf, +0xd5ad6ec5, 0xf40a466c, 0x917546c4, 0x0320bace, +0x9b8bf714, 0x2bf7220f, 0x1603d739, 0x36fd2ddf, +0x0311fb01, 0x2671ae77, 0xf295fa01, 0x0fe38337, +0xdfb6cf0d, 0x23030c5c, 0x010646c7, 0x910e0402, +0x23221246, 0x18056323, 0xb7761c1a, 0x46e6c76f, +0x285e032a, 0x979e2c6a, 0x0946b1fd, 0x31e0c108, +0x8c80c740, 0x3ea7f40d, 0x98a42372, 0xcde81c04, +0x43318b47, 0x160a6377, 0xd0e85532, 0x91063503, +0x027a4736, 0x38652510, 0xede9b4d8, 0xf8431011, +0x0558c2d3, 0x6eee0981, 0x2d7a8585, 0x4e53deeb, +0xb46eebe8, 0x9c8ae3a0, 0xf71d1cf7, 0x20d9de5b, +0xc3bf3ee0, 0x813256de, 0xbb05ec52, 0x88ba830e, +0x760fd788, 0x98f9044b, 0x2168be6d, 0x188b068d, +0xf8ce54b2, 0x06815fe3, 0x89a4c24f, 0x840b5282, +0xe11dfe13, 0x58824d19, 0x8019840c, 0x1bee5e06, +0x82c7eebc, 0xf9601056, 0xb8da293a, 0x811b31b3, +0x65018df7, 0x83c71689, 0x8393ec69, 0x34ad64f0, +0x7581826f, 0xbd09b908, 0xc87a1fb3, 0x82b865c3, +0xf7380b0e, 0x70928bef, 0x89e81089, 0xd967349a, +0x090d75a8, 0xe835eb44, 0x136bd5e9, 0x1b1e754e, +0xc4132305, 0x04afa1b8, 0xb2c75859, 0x7c4c2d00, +0x833668e8, 0xf78843ba, 0xd9c13add, 0x8b8a5151, +0x601376b5, 0x6d4b0c35, 0xe0e201bd, 0x23720beb, +0xd81f68b4, 0x6a0ee2fa, 0x6fd01aae, 0x8d046780, +0x96600f01, 0x57130835, 0x5f233e2f, 0x5c505067, +0x115e70fa, 0xe8d8f08a, 0x43b01eb0, 0xfea75d38, +0xc283d70c, 0xdb388104, 0x06d318c0, 0x4276d0ae, +0x042d67a6, 0xde0fb8ef, 0x0842af8d, 0x1e045162, +0x4a2581a2, 0xe3e88ebe, 0x0a13b4d1, 0x0a246cd0, +0xac400e50, 0x21431a36, 0x6e25ca55, 0x5bc9cddb, +0x012b518b, 0x75065209, 0x70effba9, 0x1058f42b, +0xc4ebd109, 0x8b7ae068, 0x0bba5ad4, 0x25e8bbb1, +0x3e40043f, 0x097b2013, 0x7343efc0, 0x0a6a13ef, +0xb09e35e8, 0x4d42af0a, 0xb604c1c2, 0x0657a510, +0x77a957cc, 0x77be1cb7, 0x8b07771b, 0xdb121934, +0x7bc5b6ea, 0x7bc574ce, 0x05352218, 0x90b6ede9, +0x1825178d, 0x76012648, 0x00ede007, 0x0f3b91ed, +0xab6942c4, 0x01e8dc97, 0x5a14dd6a, 0xf1dae240, +0x823749fc, 0xc917d19f, 0x755a405f, 0xdc1f81bc, +0x08b302d3, 0x247b8df6, 0x3bc2d42b, 0xeb0024b2, +0x03068797, 0xc868377f, 0xbb535212, 0x594503c7, +0x1bddf2eb, 0xf0850222, 0x5c478b18, 0x0cef1c24, +0x683e0dbf, 0x41e9c578, 0xfce0b953, 0x8e0b4789, +0x8a68dbdb, 0x6c478855, 0xd33aa272, 0x0a145712, +0x5e68da17, 0xee52795d, 0x789fb7b3, 0xc87e4b42, +0xe4293d4f, 0xf0f0c094, 0xf0de02ff, 0x0636748d, +0x8d56ed31, 0x837b0745, 0xdea56786, 0x5750028c, +0x83280b45, 0x1ab4fafd, 0x7e03edfc, 0x684f48e0, +0xec58518d, 0xeef70cb7, 0x51fc2fc7, 0xa9ed6662, +0x7f7cbacf, 0x81ba0575, 0x7b1dc206, 0xb8520029, +0x89b80e86, 0xad770f06, 0x5c77ee5d, 0x6807895e, +0x427d6068, 0x736bdc09, 0x38fe81a6, 0xfebbf496, +0x50965ad6, 0x267504b4, 0x364e07c7, 0xe84147c7, +0x0c48efe7, 0x144c061b, 0x1c14501a, 0x77e0f022, +0x68f75aa4, 0x40fc45a0, 0x60c5fc5b, 0x95eb0fb0, +0x708bdd0c, 0x7fb61768, 0xbf283577, 0x50c6b506, +0x0bd1e7d3, 0xbcb02428, 0x80a97f89, 0x88b0ee99, +0xcb89edee, 0x8833788c, 0x80dddcd9, 0xf8d3895b, +0xfa950ff9, 0x7be0d1c0, 0x7b7eedab, 0xc9f64c8a, +0x0275e688, 0xbf30c888, 0xedb776f6, 0xc883158a, +0x794b088c, 0xbb113dcd, 0xfdddf610, 0x8cb05876, +0xb3e5d10a, 0x56c50901, 0x622df34b, 0xe97ffb40, +0x2a08f7b0, 0x04fe1bb3, 0x5390a46e, 0xb968587f, +0x53dc840e, 0x6db77144, 0x05efca1b, 0x06ff4f08, +0x0b5bef0c, 0x6b98a50f, 0xb4b004b6, 0x3e905bc2, +0x68ee37fa, 0xe0662e9a, 0x45e409a6, 0xe820f570, +0x2df558d9, 0xaefc03d6, 0x74107626, 0x5908e809, +0x460cea2f, 0x8bf685ad, 0x5c1a5c5f, 0x2fc48d8a, +0x31ffa171, 0xf98341ee, 0xd0f37e05, 0xda41b037, +0xdab78dee, 0x444ef76d, 0x897f00b8, 0x405675ca, +0xef03550a, 0x167bbb5b, 0x9588d422, 0x24ef3056, +0x42c2ee28, 0x251e6b17, 0xef534c23, 0x3eda059c, +0x6ecd3fc7, 0x2d3c6f58, 0x8f08c3e9, 0x5067d6ef, +0x76c48665, 0x874789e0, 0x86842425, 0xbe9da106, +0x6820a96e, 0x5a136be8, 0x21abf30f, 0xee6877ce, +0x1cf2040e, 0x86475d1a, 0xf310f46f, 0x315339fc, +0xfec46f2c, 0xd0f668c0, 0xdee80ec3, 0x3bfb6414, +0xddb46a77, 0x83c60def, 0x0c430047, 0xc883f376, +0xd0fc09ef, 0x2c8d069d, 0xc1818690, 0x86e29b1f, +0x55758dd6, 0xcb81efa3, 0x4e558d3d, 0x6d437b78, +0xecf7e8ef, 0x12708db5, 0x7da03e27, 0x829a3573, +0x0c256616, 0xded7c080, 0x33e0b82d, 0xf03920d6, +0x5249de72, 0xbfc2837e, 0x8a548d27, 0x7428b510, +0x01418d11, 0x896f8c42, 0x5818a3d9, 0x09c60566, +0x985bc037, 0xa855f1eb, 0xc17bfb14, 0xe37f6150, +0x836175f8, 0x8fdac4fc, 0x7496f886, 0x0e6e1655, +0x9d0b6dad, 0x6dae1ae8, 0x70fdc3b2, 0x1f27036a, +0xc68969ed, 0xef03f625, 0xee1d4ba0, 0xe93ea910, +0xdefe830d, 0xa25a1b0b, 0x76aaee70, 0xec8d1b1d, +0xbf4f7360, 0xe5751a29, 0x85d231c2, 0x4960da0d, +0x166587d0, 0x7eeeadc5, 0x003dfcf7, 0x644f4520, +0xfcbb6476, 0x53d32955, 0x374d42d3, 0x5658d8b9, +0x0b9ee860, 0x9fd27189, 0x3ad8c2a9, 0x5f036ec3, +0xdfd7f960, 0x1588dc06, 0x8c350322, 0x1707468d, +0x5e2562e6, 0x05f60aa3, 0xefb12fcd, 0xb910db6b, +0x51b6af38, 0xa3cfefc3, 0xebec06c7, 0x415c5185, +0xb7eb0c46, 0xd0fb406f, 0x93015cc6, 0x17081176, +0x00a8b71a, 0xbb528b75, 0xb636c237, 0xeeb11c17, +0x25062d0a, 0x49307fac, 0xad6fbb58, 0x0dc34c07, +0xf64d8053, 0xc60ccb90, 0x0b90b6e6, 0xed5326d9, +0xfe3190c7, 0xe8ef3868, 0x53db55fd, 0x1c9a50f2, +0x7a24562c, 0xbd77134c, 0xfa810183, 0xbeab6948, +0xeb0ed03d, 0x3d8d806d, 0x05c61310, 0x9e261c0d, +0x481a5bb5, 0x7722126f, 0x85dd523a, 0xb024a3ad, +0x0ec50350, 0xcf637823, 0xbb08fde0, 0xffc8c33c, +0x5ffa8954, 0x6d361588, 0x555b3ebd, 0xe8013f56, +0xe24b5c19, 0xb76dc4cb, 0x752e5041, 0x4ce819c2, +0x1f445c68, 0x91c3601e, 0x3d5630b8, 0xd52db62a, +0xc61753e6, 0xf00b4005, 0x175c1637, 0x1833dce8, +0x57a7e803, 0xf81b6fdd, 0xd6c81556, 0x5884665d, +0x1ee85975, 0x3a27e8dc, 0x17a9dd76, 0xe84f6e04, +0xdae880d1, 0xeedba471, 0x13ba2468, 0x3d0ee953, +0xa8fceaff, 0x6716836e, 0xdc0d5f18, 0xbbae0860, +0x5e1763c4, 0x00c3f275, 0x5b572aa9, 0x8ebc0c84, +0x0da1115b, 0x26b63703, 0x1017151c, 0x78e0e7c2, +0x1407c18f, 0xebc73be7, 0x064fa187, 0x25ba23bb, +0xff681cfc, 0x6ea37100, 0x4bc705a0, 0x3369e8fc, +0xafa9043d, 0x7e091a96, 0x0f71be0c, 0xdb20e21b, +0x440802fb, 0xdbc1d58f, 0x6c36ed74, 0x7e035cb7, +0x27e48417, 0xff54eca1, 0x43a15b50, 0x17cba72c, +0xc0fd2728, 0x74f0f7ee, 0x613b6826, 0xf43d796d, +0xb5bb0220, 0x0b376cff, 0x0e097f58, 0x31d47ef8, +0xe1d0ebdb, 0xf6360895, 0xf4eb030c, 0xc3c5a209, +0xe022a21f, 0x0fe85d74, 0x5bd87e23, 0x893cf4c2, +0x2818ab75, 0x5d0db91c, 0x51d900b8, 0x38f0a3a2, +0x9b30fd82, 0xc77c4e5d, 0x8025e405, 0x2fe8125d, +0x300939a8, 0xb6348d33, 0x265436d9, 0xcfe74303, +0xe7f876b2, 0xe604b5b6, 0x7c04008b, 0x77fb8111, +0xb9d72110, 0xe92857dd, 0xe4280430, 0xc1890e7d, +0x53575f62, 0xba04f873, 0xb7f12c5b, 0x5916158b, +0x5bf17a83, 0xc6ffa107, 0x66e884ec, 0x1939eb22, +0x7420423b, 0x3bb76814, 0x124487d8, 0xe9ad3a5a, +0x02bb78ce, 0x66c1df09, 0xa204c5cf, 0xf0b1e9b6, +0xd4c15e83, 0x208edb00, 0x6a37716a, 0x82abd76f, +0x5e23a158, 0xc200a6d6, 0x907bfdf7, 0x0c8d4362, +0xe1a1359d, 0x6a162cd3, 0xe62e8174, 0x079efd0f, +0xb61ac70f, 0x89b6035a, 0x62158924, 0xb0b84f7e, +0xc46a0a84, 0x039e0975, 0x7a6c0a74, 0x08fe52ad, +0xf8397fc1, 0x0b52c533, 0xa2d4eca9, 0xdf8b1ce4, +0x770a8bec, 0x89d440c7, 0xb6fbf448, 0x1c705b0b, +0xbb75200c, 0x8400e94b, 0xd40de2bb, 0x1378e802, +0xfdf1e9f6, 0xf70b1833, 0x5cfd8a70, 0xd5ed35a4, +0xc2664777, 0x0f970832, 0x3d25c588, 0x5d001f76, +0xc709bbe9, 0xb1c28105, 0xe80ef88d, 0x328b4293, +0x8d8cf685, 0x72dcdee1, 0x8e0fb21c, 0x618c076a, +0xeadd830e, 0x0001b12d, 0xb48d5652, 0x0fd09e86, +0x99788321, 0x05872724, 0x85ce4bbe, 0x03018c39, +0x3bdbf004, 0x2c68eed2, 0x2abb59bf, 0x4b1ee913, +0x01baeb86, 0x53d7ae47, 0x4aa1bdf3, 0x7b719fc4, +0x3c89b10c, 0xbcd88a24, 0x31078a50, 0xc2fe25ba, +0x10d284f6, 0x0c743a3c, 0x0b3e5446, 0x81b76d04, +0xbbf4755f, 0xfbd37548, 0x1e730550, 0x7a463a7f, +0x4ac0338a, 0x30020c70, 0x0db3c6df, 0x721d08c8, +0x5a354be2, 0xdcd03e68, 0x5306568f, 0xda8a0938, +0x89d81bfa, 0x699d01d6, 0xa9764a4f, 0x6ad33f75, +0x27656803, 0xfbf8698d, 0x02d04e3a, 0x881e0a34, +0x5ffdda01, 0x894e94aa, 0x78802414, 0x1a742f03, +0x5250a88d, 0x5827a9fd, 0x081e1223, 0x3a388025, +0x737a705e, 0x2a2fec4b, 0x89752f09, 0xd78b6ceb, +0x4c69d26d, 0x37357ea3, 0x5d02eb79, 0xcc40bd11, +0xb61b0453, 0x81f13e06, 0x8d0ab240, 0x9f7152c6, +0xebc0fe9f, 0xe2faa34e, 0x21e890b6, 0xddfb0887, +0x9b086ac6, 0x6a00902e, 0xe0b3ebfe, 0xe4c1b167, +0x8005ffff, 0x833e653d, 0x5f14301b, 0x1f74288e, +0xe0563ccd, 0x1652d454, 0x551d860f, 0xac36fde1, +0x8112ee81, 0x8ed705c7, 0xdfb6b97d, 0x298e88c7, +0xb6852460, 0xedc860ad, 0x0b64a005, 0x230f68ff, +0x25801eee, 0x89105c29, 0xbe822bea, 0x1ed59c2a, +0x4a11a35a, 0xd0708db4, 0x8af284f6, 0xaa16ddbd, +0x88d5192b, 0x893803e8, 0x8dba370d, 0x48a24ff7, +0x3c53d63c, 0x09c8840b, 0x077cb1f7, 0x5434ac02, +0xefbb201a, 0x68a3775f, 0x8a04a106, 0x13a3240c, +0x58a34403, 0x7ab90b7a, 0x15f7696f, 0x73685b42, +0x57ee1455, 0x02904e3c, 0x7a57ec3d, 0x4ec9842a, +0xb55b7490, 0x4b764a84, 0xcec41734, 0x74ce7c51, +0xfdbb1a37, 0x39179995, 0xf3aa76f3, 0x6c575d53, +0xaab044b7, 0xde76398f, 0x3a232029, 0x1d0177e2, +0xefdf011a, 0x144b97ef, 0x5ec7c072, 0x50825dec, +0x5fc3843f, 0xffffe361, 0x72377603, 0x701caed1, +0x036d47e9, 0x8ebc1b1d, 0xe941a3c5, 0x14b4a53b, +0x87bf8847, 0x92444806, 0x7b507958, 0xb76f4090, +0x52d115b1, 0x0515507e, 0x7da082ec, 0xf34844a0, +0xc733e23e, 0x24dd13e2, 0xc02e7c20, 0x05f61935, +0xbd4bbec1, 0xbba89045, 0x08dbd0fe, 0x06dd7b6e, +0x68057095, 0x21483c49, 0x60a9f740, 0x53e95442, +0x0644901a, 0x37ca3058, 0xd230ce14, 0xa2128876, +0xd04b1810, 0x182a3407, 0x1b29ca2e, 0x084466d0, +0x662907cd, 0x34efe1e2, 0x32e80557, 0x602807ec, +0x8a5df886, 0x35628068, 0x4851b64e, 0x60a6bd1b, +0x508d0310, 0xd358a515, 0x0375ba2d, 0x4dc753c2, +0xaa608efe, 0x2a367134, 0xdc3d95e2, 0xad7285ad, +0x141a4c0f, 0x3502bb07, 0x7710eef5, 0x7614050f, +0xad546609, 0x581b6868, 0x5231c31d, 0x2974ed03, +0xdf89c8ee, 0xfb398303, 0x35882b54, 0x01dc9103, +0x6a170683, 0x7308acff, 0x8d138b29, 0x8d468042, +0x6db1d64b, 0x348d0ce3, 0xc0e74386, 0x77302c0e, +0xff6f8e6f, 0xfa830b77, 0x083e7408, 0xd772eb89, +0x29743218, 0x4cea7783, 0x74403cb7, 0x28579e23, +0xa3fb079d, 0x4e245dd8, 0xd1787520, 0x3433e967, +0x6f77ac0b, 0x68080624, 0xe8511a8e, 0x2d0836f2, +0xae3b40b4, 0x6cf83d66, 0xda16d540, 0x147704da, +0x03e89e83, 0x5d5ddb78, 0x75d312a2, 0xeb04aa93, +0xfd03188d, 0x75ab7d86, 0x2b068bb6, 0x66e5bc74, +0x7c0ec3a3, 0x3589f2f8, 0xc866e90b, 0x7fd21d37, +0x0e57654b, 0x4fe92434, 0x6e1ccdff, 0x95c03e81, +0xc48631a6, 0x88466b32, 0x93e5ff8d, 0x4bd0ad00, +0xfeab946f, 0x74c809d8, 0xf8c82534, 0x2d03d339, +0x0e72fa6d, 0xd8c4870f, 0xbc2cc139, 0xc21ec183, +0xc7253d5f, 0x053ed405, 0x8bba09d0, 0xd8a1dc06, +0x6b442308, 0x77fb2934, 0x772d4a14, 0x343ef229, +0x576cfa01, 0xc0a1e0b0, 0xd48ee4ad, 0x720b2d35, +0x2efc11a9, 0x683aadc0, 0xa36f1268, 0xac610713, +0xed0cd62a, 0x62ed312b, 0x7e70ab62, 0x69adf1df, +0xa12e740a, 0xcc15aec8, 0xcb80bc7b, 0x83cce376, +0xd0e6c0be, 0x61a007ff, 0x624517b0, 0x3920c683, +0xa1e67cc5, 0x78574437, 0x9beb3e3d, 0xe6c1c677, +0xf75ff7da, 0xcc868b05, 0x897aa32c, 0xc48e8bf8, +0x09efdb69, 0x9435f23f, 0xc1291358, 0x1189d319, +0x84f742d9, 0x25d0861d, 0xa534f23b, 0xe9820f78, +0x3245ba82, 0x0c0025c8, 0x584c2fb7, 0x5e493499, +0xdf11c601, 0x3b350116, 0x4f7e7c2d, 0xac0f3d11, +0x2c3d8958, 0x6e5336d6, 0x4afba1ff, 0xfe3f8238, +0x1537a2da, 0xd9985e34, 0xee9215b7, 0x290719ba, +0xdf1031e6, 0xc22f750c, 0x0aba1a90, 0x2f5b7e09, +0x13cc0d14, 0x40269cdd, 0xaf6da555, 0x9a4e0957, +0xe06a6c66, 0x34a4f5e8, 0x0b0a696b, 0x6943ee43, +0x056e4deb, 0x52e82691, 0xa21da216, 0x2a65de00, +0xd6211680, 0x2c710e60, 0x36e77f09, 0x4b29d05a, +0x788dd539, 0x5c1a7d34, 0x2db04270, 0x5a494576, +0xc15a15e8, 0x817fa5c3, 0x68f08f5c, 0xaf5a99a8, +0xb6ff5c4d, 0x30bb2cd4, 0xf1f2a984, 0x4d6f09e2, +0x214b63bc, 0xbe03941a, 0x1beb2921, 0xa9b4381a, +0x43735c5f, 0xc1968d47, 0x84be15d0, 0xf991f887, +0xbbe29514, 0x1366c271, 0x77a8d339, 0x261c8290, +0x876e087b, 0x07148290, 0xb41674de, 0xb7ddc6c5, +0x8b22808b, 0x40423937, 0x048ff4b0, 0x890ddbf7, +0xe9e9202d, 0x3ce9d30a, 0x73d48d7c, 0x405b923f, +0x43d48b6e, 0xa6f210a0, 0x7037ddba, 0x86418abf, +0x261020a1, 0x7ab75206, 0x988dee89, 0xc7502600, +0xeb50501e, 0x8a7000a1, 0xf4c0623b, 0x592b566c, +0xedd2215e, 0x32f3179a, 0x8336ffd8, 0xe8190a0d, +0x035b462d, 0xe29a8cf4, 0xec41bf5e, 0xe2c3e894, +0xa3603c53, 0x61344abc, 0xe0715a23, 0x2d50e81f, +0x6ce67460, 0x0cec91b7, 0x90046a0d, 0xb5b80729, +0xa0c0456a, 0x236deeeb, 0x68c5fa1e, 0x2fd77b96, +0x014258fa, 0xd984a814, 0xd4281027, 0xe95bf683, +0xd2077f07, 0xc740bad6, 0x03c0246c, 0x46e0ce2c, +0x013ee893, 0xc28152c4, 0x2781f82b, 0x7612d51f, +0x7ddc050f, 0xc5d7056a, 0x3461bb59, 0x54ece0be, +0x34181ced, 0x3bb1d818, 0x105c24b9, 0x000c0b10, +0x9f020809, 0x257304ae, 0x65035d51, 0x6db8a024, +0x750a8855, 0x134a815b, 0x3d0c3014, 0x19aadbb1, +0x3b573e15, 0xc5137691, 0x5e76eb6d, 0x2b092b2c, +0x89e00807, 0xace046e9, 0x140c1b2a, 0xe0345531, +0x80480be1, 0x034deaa0, 0xe3468bb8, 0x888be2c7, +0x00964edb, 0x32988bb3, 0x025bb8b0, 0x70da4eee, +0x2e857228, 0x6dd6b6c8, 0x9d7b639d, 0x71fdfa13, +0xc6137209, 0xf5db8468, 0x2bff6709, 0xdf6ca910, +0x0ce42bd2, 0xc0396878, 0x03a38168, 0xe91420f6, +0x7d001a76, 0x7b1e27f6, 0x9c68e3b8, 0x5a215f77, +0xc42d56e9, 0x650f0dc2, 0x8d1c6353, 0x01cabd45, +0x67bc22b7, 0x262575e8, 0x4bc7390b, 0x7b75384f, +0x140d4514, 0x66143e47, 0x3b837741, 0x28ee7235, +0xf7ef0059, 0xcc3595fb, 0x8bc48603, 0x9613d296, +0x6ed7e2c8, 0xcf778901, 0xd3891c10, 0x11df847f, +0x249e031c, 0xc37d818d, 0xc2390676, 0x307b4273, +0xc20f6903, 0xc7090c76, 0x2ff606ee, 0x34a1c215, +0x0a1e24be, 0x8df4153b, 0x1ccd1dfe, 0xd8f7e889, +0x21ff1521, 0x41fd57c2, 0x3e225ca1, 0x843bd329, +0x69ef409a, 0x61cc5a82, 0xb43b2ad7, 0x2e2b8d04, +0x27f1e1bf, 0x5970073b, 0x330f4974, 0x05ad7501, +0x68f0e1e0, 0x714d11ac, 0xe1a3995e, 0x582080b3, +0x2d2924b8, 0x430781d4, 0x018a3534, 0x0aad2360, +0xb3e84b1f, 0x0d91e82d, 0xaf5b8169, 0x39db982c, +0xde283bd6, 0xe00ded12, 0x77c3615d, 0xd20c0f57, +0xa1de9605, 0x9709d510, 0x3b5aa930, 0x203f8370, +0x0155c529, 0x2015d8c7, 0xb1101dbe, 0x3f3bc0af, +0x208520c7, 0x0c5a6300, 0xa04653b8, 0x61476a95, +0x06396f64, 0x21c7dfed, 0x3d8bad72, 0x73ef3907, +0xc0de182d, 0x05de17ed, 0xeac1071a, 0xfac93109, +0x8d8dce19, 0xdbc78a5d, 0x898a8938, 0xad6ca39b, +0x2930fbd5, 0xc9f8052d, 0x2587286a, 0x2c0982d9, +0xf836e87e, 0x40cdb82e, 0xa0a35e11, 0xa519ca5a, +0x638787c7, 0x2c321ab2, 0xfe36922c, 0x1163bab3, +0x3e815457, 0x1b031336, 0xf3d2f174, 0xaf0b6add, +0xcc682bd0, 0xc46f0928, 0x8159619f, 0x10ba9b28, +0xbfe03a22, 0xf418fb40, 0xb9c0a107, 0x106a372c, +0x41116856, 0xadd68e03, 0x454a9181, 0x379c2289, +0x25422d48, 0x360e86be, 0x5207908e, 0x7e87b570, +0xc750a3df, 0xfbef315c, 0xf7a2208a, 0x598fbc06, +0x44a18674, 0x250f5ae8, 0xf52f5cf0, 0xe51d2996, +0xf73c8d96, 0xdfbb003f, 0x3d7d5b78, 0x07864274, +0x8a5a72c4, 0x16216f47, 0x3ac003a9, 0xc7db47c2, +0x1b7df021, 0xea5659a1, 0x3a2d03f7, 0x81553076, +0x02ea53e2, 0xdeacfc67, 0x0182550b, 0x013a2805, +0x7c221cba, 0xad23138b, 0x0374d8e9, 0x60500847, +0x142b5aad, 0x06fe0704, 0xfd881ecf, 0xe80477ff, +0x3c60ae40, 0x5c5f037d, 0x08abd3ec, 0x078ac441, +0xdb73b2b7, 0x97c5a46c, 0x1b5597b5, 0xb98f48b4, +0x46e9a527, 0x96e9b10e, 0xbc0ba7fe, 0x57573a60, +0x332061d8, 0x245e9577, 0x9242715e, 0xfe32dc34, +0x366e0035, 0x0d3dbac0, 0x464c457f, 0x026e0fbb, +0xa1d6ebd6, 0x004c2595, 0x0be0f63d, 0xd00001b4, +0x90a166eb, 0x2d487ebf, 0x77a981f1, 0x6794b1dc, +0xdb7016d9, 0x08a838d3, 0xc72320d0, 0x44eeeef8, +0x740320cc, 0x75060506, 0x30d268b5, 0xe47d18df, +0xd7782a24, 0xf4a2180b, 0xaac4693b, 0xd0af06ac, +0x12e8e5e9, 0x5e78de70, 0xb51d493b, 0x97abb00c, +0x76a20a61, 0xefa6bc6d, 0x36dd6815, 0xd7b85be1, +0x241d3753, 0x5295d47e, 0xdfc801e7, 0x85df2c72, +0x72c38b6f, 0x1403a33d, 0x3d860151, 0x7d180ec1, +0x05fb005d, 0x986b09c4, 0x3074c488, 0xf7354247, +0xfdb03df1, 0x04407a83, 0x15c6f235, 0x358e4218, +0xf5f82080, 0xedd07c0f, 0x4dcb64d9, 0xc12b2d43, +0xd84344e2, 0x788291d6, 0x405eed40, 0x5f64d1d3, +0x05c7d642, 0xb0cc90c8, 0x5794a303, 0x3709d86b, +0xb8786a1e, 0x3fd025ea, 0xb22f4075, 0xf0687ecc, +0x300c2b0f, 0xd0240c89, 0x405a8ba6, 0x350bc5bd, +0x03f56a0d, 0x55536d6a, 0x30ee0151, 0xf8f8a86e, +0xdb101847, 0x22337208, 0x4ef3b213, 0xdbd28459, +0xe94b823d, 0x8852fdec, 0xbb3743c4, 0x7e8609dd, +0x5268f87d, 0xe8243651, 0xb11b1076, 0xe5b635a6, +0xf83d8bfe, 0xa48c307d, 0xbecb0448, 0xecfd0b01, +0xfe261342, 0xe1c1d189, 0x1184b952, 0x98a3460e, +0x0cc71000, 0x9c6fa54b, 0x89a68dda, 0x6ec721f7, +0x6d037dd8, 0x1e8675d5, 0x2b63565d, 0x681b8451, +0x72f9a1ee, 0x894c76c0, 0x1acb46c1, 0xc72b1a2d, +0x842967de, 0x267dc21f, 0xcc8801bf, 0x0e01b5a9, +0x01dae8f1, 0x8dce640d, 0x5dc56b15, 0x2799e86a, +0xdfb8fc8f, 0xeea56d1d, 0x8c998d49, 0xfa40433f, +0x4aa9fbe0, 0x8103b0cc, 0xc6e844d4, 0xfa36dfd3, +0x395018c5, 0x3e860ff0, 0x0579c6b5, 0x71235f98, +0x01fd6cb1, 0x5d8c0a26, 0xd87c4cd2, 0x5d770e02, +0x0ec1f729, 0xda263163, 0x9b3235ba, 0xfa120108, +0x742dbf21, 0x400b76c0, 0xa0105f10, 0xd93941d0, +0xa3805a72, 0xf70fd7b7, 0x7f215bd0, 0x28605d73, +0x79f7cb45, 0xe8bae73d, 0x1ad2f7f6, 0xd28e0274, +0x68213320, 0x423d58ef, 0x1a062d05, 0x28d8afe6, +0xf08eecc4, 0x5eb78265, 0x08474c83, 0xd1a4b952, +0x1c2eff6f, 0xc96933ad, 0x29da890a, 0xd269b2ca, +0xa1b5684e, 0x690b9cb7, 0x2934b3f6, 0xa8d15cf2, +0x2d1857f7, 0x06a10978, 0xddfa967a, 0xab82472e, +0x0ea37f58, 0xd419eaeb, 0x097ba057, 0xc4440596, +0x0660bfc4, 0x0159d2a0, 0x26991a5d, 0xf4b42c48, +0x7501e4a4, 0xa05b1727, 0xf674fa01, 0xf886eee8, +0xd0041ad3, 0x047806e9, 0xe2b31574, 0x859dfdba, +0xc09e1b7f, 0xcac9d368, 0xebed17ff, 0x77da90e6, +0x2abae829, 0x12ef6b5e, 0x0c1de84f, 0x7eef4274, +0x0773d839, 0xeb31a2e8, 0xe3c35bf0, 0xdb92dcf5, +0xeff3edf1, 0xed0e8958, 0x744d1dc6, 0x6a7bcbf7, +0x7453e82e, 0x43f5eb58, 0x0dc42808, 0x84118af4, +0x1074ebd2, 0x2f16318a, 0xe26e2370, 0x38df1ddf, +0x52b774c2, 0x138afb9d, 0x100a018a, 0xd202cd0f, +0xb6dd8c29, 0x41c36f0b, 0x742f432e, 0x4cde2be4, +0xe893c08c, 0x5127d2eb, 0x168b71ab, 0x242c4597, +0x1c8bc5ba, 0x1c239b5e, 0x50b59d4e, 0x4c142a16, +0xe80795ae, 0x07ffe25e, 0x77c6b9b5, 0x02ff8337, +0x428d0b7f, 0xfedf8501, 0x3a80efef, 0xc127752e, +0x094708e6, 0x7e0315ce, 0xc0f089c1, 0xed0a1ba3, +0x0410c8c1, 0x891cdb81, 0x81a11d30, 0xe829b548, +0xc1f65dea, 0x94aa7ba2, 0xc50a29ef, 0x4c15ad0c, +0x05741d7c, 0x50a18e2e, 0xff77d83e, 0x77093cd0, +0x0ac36b14, 0x5c8d41b5, 0x7613d002, 0x0df685ec, +0x18370a05, 0x9dea0e89, 0x4b06de4b, 0xbcd28ef5, +0x64e41258, 0x841988ec, 0xe0edcb77, 0x0775d301, +0xe80de002, 0x6b5bd2c1, 0x047ea978, 0xdeeb60e4, +0x24016895, 0xbf14fe54, 0xbe85c1e1, 0xb054bdc1, +0xe864e6d1, 0xdda1b8b4, 0xe6df087e, 0x4753ae26, +0x0afb836f, 0xb71384e1, 0x09bcd00d, 0x6cc3137e, +0x6aad889b, 0xeb42de50, 0x31bb77ec, 0x881377e8, +0x4ad34fe8, 0x9a681875, 0x74db0680, 0x360d36ef, +0xdc85bb12, 0x2debae1b, 0x200ae8f5, 0xac55627f, +0x8edfebc5, 0xa93a9329, 0x0c9f0ac3, 0xa90dc68f, +0x815f5d0f, 0xc581bcc6, 0xf0530a4e, 0x8de8f142, +0x28a36b78, 0x00795e94, 0x8d83fff0, 0xc2d19cdc, +0x60bb3f02, 0x83260051, 0xf7c3dc51, 0xec6d8f53, +0xdd2dc381, 0x56882b74, 0xc1670555, 0xcc85d7ee, +0x9404e068, 0xebe50423, 0x0daee807, 0x1acf9484, +0xa93ec7e8, 0x1521c833, 0xcf839315, 0x9eefdb21, +0x97778b3d, 0x86545817, 0x220553e8, 0x8b8b6e30, +0xc7bf6e17, 0x9303cab4, 0xc3c1831a, 0xf08ef0e1, +0xa9b75539, 0x0573caf7, 0x828c25ba, 0x16f72753, +0x83cadd6a, 0x0211750a, 0xf16ba990, 0x740af896, +0x3e07ea7b, 0x6bdc2826, 0x6d2cca19, 0xff47ab1e, +0x2083f8dd, 0xd689c50b, 0xdd9e17e9, 0x0c5237fa, +0x8de2a818, 0xc8d470b0, 0x9eb2c22a, 0xab10a32b, +0x73087f09, 0xbcdca13e, 0x13abda5f, 0x123fc216, +0xac503dbf, 0x042d59c3, 0xe6abc7fa, 0x1ef5674a, +0x3826a35e, 0x12bc38a3, 0x63d597a7, 0xbe34a33b, +0xacfe68a8, 0x81812e28, 0x5daf4c46, 0xa2a7dbe6, +0xd9ebf26d, 0xa7757d58, 0x3cfc5808, 0x8b9e23c2, +0x03cb1a8f, 0x73cb399f, 0x47785ff6, 0x76ce39f0, +0x0e739e12, 0x3877cd39, 0xa9e8de39, 0x75cf1b81, +0xc82943f1, 0x06001089, 0x055e0dba, 0x3b155faa, +0xde0b9dfc, 0x1f558202, 0xc0890d1f, 0x9d4a2276, +0xa673375d, 0x101bad1a, 0x35d9c889, 0x758df5f1, +0xeb42c083, 0xa5a145be, 0x1b7c4529, 0xfc48ed2e, +0xc40d3b85, 0x2c5df673, 0x3102ade2, 0x8d1889d0, +0x06754841, 0x280dd8f0, 0xb9e5ebd0, 0x28478114, +0xf843854e, 0xb06ff129, 0x217fb1a7, 0xf8598dc1, +0x06411d3b, 0x2d435fa2, 0xd8e696e5, 0x4106fc30, +0xd19858c8, 0x1533352b, 0x40b69003, 0x223b7034, +0x83405c24, 0x8d4bb106, 0x03f09ffc, 0x0e071336, +0xc25d80c6, 0xb52fa65d, 0x03343c18, 0x8b27b72d, +0x44b6bb42, 0x8939fc89, 0xc27824f8, 0x939acd03, +0xd1300db1, 0x46afc1c1, 0x47335a26, 0x32a00489, +0xd3598941, 0x0b5a991f, 0xb6ec084b, 0x882c5b2a, +0x4d5a5905, 0xdd7dec1c, 0x0314160c, 0x8c1f0453, +0x9a604a82, 0x08bac022, 0x0e62b545, 0xa69ce496, +0x8039a21d, 0x594edb01, 0x3b904dc3, 0xbc14d753, +0x7e20684d, 0x21042003, 0x02bbbae2, 0x8314da34, +0x11791968, 0x09e3ba45, 0xff6a16ec, 0xa6cd74f3, +0xe64035ff, 0x2a2ebe66, 0x0f281c2a, 0xc8348210, +0x18329e6d, 0x2a1e5ea1, 0x350b7cda, 0x3dc20d21, +0x58590116, 0x2cefd475, 0xef114563, 0xf3582d1f, +0xefc0a675, 0x155027fd, 0x733befd9, 0x54a12737, +0x155c3d26, 0x07d12bc3, 0xfe5a8237, 0xac2dfb36, +0x5def754b, 0x42745807, 0x172608b8, 0x655fdba7, +0x689d1dbe, 0x3d972b69, 0x991ca3eb, 0x7f6818ef, +0xcb9d8610, 0xb1730f05, 0xca7c78e8, 0xe144cca9, +0xbf7ffd5d, 0x109f6653, 0xff740806, 0xa0e12ddc, +0xa47a463f, 0xf17629cd, 0x4b007752, 0x8174a07a, +0xa97e147b, 0x75f886ed, 0x0d046ae3, 0x6c1c438d, +0xa20dec08, 0x232e3681, 0x22decacd, 0x1643f1d1, +0x0aba6b50, 0x21c31e59, 0x44135200, 0xadd76402, +0x1deb46d3, 0x3c7d240c, 0x5d10558b, 0x582edae6, +0x342414e8, 0xb020b646, 0x0e356b04, 0x05230837, +0xf729324e, 0x0e9f6d88, 0x8bf6c203, 0xb019b827, +0x5f036341, 0xfefd6446, 0x6da8e8ae, 0xc904f37a, +0xb016f5f5, 0x6bdbfef4, 0xbc800ac6, 0x06847303, +0xf47dd17c, 0xed7e05f6, 0x28740604, 0x681c3c11, +0xec1d13d9, 0xfdcd9301, 0x7b96b8bc, 0x24d2341f, +0x012566de, 0xaedefd06, 0x23c955ab, 0x04090406, +0xdbc4d610, 0xd8010436, 0x14253b68, 0xf672cc3f, +0x0403efc7, 0x26104068, 0x6160b6de, 0x3a8d8f89, +0xd6d9e316, 0xc701a245, 0x24045004, 0x082c7b1e, +0x03bbbfcd, 0x681c6a16, 0xe1a84664, 0x75649982, +0xb4b03f7a, 0x1fdff80e, 0x00139e91, 0x50383300, +0x3a386856, 0x8faeab05, 0x28340cbe, 0x430333c8, +0x0362d8dc, 0x0f14fbbc, 0xb5eb9f8f, 0x60a58c79, +0xb3d27a01, 0x1f495aec, 0xe9d073f6, 0x68ee0d31, +0x10e95c00, 0xc28c10ff, 0xe0b58b35, 0x577f68ae, +0x45408d70, 0x43c60388, 0xb90f5891, 0x98b712a2, +0x42bd8895, 0x9c43a1ed, 0xda310610, 0xa045b785, +0x10062a15, 0x22fb723f, 0x433d452e, 0x0506be04, +0x14c2ed03, 0xf5e3301a, 0x0526a6bb, 0x585b0c37, +0x516c4911, 0x09171573, 0x18a31136, 0x5bdc4329, +0x88bbf578, 0x704917b7, 0xbe147e8d, 0x6c35eb83, +0x8014b1bf, 0x024782df, 0x476d5f03, 0xca5c45cd, +0x0b23c05c, 0x68230b77, 0xc36689ef, 0xc33e1506, +0xd18deef8, 0x68a61c87, 0x6a565318, 0xbfc7bd3c, +0x0450dd06, 0xb028a366, 0x236bf1d5, 0x9341b08a, +0x3fc3e6e3, 0x14563839, 0xc40c6823, 0x28a9ea0e, +0x4610c037, 0x88bb63c6, 0x25744214, 0x3910404f, +0x1106a37b, 0x97c8ec29, 0x1a9c40ed, 0x13602ac0, +0x1ef54f8e, 0x892ec1b9, 0x715796e3, 0x453418e4, +0x1e059800, 0x85a21e00, 0x59393f11, 0xd586c989, +0xd603915d, 0xb457adc8, 0x39ff0997, 0xe0ba193f, +0xc1a868c3, 0x5e021bf1, 0x711e081f, 0x7132aec8, +0xf108c7d1, 0x1c93529f, 0xd42e2239, 0x0c18f708, +0x7eedae1c, 0x9d86e6f6, 0xd8500642, 0xc56832ff, +0x401e6849, 0x18ddda26, 0xdf1b8ce8, 0xf7ab1fc0, +0xca688975, 0x91b40d93, 0x03611b00, 0xb82305b9, +0x5241ae0a, 0xb759b75f, 0xc90c1758, 0x15108a51, +0xd82bddb6, 0xba5fe34e, 0xa8bc08b7, 0x0722d9ee, +0x7c5b02c0, 0xfa7d6b1d, 0x74ed30f7, 0x75171c0b, +0x19e28c0a, 0xeb5f0eb1, 0x361145c7, 0x3a1780d6, +0xc2504a48, 0xddbea267, 0x36b83dc0, 0xb72be80b, +0x39eb61f4, 0x24d57f23, 0x7a09a194, 0x428aea0d, +0x3c7a7444, 0x39b1b7ec, 0x29fa3f6d, 0x50770ca3, +0x2f64ba4b, 0xff66f834, 0xb844d005, 0x774833b3, +0xd1b4b607, 0x4837b63d, 0x82ae14e9, 0xaf638358, +0x09120cd8, 0x950b325d, 0xe1d63db4, 0x5840e9c2, +0x0e4b8dde, 0x9a11417c, 0x8d12ddc3, 0xaa08f670, +0xa584127d, 0x1c0b6c62, 0x1505de0d, 0x96d58d2d, +0x0512ca46, 0x84efb88f, 0x08db382d, 0xa8a1644a, +0x6c759b00, 0x1e926a2f, 0xe6369ba3, 0xf3c64218, +0xc5ad20c2, 0x1fc9d436, 0x8b66dee9, 0xaeb6ecee, +0x1e7cf211, 0x397d424c, 0xb18960d0, 0xc00d5f5d, +0x028dd616, 0x5c0b85c2, 0x6f8e7725, 0x8d73892e, +0xb76d2b47, 0x2fa3d9da, 0x427b0ec0, 0xf70805fe, +0x0bad40b1, 0xbc9c2003, 0xe1141685, 0xb10c5b04, +0x88b5925c, 0x190d0fad, 0x06f8114d, 0xb850445c, +0x43586dc3, 0x01d5562c, 0xf112c6d0, 0xbb92a5b6, +0x241ff677, 0xbd1a3428, 0x19428fed, 0xe1eeb09c, +0x5850ad52, 0x7672782b, 0x014352ae, 0x0efe505e, +0xbb78477e, 0x47148a35, 0x0f9c0641, 0xcb0eed8e, +0x682dec7e, 0xae2098dc, 0x1f1942f1, 0xa4171d6f, +0xaa18e1e8, 0x14479b21, 0xa5cc0842, 0x081b861b, +0x8ee91c58, 0x0eea3728, 0x3b4fa91e, 0x59e8f2e1, +0xba210975, 0x80e82e6f, 0x967e077a, 0x8901508d, +0xe115380e, 0xf22d36ae, 0xd272d0c6, 0x85412c53, +0xc51de560, 0xde8f0767, 0xb7a3ec12, 0xb7ef9b12, +0x67c9c3f0, 0x6a2e538d, 0xf2688352, 0x40fba05d, +0xcb9f57b8, 0xb8721be9, 0x7dc20474, 0x093be9a4, +0x5f3b8011, 0xd5b6f0a0, 0x743c0415, 0x8d4d6116, +0x93801804, 0x78d5c258, 0xeb1fa702, 0xb0c0563c, +0xe6096ac0, 0x6f5e417a, 0xe8b3123a, 0x0c061ae1, +0x01a3ce75, 0x2dabb40a, 0xe29b1cd6, 0xc9a0d0a3, +0x817feda6, 0x46efa65e, 0x8d21156d, 0x11762a5f, +0xb8add208, 0x874ad1d0, 0x0774ee3b, 0xddbdd04e, +0x7f804d15, 0xa1f3632a, 0xb8391b24, 0x922f0b85, +0x7b66e975, 0x2a990fab, 0xbb6c9a37, 0x756c961d, +0x723e473e, 0x0d46e06e, 0xc0c7ab46, 0x005746f3, +0x71cec30b, 0xd7d88b55, 0xdbb0fb85, 0x211443ef, +0xbf64a314, 0xa958044e, 0x068e6c88, 0x781a1a21, +0x5854cf21, 0x6b3a1053, 0xb40e28de, 0xa3b53333, +0xc5a38218, 0x0baacc07, 0x1858fbc1, 0x7f717fa8, +0x117e7aba, 0x00debf3d, 0xd3136e6f, 0x0706057e, +0x2705c068, 0xfa30039a, 0xaaf73fa1, 0xe8f8210b, +0x0000199c, 0xe2a4c3f7, 0x2f513108, 0x469e04e9, +0xa377dc88, 0x0462885e, 0x150fd0cc, 0x6888ec7e, +0x6c43a580, 0x47e801b2, 0x52c59ba2, 0x57f16b19, +0x9b66e8b3, 0x19849680, 0xe921f007, 0xd7dd590a, +0x1a87ee1f, 0x10328d01, 0xf733205a, 0xae9fc7b2, +0x3807e89a, 0xb3c5935d, 0xb99687d7, 0xd118f160, +0x07ebb018, 0x326ce9dc, 0x50ec81ad, 0x8d48a0e0, +0x03dbb7d7, 0xa00420a2, 0x3b210944, 0x7df60d1b, +0x0c4505df, 0x09461622, 0xd9471623, 0x0cf5e860, +0x59737724, 0xe9fe0240, 0x2c771176, 0x2e2d0401, +0xc3e0e806, 0xa3e27c3e, 0xc6934627, 0x6de8f568, +0xe048682f, 0x1beb7783, 0x167aba2c, 0xa3a83032, +0x4cdb9d0f, 0x41e012d1, 0xdb143e2b, 0x677dcfbe, +0x2df45984, 0x75db5413, 0x19bc0013, 0x8d193c19, +0xed942494, 0x6e7fddd3, 0x680d6a24, 0xe852311c, +0xc6ed0202, 0x14fe8425, 0x8b1889b9, 0xfffff8b0, +0x1f86c20f, 0x17dfc531, 0x65c44094, 0x6da0cf09, +0x06ca28c6, 0x1aff7f53, 0x17c0ec45, 0x6ae0418a, +0x8b446a43, 0x7546e29f, 0x20b633e8, 0xd41b6a55, +0xa86abfb7, 0xc2f9e833, 0x3c8d4511, 0x5fe24703, +0x05c6ef6f, 0x7e5a7a0c, 0xa4b6531f, 0xee6c4f41, +0x037f4676, 0xd2e8fb26, 0xdb46c329, 0xf7ae883b, +0x3d83e17f, 0xf5e19576, 0xc0ef303d, 0x02f4742e, +0xf1011ce3, 0xeef6dd20, 0x05c7de89, 0x8e31c71b, +0xe068616a, 0x37b64efb, 0x131d3072, 0x93411031, +0x13c660ed, 0x18160809, 0x91c221c2, 0x2616f22f, +0x50d2230d, 0x13de4dc2, 0x9da223da, 0x18745330, +0xf744eefc, 0x086c0712, 0x09af89e4, 0x3bada608, +0x2e9ee02c, 0x712c3c43, 0xb3e85fd0, 0x7405cb09, +0x7e13ef34, 0xc1dde8b1, 0x6c7f1ba1, 0xd1f112e9, +0xf7acf029, 0xc0b132f1, 0x83c8c04b, 0x6b6513fd, +0xc171e8c5, 0xc4817683, 0x0b72cb81, 0x5e3cbb09, +0x2e1269c4, 0x22255098, 0x40552bb4, 0x636a09a8, +0x5feeceae, 0xc1dbe874, 0x315f73ee, 0x33741cff, +0x20b3ffc7, 0xc08ef5bd, 0xbce2e7a6, 0x07e08383, +0x6be6e110, 0x47472ce0, 0x759eb60f, 0x82dfebdd, +0x3944c383, 0xa1cf7cc7, 0x03408e72, 0xa382433c, +0x81c33b19, 0x318f4be8, 0x3815b9c2, 0x6a0c5f28, +0x73766949, 0x3b0dbc4f, 0x685ea166, 0x1b7c0ec7, +0xe877068c, 0x71492692, 0x6b85686d, 0x49c28068, +0xa100ca91, 0x1ac8429a, 0x5eaa59eb, 0xc10673ab, +0x0d685c0a, 0x27083904, 0xe82fbfa9, 0x3b62f5c6, +0x0a817308, 0x012a4e43, 0xc846f723, 0x8c6e83fe, +0xfffedbe9, 0x0192beff, 0xe80f0de3, 0x45d314f3, +0x3d766068, 0xde19a1da, 0xf6b914df, 0x231c786e, +0xadf99d20, 0x0918921c, 0x59a35978, 0xab8f8120, +0x80e46707, 0x979265c5, 0x9f0f1000, 0xa6499068, +0x83346810, 0x6f8a31c3, 0xe9581844, 0x1403fe02, +0xecd48a94, 0xafab1010, 0xc2c0505c, 0x76bcf785, +0x00d4a009, 0x09b2c58a, 0xcf561366, 0x83c7a3b8, +0x0a3014e8, 0xdb31806a, 0x2ce87d51, 0x58c626ea, +0x62352d1f, 0x5022d97b, 0xb712cc54, 0x19c24ed4, +0xec94c684, 0x0e230e49, 0xc0230064, 0x066368d1, +0xbf0d0530, 0x157000fb, 0x3a34ac41, 0x2e27a50c, +0xf05f1984, 0xf8915f8f, 0xfb803a0f, 0x83cf0d66, +0xe0760df9, 0x341e3741, 0x423ae0ca, 0x92e1410c, +0x3bfc2cab, 0xf833c509, 0xb9b16edf, 0x737506fd, +0x6e762121, 0x8a0e5a8d, 0x8ddb0e52, 0xbb9c97e8, +0xb1770a3c, 0x290fe065, 0x9a2a5502, 0x7e52d572, +0xeadb7467, 0x5e590a77, 0xf7669875, 0x85a03f7e, +0xc78b6279, 0x66bcf55c, 0x808bdc3d, 0x6e25bf16, +0x14ea83fd, 0x8b66a148, 0xff70010c, 0x0174edd9, +0x8122784b, 0xf739d129, 0x3235830f, 0x0a5df8a9, +0x121529cd, 0xef1bf631, 0x4c7f80c1, 0x11097b80, +0x3de44675, 0x063d358b, 0x83ec1eed, 0x8b5922c6, +0x86f70456, 0xdc5f9fd6, 0xeb2bc5c2, 0xfd1587d1, +0xdb91b683, 0x74727e8d, 0xfe7d9610, 0xabca8d5a, +0xf70270ad, 0x8bc5281c, 0xec654628, 0xd1540338, +0xda9dbb61, 0xea4da31f, 0xd4290806, 0xf45c24d1, +0x860f6fd9, 0xfef9e5c7, 0x2f406f18, 0xc2562677, +0xe80e6f8d, 0xb683128d, 0x81e4a11d, 0x3401697d, +0x2299b798, 0x0ef357d2, 0x16da7790, 0x1a69a95b, +0x391c2602, 0xae8fc0b1, 0x776c5ded, 0xb6567216, +0xe52fc061, 0x4ee85720, 0x41a5a012, 0xc60416dd, +0x2bb1244b, 0xf0550f31, 0x81019b70, 0xdfeec12a, +0x8ac1c71c, 0x68122f43, 0x00366743, 0x67f2851f, +0x31743624, 0xdab617b1, 0xfd7f7c03, 0xbde9fc3c, +0x6c7c7dc0, 0x890cc4a7, 0xeea09506, 0xd6352d2d, +0x05c72ddb, 0xe5c65c16, 0xc2f40ae8, 0x292c3218, +0x831ee80f, 0x01f82f80, 0xfdd58648, 0x9c2a9567, +0x9228f136, 0x68560d8a, 0x37e37faf, 0xca38dfe1, +0xc2171473, 0x6644c06b, 0xb8149839, 0x74edf02d, +0x72134205, 0x06fa80ec, 0x1d74081e, 0x6ece9c6e, +0x50034623, 0xc6d70522, 0xaebd1165, 0xc37b204e, +0x134aa22d, 0x41832380, 0x8fcceb89, 0x6053359e, +0x1c363668, 0x5c00908d, 0xb97abeae, 0xa6bc649c, +0x8a6a3ffe, 0x3c3c0246, 0x3cb00276, 0x588b5050, +0xf90b8810, 0x81fc10e4, 0x4349c52e, 0x6f4833b3, +0x53448368, 0xf3490af4, 0x29715f64, 0xa2279318, +0x20607403, 0x0a74832e, 0x03220152, 0x75fb4360, +0x13048006, 0x1f76b882, 0xd0f81aea, 0x0dc468b2, +0xc618c805, 0xd045ad80, 0x487cc1dd, 0x4c6b66bf, +0x558e067a, 0xd80135a1, 0xbdc35fe8, 0xd39a06a3, +0x85c5892c, 0x636bb5ff, 0x01ceeb2c, 0xee397e3f, +0xdff16b76, 0x7358071e, 0x841e8a0b, 0x0f5c75db, +0xc286f572, 0x893bdaf4, 0x3505382d, 0xaa1d2e1a, +0xc73f0827, 0x1b5001bb, 0x979b6a8d, 0x0bfb02c0, +0xd6c0e858, 0x18f20ce9, 0x6e047310, 0x04a225ba, +0x22a17fd7, 0x454b8a68, 0x7b3fd093, 0xfffff0c9, +0x6eef51c3, 0xfbdddb60, 0x1038dcff, 0x60d0158a, +0x2875d284, 0x06c18dae, 0x0996d179, 0x0cb0f81b, +0x020fd8c8, 0xe2031215, 0x7ed99d20, 0x0812fbbe, +0x483e1ed0, 0x353146d9, 0x9d4a0121, 0xc45eca61, +0x4a017e84, 0xa015640c, 0x7ddb1efb, 0xdb6d3c10, +0x840d2200, 0x102b1dc0, 0x668db7ef, 0x6102fe9d, +0x4974810c, 0x54a33d80, 0x386d876d, 0x1605410e, +0x97e0fe96, 0x46b6afba, 0x023074ec, 0xff26c8e9, +0xc35405c6, 0x0125fbc0, 0x7b16c515, 0xecdd8282, +0x16fffe08, 0x0d14cecd, 0x8e82c7b7, 0xa3231abc, +0xa6ebcc68, 0xbbb50bb7, 0x809a7c49, 0x947605a2, +0xf524c3a9, 0x007560ec, 0x9a0eba39, 0xeeec2e79, +0x0969ae6e, 0x0500ff6f, 0x8337b02c, 0x0317c980, +0x0003902e, 0xeed17acb, 0x8d1e79dd, 0xfb2cd1fd, +0xe73b7408, 0xc236d1fb, 0x097a1885, 0x5ef90f08, +0xc436c202, 0x183c1f02, 0x2e15fb39, 0xb7d4e82f, +0x6200b95a, 0x185c50c4, 0xb7eca646, 0x72581503, +0x2916e9ed, 0x733b4204, 0xec834990, 0x8200e1fe, +0x20dd8917, 0xd6e90804, 0xc0589343, 0xd956a116, +0xbf70140d, 0xfebeef70, 0xe99c2e3f, 0xe1760db0, +0xe905a1bb, 0x01edfea7, 0x389d86eb, 0x5c3d837f, +0x0cc52a54, 0x89b8ff20, 0xc49237f5, 0x083589ef, +0xa3fd4b5f, 0x170d83d1, 0xe2520370, 0x04c3a1e9, +0x65ada883, 0xb955ebb7, 0x089d24fc, 0x10f0061d, +0x94b02c98, 0x1c18d8bc, 0xd6970986, 0xdc014c36, +0x8d9c1c9f, 0xbae9332c, 0xb410b20a, 0xae0ca0da, +0xfc54c807, 0x00807453, 0xe3d3c320, 0x8a5456e8, +0xbaf7bf42, 0x071c71c7, 0x295164a0, 0x8f9f6ab6, +0x41880f12, 0x51c363f0, 0x80c8b951, 0xf785aa51, +0x8128ce85, 0xc70de0f9, 0x6d775430, 0x02138c13, +0x13732c12, 0xdfd98501, 0x7401393e, 0x18c18365, +0x166c5c24, 0x7fcb725b, 0x26134020, 0x9901aa44, +0xed6e5812, 0xd21df442, 0x75cb3908, 0x39e2b0e6, +0xb82dc1a8, 0xdc742ce9, 0xeac1209f, 0xbe14410a, +0xbebe2d45, 0x4f89cd75, 0x0847092a, 0x81bdcdeb, +0x932bc19b, 0x21718b8f, 0x867df339, 0xa0d737fe, +0x94a3731c, 0x74d02c3b, 0xf239420a, 0x0bdcdf7c, +0x8d6ede16, 0xd06c14a4, 0x81317502, 0x7eeab776, +0xeb4704d0, 0x8a14cbb9, 0x236e757f, 0x428b3c07, +0x83f66a1c, 0xc0574b51, 0x800675bf, 0x0bbd1b7a, +0x39d51e8e, 0x70f61a10, 0xb6826ade, 0x09580319, +0x6af04923, 0x89b58e0e, 0xddf8e325, 0x4c471ece, +0xf753aac7, 0xc6353fd7, 0x19031a42, 0xf5177e39, +0xdd897247, 0xfe815773, 0x77f7896f, 0xd8c7f742, +0x781d2d7d, 0x7c127301, 0xb01e797a, 0xf020dd50, +0x5515561c, 0x6bc5c8f1, 0x9b914a72, 0x16a2dfea, +0x24759637, 0xfeff8147, 0x7b77e800, 0xbe765492, +0xfd81a345, 0x00a97258, 0xfd10500c, 0x4745cd09, +0x0684b5d1, 0x78ac4c72, 0x9208955d, 0x9bc24eb0, +0x4c770589, 0xdb4664ff, 0x232248e2, 0x50897771, +0x11560836, 0x371be85c, 0xdffb7728, 0x7883de7e, +0x899174bf, 0x195088fa, 0x1a04ea89, 0xce6d5566, +0x50de06c5, 0x58069b04, 0xee93bd30, 0x306a0f18, +0xf72856a8, 0xbbba0fdd, 0x0a890a78, 0x2e144289, +0x361f146a, 0x2735b517, 0x0c185c34, 0x516374b7, +0x53202e80, 0x2d00161f, 0x89209f7e, 0xfce2eac2, +0xf75aa68e, 0x0b74152e, 0x6d10c386, 0xe06f749b, +0x24fb014b, 0x0fabcd7e, 0x483d6a53, 0xbab75844, +0x5019a80d, 0x5a261a04, 0xf6c39a1d, 0xc4408602, +0x368a1075, 0x9219c10f, 0x4288fdcd, 0xd0e9e918, +0xd62a3c2f, 0xeb3c2215, 0x82b9bbd5, 0x70fb1217, +0x7ee97a3f, 0x18505389, 0x751c0cc6, 0x2941d7cd, +0x30433743, 0x128d6624, 0x1295d76e, 0x2e05caa8, +0x17665872, 0xc21f11b6, 0xb04bc126, 0x43e5d603, +0xb2180dc8, 0xa216a71c, 0x1f01f015, 0x9a2053e4, +0x1fc26c1a, 0x0be5974c, 0x86a83856, 0xaf043f87, +0xcd675a14, 0x65262ae7, 0x46e74626, 0x48d54d8b, +0x05a91f74, 0x68fc0018, 0x1c670c21, 0x5bbc4bca, +0x866e026a, 0x06e015d6, 0x6f6009e0, 0xe344a9ff, +0x89dcebf0, 0x0453dae0, 0xd00b4c52, 0x279a3208, +0x60fdd7a9, 0x9c3f51cb, 0x0629f860, 0x41822573, +0x008ff6a5, 0x58d53b6c, 0x8f685c8f, 0x0ac0b656, +0x425706cc, 0x136614c1, 0x89f8e4f6, 0x152c2ae0, +0xf6072608, 0x80cb1666, 0x49415c36, 0x6afc3a0d, +0xa9efb36b, 0x21daf7c2, 0xbf11cad0, 0x0f0ebaec, +0x069cf486, 0x211c7514, 0x6016c072, 0x1b8f4706, +0x828c69a3, 0x10e0f8db, 0x1913084a, 0xb74418ba, +0x0bed0537, 0x2f80c98e, 0xe0cd3121, 0xa1840ba0, +0x7e21087f, 0x0628b109, 0xdea5db35, 0xb01c87f0, +0x1af03034, 0xbe3f3c04, 0x4146d12f, 0x75044d17, +0x826b839d, 0x887bbf1a, 0x49db5c17, 0x50c06c06, +0x3c03bd32, 0xc88fd2f7, 0x391d77b5, 0x062e74f8, +0x59c6f52a, 0x2c40b01b, 0x832dc14e, 0xf6b5d886, +0x65a774ec, 0x1c5ea377, 0x8134e929, 0xc43d8f8f, +0x68e91492, 0x30bba7ff, 0xd681155b, 0xff0f3657, +0x836826e3, 0xcc611d73, 0x91e810c3, 0x51ccf815, +0x725a1af0, 0xed4f41e6, 0xe8a319a8, 0x4a105768, +0x7a9626f7, 0x1614fb1f, 0x78745a24, 0x50d12f09, +0x7b760153, 0x100a0a1f, 0xefc246c7, 0xa42a688e, +0x41fa8113, 0x7f9743c7, 0x733f816c, 0x10468b4c, +0x2dd23539, 0x2046ff03, 0x300872ff, 0x6a716df4, +0x06e2fb4e, 0xe754adea, 0x0c701534, 0xa5c06356, +0x75f300da, 0xdf5cd90a, 0x5d50b6a2, 0x7eed9e81, +0x410e3b54, 0x4c897ddb, 0xf8eb5c31, 0x50eed8b3, +0x24466085, 0xe6c87667, 0x6fa50220, 0x29bec8df, +0xe81843e4, 0x906f038a, 0x0616bd6a, 0xdf591feb, +0x728ace58, 0xe3620db6, 0xf07b17b5, 0x741c056a, +0xd5e8c6c9, 0xce586d20, 0x76e901c1, 0x042d02c0, +0x0904465f, 0x6ce8fe06, 0x0878061b, 0x43c914e6, +0xc80c531c, 0x7ae1c2f3, 0x9020a0de, 0x5397c2ec, +0x388d76ff, 0x30aedc1b, 0x826912d8, 0x03f2c679, +0xbbb2e2a4, 0x001c8819, 0xa754fd00, 0x106c75d5, +0x54c9408f, 0x355b58d8, 0x3e6003d4, 0x8a3f5c41, +0xf47c1682, 0x74253c06, 0xcee254cd, 0x86bbdd76, +0x89420288, 0x75214606, 0x150717e2, 0xcd27831c, +0x29548bc6, 0x8ba0c414, 0x2040b1a9, 0xa377edad, +0xddc59758, 0x4c46ccb4, 0x87b4d883, 0x0ab8046d, +0x46f67609, 0x6e8f656e, 0xd70d849f, 0x53297b1b, +0x1c73b6ec, 0x233cbeb5, 0xcceafbe9, 0xc2b90ef6, +0x6c228e18, 0x33db7d40, 0x07683cb0, 0xed161162, +0x1abea607, 0x783c20c8, 0x64fae912, 0xdbcb1208, +0x4000bccf, 0x21047e74, 0x5a634974, 0xf53a1e89, +0x8c471788, 0x83a3319e, 0xc8175e15, 0xe2ede017, +0xb9aadd43, 0xe7721c6f, 0xc41d13e9, 0x6f00e8b2, +0xc4de3440, 0x89eaeb58, 0x88041e0e, 0xadbb4407, +0x0abeebdb, 0x06e2188b, 0x88d3390d, 0x35bf7e1b, +0xeb4f0372, 0x82682aab, 0x3de857bf, 0x47ed1b70, +0xc7010c22, 0x371c1c3b, 0x02eb2fe1, 0x78ff2077, +0xc438104d, 0xc3fa5748, 0x3271ca73, 0x9b770a88, +0x31e322db, 0xc03b268d, 0xebe0721f, 0xb9ffadc1, +0x852c38a8, 0x893778d2, 0xb9995efb, 0x4c85ee45, +0xc2832d40, 0xada3c630, 0xa0a1a2de, 0x994f8dea, +0xf6fd03d9, 0xad286c6e, 0x8801c311, 0xd9c14913, +0x14e9f177, 0xdd6f556e, 0x2d07c613, 0xc1eb47de, +0x5620e2f0, 0x4ae562d0, 0xb53dbd9e, 0x74e15b0b, +0x301d2f0c, 0xd3475832, 0xbe8fc002, 0x880fc94c, +0xd3d85ae4, 0xb77d481a, 0x808a0ffb, 0xd009978c, +0x04e98319, 0xe0b9e979, 0xfa86e03e, 0xc60cb968, +0x40820e8f, 0x462003f7, 0xc70a84e9, 0xc33b0d54, +0x43640ddb, 0x3b806a1e, 0x0b72cdab, 0x63fd8439, +0x1d061d18, 0xe9761784, 0x9b64fdae, 0x053d54db, +0xe9ebedb8, 0x6311ed40, 0x12a878ff, 0xf90c6a27, +0x02a90ce4, 0x085a1ef5, 0x72535e15, 0x135828cc, +0x1c0dbc2f, 0x7e481d1b, 0xab3bbbf6, 0x7650be37, +0x5d8a3a74, 0x47451711, 0x7b7103b0, 0x842f747b, +0xd3382beb, 0x08d88823, 0xe0a17d9f, 0x4bb2d988, +0x0dd08820, 0x63d188cb, 0x0f776fe1, 0x0838204a, +0x4e0375ca, 0xc396c675, 0xc06a2dc1, 0x5fd2045b, +0x7ab72329, 0xd81e8ee1, 0x8ad389c3, 0x4241025a, +0xba201062, 0x5423f6f9, 0x231000dd, 0xd689b0a8, +0xdbefd049, 0x0a9de51a, 0xf02443e1, 0x0f66b65b, +0x3f5eb0b6, 0x42003a80, 0x801e421a, 0x750bed85, +0x14a34afa, 0xf46baddc, 0x1027634d, 0x2622744b, +0xc8fec9b1, 0x4b0d742c, 0xf3390f74, 0xc41ef75f, +0xeb41c6a5, 0x1c3eedf6, 0x76a836f0, 0x1d1a2ac3, +0xb78241d8, 0x5aad89df, 0x84c3c3ca, 0x809d1038, +0xad002e38, 0x09405575, 0x57c33677, 0xf5d86fd3, +0xffc95133, 0xaef20833, 0xc249d1f7, 0xeec16f6e, +0x092ac801, 0x73087f48, 0xc35f1ef5, 0xf88ae017, +0x7e634a3d, 0x7c15bbb5, 0x801174c8, 0x404a9739, +0xae05740d, 0x321ddee0, 0xc3c829f4, 0xdf1b85e1, +0xb1107d76, 0xf289271f, 0x38028a26, 0xdfdd8001, +0xd3f4c860, 0x22434107, 0x7889e175, 0x904e07b1, +0x9da632b9, 0x19a3b60c, 0x32da8913, 0x37004110, +0xe72cf053, 0xfaeb789c, 0x621df015, 0x3e6225cd, +0xb1db96ed, 0x01e3855f, 0x75f238c3, 0xb05c260f, +0x9e1f152a, 0x8846d75d, 0x7c9c1ee8, 0x22f9ce59, +0x04c0075e, 0x8521a3c8, 0x265ef006, 0x091d8bde, +0x7e882dcf, 0xebb6e04f, 0x1e8bdbd0, 0xb018740f, +0xbac6c767, 0x5a593d5e, 0xb3068938, 0xd1d76337, +0x8bfc4a2f, 0x05b1195c, 0x03697734, 0x4143774a, +0xcb6bb113, 0x5b18d605, 0xfe030125, 0x331ceb25, +0x3b43080e, 0x377dc973, 0x4b11c157, 0x1602165d, +0x0bf41729, 0xc5efc2a5, 0x75494346, 0x746b5fef, +0x854d3f78, 0xb731fcd2, 0x7c2c5621, 0xd839017b, +0x754a4197, 0x675b18f5, 0x37bb4e11, 0x894c6bca, +0x5ace02d1, 0x576d5b6b, 0x53dfc289, 0xb0550512, +0x3910c7f5, 0x7dce89e9, 0x9a5bf909, 0x9a880bad, +0x75e81cfd, 0x46b7ed4e, 0x3b07738a, 0xebe87dee, +0x811f2fdd, 0xdbebdf18, 0x20d6109c, 0x01428a4a, +0xe31bfc78, 0xc7443a42, 0xee751608, 0x9ebfdb31, +0xa722c608, 0x0977eab8, 0x30b704fe, 0x34fb403d, +0x6c7f3d80, 0xb1d88fd2, 0x3d623d74, 0xc095ff80, +0x03815fc5, 0xa3ff00f8, 0x55528d54, 0xa8cf0449, +0x14754cdb, 0x8cc152de, 0x3100027a, 0x80cc1bad, +0x8554d285, 0x162b9048, 0x06696135, 0xc05e0edc, +0x4569aedc, 0x430458e8, 0x8026bc1b, 0xf5dc7b0d, +0xe28440d4, 0x53603823, 0x42e24c75, 0x24ce551b, +0x72760102, 0xe65bae11, 0x0f21fd3d, 0xbf4282a4, +0x54e81797, 0xf3eb0eb7, 0xc45c8d27, 0xe8e6343b, +0xdaadb6c0, 0x8d55b0e8, 0x50812401, 0x3ec7b5a4, +0xffa4b617, 0x66840e75, 0x758603c7, 0x6c4a97b0, +0x02438a2a, 0xd8538aeb, 0x09a860bd, 0x1538298f, +0x4c740f7e, 0x2850487b, 0x82584e8e, 0x156208a0, +0x3064bf3c, 0x9343b641, 0x841cc004, 0xc2363d8b, +0x883f05c6, 0x827da23f, 0x00752e66, 0x95ebfdfe, +0x750e0538, 0x57edebac, 0x530cf603, 0x0c75e91b, +0x85c6c38f, 0xf52f61d9, 0xfeee2825, 0x896e4ad1, +0xc84b252c, 0xc80600fe, 0xc8a225b6, 0x2596cf61, +0xe874638a, 0x2db0e931, 0x7d707600, 0xb2574a3f, +0x3d25bec1, 0xffffd984, 0x58f75b2c, 0x1cec8901, +0x5adec953, 0xf3562edf, 0x255b28fd, 0x006a071c, +0x8a49e283, 0x47b70f18, 0xf828c780, 0x5706046d, +0x020c8d08, 0x63d92913, 0x66f0b05b, 0x5f067983, +0x1c040643, 0xf6f74951, 0x348d02ff, 0x80de2902, +0x8901037f, 0x74090ef5, 0x25063771, 0x63a96d82, +0xf2da1a14, 0x0aa5d4f5, 0x5174dafa, 0x5d7435df, +0x29c04740, 0x6c6e07e1, 0x6f151d40, 0x35b88fba, +0x047a519b, 0x8001bbea, 0x5107c7d8, 0xb577e910, +0x6f099070, 0x8515275a, 0xd105351a, 0xd897a110, +0xf2196d00, 0x7c0e6ede, 0xfd0aeb0e, 0x1da9041a, +0xaa23bac3, 0x06e88bdb, 0x003f3d98, 0x421e4103, +0x1237db90, 0xb30b01fd, 0x37e00408, 0x4f447a06, +0x35ff4c37, 0x418e6c9c, 0xa996c229, 0x23c00163, +0xdd8538e7, 0xeb07065c, 0xfcbc55d1, 0x403c407e, +0x0ca8a15f, 0x37230243, 0xac95006b, 0x0acb3e0b, +0xdc602dda, 0x2a0843ab, 0xe0bb3689, 0x066a40ee, +0x6dcf8379, 0xe87ecb96, 0xfffffaea, 0xa1d91c10, +0xbeeb1c98, 0x2c3f6407, 0x30392e33, 0x8826b201, +0x90f7e961, 0x51b0e49b, 0x00bb0f96, 0x46578c0d, +0x49d73aa1, 0x847b0069, 0xf9fbc23d, 0xe152b9a1, +0x31e6c3c3, 0x01c60de1, 0xc960a394, 0xbd0ce24d, +0x366bb543, 0x0392c413, 0x84d00908, 0x0be1ae0b, +0x2e1ed869, 0xea2c68a1, 0x03ed93d7, 0xa1056a09, +0x54e8c103, 0x6056df68, 0x880aa033, 0xfd0a5437, +0x5cf38874, 0x08e2c1e7, 0xdb7c418a, 0x4e0b2aeb, +0x0d520a03, 0x38add40c, 0x7ce99d54, 0x5d22db45, +0x0db41724, 0x10b40df2, 0x4d01502c, 0xa1beae9d, +0xf6a15583, 0x801243ad, 0xc6119896, 0x16bfeba4, +0x8d585faa, 0x10821a7b, 0x08f06216, 0x5690cb7c, +0xc085534a, 0xf021c673, 0x0974e6a1, 0x28620d79, +0x5e034cb8, 0xba0df441, 0xed830b87, 0x030e0508, +0xbddb140f, 0x1e6b38db, 0x74483b7f, 0x96024337, +0xd5db3bc2, 0x628fc012, 0x180faed5, 0xe999f4f5, +0x1aaaeb4e, 0xeb5e2e95, 0x2fb9d6e7, 0x80032517, +0x362b1b14, 0x36d9eeb8, 0x2108375e, 0x64fac6eb, +0x758add14, 0x25eef00b, 0xce811e0c, 0xf045d68b, +0xfa81b947, 0x7c1074ea, 0x4b415e16, 0xa482c2a0, +0x30ed7d8b, 0x1db489b9, 0x03b4b803, 0xfb58ec71, +0x05f5ff52, 0x62008390, 0xf82ce0c1, 0x0f0a0f5d, +0xc2b29388, 0x20b49034, 0xb2b4934c, 0x72711036, +0x2ace6415, 0x2aa25b1e, 0x7f0a40f3, 0x1a9e3d2c, +0x1f4e7875, 0x56c85610, 0x369044a1, 0x158df89d, +0x3b41ba23, 0xac01e975, 0x3ddf641e, 0xfddddc60, +0x0cd47529, 0x05d2eb03, 0x93cceb02, 0xb7190d60, +0x93f92ef8, 0x8025ed04, 0x6f577113, 0x60c258dd, +0x29040d0d, 0xcd55aa10, 0xcc2e8990, 0x00e128e6, +0x053b5a36, 0xde36d812, 0x02bf2323, 0x0a2c18a3, +0x226c0700, 0xd4838bae, 0x11b83da8, 0xfe0d040a, +0x55353e66, 0x75871eb8, 0xc40283da, 0x98488011, +0x87d87425, 0x158df858, 0x3b031b5a, 0x8e268797, +0x6e1048b5, 0x82c73e34, 0x1f82a646, 0x78546640, +0xb622ea59, 0x9482e831, 0x98091415, 0x9110de28, +0x810cb9b1, 0x289a9cc2, 0xb5509f49, 0x390baaf6, +0x28749e0c, 0xf8229f9d, 0x002376a5, 0x2818e889, +0x3ecff7f9, 0x0f0a1390, 0x96c35b10, 0x3436ba81, +0x748f61e2, 0xaf644954, 0xd87588d7, 0xcdc4f684, +0x18f1c821, 0x2e08f3a1, 0x0757e2f0, 0xfe532036, +0x61d0018f, 0x6b394483, 0x0eb103f3, 0xaa225de0, +0x6cc9828d, 0x6281d880, 0x31eadaea, 0x11e00821, +0x91151438, 0x92e463b3, 0x70839753, 0x750fb3ec, +0x013b2f74, 0x72393bd8, 0x20991e05, 0x3323f54a, +0xc6c5b8c4, 0x7c3f0319, 0xf153f586, 0xa863bd44, +0xdd199801, 0xcd466114, 0xe3c7f201, 0x69a92c11, +0x8ff6e7b2, 0x0523c706, 0x5eb9148f, 0x3ab65302, +0x7711092c, 0x86868b4b, 0x36f69691, 0x69896c55, +0xc4828626, 0x2821f590, 0x8284c736, 0x183e668a, +0x02c61d89, 0xfe5a6cd6, 0x51786806, 0x9ceb5edc, +0x28989750, 0xbd43c180, 0x92adf664, 0xbe41086d, +0xd698090b, 0x605848e6, 0x3b9eeb9d, 0x69718c66, +0xa5c711e6, 0x1b110500, 0xb16deb1b, 0x89338b47, +0x024e401b, 0xdd9c1687, 0xb3fbf5e4, 0x0d1b149c, +0x40a30540, 0x91183ac4, 0x39e12ec3, 0x914077aa, +0x77bf460a, 0xa31aa440, 0x741c8cd2, 0x630b520e, +0x57061e5b, 0x3208ca47, 0x2ab404ab, 0xd8332bfd, +0xd6602140, 0x418b15d2, 0x09404a22, 0xdb11dc3c, +0xe2afdea5, 0x465f478b, 0xb5011202, 0xc05ceac7, +0x8d580419, 0x7518f858, 0x2d2b5eeb, 0x0c192b47, +0x050e4613, 0x2003060a, 0xdf305958, 0x0e75b8e8, +0x10560312, 0x8d8f5392, 0xc3520851, 0x7321e2ae, +0x0e5e6ff3, 0x1c24e4b2, 0x80ebfe23, 0xadf4e003, +0x0ef64ec5, 0xd089c9ba, 0xa00a0fcb, 0x49056f1d, +0x08684868, 0x9ecfdf37, 0x89fd1c44, 0xd2ebdc74, +0xe02c62eb, 0x555dd3a1, 0xc8f1743f, 0x53170916, +0x10755f8c, 0x80a031fb, 0x5e8b2f5a, 0xefdf860a, +0x41035017, 0xb8d91574, 0x4eedfab5, 0x0c7e130e, +0x8a1c698d, 0x05fd81e3, 0xa41fb064, 0xd17ec789, +0x088f8bc5, 0xcd51d0b6, 0x8b3bc061, 0x9db055fa, +0x550c86f2, 0x43a2b739, 0xe80c4940, 0x938c1910, +0x75d0d3aa, 0xc1118076, 0x79e90770, 0x16e0fd2d, +0x11351a19, 0xd3b802ab, 0x0283a249, 0x05062a58, +0x3882c104, 0xadf4a88c, 0x6c4563bf, 0xb2548bd3, +0x9e8dd9f3, 0x1f524c30, 0x07f75a9d, 0xf406c4fd, +0x86c6cd6d, 0x01230216, 0xd685159a, 0x220306e7, +0x0583c876, 0x10071a03, 0x44864aa1, 0xa114f231, +0x71441854, 0xd6258830, 0xac862480, 0x52307c44, +0x2c13f1f7, 0x8a45b233, 0xfc199452, 0xbb3e799e, +0x15049a05, 0x017cbf2c, 0x168a5888, 0x24834084, +0x1e8df46c, 0xecd8c7a4, 0xca317504, 0x1860f07f, +0xd8892adc, 0xe951a4b4, 0x57b77d76, 0x260647cc, +0x0abc1e04, 0xc70f9082, 0x8c42d1e1, 0xded042d8, +0x2dd7807b, 0x6fec4531, 0x997c04b9, 0xd12f25ed, +0x186f5351, 0x094ac2e3, 0x8e5164e4, 0x776da0f2, +0x2d46bc04, 0x21a0a0e8, 0x578da92d, 0x3f9809e9, +0x50992364, 0x54419815, 0x1f1d4270, 0xd07500bf, +0xb0aa5ce8, 0xe9c46003, 0x11be8033, 0x03a3c3aa, +0xc6b68dd1, 0x035d4035, 0x40687435, 0xa8f4e037, +0xfbb13908, 0xb43775dd, 0x20e8c73f, 0x50e50fc9, +0xee9e48e8, 0x04d9afbe, 0x1396b60f, 0x28100905, +0x77cac7e8, 0xe6b914fa, 0x54d6297d, 0xc70b5cfa, +0xdbd0296d, 0x4931a602, 0xcf1973cf, 0xe8b7313a, +0x6a2cc085, 0x8a0c0c55, 0xc2382247, 0x8dc1a76f, +0x5b601354, 0x63b71046, 0xc116fc11, 0x164619e9, +0x76124e03, 0x47145b18, 0xcbc15f14, 0x20985ad8, +0xc718db56, 0xbb8899be, 0x90840ffc, 0x8f0f0d93, +0xf57d0131, 0x0808fb6c, 0x7f081d11, 0x896e4a7b, +0x04da3eaf, 0x287c357f, 0x751d0b63, 0x256e0c15, +0x5d0b359e, 0x076ddb0c, 0xeb2744c1, 0xb2521aec, +0x7507e3eb, 0xdc67a017, 0x277474db, 0xad857c04, +0x068c50b5, 0x68070470, 0x6e6b6796, 0xbff2b81b, +0x22b78207, 0x796796fb, 0xeca74caf, 0xcd2c9f3b, +0x0d6dcfdb, 0x0d008988, 0x0a04407f, 0x9b7c3074, +0x209797b6, 0x0c10740b, 0xce298675, 0x1972e91b, +0xdc5436f9, 0x670ab3e8, 0x67a01f52, 0x51575ce4, +0xb6740f3d, 0x34b92b40, 0x0d045904, 0xd6330414, +0x0f11fb1c, 0x74224285, 0x3b0a2ef4, 0xc8cf233c, +0x15181023, 0xf639b70d, 0x024eea8d, 0xf7f2190a, +0xbcfd59fe, 0xa730db9d, 0x8f080142, 0x7420008d, +0x66cd2e7d, 0x707f04d7, 0x7c147414, 0xd8fed115, +0x39fcd637, 0x0abdf6a7, 0x0ab25abc, 0xe6b1be79, +0x4fa7f503, 0x2322a922, 0xedb1cd63, 0x22983825, +0x0a84f938, 0x462ed8a9, 0x6479f89a, 0x0a6ee966, +0xcf237d8d, 0x6468637f, 0xdf714e58, 0xec558bb6, +0x04447f08, 0xe6325c32, 0x333cf2d8, 0x55303b70, +0xcd66fbfb, 0x9c0a27b1, 0x72511cfa, 0x7bae0a11, +0x153e1bec, 0x74755106, 0x3e7f043f, 0x977e6cff, +0x1dfdfc73, 0xfde8fc72, 0x3d167476, 0x36467b4d, +0xe11ad653, 0x910acdcb, 0xb419e467, 0x1cb799c2, +0x0abec6fb, 0xd50aac7a, 0xec0aa1d7, 0x030105f2, +0x11c396d4, 0x052f5137, 0xb62c35f9, 0x97cce803, +0x6ff725a0, 0xd6ff0e16, 0xf1e8fcfa, 0x8dc85e09, +0x9a17d56a, 0x80c1832e, 0xd82ba1b1, 0xb857ad54, +0xc2ea43e5, 0x8149b679, 0x2fc013f4, 0x914da5e2, +0x37ebeb83, 0xa8e6eb1a, 0x858b3e23, 0xba08e3c1, +0x7003bb0b, 0x30350d1b, 0x08b86662, 0xbf4030b1, +0x6962ac9b, 0x02720987, 0x0a88e430, 0xdec899e4, +0xc35fc4a6, 0x24093d90, 0x99052b0d, 0xf93e8b49, +0x3d85b362, 0x0a3d4339, 0xf21c8361, 0x890b96e6, +0xd65ef97b, 0x334c8a0e, 0x3d0bb87f, 0x26c0b9a8, +0x3b96cd27, 0x9e49908b, 0x916c0c0b, 0x839e4992, +0xad55300d, 0x5b1444be, 0x49435024, 0xdef513d3, +0x85c6ac44, 0x1134a3f6, 0x5f90e411, 0x95f83701, +0x20054a1d, 0x8b128017, 0x837b92c1, 0xfa810853, +0x7c15573a, 0x7eb76886, 0xe8672c80, 0x54003f1f, +0xe949e04f, 0x534c90c3, 0xd56e05b8, 0xbb00fb6e, +0xd329f108, 0x5b07ff50, 0x2cc7398a, 0x811a7725, +0x32335f3b, 0x9823745f, 0x2362ab41, 0xc6a26149, +0xe69a205e, 0x75253d83, 0xf51cab60, 0x09b3a479, +0x6c013ff6, 0x4ad47492, 0x02087dc2, 0x07421a0c, +0xffdb61d5, 0xc984f87c, 0x7b80c075, 0x33272a08, +0xc2a36fb1, 0x313d552d, 0x5511a3c1, 0xebf7ea19, +0xa34068a0, 0xccc0e7c3, 0xc3c258d7, 0x12925069, +0x044f0fb0, 0xc00a4faf, 0x87608311, 0xc43db140, +0xa9102786, 0x35ab554d, 0x217aa72c, 0xd2bae99d, +0x218936e8, 0x032c0e89, 0x9354b5e0, 0xfc2390e8, +0xe4702d4b, 0x96fdf761, 0xb061e601, 0x1243e6b0, +0x5600d81c, 0xd8e142e6, 0xb6d83514, 0xc01dc308, +0xa06d5372, 0xe95fa338, 0x5fa17dcf, 0xba1d3fe2, +0x3b9aca00, 0xdcc0694c, 0x48521234, 0xf7b00dd5, +0x8ae967f1, 0xe4b85f02, 0x8cbad6ef, 0xa91d0000, +0x706c0004, 0xf00e8247, 0x40bff1ae, 0xb901d0a3, +0x28c4bd05, 0x7fb60a41, 0x68e94fbb, 0x05c71558, +0x1fb0071b, 0x1144090e, 0x2267a236, 0x16844847, +0x0874c151, 0xd76c3d4a, 0x07b9470a, 0x3c099e56, +0x0448cd05, 0xe9d90554, 0x22c11508, 0xc6475727, +0xe9a09b76, 0xa3217468, 0xbf686664, 0x40c9926e, +0x0609706c, 0x20e8f540, 0x68207d40, 0xd92cb690, +0x89f6324d, 0x843d801d, 0x028c0988, 0xec5d35e1, +0xb73d9a8c, 0x1cc81368, 0xba6ebb05, 0xe8179c04, +0x82b02aa3, 0x344ec1df, 0xb9282eb9, 0x3bafb1a5, +0x304cb9ec, 0x74420209, 0x35f23280, 0x31c5cc14, +0x33af404c, 0xb9444ecc, 0x030918a8, 0xbe464931, +0x076042bf, 0x602ecb68, 0x466bef54, 0x070958ba, +0x132e015c, 0x485632a3, 0x3118a042, 0xd09c8368, +0x80096c4d, 0x25e1b913, 0xe7b3d003, 0x6e680192, +0x0f64d847, 0x31f4b645, 0x613d59f8, 0xb9222289, +0x5aafe84f, 0x31d0f0e8, 0xd368c068, 0xf0f8bd43, +0xe3f62bd0, 0x0975cfa3, 0x41175e99, 0x21b8f7d8, +0x1e201be3, 0x91363e52, 0xc0e9c311, 0xd1c7096f, +0x99547398, 0xe0977705, 0xfb1e28cf, 0xf339db53, +0x5a060372, 0x6eff187c, 0x5aea0d43, 0xe8e22de0, +0xf3f1be2b, 0xe69f7258, 0xabeee2bf, 0x5a144949, +0x746285e8, 0xbb510807, 0xeb1e1742, 0x52ed33f0, +0x51da1bc5, 0x9f037851, 0x548a37b0, 0x00755002, +0x7445e400, 0x9026a568, 0x3500ff91, 0xec0e2338, +0x050239ff, 0x001161dc, 0xefbeadde, 0xff025d03, +0x9195a85f, 0x50203c21, 0x6c434558, 0x746e6569, +0xff75bf3a, 0x637241fd, 0x00303a68, 0x444e553a, +0x02320a49, 0x010d3731, 0xec2fbe03, 0x3c2b0cff, +0x83828180, 0x87868584, 0x0436035f, 0x033d3208, +0x6b05c580, 0x09b2110e, 0xdf6c812c, 0x5f627303, +0x2b5fab64, 0xffdb4706, 0x63ca2c27, 0x544146a4, +0x203a4c41, 0x4b756f4e, 0x7220ffff, 0x2d6c6165, +0x65646f6d, 0x61747320, 0x215e6b63, 0xdcd90041, +0x4e03dc6f, 0x612d2b56, 0x746f6e6e, 0xbf762023, +0x145ccedd, 0x50252124, 0x636f1772, 0xfe736c6f, +0x446ffb5b, 0x50434844, 0x54465420, 0x696e1604, +0x69640063, 0x1bdb6b73, 0x6c81b7d4, 0x3170706f, +0x0b202d20, 0xb6b6e675, 0xda6c6cc6, 0x30ca6666, +0x6b7f0302, 0x7872fdbd, 0x40726520, 0xca252072, +0x6c747233, 0xb7323138, 0x39b3edfa, 0x62393307, +0x35656640, 0x6d863833, 0xb0dbb563, 0x3131166f, +0x1809312d, 0x5d7e6c65, 0x23e17b6c, 0x74646403, +0x2e0b6e40, 0x6ec6b436, 0x743039fb, 0x65686478, +0xa27630e1, 0x8ff6b16b, 0x1d640235, 0x33776e66, +0x1e333036, 0xb7b07d09, 0x303038e6, 0x656e9c63, +0x52006f2d, 0xb6f14c54, 0x55078fb5, 0xb375736e, +0x20397495, 0xbdd65041, 0x22032f6d, 0x22016325, +0x62613c9f, 0xfb083e14, 0x57ddedb7, 0x69206771, +0x0c78866e, 0x70746674, 0x886f4c00, 0x6efb7b2d, +0x40251369, 0xe873253a, 0x122f2f3a, 0xd60217b6, +0x3f0c0a0f, 0x3f697372, 0x8285c23a, 0x693c0be6, +0xc2406f42, 0xbab5d6ff, 0x69980a87, 0x7a73656c, +0x6d203e20, 0xb0d84567, 0x280f07b5, 0x21002968, +0xa1ed6dbe, 0x3d617f2e, 0x699569d1, 0x5b67616d, +0x2fef6dc2, 0x49424e28, 0x7b44281f, 0x0ad0002e, +0x8c2061ff, 0x6d617267, 0x9bcb6820, 0xa142f75b, +0x62d69855, 0x73b96769, 0xd08b6558, 0xb970b9bd, +0x5f746983, 0x08f2701d, 0xfdb6bad7, 0x756f6620, +0x0f1a2ec8, 0x089d3353, 0x11336f77, 0x654d0a10, +0x2c0040a4, 0xeeb83bd8, 0x28200ab1, 0x12290626, +0x60e11de6, 0x8c520617, 0x470b7961, 0x50ad3461, +0x0d776d78, 0x752e450c, 0x76ebd9bd, 0xfc6c2083, +0x0965db20, 0xb735b62d, 0x25bf6d1b, 0x97d873c9, +0x6b76de38, 0x726135f3, 0x5735748e, 0x62176237, +0x6e771647, 0x706d603d, 0x6b5b52ba, 0x62615b16, +0x6c73380b, 0x90146b6d, 0x06740e74, 0x2f4b6b2d, +0x7a4e2e18, 0x52f6a265, 0x38ae4346, 0x8cec1663, +0x19005332, 0xf4926649, 0x284905b6, 0x000a293b, +0xbdb18c1c, 0x63d3e5d1, 0x64f66965, 0xe87662d5, +0x7d8c306e, 0x643a756e, 0x61a3ae64, 0xb4b1b473, +0x2b6a4249, 0x6b76b473, 0x4455b6a5, 0x5e36510c, +0xdc586d75, 0x06691876, 0x61cfe062, 0xb6d93c35, +0x5b128c19, 0x70175d07, 0x6dda6963, 0xeceb8634, +0x002e5d3a, 0x5fb7f0a0, 0x34333284, 0x39b23635, +0x44434241, 0xe870c545, 0x4f3b66be, 0x5f2f0083, +0xbdb0ceac, 0xe520f7f0, 0xd633534f, 0xb2f40064, +0x9a0df6de, 0x2e342e35, 0x18435b33, 0x4d8b7c1f, +0x24204216, 0x4c5047ef, 0x68eb0e29, 0xa474e92c, +0x2e1c6594, 0xd1bba998, 0x724416b3, 0x3fb872f7, +0x1da3dc3a, 0x155cea20, 0xdd3e205c, 0x175a3822, +0x11784500, 0x53873a73, 0x9f0ec158, 0x6d276f69, +0xeb6da178, 0x69ace423, 0x2c737172, 0x370de120, +0x0121129c, 0x5370624d, 0x75642d73, 0x57188fcf, +0x3f0a78b6, 0x35133543, 0xe10ab58c, 0xb920ef73, +0x42c6c66f, 0x1249b9e3, 0x40613f6b, 0xc2d817d6, +0x7f0a8975, 0x9b4d4f52, 0xe1afb5b6, 0x74c36765, +0x09337884, 0xdbb63c67, 0x350bb368, 0x780a634d, +0x7468bf0a, 0x770314a5, 0x6db78964, 0x708dda41, +0x6e74344c, 0x8849866e, 0x36c935d0, 0x7bff1e0a, +0xf71cec63, 0xa13d2157, 0x1819ac75, 0x67096576, +0x051b9c0a, 0x6c1ed857, 0xe59c0321, 0xa5488165, +0x09190549, 0xbae6d76b, 0x6f017c5a, 0x2b677b83, +0x30361362, 0x3f203e45, 0x06a5d26c, 0x70827292, +0x0c18cf73, 0xe4b604b2, 0xb2047e3f, 0x11441e64, +0xd0bb6162, 0x0e45d486, 0x6e679407, 0x82946c52, +0x2900cb14, 0xb2b65277, 0x666fac37, 0x3f823220, +0xc618230c, 0xf8d37632, 0x04bdeb66, 0x7bb59dd6, +0xb83fbf64, 0xde60ad1b, 0x64698fa6, 0xad83e133, +0x4373666d, 0x52b56f3d, 0xa78586e2, 0x5f7385d6, +0xd654788e, 0xc60a19d0, 0x6d78d08b, 0x0085ed78, +0x6f74ecb6, 0x40ff610c, 0xfb0a15ec, 0x088a3ec2, +0x119c0e07, 0xbf620128, 0xb6c42214, 0x295f63a6, +0x92c08bb2, 0xea50a92b, 0xb11f8120, 0x405b0229, +0x78f9ea6e, 0xdee72d79, 0x71e61222, 0x79a16575, +0xc8112c4d, 0x8d004462, 0xd845b045, 0x67af871a, +0x2861bb48, 0xad88e898, 0x9f6e7056, 0x9a3db4d8, +0xf2a07245, 0x79200267, 0x561b0ee1, 0x4fcaa302, +0x7dce1b0b, 0x48777334, 0xcdc48a76, 0x176a5874, +0x66374a68, 0x41821966, 0x3dcb1600, 0x008a9fc3, +0x830f8161, 0x4f4f42a9, 0x20402d36, 0x439a0f02, +0x6051b5ae, 0x00b3cd91, 0x6ee3bbf6, 0x6c75e02b, +0x623436b1, 0x524142cf, 0xee6e0335, 0x7838307d, +0x133c043a, 0x6113736f, 0xb45e2d81, 0x648d6522, +0x01ee6491, 0x23623a69, 0x64003f58, 0x0b0247c7, +0x4d70433f, 0x06651855, 0xb15d9f2a, 0x21b810c0, +0xad523a52, 0x39e0c479, 0x0fe781a0, 0xc360185c, +0x8a106f0e, 0x19e04172, 0x709c8298, 0x60c37482, +0x67316aa5, 0xeb58b468, 0xb346d4b0, 0x8ce24276, +0x02c0dd16, 0x6b75b93f, 0x02d68441, 0x826b36c0, +0x79d5e9a9, 0x6d82bd61, 0x342ec018, 0x7719b743, +0x9b266340, 0xa6aa2e6f, 0x7529db06, 0x9c831b57, +0x9704ccfd, 0x7e81608c, 0xe0003700, 0x47672080, +0x9f7f07ea, 0xc89307cf, 0x9bd83656, 0x001f9317, +0x26ceaeba, 0xde670610, 0xf770036b, 0xec6fb1f3, +0x9b812910, 0x13813907, 0xa3813878, 0xbbbe690f, +0x13ac8651, 0x111307ac, 0x12b31211, 0xa6f9b2d8, +0x601500bd, 0x4033c513, 0xdf3627cf, 0x1340f77c, +0x13d107db, 0x59e5ab06, 0xeea11712, 0x7b7014ea, +0xf90fdb1f, 0x03ab0707, 0x0d5fbf78, 0x82ba8078, +0xd0614108, 0xb6803766, 0x6a933c8c, 0xecaf9339, +0x0517fd95, 0x7777b204, 0x51826313, 0x53dfeff6, +0x0b960763, 0x003705af, 0xfa0302b1, 0xd80ab0ad, +0xe8ed0b01, 0x00857b2d, 0x000338cc, 0x819176ca, +0xb042135b, 0x2a40002b, 0x4507d0fb, 0x0000014f, +0x00000000, 0xffffff20, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x72ffffff, 0x31386c74, 0x7a2e3933, +0x206d6f72, 0x2e342e35, 0x47282033, 0x20294c50, +0x65687465, 0x6f6f6272, 0x726f2e74, 0xffff0067, +0100000, +}; diff -r 5b19839d0365 -r cd51fa91956b tools/firmware/hvmloader/Makefile --- a/tools/firmware/hvmloader/Makefile Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/firmware/hvmloader/Makefile Sun Aug 12 14:50:02 2007 -0600 @@ -51,12 +51,12 @@ acpi/acpi.a: acpi/acpi.a: $(MAKE) -C acpi -roms.h: ../rombios/BIOS-bochs-latest ../vgabios/VGABIOS-lgpl-latest.bin ../vgabios/VGABIOS-lgpl-latest.cirrus.bin ../vmxassist/vmxassist.bin ../etherboot/eb-rtl8139.zrom +roms.h: ../rombios/BIOS-bochs-latest ../vgabios/VGABIOS-lgpl-latest.bin ../vgabios/VGABIOS-lgpl-latest.cirrus.bin ../vmxassist/vmxassist.bin ../etherboot/eb-rtl8139.zrom.h sh ./mkhex rombios ../rombios/BIOS-bochs-latest > roms.h sh ./mkhex vgabios_stdvga ../vgabios/VGABIOS-lgpl-latest.bin >> roms.h sh ./mkhex vgabios_cirrusvga ../vgabios/VGABIOS-lgpl-latest.cirrus.bin >> roms.h sh ./mkhex vmxassist ../vmxassist/vmxassist.bin >> roms.h - sh ./mkhex etherboot ../etherboot/eb-rtl8139.zrom >> roms.h + cat ../etherboot/eb-rtl8139.zrom.h >> roms.h .PHONY: clean clean: diff -r 5b19839d0365 -r cd51fa91956b tools/libxc/xc_dom_x86.c --- a/tools/libxc/xc_dom_x86.c Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/libxc/xc_dom_x86.c Sun Aug 12 14:50:02 2007 -0600 @@ -417,6 +417,7 @@ static int start_info_x86_32(struct xc_d xc_dom_printf("%s: called\n", __FUNCTION__); + memset(start_info, 0, sizeof(*start_info)); sprintf(start_info->magic, dom->guest_type); start_info->nr_pages = dom->total_pages; start_info->shared_info = shinfo << PAGE_SHIFT_X86; @@ -455,6 +456,7 @@ static int start_info_x86_64(struct xc_d xc_dom_printf("%s: called\n", __FUNCTION__); + memset(start_info, 0, sizeof(*start_info)); sprintf(start_info->magic, dom->guest_type); start_info->nr_pages = dom->total_pages; start_info->shared_info = shinfo << PAGE_SHIFT_X86; diff -r 5b19839d0365 -r cd51fa91956b tools/pygrub/src/LiloConf.py --- a/tools/pygrub/src/LiloConf.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/pygrub/src/LiloConf.py Sun Aug 12 14:50:02 2007 -0600 @@ -18,12 +18,13 @@ class LiloImage(object): " initrd: %s\n" %(self.title, self.root, self.kernel, self.args, self.initrd)) def reset(self, lines, path): - self._root = self._initrd = self._kernel = self._args = None + self._initrd = self._kernel = self._readonly = None + self._args = "" self.title = "" self.lines = [] self.path = path + self.root = "" map(self.set_from_line, lines) - self.root = "" # dummy def set_from_line(self, line, replace = None): (com, arg) = GrubConf.grub_exact_split(line, 2) @@ -55,6 +56,23 @@ class LiloImage(object): return self._initrd initrd = property(get_initrd, set_initrd) + def set_args(self, val): + self._args = val + def get_args(self): + args = self._args + if self.root: + args += " root=" + self.root + if self.readonly: + args += " ro" + return args + args = property(get_args, set_args) + + def set_readonly(self, val): + self._readonly = 1 + def get_readonly(self): + return self._readonly + readonly = property(get_readonly, set_readonly) + # set up command handlers commands = { "label": "self.title", "root": "self.root", @@ -62,7 +80,7 @@ class LiloImage(object): "image": "self.kernel", "initrd": "self.initrd", "append": "self.args", - "read-only": None, + "read-only": "self.readonly", "chainloader": None, "module": None} diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/util/acmpolicy.py --- a/tools/python/xen/util/acmpolicy.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/util/acmpolicy.py Sun Aug 12 14:50:02 2007 -0600 @@ -46,6 +46,9 @@ ACM_POLICY_UNDEFINED = 15 ACM_SCHEMA_FILE = "/etc/xen/acm-security/policies/security_policy.xsd" + +ACM_LABEL_UNLABELED = "__UNLABELED__" +ACM_LABEL_UNLABELED_DISPLAY = "unlabeled" class ACMPolicy(XSPolicy): """ @@ -139,6 +142,21 @@ class ACMPolicy(XSPolicy): return xsconstants.XSERR_SUCCESS + def is_default_policy(self): + """ + Determine whether this is the default policy + """ + default = ['SystemManagement'] + if self.policy_get_virtualmachinelabel_names() == default and \ + self.policy_get_bootstrap_vmlabel() == default[0] and \ + self.policy_get_stetypes_types() == default and \ + self.policy_get_stes_of_vmlabel(default[0]) == default and \ + self.policy_get_resourcelabel_names() == [] and \ + self.policy_get_chwall_types() == default and \ + self.get_name() == "DEFAULT": + return True + return False + def update(self, xml_new): """ Update the policy with the new XML. The hypervisor decides @@ -153,27 +171,18 @@ class ACMPolicy(XSPolicy): return -xsconstants.XSERR_XML_PROCESSING, errors vmlabel_map = acmpol_new.policy_get_vmlabel_translation_map() + # An update requires version information in the current # and new policy. The version number of the current policy # must be the same as what is in the FromPolicy/Version node # in the new one and the current policy's name must be the # same as in FromPolicy/PolicyName - - now_vers = acmpol_old.policy_dom_get_hdr_item("Version") - now_name = acmpol_old.policy_dom_get_hdr_item("PolicyName") - req_oldvers = acmpol_new.policy_dom_get_frompol_item("Version") - req_oldname = acmpol_new.policy_dom_get_frompol_item("PolicyName") - - if now_vers == "" or \ - now_vers != req_oldvers or \ - now_name != req_oldname: - log.info("Policy rejected: %s != %s or %s != %s" % \ - (now_vers,req_oldvers,now_name,req_oldname)) - return -xsconstants.XSERR_VERSION_PREVENTS_UPDATE, errors - - if not self.isVersionUpdate(acmpol_new): - log.info("Policy rejected since new version is not an update.") - return -xsconstants.XSERR_VERSION_PREVENTS_UPDATE, errors + # The default policy when it is set skips this step. + if not acmpol_new.is_default_policy() and \ + not acmpol_old.is_default_policy(): + irc = self.__do_update_version_check(acmpol_new) + if irc != xsconstants.XSERR_SUCCESS: + return irc, errors if self.isloaded(): newvmnames = \ @@ -255,6 +264,29 @@ class ACMPolicy(XSPolicy): self.compile() return rc, errors + + def __do_update_version_check(self, acmpol_new): + acmpol_old = self + + now_vers = acmpol_old.policy_dom_get_hdr_item("Version") + now_name = acmpol_old.policy_dom_get_hdr_item("PolicyName") + req_oldvers = acmpol_new.policy_dom_get_frompol_item("Version") + req_oldname = acmpol_new.policy_dom_get_frompol_item("PolicyName") + + if now_vers == "" or \ + now_vers != req_oldvers or \ + now_name != req_oldname: + log.info("Policy rejected: %s != %s or %s != %s" % \ + (now_vers,req_oldvers,now_name,req_oldname)) + return -xsconstants.XSERR_VERSION_PREVENTS_UPDATE + + if not self.isVersionUpdate(acmpol_new): + log.info("Policy rejected since new version is not an update.") + return -xsconstants.XSERR_VERSION_PREVENTS_UPDATE + + return xsconstants.XSERR_SUCCESS + + def compareVersions(self, v1, v2): """ Compare two policy versions given their tuples of major and @@ -845,8 +877,7 @@ class ACMPolicy(XSPolicy): if self.isloaded(): return -xsconstants.XSERR_POLICY_LOADED files = [ self.get_filename(".map",""), - self.get_filename(".bin",""), - self.path_from_policy_name(self.get_name())] + self.get_filename(".bin","") ] for f in files: try: os.unlink(f) @@ -925,11 +956,13 @@ class ACMPolicy(XSPolicy): return -xsconstants.XSERR_POLICY_INCONSISTENT, "", "" vms_with_chws = [] - chws_by_vm = {} + chws_by_vm = { ACM_LABEL_UNLABELED : [] } for v in vms: if v.has_key("chws"): vms_with_chws.append(v["name"]) chws_by_vm[v["name"]] = v["chws"] + + if bootstrap in vms_with_chws: vms_with_chws.remove(bootstrap) vms_with_chws.sort() @@ -937,18 +970,25 @@ class ACMPolicy(XSPolicy): else: vms_with_chws.sort() + if ACM_LABEL_UNLABELED in vms_with_chws: + vms_with_chws.remove(ACM_LABEL_UNLABELED) ; # @1 + vms_with_stes = [] - stes_by_vm = {} + stes_by_vm = { ACM_LABEL_UNLABELED : [] } for v in vms: if v.has_key("stes"): vms_with_stes.append(v["name"]) stes_by_vm[v["name"]] = v["stes"] + if bootstrap in vms_with_stes: vms_with_stes.remove(bootstrap) vms_with_stes.sort() vms_with_stes.insert(0, bootstrap) else: vms_with_stes.sort() + + if ACM_LABEL_UNLABELED in vms_with_stes: + vms_with_stes.remove(ACM_LABEL_UNLABELED) ; # @2 resnames = self.policy_get_resourcelabel_names() resnames.sort() @@ -957,6 +997,9 @@ class ACMPolicy(XSPolicy): for r in res: if r.has_key("stes"): stes_by_res[r["name"]] = r["stes"] + + if ACM_LABEL_UNLABELED in resnames: + resnames.remove(ACM_LABEL_UNLABELED) max_chw_ssids = 1 + len(vms_with_chws) max_chw_types = 1 + len(vms_with_chws) @@ -1083,6 +1126,8 @@ class ACMPolicy(XSPolicy): pr_bin += "\x00" # Build chinese wall part + vms_with_chws.insert(0, ACM_LABEL_UNLABELED) + cfses_names = self.policy_get_chwall_cfses_names_sorted() cfses = self.policy_get_chwall_cfses() @@ -1105,9 +1150,7 @@ class ACMPolicy(XSPolicy): chw_running_types_offset, chw_conf_agg_offset) chw_bin_body = "" - # simulate __NULL_LABEL__ - for c in chws: - chw_bin_body += struct.pack("!h",0) + # VMs that are listed and their chinese walls for v in vms_with_chws: for c in chws: @@ -1143,6 +1186,8 @@ class ACMPolicy(XSPolicy): chw_bin += "\x00" # Build STE part + vms_with_stes.insert(0, ACM_LABEL_UNLABELED) # Took out in @2 + steformat="!iiiii" ste_bin = struct.pack(steformat, ACM_STE_VERSION, @@ -1152,10 +1197,7 @@ class ACMPolicy(XSPolicy): struct.calcsize(steformat)) ste_bin_body = "" if stes: - # Simulate __NULL_LABEL__ - for s in stes: - ste_bin_body += struct.pack("!h",0) - # VMs that are listed and their chinese walls + # VMs that are listed and their STE types for v in vms_with_stes: unknown_ste |= (set(stes_by_vm[v]) - set(stes)) for s in stes: diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/util/security.py --- a/tools/python/xen/util/security.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/util/security.py Sun Aug 12 14:50:02 2007 -0600 @@ -146,7 +146,7 @@ def calc_dom_ssidref_from_info(info): raise VmError("VM label '%s' in wrong format." % seclab) typ, policyname, vmlabel = seclab.split(":") if typ != xsconstants.ACM_POLICY_ID: - raise VmError("Policy type '%s' not supported." % typ) + raise VmError("Policy type '%s' must be changed." % typ) refresh_security_policy() if active_policy != policyname: raise VmError("Active policy '%s' different than " @@ -155,7 +155,7 @@ def calc_dom_ssidref_from_info(info): ssidref = label2ssidref(vmlabel, policyname, "dom") return ssidref else: - return 0 + return 0x0 raise VmError("security.calc_dom_ssidref_from_info: info of type '%s'" "not supported." % type(info)) @@ -231,6 +231,10 @@ def ssidref2label(ssidref_var): ssidref = ssidref_var else: err("Instance type of ssidref not supported (must be of type 'str' or 'int')") + + if ssidref == 0: + from xen.util.acmpolicy import ACM_LABEL_UNLABELED + return ACM_LABEL_UNLABELED try: mapfile_lock() @@ -498,7 +502,7 @@ def hv_chg_policy(bin_pol, del_array, ch rc, errors = acm.chgpolicy(bin_pol, del_array, chg_array) except Exception, e: pass - if (len(errors) > 0): + if len(errors) > 0: rc = -xsconstants.XSERR_HV_OP_FAILED return rc, errors @@ -781,6 +785,24 @@ def res_security_check_xapi(rlabel, rssi return rtnval +def validate_label(label, policyref): + """ + Make sure that this label is part of the currently enforced policy + and that it reference the current policy. + """ + rc = xsconstants.XSERR_SUCCESS + from xen.xend.XendXSPolicyAdmin import XSPolicyAdminInstance + curpol = XSPolicyAdminInstance().get_loaded_policy() + if not curpol or curpol.get_name() != policyref: + rc = -xsconstants.XSERR_BAD_LABEL + else: + try: + label2ssidref(label, curpol.get_name() , 'res') + except: + rc = -xsconstants.XSERR_BAD_LABEL + return rc + + def set_resource_label_xapi(resource, reslabel_xapi, oldlabel_xapi): """Assign a resource label to a resource @param resource: The name of a resource, i.e., "phy:/dev/hda", or @@ -805,9 +827,15 @@ def set_resource_label_xapi(resource, re return -xsconstants.XSERR_BAD_LABEL_FORMAT otyp, opolicyref, olabel = tmp # Only ACM is supported - if otyp != xsconstants.ACM_POLICY_ID: + if otyp != xsconstants.ACM_POLICY_ID and \ + otyp != xsconstants.INVALID_POLICY_PREFIX + \ + xsconstants.ACM_POLICY_ID: return -xsconstants.XSERR_WRONG_POLICY_TYPE + rc = validate_label(label, policyref) + if rc != xsconstants.XSERR_SUCCESS: + return rc return set_resource_label(resource, typ, policyref, label, olabel) + def is_resource_in_use(resource): """ Investigate all running domains whether they use this device """ @@ -867,7 +895,7 @@ def get_domain_resources(dominfo): resources[typ].append("%s:%s:%s" % (xsconstants.ACM_POLICY_ID, active_policy, - "unlabeled")) + ACM_LABEL_UNLABELED)) return resources @@ -1224,7 +1252,7 @@ def change_acm_policy(bin_pol, del_array sec_lab, new_seclab = labels if sec_lab != new_seclab: log.info("Updating domain %s to new label '%s'." % \ - (new_seclab, sec_lab)) + (sec_lab, new_seclab)) # This better be working! dominfo.set_security_label(new_seclab, sec_lab, diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/xend/XendDomainInfo.py Sun Aug 12 14:50:02 2007 -0600 @@ -559,18 +559,8 @@ class XendDomainInfo: self.getDeviceController(devclass).waitForDevices() def destroyDevice(self, deviceClass, devid, force = False): - try: - dev = int(devid) - except ValueError: - # devid is not a number but a string containing either device - # name (e.g. xvda) or device_type/device_id (e.g. vbd/51728) - dev = type(devid) is str and devid.split('/')[-1] or None - if dev == None: - log.debug("Could not find the device %s", devid) - return None - - log.debug("dev = %s", dev) - return self.getDeviceController(deviceClass).destroyDevice(dev, force) + log.debug("dev = %s", devid) + return self.getDeviceController(deviceClass).destroyDevice(devid, force) def getDeviceSxprs(self, deviceClass): if self._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED): @@ -1463,8 +1453,6 @@ class XendDomainInfo: ssidref = 0 if security.on(): ssidref = security.calc_dom_ssidref_from_info(self.info) - if ssidref == 0: - raise VmError('VM is not properly labeled.') if security.has_authorization(ssidref) == False: raise VmError("VM is not authorized to run.") diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xend/server/DevController.py --- a/tools/python/xen/xend/server/DevController.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/xend/server/DevController.py Sun Aug 12 14:50:02 2007 -0600 @@ -203,27 +203,32 @@ class DevController: The implementation here simply deletes the appropriate paths from the store. This may be overridden by subclasses who need to perform other - tasks on destruction. Further, the implementation here can only - accept integer device IDs, or values that can be converted to - integers. Subclasses may accept other values and convert them to - integers before passing them here. - """ - - devid = int(devid) + tasks on destruction. The implementation here accepts integer device + IDs or paths containg integer deviceIDs, e.g. vfb/0. Subclasses may + accept other values and convert them to integers before passing them + here. + """ + + try: + dev = int(devid) + except ValueError: + # Does devid contain devicetype/deviceid? + # Propogate exception if unable to find an integer devid + dev = int(type(devid) is str and devid.split('/')[-1] or None) # Modify online status /before/ updating state (latter is watched by # drivers, so this ordering avoids a race). - self.writeBackend(devid, 'online', "0") - self.writeBackend(devid, 'state', str(xenbusState['Closing'])) + self.writeBackend(dev, 'online', "0") + self.writeBackend(dev, 'state', str(xenbusState['Closing'])) if force: - frontpath = self.frontendPath(devid) + frontpath = self.frontendPath(dev) backpath = xstransact.Read(frontpath, "backend") if backpath: xstransact.Remove(backpath) xstransact.Remove(frontpath) - self.vm._removeVm("device/%s/%d" % (self.deviceClass, devid)) + self.vm._removeVm("device/%s/%d" % (self.deviceClass, dev)) def configurations(self): return map(self.configuration, self.deviceIDs()) diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xend/server/blkif.py --- a/tools/python/xen/xend/server/blkif.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/xend/server/blkif.py Sun Aug 12 14:50:02 2007 -0600 @@ -73,17 +73,7 @@ class BlkifController(DevController): back['uuid'] = uuid if security.on(): - (label, ssidref, policy) = \ - security.get_res_security_details(uname) - domain_label = self.vm.get_security_label() - if domain_label: - rc = security.res_security_check_xapi(label, ssidref, policy, - domain_label) - if rc == 0: - raise VmError("VM's access to block device '%s' denied." % - uname) - else: - raise VmError("VM must have a security label.") + self.do_access_control(config, uname) devid = blkif.blkdev_name_to_number(dev) if devid is None: @@ -95,6 +85,21 @@ class BlkifController(DevController): return (devid, back, front) + def do_access_control(self, config, uname): + (label, ssidref, policy) = \ + security.get_res_security_details(uname) + domain_label = self.vm.get_security_label() + if domain_label: + rc = security.res_security_check_xapi(label, ssidref, policy, + domain_label) + if rc == 0: + raise VmError("VM's access to block device '%s' denied" % + uname) + else: + from xen.util.acmpolicy import ACM_LABEL_UNLABELED + if label != ACM_LABEL_UNLABELED: + raise VmError("VM must have a security label to access " + "block device '%s'" % uname) def reconfigureDevice(self, _, config): """@see DevController.reconfigureDevice""" @@ -149,13 +154,16 @@ class BlkifController(DevController): def destroyDevice(self, devid, force): """@see DevController.destroyDevice""" - # If we are given a device name, then look up the device ID from it, - # and destroy that ID instead. If what we are given is an integer, - # then assume it's a device ID and pass it straight through to our - # superclass's method. - + # vbd device IDs can be either string or integer. Further, the + # following string values are possible: + # - devicetype/deviceid (vbd/51728) + # - devicetype/devicename (/dev/xvdb) + # - devicename (xvdb) + # Let our superclass handle integer or devicetype/deviceid forms. + # If we are given a device name form, then look up the device ID + # from it, and destroy that ID instead. try: - DevController.destroyDevice(self, int(devid), force) + DevController.destroyDevice(self, devid, force) except ValueError: devid_end = type(devid) is str and devid.split('/')[-1] or None diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/activatepolicy.py --- a/tools/python/xen/xm/activatepolicy.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/xm/activatepolicy.py Sun Aug 12 14:50:02 2007 -0600 @@ -23,7 +23,7 @@ from xen.util import xsconstants from xen.util import xsconstants from xml.dom import minidom from xen.xm.opts import OptionError -from xen.xm import getpolicy +from xen.xm import getpolicy, setpolicy from xen.xm import main as xm_main from xen.xm.main import server @@ -38,6 +38,9 @@ def help(): --boot Have the system boot with the policy. Changes the default title in grub.conf. --noboot Remove the policy from the default entry in grub.conf. + --remove Attempt to remove the current policy by installing the + default policy; this works only if no domains are + running. """ def activate_policy(flags): @@ -56,6 +59,25 @@ def remove_bootpolicy(): def remove_bootpolicy(): server.xenapi.XSPolicy.rm_xsbootpolicy() +def install_default_policy(): + if xm_main.serverType != xm_main.SERVER_XEN_API: + raise OptionError('xm needs to be configured to use the xen-api.') + xs_type = int(server.xenapi.XSPolicy.get_xstype()) + if xs_type & xsconstants.XS_POLICY_ACM == 0: + raise OptionError('ACM policy type not supported on system.') + policystate = server.xenapi.XSPolicy.get_xspolicy() + if int(policystate['type']) == 0: + print 'No policy is installed.' + return + if int(policystate['type']) != xsconstants.XS_POLICY_ACM: + print "Unknown policy type '%s'." % policystate['type'] + flags = int(policystate['flags']) + if flags & xsconstants.XS_INST_LOAD == 0: + print "Default policy is already loaded." + return + setpolicy.setpolicy(xsconstants.ACM_POLICY_ID, 'default', flags, True, + False) + def main(argv): if xm_main.serverType != xm_main.SERVER_XEN_API: raise OptionError('xm needs to be configured to use the xen-api.') @@ -69,6 +91,9 @@ def main(argv): flags |= xsconstants.XS_INST_LOAD elif '--noboot' == argv[c]: remove_bootpolicy() + elif '--remove' == argv[c]: + install_default_policy() + return else: raise OptionError("Unknown command line option '%s'" % argv[c]) c += 1 diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/main.py --- a/tools/python/xen/xm/main.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/xm/main.py Sun Aug 12 14:50:02 2007 -0600 @@ -25,7 +25,6 @@ import cmd import cmd import os import pprint -import readline import shlex import sys import re @@ -51,6 +50,7 @@ from xen.xm import console from xen.xm import console from xen.util.xmlrpcclient import ServerProxy from xen.util.security import ACMError +from xen.util.acmpolicy import ACM_LABEL_UNLABELED_DISPLAY import XenAPI @@ -615,6 +615,7 @@ class Shell(cmd.Cmd): def preloop(self): cmd.Cmd.preloop(self) + import readline readline.set_completer_delims(' ') def default(self, line): @@ -947,7 +948,7 @@ def xm_label_list(doms): d = parse_doms_info(dom) if security.active_policy not in ['INACTIVE', 'NULL', 'DEFAULT']: if not d['seclabel']: - d['seclabel'] = 'ERROR' + d['seclabel'] = ACM_LABEL_UNLABELED_DISPLAY elif security.active_policy in ['DEFAULT']: d['seclabel'] = 'DEFAULT' else: diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/new.py --- a/tools/python/xen/xm/new.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/xm/new.py Sun Aug 12 14:50:02 2007 -0600 @@ -75,7 +75,8 @@ def main(argv): doc = sxp2xml_inst.convert_sxp_to_xml(config) xenapi_create_inst = xenapi_create() - vm_refs = xenapi_create_inst.create(document = doc) + vm_refs = xenapi_create_inst.create(document = doc, + skipdtd=opts.vals.skipdtd) else: make_unstarted_domain(opts, config) diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/resources.py --- a/tools/python/xen/xm/resources.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/xm/resources.py Sun Aug 12 14:50:02 2007 -0600 @@ -58,7 +58,6 @@ def main (argv): try: filename = security.res_label_filename access_control = dictio.dict_read("resources", filename) - print access_control except: raise OptionError("Resource file not found") diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/setpolicy.py --- a/tools/python/xen/xm/setpolicy.py Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/python/xen/xm/setpolicy.py Sun Aug 12 14:50:02 2007 -0600 @@ -24,6 +24,7 @@ import sys import sys import string from xen.util import xsconstants +from xen.util.acmpolicy import ACMPolicy from xen.xm.opts import OptionError from xen.util.security import policy_dir_prefix from xen.xm import main as xm_main @@ -40,9 +41,38 @@ def help(): The following options are defined --load Load the policy immediately --boot Have the system load the policy during boot + --update Automatically adapt the policy so that it will be + treated as an update to the current policy """ -def setpolicy(policytype, policy_name, flags, overwrite): +def create_update_xml(xml): + """ + Adapt the new policy's xml header to be a simple type of an + update to the currently enforce policy on the remote system. + Increases the minor number by '1'. + """ + policystate = server.xenapi.XSPolicy.get_xspolicy() + if int(policystate['type']) == 0: + return xml + curpol = ACMPolicy(xml = policystate['repr']) + curpol_version = curpol.get_version() + tmp = curpol_version.split('.') + if len(tmp) == 2: + maj = int(tmp[0]) + min = int(tmp[1]) + else: + maj = int(tmp) + min = 0 + min += 1 + newpol_version = ""+str(maj)+"."+str(min) + + newpol = ACMPolicy(xml = xml) + newpol.set_frompolicy_name(curpol.get_name()) + newpol.set_frompolicy_version(curpol.get_version()) + newpol.set_policy_version(newpol_version) + return newpol.toxml() + +def setpolicy(policytype, policy_name, flags, overwrite, is_update=False): if xm_main.serverType != xm_main.SERVER_XEN_API: raise OptionError('xm needs to be configured to use the xen-api.') if policytype != xsconstants.ACM_POLICY_ID: @@ -60,6 +90,9 @@ def setpolicy(policytype, policy_name, f f.close() except: raise OptionError("Not a valid policy file") + + if is_update: + xml = create_update_xml(xml) try: policystate = server.xenapi.XSPolicy.set_xspolicy(xs_type, @@ -96,18 +129,21 @@ def main(argv): policytype = argv[1] policy_name = argv[2] + is_update = False flags = 0 if '--load' in argv: flags |= xsconstants.XS_INST_LOAD if '--boot' in argv: flags |= xsconstants.XS_INST_BOOT + if '--update' in argv: + is_update = True overwrite = True if '--nooverwrite' in argv: overwrite = False - setpolicy(policytype, policy_name, flags, overwrite) + setpolicy(policytype, policy_name, flags, overwrite, is_update) if __name__ == '__main__': try: diff -r 5b19839d0365 -r cd51fa91956b tools/security/Makefile --- a/tools/security/Makefile Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/security/Makefile Sun Aug 12 14:50:02 2007 -0600 @@ -12,13 +12,6 @@ CFLAGS += $(shell xml2-config --cfla CFLAGS += $(shell xml2-config --cflags ) CFLAGS += $(shell if [[ $(XML2VERSION) < 2.6.20 ]]; then echo ""; else echo "-DVALIDATE_SCHEMA"; fi ) LDFLAGS += $(shell xml2-config --libs ) # if this does not work, try -L/usr/lib -lxml2 -lz -lpthread -lm - -ifeq ($(ACM_DEFAULT_SECURITY_POLICY),ACM_NULL_POLICY) -POLICY=null -endif -ifeq ($(ACM_DEFAULT_SECURITY_POLICY),ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY) -POLICY=chwall_ste -endif SRCS_TOOL = secpol_tool.c OBJS_TOOL := $(patsubst %.c,%.o,$(filter %.c,$(SRCS_TOOL))) @@ -41,6 +34,7 @@ ACM_SECGEN_CGIDIR = $(ACM_SECGEN_HTMLDIR ACM_SCHEMA = security_policy.xsd ACM_EXAMPLES = client_v1 test +ACM_DEF_POLICIES = default default-ul ACM_POLICY_SUFFIX = security_policy.xml ifeq ($(ACM_SECURITY),y) @@ -61,6 +55,9 @@ install: all $(ACM_CONFIG_FILE) $(INSTALL_DIR) $(DESTDIR)$(ACM_POLICY_DIR)/example for i in $(ACM_EXAMPLES); do \ $(INSTALL_DATA) policies/example/$$i-$(ACM_POLICY_SUFFIX) $(DESTDIR)$(ACM_POLICY_DIR)/example/; \ + done + for i in $(ACM_DEF_POLICIES); do \ + $(INSTALL_DATA) policies/$$i-$(ACM_POLICY_SUFFIX) $(DESTDIR)$(ACM_POLICY_DIR); \ done $(INSTALL_DIR) $(DESTDIR)$(ACM_SCRIPT_DIR) $(INSTALL_PROG) $(ACM_SCRIPTS) $(DESTDIR)$(ACM_SCRIPT_DIR) diff -r 5b19839d0365 -r cd51fa91956b tools/security/policies/default-security_policy.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/security/policies/default-security_policy.xml Sun Aug 12 14:50:02 2007 -0600 @@ -0,0 +1,30 @@ +<?xml version="1.0" ?> +<SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd"> + <PolicyHeader> + <PolicyName>DEFAULT</PolicyName> + <Version>1.0</Version> + </PolicyHeader> + <SimpleTypeEnforcement> + <SimpleTypeEnforcementTypes> + <Type>SystemManagement</Type> + </SimpleTypeEnforcementTypes> + </SimpleTypeEnforcement> + <ChineseWall> + <ChineseWallTypes> + <Type>SystemManagement</Type> + </ChineseWallTypes> + </ChineseWall> + <SecurityLabelTemplate> + <SubjectLabels bootstrap="SystemManagement"> + <VirtualMachineLabel> + <Name>SystemManagement</Name> + <SimpleTypeEnforcementTypes> + <Type>SystemManagement</Type> + </SimpleTypeEnforcementTypes> + <ChineseWallTypes> + <Type/> + </ChineseWallTypes> + </VirtualMachineLabel> + </SubjectLabels> + </SecurityLabelTemplate> +</SecurityPolicyDefinition> diff -r 5b19839d0365 -r cd51fa91956b tools/security/policies/default-ul-security_policy.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/security/policies/default-ul-security_policy.xml Sun Aug 12 14:50:02 2007 -0600 @@ -0,0 +1,41 @@ +<?xml version="1.0" ?> +<SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd"> + <PolicyHeader> + <PolicyName>DEFAULT-UL</PolicyName> + <Version>1.0</Version> + </PolicyHeader> + <SimpleTypeEnforcement> + <SimpleTypeEnforcementTypes> + <Type>SystemManagement</Type> + <Type>__UNLABELED__</Type> + </SimpleTypeEnforcementTypes> + </SimpleTypeEnforcement> + <ChineseWall> + <ChineseWallTypes> + <Type>SystemManagement</Type> + </ChineseWallTypes> + </ChineseWall> + <SecurityLabelTemplate> + <SubjectLabels bootstrap="SystemManagement"> + <VirtualMachineLabel> + <Name>SystemManagement</Name> + <SimpleTypeEnforcementTypes> + <Type>SystemManagement</Type> + <Type>__UNLABELED__</Type> + </SimpleTypeEnforcementTypes> + <ChineseWallTypes> + <Type/> + </ChineseWallTypes> + </VirtualMachineLabel> + <VirtualMachineLabel> + <Name>__UNLABELED__</Name> + <SimpleTypeEnforcementTypes> + <Type>__UNLABELED__</Type> + </SimpleTypeEnforcementTypes> + <ChineseWallTypes> + <Type/> + </ChineseWallTypes> + </VirtualMachineLabel> + </SubjectLabels> + </SecurityLabelTemplate> +</SecurityPolicyDefinition> diff -r 5b19839d0365 -r cd51fa91956b tools/security/xensec_ezpolicy --- a/tools/security/xensec_ezpolicy Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/security/xensec_ezpolicy Sun Aug 12 14:50:02 2007 -0600 @@ -35,6 +35,8 @@ conflict_bmp = None conflict_bmp = None realm_icon = None workload_icon = None + +ACM_LABEL_UNLABELED = '__UNLABELED__' class orgTreeCtrl(wx.TreeCtrl): @@ -870,7 +872,8 @@ class ezFrame(wx.Frame): self.realm_menu.Enable(self.ID_ORGDEL, True) self.realm_menu.Enable(self.ID_ORGEDT, True) self.realm_menu.Enable(self.ID_ORGADD, True) - if len(self.orgs.GetSelections()) > 1: + if len(self.orgs.GetSelections()) > 1 or \ + ACM_LABEL_UNLABELED == self.orgs.GetItemText(item): self.realm_menu.Enable(self.ID_ORGEDT, False) self.realm_menu.Enable(self.ID_ORGADD, False) self.PopupMenu(self.realm_menu) @@ -1622,6 +1625,8 @@ def main(): app = ezApp(0) if len(sys.argv) in [2]: app.Load(sys.argv[1]) + else: + dict2org({'orgs' : [[ACM_LABEL_UNLABELED,[]]], 'cons': []}) app.MainLoop() print "Goodbye" diff -r 5b19839d0365 -r cd51fa91956b tools/xenstat/libxenstat/src/xenstat.c --- a/tools/xenstat/libxenstat/src/xenstat.c Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/xenstat/libxenstat/src/xenstat.c Sun Aug 12 14:50:02 2007 -0600 @@ -677,7 +677,7 @@ static void xenstat_prune_domain(xenstat /* shift entries following specified entry up by one */ if (entry < node->num_domains) { xenstat_domain *domain = &node->domains[entry]; - memmove(domain,domain+1,node->num_domains-entry); + memmove(domain,domain+1,(node->num_domains - entry) * sizeof(xenstat_domain) ); } /* zero out original last entry from node -- not diff -r 5b19839d0365 -r cd51fa91956b tools/xenstore/utils.c --- a/tools/xenstore/utils.c Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/xenstore/utils.c Sun Aug 12 14:50:02 2007 -0600 @@ -10,18 +10,17 @@ #include <signal.h> #include "utils.h" -void xprintf(const char *fmt, ...) +static void default_xprintf(const char *fmt, ...) { va_list args; - - if (!stderr) - return; /* could trace()? */ va_start(args, fmt); vfprintf(stderr, fmt, args); va_end(args); fflush(stderr); } + +void (*xprintf)(const char *fmt, ...) = default_xprintf; void barf(const char *fmt, ...) { diff -r 5b19839d0365 -r cd51fa91956b tools/xenstore/utils.h --- a/tools/xenstore/utils.h Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/xenstore/utils.h Sun Aug 12 14:50:02 2007 -0600 @@ -24,7 +24,7 @@ void barf(const char *fmt, ...) __attrib void barf(const char *fmt, ...) __attribute__((noreturn)); void barf_perror(const char *fmt, ...) __attribute__((noreturn)); -void xprintf(const char *fmt, ...); +void (*xprintf)(const char *fmt, ...); #define eprintf(_fmt, _args...) xprintf("[ERR] %s" _fmt, __FUNCTION__, ##_args) diff -r 5b19839d0365 -r cd51fa91956b tools/xenstore/xenstored_core.c --- a/tools/xenstore/xenstored_core.c Sun Aug 12 12:19:13 2007 -0600 +++ b/tools/xenstore/xenstored_core.c Sun Aug 12 14:50:02 2007 -0600 @@ -1880,14 +1880,14 @@ int main(int argc, char *argv[]) /* close stdin/stdout now we're ready to accept connections */ if (dofork) { - close(STDIN_FILENO); - close(STDOUT_FILENO); - close(STDERR_FILENO); - - /* Get ourselves a nice xenstored crash if these are used. */ - stdin = NULL; - stdout = NULL; - stderr = NULL; + int devnull = open("/dev/null", O_RDWR); + if (devnull == -1) + barf_perror("Could not open /dev/null\n"); + close(STDIN_FILENO); dup2(STDIN_FILENO, devnull); + close(STDOUT_FILENO); dup2(STDOUT_FILENO, devnull); + close(STDERR_FILENO); dup2(STDERR_FILENO, devnull); + close(devnull); + xprintf = trace; } signal(SIGHUP, trigger_reopen_log); diff -r 5b19839d0365 -r cd51fa91956b unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c --- a/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c Sun Aug 12 12:19:13 2007 -0600 +++ b/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c Sun Aug 12 14:50:02 2007 -0600 @@ -10,6 +10,12 @@ struct ap_suspend_info { int do_spin; atomic_t nr_spinning; }; + +/* + * Use a rwlock to protect the hypercall page from being executed in AP context + * while the BSP is re-initializing it after restore. + */ +static DEFINE_RWLOCK(suspend_lock); /* * Spinning prevents, for example, APs touching grant table entries while @@ -27,7 +33,9 @@ static void ap_suspend(void *_info) while (info->do_spin) { cpu_relax(); + read_lock(&suspend_lock); HYPERVISOR_yield(); + read_unlock(&suspend_lock); } mb(); @@ -43,7 +51,9 @@ static int bp_suspend(void) suspend_cancelled = HYPERVISOR_shutdown(SHUTDOWN_suspend); if (!suspend_cancelled) { + write_lock(&suspend_lock); platform_pci_resume(); + write_unlock(&suspend_lock); gnttab_resume(); irq_resume(); } diff -r 5b19839d0365 -r cd51fa91956b xen/acm/acm_chinesewall_hooks.c --- a/xen/acm/acm_chinesewall_hooks.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/acm/acm_chinesewall_hooks.c Sun Aug 12 14:50:02 2007 -0600 @@ -93,6 +93,7 @@ int acm_init_chwall_policy(void) return ACM_OK; } + static int chwall_init_domain_ssid(void **chwall_ssid, ssidref_t ssidref) { struct chwall_ssid *chwall_ssidp = xmalloc(struct chwall_ssid); @@ -104,10 +105,10 @@ static int chwall_init_domain_ssid(void chwall_ssidp->chwall_ssidref = GET_SSIDREF(ACM_CHINESE_WALL_POLICY, ssidref); - if ( (chwall_ssidp->chwall_ssidref >= chwall_bin_pol.max_ssidrefs) - || (chwall_ssidp->chwall_ssidref == ACM_DEFAULT_LOCAL_SSID) ) - { - printkd("%s: ERROR chwall_ssidref(%x) undefined (>max) or unset (0).\n", + if ( chwall_ssidp->chwall_ssidref >= chwall_bin_pol.max_ssidrefs ) + { + printkd("%s: ERROR chwall_ssidref(%x) undefined (>max) or unset " + "(0).\n", __func__, chwall_ssidp->chwall_ssidref); xfree(chwall_ssidp); return ACM_INIT_SSID_ERROR; @@ -117,6 +118,7 @@ static int chwall_init_domain_ssid(void __func__, chwall_ssidp->chwall_ssidref); return ACM_OK; } + static void chwall_free_domain_ssid(void *chwall_ssid) { @@ -205,7 +207,9 @@ chwall_init_state(struct acm_chwall_poli read_lock(&ssid_list_rwlock); - /* go through all domains and adjust policy as if this domain was started now */ + /* go through all domains and adjust policy as if this domain was + * started now + */ for_each_acmssid( rawssid ) { chwall_ssid = @@ -220,8 +224,8 @@ chwall_init_state(struct acm_chwall_poli /* b) check for conflict */ for ( i = 0; i < chwall_buf->chwall_max_types; i++ ) - if (conflict_aggregate_set[i] && - ssidrefs[chwall_ssidref * chwall_buf->chwall_max_types + i]) + if ( conflict_aggregate_set[i] && + ssidrefs[chwall_ssidref * chwall_buf->chwall_max_types + i] ) { printk("%s: CHINESE WALL CONFLICT in type %02x.\n", __func__, i); @@ -231,37 +235,46 @@ chwall_init_state(struct acm_chwall_poli goto out; } + /* set violation and break out of the loop */ - /* c) adapt conflict aggregate set for this domain (notice conflicts) */ + /* c) adapt conflict aggregate set for this domain + * (notice conflicts) + */ for ( i = 0; i < chwall_buf->chwall_max_conflictsets; i++ ) { int common = 0; /* check if conflict_set_i and ssidref have common types */ for ( j = 0; j < chwall_buf->chwall_max_types; j++ ) - if (conflict_sets[i * chwall_buf->chwall_max_types + j] && - ssidrefs[chwall_ssidref * - chwall_buf->chwall_max_types + j]) + if ( conflict_sets[i * chwall_buf->chwall_max_types + j] && + ssidrefs[chwall_ssidref * + chwall_buf->chwall_max_types + j] ) { common = 1; break; } - if (common == 0) + + if ( common == 0 ) continue; /* try next conflict set */ - /* now add types of the conflict set to conflict_aggregate_set (except types in chwall_ssidref) */ + + /* now add types of the conflict set to conflict_aggregate_set + * (except types in chwall_ssidref) + */ for ( j = 0; j < chwall_buf->chwall_max_types; j++ ) - if (conflict_sets[i * chwall_buf->chwall_max_types + j] && - !ssidrefs[chwall_ssidref * - chwall_buf->chwall_max_types + j]) + if ( conflict_sets[i * chwall_buf->chwall_max_types + j] && + !ssidrefs[chwall_ssidref * + chwall_buf->chwall_max_types + j] ) conflict_aggregate_set[j]++; } } out: read_unlock(&ssid_list_rwlock); return violation; - /* returning "violation != 0" means that the currently running set of domains would - * not be possible if the new policy had been enforced before starting them; for chinese - * wall, this means that the new policy includes at least one conflict set of which - * more than one type is currently running */ + /* returning "violation != 0" means that the currently running set of + * domains would not be possible if the new policy had been enforced + * before starting them; for chinese wall, this means that the new + * policy includes at least one conflict set of which more than one + * type is currently running + */ } @@ -348,8 +361,10 @@ static int _chwall_update_policy(u8 *buf memset(conflict_aggregate_set, 0, sizeof(domaintype_t) * chwall_buf->chwall_max_types); - /* 3. now re-calculate the state for the new policy based on running domains; - * this can fail if new policy is conflicting with running domains */ + /* 3. now re-calculate the state for the new policy based on + * running domains; this can fail if new policy is conflicting + * with running domains + */ if ( chwall_init_state(chwall_buf, ssids, conflict_sets, running_types, conflict_aggregate_set, @@ -483,81 +498,27 @@ static int _chwall_pre_domain_create(voi chwall_ssidref = GET_SSIDREF(ACM_CHINESE_WALL_POLICY, ssidref); - if (chwall_ssidref == ACM_DEFAULT_LOCAL_SSID) - { - printk("%s: ERROR CHWALL SSID is NOT SET but policy enforced.\n", - __func__); - return ACM_ACCESS_DENIED; /* catching and indicating config error */ - } - - if (chwall_ssidref >= chwall_bin_pol.max_ssidrefs) + if ( chwall_ssidref >= chwall_bin_pol.max_ssidrefs ) { printk("%s: ERROR chwall_ssidref > max(%x).\n", __func__, chwall_bin_pol.max_ssidrefs - 1); return ACM_ACCESS_DENIED; } + /* A: chinese wall check for conflicts */ - for (i = 0; i < chwall_bin_pol.max_types; i++) - if (chwall_bin_pol.conflict_aggregate_set[i] && - chwall_bin_pol.ssidrefs[chwall_ssidref * - chwall_bin_pol.max_types + i]) + for ( i = 0; i < chwall_bin_pol.max_types; i++ ) + if ( chwall_bin_pol.conflict_aggregate_set[i] && + chwall_bin_pol.ssidrefs[chwall_ssidref * + chwall_bin_pol.max_types + i] ) { printk("%s: CHINESE WALL CONFLICT in type %02x.\n", __func__, i); return ACM_ACCESS_DENIED; } /* B: chinese wall conflict set adjustment (so that other - * other domains simultaneously created are evaluated against this new set)*/ - for ( i = 0; i < chwall_bin_pol.max_conflictsets; i++ ) - { - int common = 0; - /* check if conflict_set_i and ssidref have common types */ - for ( j = 0; j < chwall_bin_pol.max_types; j++ ) - if ( chwall_bin_pol. - conflict_sets[i * chwall_bin_pol.max_types + j] - && chwall_bin_pol.ssidrefs[chwall_ssidref * - chwall_bin_pol.max_types + j] ) - { - common = 1; - break; - } - if (common == 0) - continue; /* try next conflict set */ - /* now add types of the conflict set to conflict_aggregate_set (except types in chwall_ssidref) */ - for ( j = 0; j < chwall_bin_pol.max_types; j++ ) - if ( chwall_bin_pol. - conflict_sets[i * chwall_bin_pol.max_types + j] - && !chwall_bin_pol.ssidrefs[chwall_ssidref * - chwall_bin_pol.max_types + j]) - chwall_bin_pol.conflict_aggregate_set[j]++; - } - return ACM_ACCESS_PERMITTED; -} - - -static void _chwall_post_domain_create(domid_t domid, ssidref_t ssidref) -{ - int i, j; - ssidref_t chwall_ssidref; - - chwall_ssidref = GET_SSIDREF(ACM_CHINESE_WALL_POLICY, ssidref); - /* adjust types ref-count for running domains */ - for ( i = 0; i < chwall_bin_pol.max_types; i++ ) - chwall_bin_pol.running_types[i] += - chwall_bin_pol.ssidrefs[chwall_ssidref * - chwall_bin_pol.max_types + i]; - if ( domid ) - return; - - /* Xen does not call pre-create hook for DOM0; - * to consider type conflicts of any domain with DOM0, we need - * to adjust the conflict_aggregate for DOM0 here the same way it - * is done for non-DOM0 domains in the pre-hook */ - printkd("%s: adjusting security state for DOM0 (ssidref=%x, chwall_ssidref=%x).\n", - __func__, ssidref, chwall_ssidref); - - /* chinese wall conflict set adjustment (so that other - * other domains simultaneously created are evaluated against this new set)*/ + * other domains simultaneously created are evaluated against + * this new set) + */ for ( i = 0; i < chwall_bin_pol.max_conflictsets; i++ ) { int common = 0; @@ -578,6 +539,62 @@ static void _chwall_post_domain_create(d if ( chwall_bin_pol. conflict_sets[i * chwall_bin_pol.max_types + j] && !chwall_bin_pol.ssidrefs[chwall_ssidref * + chwall_bin_pol.max_types + j]) + chwall_bin_pol.conflict_aggregate_set[j]++; + } + return ACM_ACCESS_PERMITTED; +} + + +static void _chwall_post_domain_create(domid_t domid, ssidref_t ssidref) +{ + int i, j; + ssidref_t chwall_ssidref; + + chwall_ssidref = GET_SSIDREF(ACM_CHINESE_WALL_POLICY, ssidref); + /* adjust types ref-count for running domains */ + for ( i = 0; i < chwall_bin_pol.max_types; i++ ) + chwall_bin_pol.running_types[i] += + chwall_bin_pol.ssidrefs[chwall_ssidref * + chwall_bin_pol.max_types + i]; + if ( domid ) + return; + + /* Xen does not call pre-create hook for DOM0; + * to consider type conflicts of any domain with DOM0, we need + * to adjust the conflict_aggregate for DOM0 here the same way it + * is done for non-DOM0 domains in the pre-hook */ + printkd("%s: adjusting security state for DOM0 (ssidref=%x, chwall_ssidref=%x).\n", + __func__, ssidref, chwall_ssidref); + + /* chinese wall conflict set adjustment (so that other + * other domains simultaneously created are evaluated against this new set)*/ + for ( i = 0; i < chwall_bin_pol.max_conflictsets; i++ ) + { + int common = 0; + /* check if conflict_set_i and ssidref have common types */ + for ( j = 0; j < chwall_bin_pol.max_types; j++ ) + if ( chwall_bin_pol. + conflict_sets[i * chwall_bin_pol.max_types + j] + && chwall_bin_pol.ssidrefs[chwall_ssidref * + chwall_bin_pol.max_types + j] ) + { + common = 1; + break; + } + + if ( common == 0 ) + { + /* try next conflict set */ + continue; + } + + /* now add types of the conflict set to conflict_aggregate_set + (except types in chwall_ssidref) */ + for ( j = 0; j < chwall_bin_pol.max_types; j++ ) + if ( chwall_bin_pol. + conflict_sets[i * chwall_bin_pol.max_types + j] + && !chwall_bin_pol.ssidrefs[chwall_ssidref * chwall_bin_pol.max_types + j] ) chwall_bin_pol.conflict_aggregate_set[j]++; } @@ -638,9 +655,15 @@ static void chwall_domain_destroy(void * common = 1; break; } - if (common == 0) - continue; /* try next conflict set, this one does not include any type of chwall_ssidref */ - /* now add types of the conflict set to conflict_aggregate_set (except types in chwall_ssidref) */ + if ( common == 0 ) + { + /* try next conflict set, this one does not include + any type of chwall_ssidref */ + continue; + } + + /* now add types of the conflict set to conflict_aggregate_set + (except types in chwall_ssidref) */ for ( j = 0; j < chwall_bin_pol.max_types; j++ ) if ( chwall_bin_pol. conflict_sets[i * chwall_bin_pol.max_types + j] diff -r 5b19839d0365 -r cd51fa91956b xen/acm/acm_policy.c --- a/xen/acm/acm_policy.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/acm/acm_policy.c Sun Aug 12 14:50:02 2007 -0600 @@ -710,10 +710,10 @@ acm_change_policy(struct acm_change_poli goto acm_chg_policy_exit; } - if ( copy_from_guest(dels.array, + if ( copy_from_guest((u8 *)dels.array, chgpolicy->del_array, chgpolicy->delarray_size) || - copy_from_guest(ssidmap.array, + copy_from_guest((u8 *)ssidmap.array, chgpolicy->chg_array, chgpolicy->chgarray_size) || copy_from_guest(binpolicy, @@ -844,7 +844,7 @@ acm_relabel_domains(struct acm_relabel_d memset(errors.array, 0x0, sizeof(uint32_t) * errors.num_items); } - if ( copy_from_guest(relabels.array, + if ( copy_from_guest((u8 *)relabels.array, relabel->relabel_map, relabel->relabel_map_size) ) { diff -r 5b19839d0365 -r cd51fa91956b xen/acm/acm_simple_type_enforcement_hooks.c --- a/xen/acm/acm_simple_type_enforcement_hooks.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/acm/acm_simple_type_enforcement_hooks.c Sun Aug 12 14:50:02 2007 -0600 @@ -408,7 +408,7 @@ _ste_update_policy(u8 *buf, u32 buf_size ste_bin_pol.max_ssidrefs = ste_buf->ste_max_ssidrefs; ste_bin_pol.ssidrefs = (domaintype_t *)ssidrefsbuf; - if ( ste_init_state(NULL) ) + if ( ste_init_state(errors) ) { /* new policy conflicts with sharing of running domains */ printk("%s: New policy conflicts with running domains. " diff -r 5b19839d0365 -r cd51fa91956b xen/arch/powerpc/multiboot2.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xen/arch/powerpc/multiboot2.c Sun Aug 12 14:50:02 2007 -0600 @@ -0,0 +1,67 @@ +/* + * 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright IBM Corp. 2006, 2007 + * + * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx> + */ + +#include <xen/config.h> +#include <xen/lib.h> +#include <xen/multiboot2.h> +#include <asm/boot.h> +#include <asm/init.h> + +static struct mb2_tag_module *mb2_tag_mod_find(struct mb2_tag_header *tags, + const char *type) +{ + struct mb2_tag_header *tag; + + for_each_tag(tag, tags) { + if (tag->key == MB2_TAG_MODULE) { + struct mb2_tag_module *mod = (struct mb2_tag_module *)tag; + if (!strcmp((char *)mod->type, type)) + return mod; + } + } + return NULL; +} + +void parse_multiboot(ulong tags_addr) +{ + struct mb2_tag_header *tags = (struct mb2_tag_header *)tags_addr; + struct mb2_tag_module *mod; + + if (tags->key != MB2_TAG_START) + return; + + mod = mb2_tag_mod_find(tags, "kernel"); + if (mod) { + xen_cmdline = (char *)mod->cmdline; + } + + mod = mb2_tag_mod_find(tags, "dom0"); + if (mod) { + dom0_addr = mod->addr; + dom0_len = mod->size; + dom0_cmdline = (char *)mod->cmdline; + } + + mod = mb2_tag_mod_find(tags, "initrd"); + if (mod) { + initrd_start = mod->addr; + initrd_len = mod->size; + } +} diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/domain_build.c --- a/xen/arch/x86/domain_build.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/domain_build.c Sun Aug 12 14:50:02 2007 -0600 @@ -316,9 +316,9 @@ int __init construct_dom0( parms.pae ? ", PAE" : "", elf_msb(&elf) ? "msb" : "lsb", elf.pstart, elf.pend); - if ( parms.bsd_symtab ) + if ( elf.bsd_symtab_pstart ) printk(" Dom0 symbol map 0x%" PRIx64 " -> 0x%" PRIx64 "\n", - elf.sstart, elf.send); + elf.bsd_symtab_pstart, elf.bsd_symtab_pend); if ( !compatible ) { @@ -388,7 +388,7 @@ int __init construct_dom0( v_start = parms.virt_base; vkern_start = parms.virt_kstart; vkern_end = parms.virt_kend; - vinitrd_start = round_pgup(parms.virt_end); + vinitrd_start = round_pgup(vkern_end); vinitrd_end = vinitrd_start + initrd_len; vphysmap_start = round_pgup(vinitrd_end); vphysmap_end = vphysmap_start + (nr_pages * (!is_pv_32on64_domain(d) ? @@ -798,7 +798,7 @@ int __init construct_dom0( /* Copy the OS image and free temporary buffer. */ elf.dest = (void*)vkern_start; - elf_xen_dom_load_binary(&elf, &parms); + elf_load_binary(&elf); if ( UNSET_ADDR != parms.virt_hypercall ) { diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/Makefile --- a/xen/arch/x86/genapic/Makefile Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/genapic/Makefile Sun Aug 12 14:50:02 2007 -0600 @@ -1,7 +1,5 @@ obj-y += bigsmp.o obj-y += bigsmp.o obj-y += default.o obj-y += delivery.o -obj-y += es7000.o -obj-y += es7000plat.o obj-y += probe.o obj-y += summit.o diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/bigsmp.c --- a/xen/arch/x86/genapic/bigsmp.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/genapic/bigsmp.c Sun Aug 12 14:50:02 2007 -0600 @@ -13,7 +13,7 @@ static int dmi_bigsmp; /* can be set by dmi scanners */ -static __init int hp_ht_bigsmp(struct dmi_system_id *d) +static __init int force_bigsmp(struct dmi_system_id *d) { printk(KERN_NOTICE "%s detected: force use of apic=bigsmp\n", d->ident); dmi_bigsmp = 1; @@ -22,15 +22,19 @@ static __init int hp_ht_bigsmp(struct dm static struct dmi_system_id __initdata bigsmp_dmi_table[] = { - { hp_ht_bigsmp, "HP ProLiant DL760 G2", { + { force_bigsmp, "HP ProLiant DL760 G2", { DMI_MATCH(DMI_BIOS_VENDOR, "HP"), DMI_MATCH(DMI_BIOS_VERSION, "P44-"), }}, - { hp_ht_bigsmp, "HP ProLiant DL740", { + { force_bigsmp, "HP ProLiant DL740", { DMI_MATCH(DMI_BIOS_VENDOR, "HP"), DMI_MATCH(DMI_BIOS_VERSION, "P47-"), }}, + { force_bigsmp, "UNISYS ES7000-ONE", { + DMI_MATCH(DMI_PRODUCT_NAME, "ES7000-ONE") + }}, + { } }; diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/es7000.c --- a/xen/arch/x86/genapic/es7000.c Sun Aug 12 12:19:13 2007 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* - * APIC driver for the Unisys ES7000 chipset. - */ -#include <xen/config.h> -#include <xen/cpumask.h> -#include <asm/current.h> -#include <asm/mpspec.h> -#include <asm/genapic.h> -#include <asm/fixmap.h> -#include <asm/apicdef.h> -#include <asm/atomic.h> -#include <xen/kernel.h> -#include <xen/string.h> -#include <xen/smp.h> -#include <xen/init.h> -#include <asm/mach-es7000/mach_mpparse.h> - -static __init int probe_es7000(void) -{ - /* probed later in mptable/ACPI hooks */ - return 0; -} - -struct genapic apic_es7000 = { - APIC_INIT("es7000", probe_es7000), - GENAPIC_PHYS -}; diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/es7000plat.c --- a/xen/arch/x86/genapic/es7000plat.c Sun Aug 12 12:19:13 2007 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,141 +0,0 @@ -/* - * Written by: Garry Forsgren, Unisys Corporation - * Natalie Protasevich, Unisys Corporation - * Modified by: Raj Subrahmanian <raj.subrahmanian@xxxxxxxxxx> Unisys Corp. - * This file contains the code to configure and interface - * with Unisys ES7000 series hardware system manager. - * - * Copyright (c) 2003 Unisys Corporation. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., 59 - * Temple Place - Suite 330, Boston MA 02111-1307, USA. - * - * Contact information: Unisys Corporation, Township Line & Union Meeting - * Roads-A, Unisys Way, Blue Bell, Pennsylvania, 19424, or: - * - * http://www.unisys.com - */ - -#include <xen/config.h> -#include <xen/types.h> -#include <xen/kernel.h> -#include <xen/smp.h> -#include <xen/string.h> -#include <xen/spinlock.h> -#include <xen/errno.h> -#include <xen/init.h> -#include <xen/acpi.h> -#include <asm/io.h> -#include <asm/smp.h> -#include <asm/apicdef.h> - -#define MIP_REG 1 -#define MIP_PSAI_REG 4 - -struct acpi_table_sdt { - unsigned long pa; - unsigned long count; - struct { - unsigned long pa; - enum acpi_table_id id; - unsigned long size; - } entry[50]; -}; - -struct oem_table { - struct acpi_table_header Header; - u32 OEMTableAddr; - u32 OEMTableSize; -}; - -int __init -parse_unisys_oem(char *oemptr) -{ - int i; - int success = 0; - unsigned char type, size; - char *tp = NULL; - - tp = oemptr; - - tp += 8; - - for (i=0; i <= 6; i++) { - type = *tp++; - size = *tp++; - tp -= 2; - switch (type) { - case MIP_REG: - case MIP_PSAI_REG: - success++; - break; - default: - break; - } - tp += size; - } - - return (success >= 2); -} - -int __init -find_unisys_acpi_oem_table(unsigned long *oem_addr) -{ - struct acpi_table_rsdp *rsdp = NULL; - unsigned long rsdp_phys = 0; - struct acpi_table_header *header = NULL; - int i; - struct acpi_table_sdt sdt = { 0 }; /* initialise sdt.count */ - - rsdp_phys = acpi_find_rsdp(); - rsdp = __va(rsdp_phys); - if (rsdp->rsdt_address) { - struct acpi_table_rsdt *mapped_rsdt = NULL; - sdt.pa = rsdp->rsdt_address; - - header = (struct acpi_table_header *) - __acpi_map_table(sdt.pa, sizeof(struct acpi_table_header)); - if (!header) - return -ENODEV; - - sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 3; - mapped_rsdt = (struct acpi_table_rsdt *) - __acpi_map_table(sdt.pa, header->length); - if (!mapped_rsdt) - return -ENODEV; - - header = &mapped_rsdt->header; - - for (i = 0; i < sdt.count; i++) - sdt.entry[i].pa = (unsigned long) mapped_rsdt->entry[i]; - }; - for (i = 0; i < sdt.count; i++) { - - header = (struct acpi_table_header *) - __acpi_map_table(sdt.entry[i].pa, - sizeof(struct acpi_table_header)); - if (!header) - continue; - if (!strncmp((char *) &header->signature, "OEM1", 4)) { - if (!strncmp((char *) &header->oem_id, "UNISYS", 6)) { - void *addr; - struct oem_table *t; - acpi_table_print(header, sdt.entry[i].pa); - t = (struct oem_table *) __acpi_map_table(sdt.entry[i].pa, header->length); - addr = (void *) __acpi_map_table(t->OEMTableAddr, t->OEMTableSize); - *oem_addr = (unsigned long) addr; - return 0; - } - } - } - return -1; -} diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/probe.c --- a/xen/arch/x86/genapic/probe.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/genapic/probe.c Sun Aug 12 14:50:02 2007 -0600 @@ -16,7 +16,6 @@ extern struct genapic apic_summit; extern struct genapic apic_bigsmp; -extern struct genapic apic_es7000; extern struct genapic apic_default; struct genapic *genapic; @@ -24,7 +23,6 @@ struct genapic *apic_probe[] __initdata struct genapic *apic_probe[] __initdata = { &apic_summit, &apic_bigsmp, - &apic_es7000, &apic_default, /* must be last */ NULL, }; diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/hvm/irq.c --- a/xen/arch/x86/hvm/irq.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/hvm/irq.c Sun Aug 12 14:50:02 2007 -0600 @@ -395,9 +395,33 @@ static int irq_save_pci(struct domain *d static int irq_save_pci(struct domain *d, hvm_domain_context_t *h) { struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq; + unsigned int asserted, pdev, pintx; + int rc; + + spin_lock(&d->arch.hvm_domain.irq_lock); + + pdev = hvm_irq->callback_via.pci.dev; + pintx = hvm_irq->callback_via.pci.intx; + asserted = (hvm_irq->callback_via_asserted && + (hvm_irq->callback_via_type == HVMIRQ_callback_pci_intx)); + + /* + * Deassert virtual interrupt via PCI INTx line. The virtual interrupt + * status is not save/restored, so the INTx line must be deasserted in + * the restore context. + */ + if ( asserted ) + __hvm_pci_intx_deassert(d, pdev, pintx); /* Save PCI IRQ lines */ - return ( hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx) ); + rc = hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx); + + if ( asserted ) + __hvm_pci_intx_assert(d, pdev, pintx); + + spin_unlock(&d->arch.hvm_domain.irq_lock); + + return rc; } static int irq_save_isa(struct domain *d, hvm_domain_context_t *h) diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/hvm/svm/svm.c --- a/xen/arch/x86/hvm/svm/svm.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/hvm/svm/svm.c Sun Aug 12 14:50:02 2007 -0600 @@ -2159,6 +2159,7 @@ static void svm_do_msr_access( case MSR_K8_MC2_STATUS: case MSR_K8_MC3_STATUS: case MSR_K8_MC4_STATUS: + case MSR_K8_MC5_STATUS: /* No point in letting the guest see real MCEs */ msr_content = 0; break; diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/hvm/vmx/vmx.c --- a/xen/arch/x86/hvm/vmx/vmx.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/hvm/vmx/vmx.c Sun Aug 12 14:50:02 2007 -0600 @@ -2596,6 +2596,7 @@ static int vmx_do_msr_read(struct cpu_us case MSR_K8_MC2_STATUS: case MSR_K8_MC3_STATUS: case MSR_K8_MC4_STATUS: + case MSR_K8_MC5_STATUS: /* No point in letting the guest see real MCEs */ msr_content = 0; break; diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/mm/hap/guest_walk.c --- a/xen/arch/x86/mm/hap/guest_walk.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/mm/hap/guest_walk.c Sun Aug 12 14:50:02 2007 -0600 @@ -84,7 +84,7 @@ unsigned long hap_gva_to_gfn(GUEST_PAGIN mfn = get_mfn_from_gpfn(gpfn); if ( mfn == INVALID_MFN ) { - HAP_PRINTK("bad pfn=0x%lx from gva=0x%lx at lev%d\n", gpfn, gva, + HAP_PRINTK("bad pfn=0x%lx from gva=0x%lx at lev%d\n", gpfn, gva, lev); success = 0; break; diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/mm/hap/hap.c --- a/xen/arch/x86/mm/hap/hap.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/mm/hap/hap.c Sun Aug 12 14:50:02 2007 -0600 @@ -73,7 +73,7 @@ int hap_disable_log_dirty(struct domain hap_unlock(d); /* set l1e entries of P2M table with normal mode */ - p2m_set_flags_global(d, __PAGE_HYPERVISOR|_PAGE_USER); + p2m_set_flags_global(d, __PAGE_HYPERVISOR|_PAGE_USER); return 0; } @@ -111,7 +111,7 @@ static struct page_info *hap_alloc(struc static void hap_free(struct domain *d, mfn_t mfn) { - struct page_info *pg = mfn_to_page(mfn); + struct page_info *pg = mfn_to_page(mfn); ASSERT(hap_locked_by_me(d)); @@ -128,7 +128,7 @@ static struct page_info *hap_alloc_p2m_p #if CONFIG_PAGING_LEVELS == 3 /* Under PAE mode, top-level P2M table should be allocated below 4GB space - * because the size of h_cr3 is only 32-bit. We use alloc_domheap_pages to + * because the size of h_cr3 is only 32-bit. We use alloc_domheap_pages to * force this requirement, and exchange the guaranteed 32-bit-clean * page for the one we just hap_alloc()ed. */ if ( d->arch.paging.hap.p2m_pages == 0 @@ -166,9 +166,9 @@ void hap_free_p2m_page(struct domain *d, HAP_ERROR("Odd p2m page count c=%#x t=%"PRtype_info"\n", pg->count_info, pg->u.inuse.type_info); pg->count_info = 0; - /* Free should not decrement domain's total allocation, since + /* Free should not decrement domain's total allocation, since * these pages were allocated without an owner. */ - page_set_owner(pg, NULL); + page_set_owner(pg, NULL); free_domheap_page(pg); d->arch.paging.hap.p2m_pages--; ASSERT(d->arch.paging.hap.p2m_pages >= 0); @@ -221,7 +221,7 @@ hap_set_allocation(struct domain *d, uns pg->count_info = 0; free_domheap_page(pg); } - + /* Check to see if we need to yield and try again */ if ( preempted && hypercall_preempt_check() ) { @@ -275,7 +275,7 @@ static void hap_install_xen_entries_in_l l2e = hap_map_domain_page(l2hmfn); ASSERT(l2e != NULL); - + /* Copy the common Xen mappings from the idle domain */ memcpy(&l2e[L2_PAGETABLE_FIRST_XEN_SLOT & (L2_PAGETABLE_ENTRIES-1)], &idle_pg_table_l2[L2_PAGETABLE_FIRST_XEN_SLOT], @@ -318,7 +318,7 @@ static void hap_install_xen_entries_in_l l2e = hap_map_domain_page(l2mfn); ASSERT(l2e != NULL); - + /* Copy the common Xen mappings from the idle domain */ memcpy(&l2e[L2_PAGETABLE_FIRST_XEN_SLOT], &idle_pg_table[L2_PAGETABLE_FIRST_XEN_SLOT], @@ -362,7 +362,7 @@ static mfn_t hap_make_monitor_table(stru } #elif CONFIG_PAGING_LEVELS == 3 { - mfn_t m3mfn, m2mfn; + mfn_t m3mfn, m2mfn; l3_pgentry_t *l3e; l2_pgentry_t *l2e; int i; @@ -384,8 +384,8 @@ static mfn_t hap_make_monitor_table(stru l2e = hap_map_domain_page(m2mfn); for ( i = 0; i < L3_PAGETABLE_ENTRIES; i++ ) l2e[l2_table_offset(LINEAR_PT_VIRT_START) + i] = - (l3e_get_flags(l3e[i]) & _PAGE_PRESENT) - ? l2e_from_pfn(l3e_get_pfn(l3e[i]), __PAGE_HYPERVISOR) + (l3e_get_flags(l3e[i]) & _PAGE_PRESENT) + ? l2e_from_pfn(l3e_get_pfn(l3e[i]), __PAGE_HYPERVISOR) : l2e_empty(); hap_unmap_domain_page(l2e); hap_unmap_domain_page(l3e); @@ -536,7 +536,7 @@ void hap_teardown(struct domain *d) d->arch.paging.hap.p2m_pages); ASSERT(d->arch.paging.hap.total_pages == 0); } - + d->arch.paging.mode &= ~PG_log_dirty; hap_unlock(d); @@ -555,7 +555,7 @@ int hap_domctl(struct domain *d, xen_dom hap_unlock(d); if ( preempted ) /* Not finished. Set up to re-run the call. */ - rc = hypercall_create_continuation(__HYPERVISOR_domctl, "h", + rc = hypercall_create_continuation(__HYPERVISOR_domctl, "h", u_domctl); else /* Finished. Return the new allocation */ @@ -578,11 +578,11 @@ void hap_vcpu_init(struct vcpu *v) /************************************************/ /* HAP PAGING MODE FUNCTIONS */ /************************************************/ -/* +/* * HAP guests can handle page faults (in the guest page tables) without * needing any action from Xen, so we should not be intercepting them. */ -static int hap_page_fault(struct vcpu *v, unsigned long va, +static int hap_page_fault(struct vcpu *v, unsigned long va, struct cpu_user_regs *regs) { HAP_ERROR("Intercepted a guest #PF (%u:%u) with HAP enabled.\n", @@ -591,9 +591,9 @@ static int hap_page_fault(struct vcpu *v return 0; } -/* +/* * HAP guests can handle invlpg without needing any action from Xen, so - * should not be intercepting it. + * should not be intercepting it. */ static int hap_invlpg(struct vcpu *v, unsigned long va) { @@ -649,7 +649,7 @@ static void hap_update_paging_modes(stru } #if CONFIG_PAGING_LEVELS == 3 -static void p2m_install_entry_in_monitors(struct domain *d, l3_pgentry_t *l3e) +static void p2m_install_entry_in_monitors(struct domain *d, l3_pgentry_t *l3e) /* Special case, only used for PAE hosts: update the mapping of the p2m * table. This is trivial in other paging modes (one top-level entry * points to the top-level p2m, no maintenance needed), but PAE makes @@ -660,13 +660,13 @@ static void p2m_install_entry_in_monitor l2_pgentry_t *ml2e; struct vcpu *v; unsigned int index; - + index = ((unsigned long)l3e & ~PAGE_MASK) / sizeof(l3_pgentry_t); ASSERT(index < MACHPHYS_MBYTES>>1); - + for_each_vcpu ( d, v ) { - if ( pagetable_get_pfn(v->arch.monitor_table) == 0 ) + if ( pagetable_get_pfn(v->arch.monitor_table) == 0 ) continue; ASSERT(paging_mode_external(v->domain)); @@ -689,7 +689,7 @@ static void p2m_install_entry_in_monitor } #endif -static void +static void hap_write_p2m_entry(struct vcpu *v, unsigned long gfn, l1_pgentry_t *p, mfn_t table_mfn, l1_pgentry_t new, unsigned int level) { @@ -698,12 +698,12 @@ hap_write_p2m_entry(struct vcpu *v, unsi safe_write_pte(p, new); #if CONFIG_PAGING_LEVELS == 3 /* install P2M in monitor table for PAE Xen */ - if ( level == 3 ) + if ( level == 3 ) /* We have written to the p2m l3: need to sync the per-vcpu * copies of it in the monitor tables */ p2m_install_entry_in_monitors(v->domain, (l3_pgentry_t *)p); #endif - + hap_unlock(v->domain); } @@ -715,7 +715,7 @@ static unsigned long hap_gva_to_gfn_real /* Entry points into this mode of the hap code. */ struct paging_mode hap_paging_real_mode = { - .page_fault = hap_page_fault, + .page_fault = hap_page_fault, .invlpg = hap_invlpg, .gva_to_gfn = hap_gva_to_gfn_real_mode, .update_cr3 = hap_update_cr3, @@ -725,7 +725,7 @@ struct paging_mode hap_paging_real_mode }; struct paging_mode hap_paging_protected_mode = { - .page_fault = hap_page_fault, + .page_fault = hap_page_fault, .invlpg = hap_invlpg, .gva_to_gfn = hap_gva_to_gfn_2level, .update_cr3 = hap_update_cr3, @@ -735,7 +735,7 @@ struct paging_mode hap_paging_protected_ }; struct paging_mode hap_paging_pae_mode = { - .page_fault = hap_page_fault, + .page_fault = hap_page_fault, .invlpg = hap_invlpg, .gva_to_gfn = hap_gva_to_gfn_3level, .update_cr3 = hap_update_cr3, @@ -745,7 +745,7 @@ struct paging_mode hap_paging_pae_mode = }; struct paging_mode hap_paging_long_mode = { - .page_fault = hap_page_fault, + .page_fault = hap_page_fault, .invlpg = hap_invlpg, .gva_to_gfn = hap_gva_to_gfn_4level, .update_cr3 = hap_update_cr3, diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/mm/p2m.c --- a/xen/arch/x86/mm/p2m.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/mm/p2m.c Sun Aug 12 14:50:02 2007 -0600 @@ -2,12 +2,12 @@ * arch/x86/mm/p2m.c * * physical-to-machine mappings for automatically-translated domains. - * + * * Parts of this code are Copyright (c) 2007 by Advanced Micro Devices. * Parts of this code are Copyright (c) 2006 by XenSource Inc. * Parts of this code are Copyright (c) 2006 by Michael A Fetterman * Parts based on earlier work by Michael A Fetterman, Ian Pratt et al. - * + * * 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 @@ -34,7 +34,7 @@ /* * The P2M lock. This protects all updates to the p2m table. - * Updates are expected to be safe against concurrent reads, + * Updates are expected to be safe against concurrent reads, * which do *not* require the lock. * * Locking discipline: always acquire this lock before the shadow or HAP one @@ -80,7 +80,7 @@ #define P2M_DEBUG(_f, _a...) \ debugtrace_printk("p2mdebug: %s(): " _f, __func__, ##_a) #else -#define P2M_DEBUG(_f, _a...) do { (void)(_f); } while(0) +#define P2M_DEBUG(_f, _a...) do { (void)(_f); } while(0) #endif @@ -119,8 +119,8 @@ p2m_find_entry(void *table, unsigned lon // Returns 0 on error. // static int -p2m_next_level(struct domain *d, mfn_t *table_mfn, void **table, - unsigned long *gfn_remainder, unsigned long gfn, u32 shift, +p2m_next_level(struct domain *d, mfn_t *table_mfn, void **table, + unsigned long *gfn_remainder, unsigned long gfn, u32 shift, u32 max, unsigned long type) { l1_pgentry_t *p2m_entry; @@ -146,7 +146,7 @@ p2m_next_level(struct domain *d, mfn_t * switch ( type ) { case PGT_l3_page_table: - paging_write_p2m_entry(d, gfn, + paging_write_p2m_entry(d, gfn, p2m_entry, *table_mfn, new_entry, 4); break; case PGT_l2_page_table: @@ -154,11 +154,11 @@ p2m_next_level(struct domain *d, mfn_t * /* for PAE mode, PDPE only has PCD/PWT/P bits available */ new_entry = l1e_from_pfn(mfn_x(page_to_mfn(pg)), _PAGE_PRESENT); #endif - paging_write_p2m_entry(d, gfn, + paging_write_p2m_entry(d, gfn, p2m_entry, *table_mfn, new_entry, 3); break; case PGT_l1_page_table: - paging_write_p2m_entry(d, gfn, + paging_write_p2m_entry(d, gfn, p2m_entry, *table_mfn, new_entry, 2); break; default: @@ -216,7 +216,7 @@ set_p2m_entry(struct domain *d, unsigned ASSERT(p2m_entry); /* Track the highest gfn for which we have ever had a valid mapping */ - if ( mfn_valid(mfn) && (gfn > d->arch.p2m.max_mapped_pfn) ) + if ( mfn_valid(mfn) && (gfn > d->arch.p2m.max_mapped_pfn) ) d->arch.p2m.max_mapped_pfn = gfn; if ( mfn_valid(mfn) ) @@ -229,7 +229,7 @@ set_p2m_entry(struct domain *d, unsigned /* Success */ rv = 1; - + out: unmap_domain_page(table); return rv; @@ -250,7 +250,7 @@ void p2m_init(struct domain *d) // controlled by CONFIG_PAGING_LEVELS). // // The alloc_page and free_page functions will be used to get memory to -// build the p2m, and to release it again at the end of day. +// build the p2m, and to release it again at the end of day. // // Returns 0 for success or -errno. // @@ -264,7 +264,7 @@ int p2m_alloc_table(struct domain *d, struct page_info *page, *p2m_top; unsigned int page_count = 0; unsigned long gfn; - + p2m_lock(d); if ( pagetable_get_pfn(d->arch.phys_table) != 0 ) @@ -288,7 +288,7 @@ int p2m_alloc_table(struct domain *d, list_add_tail(&p2m_top->list, &d->arch.p2m.pages); p2m_top->count_info = 1; - p2m_top->u.inuse.type_info = + p2m_top->u.inuse.type_info = #if CONFIG_PAGING_LEVELS == 4 PGT_l4_page_table #elif CONFIG_PAGING_LEVELS == 3 @@ -301,7 +301,7 @@ int p2m_alloc_table(struct domain *d, d->arch.phys_table = pagetable_from_mfn(page_to_mfn(p2m_top)); P2M_PRINTK("populating p2m table\n"); - + /* Initialise physmap tables for slot zero. Other code assumes this. */ gfn = 0; mfn = _mfn(INVALID_MFN); @@ -365,17 +365,17 @@ gfn_to_mfn_foreign(struct domain *d, uns paddr_t addr = ((paddr_t)gpfn) << PAGE_SHIFT; l2_pgentry_t *l2e; l1_pgentry_t *l1e; - + ASSERT(paging_mode_translate(d)); mfn = pagetable_get_mfn(d->arch.phys_table); - if ( gpfn > d->arch.p2m.max_mapped_pfn ) + if ( gpfn > d->arch.p2m.max_mapped_pfn ) /* This pfn is higher than the highest the p2m map currently holds */ return _mfn(INVALID_MFN); #if CONFIG_PAGING_LEVELS >= 4 - { + { l4_pgentry_t *l4e = map_domain_page(mfn_x(mfn)); l4e += l4_table_offset(addr); if ( (l4e_get_flags(*l4e) & _PAGE_PRESENT) == 0 ) @@ -398,7 +398,7 @@ gfn_to_mfn_foreign(struct domain *d, uns * the bounds of the p2m. */ l3e += (addr >> L3_PAGETABLE_SHIFT); #else - l3e += l3_table_offset(addr); + l3e += l3_table_offset(addr); #endif if ( (l3e_get_flags(*l3e) & _PAGE_PRESENT) == 0 ) { @@ -443,18 +443,18 @@ static void audit_p2m(struct domain *d) mfn_t p2mfn; unsigned long orphans_d = 0, orphans_i = 0, mpbad = 0, pmbad = 0; int test_linear; - + if ( !paging_mode_translate(d) ) return; //P2M_PRINTK("p2m audit starts\n"); - test_linear = ( (d == current->domain) + test_linear = ( (d == current->domain) && !pagetable_is_null(current->arch.monitor_table) ); if ( test_linear ) - local_flush_tlb(); - - /* Audit part one: walk the domain's page allocation list, checking + local_flush_tlb(); + + /* Audit part one: walk the domain's page allocation list, checking * the m2p entries. */ for ( entry = d->page_list.next; entry != &d->page_list; @@ -463,11 +463,11 @@ static void audit_p2m(struct domain *d) page = list_entry(entry, struct page_info, list); mfn = mfn_x(page_to_mfn(page)); - // P2M_PRINTK("auditing guest page, mfn=%#lx\n", mfn); + // P2M_PRINTK("auditing guest page, mfn=%#lx\n", mfn); od = page_get_owner(page); - if ( od != d ) + if ( od != d ) { P2M_PRINTK("wrong owner %#lx -> %p(%u) != %p(%u)\n", mfn, od, (od?od->domain_id:-1), d, d->domain_id); @@ -475,19 +475,19 @@ static void audit_p2m(struct domain *d) } gfn = get_gpfn_from_mfn(mfn); - if ( gfn == INVALID_M2P_ENTRY ) + if ( gfn == INVALID_M2P_ENTRY ) { orphans_i++; //P2M_PRINTK("orphaned guest page: mfn=%#lx has invalid gfn\n", - // mfn); + // mfn); continue; } - if ( gfn == 0x55555555 ) + if ( gfn == 0x55555555 ) { orphans_d++; - //P2M_PRINTK("orphaned guest page: mfn=%#lx has debug gfn\n", - // mfn); + //P2M_PRINTK("orphaned guest page: mfn=%#lx has debug gfn\n", + // mfn); continue; } @@ -503,7 +503,7 @@ static void audit_p2m(struct domain *d) : -1u)); /* This m2p entry is stale: the domain has another frame in * this physical slot. No great disaster, but for neatness, - * blow away the m2p entry. */ + * blow away the m2p entry. */ set_gpfn_from_mfn(mfn, INVALID_M2P_ENTRY, __PAGE_HYPERVISOR|_PAGE_USER); } @@ -517,9 +517,9 @@ static void audit_p2m(struct domain *d) } } - // P2M_PRINTK("OK: mfn=%#lx, gfn=%#lx, p2mfn=%#lx, lp2mfn=%#lx\n", - // mfn, gfn, p2mfn, lp2mfn); - } + // P2M_PRINTK("OK: mfn=%#lx, gfn=%#lx, p2mfn=%#lx, lp2mfn=%#lx\n", + // mfn, gfn, p2mfn, lp2mfn); + } /* Audit part two: walk the domain's p2m table, checking the entries. */ if ( pagetable_get_pfn(d->arch.phys_table) != 0 ) @@ -527,7 +527,7 @@ static void audit_p2m(struct domain *d) l2_pgentry_t *l2e; l1_pgentry_t *l1e; int i1, i2; - + #if CONFIG_PAGING_LEVELS == 4 l4_pgentry_t *l4e; l3_pgentry_t *l3e; @@ -553,8 +553,8 @@ static void audit_p2m(struct domain *d) } l3e = map_domain_page(mfn_x(_mfn(l4e_get_pfn(l4e[i4])))); #endif /* now at levels 3 or 4... */ - for ( i3 = 0; - i3 < ((CONFIG_PAGING_LEVELS==4) ? L3_PAGETABLE_ENTRIES : 8); + for ( i3 = 0; + i3 < ((CONFIG_PAGING_LEVELS==4) ? L3_PAGETABLE_ENTRIES : 8); i3++ ) { if ( !(l3e_get_flags(l3e[i3]) & _PAGE_PRESENT) ) @@ -572,7 +572,7 @@ static void audit_p2m(struct domain *d) continue; } l1e = map_domain_page(mfn_x(_mfn(l2e_get_pfn(l2e[i2])))); - + for ( i1 = 0; i1 < L1_PAGETABLE_ENTRIES; i1++, gfn++ ) { if ( !(l1e_get_flags(l1e[i1]) & _PAGE_PRESENT) ) @@ -610,14 +610,14 @@ static void audit_p2m(struct domain *d) } //P2M_PRINTK("p2m audit complete\n"); - //if ( orphans_i | orphans_d | mpbad | pmbad ) + //if ( orphans_i | orphans_d | mpbad | pmbad ) // P2M_PRINTK("p2m audit found %lu orphans (%lu inval %lu debug)\n", // orphans_i + orphans_d, orphans_i, orphans_d, - if ( mpbad | pmbad ) + if ( mpbad | pmbad ) P2M_PRINTK("p2m audit found %lu odd p2m, %lu bad m2p entries\n", pmbad, mpbad); } -#else +#else #define audit_p2m(_d) do { (void)(_d); } while(0) #endif /* P2M_AUDIT */ @@ -645,7 +645,7 @@ guest_physmap_remove_page(struct domain audit_p2m(d); p2m_remove_page(d, gfn, mfn); audit_p2m(d); - p2m_unlock(d); + p2m_unlock(d); } void @@ -683,11 +683,11 @@ guest_physmap_add_page(struct domain *d, /* This machine frame is already mapped at another physical address */ P2M_DEBUG("aliased! mfn=%#lx, old gfn=%#lx, new gfn=%#lx\n", mfn, ogfn, gfn); - if ( mfn_valid(omfn = gfn_to_mfn(d, ogfn)) ) - { - P2M_DEBUG("old gfn=%#lx -> mfn %#lx\n", + if ( mfn_valid(omfn = gfn_to_mfn(d, ogfn)) ) + { + P2M_DEBUG("old gfn=%#lx -> mfn %#lx\n", ogfn , mfn_x(omfn)); - if ( mfn_x(omfn) == mfn ) + if ( mfn_x(omfn) == mfn ) p2m_remove_page(d, ogfn, mfn); } } @@ -720,15 +720,15 @@ void p2m_set_flags_global(struct domain int i4; #endif /* CONFIG_PAGING_LEVELS == 4 */ #endif /* CONFIG_PAGING_LEVELS >= 3 */ - + if ( !paging_mode_translate(d) ) return; - + if ( pagetable_get_pfn(d->arch.phys_table) == 0 ) return; p2m_lock(d); - + #if CONFIG_PAGING_LEVELS == 4 l4e = map_domain_page(mfn_x(pagetable_get_mfn(d->arch.phys_table))); #elif CONFIG_PAGING_LEVELS == 3 @@ -739,52 +739,52 @@ void p2m_set_flags_global(struct domain #if CONFIG_PAGING_LEVELS >= 3 #if CONFIG_PAGING_LEVELS >= 4 - for ( i4 = 0; i4 < L4_PAGETABLE_ENTRIES; i4++ ) - { - if ( !(l4e_get_flags(l4e[i4]) & _PAGE_PRESENT) ) - { - continue; - } - l3e = map_domain_page(l4e_get_pfn(l4e[i4])); + for ( i4 = 0; i4 < L4_PAGETABLE_ENTRIES; i4++ ) + { + if ( !(l4e_get_flags(l4e[i4]) & _PAGE_PRESENT) ) + { + continue; + } + l3e = map_domain_page(l4e_get_pfn(l4e[i4])); #endif /* now at levels 3 or 4... */ - for ( i3 = 0; - i3 < ((CONFIG_PAGING_LEVELS==4) ? L3_PAGETABLE_ENTRIES : 8); - i3++ ) - { - if ( !(l3e_get_flags(l3e[i3]) & _PAGE_PRESENT) ) - { - continue; - } - l2e = map_domain_page(l3e_get_pfn(l3e[i3])); + for ( i3 = 0; + i3 < ((CONFIG_PAGING_LEVELS==4) ? L3_PAGETABLE_ENTRIES : 8); + i3++ ) + { + if ( !(l3e_get_flags(l3e[i3]) & _PAGE_PRESENT) ) + { + continue; + } + l2e = map_domain_page(l3e_get_pfn(l3e[i3])); #endif /* all levels... */ - for ( i2 = 0; i2 < L2_PAGETABLE_ENTRIES; i2++ ) - { - if ( !(l2e_get_flags(l2e[i2]) & _PAGE_PRESENT) ) - { - continue; - } + for ( i2 = 0; i2 < L2_PAGETABLE_ENTRIES; i2++ ) + { + if ( !(l2e_get_flags(l2e[i2]) & _PAGE_PRESENT) ) + { + continue; + } l1mfn = _mfn(l2e_get_pfn(l2e[i2])); - l1e = map_domain_page(mfn_x(l1mfn)); - - for ( i1 = 0; i1 < L1_PAGETABLE_ENTRIES; i1++, gfn++ ) - { - if ( !(l1e_get_flags(l1e[i1]) & _PAGE_PRESENT) ) - continue; - mfn = l1e_get_pfn(l1e[i1]); - gfn = get_gpfn_from_mfn(mfn); - /* create a new 1le entry using l1e_flags */ - l1e_content = l1e_from_pfn(mfn, l1e_flags); - paging_write_p2m_entry(d, gfn, &l1e[i1], + l1e = map_domain_page(mfn_x(l1mfn)); + + for ( i1 = 0; i1 < L1_PAGETABLE_ENTRIES; i1++, gfn++ ) + { + if ( !(l1e_get_flags(l1e[i1]) & _PAGE_PRESENT) ) + continue; + mfn = l1e_get_pfn(l1e[i1]); + gfn = get_gpfn_from_mfn(mfn); + /* create a new 1le entry using l1e_flags */ + l1e_content = l1e_from_pfn(mfn, l1e_flags); + paging_write_p2m_entry(d, gfn, &l1e[i1], l1mfn, l1e_content, 1); - } - unmap_domain_page(l1e); - } + } + unmap_domain_page(l1e); + } #if CONFIG_PAGING_LEVELS >= 3 - unmap_domain_page(l2e); - } + unmap_domain_page(l2e); + } #if CONFIG_PAGING_LEVELS >= 4 - unmap_domain_page(l3e); + unmap_domain_page(l3e); } #endif #endif @@ -814,7 +814,7 @@ int p2m_set_flags(struct domain *d, padd mfn = gfn_to_mfn(d, gfn); if ( mfn_valid(mfn) ) set_p2m_entry(d, gfn, mfn, l1e_flags); - + p2m_unlock(d); return 1; diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/mm/paging.c --- a/xen/arch/x86/mm/paging.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/arch/x86/mm/paging.c Sun Aug 12 14:50:02 2007 -0600 @@ -54,10 +54,10 @@ boolean_param("hap", opt_hap_enabled); #define page_to_mfn(_pg) (_mfn((_pg) - frame_table)) /* The log-dirty lock. This protects the log-dirty bitmap from - * concurrent accesses (and teardowns, etc). - * + * concurrent accesses (and teardowns, etc). + * * Locking discipline: always acquire shadow or HAP lock before this one. - * + * * Because mark_dirty is called from a lot of places, the log-dirty lock * may be acquired with the shadow or HAP locks already held. When the * log-dirty code makes callbacks into HAP or shadow code to reset @@ -105,7 +105,7 @@ int paging_alloc_log_dirty_bitmap(struct d->arch.paging.log_dirty.bitmap_size = (domain_get_maximum_gpfn(d) + BITS_PER_LONG) & ~(BITS_PER_LONG - 1); - d->arch.paging.log_dirty.bitmap = + d->arch.paging.log_dirty.bitmap = xmalloc_array(unsigned long, d->arch.paging.log_dirty.bitmap_size / BITS_PER_LONG); if ( d->arch.paging.log_dirty.bitmap == NULL ) @@ -152,8 +152,8 @@ int paging_log_dirty_enable(struct domai log_dirty_unlock(d); - /* Safe because the domain is paused. */ - ret = d->arch.paging.log_dirty.enable_log_dirty(d); + /* Safe because the domain is paused. */ + ret = d->arch.paging.log_dirty.enable_log_dirty(d); /* Possibility of leaving the bitmap allocated here but it'll be * tidied on domain teardown. */ @@ -202,7 +202,7 @@ void paging_mark_dirty(struct domain *d, pfn = get_gpfn_from_mfn(mfn_x(gmfn)); /* - * Values with the MSB set denote MFNs that aren't really part of the + * Values with the MSB set denote MFNs that aren't really part of the * domain's pseudo-physical memory map (e.g., the shared info frame). * Nothing to do here... */ @@ -212,11 +212,11 @@ void paging_mark_dirty(struct domain *d, return; } - if ( likely(pfn < d->arch.paging.log_dirty.bitmap_size) ) - { + if ( likely(pfn < d->arch.paging.log_dirty.bitmap_size) ) + { if ( !__test_and_set_bit(pfn, d->arch.paging.log_dirty.bitmap) ) { - PAGING_DEBUG(LOGDIRTY, + PAGING_DEBUG(LOGDIRTY, "marked mfn %" PRI_mfn " (pfn=%lx), dom %d\n", mfn_x(gmfn), pfn, d->domain_id); d->arch.paging.log_dirty.dirty_count++; @@ -227,21 +227,21 @@ void paging_mark_dirty(struct domain *d, PAGING_PRINTK("mark_dirty OOR! " "mfn=%" PRI_mfn " pfn=%lx max=%x (dom %d)\n" "owner=%d c=%08x t=%" PRtype_info "\n", - mfn_x(gmfn), - pfn, + mfn_x(gmfn), + pfn, d->arch.paging.log_dirty.bitmap_size, d->domain_id, (page_get_owner(mfn_to_page(gmfn)) ? page_get_owner(mfn_to_page(gmfn))->domain_id : -1), - mfn_to_page(gmfn)->count_info, + mfn_to_page(gmfn)->count_info, mfn_to_page(gmfn)->u.inuse.type_info); } - - log_dirty_unlock(d); -} - -/* Read a domain's log-dirty bitmap and stats. If the operation is a CLEAN, + + log_dirty_unlock(d); +} + +/* Read a domain's log-dirty bitmap and stats. If the operation is a CLEAN, * clear the bitmap and stats as well. */ int paging_log_dirty_op(struct domain *d, struct xen_domctl_shadow_op *sc) { @@ -252,15 +252,15 @@ int paging_log_dirty_op(struct domain *d clean = (sc->op == XEN_DOMCTL_SHADOW_OP_CLEAN); - PAGING_DEBUG(LOGDIRTY, "log-dirty %s: dom %u faults=%u dirty=%u\n", + PAGING_DEBUG(LOGDIRTY, "log-dirty %s: dom %u faults=%u dirty=%u\n", (clean) ? "clean" : "peek", d->domain_id, - d->arch.paging.log_dirty.fault_count, + d->arch.paging.log_dirty.fault_count, d->arch.paging.log_dirty.dirty_count); sc->stats.fault_count = d->arch.paging.log_dirty.fault_count; sc->stats.dirty_count = d->arch.paging.log_dirty.dirty_count; - + if ( clean ) { d->arch.paging.log_dirty.fault_count = 0; @@ -276,7 +276,7 @@ int paging_log_dirty_op(struct domain *d rv = -EINVAL; /* perhaps should be ENOMEM? */ goto out; } - + if ( sc->pages > d->arch.paging.log_dirty.bitmap_size ) sc->pages = d->arch.paging.log_dirty.bitmap_size; @@ -322,11 +322,11 @@ int paging_log_dirty_op(struct domain *d /* Note that this function takes three function pointers. Callers must supply - * these functions for log dirty code to call. This function usually is - * invoked when paging is enabled. Check shadow_enable() and hap_enable() for + * these functions for log dirty code to call. This function usually is + * invoked when paging is enabled. Check shadow_enable() and hap_enable() for * reference. * - * These function pointers must not be followed with the log-dirty lock held. + * These function pointers must not be followed with the log-dirty lock held. */ void paging_log_dirty_init(struct domain *d, int (*enable_log_dirty)(struct domain *d), @@ -335,7 +335,7 @@ void paging_log_dirty_init(struct domain { /* We initialize log dirty lock first */ log_dirty_lock_init(d); - + d->arch.paging.log_dirty.enable_log_dirty = enable_log_dirty; d->arch.paging.log_dirty.disable_log_dirty = disable_log_dirty; d->arch.paging.log_dirty.clean_dirty_bitmap = clean_dirty_bitmap; @@ -387,7 +387,7 @@ int paging_domctl(struct domain *d, xen_ d->domain_id); return -EINVAL; } - + if ( unlikely(d->is_dying) ) { gdprintk(XENLOG_INFO, "Ignoring paging op on dying domain %u\n", @@ -401,38 +401,38 @@ int paging_domctl(struct domain *d, xen_ d->domain_id); return -EINVAL; } - + /* Code to handle log-dirty. Note that some log dirty operations - * piggy-back on shadow operations. For example, when + * piggy-back on shadow operations. For example, when * XEN_DOMCTL_SHADOW_OP_OFF is called, it first checks whether log dirty - * mode is enabled. If does, we disables log dirty and continues with - * shadow code. For this reason, we need to further dispatch domctl + * mode is enabled. If does, we disables log dirty and continues with + * shadow code. For this reason, we need to further dispatch domctl * to next-level paging code (shadow or hap). */ switch ( sc->op ) { case XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY: - return paging_log_dirty_enable(d); - - case XEN_DOMCTL_SHADOW_OP_ENABLE: + return paging_log_dirty_enable(d); + + case XEN_DOMCTL_SHADOW_OP_ENABLE: if ( sc->mode & XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY ) return paging_log_dirty_enable(d); case XEN_DOMCTL_SHADOW_OP_OFF: if ( paging_mode_log_dirty(d) ) - if ( (rc = paging_log_dirty_disable(d)) != 0 ) + if ( (rc = paging_log_dirty_disable(d)) != 0 ) return rc; case XEN_DOMCTL_SHADOW_OP_CLEAN: case XEN_DOMCTL_SHADOW_OP_PEEK: - return paging_log_dirty_op(d, sc); - } - + return paging_log_dirty_op(d, sc); + } + /* Here, dispatch domctl to the appropriate paging code */ if ( opt_hap_enabled && is_hvm_domain(d) ) - return hap_domctl(d, sc, u_domctl); - else - return shadow_domctl(d, sc, u_domctl); + return hap_domctl(d, sc, u_domctl); + else + return shadow_domctl(d, sc, u_domctl); } /* Call when destroying a domain */ @@ -492,7 +492,7 @@ void paging_dump_vcpu_info(struct vcpu * { if ( paging_mode_enabled(v->domain) ) { - printk(" paging assistance: "); + printk(" paging assistance: "); if ( paging_mode_shadow(v->domain) ) { if ( v->arch.paging.mode ) @@ -504,7 +504,7 @@ void paging_dump_vcpu_info(struct vcpu * printk("not shadowed\n"); } else if ( paging_mode_hap(v->domain) && v->arch.paging.mode ) - printk("hap, %u levels\n", + printk("hap, %u levels\n", v->arch.paging.mode->guest_levels); else printk("none\n"); diff -r 5b19839d0365 -r cd51fa91956b xen/common/compat/grant_table.c --- a/xen/common/compat/grant_table.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/common/compat/grant_table.c Sun Aug 12 14:50:02 2007 -0600 @@ -161,7 +161,7 @@ int compat_grant_table_op(unsigned int c while ( n-- ) { guest_handle_add_offset(xfer, -1); - if ( __copy_field_to_guest(xfer, nat.xfer, status) ) + if ( __copy_field_to_guest(xfer, nat.xfer + n, status) ) rc = -EFAULT; } } @@ -199,7 +199,7 @@ int compat_grant_table_op(unsigned int c while ( n-- ) { guest_handle_add_offset(copy, -1); - if ( __copy_field_to_guest(copy, nat.copy, status) ) + if ( __copy_field_to_guest(copy, nat.copy + n, status) ) rc = -EFAULT; } } diff -r 5b19839d0365 -r cd51fa91956b xen/common/libelf/libelf-dominfo.c --- a/xen/common/libelf/libelf-dominfo.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/common/libelf/libelf-dominfo.c Sun Aug 12 14:50:02 2007 -0600 @@ -333,99 +333,6 @@ static int elf_xen_note_check(struct elf return 0; } - -static void elf_xen_loadsymtab(struct elf_binary *elf, - struct elf_dom_parms *parms) -{ - unsigned long maxva, len; - - if ( !parms->bsd_symtab ) - return; - - /* Calculate the required additional kernel space for the elf image */ - - /* The absolute base address of the elf image */ - maxva = elf_round_up(elf, parms->virt_kend); - maxva += sizeof(long); /* Space to store the size of the elf image */ - /* Space for the elf and elf section headers */ - maxva += (elf_uval(elf, elf->ehdr, e_ehsize) + - elf_shdr_count(elf) * elf_uval(elf, elf->ehdr, e_shentsize)); - maxva = elf_round_up(elf, maxva); - - /* Space for the symbol and string tabs */ - len = (unsigned long)elf->send - (unsigned long)elf->sstart; - maxva = elf_round_up(elf, maxva + len); - - /* The address the kernel must expanded to */ - parms->virt_end = maxva; -} - -int elf_xen_dom_load_binary(struct elf_binary *elf, - struct elf_dom_parms *parms) -{ - elf_ehdr *sym_ehdr; - unsigned long shdr, symtab_addr; - unsigned long maxva, symbase; - uint8_t i; - char *p; - - elf_load_binary(elf); - - if ( !parms->bsd_symtab ) - return 0; - -#define elf_hdr_elm(_elf, _hdr, _elm, _val) \ -do { \ - if ( elf_64bit(_elf) ) \ - (_hdr)->e64._elm = _val; \ - else \ - (_hdr)->e32._elm = _val; \ -} while ( 0 ) - - /* ehdr right after the kernel image (4 byte aligned) */ - symbase = elf_round_up(elf, parms->virt_kend); - symtab_addr = maxva = symbase + sizeof(long); - - /* Set up Elf header. */ - sym_ehdr = (elf_ehdr *)symtab_addr; - maxva = elf_copy_ehdr(elf, sym_ehdr); - - elf_hdr_elm(elf, sym_ehdr, e_phoff, 0); - elf_hdr_elm(elf, sym_ehdr, e_shoff, elf_uval(elf, elf->ehdr, e_ehsize)); - elf_hdr_elm(elf, sym_ehdr, e_phentsize, 0); - elf_hdr_elm(elf, sym_ehdr, e_phnum, 0); - - /* Copy Elf section headers. */ - shdr = maxva; - maxva = elf_copy_shdr(elf, (elf_shdr *)shdr); - - for ( i = 0; i < elf_shdr_count(elf); i++ ) - { - uint8_t type; - unsigned long tmp; - type = elf_uval(elf, (elf_shdr *)shdr, sh_type); - if ( (type == SHT_STRTAB) || (type == SHT_SYMTAB) ) - { - elf_msg(elf, "%s: shdr %i at 0x%p -> 0x%p\n", __func__, i, - elf_section_start(elf, (elf_shdr *)shdr), (void *)maxva); - tmp = elf_copy_section(elf, (elf_shdr *)shdr, (void *)maxva); - /* Mangled to be based on ELF header location. */ - elf_hdr_elm(elf, (elf_shdr *)shdr, sh_offset, - maxva - symtab_addr); - maxva = tmp; - } - shdr += elf_uval(elf, elf->ehdr, e_shentsize); - } - - /* Write down the actual sym size. */ - p = (char *)symbase; - *(long *)p = maxva - symtab_addr; /* sym size */ - -#undef elf_ehdr_elm - - return 0; -} - static int elf_xen_addr_calc_check(struct elf_binary *elf, struct elf_dom_parms *parms) { @@ -467,13 +374,16 @@ static int elf_xen_addr_calc_check(struc parms->virt_offset = parms->virt_base - parms->elf_paddr_offset; parms->virt_kstart = elf->pstart + parms->virt_offset; parms->virt_kend = elf->pend + parms->virt_offset; - parms->virt_end = parms->virt_kend; if ( parms->virt_entry == UNSET_ADDR ) parms->virt_entry = elf_uval(elf, elf->ehdr, e_entry); if ( parms->bsd_symtab ) - elf_xen_loadsymtab(elf, parms); + { + elf_parse_bsdsyms(elf, parms->virt_kend); + if ( elf->bsd_symtab_pend ) + parms->virt_kend = elf->bsd_symtab_pend + parms->virt_offset; + } elf_msg(elf, "%s: addresses:\n", __FUNCTION__); elf_msg(elf, " virt_base = 0x%" PRIx64 "\n", parms->virt_base); @@ -481,14 +391,12 @@ static int elf_xen_addr_calc_check(struc elf_msg(elf, " virt_offset = 0x%" PRIx64 "\n", parms->virt_offset); elf_msg(elf, " virt_kstart = 0x%" PRIx64 "\n", parms->virt_kstart); elf_msg(elf, " virt_kend = 0x%" PRIx64 "\n", parms->virt_kend); - elf_msg(elf, " virt_end = 0x%" PRIx64 "\n", parms->virt_end); elf_msg(elf, " virt_entry = 0x%" PRIx64 "\n", parms->virt_entry); if ( (parms->virt_kstart > parms->virt_kend) || (parms->virt_entry < parms->virt_kstart) || (parms->virt_entry > parms->virt_kend) || - (parms->virt_base > parms->virt_kstart) || - (parms->virt_kend > parms->virt_end) ) + (parms->virt_base > parms->virt_kstart) ) { elf_err(elf, "%s: ERROR: ELF start or entries are out of bounds.\n", __FUNCTION__); diff -r 5b19839d0365 -r cd51fa91956b xen/common/libelf/libelf-loader.c --- a/xen/common/libelf/libelf-loader.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/common/libelf/libelf-loader.c Sun Aug 12 14:50:02 2007 -0600 @@ -10,8 +10,6 @@ int elf_init(struct elf_binary *elf, con { const elf_shdr *shdr; uint64_t i, count, section, offset; - uint64_t low = -1; - uint64_t high = 0; if ( !elf_is_elfbinary(image) ) { @@ -22,13 +20,9 @@ int elf_init(struct elf_binary *elf, con memset(elf, 0, sizeof(*elf)); elf->image = image; elf->size = size; - elf->ehdr = (elf_ehdr *) image; + elf->ehdr = (elf_ehdr *)image; elf->class = elf->ehdr->e32.e_ident[EI_CLASS]; elf->data = elf->ehdr->e32.e_ident[EI_DATA]; - -#ifdef VERBOSE - elf_set_verbose(elf); -#endif /* Sanity check phdr. */ offset = elf_uval(elf, elf->ehdr, e_phoff) + @@ -60,43 +54,18 @@ int elf_init(struct elf_binary *elf, con count = elf_shdr_count(elf); for ( i = 0; i < count; i++ ) { - const char *sh_symend, *sh_strend; - shdr = elf_shdr_by_index(elf, i); if ( elf_uval(elf, shdr, sh_type) != SHT_SYMTAB ) continue; elf->sym_tab = shdr; - sh_symend = (const char *)elf_section_end(elf, shdr); shdr = elf_shdr_by_index(elf, elf_uval(elf, shdr, sh_link)); if ( shdr == NULL ) { elf->sym_tab = NULL; - sh_symend = 0; continue; } elf->sym_strtab = elf_section_start(elf, shdr); - sh_strend = (const char *)elf_section_end(elf, shdr); - - if ( low > (unsigned long)elf->sym_tab ) - low = (unsigned long)elf->sym_tab; - if ( low > (unsigned long)shdr ) - low = (unsigned long)shdr; - - if ( high < ((unsigned long)sh_symend) ) - high = (unsigned long)sh_symend; - if ( high < ((unsigned long)sh_strend) ) - high = (unsigned long)sh_strend; - - elf_msg(elf, "%s: shdr: sym_tab=%p size=0x%" PRIx64 "\n", - __FUNCTION__, elf->sym_tab, - elf_uval(elf, elf->sym_tab, sh_size)); - elf_msg(elf, "%s: shdr: str_tab=%p size=0x%" PRIx64 "\n", - __FUNCTION__, elf->sym_strtab, elf_uval(elf, shdr, sh_size)); - - elf->sstart = low; - elf->send = high; - elf_msg(elf, "%s: symbol map: 0x%" PRIx64 " -> 0x%" PRIx64 "\n", - __FUNCTION__, elf->sstart, elf->send); + break; } return 0; @@ -114,6 +83,101 @@ void elf_set_verbose(struct elf_binary * elf->verbose = 1; } #endif + +/* Calculate the required additional kernel space for the elf image */ +void elf_parse_bsdsyms(struct elf_binary *elf, uint64_t pstart) +{ + uint64_t sz; + const elf_shdr *shdr; + int i, type; + + if ( !elf->sym_tab ) + return; + + pstart = elf_round_up(elf, pstart); + + /* Space to store the size of the elf image */ + sz = sizeof(uint32_t); + + /* Space for the elf and elf section headers */ + sz += (elf_uval(elf, elf->ehdr, e_ehsize) + + elf_shdr_count(elf) * elf_uval(elf, elf->ehdr, e_shentsize)); + sz = elf_round_up(elf, sz); + + /* Space for the symbol and string tables. */ + for ( i = 0; i < elf_shdr_count(elf); i++ ) + { + shdr = elf_shdr_by_index(elf, i); + type = elf_uval(elf, (elf_shdr *)shdr, sh_type); + if ( (type == SHT_STRTAB) || (type == SHT_SYMTAB) ) + sz = elf_round_up(elf, sz + elf_uval(elf, shdr, sh_size)); + } + + elf->bsd_symtab_pstart = pstart; + elf->bsd_symtab_pend = pstart + sz; +} + +static void elf_load_bsdsyms(struct elf_binary *elf) +{ + elf_ehdr *sym_ehdr; + unsigned long sz; + char *maxva, *symbase, *symtab_addr; + elf_shdr *shdr; + int i, type; + + if ( !elf->bsd_symtab_pstart ) + return; + +#define elf_hdr_elm(_elf, _hdr, _elm, _val) \ +do { \ + if ( elf_64bit(_elf) ) \ + (_hdr)->e64._elm = _val; \ + else \ + (_hdr)->e32._elm = _val; \ +} while ( 0 ) + + symbase = elf_get_ptr(elf, elf->bsd_symtab_pstart); + symtab_addr = maxva = symbase + sizeof(uint32_t); + + /* Set up Elf header. */ + sym_ehdr = (elf_ehdr *)symtab_addr; + sz = elf_uval(elf, elf->ehdr, e_ehsize); + memcpy(sym_ehdr, elf->ehdr, sz); + maxva += sz; /* no round up */ + + elf_hdr_elm(elf, sym_ehdr, e_phoff, 0); + elf_hdr_elm(elf, sym_ehdr, e_shoff, elf_uval(elf, elf->ehdr, e_ehsize)); + elf_hdr_elm(elf, sym_ehdr, e_phentsize, 0); + elf_hdr_elm(elf, sym_ehdr, e_phnum, 0); + + /* Copy Elf section headers. */ + shdr = (elf_shdr *)maxva; + sz = elf_shdr_count(elf) * elf_uval(elf, elf->ehdr, e_shentsize); + memcpy(shdr, elf->image + elf_uval(elf, elf->ehdr, e_shoff), sz); + maxva = (char *)(long)elf_round_up(elf, (long)maxva + sz); + + for ( i = 0; i < elf_shdr_count(elf); i++ ) + { + type = elf_uval(elf, shdr, sh_type); + if ( (type == SHT_STRTAB) || (type == SHT_SYMTAB) ) + { + elf_msg(elf, "%s: shdr %i at 0x%p -> 0x%p\n", __func__, i, + elf_section_start(elf, shdr), maxva); + sz = elf_uval(elf, shdr, sh_size); + memcpy(maxva, elf_section_start(elf, shdr), sz); + /* Mangled to be based on ELF header location. */ + elf_hdr_elm(elf, shdr, sh_offset, maxva - symtab_addr); + maxva = (char *)(long)elf_round_up(elf, (long)maxva + sz); + } + shdr = (elf_shdr *)((long)shdr + + (long)elf_uval(elf, elf->ehdr, e_shentsize)); + } + + /* Write down the actual sym size. */ + *(uint32_t *)symbase = maxva - symtab_addr; + +#undef elf_ehdr_elm +} void elf_parse_binary(struct elf_binary *elf) { @@ -165,6 +229,8 @@ void elf_load_binary(struct elf_binary * memcpy(dest, elf->image + offset, filesz); memset(dest + filesz, 0, memsz - filesz); } + + elf_load_bsdsyms(elf); } void *elf_get_ptr(struct elf_binary *elf, unsigned long addr) diff -r 5b19839d0365 -r cd51fa91956b xen/common/libelf/libelf-tools.c --- a/xen/common/libelf/libelf-tools.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/common/libelf/libelf-tools.c Sun Aug 12 14:50:02 2007 -0600 @@ -236,36 +236,6 @@ int elf_phdr_is_loadable(struct elf_bina uint64_t p_flags = elf_uval(elf, phdr, p_flags); return ((p_type == PT_LOAD) && (p_flags & (PF_W | PF_X)) != 0); -} - -unsigned long -elf_copy_ehdr(struct elf_binary *elf, void *dest) -{ - uint64_t size; - - size = elf_uval(elf, elf->ehdr, e_ehsize); - memcpy(dest, elf->ehdr, size); - return elf_round_up(elf, (unsigned long)(dest) + size); -} - -unsigned long -elf_copy_shdr(struct elf_binary *elf, void *dest) -{ - uint64_t size; - - size = elf_shdr_count(elf) * elf_uval(elf, elf->ehdr, e_shentsize); - memcpy(dest, elf->image + elf_uval(elf, elf->ehdr, e_shoff), size); - return elf_round_up(elf, (unsigned long)(dest) + size); -} - -unsigned long -elf_copy_section(struct elf_binary *elf, const elf_shdr *shdr, void *dest) -{ - uint64_t size; - - size = elf_uval(elf, shdr, sh_size); - memcpy(dest, elf_section_start(elf, shdr), size); - return elf_round_up(elf, (unsigned long)(dest) + size); } /* diff -r 5b19839d0365 -r cd51fa91956b xen/common/page_alloc.c --- a/xen/common/page_alloc.c Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/common/page_alloc.c Sun Aug 12 14:50:02 2007 -0600 @@ -91,6 +91,14 @@ custom_param("dma_emergency_pool", parse #define round_pgdown(_p) ((_p)&PAGE_MASK) #define round_pgup(_p) (((_p)+(PAGE_SIZE-1))&PAGE_MASK) +#ifndef NDEBUG +/* Avoid callers relying on allocations returning zeroed pages. */ +#define scrub_page(p) memset((p), 0xc2, PAGE_SIZE) +#else +/* For a production build, clear_page() is the fastest way to scrub. */ +#define scrub_page(p) clear_page(p) +#endif + static DEFINE_SPINLOCK(page_scrub_lock); LIST_HEAD(page_scrub_list); static unsigned long scrub_pages; @@ -618,13 +626,13 @@ void __init scrub_heap_pages(void) { p = page_to_virt(mfn_to_page(mfn)); memguard_unguard_range(p, PAGE_SIZE); - clear_page(p); + scrub_page(p); memguard_guard_range(p, PAGE_SIZE); } else { p = map_domain_page(mfn); - clear_page(p); + scrub_page(p); unmap_domain_page(p); } } @@ -1018,7 +1026,7 @@ static void page_scrub_softirq(void) pg = list_entry(ent, struct page_info, list); ent = ent->prev; p = map_domain_page(page_to_mfn(pg)); - clear_page(p); + scrub_page(p); unmap_domain_page(p); free_heap_pages(pfn_dom_zone_type(page_to_mfn(pg)), pg, 0); } diff -r 5b19839d0365 -r cd51fa91956b xen/include/asm-powerpc/boot.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xen/include/asm-powerpc/boot.h Sun Aug 12 14:50:02 2007 -0600 @@ -0,0 +1,46 @@ +/* + * 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright IBM Corp. 2007 + * + * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx> + */ + +#ifndef _ASM_BOOT_H +#define _ASM_BOOT_H + +/* a collection of interfaces used during boot. */ + +extern void boot_of_init(ulong, ulong); +extern void *boot_of_devtree(void); +extern void boot_of_serial(void *); +extern void boot_of_finish(void); +extern int boot_of_mem_avail(int pos, ulong *startpage, ulong *endpage); + +extern void parse_multiboot(ulong tags_addr); + +extern void memory_init(void); + +extern char *xen_cmdline; +extern ulong dom0_addr; +extern ulong dom0_len; +extern char *dom0_cmdline; +extern ulong initrd_start; +extern ulong initrd_len; + +/* From linker script. */ +extern char builtin_cmdline[]; + +#endif diff -r 5b19839d0365 -r cd51fa91956b xen/include/asm-x86/domain.h --- a/xen/include/asm-x86/domain.h Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/include/asm-x86/domain.h Sun Aug 12 14:50:02 2007 -0600 @@ -77,10 +77,10 @@ struct shadow_domain { int locker; /* processor which holds the lock */ const char *locker_function; /* Func that took it */ unsigned int opt_flags; /* runtime tunable optimizations on/off */ - struct list_head pinned_shadows; + struct list_head pinned_shadows; /* Memory allocation */ - struct list_head freelists[SHADOW_MAX_ORDER + 1]; + struct list_head freelists[SHADOW_MAX_ORDER + 1]; struct list_head p2m_freelist; unsigned int total_pages; /* number of pages allocated */ unsigned int free_pages; /* number of pages on freelists */ @@ -116,7 +116,7 @@ struct hap_domain { spinlock_t lock; int locker; const char *locker_function; - + struct list_head freelist; unsigned int total_pages; /* number of pages allocated */ unsigned int free_pages; /* number of pages on freelists */ @@ -131,13 +131,13 @@ struct p2m_domain { spinlock_t lock; int locker; /* processor which holds the lock */ const char *locker_function; /* Func that took it */ - + /* Pages used to construct the p2m */ struct list_head pages; /* Functions to call to get or free pages for the p2m */ struct page_info * (*alloc_page )(struct domain *d); - void (*free_page )(struct domain *d, + void (*free_page )(struct domain *d, struct page_info *pg); /* Highest guest frame that's ever been mapped in the p2m */ @@ -177,6 +177,7 @@ struct paging_domain { /* log dirty support */ struct log_dirty_domain log_dirty; }; + struct paging_vcpu { /* Pointers to mode-specific entry points. */ struct paging_mode *mode; @@ -184,9 +185,9 @@ struct paging_vcpu { unsigned int translate_enabled:1; /* HVM guest: last emulate was to a pagetable */ unsigned int last_write_was_pt:1; - /* Translated guest: virtual TLB */ + /* Translated guest: virtual TLB */ struct shadow_vtlb *vtlb; - spinlock_t vtlb_lock; + spinlock_t vtlb_lock; /* paging support extension */ struct shadow_vcpu shadow; @@ -303,7 +304,7 @@ struct arch_vcpu * shadow refcounts are in use */ pagetable_t shadow_table[4]; /* (MFN) shadow(s) of guest */ pagetable_t monitor_table; /* (MFN) hypervisor PT (for HVM) */ - unsigned long cr3; /* (MA) value to install in HW CR3 */ + unsigned long cr3; /* (MA) value to install in HW CR3 */ /* Current LDT details. */ unsigned long shadow_ldt_mapcnt; diff -r 5b19839d0365 -r cd51fa91956b xen/include/asm-x86/hap.h --- a/xen/include/asm-x86/hap.h Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/include/asm-x86/hap.h Sun Aug 12 14:50:02 2007 -0600 @@ -3,7 +3,7 @@ * * hardware-assisted paging * Copyright (c) 2007 Advanced Micro Devices (Wei Huang) - * + * * Parts of this code are Copyright (c) 2006 by XenSource Inc. * Parts of this code are Copyright (c) 2006 by Michael A Fetterman * Parts based on earlier work by Michael A Fetterman, Ian Pratt et al. diff -r 5b19839d0365 -r cd51fa91956b xen/include/asm-x86/mach-es7000/mach_mpparse.h --- a/xen/include/asm-x86/mach-es7000/mach_mpparse.h Sun Aug 12 12:19:13 2007 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -#ifndef __ASM_MACH_MPPARSE_H -#define __ASM_MACH_MPPARSE_H - -#include <xen/acpi.h> - -extern int parse_unisys_oem(char *oemptr); -extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); - -static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, - char *productid) -{ - if (mpc->mpc_oemptr) { - struct mp_config_oemtable *oem_table = - (struct mp_config_oemtable *)(long)mpc->mpc_oemptr; - if (!strncmp(oem, "UNISYS", 6)) - return parse_unisys_oem((char *)oem_table); - } - return 0; -} - -static inline int es7000_check_dsdt(void) -{ - struct acpi_table_header *header = NULL; - if(!acpi_get_table_header_early(ACPI_DSDT, &header)) - acpi_table_print(header, 0); - if (!strncmp(header->oem_id, "UNISYS", 6)) - return 1; - return 0; -} - -/* Hook from generic ACPI tables.c */ -static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) -{ - unsigned long oem_addr; - if (!find_unisys_acpi_oem_table(&oem_addr)) { - if (es7000_check_dsdt()) - return parse_unisys_oem((char *)oem_addr); - else - return 1; - } - return 0; -} - - -#endif /* __ASM_MACH_MPPARSE_H */ diff -r 5b19839d0365 -r cd51fa91956b xen/include/asm-x86/msr.h --- a/xen/include/asm-x86/msr.h Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/include/asm-x86/msr.h Sun Aug 12 14:50:02 2007 -0600 @@ -239,6 +239,11 @@ static inline void write_efer(__u64 val) #define MSR_K8_MC4_STATUS 0x411 #define MSR_K8_MC4_ADDR 0x412 #define MSR_K8_MC4_MISC 0x413 + +#define MSR_K8_MC5_CTL 0x414 +#define MSR_K8_MC5_STATUS 0x415 +#define MSR_K8_MC5_ADDR 0x416 +#define MSR_K8_MC5_MISC 0x417 /* Pentium IV performance counter MSRs */ #define MSR_P4_BPU_PERFCTR0 0x300 diff -r 5b19839d0365 -r cd51fa91956b xen/include/public/libelf.h --- a/xen/include/public/libelf.h Sun Aug 12 12:19:13 2007 -0600 +++ b/xen/include/public/libelf.h Sun Aug 12 14:50:02 2007 -0600 @@ -65,11 +65,12 @@ struct elf_binary { /* loaded to */ char *dest; - uint64_t sstart; - uint64_t send; uint64_t pstart; uint64_t pend; uint64_t reloc_offset; + + uint64_t bsd_symtab_pstart; + uint64_t bsd_symtab_pend; #ifndef __XEN__ /* misc */ @@ -150,11 +151,6 @@ int elf_is_elfbinary(const void *image); int elf_is_elfbinary(const void *image); int elf_phdr_is_loadable(struct elf_binary *elf, const elf_phdr * phdr); -unsigned long elf_copy_ehdr(struct elf_binary *elf, void *dest); -unsigned long elf_copy_shdr(struct elf_binary *elf, void *dest); -unsigned long elf_copy_section(struct elf_binary *elf, - const elf_shdr *shdr, void *dest); - /* ------------------------------------------------------------------------ */ /* xc_libelf_loader.c */ @@ -170,6 +166,8 @@ void elf_load_binary(struct elf_binary * void *elf_get_ptr(struct elf_binary *elf, unsigned long addr); uint64_t elf_lookup_addr(struct elf_binary *elf, const char *symbol); + +void elf_parse_bsdsyms(struct elf_binary *elf, uint64_t pstart); /* private */ /* ------------------------------------------------------------------------ */ /* xc_libelf_relocate.c */ @@ -221,8 +219,7 @@ struct elf_dom_parms { /* calculated */ uint64_t virt_offset; uint64_t virt_kstart; - uint64_t virt_kend; /* end of kernel image */ - uint64_t virt_end; /* end of kernel symtab (== virt_kend if none) */ + uint64_t virt_kend; }; static inline void elf_xen_feature_set(int nr, uint32_t * addr) @@ -245,7 +242,4 @@ int elf_xen_parse(struct elf_binary *elf int elf_xen_parse(struct elf_binary *elf, struct elf_dom_parms *parms); -int elf_xen_dom_load_binary(struct elf_binary *elf, - struct elf_dom_parms *parms); - #endif /* __XC_LIBELF__ */ diff -r 5b19839d0365 -r cd51fa91956b xen/include/xen/multiboot2.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xen/include/xen/multiboot2.h Sun Aug 12 14:50:02 2007 -0600 @@ -0,0 +1,99 @@ +/* + * 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright IBM Corp. 2006, 2007 + * + * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx> + * + */ + +#ifndef _MULTIBOOT2_H_ +#define _MULTIBOOT2_H_ + +/* How many bytes from the start of the file we search for the header. */ +#define MB2_HEADER_SEARCH 8192 + +/* The magic field should contain this. */ +#define MB2_HEADER_MAGIC 0xe85250d6 + +/* Passed from the bootloader to the kernel. */ +#define MB2_BOOTLOADER_MAGIC 0x36d76289 + +#include <stdint.h> + +#define for_each_tag(_tag, _tags) \ + for ((_tag) = (_tags); \ + ((_tag)->key != MB2_TAG_END && (_tag)->key != 0); \ + (_tag) = (void *)(_tag) + (_tag)->len) + +typedef uint32_t mb2_word; + +struct mb2_header +{ + uint32_t magic; +}; + +struct mb2_tag_header +{ + uint32_t key; + uint32_t len; +}; + +#define MB2_TAG_START 1 +struct mb2_tag_start +{ + struct mb2_tag_header header; + mb2_word size; /* Total size of all mb2 tags. */ +}; + +#define MB2_TAG_NAME 2 +struct mb2_tag_name +{ + struct mb2_tag_header header; + char name[1]; +}; + +#define MB2_TAG_MODULE 3 +struct mb2_tag_module +{ + struct mb2_tag_header header; + mb2_word addr; + mb2_word size; + unsigned char type[36]; + unsigned char cmdline[1]; +}; + +#define MB2_TAG_MEMORY 4 +struct mb2_tag_memory +{ + struct mb2_tag_header header; + mb2_word addr; + mb2_word size; + mb2_word type; +}; + +#define MB2_TAG_UNUSED 5 +struct mb2_tag_unused +{ + struct mb2_tag_header header; +}; + +#define MB2_TAG_END 0xffff +struct mb2_tag_end +{ + struct mb2_tag_header header; +}; + +#endif _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |