aboutsummaryrefslogtreecommitdiff
path: root/tools/regression/geom
diff options
context:
space:
mode:
Diffstat (limited to 'tools/regression/geom')
-rw-r--r--tools/regression/geom/ConfCmp/ConfCmp.c375
-rw-r--r--tools/regression/geom/ConfCmp/Makefile32
-rw-r--r--tools/regression/geom/ConfCmp/a1.conf414
-rw-r--r--tools/regression/geom/ConfCmp/a1a.conf414
-rw-r--r--tools/regression/geom/ConfCmp/a1b.conf414
-rw-r--r--tools/regression/geom/ConfCmp/a1c.conf414
-rw-r--r--tools/regression/geom/ConfCmp/a1d.conf414
-rw-r--r--tools/regression/geom/Data/disk.apple.xml93
-rw-r--r--tools/regression/geom/Data/disk.beast.da0.xml32
-rw-r--r--tools/regression/geom/Data/disk.critter.ad0.xml177
-rw-r--r--tools/regression/geom/Data/disk.empty.flp.xml11
-rw-r--r--tools/regression/geom/Data/disk.far.ad0.xml50
-rw-r--r--tools/regression/geom/Data/disk.flat.da1.xml96
-rw-r--r--tools/regression/geom/Data/disk.kern.flp.xml50
-rw-r--r--tools/regression/geom/Data/disk.msdos.ext.xml533
-rw-r--r--tools/regression/geom/Data/disk.msdos.flp.xml50
-rw-r--r--tools/regression/geom/Data/disk.typo.ad0.xml218
-rw-r--r--tools/regression/geom/MdLoad/Makefile12
-rw-r--r--tools/regression/geom/MdLoad/MdLoad.c269
-rw-r--r--tools/regression/geom/Ref/disk.apple.xml4
-rw-r--r--tools/regression/geom/Ref/disk.beast.da0.xml4
-rw-r--r--tools/regression/geom/Ref/disk.critter.ad0.xml10
-rw-r--r--tools/regression/geom/Ref/disk.empty.flp.xml1
-rw-r--r--tools/regression/geom/Ref/disk.far.ad0.xml3
-rw-r--r--tools/regression/geom/Ref/disk.flat.da1.xml11
-rw-r--r--tools/regression/geom/Ref/disk.kern.flp.xml4
-rw-r--r--tools/regression/geom/Ref/disk.msdos.ext.xml26
-rw-r--r--tools/regression/geom/Ref/disk.msdos.flp.xml1
-rw-r--r--tools/regression/geom/Ref/disk.typo.ad0.xml13
-rw-r--r--tools/regression/geom/RunTest.sh43
-rw-r--r--tools/regression/geom/RunTest.t49
31 files changed, 4237 insertions, 0 deletions
diff --git a/tools/regression/geom/ConfCmp/ConfCmp.c b/tools/regression/geom/ConfCmp/ConfCmp.c
new file mode 100644
index 000000000000..ec22a2a6a97f
--- /dev/null
+++ b/tools/regression/geom/ConfCmp/ConfCmp.c
@@ -0,0 +1,375 @@
+/*-
+ * Copyright (c) 2002 Poul-Henning Kamp
+ * Copyright (c) 2002 Networks Associates Technology, Inc.
+ * All rights reserved.
+ *
+ * This software was developed for the FreeBSD Project by Poul-Henning Kamp
+ * and NAI Labs, the Security Research Division of Network Associates, Inc.
+ * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the
+ * DARPA CHATS research program.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The names of the authors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <sys/queue.h>
+#include <sys/sbuf.h>
+#include <err.h>
+#include <bsdxml.h>
+
+FILE *fsubs;
+
+struct node {
+ LIST_HEAD(, node) children;
+ LIST_ENTRY(node) siblings;
+ struct node *parent;
+ const char *name;
+ struct sbuf *cont;
+ struct sbuf *key;
+ char *id;
+ char *ref;
+};
+
+struct mytree {
+ struct node *top;
+ struct node *cur;
+ int indent;
+ int ignore;
+};
+
+struct ref {
+ LIST_ENTRY(ref) next;
+ char *k1;
+ char *k2;
+};
+
+LIST_HEAD(, ref) refs = LIST_HEAD_INITIALIZER(refs);
+
+static struct node *
+new_node(void)
+{
+ struct node *np;
+
+ np = calloc(1, sizeof *np);
+ np->cont = sbuf_new_auto();
+ sbuf_clear(np->cont);
+ np->key = sbuf_new_auto();
+ sbuf_clear(np->key);
+ LIST_INIT(&np->children);
+ return (np);
+}
+
+static void
+indent(int n)
+{
+
+ printf("%*.*s", n, n, "");
+}
+
+static void
+StartElement(void *userData, const char *name, const char **attr)
+{
+ struct mytree *mt;
+ struct node *np;
+ int i;
+
+ mt = userData;
+ if (!strcmp(name, "FreeBSD")) {
+ mt->ignore = 1;
+ return;
+ }
+ mt->ignore = 0;
+ mt->indent += 2;
+ np = new_node();
+ for (i = 0; attr[i]; i += 2) {
+ if (!strcmp(attr[i], "id"))
+ np->id = strdup(attr[i+1]);
+ else if (!strcmp(attr[i], "ref"))
+ np->ref = strdup(attr[i+1]);
+ }
+ np->name = strdup(name);
+ sbuf_cat(np->key, name);
+ sbuf_cat(np->key, "::");
+ np->parent = mt->cur;
+ LIST_INSERT_HEAD(&mt->cur->children, np, siblings);
+ mt->cur = np;
+}
+
+static void
+EndElement(void *userData, const char *name __unused)
+{
+ struct mytree *mt;
+ struct node *np;
+
+ mt = userData;
+ if (mt->ignore)
+ return;
+
+ mt->indent -= 2;
+ sbuf_finish(mt->cur->cont);
+ LIST_FOREACH(np, &mt->cur->children, siblings) {
+ if (strcmp(np->name, "name"))
+ continue;
+ sbuf_cat(mt->cur->key, sbuf_data(np->cont));
+ break;
+ }
+ sbuf_finish(mt->cur->key);
+ mt->cur = mt->cur->parent;
+}
+
+static void
+CharData(void *userData , const XML_Char *s , int len)
+{
+ struct mytree *mt;
+ const char *b, *e;
+
+ mt = userData;
+ if (mt->ignore)
+ return;
+ b = s;
+ e = s + len - 1;
+ while (isspace(*b) && b < e)
+ b++;
+ while (isspace(*e) && e > b)
+ e--;
+ if (e != b || *b)
+ sbuf_bcat(mt->cur->cont, b, e - b + 1);
+}
+
+static struct mytree *
+dofile(char *filename)
+{
+ XML_Parser parser;
+ struct mytree *mt;
+ struct stat st;
+ int fd;
+ char *p;
+ int i;
+
+ parser = XML_ParserCreate(NULL);
+ mt = calloc(1, sizeof *mt);
+ mt->top = new_node();
+ mt->top->name = "(top)";
+ mt->top->parent = mt->top;
+ mt->cur = mt->top;
+ sbuf_finish(mt->top->key);
+ sbuf_finish(mt->top->cont);
+ XML_SetUserData(parser, mt);
+ XML_SetElementHandler(parser, StartElement, EndElement);
+ XML_SetCharacterDataHandler(parser, CharData);
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ err(1, filename);
+ fstat(fd, &st);
+ p = mmap(NULL, st.st_size, PROT_READ, MAP_NOCORE|MAP_PRIVATE, fd, 0);
+ i = XML_Parse(parser, p, st.st_size, 1);
+ if (i != 1)
+ errx(1, "XML_Parse complained -> %d", i);
+ munmap(p, st.st_size);
+ close(fd);
+ XML_ParserFree(parser);
+ sbuf_finish(mt->top->cont);
+ if (i)
+ return (mt);
+ else
+ return (NULL);
+}
+
+static void
+print_node(struct node *np)
+{
+ printf("\"%s\" -- \"%s\" -- \"%s\"", np->name, sbuf_data(np->cont), sbuf_data(np->key));
+ if (np->id)
+ printf(" id=\"%s\"", np->id);
+ if (np->ref)
+ printf(" ref=\"%s\"", np->ref);
+ printf("\n");
+}
+
+static void
+print_tree(struct node *np, int n)
+{
+ struct node *np1;
+
+ indent(n); printf("%s id=%s ref=%s\n", np->name, np->id, np->ref);
+ LIST_FOREACH(np1, &np->children, siblings)
+ print_tree(np1, n + 2);
+}
+
+static void
+sort_node(struct node *np)
+{
+ struct node *np1, *np2;
+ int n;
+
+ LIST_FOREACH(np1, &np->children, siblings)
+ sort_node(np1);
+ do {
+ np1 = LIST_FIRST(&np->children);
+ n = 0;
+ for (;;) {
+ if (np1 == NULL)
+ return;
+ np2 = LIST_NEXT(np1, siblings);
+ if (np2 == NULL)
+ return;
+ if (strcmp(sbuf_data(np1->key), sbuf_data(np2->key)) > 0) {
+ LIST_REMOVE(np2, siblings);
+ LIST_INSERT_BEFORE(np1, np2, siblings);
+ n++;
+ break;
+ }
+ np1 = np2;
+ }
+ } while (n);
+}
+
+static int
+refcmp(char *r1, char *r2)
+{
+ struct ref *r;
+
+ LIST_FOREACH(r, &refs, next) {
+ if (!strcmp(r1, r->k1))
+ return (strcmp(r2, r->k2));
+ }
+ r = calloc(1, sizeof(*r));
+ r->k1 = strdup(r1);
+ r->k2 = strdup(r2);
+ LIST_INSERT_HEAD(&refs, r, next);
+ if (fsubs != NULL) {
+ fprintf(fsubs, "s/%s/%s/g\n", r1, r2);
+ fflush(fsubs);
+ }
+ return (0);
+}
+
+static int compare_node2(struct node *n1, struct node *n2, int in);
+
+static int
+compare_node(struct node *n1, struct node *n2, int in)
+{
+ int i;
+ struct node *n1a, *n2a;
+
+ i = strcmp(n1->name, n2->name);
+ if (i)
+ return (i);
+ if (n1->id && n2->id)
+ i = refcmp(n1->id, n2->id);
+ else if (n1->id || n2->id)
+ i = -1;
+ if (i)
+ return (i);
+ if (n1->ref && n2->ref)
+ i = refcmp(n1->ref, n2->ref);
+ else if (n1->ref || n2->ref)
+ i = -1;
+ if (i)
+ return (i);
+ if (!strcmp(n1->name, "ref"))
+ i = refcmp(sbuf_data(n1->cont), sbuf_data(n2->cont));
+ else
+ i = strcmp(sbuf_data(n1->cont), sbuf_data(n2->cont));
+ if (i)
+ return (1);
+ n1a = LIST_FIRST(&n1->children);
+ n2a = LIST_FIRST(&n2->children);
+ for (;;) {
+ if (n1a == NULL && n2a == NULL)
+ return (0);
+ if (n1a != NULL && n2a == NULL) {
+ printf("1>");
+ indent(in);
+ print_node(n1a);
+ printf("2>\n");
+ return (1);
+ }
+ if (n1a == NULL && n2a != NULL) {
+ printf("1>\n");
+ printf("2>");
+ indent(in);
+ print_node(n2a);
+ return (1);
+ }
+ i = compare_node2(n1a, n2a, in + 2);
+ if (i)
+ return (1);
+ n1a = LIST_NEXT(n1a, siblings);
+ n2a = LIST_NEXT(n2a, siblings);
+ }
+ return (0);
+}
+
+static int
+compare_node2(struct node *n1, struct node *n2, int in)
+{
+ int i;
+
+ i = compare_node(n1, n2, in);
+ if (i) {
+ printf("1>");
+ indent(in);
+ print_node(n1);
+ printf("2>");
+ indent(in);
+ print_node(n2);
+ }
+ return (i);
+}
+
+
+
+int
+main(int argc, char **argv)
+{
+ struct mytree *t1, *t2;
+ int i;
+
+ fsubs = fopen("_.subs", "w");
+ setbuf(stdout, NULL);
+ setbuf(stderr, NULL);
+ if (argc != 3)
+ errx(1, "usage: %s file1 file2", argv[0]);
+
+ t1 = dofile(argv[1]);
+ if (t1 == NULL)
+ errx(2, "XML parser error on file %s", argv[1]);
+ sort_node(t1->top);
+ t2 = dofile(argv[2]);
+ if (t2 == NULL)
+ errx(2, "XML parser error on file %s", argv[2]);
+ sort_node(t2->top);
+ i = compare_node(t1->top, t2->top, 0);
+ return (i);
+}
+
diff --git a/tools/regression/geom/ConfCmp/Makefile b/tools/regression/geom/ConfCmp/Makefile
new file mode 100644
index 000000000000..a03de0e9bcd4
--- /dev/null
+++ b/tools/regression/geom/ConfCmp/Makefile
@@ -0,0 +1,32 @@
+PROG= ConfCmp
+SRCS+= ConfCmp.c
+SRCS+= subr_sbuf.c
+
+.PATH: ../../../../sys/kern
+
+NO_OBJ=
+WARNS?= 5
+CFLAGS+= -g -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -static
+# Uncomment for ElectricFence
+#LDADD += -lefence -L/usr/local/lib
+
+LIBADD= bsdxml
+
+MAN=
+CLEANFILES += _*
+
+.include <bsd.prog.mk>
+
+test: ${PROG}
+ rm -f _* *.core
+ ./${PROG} a1.conf a1.conf
+ ./${PROG} a1.conf a1a.conf
+ if ./${PROG} a1.conf a1b.conf > /dev/null 2>&1 ; then exit 1 ; fi
+ if ./${PROG} a1.conf a1c.conf > /dev/null 2>&1 ; then exit 1 ; fi
+ if ./${PROG} a1.conf a1d.conf > /dev/null 2>&1 ; then exit 1 ; fi
+ ./${PROG} a2.conf a2.conf
+ ./${PROG} a2.conf a2a.conf
+ if ./${PROG} a2.conf a2b.conf > /dev/null 2>&1 ; then exit 1 ; fi
+ if ./${PROG} a2.conf a2c.conf > /dev/null 2>&1 ; then exit 1 ; fi
+ if ./${PROG} a2.conf a2d.conf > /dev/null 2>&1 ; then exit 1 ; fi
+
diff --git a/tools/regression/geom/ConfCmp/a1.conf b/tools/regression/geom/ConfCmp/a1.conf
new file mode 100644
index 000000000000..94171cdacb10
--- /dev/null
+++ b/tools/regression/geom/ConfCmp/a1.conf
@@ -0,0 +1,414 @@
+<mesh>
+ <FreeBSD>$FreeBSD$</FreeBSD>
+ <method>
+ <ref>0x80712c0</ref>
+ <name>DEV-method</name>
+ <geom>
+ <ref>0x80bfd00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3d</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9500</ref>
+ <geom><ref>0x80bfd00</ref></geom>
+ <provider><ref>0x80bf880</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfc80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b94c0</ref>
+ <geom><ref>0x80bfc80</ref></geom>
+ <provider><ref>0x80bf800</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfc00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9480</ref>
+ <geom><ref>0x80bfc00</ref></geom>
+ <provider><ref>0x80bf780</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfb80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s2c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9440</ref>
+ <geom><ref>0x80bfb80</ref></geom>
+ <provider><ref>0x80bf600</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfb00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1f</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9400</ref>
+ <geom><ref>0x80bfb00</ref></geom>
+ <provider><ref>0x80bf480</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfa80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1e</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b93c0</ref>
+ <geom><ref>0x80bfa80</ref></geom>
+ <provider><ref>0x80bf400</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfa00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9380</ref>
+ <geom><ref>0x80bfa00</ref></geom>
+ <provider><ref>0x80bf380</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf980</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1b</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9340</ref>
+ <geom><ref>0x80bf980</ref></geom>
+ <provider><ref>0x80bf300</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf900</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9300</ref>
+ <geom><ref>0x80bf900</ref></geom>
+ <provider><ref>0x80bf280</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf680</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9280</ref>
+ <geom><ref>0x80bf680</ref></geom>
+ <provider><ref>0x80bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf500</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9200</ref>
+ <geom><ref>0x80bf500</ref></geom>
+ <provider><ref>0x80bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf180</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9180</ref>
+ <geom><ref>0x80bf180</ref></geom>
+ <provider><ref>0x80bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80b9080</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <consumer>
+ <ref>0x80b90c0</ref>
+ <geom><ref>0x80b9080</ref></geom>
+ <provider><ref>0x80b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ </method>
+ <method>
+ <ref>0x8071280</ref>
+ <name>MBREXT-method</name>
+ </method>
+ <method>
+ <ref>0x8071260</ref>
+ <name>MBR-method</name>
+ <geom>
+ <ref>0x80b9100</ref>
+ <method><ref>0x8071260</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b9140</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <provider><ref>0x80b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf100</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf080</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2</name>
+ <config>
+ <index>1</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf000</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1</name>
+ <config>
+ <index>0</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x80712a0</ref>
+ <name>BSD-method</name>
+ <geom>
+ <ref>0x80bf700</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b92c0</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <provider><ref>0x80bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf880</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3d</name>
+ <config>
+ <index>3</index>
+ <length>6488104960</length>
+ <seclength>12672080</seclength>
+ <offset>10682408960</offset>
+ <secoffset>20864080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf800</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3c</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf780</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3a</name>
+ <config>
+ <index>0</index>
+ <length>2097152000</length>
+ <seclength>4096000</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x80bf580</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b9240</ref>
+ <geom><ref>0x80bf580</ref></geom>
+ <provider><ref>0x80bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf600</ref>
+ <geom><ref>0x80bf580</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2c</name>
+ <config>
+ <index>2</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x80bf200</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b91c0</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <provider><ref>0x80bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf480</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1f</name>
+ <config>
+ <index>5</index>
+ <length>2066973184</length>
+ <seclength>4037057</seclength>
+ <offset>1153465856</offset>
+ <secoffset>2252863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf400</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1e</name>
+ <config>
+ <index>4</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>629177856</offset>
+ <secoffset>1228863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf380</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1c</name>
+ <config>
+ <index>2</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf300</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1b</name>
+ <config>
+ <index>1</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>104889856</offset>
+ <secoffset>204863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf280</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1a</name>
+ <config>
+ <index>0</index>
+ <length>104857600</length>
+ <seclength>204800</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x80711c0</ref>
+ <name>SIMDISK-method</name>
+ <geom>
+ <ref>0x80b9000</ref>
+ <method><ref>0x80711c0</ref></method>
+ <name>ad0</name>
+ <rank>1</rank>
+ <provider>
+ <ref>0x80b9040</ref>
+ <geom><ref>0x80b9000</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0</name>
+ </provider>
+ </geom>
+ </method>
+</mesh>
diff --git a/tools/regression/geom/ConfCmp/a1a.conf b/tools/regression/geom/ConfCmp/a1a.conf
new file mode 100644
index 000000000000..01110f39f8af
--- /dev/null
+++ b/tools/regression/geom/ConfCmp/a1a.conf
@@ -0,0 +1,414 @@
+<mesh>
+ <FreeBSD>$FreeBSD$</FreeBSD>
+ <method>
+ <ref>0x90712c0</ref>
+ <name>DEV-method</name>
+ <geom>
+ <ref>0x90bfd00</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s3d</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x90b9500</ref>
+ <geom><ref>0x90bfd00</ref></geom>
+ <provider><ref>0x90bf880</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bfc80</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s3c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x90b94c0</ref>
+ <geom><ref>0x90bfc80</ref></geom>
+ <provider><ref>0x90bf800</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bfc00</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s3a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x90b9480</ref>
+ <geom><ref>0x90bfc00</ref></geom>
+ <provider><ref>0x90bf780</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bfb80</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s2c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x90b9440</ref>
+ <geom><ref>0x90bfb80</ref></geom>
+ <provider><ref>0x90bf600</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bfb00</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s1f</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x90b9400</ref>
+ <geom><ref>0x90bfb00</ref></geom>
+ <provider><ref>0x90bf480</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bfa80</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s1e</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x90b93c0</ref>
+ <geom><ref>0x90bfa80</ref></geom>
+ <provider><ref>0x90bf400</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bfa00</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s1c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x90b9380</ref>
+ <geom><ref>0x90bfa00</ref></geom>
+ <provider><ref>0x90bf380</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bf980</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s1b</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x90b9340</ref>
+ <geom><ref>0x90bf980</ref></geom>
+ <provider><ref>0x90bf300</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bf900</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s1a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x90b9300</ref>
+ <geom><ref>0x90bf900</ref></geom>
+ <provider><ref>0x90bf280</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bf680</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x90b9280</ref>
+ <geom><ref>0x90bf680</ref></geom>
+ <provider><ref>0x90bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bf500</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x90b9200</ref>
+ <geom><ref>0x90bf500</ref></geom>
+ <provider><ref>0x90bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90bf180</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x90b9180</ref>
+ <geom><ref>0x90bf180</ref></geom>
+ <provider><ref>0x90bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x90b9080</ref>
+ <method><ref>0x90712c0</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <consumer>
+ <ref>0x90b90c0</ref>
+ <geom><ref>0x90b9080</ref></geom>
+ <provider><ref>0x90b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ </method>
+ <method>
+ <ref>0x9071280</ref>
+ <name>MBREXT-method</name>
+ </method>
+ <method>
+ <ref>0x9071260</ref>
+ <name>MBR-method</name>
+ <geom>
+ <ref>0x90b9100</ref>
+ <method><ref>0x9071260</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x90b9140</ref>
+ <geom><ref>0x90b9100</ref></geom>
+ <provider><ref>0x90b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x90bf100</ref>
+ <geom><ref>0x90b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x90bf080</ref>
+ <geom><ref>0x90b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2</name>
+ <config>
+ <index>1</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x90bf000</ref>
+ <geom><ref>0x90b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1</name>
+ <config>
+ <index>0</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x90712a0</ref>
+ <name>BSD-method</name>
+ <geom>
+ <ref>0x90bf700</ref>
+ <method><ref>0x90712a0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x90b92c0</ref>
+ <geom><ref>0x90bf700</ref></geom>
+ <provider><ref>0x90bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x90bf880</ref>
+ <geom><ref>0x90bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3d</name>
+ <config>
+ <index>3</index>
+ <length>6488104960</length>
+ <seclength>12672080</seclength>
+ <offset>10682408960</offset>
+ <secoffset>20864080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x90bf800</ref>
+ <geom><ref>0x90bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3c</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x90bf780</ref>
+ <geom><ref>0x90bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3a</name>
+ <config>
+ <index>0</index>
+ <length>2097152000</length>
+ <seclength>4096000</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x90bf580</ref>
+ <method><ref>0x90712a0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x90b9240</ref>
+ <geom><ref>0x90bf580</ref></geom>
+ <provider><ref>0x90bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x90bf600</ref>
+ <geom><ref>0x90bf580</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2c</name>
+ <config>
+ <index>2</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x90bf200</ref>
+ <method><ref>0x90712a0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x90b91c0</ref>
+ <geom><ref>0x90bf200</ref></geom>
+ <provider><ref>0x90bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x90bf480</ref>
+ <geom><ref>0x90bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1f</name>
+ <config>
+ <index>5</index>
+ <length>2066973184</length>
+ <seclength>4037057</seclength>
+ <offset>1153465856</offset>
+ <secoffset>2252863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x90bf400</ref>
+ <geom><ref>0x90bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1e</name>
+ <config>
+ <index>4</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>629177856</offset>
+ <secoffset>1228863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x90bf380</ref>
+ <geom><ref>0x90bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1c</name>
+ <config>
+ <index>2</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x90bf300</ref>
+ <geom><ref>0x90bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1b</name>
+ <config>
+ <index>1</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>104889856</offset>
+ <secoffset>204863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x90bf280</ref>
+ <geom><ref>0x90bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1a</name>
+ <config>
+ <index>0</index>
+ <length>104857600</length>
+ <seclength>204800</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x90711c0</ref>
+ <name>SIMDISK-method</name>
+ <geom>
+ <ref>0x90b9000</ref>
+ <method><ref>0x90711c0</ref></method>
+ <name>ad0</name>
+ <rank>1</rank>
+ <provider>
+ <ref>0x90b9040</ref>
+ <geom><ref>0x90b9000</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0</name>
+ </provider>
+ </geom>
+ </method>
+</mesh>
diff --git a/tools/regression/geom/ConfCmp/a1b.conf b/tools/regression/geom/ConfCmp/a1b.conf
new file mode 100644
index 000000000000..46f423b28ec0
--- /dev/null
+++ b/tools/regression/geom/ConfCmp/a1b.conf
@@ -0,0 +1,414 @@
+<mesh>
+ <FreeBSD>$FreeBSD$</FreeBSD>
+ <method>
+ <ref>0x80712c0</ref>
+ <name>DEV-method</name>
+ <geom>
+ <ref>0x80bfd00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3d</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9500</ref>
+ <geom><ref>0x80bfd00</ref></geom>
+ <provider><ref>0x80bf880</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfc80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b94c0</ref>
+ <geom><ref>0x80bfc80</ref></geom>
+ <provider><ref>0x80bf800</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfc00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9480</ref>
+ <geom><ref>0x80bfc00</ref></geom>
+ <provider><ref>0x80bf780</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfb80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s2c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9440</ref>
+ <geom><ref>0x80bfb80</ref></geom>
+ <provider><ref>0x80bf600</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfb00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1f</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9400</ref>
+ <geom><ref>0x80bfb00</ref></geom>
+ <provider><ref>0x80bf480</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfa80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1e</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b93c0</ref>
+ <geom><ref>0x80bfa80</ref></geom>
+ <provider><ref>0x80bf400</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfa00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9380</ref>
+ <geom><ref>0x80bfa00</ref></geom>
+ <provider><ref>0x80bf380</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf980</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1b</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9340</ref>
+ <geom><ref>0x80bf980</ref></geom>
+ <provider><ref>0x80bf300</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf900</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9300</ref>
+ <geom><ref>0x80bf900</ref></geom>
+ <provider><ref>0x80bf280</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf680</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9280</ref>
+ <geom><ref>0x80bf680</ref></geom>
+ <provider><ref>0x80bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf500</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9200</ref>
+ <geom><ref>0x80bf500</ref></geom>
+ <provider><ref>0x80bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf180</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9180</ref>
+ <geom><ref>0x80bf180</ref></geom>
+ <provider><ref>0x80bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80b9080</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <consumer>
+ <ref>0x80b90c0</ref>
+ <geom><ref>0x80b9080</ref></geom>
+ <provider><ref>0x80b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ </method>
+ <method>
+ <ref>0x8071280</ref>
+ <name>MBREXT-method</name>
+ </method>
+ <method>
+ <ref>0x8071260</ref>
+ <name>MBR-method</name>
+ <geom>
+ <ref>0x80b9100</ref>
+ <method><ref>0x8071260</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b9140</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <provider><ref>0x80b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf100</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf080</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2</name>
+ <config>
+ <index>1</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf000</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1</name>
+ <config>
+ <index>0</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x80712a0</ref>
+ <name>BSD-method</name>
+ <geom>
+ <ref>0x80bf700</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b92c0</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <provider><ref>0x80bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf880</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3d</name>
+ <config>
+ <index>3</index>
+ <length>6488104960</length>
+ <seclength>12672080</seclength>
+ <offset>10682408960</offset>
+ <secoffset>20864080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf800</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3c</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf780</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3a</name>
+ <config>
+ <index>0</index>
+ <length>2097152000</length>
+ <seclength>4096000</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x80bf580</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b9240</ref>
+ <geom><ref>0x80bf580</ref></geom>
+ <provider><ref>0x80bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf600</ref>
+ <geom><ref>0x80bf580</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2c</name>
+ <config>
+ <index>2</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x80bf200</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b91c0</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <provider><ref>0x80bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf480</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1f</name>
+ <config>
+ <index>5</index>
+ <length>2066973184</length>
+ <seclength>4037057</seclength>
+ <offset>1153465856</offset>
+ <secoffset>2252863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf400</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1e</name>
+ <config>
+ <index>4</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>629177856</offset>
+ <secoffset>1228863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf380</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1c</name>
+ <config>
+ <index>2</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf300</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1b</name>
+ <config>
+ <index>1</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>104889856</offset>
+ <secoffset>204863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf280</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1a</name>
+ <config>
+ <index>0</index>
+ <length>104857600</length>
+ <seclength>204800</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x80711c0</ref>
+ <name>SIMDISK-method</name>
+ <geom>
+ <ref>0x80b9000</ref>
+ <method><ref>0x80711c0</ref></method>
+ <name>ad0</name>
+ <rank>1</rank>
+ <provider>
+ <ref>0x80b9041</ref>
+ <geom><ref>0x80b9000</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0</name>
+ </provider>
+ </geom>
+ </method>
+</mesh>
diff --git a/tools/regression/geom/ConfCmp/a1c.conf b/tools/regression/geom/ConfCmp/a1c.conf
new file mode 100644
index 000000000000..1b5a2b939c2e
--- /dev/null
+++ b/tools/regression/geom/ConfCmp/a1c.conf
@@ -0,0 +1,414 @@
+<mesh>
+ <FreeBSD>$FreeBSD$</FreeBSD>
+ <method>
+ <ref>0x80712c0</ref>
+ <name>DEV-method</name>
+ <geom>
+ <ref>0x80bfd00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3d</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9500</ref>
+ <geom><ref>0x80bfd00</ref></geom>
+ <provider><ref>0x80bf880</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfc80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b94c0</ref>
+ <geom><ref>0x80bfc80</ref></geom>
+ <provider><ref>0x80bf800</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfc00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9480</ref>
+ <geom><ref>0x80bfc00</ref></geom>
+ <provider><ref>0x80bf780</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfb80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s2c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9440</ref>
+ <geom><ref>0x80bfb80</ref></geom>
+ <provider><ref>0x80bf600</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfb00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1f</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9400</ref>
+ <geom><ref>0x80bfb00</ref></geom>
+ <provider><ref>0x80bf480</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfa80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1e</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b93c0</ref>
+ <geom><ref>0x80bfa80</ref></geom>
+ <provider><ref>0x80bf400</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfa00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9380</ref>
+ <geom><ref>0x80bfa00</ref></geom>
+ <provider><ref>0x80bf380</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf980</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1b</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9340</ref>
+ <geom><ref>0x80bf980</ref></geom>
+ <provider><ref>0x80bf300</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf900</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9300</ref>
+ <geom><ref>0x80bf900</ref></geom>
+ <provider><ref>0x80bf280</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf680</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9280</ref>
+ <geom><ref>0x80bf680</ref></geom>
+ <provider><ref>0x80bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf500</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9200</ref>
+ <geom><ref>0x80bf500</ref></geom>
+ <provider><ref>0x80bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf180</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9180</ref>
+ <geom><ref>0x80bf180</ref></geom>
+ <provider><ref>0x80bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80b9080</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <consumer>
+ <ref>0x80b90c0</ref>
+ <geom><ref>0x80b9080</ref></geom>
+ <provider><ref>0x80b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ </method>
+ <method>
+ <ref>0x8071280</ref>
+ <name>MBREXT-method</name>
+ </method>
+ <method>
+ <ref>0x8071260</ref>
+ <name>MBR-method</name>
+ <geom>
+ <ref>0x80b9100</ref>
+ <method><ref>0x8071260</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b9140</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <provider><ref>0x80b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf100</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf080</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2</name>
+ <config>
+ <index>1</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf000</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1</name>
+ <config>
+ <index>0</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x80712a0</ref>
+ <name>BSD-method</name>
+ <geom>
+ <ref>0x80bf700</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b92c0</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <provider><ref>0x80bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf880</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3d</name>
+ <config>
+ <index>3</index>
+ <length>6488104960</length>
+ <seclength>12672080</seclength>
+ <offset>10682408960</offset>
+ <secoffset>20864080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf800</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3c</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf780</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3a</name>
+ <config>
+ <index>0</index>
+ <length>2097152000</length>
+ <seclength>4096000</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x80bf580</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b9240</ref>
+ <geom><ref>0x80bf580</ref></geom>
+ <provider><ref>0x80bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf600</ref>
+ <geom><ref>0x80bf580</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2c</name>
+ <config>
+ <index>2</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x80bf200</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b91c0</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <provider><ref>0x80bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf480</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1f</name>
+ <config>
+ <index>5</index>
+ <length>2066973184</length>
+ <seclength>4037057</seclength>
+ <offset>1153465856</offset>
+ <secoffset>2252863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf400</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1e</name>
+ <config>
+ <index>4</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>629177856</offset>
+ <secoffset>1228863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf380</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1c</name>
+ <config>
+ <index>2</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf300</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1b</name>
+ <config>
+ <index>1</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>104889856</offset>
+ <secoffset>204863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf280</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1a</name>
+ <config>
+ <index>0</index>
+ <length>104857600</length>
+ <seclength>204800</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x80711c0</ref>
+ <name>SIMDISK-method</name>
+ <geom>
+ <ref>0x80b9000</ref>
+ <method><ref>0x80711c0</ref></method>
+ <name>ad0</name>
+ <rank>1</rank>
+ <provider>
+ <ref>0x80b9040</ref>
+ <geom><ref>0x80b9000</ref></geom>
+ <mode>r0w0e1</mode>
+ <name>ad0</name>
+ </provider>
+ </geom>
+ </method>
+</mesh>
diff --git a/tools/regression/geom/ConfCmp/a1d.conf b/tools/regression/geom/ConfCmp/a1d.conf
new file mode 100644
index 000000000000..a9063c554b35
--- /dev/null
+++ b/tools/regression/geom/ConfCmp/a1d.conf
@@ -0,0 +1,414 @@
+<mesh>
+ <FreeBSD>$FreeBSD$</FreeBSD>
+ <method>
+ <ref>0x80712c0</ref>
+ <name>DEV-method</name>
+ <geom>
+ <ref>0x80bfd00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3d</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9500</ref>
+ <geom><ref>0x80bfd00</ref></geom>
+ <provider><ref>0x80bf880</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfc80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b94c0</ref>
+ <geom><ref>0x80bfc80</ref></geom>
+ <provider><ref>0x80bf800</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfc00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9480</ref>
+ <geom><ref>0x80bfc00</ref></geom>
+ <provider><ref>0x80bf780</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfb80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s2c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9440</ref>
+ <geom><ref>0x80bfb80</ref></geom>
+ <provider><ref>0x80bf600</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfb00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1f</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9400</ref>
+ <geom><ref>0x80bfb00</ref></geom>
+ <provider><ref>0x80bf480</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfa80</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1e</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b93c0</ref>
+ <geom><ref>0x80bfa80</ref></geom>
+ <provider><ref>0x80bf400</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bfa00</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1c</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9380</ref>
+ <geom><ref>0x80bfa00</ref></geom>
+ <provider><ref>0x80bf380</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf980</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1b</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9340</ref>
+ <geom><ref>0x80bf980</ref></geom>
+ <provider><ref>0x80bf300</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf900</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1a</name>
+ <rank>4</rank>
+ <consumer>
+ <ref>0x80b9300</ref>
+ <geom><ref>0x80bf900</ref></geom>
+ <provider><ref>0x80bf280</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf680</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9280</ref>
+ <geom><ref>0x80bf680</ref></geom>
+ <provider><ref>0x80bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf500</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9200</ref>
+ <geom><ref>0x80bf500</ref></geom>
+ <provider><ref>0x80bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80bf180</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <consumer>
+ <ref>0x80b9180</ref>
+ <geom><ref>0x80bf180</ref></geom>
+ <provider><ref>0x80bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ <geom>
+ <ref>0x80b9080</ref>
+ <method><ref>0x80712c0</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <consumer>
+ <ref>0x80b90c0</ref>
+ <geom><ref>0x80b9080</ref></geom>
+ <provider><ref>0x80b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ </consumer>
+ </geom>
+ </method>
+ <method>
+ <ref>0x8071280</ref>
+ <name>MBREXT-method</name>
+ </method>
+ <method>
+ <ref>0x8071260</ref>
+ <name>MBR-method</name>
+ <geom>
+ <ref>0x80b9100</ref>
+ <method><ref>0x8071260</ref></method>
+ <name>ad0</name>
+ <rank>2</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b9140</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <provider><ref>0x80b9040</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf100</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf080</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2</name>
+ <config>
+ <index>1</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf000</ref>
+ <geom><ref>0x80b9100</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1</name>
+ <config>
+ <index>0</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ <type>165</type>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x80712a0</ref>
+ <name>BSD-method</name>
+ <geom>
+ <ref>0x80bf700</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s3</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b92c0</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <provider><ref>0x80bf100</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf880</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3d</name>
+ <config>
+ <index>3</index>
+ <length>6488104960</length>
+ <seclength>12672080</seclength>
+ <offset>10682408960</offset>
+ <secoffset>20864080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf800</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3c</name>
+ <config>
+ <index>2</index>
+ <length>8585256960</length>
+ <seclength>16768080</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf780</ref>
+ <geom><ref>0x80bf700</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s3a</name>
+ <config>
+ <index>0</index>
+ <length>2097152000</length>
+ <seclength>4096000</seclength>
+ <offset>8585256960</offset>
+ <secoffset>16768080</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x80bf580</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s2</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b9240</ref>
+ <geom><ref>0x80bf580</ref></geom>
+ <provider><ref>0x80bf080</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf600</ref>
+ <geom><ref>0x80bf580</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s2c</name>
+ <config>
+ <index>2</index>
+ <length>5364817920</length>
+ <seclength>10478160</seclength>
+ <offset>3220439040</offset>
+ <secoffset>6289920</secoffset>
+ </config>
+ </provider>
+ </geom>
+ <geom>
+ <ref>0x80bf200</ref>
+ <method><ref>0x80712a0</ref></method>
+ <name>ad0s1</name>
+ <rank>3</rank>
+ <config>
+ </config>
+ <consumer>
+ <ref>0x80b91c0</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <provider><ref>0x80bf000</ref></provider>
+ <mode>r0w0e0</mode>
+ <config>
+ </config>
+ </consumer>
+ <provider>
+ <ref>0x80bf480</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1f</name>
+ <config>
+ <index>5</index>
+ <length>2066973184</length>
+ <seclength>4037057</seclength>
+ <offset>1153465856</offset>
+ <secoffset>2252863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf400</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1e</name>
+ <config>
+ <index>4</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>629177856</offset>
+ <secoffset>1228863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf380</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1c</name>
+ <config>
+ <index>2</index>
+ <length>3220406784</length>
+ <seclength>6289857</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf300</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1b</name>
+ <config>
+ <index>1</index>
+ <length>524288000</length>
+ <seclength>1024000</seclength>
+ <offset>104889856</offset>
+ <secoffset>204863</secoffset>
+ </config>
+ </provider>
+ <provider>
+ <ref>0x80bf280</ref>
+ <geom><ref>0x80bf200</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0s1a</name>
+ <config>
+ <index>0</index>
+ <length>104857600</length>
+ <seclength>204800</seclength>
+ <offset>32256</offset>
+ <secoffset>63</secoffset>
+ </config>
+ </provider>
+ </geom>
+ </method>
+ <method>
+ <ref>0x80711c0</ref>
+ <name>SIMDISK-method</name>
+ <geom>
+ <ref>0x80b9000</ref>
+ <method><ref>0x80711c0</ref></method>
+ <name>ad0</name>
+ <rank>1</rank>
+ <provider>
+ <ref>0x80b9040</ref>
+ <geom><ref>0x80b9000</ref></geom>
+ <mode>r0w0e0</mode>
+ <name>ad0</namf>
+ </provider>
+ </geom>
+ </method>
+</mesh>
diff --git a/tools/regression/geom/Data/disk.apple.xml b/tools/regression/geom/Data/disk.apple.xml
new file mode 100644
index 000000000000..ecdd5236497c
--- /dev/null
+++ b/tools/regression/geom/Data/disk.apple.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <FreeBSD>$FreeBSD$</FreeBSD>
+ <sectorsize>512</sectorsize>
+ <mediasize>366530560</mediasize>
+ <fwsectors>0</fwsectors>
+ <fwheads>0</fwheads>
+ <fwcylinders>0</fwcylinders>
+ <sector>
+ <offset>0</offset>
+ <hexdata>
+ 45520200000aec68000100010000000000010000004000120001000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>512</offset>
+ <hexdata>
+ 504d00000000000300000060000aec084d61634f530000000000000000000000
+ 000000000000000000000000000000004170706c655f48465300000000000000
+ 0000000000000000000000000000000000000000000aec08000000b700000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>1024</offset>
+ <hexdata>
+ 504d000000000003000000010000003f4170706c650000000000000000000000
+ 000000000000000000000000000000004170706c655f706172746974696f6e5f
+ 6d617000000000000000000000000000000000000000003f0000003700000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>1536</offset>
+ <hexdata>
+ 504d00000000000300000040000000204d6163696e746f736800000000000000
+ 000000000000000000000000000000004170706c655f44726976657234330000
+ 0000000000000000000000000000000000000000000000200000007f00000000
+ 000023ee0000000000000000000000000000000000007c083638303030000000
+ 0000000000000000000106000000000000000001000700000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+</DISKIMAGE>
diff --git a/tools/regression/geom/Data/disk.beast.da0.xml b/tools/regression/geom/Data/disk.beast.da0.xml
new file mode 100644
index 000000000000..8a3ab6ec020b
--- /dev/null
+++ b/tools/regression/geom/Data/disk.beast.da0.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <comment>
+ alpha BSD label from beast.freebsd.org
+ </comment>
+ <sectorsize>512</sectorsize>
+ <mediasize>0</mediasize>
+ <fwsectors>0</fwsectors>
+ <fwheads>0</fwheads>
+ <fwcylinders>0</fwcylinders>
+ <sector>
+ <offset>0</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 5745568204000000646130000000000000000000000000000000000000000000
+ 0000000000000000000200003f000000ff0000000f020000c13e000000338100
+ 0000000000000000100e01000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000057455682594e08000020000000200000002079000000000000040000
+ 0708100000130800002079000000000001000000003381000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0f0000000000000001000000000000000000000000000000fc8c1983a904da83
+ </hexdata>
+ </sector>
+</DISKIMAGE>
diff --git a/tools/regression/geom/Data/disk.critter.ad0.xml b/tools/regression/geom/Data/disk.critter.ad0.xml
new file mode 100644
index 000000000000..ff56d2e17c57
--- /dev/null
+++ b/tools/regression/geom/Data/disk.critter.ad0.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <comment>
+ This image contains the MBR and disklabel sectors from my Asus M1300
+ laptop.
+ </comment>
+ <sectorsize>512</sectorsize>
+ <mediasize>0</mediasize>
+ <sector>
+ <offset>0</offset>
+ <hexdata>
+ fc31c08ec08ed88ed0bc007cbe1a7cbf1a06b9e601f3a4e9008a31f6bbbe07b1
+ 04382f74087f7885f6757489de80c310e2ef85f67502cd1880fa80720b8a3675
+ 0480c68038f272028a1489e78a74018b4c02bb007c80feff753283f9ff752d51
+ 53bbaa55b441cd13722081fb55aa751af6c10174155b666a0066ff740806536a
+ 016a1089e6b80042eb055b59b80102cd1389fc720f81bffe0155aa750cffe3be
+ bc06eb11bed406eb0cbef306eb07bb0700b40ecd10ac84c075f4ebfe496e7661
+ 6c696420706172746974696f6e207461626c65004572726f72206c6f6164696e
+ 67206f7065726174696e672073797374656d004d697373696e67206f70657261
+ 74696e672073797374656d000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008001
+ 0100a50fffff3f00000041295402000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>512</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>32768</offset>
+ <hexdata>
+ 5745568205000000616430733100000000000000000000000000000000000000
+ 0000000000000000000200003f0000001000000067970000f003000041295402
+ 0000000000000000100e01000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000574556824fa608000020000000200000000020003f00000000040000
+ 07081600000020003f0020000000000001000000412954023f00000000000000
+ 00000000418984003fa0cf01000400000708160000a00f003f00400000040000
+ 07081600000080003fa04f000004000007081600000060003fa0cf0000040000
+ 070816000000a0003fa02f010004000007081600000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>64512</offset>
+ <hexdata>
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>1073806336</offset>
+ <hexdata>
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>1598094336</offset>
+ <hexdata>
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ 4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2147548160</offset>
+ <hexdata>
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2671836160</offset>
+ <hexdata>
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffff00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+</DISKIMAGE>
diff --git a/tools/regression/geom/Data/disk.empty.flp.xml b/tools/regression/geom/Data/disk.empty.flp.xml
new file mode 100644
index 000000000000..7e3c827167b4
--- /dev/null
+++ b/tools/regression/geom/Data/disk.empty.flp.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <comment>
+ An empty floppy disk
+ </comment>
+ <sectorsize>512</sectorsize>
+ <mediasize>1474560</mediasize>
+ <fwsectors>18</fwsectors>
+ <fwheads>2</fwheads>
+ <fwcylinders>80</fwcylinders>
+</DISKIMAGE>
diff --git a/tools/regression/geom/Data/disk.far.ad0.xml b/tools/regression/geom/Data/disk.far.ad0.xml
new file mode 100644
index 000000000000..597d6ee1e190
--- /dev/null
+++ b/tools/regression/geom/Data/disk.far.ad0.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <comment>
+ A Windows laptop.
+ </comment>
+ <sectorsize>512</sectorsize>
+ <mediasize>0</mediasize>
+ <sector>
+ <offset>0</offset>
+ <hexdata>
+ 33c08ed0bc007cfb5007501ffcbe1b7cbf1b065057b9e501f3a4cbbebe07b104
+ 382c7c09751583c610e2f5cd188b148bee83c610497416382c74f6be10074eac
+ 3c0074fabb0700b40ecd10ebf2894625968a4604b4063c0e7411b40b3c0c7405
+ 3ac4752b40c64625067524bbaa5550b441cd1358721681fb55aa7510f6c10174
+ 0b8ae0885624c706a106eb1e886604bf0a00b801028bdc33c983ff057f038b4e
+ 25034e02cd137229be4607813efe7d55aa745a83ef057fda85f67583be2707eb
+ 8a9891529903460813560ae812005aebd54f74e433c0cd13ebb8000080093521
+ 5633f656565250065351be1000568bf45052b800428a5624cd135a588d641072
+ 0a4075014280c702e2f7f85ec3eb74496e76616c696420706172746974696f6e
+ 207461626c65004572726f72206c6f6164696e67206f7065726174696e672073
+ 797374656d004d697373696e67206f7065726174696e672073797374656d0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000008bfc1e578bf5cb00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 0100a05304263f00000092d80800805401260befbf730cd90800340a88000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>512</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+</DISKIMAGE>
diff --git a/tools/regression/geom/Data/disk.flat.da1.xml b/tools/regression/geom/Data/disk.flat.da1.xml
new file mode 100644
index 000000000000..63e919c20988
--- /dev/null
+++ b/tools/regression/geom/Data/disk.flat.da1.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <comment>
+ This image contains an interesting setup: there is an MBR+BSD
+ but also another BSD at sector one which is valid but bogus.
+ </comment>
+ <sectorsize>512</sectorsize>
+ <mediasize>0</mediasize>
+ <fwsectors>0</fwsectors>
+ <fwheads>0</fwheads>
+ <fwcylinders>0</fwcylinders>
+ <sector>
+ <offset>0</offset>
+ <hexdata>
+ fc31c08ec08ed88ed0bc007cbe1a7cbf1a06b9e601f3a4e9008a31f6bbbe07b1
+ 04382f74087f7885f6757489de80c310e2ef85f67502cd1880fa80720b8a3675
+ 0480c68038f272028a1489e78a74018b4c02bb007c80feff753283f9ff752d51
+ 53bbaa55b441cd13722081fb55aa751af6c10174155b666a0066ff740806536a
+ 016a1089e6b80042eb055b59b80102cd1389fc720f81bffe0155aa750cffe3be
+ bc06eb11bed406eb0cbef306eb07bb0700b40ecd10ac84c075f4ebfe496e7661
+ 6c696420706172746974696f6e207461626c65004572726f72206c6f6164696e
+ 67206f7065726174696e672073797374656d004d697373696e67206f70657261
+ 74696e672073797374656d000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008001
+ 0100a5feffff3f0000003a612302000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>512</offset>
+ <hexdata>
+ 5745568204000000534541474154452053543331383433360000000000000000
+ 000000000000000000020000000800000100000072440000000800000004fb00
+ 0000000000000000100e01000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000057455682e29908000020000000200000002001000000000000040000
+ 07081000000008000020010000000000010000000004fb000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000e0f100002009000004000007081000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>32256</offset>
+ <hexdata>
+ eb1b9090161f666a005150065331c088f0506a1089e5e8c7008d6610cbfc31c9
+ 8ec18ed98ed1bc007c89e6bf0007fec5f3a5beee7d80fa80722cb601e86700b9
+ 0100bebe8db601807c04a57507e319f60480751483c610fec680fe0572e949e3
+ e1be8b7deb5231d289160009b610e83500bb00908b770a01debf00b0b900ac29
+ f1f3a429f930c0f3aae80300e98113fae464a80275fab0d1e664e464a80275fa
+ b0dfe660fbc3bb008c8b44088b4c0a0ee853ff732abe867de81c00be907de816
+ 0030e4cd16c70672043412ea0000ffffbb0700b40ecd10ac84c075f4b401f9c3
+ 52b408cd1388f55a72f580e13f74edfa668b460852660fb6d96631d266f7f388
+ eb88d54330d266f7f388d75a663dff030000fb774486c4c0c80208e8409188fe
+ 28e08a660238e0720288e0bf0500c45e0450b402cd135b730a4f741c30e4cd13
+ 93ebeb0fb6c30146087303ff460ad0e3005e052846027788c32ef6069908800f
+ 8479ffbbaa5552b441cd135a0f826fff81fb55aa0f8564fff6c1010f845dff89
+ eeb442cd13c35265616400426f6f7400206572726f720d0a0080909090909090
+ 9090909090909090909090909090909090909090909090909090909090900000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000080000100a5ffffff0000000050c3000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>32768</offset>
+ <hexdata>
+ 5745568204000000646131733100000000000000000000000000000000000000
+ 0000000000000000000200003f000000ff000000b8080000c13e00003a612302
+ 0000000000000000100e01000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000005745568233c408000020000000200000000000000000000000000000
+ 0000000000800c003f800c0000000000010000003a6123023f00000000000000
+ 000000000000000000000000000000000000000000800c003f00000000040000
+ 07081600000020003f00190000040000070816003a61ea013f00390000040000
+ 0708160000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+</DISKIMAGE>
diff --git a/tools/regression/geom/Data/disk.kern.flp.xml b/tools/regression/geom/Data/disk.kern.flp.xml
new file mode 100644
index 000000000000..3d5db26469ca
--- /dev/null
+++ b/tools/regression/geom/Data/disk.kern.flp.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <comment>
+ A FreeBSD kern.flp image.
+ </comment>
+ <sectorsize>512</sectorsize>
+ <mediasize>0</mediasize>
+ <sector>
+ <offset>0</offset>
+ <hexdata>
+ eb1b9090161f666a005150065331c088f0506a1089e5e8c7008d6610cbfc31c9
+ 8ec18ed98ed1bc007c89e6bf0007fec5f3a5beee7d80fa80722cb601e86700b9
+ 0100bebe8db601807c04a57507e319f60480751483c610fec680fe0572e949e3
+ e1be8b7deb5231d289160009b610e83500bb00908b770a01debf00b0b900ac29
+ f1f3a429f930c0f3aae80300e98113fae464a80275fab0d1e664e464a80275fa
+ b0dfe660fbc3bb008c8b44088b4c0a0ee853ff732abe867de81c00be907de816
+ 0030e4cd16c70672043412ea0000ffffbb0700b40ecd10ac84c075f4b401f9c3
+ 52b408cd1388f55a72f580e13f74edfa668b460852660fb6d96631d266f7f388
+ eb88d54330d266f7f388d75a663dff030000fb774486c4c0c80208e8409188fe
+ 28e08a660238e0720288e0bf0500c45e0450b402cd135b730a4f741c30e4cd13
+ 93ebeb0fb6c30146087303ff460ad0e3005e052846027788c32ef6069908800f
+ 8479ffbbaa5552b441cd135a0f826fff81fb55aa0f8564fff6c1010f845dff89
+ eeb442cd13c35265616400426f6f7400206572726f720d0a0080909090909090
+ 9090909090909090909090909090909090909090909090909090909090900000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000080000100a5ffffff0000000050c3000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>512</offset>
+ <hexdata>
+ 5745568200000000666431343430000000000000000000000000000000000000
+ 00000000000000000002000012000000020000005000000024000000400b0000
+ 00000000000000002c0101000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000057455682286903000020000000200000400b00000000000000020000
+ 00080000400b0000000000000002000000080000400b00000000000000020000
+ 0708060000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+</DISKIMAGE>
diff --git a/tools/regression/geom/Data/disk.msdos.ext.xml b/tools/regression/geom/Data/disk.msdos.ext.xml
new file mode 100644
index 000000000000..64edc5c75141
--- /dev/null
+++ b/tools/regression/geom/Data/disk.msdos.ext.xml
@@ -0,0 +1,533 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <comment>
+ A MSDOS 6.22 disk with maximal number of extended partitions.
+ </comment>
+ <sectorsize>512</sectorsize>
+ <mediasize>0</mediasize>
+ <sector>
+ <offset>0</offset>
+ <hexdata>
+ fa33c08ed0bc007c8bf45007501ffbfcbf0006b90001f2a5ea1d060000bebe07
+ b304803c80740e803c00751c83c610fecb75efcd188b148b4c028bee83c610fe
+ cb741a803c0074f4be8b06ac3c00740b56bb0700b40ecd105eebf0ebfebf0500
+ bb007cb8010257cd135f730c33c0cd134f75edbea306ebd3bec206bffe7d813d
+ 55aa75c78bf5ea007c0000496e76616c696420706172746974696f6e20746162
+ 6c65004572726f72206c6f6164696e67206f7065726174696e67207379737465
+ 6d004d697373696e67206f7065726174696e672073797374656d000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008001
+ 010006fe7f043f00000086fa3f000000410505fe7f38c5fa3f0034bf0c000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>512</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2146798080</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410501fe7f053f000000823e00000000410605fe7f06c13e0000c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2155023360</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410601fe7f063f000000823e00000000410705fe7f07827d0000c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2163248640</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410701fe7f073f000000823e00000000410805fe7f0843bc0000c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2171473920</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410801fe7f083f000000823e00000000410905fe7f0904fb0000c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2179699200</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410901fe7f093f000000823e00000000410a05fe7f0ac5390100c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2187924480</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410a01fe7f0a3f000000823e00000000410b05fe7f0b86780100c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2196149760</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410b01fe7f0b3f000000823e00000000410c05fe7f0c47b70100c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2204375040</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410c01fe7f0c3f000000823e00000000410d05fe7f0d08f60100c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2212600320</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410d01fe7f0d3f000000823e00000000410e05fe7f0ec9340200c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2220825600</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410e01fe7f0e3f000000823e00000000410f05fe7f0f8a730200c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2229050880</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 410f01fe7f0f3f000000823e00000000411005fe7f104bb20200c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2237276160</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411001fe7f103f000000823e00000000411105fe7f110cf10200c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2245501440</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411101fe7f113f000000823e00000000411205fe7f12cd2f0300c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2253726720</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411201fe7f123f000000823e00000000411305fe7f138e6e0300c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2261952000</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411301fe7f133f000000823e00000000411405fe7f144fad0300c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2270177280</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411401fe7f143f000000823e00000000411505fe7f1510ec0300c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2278402560</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411501fe7f153f000000823e00000000411605fe7f16d12a0400c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2286627840</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411601fe7f163f000000823e00000000411705fe7f1792690400c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2294853120</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411701fe7f173f000000823e00000000411805fe7f1853a80400c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2303078400</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411801fe7f183f000000823e00000000411905fe7f1914e70400c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2311303680</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411901fe7f193f000000823e00000000411a05fe7f1ad5250500c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2319528960</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411a01fe7f1a3f000000823e00000000411b05fe7f1b96640500c13e00000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>2327754240</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 411b01fe7f1b3f000000823e0000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+</DISKIMAGE>
diff --git a/tools/regression/geom/Data/disk.msdos.flp.xml b/tools/regression/geom/Data/disk.msdos.flp.xml
new file mode 100644
index 000000000000..8bc9210c5170
--- /dev/null
+++ b/tools/regression/geom/Data/disk.msdos.flp.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <comment>
+ A MSDOS floppy image.
+ </comment>
+ <sectorsize>512</sectorsize>
+ <mediasize>0</mediasize>
+ <sector>
+ <offset>0</offset>
+ <hexdata>
+ eb3c904d53444f53352e30000201010002e000400bf009001200020000000000
+ 0000000000002911053b114e4f204e414d45202020204641543132202020fa33
+ c08ed0bc007c1607bb780036c5371e561653bf3e7cb90b00fcf3a4061fc645fe
+ 0f8b0e187c884df9894702c7073e7cfbcd13727933c03906137c74088b0e137c
+ 890e207ca0107cf726167c03061c7c13161e7c03060e7c83d200a3507c891652
+ 7ca3497c89164b7cb82000f726117c8b1e0b7c03c348f7f30106497c83164b7c
+ 00bb00058b16527ca1507ce89200721db001e8ac0072168bfbb90b00bee67df3
+ a6750a8d7f20b90b00f3a67418be9e7de85f0033c0cd165e1f8f048f4402cd19
+ 585858ebe88b471a48488a1e0d7c32fff7e30306497c13164b7cbb0007b90300
+ 505251e83a0072d8b001e85400595a5872bb05010083d200031e0b7ce2e28a2e
+ 157c8a16247c8b1e497ca14b7cea00007000ac0ac07429b40ebb0700cd10ebf2
+ 3b16187c7319f736187cfec288164f7c33d2f7361a7c8816257ca34d7cf8c3f9
+ c3b4028b164d7cb106d2e60a364f7c8bca86e98a16247c8a36257ccd13c30d0a
+ 4e6f6e2d53797374656d206469736b206f72206469736b206572726f720d0a52
+ 65706c61636520616e6420707265737320616e79206b6579207768656e207265
+ 6164790d0a00494f2020202020205359534d53444f53202020535953000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>512</offset>
+ <hexdata>
+ f0ffff03400005600007800009a0000bc0000de0000f00011120011340011560
+ 0117800119a0011bc0011de0011f000221200223400225600227800229a0022b
+ c0022de0022f000331200333400335600337800339a0033bc0033de0033f0004
+ 41200443400445600447800449a0044bc0044de0044f000551f0ff5340055560
+ 0557800559a0055bc0055de0055f000661200663400665600667800669a0066b
+ c0066de0066f000771200773400775600777800779a0077bc0077de0077f0008
+ 81200883400885600887800889a0088bc0088de0088f00099120099340099560
+ 0997800999a0099bc009ffef099f000aa1200aa3400aa5600aa7800aa9a00aab
+ c00aade00aaf000bb1200bb3400bb5600bb7800bb9a00bbbc00bbde00bbf000c
+ c1200cc3400cc5600cc7800cc9a00ccbc00ccde00ccf000dd1200dd3400dd560
+ 0dd7800dd9a00ddbc00ddde00ddf000ee1200ee3400ee5600ee7800ee9a00eeb
+ c00eede00eef000ff1200ff3400ff5600ff7800ff9a00ffbc00ffde00fff0010
+ 01211003411005611007f1ff09a1100bc1100de1100f01111121111341111561
+ 1117811119a1111bc1111de1111f011221211223411225611227811229a1122b
+ c1122de1122f011331211333411335611337811339a1133bc1133de1133f0114
+ 41211443411445611447811449a1144bc1144de1144f01155121155341155561
+ </hexdata>
+ </sector>
+</DISKIMAGE>
diff --git a/tools/regression/geom/Data/disk.typo.ad0.xml b/tools/regression/geom/Data/disk.typo.ad0.xml
new file mode 100644
index 000000000000..6c7ae72a88cb
--- /dev/null
+++ b/tools/regression/geom/Data/disk.typo.ad0.xml
@@ -0,0 +1,218 @@
+<?xml version="1.0"?>
+<DISKIMAGE>
+ <comment>
+ A multislice FreeBSD disk
+ </comment>
+ <sectorsize>512</sectorsize>
+ <mediasize>0</mediasize>
+ <sector>
+ <offset>0</offset>
+ <hexdata>
+ fc31c08ec08ed88ed0bc007cbd000a89efb108f3abfe45f252bb000689eeb802
+ 02e82e015ae9008af686bbfd20750484d278048a96bafd885600e8fc0052bbc2
+ 0731d2886ffc0fa396bbfd731c8a07bf0f08b103f2ae7411b10df2ae750481c7
+ 0d008a0d01cfe8c1004280c31073d4582c7f3a067504720548740e30c004b088
+ 86b8fdbfb207e8a100be0308e8ad008a96b9fd4ee8880030e4cd1a89d703bebc
+ fdb401cd16751330e4cd1a39fa72f28a86b9fdeb15b007e88e0030e4cd1688e0
+ 3c1c74eb2c3b3c0477eb980fa3460c73e48886b9fdbe000a8a1489f33c049c74
+ 0ac0e00405be0793c6078053f686bbfd407509bb0006b80103e856005e9d7507
+ 8a96b8fd80ea30bb007cb80102e8420072a381bffe0155aa759be81c00ffe3b0
+ 46e82400b03100d0eb170fab560cbe0008e8ebff89fee80300be0d08aca88075
+ 05e80400ebf6247f53bb0700b40ecd105bc38a74018b4c025689e780feff7540
+ 83f9ff753bf686bbfd8074345153bbaa5550b441cd1358720e81fb55aa7508f6
+ c101740380cc405b59f6c4407412666a0066ff740806536a006a1089e6864402
+ cd1389fc5ec39090909090909090909001014472697665200000808fb6008001
+ 0100a5ef7f9f3f000000c1f95f00000041a0a5efffff00fa5f0050e29f0000ff
+ ffffa5efffff50dcff0050dcff000000000000000000000000000000000055aa
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>512</offset>
+ <hexdata>
+ 2020a00a44656661756c743aa00d8a00050f010406070b0c0e6383a5a6a9b70e
+ 141312141d1c1b2124282e3439556e6b6e6f77ee444fd357696e646f7773204e
+ d457696e646f77f3554e49d84c696e75f8467265654253c44f70656e4253c44e
+ 65744253c44253442f4fd3000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>32768</offset>
+ <hexdata>
+ 5745568205000000616430733100000000000000000000000000000000000000
+ 0000000000000000000200003f000000f0000000180a0000103b000080295402
+ 0000000000000000100e01000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000005745568204c108000020000000200000002003003f00000000000000
+ 0700000000a00f003f2003000000000001000000c1f95f003f00000000000000
+ 000000000000000000000000000000000000000000a00f003fc0120000000000
+ 07000000c1993d003f6022000000000007000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>64512</offset>
+ <hexdata>
+ 0000007c0000010002000400f8ff0000000400f8000000000000000000000004
+ 0000004000000008000000000010007e00800000070000fe1f00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>104922112</offset>
+ <hexdata>
+ 3310f30d0350fbf66f44ebd906c9963d46b2bf609bb753131e7c24cf9ed194ce
+ a59117b612772b207ddcb753df72456f98d0cac567f60526c7b9308afd87e657
+ dd45b3d1eb075b6820aa6ea5a0f10511f65a257f0d7d89d88e189bef43786ff5
+ a0316511a7a07168f2ef001e71fbc56dd8ddc7866c4856dc979742be22f4badd
+ e1fcba7aebe4b5f4bb8b0c89e84de59f0ba48d7a8b00bb1797fc057e3d3d8058
+ 4b1987ac49b74bed74cb4985850d5be64e8188d40ad0323165b355c512a91523
+ 5d5211eeb021c754f552b160f9a73c4c5e59370163cf531ca0382cc462f9ac9d
+ 35612380f7a5d9d5e3bde129ef6fab02347088025d0937fb6c56dc68c283ce9d
+ 1cfc5b3c7ad1f52faeae05188386cb57cb88c5dccaa2db17a09420ae7d9f9d6e
+ 058370711f445cff4d4543ee9f0c3054400116304018f68d9c08d05b04680162
+ 23172b8b1775157790fe5e5100c530e3377d383a0080468b0125e87e8d7dee5f
+ 46030a238dc8a0000cb4eafc6ad4735f2c16d1642e3834aefbb5bfc25fcc0062
+ 3a89410ab88839e3ed151cd6bc2b5704c5db4c9fc39662bd3a41347212c664be
+ 04684e551c0a0362bb3139a460a7c8d178c349a47d724b7d456606b2f47a8d99
+ d4af7998148ed93443a828ece96cdb7eb158a21189ed1527bdad7b18b74f168b
+ d01fcfde994977174e41ad8f6ea19fac8bb95e5d68643d0457d746cf32531639
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>629210112</offset>
+ <hexdata>
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>1153498112</offset>
+ <hexdata>
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>3220439552</offset>
+ <hexdata>
+ 5745568205000000616430733200000000000000000000000000000000000000
+ 0000000000000000000200003f000000f0000000180a0000103b000080295402
+ 0000000000000000100e01000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000057455682fc1908000020000000200000000000000000000000000000
+ 000000000000000000000000000000000000000050e29f0000fa5f0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>6440878080</offset>
+ <hexdata>
+ 0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a
+ 0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a
+ 0a0a0a0a0a0a0a0a0a0a0a0a3c4120200a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a
+ 0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a
+ 0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a
+ 0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a
+ 0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a687265663d22687474703a2f2f777777
+ 2e706c6179626f7973746f72652e636f6d2f70626c696e6b2e6367693f616666
+ 696c696174653d4d4f3130303030303034353426736b753d4249303130362220
+ 7461726765743d225f626c616e6b22206f6e6d6f7573656f7665723d22706172
+ 656e742e77696e646f772e7374617475733d27506c6179626f792053746f7265
+ 273b2072657475726e2074727565223e3c494d47207372633d22687474703a2f
+ 2f61313833322e672e616b2e706c6179626f792e636f6d2f372f313833322f32
+ 332f3939303232313437302f7777772e706c6179626f792e636f6d2f6d616761
+ 7a696e652f63757272656e742f696d782f636f7665725f696e6465782e6a7067
+ 2220616c69676e3d72696768742077696474683d223135302220686569676874
+ </hexdata>
+ </sector>
+ <sector>
+ <offset>8585257472</offset>
+ <hexdata>
+ 5745568205000000616430733300000000000000000000000000000000000000
+ 0000000000000000000200003f000000f000000055040000103b000050dcff00
+ 0000000000000000100e01000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000057455682bcbd0800002000000020000000803e0050dcff0000040000
+ 070816000000000000000000000000000000000050dcff0050dcff0000000000
+ 00000000505cc100505c3e010010000007049f00000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ </hexdata>
+ </sector>
+</DISKIMAGE>
diff --git a/tools/regression/geom/MdLoad/Makefile b/tools/regression/geom/MdLoad/Makefile
new file mode 100644
index 000000000000..0a5473ee9b91
--- /dev/null
+++ b/tools/regression/geom/MdLoad/Makefile
@@ -0,0 +1,12 @@
+PROG= MdLoad
+LIBADD= sbuf bsdxml
+NO_OBJ= t
+
+MAN=
+
+
+WARNS?= 4
+.include "bsd.prog.mk"
+
+test: ${PROG}
+ ./${PROG} md34 ../Data/disk.critter.ad0.xml
diff --git a/tools/regression/geom/MdLoad/MdLoad.c b/tools/regression/geom/MdLoad/MdLoad.c
new file mode 100644
index 000000000000..b5d75d4a8267
--- /dev/null
+++ b/tools/regression/geom/MdLoad/MdLoad.c
@@ -0,0 +1,269 @@
+/*-
+ * Copyright (c) 2003 Poul-Henning Kamp
+ * Copyright (c) 2002 Networks Associates Technology, Inc.
+ * All rights reserved.
+ *
+ * This software was developed for the FreeBSD Project by Poul-Henning Kamp
+ * and NAI Labs, the Security Research Division of Network Associates, Inc.
+ * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the
+ * DARPA CHATS research program.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The names of the authors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <paths.h>
+#include <fcntl.h>
+#include <err.h>
+#include <bsdxml.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/queue.h>
+#include <sys/sbuf.h>
+#include <sys/mman.h>
+
+struct sector {
+ LIST_ENTRY(sector) sectors;
+ off_t offset;
+ unsigned char *data;
+};
+
+struct simdisk_softc {
+ int sectorsize;
+ off_t mediasize;
+ off_t lastsector;
+ LIST_HEAD(,sector) sectors;
+ struct sbuf *sbuf;
+ struct sector *sp;
+ u_int fwsectors;
+ u_int fwheads;
+ u_int fwcylinders;
+};
+
+static void
+g_simdisk_insertsector(struct simdisk_softc *sc, struct sector *dsp)
+{
+ struct sector *dsp2, *dsp3;
+
+ if (sc->lastsector < dsp->offset)
+ sc->lastsector = dsp->offset;
+ if (LIST_EMPTY(&sc->sectors)) {
+ LIST_INSERT_HEAD(&sc->sectors, dsp, sectors);
+ return;
+ }
+ dsp3 = NULL;
+ LIST_FOREACH(dsp2, &sc->sectors, sectors) {
+ dsp3 = dsp2;
+ if (dsp2->offset > dsp->offset) {
+ LIST_INSERT_BEFORE(dsp2, dsp, sectors);
+ return;
+ }
+ }
+ LIST_INSERT_AFTER(dsp3, dsp, sectors);
+}
+
+static void
+startElement(void *userData, const char *name, const char **atts __unused)
+{
+ struct simdisk_softc *sc;
+
+ sc = userData;
+ if (!strcasecmp(name, "sector")) {
+ sc->sp = calloc(1, sizeof(*sc->sp) + sc->sectorsize);
+ sc->sp->data = (u_char *)(sc->sp + 1);
+ }
+ sbuf_clear(sc->sbuf);
+}
+
+static void
+endElement(void *userData, const char *name)
+{
+ struct simdisk_softc *sc;
+ char *p;
+ u_char *q;
+ int i, j;
+ off_t o;
+
+ sc = userData;
+
+ if (!strcasecmp(name, "comment")) {
+ sbuf_clear(sc->sbuf);
+ return;
+ }
+ sbuf_finish(sc->sbuf);
+ if (!strcasecmp(name, "sectorsize")) {
+ sc->sectorsize = strtoul(sbuf_data(sc->sbuf), &p, 0);
+ if (*p != '\0')
+ errx(1, "strtoul croaked on sectorsize");
+ } else if (!strcasecmp(name, "mediasize")) {
+ o = strtoull(sbuf_data(sc->sbuf), &p, 0);
+ if (*p != '\0')
+ errx(1, "strtoul croaked on mediasize");
+ if (o > 0)
+ sc->mediasize = o;
+ } else if (!strcasecmp(name, "fwsectors")) {
+ sc->fwsectors = strtoul(sbuf_data(sc->sbuf), &p, 0);
+ if (*p != '\0')
+ errx(1, "strtoul croaked on fwsectors");
+ } else if (!strcasecmp(name, "fwheads")) {
+ sc->fwheads = strtoul(sbuf_data(sc->sbuf), &p, 0);
+ if (*p != '\0')
+ errx(1, "strtoul croaked on fwheads");
+ } else if (!strcasecmp(name, "fwcylinders")) {
+ sc->fwcylinders = strtoul(sbuf_data(sc->sbuf), &p, 0);
+ if (*p != '\0')
+ errx(1, "strtoul croaked on fwcylinders");
+ } else if (!strcasecmp(name, "offset")) {
+ sc->sp->offset= strtoull(sbuf_data(sc->sbuf), &p, 0);
+ if (*p != '\0')
+ errx(1, "strtoul croaked on offset");
+ } else if (!strcasecmp(name, "fill")) {
+ j = strtoul(sbuf_data(sc->sbuf), NULL, 16);
+ memset(sc->sp->data, j, sc->sectorsize);
+ } else if (!strcasecmp(name, "hexdata")) {
+ q = sc->sp->data;
+ p = sbuf_data(sc->sbuf);
+ for (i = 0; i < sc->sectorsize; i++) {
+ if (!isxdigit(*p))
+ errx(1, "I croaked on hexdata %d:(%02x)", i, *p);
+ if (isdigit(*p))
+ j = (*p - '0') << 4;
+ else
+ j = (tolower(*p) - 'a' + 10) << 4;
+ p++;
+ if (!isxdigit(*p))
+ errx(1, "I croaked on hexdata %d:(%02x)", i, *p);
+ if (isdigit(*p))
+ j |= *p - '0';
+ else
+ j |= tolower(*p) - 'a' + 10;
+ p++;
+ *q++ = j;
+ }
+ } else if (!strcasecmp(name, "sector")) {
+ g_simdisk_insertsector(sc, sc->sp);
+ sc->sp = NULL;
+ } else if (!strcasecmp(name, "diskimage")) {
+ } else if (!strcasecmp(name, "FreeBSD")) {
+ } else {
+ printf("<%s>[[%s]]\n", name, sbuf_data(sc->sbuf));
+ }
+ sbuf_clear(sc->sbuf);
+}
+
+static void
+characterData(void *userData, const XML_Char *s, int len)
+{
+ const char *b, *e;
+ struct simdisk_softc *sc;
+
+ sc = userData;
+ b = s;
+ e = s + len - 1;
+ while (isspace(*b) && b < e)
+ b++;
+ while (isspace(*e) && e > b)
+ e--;
+ if (e != b || !isspace(*b))
+ sbuf_bcat(sc->sbuf, b, e - b + 1);
+}
+
+static struct simdisk_softc *
+g_simdisk_xml_load(const char *file)
+{
+ XML_Parser parser = XML_ParserCreate(NULL);
+ struct stat st;
+ char *p;
+ struct simdisk_softc *sc;
+ int fd, i;
+
+ sc = calloc(1, sizeof *sc);
+ sc->sbuf = sbuf_new_auto();
+ LIST_INIT(&sc->sectors);
+ XML_SetUserData(parser, sc);
+ XML_SetElementHandler(parser, startElement, endElement);
+ XML_SetCharacterDataHandler(parser, characterData);
+
+ fd = open(file, O_RDONLY);
+ if (fd < 0)
+ err(1, "%s", file);
+ fstat(fd, &st);
+ p = mmap(NULL, st.st_size, PROT_READ, MAP_NOCORE|MAP_PRIVATE, fd, 0);
+ i = XML_Parse(parser, p, st.st_size, 1);
+ if (i != 1)
+ errx(1, "XML_Parse complains: return %d", i);
+ munmap(p, st.st_size);
+ close(fd);
+ XML_ParserFree(parser);
+ return (sc);
+}
+
+int
+main(int argc, char **argv)
+{
+ struct simdisk_softc *sc;
+ char buf[BUFSIZ];
+ int error, fd;
+ struct sector *dsp;
+
+ if (argc != 3)
+ errx(1, "Usage: %s mddevice xmlfile", argv[0]);
+
+ sc = g_simdisk_xml_load(argv[2]);
+ if (sc->mediasize == 0)
+ sc->mediasize = sc->lastsector + sc->sectorsize * 10;
+ if (sc->sectorsize == 0)
+ sc->sectorsize = 512;
+ sprintf(buf, "mdconfig -a -t malloc -s %jd -S %d",
+ (intmax_t)sc->mediasize / sc->sectorsize, sc->sectorsize);
+ if (sc->fwsectors && sc->fwheads)
+ sprintf(buf + strlen(buf), " -x %d -y %d",
+ sc->fwsectors, sc->fwheads);
+ sprintf(buf + strlen(buf), " -u %s", argv[1]);
+ error = system(buf);
+ if (error)
+ return (error);
+ fd = open(argv[1], O_RDWR);
+ if (fd < 0 && errno == ENOENT) {
+ sprintf(buf, "%s%s", _PATH_DEV, argv[1]);
+ fd = open(buf, O_RDWR);
+ }
+ if (fd < 0)
+ err(1, "Could not open %s", argv[1]);
+ LIST_FOREACH(dsp, &sc->sectors, sectors) {
+ lseek(fd, dsp->offset, SEEK_SET);
+ error = write(fd, dsp->data, sc->sectorsize);
+ if (error != sc->sectorsize)
+ err(1, "write sectordata failed");
+ }
+ close(fd);
+ exit (0);
+}
diff --git a/tools/regression/geom/Ref/disk.apple.xml b/tools/regression/geom/Ref/disk.apple.xml
new file mode 100644
index 000000000000..6fe9a799fde1
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.apple.xml
@@ -0,0 +1,4 @@
+/dev/md34 512 366530560 715880
+/dev/md34s1 512 366481408 715784
+/dev/md34s2 512 32256 63
+/dev/md34s3 512 16384 32
diff --git a/tools/regression/geom/Ref/disk.beast.da0.xml b/tools/regression/geom/Ref/disk.beast.da0.xml
new file mode 100644
index 000000000000..800b42f31952
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.beast.da0.xml
@@ -0,0 +1,4 @@
+/dev/md34 512 5120 10
+/dev/md34a 512 4064280576 7938048
+/dev/md34b 512 270925824 529152
+/dev/md34c 512 4335206400 8467200
diff --git a/tools/regression/geom/Ref/disk.critter.ad0.xml b/tools/regression/geom/Ref/disk.critter.ad0.xml
new file mode 100644
index 000000000000..08dc395fe570
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.critter.ad0.xml
@@ -0,0 +1,10 @@
+/dev/md34 512 2671841280 5218440
+/dev/md34s1 512 20003848704 39070017
+/dev/md34s1a 512 1073741824 2097152
+/dev/md34s1b 512 1073741824 2097152
+/dev/md34s1c 512 20003848704 39070017
+/dev/md34s1d 512 4447175168 8685889
+/dev/md34s1e 512 524288000 1024000
+/dev/md34s1f 512 4294967296 8388608
+/dev/md34s1g 512 3221225472 6291456
+/dev/md34s1h 512 5368709120 10485760
diff --git a/tools/regression/geom/Ref/disk.empty.flp.xml b/tools/regression/geom/Ref/disk.empty.flp.xml
new file mode 100644
index 000000000000..6bf22524e439
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.empty.flp.xml
@@ -0,0 +1 @@
+/dev/md34 512 1474560 2880 0 0 80 2 18
diff --git a/tools/regression/geom/Ref/disk.far.ad0.xml b/tools/regression/geom/Ref/disk.far.ad0.xml
new file mode 100644
index 000000000000..146d4995d83e
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.far.ad0.xml
@@ -0,0 +1,3 @@
+/dev/md34 512 5632 11
+/dev/md34s1 512 296821760 579730
+/dev/md34s2 512 4564740096 8915508
diff --git a/tools/regression/geom/Ref/disk.flat.da1.xml b/tools/regression/geom/Ref/disk.flat.da1.xml
new file mode 100644
index 000000000000..d3264958c920
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.flat.da1.xml
@@ -0,0 +1,11 @@
+/dev/md34 512 37888 74
+/dev/md34a 512 37748736 73728
+/dev/md34b 512 268435456 524288
+/dev/md34c 512 8422686720 16450560
+/dev/md34h 512 8115978240 15851520
+/dev/md34s1 512 18367017984 35873082
+/dev/md34s1b 512 419430400 819200
+/dev/md34s1c 512 18367017984 35873082
+/dev/md34s1e 512 419430400 819200
+/dev/md34s1f 512 1073741824 2097152
+/dev/md34s1g 512 16454415360 32137530
diff --git a/tools/regression/geom/Ref/disk.kern.flp.xml b/tools/regression/geom/Ref/disk.kern.flp.xml
new file mode 100644
index 000000000000..90ddf2276ba1
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.kern.flp.xml
@@ -0,0 +1,4 @@
+/dev/md34 512 5632 11
+/dev/md34a 512 1474560 2880
+/dev/md34b 512 1474560 2880
+/dev/md34c 512 1474560 2880
diff --git a/tools/regression/geom/Ref/disk.msdos.ext.xml b/tools/regression/geom/Ref/disk.msdos.ext.xml
new file mode 100644
index 000000000000..97deb1bae302
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.msdos.ext.xml
@@ -0,0 +1,26 @@
+/dev/md34 512 2327759360 4546405
+/dev/md34s1 512 2146765824 4192902
+/dev/md34s10 512 8193024 16002
+/dev/md34s11 512 8193024 16002
+/dev/md34s12 512 8193024 16002
+/dev/md34s13 512 8193024 16002
+/dev/md34s14 512 8193024 16002
+/dev/md34s15 512 8193024 16002
+/dev/md34s16 512 8193024 16002
+/dev/md34s17 512 8193024 16002
+/dev/md34s18 512 8193024 16002
+/dev/md34s19 512 8193024 16002
+/dev/md34s2 512 427714560 835380
+/dev/md34s20 512 8193024 16002
+/dev/md34s21 512 8193024 16002
+/dev/md34s22 512 8193024 16002
+/dev/md34s23 512 8193024 16002
+/dev/md34s24 512 8193024 16002
+/dev/md34s25 512 8193024 16002
+/dev/md34s26 512 8193024 16002
+/dev/md34s27 512 8193024 16002
+/dev/md34s5 512 8193024 16002
+/dev/md34s6 512 8193024 16002
+/dev/md34s7 512 8193024 16002
+/dev/md34s8 512 8193024 16002
+/dev/md34s9 512 8193024 16002
diff --git a/tools/regression/geom/Ref/disk.msdos.flp.xml b/tools/regression/geom/Ref/disk.msdos.flp.xml
new file mode 100644
index 000000000000..a74c766dcf1d
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.msdos.flp.xml
@@ -0,0 +1 @@
+/dev/md34 512 5632 11
diff --git a/tools/regression/geom/Ref/disk.typo.ad0.xml b/tools/regression/geom/Ref/disk.typo.ad0.xml
new file mode 100644
index 000000000000..df2279fc674b
--- /dev/null
+++ b/tools/regression/geom/Ref/disk.typo.ad0.xml
@@ -0,0 +1,13 @@
+/dev/md34 512 8585262592 16768091
+/dev/md34s1 512 3220406784 6289857
+/dev/md34s1a 512 104857600 204800
+/dev/md34s1b 512 524288000 1024000
+/dev/md34s1c 512 3220406784 6289857
+/dev/md34s1e 512 524288000 1024000
+/dev/md34s1f 512 2066973184 4037057
+/dev/md34s2 512 5364817920 10478160
+/dev/md34s2c 512 5364817920 10478160
+/dev/md34s3 512 8585256960 16768080
+/dev/md34s3a 512 2097152000 4096000
+/dev/md34s3c 512 8585256960 16768080
+/dev/md34s3d 512 6488104960 12672080
diff --git a/tools/regression/geom/RunTest.sh b/tools/regression/geom/RunTest.sh
new file mode 100644
index 000000000000..d8d6f7cf3232
--- /dev/null
+++ b/tools/regression/geom/RunTest.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+MD=34
+TMP=/tmp/$$
+
+set -e
+
+r=0
+
+(cd MdLoad && make) > /dev/null 2>&1
+
+for f in Data/disk.*.xml
+do
+ b=`basename $f`
+ mdconfig -d -u $MD > /dev/null 2>&1 || true
+ if [ -c /dev/md$MD ] ; then
+ sleep 1
+ fi
+ if [ -c /dev/md$MD ] ; then
+ sleep 1
+ fi
+ if [ -c /dev/md$MD ] ; then
+ echo "/dev/md$MD is busy" 1>&2
+ exit 1
+ fi
+ MdLoad/MdLoad md${MD} $f
+ if [ -f Ref/$b ] ; then
+ if diskinfo /dev/md${MD}* |
+ diff -I '$FreeBSD' -u Ref/$b - > $TMP; then
+ echo "PASSED: $b"
+ else
+ echo "FAILED: $b"
+ sed 's/^/ /' $TMP
+ r=2;
+ fi
+ else
+ diskinfo /dev/md${MD}* > Ref/`basename $f`
+ fi
+done
+
+mdconfig -d -u $MD > /dev/null 2>&1 || true
+rm -f $TMP
+exit $r
diff --git a/tools/regression/geom/RunTest.t b/tools/regression/geom/RunTest.t
new file mode 100644
index 000000000000..83ef47635c05
--- /dev/null
+++ b/tools/regression/geom/RunTest.t
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+MD=34
+TMP=/tmp/$$
+
+set -e
+
+# Start from the right directory so we can find all our data files.
+cd `dirname $0`
+
+(cd MdLoad && make) > /dev/null 2>&1
+
+# Print the test header
+echo -n '1..'
+echo `ls -1 Data/disk.*.xml | wc -l`
+
+for f in Data/disk.*.xml
+do
+ b=`basename $f`
+ mdconfig -d -u $MD > /dev/null 2>&1 || true
+ if [ -c /dev/md$MD ] ; then
+ sleep 1
+ fi
+ if [ -c /dev/md$MD ] ; then
+ sleep 1
+ fi
+ if [ -c /dev/md$MD ] ; then
+ echo "Bail out!"
+ echo "/dev/md$MD is busy"
+ exit 1
+ fi
+ MdLoad/MdLoad md${MD} $f
+ if [ -f Ref/$b ] ; then
+ if diskinfo /dev/md${MD}* |
+ diff -I '\$FreeBSD' -u Ref/$b - > $TMP; then
+ echo "ok - $b"
+ else
+ echo "not ok - $b"
+ sed 's/^/# /' $TMP
+ fi
+ else
+ diskinfo /dev/md${MD}* > Ref/`basename $f`
+ fi
+done
+
+mdconfig -d -u $MD > /dev/null 2>&1 || true
+rm -f $TMP
+
+exit 0